holosphere 2.0.0-alpha0 → 2.0.0-alpha10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/CHANGELOG.md +473 -0
  2. package/FEATURES.md +431 -0
  3. package/LICENSE +29 -42
  4. package/LICENSE-AGPL.md +180 -0
  5. package/README.md +97 -16
  6. package/dist/2019-D2OG2idw.js +6680 -0
  7. package/dist/2019-D2OG2idw.js.map +1 -0
  8. package/dist/2019-EION3wKo.cjs +8 -0
  9. package/dist/2019-EION3wKo.cjs.map +1 -0
  10. package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
  11. package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
  12. package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
  13. package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
  14. package/dist/browser-BSniCNqO.js +3058 -0
  15. package/dist/browser-BSniCNqO.js.map +1 -0
  16. package/dist/browser-Cq59Ij19.cjs +2 -0
  17. package/dist/browser-Cq59Ij19.cjs.map +1 -0
  18. package/dist/cdn/holosphere.min.js +55 -0
  19. package/dist/cdn/holosphere.min.js.map +1 -0
  20. package/dist/cjs/holosphere.cjs +2 -0
  21. package/dist/cjs/holosphere.cjs.map +1 -0
  22. package/dist/esm/holosphere.js +53 -0
  23. package/dist/esm/holosphere.js.map +1 -0
  24. package/dist/index-DDGt_V9o.cjs +12 -0
  25. package/dist/index-DDGt_V9o.cjs.map +1 -0
  26. package/dist/index-DJXftyvB.js +39841 -0
  27. package/dist/index-DJXftyvB.js.map +1 -0
  28. package/dist/index-DMbdcMtK.cjs +18 -0
  29. package/dist/index-DMbdcMtK.cjs.map +1 -0
  30. package/dist/index-DeZ1xz_s.js +15104 -0
  31. package/dist/index-DeZ1xz_s.js.map +1 -0
  32. package/dist/indexeddb-storage-BFt6hMeF.js +176 -0
  33. package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
  34. package/dist/indexeddb-storage-BK5tv4Sh.cjs +2 -0
  35. package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
  36. package/dist/memory-storage-C9HuoL2E.js +91 -0
  37. package/dist/memory-storage-C9HuoL2E.js.map +1 -0
  38. package/dist/memory-storage-Dao7jfYG.cjs +2 -0
  39. package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
  40. package/dist/secp256k1-BbKzbLtD.cjs +12 -0
  41. package/dist/secp256k1-BbKzbLtD.cjs.map +1 -0
  42. package/dist/secp256k1-CreY7Pcl.js +1890 -0
  43. package/dist/secp256k1-CreY7Pcl.js.map +1 -0
  44. package/docs/CONTRACTS.md +797 -0
  45. package/docs/FOSDEM_PROPOSAL.md +388 -0
  46. package/docs/LOCALFIRST.md +266 -0
  47. package/docs/api/ai_aggregation.js.html +333 -0
  48. package/docs/api/ai_breakdown.js.html +524 -0
  49. package/docs/api/ai_classifier.js.html +231 -0
  50. package/docs/api/ai_council.js.html +246 -0
  51. package/docs/api/ai_embeddings.js.html +304 -0
  52. package/docs/api/ai_federation-ai.js.html +338 -0
  53. package/docs/api/ai_h3-ai.js.html +970 -0
  54. package/docs/api/ai_index.js.html +124 -0
  55. package/docs/api/ai_json-ops.js.html +241 -0
  56. package/docs/api/ai_llm-service.js.html +239 -0
  57. package/docs/api/ai_nl-query.js.html +236 -0
  58. package/docs/api/ai_relationships.js.html +367 -0
  59. package/docs/api/ai_schema-extractor.js.html +235 -0
  60. package/docs/api/ai_spatial.js.html +307 -0
  61. package/docs/api/ai_tts.js.html +214 -0
  62. package/docs/api/content_social-protocols.js.html +180 -0
  63. package/docs/api/core_holosphere.js.html +757 -0
  64. package/docs/api/crypto_nostr-utils.js.html +306 -0
  65. package/docs/api/crypto_secp256k1.js.html +267 -0
  66. package/docs/api/data/search.json +1 -0
  67. package/docs/api/federation_discovery.js.html +337 -0
  68. package/docs/api/federation_handshake.js.html +478 -0
  69. package/docs/api/federation_hologram.js.html +1053 -0
  70. package/docs/api/federation_registry.js.html +389 -0
  71. package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
  72. package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
  73. package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
  74. package/docs/api/global.html +3 -0
  75. package/docs/api/hierarchical_upcast.js.html +128 -0
  76. package/docs/api/index.html +265 -0
  77. package/docs/api/index.js.html +1868 -0
  78. package/docs/api/lib_ai-methods.js.html +660 -0
  79. package/docs/api/lib_contract-methods.js.html +445 -0
  80. package/docs/api/lib_errors.js.html +56 -0
  81. package/docs/api/lib_federation-methods.js.html +348 -0
  82. package/docs/api/lib_index.js.html +33 -0
  83. package/docs/api/module-ai.html +5 -0
  84. package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
  85. package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
  86. package/docs/api/module-ai_aggregation.html +3 -0
  87. package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
  88. package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
  89. package/docs/api/module-ai_breakdown.html +3 -0
  90. package/docs/api/module-ai_classifier-Classifier.html +6 -0
  91. package/docs/api/module-ai_classifier.Classifier.html +3 -0
  92. package/docs/api/module-ai_classifier.html +3 -0
  93. package/docs/api/module-ai_council-Council.html +6 -0
  94. package/docs/api/module-ai_council.Council.html +3 -0
  95. package/docs/api/module-ai_council.html +3 -0
  96. package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
  97. package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
  98. package/docs/api/module-ai_embeddings.html +3 -0
  99. package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
  100. package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
  101. package/docs/api/module-ai_federation-ai.html +3 -0
  102. package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
  103. package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
  104. package/docs/api/module-ai_h3-ai.html +3 -0
  105. package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
  106. package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
  107. package/docs/api/module-ai_json-ops.html +3 -0
  108. package/docs/api/module-ai_llm-service-LLMService.html +5 -0
  109. package/docs/api/module-ai_llm-service.LLMService.html +3 -0
  110. package/docs/api/module-ai_llm-service.html +3 -0
  111. package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
  112. package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
  113. package/docs/api/module-ai_nl-query.html +3 -0
  114. package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
  115. package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
  116. package/docs/api/module-ai_relationships.html +3 -0
  117. package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
  118. package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
  119. package/docs/api/module-ai_schema-extractor.html +3 -0
  120. package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
  121. package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
  122. package/docs/api/module-ai_spatial.html +3 -0
  123. package/docs/api/module-ai_tts-TTS.html +5 -0
  124. package/docs/api/module-ai_tts.TTS.html +3 -0
  125. package/docs/api/module-ai_tts.html +3 -0
  126. package/docs/api/module-content_social-protocols.html +3 -0
  127. package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
  128. package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
  129. package/docs/api/module-core_holosphere.html +3 -0
  130. package/docs/api/module-crypto_nostr-utils.html +3 -0
  131. package/docs/api/module-crypto_secp256k1.html +3 -0
  132. package/docs/api/module-federation_hologram.html +3 -0
  133. package/docs/api/module-hierarchical_upcast.html +3 -0
  134. package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
  135. package/docs/api/module-holosphere.html +3 -0
  136. package/docs/api/module-lib_ai-methods.html +3 -0
  137. package/docs/api/module-lib_contract-methods.html +3 -0
  138. package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
  139. package/docs/api/module-lib_errors-ValidationError.html +3 -0
  140. package/docs/api/module-lib_errors.AuthorizationError.html +3 -0
  141. package/docs/api/module-lib_errors.ValidationError.html +3 -0
  142. package/docs/api/module-lib_errors.html +3 -0
  143. package/docs/api/module-lib_federation-methods.html +3 -0
  144. package/docs/api/module-lib_index.html +3 -0
  145. package/docs/api/module-schema_validator-ValidationError.html +3 -0
  146. package/docs/api/module-schema_validator.ValidationError.html +3 -0
  147. package/docs/api/module-schema_validator.html +3 -0
  148. package/docs/api/module-spatial_h3-operations.html +4 -0
  149. package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
  150. package/docs/api/module-storage_backend-factory.html +3 -0
  151. package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
  152. package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
  153. package/docs/api/module-storage_backend-interface.html +3 -0
  154. package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
  155. package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
  156. package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
  157. package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
  158. package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
  159. package/docs/api/module-storage_backends_activitypub_server.html +3 -0
  160. package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
  161. package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
  162. package/docs/api/module-storage_backends_gundb-backend.html +3 -0
  163. package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
  164. package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
  165. package/docs/api/module-storage_backends_nostr-backend.html +3 -0
  166. package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
  167. package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
  168. package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
  169. package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
  170. package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
  171. package/docs/api/module-storage_filesystem-storage.html +3 -0
  172. package/docs/api/module-storage_global-tables.html +3 -0
  173. package/docs/api/module-storage_gun-async.html +3 -0
  174. package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
  175. package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
  176. package/docs/api/module-storage_gun-auth.html +3 -0
  177. package/docs/api/module-storage_gun-federation.html +3 -0
  178. package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
  179. package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
  180. package/docs/api/module-storage_gun-references.html +3 -0
  181. package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
  182. package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
  183. package/docs/api/module-storage_gun-schema.html +3 -0
  184. package/docs/api/module-storage_gun-wrapper.html +11 -0
  185. package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
  186. package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
  187. package/docs/api/module-storage_indexeddb-storage.html +3 -0
  188. package/docs/api/module-storage_key-storage-simple.html +3 -0
  189. package/docs/api/module-storage_key-storage.html +4 -0
  190. package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
  191. package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
  192. package/docs/api/module-storage_memory-storage.html +3 -0
  193. package/docs/api/module-storage_migration-MigrationTool.html +6 -0
  194. package/docs/api/module-storage_migration.MigrationTool.html +3 -0
  195. package/docs/api/module-storage_migration.html +3 -0
  196. package/docs/api/module-storage_nostr-async.html +18 -0
  197. package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
  198. package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
  199. package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
  200. package/docs/api/module-storage_nostr-client.html +6 -0
  201. package/docs/api/module-storage_nostr-wrapper.html +3 -0
  202. package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
  203. package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
  204. package/docs/api/module-storage_outbox-queue.html +3 -0
  205. package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
  206. package/docs/api/module-storage_persistent-storage.html +4 -0
  207. package/docs/api/module-storage_sync-service-SyncService.html +5 -0
  208. package/docs/api/module-storage_sync-service.SyncService.html +3 -0
  209. package/docs/api/module-storage_sync-service.html +3 -0
  210. package/docs/api/module-storage_unified-storage.html +3 -0
  211. package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
  212. package/docs/api/module-subscriptions_manager.html +3 -0
  213. package/docs/api/schema_validator.js.html +113 -0
  214. package/docs/api/scripts/core.js +726 -0
  215. package/docs/api/scripts/core.min.js +23 -0
  216. package/docs/api/scripts/resize.js +90 -0
  217. package/docs/api/scripts/search.js +265 -0
  218. package/docs/api/scripts/search.min.js +6 -0
  219. package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
  220. package/docs/api/scripts/third-party/fuse.js +9 -0
  221. package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
  222. package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
  223. package/docs/api/scripts/third-party/hljs-original.js +5171 -0
  224. package/docs/api/scripts/third-party/hljs.js +1 -0
  225. package/docs/api/scripts/third-party/popper.js +5 -0
  226. package/docs/api/scripts/third-party/tippy.js +1 -0
  227. package/docs/api/scripts/third-party/tocbot.js +672 -0
  228. package/docs/api/scripts/third-party/tocbot.min.js +1 -0
  229. package/docs/api/spatial_h3-operations.js.html +129 -0
  230. package/docs/api/storage_backend-factory.js.html +133 -0
  231. package/docs/api/storage_backend-interface.js.html +164 -0
  232. package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
  233. package/docs/api/storage_backends_activitypub_server.js.html +678 -0
  234. package/docs/api/storage_backends_gundb-backend.js.html +878 -0
  235. package/docs/api/storage_backends_nostr-backend.js.html +254 -0
  236. package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
  237. package/docs/api/storage_filesystem-storage.js.html +207 -0
  238. package/docs/api/storage_global-tables.js.html +116 -0
  239. package/docs/api/storage_gun-async.js.html +344 -0
  240. package/docs/api/storage_gun-auth.js.html +376 -0
  241. package/docs/api/storage_gun-federation.js.html +788 -0
  242. package/docs/api/storage_gun-references.js.html +212 -0
  243. package/docs/api/storage_gun-schema.js.html +309 -0
  244. package/docs/api/storage_gun-wrapper.js.html +645 -0
  245. package/docs/api/storage_indexeddb-storage.js.html +224 -0
  246. package/docs/api/storage_key-storage-simple.js.html +102 -0
  247. package/docs/api/storage_key-storage.js.html +171 -0
  248. package/docs/api/storage_memory-storage.js.html +128 -0
  249. package/docs/api/storage_migration.js.html +354 -0
  250. package/docs/api/storage_nostr-async.js.html +1076 -0
  251. package/docs/api/storage_nostr-client.js.html +1598 -0
  252. package/docs/api/storage_nostr-wrapper.js.html +218 -0
  253. package/docs/api/storage_outbox-queue.js.html +248 -0
  254. package/docs/api/storage_persistent-storage.js.html +160 -0
  255. package/docs/api/storage_sync-service.js.html +201 -0
  256. package/docs/api/storage_unified-storage.js.html +157 -0
  257. package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
  258. package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
  259. package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
  260. package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  261. package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  262. package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
  263. package/docs/api/subscriptions_manager.js.html +162 -0
  264. package/docs/contracts/api-interface.md +793 -0
  265. package/docs/data-model.md +476 -0
  266. package/docs/gun-async-usage.md +338 -0
  267. package/docs/plan.md +349 -0
  268. package/docs/quickstart.md +674 -0
  269. package/docs/research.md +362 -0
  270. package/docs/spec.md +244 -0
  271. package/docs/storage-backends.md +326 -0
  272. package/docs/tasks.md +947 -0
  273. package/examples/demo.html +47 -0
  274. package/examples/holosphere-widget.js +1242 -0
  275. package/examples/widget-demo.html +274 -0
  276. package/examples/widget.html +703 -0
  277. package/jsdoc.json +26 -0
  278. package/package.json +25 -7
  279. package/src/ai/aggregation.js +13 -2
  280. package/src/ai/breakdown.js +12 -2
  281. package/src/ai/classifier.js +14 -3
  282. package/src/ai/council.js +22 -7
  283. package/src/ai/embeddings.js +37 -15
  284. package/src/ai/federation-ai.js +13 -2
  285. package/src/ai/h3-ai.js +14 -2
  286. package/src/ai/index.js +16 -7
  287. package/src/ai/json-ops.js +18 -5
  288. package/src/ai/llm-service.js +62 -31
  289. package/src/ai/nl-query.js +12 -2
  290. package/src/ai/relationships.js +13 -2
  291. package/src/ai/schema-extractor.js +24 -10
  292. package/src/ai/spatial.js +13 -2
  293. package/src/ai/tts.js +25 -8
  294. package/src/cdn-entry.js +22 -0
  295. package/src/content/social-protocols.js +34 -25
  296. package/src/contracts/abis/Appreciative.json +1280 -0
  297. package/src/contracts/abis/AppreciativeFactory.json +101 -0
  298. package/src/contracts/abis/Bundle.json +1438 -0
  299. package/src/contracts/abis/BundleFactory.json +106 -0
  300. package/src/contracts/abis/Holon.json +881 -0
  301. package/src/contracts/abis/Holons.json +330 -0
  302. package/src/contracts/abis/Managed.json +1262 -0
  303. package/src/contracts/abis/ManagedFactory.json +149 -0
  304. package/src/contracts/abis/Membrane.json +261 -0
  305. package/src/contracts/abis/Splitter.json +1624 -0
  306. package/src/contracts/abis/SplitterFactory.json +220 -0
  307. package/src/contracts/abis/TestToken.json +321 -0
  308. package/src/contracts/abis/Zoned.json +1461 -0
  309. package/src/contracts/abis/ZonedFactory.json +154 -0
  310. package/src/contracts/chain-manager.js +403 -0
  311. package/src/contracts/deployer.js +500 -0
  312. package/src/contracts/event-listener.js +539 -0
  313. package/src/contracts/holon-contracts.js +359 -0
  314. package/src/contracts/index.js +82 -0
  315. package/src/contracts/networks.js +229 -0
  316. package/src/contracts/operations.js +687 -0
  317. package/src/contracts/queries.js +638 -0
  318. package/src/core/holosphere.js +487 -6
  319. package/src/crypto/nostr-utils.js +303 -0
  320. package/src/crypto/secp256k1.js +7 -2
  321. package/src/federation/handshake.js +475 -0
  322. package/src/federation/hologram.js +117 -3
  323. package/src/hierarchical/upcast.js +40 -25
  324. package/src/index.js +1501 -1909
  325. package/src/lib/ai-methods.js +657 -0
  326. package/src/lib/contract-methods.js +442 -0
  327. package/src/lib/errors.js +53 -0
  328. package/src/lib/federation-methods.js +345 -0
  329. package/src/lib/index.js +30 -0
  330. package/src/schema/validator.js +22 -3
  331. package/src/spatial/h3-operations.js +19 -3
  332. package/src/storage/backend-factory.js +7 -2
  333. package/src/storage/backend-interface.js +21 -2
  334. package/src/storage/backends/activitypub/server.js +25 -3
  335. package/src/storage/backends/activitypub-backend.js +25 -2
  336. package/src/storage/backends/gundb-backend.js +692 -50
  337. package/src/storage/backends/nostr-backend.js +116 -1
  338. package/src/storage/filesystem-storage-browser.js +42 -2
  339. package/src/storage/filesystem-storage.js +72 -5
  340. package/src/storage/global-tables.js +35 -3
  341. package/src/storage/gun-async.js +75 -15
  342. package/src/storage/gun-auth.js +373 -0
  343. package/src/storage/gun-federation.js +785 -0
  344. package/src/storage/gun-references.js +209 -0
  345. package/src/storage/gun-schema.js +306 -0
  346. package/src/storage/gun-wrapper.js +475 -54
  347. package/src/storage/indexeddb-storage.js +112 -13
  348. package/src/storage/key-storage-simple.js +32 -9
  349. package/src/storage/key-storage.js +45 -13
  350. package/src/storage/memory-storage.js +68 -2
  351. package/src/storage/migration.js +20 -7
  352. package/src/storage/nostr-async.js +412 -122
  353. package/src/storage/nostr-client.js +749 -76
  354. package/src/storage/nostr-wrapper.js +6 -2
  355. package/src/storage/outbox-queue.js +55 -18
  356. package/src/storage/persistent-storage.js +62 -14
  357. package/src/storage/sync-service.js +51 -17
  358. package/src/storage/unified-storage.js +154 -0
  359. package/src/subscriptions/manager.js +34 -17
  360. package/types/index.d.ts +133 -0
  361. package/vite.config.cdn.js +60 -0
  362. package/tests/unit/ai/aggregation.test.js +0 -295
  363. package/tests/unit/ai/breakdown.test.js +0 -446
  364. package/tests/unit/ai/classifier.test.js +0 -294
  365. package/tests/unit/ai/council.test.js +0 -262
  366. package/tests/unit/ai/embeddings.test.js +0 -384
  367. package/tests/unit/ai/federation-ai.test.js +0 -344
  368. package/tests/unit/ai/h3-ai.test.js +0 -458
  369. package/tests/unit/ai/index.test.js +0 -304
  370. package/tests/unit/ai/json-ops.test.js +0 -307
  371. package/tests/unit/ai/llm-service.test.js +0 -390
  372. package/tests/unit/ai/nl-query.test.js +0 -383
  373. package/tests/unit/ai/relationships.test.js +0 -311
  374. package/tests/unit/ai/schema-extractor.test.js +0 -384
  375. package/tests/unit/ai/spatial.test.js +0 -279
  376. package/tests/unit/ai/tts.test.js +0 -279
  377. package/tests/unit/content.test.js +0 -332
  378. package/tests/unit/contract/core.test.js +0 -88
  379. package/tests/unit/contract/crypto.test.js +0 -198
  380. package/tests/unit/contract/data.test.js +0 -223
  381. package/tests/unit/contract/federation.test.js +0 -181
  382. package/tests/unit/contract/hierarchical.test.js +0 -113
  383. package/tests/unit/contract/schema.test.js +0 -114
  384. package/tests/unit/contract/social.test.js +0 -217
  385. package/tests/unit/contract/spatial.test.js +0 -110
  386. package/tests/unit/contract/subscriptions.test.js +0 -128
  387. package/tests/unit/contract/utils.test.js +0 -159
  388. package/tests/unit/core.test.js +0 -152
  389. package/tests/unit/crypto.test.js +0 -328
  390. package/tests/unit/federation.test.js +0 -234
  391. package/tests/unit/gun-async.test.js +0 -252
  392. package/tests/unit/hierarchical.test.js +0 -399
  393. package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
  394. package/tests/unit/integration/scenario-02-federation.test.js +0 -76
  395. package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
  396. package/tests/unit/integration/scenario-04-validation.test.js +0 -129
  397. package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
  398. package/tests/unit/integration/scenario-06-social.test.js +0 -135
  399. package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
  400. package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
  401. package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
  402. package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
  403. package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
  404. package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
  405. package/tests/unit/performance/benchmark.test.js +0 -85
  406. package/tests/unit/schema.test.js +0 -213
  407. package/tests/unit/spatial.test.js +0 -158
  408. package/tests/unit/storage.test.js +0 -195
  409. package/tests/unit/subscriptions.test.js +0 -328
  410. package/tests/unit/test-data-permanence-debug.js +0 -197
  411. package/tests/unit/test-data-permanence.js +0 -340
  412. package/tests/unit/test-key-persistence-fixed.js +0 -148
  413. package/tests/unit/test-key-persistence.js +0 -172
  414. package/tests/unit/test-relay-permanence.js +0 -376
  415. package/tests/unit/test-second-node.js +0 -95
  416. package/tests/unit/test-simple-write.js +0 -89
  417. /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
  418. /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
