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
@@ -0,0 +1,793 @@
1
+ # HoloSphere API Contract
2
+
3
+ **Version**: 1.0.0
4
+ **Date**: 2025-10-07
5
+ **Format**: JavaScript Library API (not REST/HTTP)
6
+
7
+ ## Overview
8
+ This document defines the public API surface for HoloSphere. All methods are async (return Promises) and follow the constitutional design patterns.
9
+
10
+ ---
11
+
12
+ ## 1. Core Initialization
13
+
14
+ ### `new HoloSphere(config)`
15
+ Creates a new HoloSphere instance.
16
+
17
+ **Parameters**:
18
+ ```typescript
19
+ config?: {
20
+ appName: string; // Default: 'holosphere'
21
+ backend?: 'nostr' | 'gundb' | 'activitypub'; // Default: 'nostr'
22
+ logLevel?: 'ERROR' | 'WARN' | 'INFO' | 'DEBUG'; // Default: 'WARN'
23
+
24
+ // Nostr-specific (default backend)
25
+ relays?: string[]; // Nostr relay URLs
26
+ privateKey?: string; // Hex-encoded private key
27
+
28
+ // GunDB-specific
29
+ gundb?: {
30
+ peers?: string[]; // GunDB peer relay URLs
31
+ radisk?: boolean; // Enable radisk (default: true)
32
+ localStorage?: boolean; // Enable localStorage (default: true)
33
+ };
34
+
35
+ // ActivityPub-specific
36
+ activitypub?: {
37
+ serverUrl: string; // ActivityPub server URL (required)
38
+ apiKey?: string; // Server API key for authentication
39
+ };
40
+
41
+ // Common options
42
+ persistence?: boolean; // Enable local persistence (default: true)
43
+ dataDir?: string; // Custom data directory path
44
+ }
45
+ ```
46
+
47
+ **Returns**: `HoloSphere` instance
48
+
49
+ **Example**:
50
+ ```javascript
51
+ // Default (Nostr backend)
52
+ const hs = new HoloSphere({
53
+ appName: 'myapp',
54
+ relays: ['wss://relay.damus.io'],
55
+ logLevel: 'INFO'
56
+ });
57
+
58
+ // GunDB backend
59
+ const hsGun = new HoloSphere({
60
+ appName: 'myapp',
61
+ backend: 'gundb',
62
+ gundb: {
63
+ peers: ['https://gun.example.com/gun'],
64
+ radisk: true
65
+ }
66
+ });
67
+
68
+ // ActivityPub backend (requires running server)
69
+ const hsAP = new HoloSphere({
70
+ appName: 'myapp',
71
+ backend: 'activitypub',
72
+ activitypub: {
73
+ serverUrl: 'http://localhost:3000',
74
+ apiKey: 'your-api-key'
75
+ }
76
+ });
77
+ ```
78
+
79
+ **Errors**:
80
+ - Throws `TypeError` if config is invalid
81
+ - Throws `Error` if GunDB initialization fails
82
+
83
+ **Contract Test**: Create instance with default and custom configs
84
+
85
+ ---
86
+
87
+ ## 2. Spatial Operations
88
+
89
+ ### `holosphere.toHolon(lat, lng, resolution)`
90
+ Convert geographic coordinates to H3 holon ID.
91
+
92
+ **Parameters**:
93
+ - `lat: number` - Latitude (-90 to 90)
94
+ - `lng: number` - Longitude (-180 to 180)
95
+ - `resolution: number` - H3 resolution (0-15)
96
+
97
+ **Returns**: `Promise<string>` - H3 cell ID
98
+
99
+ **Example**:
100
+ ```javascript
101
+ const holonId = await hs.toHolon(37.7749, -122.4194, 9);
102
+ // => "8928342e20fffff"
103
+ ```
104
+
105
+ **Errors**:
106
+ - Throws `RangeError` if lat/lng out of bounds
107
+ - Throws `RangeError` if resolution not 0-15
108
+
109
+ **Contract Test**: Valid coords → valid H3, invalid coords → error
110
+
111
+ ---
112
+
113
+ ### `holosphere.getParents(holonId, maxResolution?)`
114
+ Get all parent holons up the hierarchy.
115
+
116
+ **Parameters**:
117
+ - `holonId: string` - H3 cell ID
118
+ - `maxResolution?: number` - Stop at this resolution (default: 0)
119
+
120
+ **Returns**: `Promise<string[]>` - Array of parent H3 IDs (ascending hierarchy)
121
+
122
+ **Example**:
123
+ ```javascript
124
+ const parents = await hs.getParents("8928342e20fffff", 5);
125
+ // => ["8828342e2ffffff", "8728342e2ffffff", ...]
126
+ ```
127
+
128
+ **Errors**:
129
+ - Throws `Error` if holonId is invalid H3 format
130
+
131
+ **Contract Test**: Valid H3 → parent array, invalid H3 → error
132
+
133
+ ---
134
+
135
+ ### `holosphere.getChildren(holonId)`
136
+ Get all child holons at next resolution level.
137
+
138
+ **Parameters**:
139
+ - `holonId: string` - H3 cell ID
140
+
141
+ **Returns**: `Promise<string[]>` - Array of child H3 IDs (7 children per hexagon)
142
+
143
+ **Example**:
144
+ ```javascript
145
+ const children = await hs.getChildren("8828342e2ffffff");
146
+ // => ["8928342e20fffff", "8928342e21fffff", ...]
147
+ ```
148
+
149
+ **Errors**:
150
+ - Throws `Error` if holonId is invalid or already at resolution 15
151
+
152
+ **Contract Test**: Valid H3 → 7 children, res 15 → error
153
+
154
+ ---
155
+
156
+ ## 3. Data Operations
157
+
158
+ ### `holosphere.write(holonId, lensName, data, options?)`
159
+ Write data to a holon/lens.
160
+
161
+ **Parameters**:
162
+ - `holonId: string` - H3 cell ID or noospheric URI
163
+ - `lensName: string` - Lens name
164
+ - `data: object` - Data to write (must include `id` or will be auto-generated)
165
+ - `options?: object` - Optional configuration
166
+
167
+ **Options**:
168
+ ```typescript
169
+ {
170
+ validate?: boolean; // Validate against schema (default: true if schema exists)
171
+ strict?: boolean; // Strict validation mode (default: false)
172
+ capability?: string; // Capability token for authorization
173
+ }
174
+ ```
175
+
176
+ **Returns**: `Promise<boolean>` - True if write succeeded
177
+
178
+ **Example**:
179
+ ```javascript
180
+ const success = await hs.write(
181
+ "8928342e20fffff",
182
+ "temperature",
183
+ { id: "sensor-1", value: 72.5, unit: "F" }
184
+ );
185
+ // => true
186
+ ```
187
+
188
+ **Errors**:
189
+ - Throws `ValidationError` if strict mode enabled and data invalid
190
+ - Throws `AuthorizationError` if capability token invalid
191
+ - Returns `false` if write fails (Gun error)
192
+
193
+ **Contract Test**: Valid data → true, invalid data (strict) → ValidationError
194
+
195
+ ---
196
+
197
+ ### `holosphere.read(holonId, lensName, dataId?)`
198
+ Read data from a holon/lens.
199
+
200
+ **Parameters**:
201
+ - `holonId: string` - H3 cell ID or noospheric URI
202
+ - `lensName: string` - Lens name
203
+ - `dataId?: string` - Optional: specific data item ID
204
+
205
+ **Returns**: `Promise<object | object[] | null>`
206
+ - If `dataId` provided: single object or null
207
+ - If `dataId` omitted: array of all objects in lens
208
+
209
+ **Example**:
210
+ ```javascript
211
+ // Read specific item
212
+ const temp = await hs.read("8928342e20fffff", "temperature", "sensor-1");
213
+ // => { id: "sensor-1", value: 72.5, unit: "F" }
214
+
215
+ // Read all items in lens
216
+ const allTemps = await hs.read("8928342e20fffff", "temperature");
217
+ // => [{ id: "sensor-1", ... }, { id: "sensor-2", ... }]
218
+ ```
219
+
220
+ **Errors**:
221
+ - Returns `null` if data not found
222
+ - Throws `Error` if holonId or lensName invalid
223
+
224
+ **Contract Test**: Existing data → object, non-existent → null
225
+
226
+ ---
227
+
228
+ ### `holosphere.delete(holonId, lensName, dataId, options?)`
229
+ Delete data from a holon/lens.
230
+
231
+ **Parameters**:
232
+ - `holonId: string` - H3 cell ID or noospheric URI
233
+ - `lensName: string` - Lens name
234
+ - `dataId: string` - Data item ID
235
+ - `options?: object` - Optional configuration
236
+
237
+ **Options**:
238
+ ```typescript
239
+ {
240
+ capability?: string; // Required if deleting data created by others
241
+ }
242
+ ```
243
+
244
+ **Returns**: `Promise<boolean>` - True if delete succeeded
245
+
246
+ **Example**:
247
+ ```javascript
248
+ const deleted = await hs.delete("8928342e20fffff", "temperature", "sensor-1");
249
+ // => true
250
+ ```
251
+
252
+ **Errors**:
253
+ - Throws `AuthorizationError` if deleting others' data without capability token
254
+ - Returns `false` if delete fails
255
+
256
+ **Contract Test**: Own data → true, others' data without token → AuthorizationError
257
+
258
+ ---
259
+
260
+ ### `holosphere.update(holonId, lensName, dataId, updates, options?)`
261
+ Update existing data (merge).
262
+
263
+ **Parameters**:
264
+ - `holonId: string`
265
+ - `lensName: string`
266
+ - `dataId: string`
267
+ - `updates: object` - Fields to merge
268
+ - `options?: object` - Same as write()
269
+
270
+ **Returns**: `Promise<boolean>`
271
+
272
+ **Example**:
273
+ ```javascript
274
+ await hs.update("8928342e20fffff", "temperature", "sensor-1", { value: 73.0 });
275
+ ```
276
+
277
+ **Errors**: Same as write()
278
+
279
+ **Contract Test**: Valid updates → true, non-existent item → false
280
+
281
+ ---
282
+
283
+ ## 4. Schema Operations
284
+
285
+ ### `holosphere.setSchema(lensName, schemaUri, strict?)`
286
+ Define validation schema for a lens.
287
+
288
+ **Parameters**:
289
+ - `lensName: string`
290
+ - `schemaUri: string` - URI pointing to JSON Schema 2019
291
+ - `strict?: boolean` - Validation mode (default: false)
292
+
293
+ **Returns**: `Promise<void>`
294
+
295
+ **Example**:
296
+ ```javascript
297
+ await hs.setSchema(
298
+ "temperature",
299
+ "https://schema.example.com/temperature.json",
300
+ true // Strict mode
301
+ );
302
+ ```
303
+
304
+ **Errors**:
305
+ - Throws `Error` if schema fetch fails
306
+ - Throws `ValidationError` if schema is invalid JSON Schema format
307
+
308
+ **Contract Test**: Valid schema → no error, invalid schema → ValidationError
309
+
310
+ ---
311
+
312
+ ### `holosphere.getSchema(lensName)`
313
+ Retrieve schema for a lens.
314
+
315
+ **Parameters**:
316
+ - `lensName: string`
317
+
318
+ **Returns**: `Promise<object | null>` - JSON Schema object or null if not set
319
+
320
+ **Example**:
321
+ ```javascript
322
+ const schema = await hs.getSchema("temperature");
323
+ // => { type: "object", properties: { ... } }
324
+ ```
325
+
326
+ **Errors**: None (returns null if not found)
327
+
328
+ **Contract Test**: Existing schema → object, non-existent → null
329
+
330
+ ---
331
+
332
+ ### `holosphere.clearSchema(lensName)`
333
+ Remove schema from a lens.
334
+
335
+ **Parameters**:
336
+ - `lensName: string`
337
+
338
+ **Returns**: `Promise<void>`
339
+
340
+ **Example**:
341
+ ```javascript
342
+ await hs.clearSchema("temperature");
343
+ ```
344
+
345
+ **Errors**: None (idempotent)
346
+
347
+ **Contract Test**: After clear, getSchema returns null
348
+
349
+ ---
350
+
351
+ ## 5. Federation Operations
352
+
353
+ ### `holosphere.federate(sourceHolon, targetHolon, lensName, options?)`
354
+ Establish federation between two holons.
355
+
356
+ **Parameters**:
357
+ - `sourceHolon: string` - Source holon ID
358
+ - `targetHolon: string` - Target holon ID
359
+ - `lensName: string` - Lens to federate
360
+ - `options?: object`
361
+
362
+ **Options**:
363
+ ```typescript
364
+ {
365
+ direction?: 'inbound' | 'outbound' | 'bidirectional'; // Default: 'outbound'
366
+ mode?: 'reference' | 'copy'; // Default: 'reference'
367
+ filter?: (data: object) => boolean; // Optional data filter
368
+ }
369
+ ```
370
+
371
+ **Returns**: `Promise<boolean>` - True if federation established
372
+
373
+ **Example**:
374
+ ```javascript
375
+ // Geographic → Noospheric federation
376
+ await hs.federate(
377
+ "8928342e20fffff",
378
+ "nostr://topic/climate",
379
+ "temperature",
380
+ { direction: 'bidirectional' }
381
+ );
382
+ ```
383
+
384
+ **Errors**:
385
+ - Throws `Error` if source === target
386
+ - Returns `false` if federation setup fails
387
+
388
+ **Contract Test**: Valid holons → true, self-federation → error
389
+
390
+ ---
391
+
392
+ ### `holosphere.getFederatedData(holonId, lensName, options?)`
393
+ Query data including federated sources.
394
+
395
+ **Parameters**:
396
+ - `holonId: string`
397
+ - `lensName: string`
398
+ - `options?: object`
399
+
400
+ **Options**:
401
+ ```typescript
402
+ {
403
+ resolveHolograms?: boolean; // Resolve references (default: true)
404
+ deduplicate?: boolean; // Remove duplicates (default: true)
405
+ }
406
+ ```
407
+
408
+ **Returns**: `Promise<object[]>` - Combined local + federated data
409
+
410
+ **Example**:
411
+ ```javascript
412
+ const allData = await hs.getFederatedData("8928342e20fffff", "temperature");
413
+ // => [{ id: "local-1", ... }, { id: "federated-1", _meta: { source: "..." } }]
414
+ ```
415
+
416
+ **Errors**: None (returns empty array if no data)
417
+
418
+ **Contract Test**: Federated holon → includes remote data, non-federated → local only
419
+
420
+ ---
421
+
422
+ ### `holosphere.unfederate(sourceHolon, targetHolon, lensName)`
423
+ Remove federation relationship.
424
+
425
+ **Parameters**:
426
+ - `sourceHolon: string`
427
+ - `targetHolon: string`
428
+ - `lensName: string`
429
+
430
+ **Returns**: `Promise<boolean>`
431
+
432
+ **Example**:
433
+ ```javascript
434
+ await hs.unfederate("8928342e20fffff", "nostr://topic/climate", "temperature");
435
+ ```
436
+
437
+ **Errors**: None (idempotent)
438
+
439
+ **Contract Test**: After unfederate, getFederatedData excludes remote data
440
+
441
+ ---
442
+
443
+ ## 6. Hierarchical Operations
444
+
445
+ ### `holosphere.upcast(holonId, lensName, dataId, options?)`
446
+ Propagate data to parent holons.
447
+
448
+ **Parameters**:
449
+ - `holonId: string` - Source holon
450
+ - `lensName: string`
451
+ - `dataId: string`
452
+ - `options?: object`
453
+
454
+ **Options**:
455
+ ```typescript
456
+ {
457
+ maxLevel?: number; // Max parent levels (default: Infinity)
458
+ operation?: 'summarize' | 'aggregate' | 'concatenate'; // Default: 'concatenate'
459
+ }
460
+ ```
461
+
462
+ **Returns**: `Promise<boolean>`
463
+
464
+ **Example**:
465
+ ```javascript
466
+ await hs.upcast("8928342e20fffff", "events", "event-123", { maxLevel: 3 });
467
+ ```
468
+
469
+ **Errors**:
470
+ - Throws `Error` if holonId is not geographic (noospheric holons have no hierarchy)
471
+
472
+ **Contract Test**: Valid upcast → data in parents, noospheric → error
473
+
474
+ ---
475
+
476
+ ## 7. Subscription Operations
477
+
478
+ ### `holosphere.subscribe(holonId, lensName, callback, options?)`
479
+ Subscribe to real-time data changes.
480
+
481
+ **Parameters**:
482
+ - `holonId: string`
483
+ - `lensName: string`
484
+ - `callback: (data: object, key: string) => void`
485
+ - `options?: object`
486
+
487
+ **Options**:
488
+ ```typescript
489
+ {
490
+ includeFederated?: boolean; // Include federated data (default: false)
491
+ throttle?: number; // Milliseconds between updates (default: 0)
492
+ filter?: (data: object) => boolean;
493
+ }
494
+ ```
495
+
496
+ **Returns**: `{ unsubscribe: () => void }` - Subscription object
497
+
498
+ **Example**:
499
+ ```javascript
500
+ const sub = hs.subscribe("8928342e20fffff", "temperature", (data, key) => {
501
+ console.log("Temperature updated:", data);
502
+ });
503
+
504
+ // Later...
505
+ sub.unsubscribe();
506
+ ```
507
+
508
+ **Errors**:
509
+ - Throws `TypeError` if callback is not a function
510
+
511
+ **Contract Test**: Subscription receives updates, unsubscribe stops updates
512
+
513
+ ---
514
+
515
+ ## 8. Cryptographic Operations
516
+
517
+ ### `holosphere.sign(content, privateKey)`
518
+ Sign content with secp256k1.
519
+
520
+ **Parameters**:
521
+ - `content: object | string` - Content to sign
522
+ - `privateKey: string` - Hex-encoded private key
523
+
524
+ **Returns**: `Promise<string>` - Hex-encoded signature
525
+
526
+ **Example**:
527
+ ```javascript
528
+ const sig = await hs.sign({ message: "Hello" }, privateKey);
529
+ ```
530
+
531
+ **Errors**:
532
+ - Throws `Error` if private key is invalid
533
+ - Lazy loads crypto module on first call
534
+
535
+ **Contract Test**: Valid content → signature, invalid key → error
536
+
537
+ ---
538
+
539
+ ### `holosphere.verify(content, signature, publicKey)`
540
+ Verify signature.
541
+
542
+ **Parameters**:
543
+ - `content: object | string`
544
+ - `signature: string` - Hex-encoded signature
545
+ - `publicKey: string` - Hex-encoded public key
546
+
547
+ **Returns**: `Promise<boolean>` - True if signature valid
548
+
549
+ **Example**:
550
+ ```javascript
551
+ const isValid = await hs.verify({ message: "Hello" }, sig, pubkey);
552
+ ```
553
+
554
+ **Errors**: None (returns false if invalid)
555
+
556
+ **Contract Test**: Valid signature → true, tampered content → false
557
+
558
+ ---
559
+
560
+ ### `holosphere.issueCapability(permissions, scope, recipient, options?)`
561
+ Issue capability token.
562
+
563
+ **Parameters**:
564
+ - `permissions: string[]` - e.g., ['read', 'write', 'delete']
565
+ - `scope: { holonId?: string, lensName?: string }`
566
+ - `recipient: string` - Public key
567
+ - `options?: object`
568
+
569
+ **Options**:
570
+ ```typescript
571
+ {
572
+ expiresIn?: number; // Milliseconds (default: 3600000 = 1 hour)
573
+ issuerKey?: string; // Private key (default: use internal)
574
+ }
575
+ ```
576
+
577
+ **Returns**: `Promise<string>` - Capability token (signed JWT-like format)
578
+
579
+ **Example**:
580
+ ```javascript
581
+ const token = await hs.issueCapability(
582
+ ['read', 'write'],
583
+ { holonId: "8928342e20fffff", lensName: "temperature" },
584
+ recipientPubkey,
585
+ { expiresIn: 86400000 } // 24 hours
586
+ );
587
+ ```
588
+
589
+ **Errors**:
590
+ - Throws `Error` if issuer key invalid
591
+
592
+ **Contract Test**: Valid params → token string, invalid key → error
593
+
594
+ ---
595
+
596
+ ### `holosphere.verifyCapability(token, requiredPermission, scope)`
597
+ Verify capability token.
598
+
599
+ **Parameters**:
600
+ - `token: string`
601
+ - `requiredPermission: string` - e.g., 'delete'
602
+ - `scope: { holonId: string, lensName: string }`
603
+
604
+ **Returns**: `Promise<boolean>` - True if token grants permission
605
+
606
+ **Example**:
607
+ ```javascript
608
+ const canDelete = await hs.verifyCapability(
609
+ token,
610
+ 'delete',
611
+ { holonId: "8928342e20fffff", lensName: "temperature" }
612
+ );
613
+ ```
614
+
615
+ **Errors**: None (returns false if invalid/expired)
616
+
617
+ **Contract Test**: Valid token → true, expired token → false
618
+
619
+ ---
620
+
621
+ ## 9. Social Protocol Operations
622
+
623
+ ### `holosphere.publishNostr(event, holonId, lensName?)`
624
+ Publish Nostr event to holon.
625
+
626
+ **Parameters**:
627
+ - `event: object` - Nostr event (NIP-01 format)
628
+ - `holonId: string`
629
+ - `lensName?: string` - Default: 'social'
630
+
631
+ **Returns**: `Promise<boolean>`
632
+
633
+ **Example**:
634
+ ```javascript
635
+ const nostrEvent = {
636
+ kind: 1,
637
+ content: "Hello from HoloSphere!",
638
+ tags: [["t", "holosphere"]],
639
+ // ... (will be signed automatically)
640
+ };
641
+
642
+ await hs.publishNostr(nostrEvent, "8928342e20fffff");
643
+ ```
644
+
645
+ **Errors**:
646
+ - Throws `ValidationError` if event format invalid
647
+ - Throws `Error` if signature verification fails
648
+
649
+ **Contract Test**: Valid event → true, invalid format → ValidationError
650
+
651
+ ---
652
+
653
+ ### `holosphere.publishActivityPub(object, holonId, lensName?)`
654
+ Publish ActivityPub object to holon.
655
+
656
+ **Parameters**:
657
+ - `object: object` - ActivityPub object
658
+ - `holonId: string`
659
+ - `lensName?: string` - Default: 'social'
660
+
661
+ **Returns**: `Promise<boolean>`
662
+
663
+ **Example**:
664
+ ```javascript
665
+ const apObject = {
666
+ "@context": "https://www.w3.org/ns/activitystreams",
667
+ type: "Note",
668
+ content: "Hello from HoloSphere!",
669
+ // ... (will be signed automatically)
670
+ };
671
+
672
+ await hs.publishActivityPub(apObject, "nostr://topic/general");
673
+ ```
674
+
675
+ **Errors**: Same as publishNostr
676
+
677
+ **Contract Test**: Valid object → true, invalid format → ValidationError
678
+
679
+ ---
680
+
681
+ ### `holosphere.querySocial(holonId, options?)`
682
+ Query social content.
683
+
684
+ **Parameters**:
685
+ - `holonId: string`
686
+ - `options?: object`
687
+
688
+ **Options**:
689
+ ```typescript
690
+ {
691
+ protocol?: 'nostr' | 'activitypub' | 'all'; // Default: 'all'
692
+ accessLevel?: 'public' | 'protected' | 'private' | 'all'; // Default: 'public'
693
+ lensName?: string; // Default: 'social'
694
+ }
695
+ ```
696
+
697
+ **Returns**: `Promise<object[]>` - Array of social content objects
698
+
699
+ **Example**:
700
+ ```javascript
701
+ const posts = await hs.querySocial("8928342e20fffff", { protocol: 'nostr' });
702
+ ```
703
+
704
+ **Errors**: None (returns empty array if no content)
705
+
706
+ **Contract Test**: With content → array, empty → [], filter works
707
+
708
+ ---
709
+
710
+ ## 10. Utility Operations
711
+
712
+ ### `holosphere.isValidH3(holonId)`
713
+ Validate H3 format.
714
+
715
+ **Parameters**:
716
+ - `holonId: string`
717
+
718
+ **Returns**: `boolean`
719
+
720
+ **Example**:
721
+ ```javascript
722
+ hs.isValidH3("8928342e20fffff"); // => true
723
+ hs.isValidH3("invalid"); // => false
724
+ ```
725
+
726
+ **Errors**: None
727
+
728
+ **Contract Test**: Valid H3 → true, invalid → false
729
+
730
+ ---
731
+
732
+ ### `holosphere.metrics()`
733
+ Get usage metrics.
734
+
735
+ **Parameters**: None
736
+
737
+ **Returns**: `object` - Metrics snapshot
738
+
739
+ **Example**:
740
+ ```javascript
741
+ const metrics = hs.metrics();
742
+ // => {
743
+ // writes: 1523,
744
+ // reads: 8942,
745
+ // subscriptions: 12,
746
+ // federations: 3,
747
+ // avgWriteTime: 15.3, // ms
748
+ // avgReadTime: 8.7 // ms
749
+ // }
750
+ ```
751
+
752
+ **Errors**: None
753
+
754
+ **Contract Test**: Returns object with expected properties
755
+
756
+ ---
757
+
758
+ ## Error Types
759
+
760
+ ```typescript
761
+ class ValidationError extends Error {
762
+ constructor(message: string, errors: object[]);
763
+ errors: object[]; // Ajv validation errors
764
+ }
765
+
766
+ class AuthorizationError extends Error {
767
+ constructor(message: string, requiredPermission?: string);
768
+ requiredPermission?: string;
769
+ }
770
+
771
+ class HolosphereError extends Error {
772
+ constructor(message: string, code: string);
773
+ code: string; // Error code for programmatic handling
774
+ }
775
+ ```
776
+
777
+ ---
778
+
779
+ ## Contract Test Summary
780
+
781
+ Each API method must have:
782
+ 1. **Success case test**: Valid inputs → expected output
783
+ 2. **Error case test**: Invalid inputs → expected error
784
+ 3. **Edge case test**: Boundary conditions (empty data, null values, etc.)
785
+ 4. **Integration test**: Cross-module interaction (e.g., write → read → update → delete)
786
+
787
+ **Coverage Target**: 100% of public API methods
788
+
789
+ ---
790
+
791
+ ## Next Steps
792
+ ✅ API contract complete with all methods, parameters, and error handling
793
+ ➡️ Generate quickstart.md with user story scenarios