holosphere 2.0.0-alpha8 → 2.0.0-alpha9

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 (321) hide show
  1. package/CHANGELOG.md +446 -0
  2. package/FEATURES.md +431 -0
  3. package/LICENSE +29 -166
  4. package/LICENSE-AGPL.md +180 -0
  5. package/dist/cdn/holosphere.min.js +55 -0
  6. package/dist/cdn/holosphere.min.js.map +1 -0
  7. package/dist/cjs/holosphere.cjs +1 -1
  8. package/dist/esm/holosphere.js +1 -1
  9. package/dist/{index-CKffQDmQ.cjs → index-DDGt_V9o.cjs} +2 -2
  10. package/dist/{index-CKffQDmQ.cjs.map → index-DDGt_V9o.cjs.map} +1 -1
  11. package/dist/{index-4XHHKe6S.js → index-DJXftyvB.js} +1905 -337
  12. package/dist/index-DJXftyvB.js.map +1 -0
  13. package/dist/{index-Dz5kOZMI.cjs → index-DMbdcMtK.cjs} +17 -4
  14. package/dist/index-DMbdcMtK.cjs.map +1 -0
  15. package/dist/{index-BjP1TXGz.js → index-DeZ1xz_s.js} +2 -2
  16. package/dist/{index-BjP1TXGz.js.map → index-DeZ1xz_s.js.map} +1 -1
  17. package/dist/{indexeddb-storage-lExjjFlV.js → indexeddb-storage-BFt6hMeF.js} +48 -4
  18. package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
  19. package/dist/{indexeddb-storage-DD7EFBVc.cjs → indexeddb-storage-BK5tv4Sh.cjs} +2 -2
  20. package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
  21. package/dist/{memory-storage-C68adso2.js → memory-storage-C9HuoL2E.js} +44 -4
  22. package/dist/memory-storage-C9HuoL2E.js.map +1 -0
  23. package/dist/{memory-storage-DD_6yyXT.cjs → memory-storage-Dao7jfYG.cjs} +2 -2
  24. package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
  25. package/dist/{secp256k1-DYELiqgx.cjs → secp256k1-BbKzbLtD.cjs} +2 -2
  26. package/dist/{secp256k1-DYELiqgx.cjs.map → secp256k1-BbKzbLtD.cjs.map} +1 -1
  27. package/dist/{secp256k1-OM8siPyy.js → secp256k1-CreY7Pcl.js} +2 -2
  28. package/dist/{secp256k1-OM8siPyy.js.map → secp256k1-CreY7Pcl.js.map} +1 -1
  29. package/docs/api/ai_aggregation.js.html +333 -0
  30. package/docs/api/ai_breakdown.js.html +524 -0
  31. package/docs/api/ai_classifier.js.html +231 -0
  32. package/docs/api/ai_council.js.html +246 -0
  33. package/docs/api/ai_embeddings.js.html +304 -0
  34. package/docs/api/ai_federation-ai.js.html +338 -0
  35. package/docs/api/ai_h3-ai.js.html +970 -0
  36. package/docs/api/ai_index.js.html +124 -0
  37. package/docs/api/ai_json-ops.js.html +241 -0
  38. package/docs/api/ai_llm-service.js.html +239 -0
  39. package/docs/api/ai_nl-query.js.html +236 -0
  40. package/docs/api/ai_relationships.js.html +367 -0
  41. package/docs/api/ai_schema-extractor.js.html +235 -0
  42. package/docs/api/ai_spatial.js.html +307 -0
  43. package/docs/api/ai_tts.js.html +214 -0
  44. package/docs/api/content_social-protocols.js.html +180 -0
  45. package/docs/api/core_holosphere.js.html +757 -0
  46. package/docs/api/crypto_nostr-utils.js.html +306 -0
  47. package/docs/api/crypto_secp256k1.js.html +267 -0
  48. package/docs/api/data/search.json +1 -0
  49. package/docs/api/federation_discovery.js.html +337 -0
  50. package/docs/api/federation_handshake.js.html +478 -0
  51. package/docs/api/federation_hologram.js.html +1053 -0
  52. package/docs/api/federation_registry.js.html +389 -0
  53. package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
  54. package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
  55. package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
  56. package/docs/api/global.html +3 -0
  57. package/docs/api/hierarchical_upcast.js.html +128 -0
  58. package/docs/api/index.html +265 -0
  59. package/docs/api/index.js.html +1868 -0
  60. package/docs/api/lib_ai-methods.js.html +660 -0
  61. package/docs/api/lib_contract-methods.js.html +445 -0
  62. package/docs/api/lib_errors.js.html +56 -0
  63. package/docs/api/lib_federation-methods.js.html +348 -0
  64. package/docs/api/lib_index.js.html +33 -0
  65. package/docs/api/module-ai.html +5 -0
  66. package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
  67. package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
  68. package/docs/api/module-ai_aggregation.html +3 -0
  69. package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
  70. package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
  71. package/docs/api/module-ai_breakdown.html +3 -0
  72. package/docs/api/module-ai_classifier-Classifier.html +6 -0
  73. package/docs/api/module-ai_classifier.Classifier.html +3 -0
  74. package/docs/api/module-ai_classifier.html +3 -0
  75. package/docs/api/module-ai_council-Council.html +6 -0
  76. package/docs/api/module-ai_council.Council.html +3 -0
  77. package/docs/api/module-ai_council.html +3 -0
  78. package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
  79. package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
  80. package/docs/api/module-ai_embeddings.html +3 -0
  81. package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
  82. package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
  83. package/docs/api/module-ai_federation-ai.html +3 -0
  84. package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
  85. package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
  86. package/docs/api/module-ai_h3-ai.html +3 -0
  87. package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
  88. package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
  89. package/docs/api/module-ai_json-ops.html +3 -0
  90. package/docs/api/module-ai_llm-service-LLMService.html +5 -0
  91. package/docs/api/module-ai_llm-service.LLMService.html +3 -0
  92. package/docs/api/module-ai_llm-service.html +3 -0
  93. package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
  94. package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
  95. package/docs/api/module-ai_nl-query.html +3 -0
  96. package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
  97. package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
  98. package/docs/api/module-ai_relationships.html +3 -0
  99. package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
  100. package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
  101. package/docs/api/module-ai_schema-extractor.html +3 -0
  102. package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
  103. package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
  104. package/docs/api/module-ai_spatial.html +3 -0
  105. package/docs/api/module-ai_tts-TTS.html +5 -0
  106. package/docs/api/module-ai_tts.TTS.html +3 -0
  107. package/docs/api/module-ai_tts.html +3 -0
  108. package/docs/api/module-content_social-protocols.html +3 -0
  109. package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
  110. package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
  111. package/docs/api/module-core_holosphere.html +3 -0
  112. package/docs/api/module-crypto_nostr-utils.html +3 -0
  113. package/docs/api/module-crypto_secp256k1.html +3 -0
  114. package/docs/api/module-federation_hologram.html +3 -0
  115. package/docs/api/module-hierarchical_upcast.html +3 -0
  116. package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
  117. package/docs/api/module-holosphere.html +3 -0
  118. package/docs/api/module-lib_ai-methods.html +3 -0
  119. package/docs/api/module-lib_contract-methods.html +3 -0
  120. package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
  121. package/docs/api/module-lib_errors-ValidationError.html +3 -0
  122. package/docs/api/module-lib_errors.AuthorizationError.html +3 -0
  123. package/docs/api/module-lib_errors.ValidationError.html +3 -0
  124. package/docs/api/module-lib_errors.html +3 -0
  125. package/docs/api/module-lib_federation-methods.html +3 -0
  126. package/docs/api/module-lib_index.html +3 -0
  127. package/docs/api/module-schema_validator-ValidationError.html +3 -0
  128. package/docs/api/module-schema_validator.ValidationError.html +3 -0
  129. package/docs/api/module-schema_validator.html +3 -0
  130. package/docs/api/module-spatial_h3-operations.html +4 -0
  131. package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
  132. package/docs/api/module-storage_backend-factory.html +3 -0
  133. package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
  134. package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
  135. package/docs/api/module-storage_backend-interface.html +3 -0
  136. package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
  137. package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
  138. package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
  139. package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
  140. package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
  141. package/docs/api/module-storage_backends_activitypub_server.html +3 -0
  142. package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
  143. package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
  144. package/docs/api/module-storage_backends_gundb-backend.html +3 -0
  145. package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
  146. package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
  147. package/docs/api/module-storage_backends_nostr-backend.html +3 -0
  148. package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
  149. package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
  150. package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
  151. package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
  152. package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
  153. package/docs/api/module-storage_filesystem-storage.html +3 -0
  154. package/docs/api/module-storage_global-tables.html +3 -0
  155. package/docs/api/module-storage_gun-async.html +3 -0
  156. package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
  157. package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
  158. package/docs/api/module-storage_gun-auth.html +3 -0
  159. package/docs/api/module-storage_gun-federation.html +3 -0
  160. package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
  161. package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
  162. package/docs/api/module-storage_gun-references.html +3 -0
  163. package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
  164. package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
  165. package/docs/api/module-storage_gun-schema.html +3 -0
  166. package/docs/api/module-storage_gun-wrapper.html +11 -0
  167. package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
  168. package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
  169. package/docs/api/module-storage_indexeddb-storage.html +3 -0
  170. package/docs/api/module-storage_key-storage-simple.html +3 -0
  171. package/docs/api/module-storage_key-storage.html +4 -0
  172. package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
  173. package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
  174. package/docs/api/module-storage_memory-storage.html +3 -0
  175. package/docs/api/module-storage_migration-MigrationTool.html +6 -0
  176. package/docs/api/module-storage_migration.MigrationTool.html +3 -0
  177. package/docs/api/module-storage_migration.html +3 -0
  178. package/docs/api/module-storage_nostr-async.html +18 -0
  179. package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
  180. package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
  181. package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
  182. package/docs/api/module-storage_nostr-client.html +6 -0
  183. package/docs/api/module-storage_nostr-wrapper.html +3 -0
  184. package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
  185. package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
  186. package/docs/api/module-storage_outbox-queue.html +3 -0
  187. package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
  188. package/docs/api/module-storage_persistent-storage.html +4 -0
  189. package/docs/api/module-storage_sync-service-SyncService.html +5 -0
  190. package/docs/api/module-storage_sync-service.SyncService.html +3 -0
  191. package/docs/api/module-storage_sync-service.html +3 -0
  192. package/docs/api/module-storage_unified-storage.html +3 -0
  193. package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
  194. package/docs/api/module-subscriptions_manager.html +3 -0
  195. package/docs/api/schema_validator.js.html +113 -0
  196. package/docs/api/scripts/core.js +726 -0
  197. package/docs/api/scripts/core.min.js +23 -0
  198. package/docs/api/scripts/resize.js +90 -0
  199. package/docs/api/scripts/search.js +265 -0
  200. package/docs/api/scripts/search.min.js +6 -0
  201. package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
  202. package/docs/api/scripts/third-party/fuse.js +9 -0
  203. package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
  204. package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
  205. package/docs/api/scripts/third-party/hljs-original.js +5171 -0
  206. package/docs/api/scripts/third-party/hljs.js +1 -0
  207. package/docs/api/scripts/third-party/popper.js +5 -0
  208. package/docs/api/scripts/third-party/tippy.js +1 -0
  209. package/docs/api/scripts/third-party/tocbot.js +672 -0
  210. package/docs/api/scripts/third-party/tocbot.min.js +1 -0
  211. package/docs/api/spatial_h3-operations.js.html +129 -0
  212. package/docs/api/storage_backend-factory.js.html +133 -0
  213. package/docs/api/storage_backend-interface.js.html +164 -0
  214. package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
  215. package/docs/api/storage_backends_activitypub_server.js.html +678 -0
  216. package/docs/api/storage_backends_gundb-backend.js.html +878 -0
  217. package/docs/api/storage_backends_nostr-backend.js.html +254 -0
  218. package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
  219. package/docs/api/storage_filesystem-storage.js.html +207 -0
  220. package/docs/api/storage_global-tables.js.html +116 -0
  221. package/docs/api/storage_gun-async.js.html +344 -0
  222. package/docs/api/storage_gun-auth.js.html +376 -0
  223. package/docs/api/storage_gun-federation.js.html +788 -0
  224. package/docs/api/storage_gun-references.js.html +212 -0
  225. package/docs/api/storage_gun-schema.js.html +309 -0
  226. package/docs/api/storage_gun-wrapper.js.html +645 -0
  227. package/docs/api/storage_indexeddb-storage.js.html +224 -0
  228. package/docs/api/storage_key-storage-simple.js.html +102 -0
  229. package/docs/api/storage_key-storage.js.html +171 -0
  230. package/docs/api/storage_memory-storage.js.html +128 -0
  231. package/docs/api/storage_migration.js.html +354 -0
  232. package/docs/api/storage_nostr-async.js.html +1076 -0
  233. package/docs/api/storage_nostr-client.js.html +1598 -0
  234. package/docs/api/storage_nostr-wrapper.js.html +218 -0
  235. package/docs/api/storage_outbox-queue.js.html +248 -0
  236. package/docs/api/storage_persistent-storage.js.html +160 -0
  237. package/docs/api/storage_sync-service.js.html +201 -0
  238. package/docs/api/storage_unified-storage.js.html +157 -0
  239. package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
  240. package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
  241. package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
  242. package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
  243. package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
  244. package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
  245. package/docs/api/subscriptions_manager.js.html +162 -0
  246. package/jsdoc.json +26 -0
  247. package/package.json +14 -3
  248. package/src/ai/aggregation.js +13 -2
  249. package/src/ai/breakdown.js +12 -2
  250. package/src/ai/classifier.js +14 -3
  251. package/src/ai/council.js +22 -7
  252. package/src/ai/embeddings.js +37 -15
  253. package/src/ai/federation-ai.js +13 -2
  254. package/src/ai/h3-ai.js +14 -2
  255. package/src/ai/index.js +16 -7
  256. package/src/ai/json-ops.js +18 -5
  257. package/src/ai/llm-service.js +62 -31
  258. package/src/ai/nl-query.js +12 -2
  259. package/src/ai/relationships.js +13 -2
  260. package/src/ai/schema-extractor.js +24 -10
  261. package/src/ai/spatial.js +13 -2
  262. package/src/ai/tts.js +25 -8
  263. package/src/content/social-protocols.js +34 -25
  264. package/src/contracts/chain-manager.js +68 -40
  265. package/src/contracts/deployer.js +70 -42
  266. package/src/contracts/event-listener.js +61 -29
  267. package/src/contracts/holon-contracts.js +46 -31
  268. package/src/contracts/index.js +5 -6
  269. package/src/contracts/networks.js +19 -14
  270. package/src/contracts/operations.js +58 -41
  271. package/src/contracts/queries.js +54 -20
  272. package/src/core/holosphere.js +35 -6
  273. package/src/crypto/nostr-utils.js +82 -76
  274. package/src/crypto/secp256k1.js +7 -2
  275. package/src/federation/handshake.js +7 -7
  276. package/src/federation/hologram.js +9 -1
  277. package/src/hierarchical/upcast.js +34 -20
  278. package/src/index.js +655 -5
  279. package/src/lib/ai-methods.js +352 -3
  280. package/src/lib/contract-methods.js +152 -3
  281. package/src/lib/errors.js +31 -1
  282. package/src/lib/federation-methods.js +110 -3
  283. package/src/lib/index.js +9 -5
  284. package/src/schema/validator.js +22 -3
  285. package/src/spatial/h3-operations.js +17 -1
  286. package/src/storage/backend-factory.js +7 -2
  287. package/src/storage/backend-interface.js +21 -2
  288. package/src/storage/backends/activitypub/server.js +25 -3
  289. package/src/storage/backends/activitypub-backend.js +25 -2
  290. package/src/storage/backends/gundb-backend.js +29 -2
  291. package/src/storage/backends/nostr-backend.js +116 -1
  292. package/src/storage/filesystem-storage-browser.js +42 -2
  293. package/src/storage/filesystem-storage.js +72 -5
  294. package/src/storage/global-tables.js +7 -2
  295. package/src/storage/gun-async.js +20 -11
  296. package/src/storage/gun-auth.js +15 -4
  297. package/src/storage/gun-federation.js +14 -5
  298. package/src/storage/gun-references.js +16 -5
  299. package/src/storage/gun-schema.js +25 -10
  300. package/src/storage/gun-wrapper.js +99 -36
  301. package/src/storage/indexeddb-storage.js +65 -4
  302. package/src/storage/key-storage-simple.js +32 -9
  303. package/src/storage/key-storage.js +45 -13
  304. package/src/storage/memory-storage.js +65 -4
  305. package/src/storage/migration.js +20 -7
  306. package/src/storage/nostr-async.js +157 -67
  307. package/src/storage/nostr-client.js +173 -49
  308. package/src/storage/nostr-wrapper.js +6 -2
  309. package/src/storage/outbox-queue.js +55 -18
  310. package/src/storage/persistent-storage.js +56 -13
  311. package/src/storage/sync-service.js +51 -17
  312. package/src/storage/unified-storage.js +7 -2
  313. package/src/subscriptions/manager.js +33 -16
  314. package/dist/index-4XHHKe6S.js.map +0 -1
  315. package/dist/index-Dz5kOZMI.cjs.map +0 -1
  316. package/dist/indexeddb-storage-DD7EFBVc.cjs.map +0 -1
  317. package/dist/indexeddb-storage-lExjjFlV.js.map +0 -1
  318. package/dist/memory-storage-C68adso2.js.map +0 -1
  319. package/dist/memory-storage-DD_6yyXT.cjs.map +0 -1
  320. /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
  321. /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