@@ -1,328 +0,0 @@
1
- import { describe, it, expect, beforeEach, vi } from 'vitest';
2
- import HoloSphere from '../../src/index.js';
3
-
4
- describe('Unit: Subscriptions Module', () => {
5
- let hs;
6
- let testHolonId;
7
-
8
- beforeEach(async () => {
9
- hs = new HoloSphere({ relays: [], appName: 'test-subscriptions-unit' });
10
- testHolonId = await hs.toHolon(37.7749, -122.4194, 9);
11
- });
12
-
13
- describe('Gun .on() listener attachment', () => {
14
- it('should attach Gun listener on subscribe', () => {
15
- const callback = vi.fn();
16
- const subscription = hs.subscribe(testHolonId, 'test', callback);
17
-
18
- expect(subscription).toHaveProperty('unsubscribe');
19
- expect(typeof subscription.unsubscribe).toBe('function');
20
-
21
- subscription.unsubscribe();
22
- });
23
-
24
- it('should attach listener for specific holon and lens', () => {
25
- const callback = vi.fn();
26
- const subscription = hs.subscribe(testHolonId, 'specific-lens', callback);
27
-
28
- expect(subscription).toBeDefined();
29
- subscription.unsubscribe();
30
- });
31
-
32
- it('should support multiple subscriptions to same holon/lens', () => {
33
- const callback1 = vi.fn();
34
- const callback2 = vi.fn();
35
-
36
- const sub1 = hs.subscribe(testHolonId, 'test', callback1);
37
- const sub2 = hs.subscribe(testHolonId, 'test', callback2);
38
-
39
- expect(sub1).toBeDefined();
40
- expect(sub2).toBeDefined();
41
-
42
- sub1.unsubscribe();
43
- sub2.unsubscribe();
44
- });
45
-
46
- it('should support subscriptions to different lenses', () => {
47
- const callback1 = vi.fn();
48
- const callback2 = vi.fn();
49
-
50
- const sub1 = hs.subscribe(testHolonId, 'lens1', callback1);
51
- const sub2 = hs.subscribe(testHolonId, 'lens2', callback2);
52
-
53
- expect(sub1).toBeDefined();
54
- expect(sub2).toBeDefined();
55
-
56
- sub1.unsubscribe();
57
- sub2.unsubscribe();
58
- });
59
- });
60
-
61
- describe('Callback invocation on data changes', () => {
62
- it('should invoke callback on write', async () => {
63
- const callback = vi.fn();
64
- const subscription = hs.subscribe(testHolonId, 'test', callback);
65
-
66
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'data' });
67
- await new Promise(resolve => setTimeout(resolve, 100));
68
-
69
- expect(callback).toHaveBeenCalled();
70
- subscription.unsubscribe();
71
- });
72
-
73
- it('should invoke callback on update', async () => {
74
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'original' });
75
-
76
- const callback = vi.fn();
77
- const subscription = hs.subscribe(testHolonId, 'test', callback);
78
-
79
- await hs.update(testHolonId, 'test', 'item-1', { value: 'updated' });
80
- await new Promise(resolve => setTimeout(resolve, 100));
81
-
82
- expect(callback).toHaveBeenCalled();
83
- subscription.unsubscribe();
84
- });
85
-
86
- it('should pass data to callback', async () => {
87
- const callback = vi.fn();
88
- const subscription = hs.subscribe(testHolonId, 'test', callback);
89
-
90
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'test-data' });
91
- await new Promise(resolve => setTimeout(resolve, 100));
92
-
93
- expect(callback).toHaveBeenCalledWith(
94
- expect.objectContaining({ id: 'item-1', value: 'test-data' }),
95
- expect.any(String)
96
- );
97
-
98
- subscription.unsubscribe();
99
- });
100
-
101
- it('should pass key to callback', async () => {
102
- const callback = vi.fn();
103
- const subscription = hs.subscribe(testHolonId, 'test', callback);
104
-
105
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'data' });
106
- await new Promise(resolve => setTimeout(resolve, 100));
107
-
108
- expect(callback).toHaveBeenCalledWith(
109
- expect.any(Object),
110
- expect.any(String)
111
- );
112
-
113
- subscription.unsubscribe();
114
- });
115
-
116
- it('should not invoke callback on other lens changes', async () => {
117
- const callback = vi.fn();
118
- const subscription = hs.subscribe(testHolonId, 'lens-a', callback);
119
-
120
- await hs.write(testHolonId, 'lens-b', { id: 'item-1', value: 'data' });
121
- await new Promise(resolve => setTimeout(resolve, 100));
122
-
123
- expect(callback).not.toHaveBeenCalled();
124
- subscription.unsubscribe();
125
- });
126
- });
127
-
128
- describe('Throttling mechanism', () => {
129
- it('should throttle callbacks when throttle option provided', async () => {
130
- const callback = vi.fn();
131
- const subscription = hs.subscribe(testHolonId, 'test', callback, {
132
- throttle: 500 // 500ms throttle
133
- });
134
-
135
- // Rapid writes
136
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'v1' });
137
- await hs.write(testHolonId, 'test', { id: 'item-2', value: 'v2' });
138
- await hs.write(testHolonId, 'test', { id: 'item-3', value: 'v3' });
139
-
140
- await new Promise(resolve => setTimeout(resolve, 100));
141
-
142
- // Should be throttled (fewer calls than writes)
143
- const callCount = callback.mock.calls.length;
144
- expect(callCount).toBeLessThan(3);
145
-
146
- subscription.unsubscribe();
147
- });
148
-
149
- it('should not throttle when throttle is 0', async () => {
150
- const callback = vi.fn();
151
- const subscription = hs.subscribe(testHolonId, 'test', callback, {
152
- throttle: 0
153
- });
154
-
155
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'v1' });
156
- await hs.write(testHolonId, 'test', { id: 'item-2', value: 'v2' });
157
-
158
- await new Promise(resolve => setTimeout(resolve, 100));
159
-
160
- expect(callback.mock.calls.length).toBeGreaterThanOrEqual(2);
161
- subscription.unsubscribe();
162
- });
163
-
164
- it('should respect throttle interval', async () => {
165
- const callback = vi.fn();
166
- const subscription = hs.subscribe(testHolonId, 'test', callback, {
167
- throttle: 200
168
- });
169
-
170
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'v1' });
171
- await new Promise(resolve => setTimeout(resolve, 50));
172
- await hs.write(testHolonId, 'test', { id: 'item-2', value: 'v2' });
173
- await new Promise(resolve => setTimeout(resolve, 250));
174
-
175
- // After throttle period, should allow next callback
176
- expect(callback.mock.calls.length).toBeGreaterThan(0);
177
- subscription.unsubscribe();
178
- });
179
- });
180
-
181
- describe('Filter predicate application', () => {
182
- it('should apply filter function', async () => {
183
- const callback = vi.fn();
184
- const subscription = hs.subscribe(testHolonId, 'test', callback, {
185
- filter: (data) => data.value > 10
186
- });
187
-
188
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 5 });
189
- await hs.write(testHolonId, 'test', { id: 'item-2', value: 15 });
190
-
191
- await new Promise(resolve => setTimeout(resolve, 100));
192
-
193
- // Only item-2 should pass filter
194
- const calls = callback.mock.calls;
195
- const passedFilter = calls.some(call => call[0].value === 15);
196
- const failedFilter = calls.some(call => call[0].value === 5);
197
-
198
- expect(passedFilter).toBe(true);
199
- expect(failedFilter).toBe(false);
200
-
201
- subscription.unsubscribe();
202
- });
203
-
204
- it('should invoke callback only for data matching filter', async () => {
205
- const callback = vi.fn();
206
- const subscription = hs.subscribe(testHolonId, 'test', callback, {
207
- filter: (data) => data.priority === 'high'
208
- });
209
-
210
- await hs.write(testHolonId, 'test', { id: 'item-1', priority: 'low' });
211
- await hs.write(testHolonId, 'test', { id: 'item-2', priority: 'high' });
212
- await hs.write(testHolonId, 'test', { id: 'item-3', priority: 'medium' });
213
-
214
- await new Promise(resolve => setTimeout(resolve, 100));
215
-
216
- const highPriorityCalls = callback.mock.calls.filter(
217
- call => call[0].priority === 'high'
218
- );
219
-
220
- expect(highPriorityCalls.length).toBeGreaterThan(0);
221
- subscription.unsubscribe();
222
- });
223
-
224
- it('should pass all data when no filter provided', async () => {
225
- const callback = vi.fn();
226
- const subscription = hs.subscribe(testHolonId, 'test', callback);
227
-
228
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'a' });
229
- await hs.write(testHolonId, 'test', { id: 'item-2', value: 'b' });
230
-
231
- await new Promise(resolve => setTimeout(resolve, 100));
232
-
233
- expect(callback.mock.calls.length).toBeGreaterThanOrEqual(2);
234
- subscription.unsubscribe();
235
- });
236
- });
237
-
238
- describe('Unsubscribe cleanup', () => {
239
- it('should stop callbacks after unsubscribe', async () => {
240
- const callback = vi.fn();
241
- const subscription = hs.subscribe(testHolonId, 'test', callback);
242
-
243
- subscription.unsubscribe();
244
-
245
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'data' });
246
- await new Promise(resolve => setTimeout(resolve, 100));
247
-
248
- expect(callback).not.toHaveBeenCalled();
249
- });
250
-
251
- it('should remove Gun listener on unsubscribe', async () => {
252
- const callback = vi.fn();
253
- const subscription = hs.subscribe(testHolonId, 'test', callback);
254
-
255
- await hs.write(testHolonId, 'test', { id: 'before', value: 'before' });
256
- await new Promise(resolve => setTimeout(resolve, 100));
257
-
258
- const beforeCount = callback.mock.calls.length;
259
-
260
- subscription.unsubscribe();
261
-
262
- await hs.write(testHolonId, 'test', { id: 'after', value: 'after' });
263
- await new Promise(resolve => setTimeout(resolve, 100));
264
-
265
- expect(callback.mock.calls.length).toBe(beforeCount);
266
- });
267
-
268
- it('should handle multiple unsubscribe calls gracefully', () => {
269
- const callback = vi.fn();
270
- const subscription = hs.subscribe(testHolonId, 'test', callback);
271
-
272
- subscription.unsubscribe();
273
- subscription.unsubscribe();
274
- subscription.unsubscribe();
275
-
276
- // Should not throw error
277
- });
278
-
279
- it('should cleanup individual subscriptions independently', async () => {
280
- const callback1 = vi.fn();
281
- const callback2 = vi.fn();
282
-
283
- const sub1 = hs.subscribe(testHolonId, 'test', callback1);
284
- const sub2 = hs.subscribe(testHolonId, 'test', callback2);
285
-
286
- sub1.unsubscribe();
287
-
288
- // Small delay to ensure unsubscribe is fully processed
289
- await new Promise(resolve => setTimeout(resolve, 10));
290
-
291
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 'data' });
292
- await new Promise(resolve => setTimeout(resolve, 100));
293
-
294
- expect(callback1).not.toHaveBeenCalled();
295
- expect(callback2).toHaveBeenCalled();
296
-
297
- sub2.unsubscribe();
298
- });
299
- });
300
-
301
- describe('Subscription options', () => {
302
- it('should accept includeFederated option', () => {
303
- const callback = vi.fn();
304
- const subscription = hs.subscribe(testHolonId, 'test', callback, {
305
- includeFederated: true
306
- });
307
-
308
- expect(subscription).toBeDefined();
309
- subscription.unsubscribe();
310
- });
311
-
312
- it('should combine throttle and filter options', async () => {
313
- const callback = vi.fn();
314
- const subscription = hs.subscribe(testHolonId, 'test', callback, {
315
- throttle: 100,
316
- filter: (data) => data.value > 5
317
- });
318
-
319
- await hs.write(testHolonId, 'test', { id: 'item-1', value: 3 });
320
- await hs.write(testHolonId, 'test', { id: 'item-2', value: 10 });
321
-
322
- await new Promise(resolve => setTimeout(resolve, 200));
323
-
324
- expect(callback.mock.calls.length).toBeGreaterThan(0);
325
- subscription.unsubscribe();
326
- });
327
- });
328
- });
@@ -1,197 +0,0 @@
1
- /**
2
- * Debug Data Permanence Test
3
- * Helps identify where in the stack data flow is breaking
4
- */
5
-
6
- import { HoloSphere } from './dist/esm/holosphere.js';
7
-
8
- // Relay configuration - use env vars or these defaults
9
- const RELAYS = process.env.HOLOSPHERE_RELAYS?.split(',') || [
10
- 'wss://relay.holons.io',
11
- 'wss://relay.nostr.band',
12
- ];
13
-
14
- console.log('\n=== DATA PERMANENCE DEBUG TEST ===\n');
15
-
16
- const config = {
17
- appName: 'debug-test',
18
- relays: RELAYS,
19
- logLevel: 'DEBUG' // More verbose logging
20
- };
21
-
22
- console.log('Configuration:', JSON.stringify(config, null, 2));
23
-
24
- const hs = new HoloSphere(config);
25
-
26
- console.log(`\nInitialized HoloSphere`);
27
- console.log(`Public Key: ${hs.client.publicKey}`);
28
- console.log(`Private Key (first 8 chars): ${hs.client.privateKey.substring(0, 8)}...`);
29
- console.log(`Relays: ${config.relays.join(', ')}`);
30
-
31
- // Wait for initialization
32
- await new Promise(resolve => setTimeout(resolve, 2000));
33
-
34
- console.log('\n--- TEST 1: Write and immediate read ---');
35
-
36
- const testData = {
37
- id: 'test-123',
38
- message: 'Hello, world!',
39
- timestamp: Date.now()
40
- };
41
-
42
- const holonId = 'global://test';
43
- const lensName = 'data';
44
-
45
- console.log(`\nWriting data:`);
46
- console.log(` Holon: ${holonId}`);
47
- console.log(` Lens: ${lensName}`);
48
- console.log(` Data:`, JSON.stringify(testData, null, 2));
49
-
50
- try {
51
- const writeResult = await hs.write(holonId, lensName, testData);
52
- console.log(`\nWrite result: ${writeResult}`);
53
-
54
- if (!writeResult) {
55
- console.log('\n❌ Write failed - checking client state...');
56
- console.log(`Client has ${hs.client._eventCache.size} cached events`);
57
- }
58
- } catch (error) {
59
- console.error('\n❌ Write error:', error);
60
- }
61
-
62
- console.log('\n--- Checking client cache ---');
63
- console.log(`Cache size: ${hs.client._eventCache.size}`);
64
-
65
- // Print cache contents
66
- let cacheIndex = 0;
67
- for (const [key, value] of hs.client._eventCache.entries()) {
68
- console.log(`\nCache entry ${++cacheIndex}:`);
69
- console.log(` Key: ${key}`);
70
- console.log(` Value:`, JSON.stringify(value, null, 2));
71
- }
72
-
73
- console.log('\n--- Checking persistent storage ---');
74
- if (hs.client.persistentStorage) {
75
- try {
76
- const allEvents = await hs.client.persistentStorage.getAll('');
77
- console.log(`Persistent storage has ${allEvents.length} events`);
78
-
79
- for (let i = 0; i < allEvents.length; i++) {
80
- const event = allEvents[i];
81
- console.log(`\nEvent ${i + 1}:`);
82
- console.log(` ID: ${event.id}`);
83
- console.log(` Kind: ${event.kind}`);
84
- console.log(` Created: ${new Date(event.created_at * 1000).toISOString()}`);
85
- const dTag = event.tags.find(t => t[0] === 'd');
86
- if (dTag) console.log(` D-tag: ${dTag[1]}`);
87
- console.log(` Content preview: ${event.content.substring(0, 100)}...`);
88
- }
89
- } catch (error) {
90
- console.log('Error reading persistent storage:', error);
91
- }
92
- } else {
93
- console.log('No persistent storage initialized');
94
- }
95
-
96
- console.log('\n--- TEST 2: Read data back ---');
97
-
98
- try {
99
- console.log(`\nReading from:`);
100
- console.log(` Holon: ${holonId}`);
101
- console.log(` Lens: ${lensName}`);
102
-
103
- const readData = await hs.read(holonId, lensName);
104
-
105
- console.log(`\nRead result:`, JSON.stringify(readData, null, 2));
106
-
107
- if (!readData || readData.length === 0) {
108
- console.log('\n❌ No data returned');
109
-
110
- // Try to understand why
111
- console.log('\n--- Debugging read operation ---');
112
-
113
- // Build the path manually
114
- const path = `${config.appName}/${encodeURIComponent(holonId)}/${encodeURIComponent(lensName)}`;
115
- console.log(`Expected path: ${path}`);
116
-
117
- // Check what the filter would be
118
- console.log(`\nFilter that would be used:`);
119
- console.log(` kinds: [30000]`);
120
- console.log(` limit: 100`);
121
-
122
- // Check if we can find matching events in cache
123
- console.log(`\nSearching cache for matching events...`);
124
- let foundInCache = false;
125
- for (const [key, value] of hs.client._eventCache.entries()) {
126
- if (value.events) {
127
- for (const event of value.events) {
128
- const dTag = event.tags.find(t => t[0] === 'd');
129
- if (dTag && dTag[1].startsWith(path)) {
130
- console.log(`\n✓ Found matching event in cache!`);
131
- console.log(` D-tag: ${dTag[1]}`);
132
- console.log(` Content: ${event.content}`);
133
- foundInCache = true;
134
- }
135
- }
136
- }
137
- }
138
-
139
- if (!foundInCache) {
140
- console.log('No matching events found in cache');
141
- }
142
- } else {
143
- console.log(`\n✅ Found ${readData.length} record(s)`);
144
- const match = readData.find(d => d.id === testData.id);
145
- if (match) {
146
- console.log('✅ Test data found in results!');
147
- } else {
148
- console.log('❌ Test data NOT in results');
149
- }
150
- }
151
- } catch (error) {
152
- console.error('\n❌ Read error:', error);
153
- }
154
-
155
- console.log('\n--- TEST 3: Direct client query ---');
156
-
157
- try {
158
- const path = `${config.appName}/${encodeURIComponent(holonId)}/${encodeURIComponent(lensName)}`;
159
- console.log(`\nQuerying with filter:`);
160
-
161
- const filter = {
162
- kinds: [30000],
163
- limit: 100
164
- };
165
-
166
- console.log(JSON.stringify(filter, null, 2));
167
-
168
- const events = await hs.client.query(filter, { timeout: 5000 });
169
-
170
- console.log(`\nQuery returned ${events.length} events`);
171
-
172
- for (let i = 0; i < events.length; i++) {
173
- const event = events[i];
174
- console.log(`\nEvent ${i + 1}:`);
175
- console.log(` ID: ${event.id.substring(0, 16)}...`);
176
- console.log(` Kind: ${event.kind}`);
177
- console.log(` Pubkey: ${event.pubkey.substring(0, 16)}...`);
178
- const dTag = event.tags.find(t => t[0] === 'd');
179
- if (dTag) console.log(` D-tag: ${dTag[1]}`);
180
- console.log(` Content: ${event.content.substring(0, 100)}...`);
181
- }
182
-
183
- // Filter by path prefix
184
- const matching = events.filter(event => {
185
- const dTag = event.tags.find(t => t[0] === 'd');
186
- return dTag && dTag[1] && dTag[1].startsWith(path);
187
- });
188
-
189
- console.log(`\n${matching.length} events match our path prefix`);
190
-
191
- } catch (error) {
192
- console.error('\n❌ Query error:', error);
193
- }
194
-
195
- console.log('\n\n=== DEBUG TEST COMPLETE ===\n');
196
-
197
- setTimeout(() => process.exit(0), 1000);