@@ -1,8 +1,27 @@
1
1
  /**
2
- * Abstract Storage Backend Interface
3
- * All storage backends must implement this interface
2
+ * @fileoverview Abstract Storage Backend Interface.
3
+ *
4
+ * Defines the contract that all storage backends must implement.
5
+ * Provides a consistent API for CRUD operations, subscriptions,
6
+ * and data migration across different storage technologies.
7
+ *
8
+ * @module storage/backend-interface
9
+ */
10
+
11
+ /**
12
+ * Abstract base class for storage backends.
13
+ * All concrete backends (Nostr, GunDB, ActivityPub) must extend this class.
14
+ *
15
+ * @abstract
16
+ * @class StorageBackend
4
17
  */
5
18
  export class StorageBackend {
19
+ /**
20
+ * Creates a new StorageBackend instance.
21
+ *
22
+ * @param {Object} config - Backend-specific configuration
23
+ * @throws {Error} If instantiated directly (abstract class)
24
+ */
6
25
  constructor(config) {
7
26
  if (new.target === StorageBackend) {
8
27
  throw new Error('StorageBackend is abstract and cannot be instantiated directly');
@@ -1,19 +1,41 @@
1
1
  /**
2
- * Self-hosted ActivityPub server for HoloSphere
3
- * Provides federation with Mastodon, Pleroma, and other ActivityPub servers
2
+ * @fileoverview Self-hosted ActivityPub server for HoloSphere federation.
3
+ * Provides complete ActivityPub protocol support for federation with Mastodon, Pleroma,
4
+ * and other fediverse servers. Includes WebFinger, NodeInfo, actor endpoints, and SSE subscriptions.
5
+ * @module storage/backends/activitypub/server
4
6
  */
5
7
 
6
8
  import express from 'express';
7
9
  import crypto from 'crypto';
8
10
  import { createPersistentStorage } from '../../persistent-storage.js';
9
11
 
12
+ /** @constant {string} ActivityStreams JSON-LD context */
10
13
  const ACTIVITY_STREAMS_CONTEXT = 'https://www.w3.org/ns/activitystreams';
14
+ /** @constant {string} Security vocabulary JSON-LD context */
11
15
  const SECURITY_CONTEXT = 'https://w3id.org/security/v1';
12
16
 
13
17
  /**
14
- * ActivityPub Server for HoloSphere
18
+ * Self-hosted ActivityPub server for HoloSphere data federation.
19
+ * Implements WebFinger discovery, actor endpoints, inbox/outbox, and HoloSphere data API.
20
+ *
21
+ * @class ActivityPubServer
22
+ * @example
23
+ * const server = new ActivityPubServer({
24
+ * port: 3000,
25
+ * domain: 'holon.example.com',
26
+ * dataDir: './data'
27
+ * });
28
+ * await server.start();
15
29
  */
16
30
  export class ActivityPubServer {
31
+ /**
32
+ * Create a new ActivityPub server instance.
33
+ * @param {Object} [config={}] - Server configuration
34
+ * @param {number} [config.port=3000] - HTTP port to listen on
35
+ * @param {string} [config.domain='localhost'] - Server domain for URLs
36
+ * @param {string} [config.protocol='http'] - Protocol (http or https)
37
+ * @param {string} [config.dataDir] - Data directory for persistent storage
38
+ */
17
39
  constructor(config = {}) {
18
40
  this.config = {
19
41
  port: config.port || 3000,
@@ -1,11 +1,34 @@
1
1
  /**
2
- * ActivityPub Storage Backend
3
- * Client adapter for connecting to an ActivityPub server
2
+ * @fileoverview ActivityPub storage backend client adapter.
3
+ * Provides HTTP-based connectivity to an ActivityPub server for federated data storage
4
+ * and real-time subscriptions via Server-Sent Events.
5
+ * @module storage/backends/activitypub-backend
4
6
  */
5
7
 
6
8
  import { StorageBackend } from '../backend-interface.js';
7
9
 
10
+ /**
11
+ * ActivityPub storage backend implementation.
12
+ * Client adapter for connecting to an ActivityPub server via HTTP API
13
+ * with SSE-based real-time subscriptions.
14
+ *
15
+ * @class ActivityPubBackend
16
+ * @extends StorageBackend
17
+ * @example
18
+ * const backend = await BackendFactory.create('activitypub', {
19
+ * serverUrl: 'https://ap.example.com',
20
+ * appName: 'myapp',
21
+ * apiKey: 'secret-key'
22
+ * });
23
+ */
8
24
  export class ActivityPubBackend extends StorageBackend {
25
+ /**
26
+ * Create a new ActivityPub backend instance.
27
+ * @param {Object} config - Backend configuration
28
+ * @param {string} config.serverUrl - ActivityPub server URL
29
+ * @param {string} [config.appName='holosphere'] - Application/actor name
30
+ * @param {string} [config.apiKey] - Optional API key for authentication
31
+ */
9
32
  constructor(config) {
10
33
  super(config);
11
34
  this.serverUrl = config.serverUrl;
@@ -1,6 +1,7 @@
1
1
  /**
2
- * GunDB Storage Backend
3
- * Full-featured backend with authentication, schema validation, references, and global tables
2
+ * @fileoverview GunDB storage backend with authentication, schema validation, references, and global tables.
3
+ * Provides full-featured P2P data storage using GunDB with write caching for immediate consistency.
4
+ * @module storage/backends/gundb-backend
4
5
  */
5
6
 
6
7
  import { StorageBackend } from '../backend-interface.js';
@@ -10,7 +11,33 @@ import { GunReferenceHandler } from '../gun-references.js';
10
11
  import { GunAuth } from '../gun-auth.js';
11
12
  import { GunSchemaValidator } from '../gun-schema.js';
12
13
 
14
+ /**
15
+ * GunDB storage backend implementation with advanced features.
16
+ * Supports authentication, schema validation, references, global tables,
17
+ * and write caching for immediate consistency.
18
+ *
19
+ * @class GunDBBackend
20
+ * @extends StorageBackend
21
+ * @example
22
+ * const backend = await BackendFactory.create('gundb', {
23
+ * appName: 'myapp',
24
+ * peers: ['wss://gun-server.example.com/gun'],
25
+ * radisk: true
26
+ * });
27
+ */
13
28
  export class GunDBBackend extends StorageBackend {
29
+ /**
30
+ * Create a new GunDB backend instance.
31
+ * @param {Object} config - Backend configuration
32
+ * @param {string} [config.appName='holosphere'] - Application namespace
33
+ * @param {string[]} [config.peers=[]] - Array of peer URLs
34
+ * @param {boolean} [config.radisk=true] - Enable radisk persistence
35
+ * @param {boolean} [config.localStorage=true] - Enable localStorage
36
+ * @param {string} [config.dataDir='radata'] - Data directory for Node.js
37
+ * @param {string} [config.privateKey] - Optional existing private key
38
+ * @param {string} [config.publicKey] - Optional existing public key
39
+ * @param {boolean} [config.strict=false] - Enable strict schema validation
40
+ */
14
41
  constructor(config) {
15
42
  super(config);
16
43
  this.gun = null;
@@ -1,18 +1,52 @@
1
1
  /**
2
- * Nostr Storage Backend
2
+ * @fileoverview Nostr Storage Backend.
3
+ *
3
4
  * Wraps existing nostr-wrapper.js and nostr-client.js as a StorageBackend
5
+ * implementation. Provides Nostr-based distributed storage with relay support.
6
+ *
7
+ * @module storage/backends/nostr-backend
4
8
  */
5
9
 
6
10
  import { StorageBackend } from '../backend-interface.js';
7
11
  import { createClient } from '../nostr-client.js';
8
12
  import * as wrapper from '../nostr-wrapper.js';
9
13
 
14
+ /**
15
+ * Nostr storage backend implementation.
16
+ *
17
+ * Provides distributed storage using Nostr relays with event-based data storage.
18
+ *
19
+ * @class NostrBackend
20
+ * @extends StorageBackend
21
+ * @example
22
+ * const backend = new NostrBackend({
23
+ * relays: ['wss://relay.example.com'],
24
+ * appName: 'myapp',
25
+ * persistence: true
26
+ * });
27
+ * await backend.init();
28
+ */
10
29
  export class NostrBackend extends StorageBackend {
30
+ /**
31
+ * Create a new NostrBackend.
32
+ *
33
+ * @param {Object} config - Backend configuration
34
+ * @param {string[]} [config.relays] - Relay URLs
35
+ * @param {string} [config.privateKey] - Private key for signing
36
+ * @param {string} [config.appName] - Application name
37
+ * @param {boolean} [config.persistence=true] - Enable persistent storage
38
+ * @param {boolean} [config.backgroundSync] - Enable background sync
39
+ */
11
40
  constructor(config) {
12
41
  super(config);
13
42
  this.client = null;
14
43
  }
15
44
 
45
+ /**
46
+ * Initialize the backend.
47
+ *
48
+ * @returns {Promise<void>}
49
+ */
16
50
  async init() {
17
51
  this.client = createClient({
18
52
  relays: this.config.relays || ['wss://relay.holons.io'],
@@ -32,38 +66,102 @@ export class NostrBackend extends StorageBackend {
32
66
  this.publicKey = this.client.publicKey;
33
67
  }
34
68
 
69
+ /**
70
+ * Build path from components.
71
+ *
72
+ * @param {string} appName - Application name
73
+ * @param {string} holonId - Holon ID
74
+ * @param {string} lensName - Lens name
75
+ * @param {string} [key=null] - Optional key
76
+ * @returns {string} Built path
77
+ */
35
78
  buildPath(appName, holonId, lensName, key = null) {
36
79
  return wrapper.buildPath(appName, holonId, lensName, key);
37
80
  }
38
81
 
82
+ /**
83
+ * Write data to path.
84
+ *
85
+ * @param {string} path - Storage path
86
+ * @param {Object} data - Data to write
87
+ * @param {Object} [options={}] - Write options
88
+ * @returns {Promise<Object>} Write result
89
+ */
39
90
  async write(path, data, options = {}) {
40
91
  return wrapper.write(this.client, path, data);
41
92
  }
42
93
 
94
+ /**
95
+ * Read data from path.
96
+ *
97
+ * @param {string} path - Storage path
98
+ * @param {Object} [options={}] - Read options
99
+ * @returns {Promise<Object|null>} Data or null
100
+ */
43
101
  async read(path, options = {}) {
44
102
  return wrapper.read(this.client, path, options);
45
103
  }
46
104
 
105
+ /**
106
+ * Read all data under path.
107
+ *
108
+ * @param {string} path - Storage path prefix
109
+ * @param {Object} [options={}] - Read options
110
+ * @returns {Promise<Object[]>} Array of data objects
111
+ */
47
112
  async readAll(path, options = {}) {
48
113
  return wrapper.readAll(this.client, path, options);
49
114
  }
50
115
 
116
+ /**
117
+ * Update data at path.
118
+ *
119
+ * @param {string} path - Storage path
120
+ * @param {Object} updates - Fields to update
121
+ * @returns {Promise<Object>} Update result
122
+ */
51
123
  async update(path, updates) {
52
124
  return wrapper.update(this.client, path, updates);
53
125
  }
54
126
 
127
+ /**
128
+ * Delete data at path.
129
+ *
130
+ * @param {string} path - Storage path
131
+ * @returns {Promise<boolean>} Success indicator
132
+ */
55
133
  async delete(path) {
56
134
  return wrapper.deleteData(this.client, path);
57
135
  }
58
136
 
137
+ /**
138
+ * Delete all data under path.
139
+ *
140
+ * @param {string} path - Storage path prefix
141
+ * @returns {Promise<Object>} Deletion results
142
+ */
59
143
  async deleteAll(path) {
60
144
  return wrapper.deleteAll(this.client, path);
61
145
  }
62
146
 
147
+ /**
148
+ * Subscribe to changes at path.
149
+ *
150
+ * @param {string} path - Storage path
151
+ * @param {Function} callback - Callback function
152
+ * @param {Object} [options={}] - Subscribe options
153
+ * @returns {Promise<Object>} Subscription object with unsubscribe method
154
+ */
63
155
  async subscribe(path, callback, options = {}) {
64
156
  return wrapper.subscribe(this.client, path, callback, options);
65
157
  }
66
158
 
159
+ /**
160
+ * Export all data for this user.
161
+ *
162
+ * @param {string} [pathPrefix=''] - Optional path prefix filter
163
+ * @returns {Promise<Object[]>} Array of exported records
164
+ */
67
165
  async exportData(pathPrefix = '') {
68
166
  // Wait for client to be ready
69
167
  await this.client._initReady;
@@ -101,6 +199,13 @@ export class NostrBackend extends StorageBackend {
101
199
  .filter(record => !record.data._deleted); // Filter out deleted items
102
200
  }
103
201
 
202
+ /**
203
+ * Import data records.
204
+ *
205
+ * @param {Object[]} records - Array of records to import
206
+ * @param {Object} [options={}] - Import options
207
+ * @returns {Promise<Object>} Import results with success/failed counts
208
+ */
104
209
  async importData(records, options = {}) {
105
210
  const results = { success: 0, failed: 0, errors: [] };
106
211
 
@@ -117,12 +222,22 @@ export class NostrBackend extends StorageBackend {
117
222
  return results;
118
223
  }
119
224
 
225
+ /**
226
+ * Close the backend and cleanup resources.
227
+ *
228
+ * @returns {void}
229
+ */
120
230
  close() {
121
231
  if (this.client) {
122
232
  this.client.close();
123
233
  }
124
234
  }
125
235
 
236
+ /**
237
+ * Get backend status.
238
+ *
239
+ * @returns {Object} Status object with type, publicKey, relays, connected
240
+ */
126
241
  getStatus() {
127
242
  return {
128
243
  type: 'nostr',
@@ -1,40 +1,80 @@
1
1
  /**
2
- * Browser stub for FileSystemStorage
3
- * Throws an error if used in browser environment
2
+ * @fileoverview Browser stub for FileSystemStorage.
3
+ *
4
+ * This stub throws errors if FileSystemStorage is used in browser environments.
5
+ * Browsers should use IndexedDBStorage or MemoryStorage instead.
6
+ *
7
+ * @module storage/filesystem-storage-browser
4
8
  */
5
9
 
6
10
  import { PersistentStorage } from './persistent-storage.js';
7
11
 
12
+ /**
13
+ * Browser stub for FileSystemStorage.
14
+ *
15
+ * All methods throw errors indicating filesystem storage is unavailable in browsers.
16
+ *
17
+ * @class FileSystemStorage
18
+ * @extends PersistentStorage
19
+ * @throws {Error} Always throws - not available in browser environments
20
+ */
8
21
  export class FileSystemStorage extends PersistentStorage {
22
+ /**
23
+ * Constructor throws error in browser.
24
+ *
25
+ * @param {string} [baseDir=null] - Ignored in browser
26
+ * @throws {Error} Always throws - not available in browser
27
+ */
9
28
  constructor(baseDir = null) {
10
29
  super();
11
30
  throw new Error('FileSystemStorage is not available in browser environments. Use IndexedDBStorage or MemoryStorage instead.');
12
31
  }
13
32
 
33
+ /**
34
+ * @throws {Error} Always throws - not available in browser
35
+ */
14
36
  async init(namespace) {
15
37
  throw new Error('FileSystemStorage is not available in browser environments');
16
38
  }
17
39
 
40
+ /**
41
+ * @throws {Error} Always throws - not available in browser
42
+ */
18
43
  async put(key, event) {
19
44
  throw new Error('FileSystemStorage is not available in browser environments');
20
45
  }
21
46
 
47
+ /**
48
+ * @throws {Error} Always throws - not available in browser
49
+ */
22
50
  async get(key) {
23
51
  throw new Error('FileSystemStorage is not available in browser environments');
24
52
  }
25
53
 
54
+ /**
55
+ * @throws {Error} Always throws - not available in browser
56
+ */
26
57
  async getAll(prefix) {
27
58
  throw new Error('FileSystemStorage is not available in browser environments');
28
59
  }
29
60
 
61
+ /**
62
+ * @throws {Error} Always throws - not available in browser
63
+ */
30
64
  async delete(key) {
31
65
  throw new Error('FileSystemStorage is not available in browser environments');
32
66
  }
33
67
 
68
+ /**
69
+ * @throws {Error} Always throws - not available in browser
70
+ */
34
71
  async clear() {
35
72
  throw new Error('FileSystemStorage is not available in browser environments');
36
73
  }
37
74
 
75
+ /**
76
+ * @throws {Error} Always throws - not available in browser
77
+ */
38
78
  async close() {
39
79
  throw new Error('FileSystemStorage is not available in browser environments');
40
80
  }
@@ -1,7 +1,10 @@
1
1
  /**
2
- * File system storage adapter for Node.js
3
- * Stores events as JSON files in a directory structure
4
- * This module is only loaded in Node.js environments
2
+ * @fileoverview File system storage adapter for Node.js.
3
+ *
4
+ * Stores events as JSON files in a directory structure.
5
+ * This module is only loaded in Node.js environments.
6
+ *
7
+ * @module storage/filesystem-storage
5
8
  */
6
9
 
7
10
  // Guard against browser environments
@@ -14,7 +17,24 @@ import { promises as fs } from 'fs';
14
17
  import path from 'path';
15
18
  import os from 'os';
16
19
 
20
+ /**
21
+ * File system storage adapter for Node.js.
22
+ *
23
+ * Stores events as JSON files in a directory structure for persistent storage.
24
+ *
25
+ * @class FileSystemStorage
26
+ * @extends PersistentStorage
27
+ * @example
28
+ * const storage = new FileSystemStorage('/custom/path');
29
+ * await storage.init('myapp');
30
+ * await storage.put('key1', { id: 'event1', data: 'test' });
31
+ */
17
32
  export class FileSystemStorage extends PersistentStorage {
33
+ /**
34
+ * Create a new FileSystemStorage instance.
35
+ *
36
+ * @param {string} [baseDir=null] - Base directory for storage (defaults to ~/.holosphere)
37
+ */
18
38
  constructor(baseDir = null) {
19
39
  super();
20
40
  this.baseDir = baseDir || path.join(os.homedir(), '.holosphere');
@@ -22,6 +42,12 @@ export class FileSystemStorage extends PersistentStorage {
22
42
  this.storageDir = null;
23
43
  }
24
44
 
45
+ /**
46
+ * Initialize storage with namespace.
47
+ *
48
+ * @param {string} namespace - Storage namespace (app name)
49
+ * @returns {Promise<void>}
50
+ */
25
51
  async init(namespace) {
26
52
  this.namespace = namespace;
27
53
  this.storageDir = path.join(this.baseDir, namespace);
@@ -37,8 +63,11 @@ export class FileSystemStorage extends PersistentStorage {
37
63
  }
38
64
 
39
65
  /**
40
- * Convert key to safe filename
66
+ * Convert key to safe filename.
67
+ *
41
68
  * @private
69
+ * @param {string} key - Storage key
70
+ * @returns {string} Safe filename
42
71
  */
43
72
  _keyToFilename(key) {
44
73
  // Replace unsafe characters
@@ -46,19 +75,35 @@ export class FileSystemStorage extends PersistentStorage {
46
75
  }
47
76
 
48
77
  /**
49
- * Get full file path for key
78
+ * Get full file path for key.
79
+ *
50
80
  * @private
81
+ * @param {string} key - Storage key
82
+ * @returns {string} Full file path
51
83
  */
52
84
  _getFilePath(key) {
53
85
  return path.join(this.storageDir, this._keyToFilename(key));
54
86
  }
55
87
 
88
+ /**
89
+ * Store an event.
90
+ *
91
+ * @param {string} key - Storage key
92
+ * @param {Object} event - Event data to store
93
+ * @returns {Promise<void>}
94
+ */
56
95
  async put(key, event) {
57
96
  const filePath = this._getFilePath(key);
58
97
  const data = JSON.stringify(event, null, 2);
59
98
  await fs.writeFile(filePath, data, 'utf8');
60
99
  }
61
100
 
101
+ /**
102
+ * Retrieve an event.
103
+ *
104
+ * @param {string} key - Storage key
105
+ * @returns {Promise<Object|null>} Event data or null if not found
106
+ */
62
107
  async get(key) {
63
108
  const filePath = this._getFilePath(key);
64
109
  try {
@@ -72,6 +117,12 @@ export class FileSystemStorage extends PersistentStorage {
72
117
  }
73
118
  }
74
119
 
120
+ /**
121
+ * Retrieve all events matching a prefix.
122
+ *
123
+ * @param {string} prefix - Key prefix to match
124
+ * @returns {Promise<Object[]>} Array of matching events
125
+ */
75
126
  async getAll(prefix) {
76
127
  const results = [];
77
128
 
@@ -108,6 +159,12 @@ export class FileSystemStorage extends PersistentStorage {
108
159
  return results;
109
160
  }
110
161
 
162
+ /**
163
+ * Delete an event.
164
+ *
165
+ * @param {string} key - Storage key
166
+ * @returns {Promise<void>}
167
+ */
111
168
  async delete(key) {
112
169
  const filePath = this._getFilePath(key);
113
170
  try {
@@ -119,6 +176,11 @@ export class FileSystemStorage extends PersistentStorage {
119
176
  }
120
177
  }
121
178
 
179
+ /**
180
+ * Clear all stored events.
181
+ *
182
+ * @returns {Promise<void>}
183
+ */
122
184
  async clear() {
123
185
  try {
124
186
  const files = await fs.readdir(this.storageDir);
@@ -132,6 +194,11 @@ export class FileSystemStorage extends PersistentStorage {
132
194
  }
133
195
  }
134
196
 
197
+ /**
198
+ * Close storage (no-op for filesystem).
199
+ *
200
+ * @returns {Promise<void>}
201
+ */
135
202
  async close() {
136
203
  // Nothing to close for file system storage
137
204
  }
@@ -1,6 +1,11 @@
1
1
  /**
2
- * Global Data Operations
3
- * Non-location-specific storage (FR-044, FR-045)
2
+ * @fileoverview Global Data Operations.
3
+ *
4
+ * Provides non-location-specific (non-holon) data storage operations.
5
+ * Used for storing application-wide data like federation configs, schemas,
6
+ * and user preferences that aren't tied to specific H3 cells.
7
+ *
8
+ * @module storage/global-tables
4
9
  */
5
10
 
6
11
  import { write, read, readAll, update, deleteData, deleteAll, subscribe } from './unified-storage.js';
@@ -1,13 +1,18 @@
1
1
  /**
2
- * Gun Async Utilities
3
- * Provides Promise-based wrappers and async patterns for Gun operations
2
+ * @fileoverview Gun Async Utilities.
3
+ *
4
+ * Provides Promise-based wrappers and async patterns for Gun operations.
5
+ * Includes utilities for promises, batch operations, retries, streams, and async iteration.
6
+ *
7
+ * @module storage/gun-async
4
8
  */
5
9
 
6
10
  /**
7
- * Get data from Gun using native .then() support
11
+ * Get data from Gun using native .then() support.
12
+ *
8
13
  * @param {Object} gunChain - Gun chain reference
9
- * @param {number} timeout - Timeout in ms (default 1000ms)
10
- * @returns {Promise<any>} Promise resolving to data
14
+ * @param {number} [timeout=1000] - Timeout in ms
15
+ * @returns {Promise<any>} Promise resolving to data or null on timeout
11
16
  */
12
17
  export function gunPromise(gunChain, timeout = 1000) {
13
18
  return new Promise((resolve, reject) => {
@@ -31,11 +36,13 @@ export function gunPromise(gunChain, timeout = 1000) {
31
36
  }
32
37
 
33
38
  /**
34
- * Wait for Gun write acknowledgement
39
+ * Wait for Gun write acknowledgement.
40
+ *
35
41
  * @param {Object} gunChain - Gun chain reference
36
42
  * @param {any} data - Data to write
37
- * @param {number} timeout - Timeout in ms (default 1000ms)
38
- * @returns {Promise<Object>} Promise resolving to ack object
43
+ * @param {number} [timeout=1000] - Timeout in ms
44
+ * @returns {Promise<Object>} Promise resolving to ack object { ok, timeout? }
45
+ * @throws {Error} If write fails with error
39
46
  */
40
47
  export function gunPut(gunChain, data, timeout = 1000) {
41
48
  return new Promise((resolve, reject) => {
@@ -63,10 +70,12 @@ export function gunPut(gunChain, data, timeout = 1000) {
63
70
  }
64
71
 
65
72
  /**
66
- * Get all items from a Gun map
67
- * First gets count of items, then collects until count is reached
73
+ * Get all items from a Gun map.
74
+ *
75
+ * First gets count of items, then collects until count is reached.
76
+ *
68
77
  * @param {Object} gunChain - Gun chain reference
69
- * @param {number} timeout - Timeout in ms (fallback, default 5000ms)
78
+ * @param {number} [timeout=5000] - Timeout in ms (fallback)
70
79
  * @returns {Promise<Object>} Promise resolving to map of items
71
80
  */
72
81
  export async function gunMap(gunChain, timeout = 5000) {
@@ -1,19 +1,30 @@
1
1
  /**
2
- * GunDB Authentication Handler
3
- * Handles user authentication and private data storage using Gun's user system
2
+ * @fileoverview GunDB Authentication Handler.
4
3
  *
4
+ * Handles user authentication and private data storage using Gun's user system.
5
5
  * Private data is stored under: user.get('private').get(lens).get(key)
6
6
  * Usernames are namespaced: ${appname}:${holonId}
7
+ *
8
+ * @module storage/gun-auth
7
9
  */
8
10
 
9
11
  import { gunPromise, gunPut } from './gun-async.js';
10
12
 
11
13
  /**
12
- * Authentication handler for GunDB backend
14
+ * Authentication handler for GunDB backend.
15
+ *
16
+ * Manages user creation, authentication, and private data access.
17
+ *
18
+ * @class GunAuth
19
+ * @example
20
+ * const auth = new GunAuth(gun, 'myapp');
21
+ * await auth.createUser('holon123', 'password');
22
+ * await auth.authenticate('holon123', 'password');
13
23
  */
14
24
  export class GunAuth {
15
25
  /**
16
- * Create a new authentication handler
26
+ * Create a new authentication handler.
27
+ *
17
28
  * @param {Object} gun - Gun instance
18
29
  * @param {string} appname - Application namespace
19
30
  */