holosphere 2.0.0-alpha1 → 2.0.0-alpha10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +473 -0
- package/FEATURES.md +431 -0
- package/LICENSE +29 -166
- package/LICENSE-AGPL.md +180 -0
- package/README.md +97 -16
- package/dist/2019-D2OG2idw.js +6680 -0
- package/dist/2019-D2OG2idw.js.map +1 -0
- package/dist/2019-EION3wKo.cjs +8 -0
- package/dist/2019-EION3wKo.cjs.map +1 -0
- package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
- package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
- package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
- package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
- package/dist/browser-BSniCNqO.js +3058 -0
- package/dist/browser-BSniCNqO.js.map +1 -0
- package/dist/browser-Cq59Ij19.cjs +2 -0
- package/dist/browser-Cq59Ij19.cjs.map +1 -0
- package/dist/cdn/holosphere.min.js +55 -0
- package/dist/cdn/holosphere.min.js.map +1 -0
- package/dist/cjs/holosphere.cjs +2 -0
- package/dist/cjs/holosphere.cjs.map +1 -0
- package/dist/esm/holosphere.js +53 -0
- package/dist/esm/holosphere.js.map +1 -0
- package/dist/index-DDGt_V9o.cjs +12 -0
- package/dist/index-DDGt_V9o.cjs.map +1 -0
- package/dist/index-DJXftyvB.js +39841 -0
- package/dist/index-DJXftyvB.js.map +1 -0
- package/dist/index-DMbdcMtK.cjs +18 -0
- package/dist/index-DMbdcMtK.cjs.map +1 -0
- package/dist/index-DeZ1xz_s.js +15104 -0
- package/dist/index-DeZ1xz_s.js.map +1 -0
- package/dist/indexeddb-storage-BFt6hMeF.js +176 -0
- package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
- package/dist/indexeddb-storage-BK5tv4Sh.cjs +2 -0
- package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
- package/dist/memory-storage-C9HuoL2E.js +91 -0
- package/dist/memory-storage-C9HuoL2E.js.map +1 -0
- package/dist/memory-storage-Dao7jfYG.cjs +2 -0
- package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
- package/dist/secp256k1-BbKzbLtD.cjs +12 -0
- package/dist/secp256k1-BbKzbLtD.cjs.map +1 -0
- package/dist/secp256k1-CreY7Pcl.js +1890 -0
- package/dist/secp256k1-CreY7Pcl.js.map +1 -0
- package/docs/CONTRACTS.md +797 -0
- package/docs/FOSDEM_PROPOSAL.md +388 -0
- package/docs/LOCALFIRST.md +266 -0
- package/docs/api/ai_aggregation.js.html +333 -0
- package/docs/api/ai_breakdown.js.html +524 -0
- package/docs/api/ai_classifier.js.html +231 -0
- package/docs/api/ai_council.js.html +246 -0
- package/docs/api/ai_embeddings.js.html +304 -0
- package/docs/api/ai_federation-ai.js.html +338 -0
- package/docs/api/ai_h3-ai.js.html +970 -0
- package/docs/api/ai_index.js.html +124 -0
- package/docs/api/ai_json-ops.js.html +241 -0
- package/docs/api/ai_llm-service.js.html +239 -0
- package/docs/api/ai_nl-query.js.html +236 -0
- package/docs/api/ai_relationships.js.html +367 -0
- package/docs/api/ai_schema-extractor.js.html +235 -0
- package/docs/api/ai_spatial.js.html +307 -0
- package/docs/api/ai_tts.js.html +214 -0
- package/docs/api/content_social-protocols.js.html +180 -0
- package/docs/api/core_holosphere.js.html +757 -0
- package/docs/api/crypto_nostr-utils.js.html +306 -0
- package/docs/api/crypto_secp256k1.js.html +267 -0
- package/docs/api/data/search.json +1 -0
- package/docs/api/federation_discovery.js.html +337 -0
- package/docs/api/federation_handshake.js.html +478 -0
- package/docs/api/federation_hologram.js.html +1053 -0
- package/docs/api/federation_registry.js.html +389 -0
- package/docs/api/fonts/Inconsolata-Regular.ttf +0 -0
- package/docs/api/fonts/OpenSans-Regular.ttf +0 -0
- package/docs/api/fonts/WorkSans-Bold.ttf +0 -0
- package/docs/api/global.html +3 -0
- package/docs/api/hierarchical_upcast.js.html +128 -0
- package/docs/api/index.html +265 -0
- package/docs/api/index.js.html +1868 -0
- package/docs/api/lib_ai-methods.js.html +660 -0
- package/docs/api/lib_contract-methods.js.html +445 -0
- package/docs/api/lib_errors.js.html +56 -0
- package/docs/api/lib_federation-methods.js.html +348 -0
- package/docs/api/lib_index.js.html +33 -0
- package/docs/api/module-ai.html +5 -0
- package/docs/api/module-ai_aggregation-SmartAggregation.html +6 -0
- package/docs/api/module-ai_aggregation.SmartAggregation.html +3 -0
- package/docs/api/module-ai_aggregation.html +3 -0
- package/docs/api/module-ai_breakdown-TaskBreakdown.html +5 -0
- package/docs/api/module-ai_breakdown.TaskBreakdown.html +3 -0
- package/docs/api/module-ai_breakdown.html +3 -0
- package/docs/api/module-ai_classifier-Classifier.html +6 -0
- package/docs/api/module-ai_classifier.Classifier.html +3 -0
- package/docs/api/module-ai_classifier.html +3 -0
- package/docs/api/module-ai_council-Council.html +6 -0
- package/docs/api/module-ai_council.Council.html +3 -0
- package/docs/api/module-ai_council.html +3 -0
- package/docs/api/module-ai_embeddings-Embeddings.html +5 -0
- package/docs/api/module-ai_embeddings.Embeddings.html +3 -0
- package/docs/api/module-ai_embeddings.html +3 -0
- package/docs/api/module-ai_federation-ai-FederationAdvisor.html +6 -0
- package/docs/api/module-ai_federation-ai.FederationAdvisor.html +3 -0
- package/docs/api/module-ai_federation-ai.html +3 -0
- package/docs/api/module-ai_h3-ai-H3AI.html +6 -0
- package/docs/api/module-ai_h3-ai.H3AI.html +3 -0
- package/docs/api/module-ai_h3-ai.html +3 -0
- package/docs/api/module-ai_json-ops-JSONOps.html +5 -0
- package/docs/api/module-ai_json-ops.JSONOps.html +3 -0
- package/docs/api/module-ai_json-ops.html +3 -0
- package/docs/api/module-ai_llm-service-LLMService.html +5 -0
- package/docs/api/module-ai_llm-service.LLMService.html +3 -0
- package/docs/api/module-ai_llm-service.html +3 -0
- package/docs/api/module-ai_nl-query-NLQuery.html +5 -0
- package/docs/api/module-ai_nl-query.NLQuery.html +3 -0
- package/docs/api/module-ai_nl-query.html +3 -0
- package/docs/api/module-ai_relationships-RelationshipDiscovery.html +6 -0
- package/docs/api/module-ai_relationships.RelationshipDiscovery.html +3 -0
- package/docs/api/module-ai_relationships.html +3 -0
- package/docs/api/module-ai_schema-extractor-SchemaExtractor.html +5 -0
- package/docs/api/module-ai_schema-extractor.SchemaExtractor.html +3 -0
- package/docs/api/module-ai_schema-extractor.html +3 -0
- package/docs/api/module-ai_spatial-SpatialAnalysis.html +6 -0
- package/docs/api/module-ai_spatial.SpatialAnalysis.html +3 -0
- package/docs/api/module-ai_spatial.html +3 -0
- package/docs/api/module-ai_tts-TTS.html +5 -0
- package/docs/api/module-ai_tts.TTS.html +3 -0
- package/docs/api/module-ai_tts.html +3 -0
- package/docs/api/module-content_social-protocols.html +3 -0
- package/docs/api/module-core_holosphere-HoloSphere.html +6 -0
- package/docs/api/module-core_holosphere.HoloSphere.html +3 -0
- package/docs/api/module-core_holosphere.html +3 -0
- package/docs/api/module-crypto_nostr-utils.html +3 -0
- package/docs/api/module-crypto_secp256k1.html +3 -0
- package/docs/api/module-federation_hologram.html +3 -0
- package/docs/api/module-hierarchical_upcast.html +3 -0
- package/docs/api/module-holosphere-HoloSphereBase.html +3 -0
- package/docs/api/module-holosphere.html +3 -0
- package/docs/api/module-lib_ai-methods.html +3 -0
- package/docs/api/module-lib_contract-methods.html +3 -0
- package/docs/api/module-lib_errors-AuthorizationError.html +3 -0
- package/docs/api/module-lib_errors-ValidationError.html +3 -0
- package/docs/api/module-lib_errors.AuthorizationError.html +3 -0
- package/docs/api/module-lib_errors.ValidationError.html +3 -0
- package/docs/api/module-lib_errors.html +3 -0
- package/docs/api/module-lib_federation-methods.html +3 -0
- package/docs/api/module-lib_index.html +3 -0
- package/docs/api/module-schema_validator-ValidationError.html +3 -0
- package/docs/api/module-schema_validator.ValidationError.html +3 -0
- package/docs/api/module-schema_validator.html +3 -0
- package/docs/api/module-spatial_h3-operations.html +4 -0
- package/docs/api/module-storage_backend-factory.BackendFactory.html +3 -0
- package/docs/api/module-storage_backend-factory.html +3 -0
- package/docs/api/module-storage_backend-interface-StorageBackend.html +3 -0
- package/docs/api/module-storage_backend-interface.StorageBackend.html +3 -0
- package/docs/api/module-storage_backend-interface.html +3 -0
- package/docs/api/module-storage_backends_activitypub-backend-ActivityPubBackend.html +7 -0
- package/docs/api/module-storage_backends_activitypub-backend.ActivityPubBackend.html +3 -0
- package/docs/api/module-storage_backends_activitypub-backend.html +3 -0
- package/docs/api/module-storage_backends_activitypub_server-ActivityPubServer.html +8 -0
- package/docs/api/module-storage_backends_activitypub_server.ActivityPubServer.html +3 -0
- package/docs/api/module-storage_backends_activitypub_server.html +3 -0
- package/docs/api/module-storage_backends_gundb-backend-GunDBBackend.html +7 -0
- package/docs/api/module-storage_backends_gundb-backend.GunDBBackend.html +3 -0
- package/docs/api/module-storage_backends_gundb-backend.html +3 -0
- package/docs/api/module-storage_backends_nostr-backend-NostrBackend.html +8 -0
- package/docs/api/module-storage_backends_nostr-backend.NostrBackend.html +3 -0
- package/docs/api/module-storage_backends_nostr-backend.html +3 -0
- package/docs/api/module-storage_filesystem-storage-FileSystemStorage.html +5 -0
- package/docs/api/module-storage_filesystem-storage-browser-FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage-browser.FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage-browser.html +3 -0
- package/docs/api/module-storage_filesystem-storage.FileSystemStorage.html +3 -0
- package/docs/api/module-storage_filesystem-storage.html +3 -0
- package/docs/api/module-storage_global-tables.html +3 -0
- package/docs/api/module-storage_gun-async.html +3 -0
- package/docs/api/module-storage_gun-auth-GunAuth.html +5 -0
- package/docs/api/module-storage_gun-auth.GunAuth.html +3 -0
- package/docs/api/module-storage_gun-auth.html +3 -0
- package/docs/api/module-storage_gun-federation.html +3 -0
- package/docs/api/module-storage_gun-references-GunReferenceHandler.html +5 -0
- package/docs/api/module-storage_gun-references.GunReferenceHandler.html +3 -0
- package/docs/api/module-storage_gun-references.html +3 -0
- package/docs/api/module-storage_gun-schema-GunSchemaValidator.html +5 -0
- package/docs/api/module-storage_gun-schema.GunSchemaValidator.html +3 -0
- package/docs/api/module-storage_gun-schema.html +3 -0
- package/docs/api/module-storage_gun-wrapper.html +11 -0
- package/docs/api/module-storage_indexeddb-storage-IndexedDBStorage.html +5 -0
- package/docs/api/module-storage_indexeddb-storage.IndexedDBStorage.html +3 -0
- package/docs/api/module-storage_indexeddb-storage.html +3 -0
- package/docs/api/module-storage_key-storage-simple.html +3 -0
- package/docs/api/module-storage_key-storage.html +4 -0
- package/docs/api/module-storage_memory-storage-MemoryStorage.html +5 -0
- package/docs/api/module-storage_memory-storage.MemoryStorage.html +3 -0
- package/docs/api/module-storage_memory-storage.html +3 -0
- package/docs/api/module-storage_migration-MigrationTool.html +6 -0
- package/docs/api/module-storage_migration.MigrationTool.html +3 -0
- package/docs/api/module-storage_migration.html +3 -0
- package/docs/api/module-storage_nostr-async.html +18 -0
- package/docs/api/module-storage_nostr-client-LRUCache.html +3 -0
- package/docs/api/module-storage_nostr-client-NostrClient.html +7 -0
- package/docs/api/module-storage_nostr-client.NostrClient.html +15 -0
- package/docs/api/module-storage_nostr-client.html +6 -0
- package/docs/api/module-storage_nostr-wrapper.html +3 -0
- package/docs/api/module-storage_outbox-queue-OutboxQueue.html +4 -0
- package/docs/api/module-storage_outbox-queue.OutboxQueue.html +3 -0
- package/docs/api/module-storage_outbox-queue.html +3 -0
- package/docs/api/module-storage_persistent-storage-PersistentStorage.html +3 -0
- package/docs/api/module-storage_persistent-storage.html +4 -0
- package/docs/api/module-storage_sync-service-SyncService.html +5 -0
- package/docs/api/module-storage_sync-service.SyncService.html +3 -0
- package/docs/api/module-storage_sync-service.html +3 -0
- package/docs/api/module-storage_unified-storage.html +3 -0
- package/docs/api/module-subscriptions_manager.SubscriptionRegistry.html +3 -0
- package/docs/api/module-subscriptions_manager.html +3 -0
- package/docs/api/schema_validator.js.html +113 -0
- package/docs/api/scripts/core.js +726 -0
- package/docs/api/scripts/core.min.js +23 -0
- package/docs/api/scripts/resize.js +90 -0
- package/docs/api/scripts/search.js +265 -0
- package/docs/api/scripts/search.min.js +6 -0
- package/docs/api/scripts/third-party/Apache-License-2.0.txt +202 -0
- package/docs/api/scripts/third-party/fuse.js +9 -0
- package/docs/api/scripts/third-party/hljs-line-num-original.js +369 -0
- package/docs/api/scripts/third-party/hljs-line-num.js +1 -0
- package/docs/api/scripts/third-party/hljs-original.js +5171 -0
- package/docs/api/scripts/third-party/hljs.js +1 -0
- package/docs/api/scripts/third-party/popper.js +5 -0
- package/docs/api/scripts/third-party/tippy.js +1 -0
- package/docs/api/scripts/third-party/tocbot.js +672 -0
- package/docs/api/scripts/third-party/tocbot.min.js +1 -0
- package/docs/api/spatial_h3-operations.js.html +129 -0
- package/docs/api/storage_backend-factory.js.html +133 -0
- package/docs/api/storage_backend-interface.js.html +164 -0
- package/docs/api/storage_backends_activitypub-backend.js.html +298 -0
- package/docs/api/storage_backends_activitypub_server.js.html +678 -0
- package/docs/api/storage_backends_gundb-backend.js.html +878 -0
- package/docs/api/storage_backends_nostr-backend.js.html +254 -0
- package/docs/api/storage_filesystem-storage-browser.js.html +83 -0
- package/docs/api/storage_filesystem-storage.js.html +207 -0
- package/docs/api/storage_global-tables.js.html +116 -0
- package/docs/api/storage_gun-async.js.html +344 -0
- package/docs/api/storage_gun-auth.js.html +376 -0
- package/docs/api/storage_gun-federation.js.html +788 -0
- package/docs/api/storage_gun-references.js.html +212 -0
- package/docs/api/storage_gun-schema.js.html +309 -0
- package/docs/api/storage_gun-wrapper.js.html +645 -0
- package/docs/api/storage_indexeddb-storage.js.html +224 -0
- package/docs/api/storage_key-storage-simple.js.html +102 -0
- package/docs/api/storage_key-storage.js.html +171 -0
- package/docs/api/storage_memory-storage.js.html +128 -0
- package/docs/api/storage_migration.js.html +354 -0
- package/docs/api/storage_nostr-async.js.html +1076 -0
- package/docs/api/storage_nostr-client.js.html +1598 -0
- package/docs/api/storage_nostr-wrapper.js.html +218 -0
- package/docs/api/storage_outbox-queue.js.html +248 -0
- package/docs/api/storage_persistent-storage.js.html +160 -0
- package/docs/api/storage_sync-service.js.html +201 -0
- package/docs/api/storage_unified-storage.js.html +157 -0
- package/docs/api/styles/clean-jsdoc-theme-base.css +1159 -0
- package/docs/api/styles/clean-jsdoc-theme-dark.css +412 -0
- package/docs/api/styles/clean-jsdoc-theme-light.css +482 -0
- package/docs/api/styles/clean-jsdoc-theme-scrollbar.css +30 -0
- package/docs/api/styles/clean-jsdoc-theme-without-scrollbar.min.css +1 -0
- package/docs/api/styles/clean-jsdoc-theme.min.css +1 -0
- package/docs/api/subscriptions_manager.js.html +162 -0
- package/docs/contracts/api-interface.md +793 -0
- package/docs/data-model.md +476 -0
- package/docs/gun-async-usage.md +338 -0
- package/docs/plan.md +349 -0
- package/docs/quickstart.md +674 -0
- package/docs/research.md +362 -0
- package/docs/spec.md +244 -0
- package/docs/storage-backends.md +326 -0
- package/docs/tasks.md +947 -0
- package/examples/demo.html +47 -0
- package/examples/holosphere-widget.js +1242 -0
- package/examples/widget-demo.html +274 -0
- package/examples/widget.html +703 -0
- package/jsdoc.json +26 -0
- package/package.json +25 -7
- package/src/ai/aggregation.js +13 -2
- package/src/ai/breakdown.js +12 -2
- package/src/ai/classifier.js +14 -3
- package/src/ai/council.js +22 -7
- package/src/ai/embeddings.js +37 -15
- package/src/ai/federation-ai.js +13 -2
- package/src/ai/h3-ai.js +14 -2
- package/src/ai/index.js +16 -7
- package/src/ai/json-ops.js +18 -5
- package/src/ai/llm-service.js +62 -31
- package/src/ai/nl-query.js +12 -2
- package/src/ai/relationships.js +13 -2
- package/src/ai/schema-extractor.js +24 -10
- package/src/ai/spatial.js +13 -2
- package/src/ai/tts.js +25 -8
- package/src/cdn-entry.js +22 -0
- package/src/content/social-protocols.js +34 -25
- package/src/contracts/abis/Appreciative.json +1280 -0
- package/src/contracts/abis/AppreciativeFactory.json +101 -0
- package/src/contracts/abis/Bundle.json +1438 -0
- package/src/contracts/abis/BundleFactory.json +106 -0
- package/src/contracts/abis/Holon.json +881 -0
- package/src/contracts/abis/Holons.json +330 -0
- package/src/contracts/abis/Managed.json +1262 -0
- package/src/contracts/abis/ManagedFactory.json +149 -0
- package/src/contracts/abis/Membrane.json +261 -0
- package/src/contracts/abis/Splitter.json +1624 -0
- package/src/contracts/abis/SplitterFactory.json +220 -0
- package/src/contracts/abis/TestToken.json +321 -0
- package/src/contracts/abis/Zoned.json +1461 -0
- package/src/contracts/abis/ZonedFactory.json +154 -0
- package/src/contracts/chain-manager.js +403 -0
- package/src/contracts/deployer.js +500 -0
- package/src/contracts/event-listener.js +539 -0
- package/src/contracts/holon-contracts.js +359 -0
- package/src/contracts/index.js +82 -0
- package/src/contracts/networks.js +229 -0
- package/src/contracts/operations.js +687 -0
- package/src/contracts/queries.js +638 -0
- package/src/core/holosphere.js +487 -6
- package/src/crypto/nostr-utils.js +303 -0
- package/src/crypto/secp256k1.js +7 -2
- package/src/federation/handshake.js +475 -0
- package/src/federation/hologram.js +117 -3
- package/src/hierarchical/upcast.js +40 -25
- package/src/index.js +1501 -1909
- package/src/lib/ai-methods.js +657 -0
- package/src/lib/contract-methods.js +442 -0
- package/src/lib/errors.js +53 -0
- package/src/lib/federation-methods.js +345 -0
- package/src/lib/index.js +30 -0
- package/src/schema/validator.js +22 -3
- package/src/spatial/h3-operations.js +19 -3
- package/src/storage/backend-factory.js +7 -2
- package/src/storage/backend-interface.js +21 -2
- package/src/storage/backends/activitypub/server.js +25 -3
- package/src/storage/backends/activitypub-backend.js +25 -2
- package/src/storage/backends/gundb-backend.js +692 -50
- package/src/storage/backends/nostr-backend.js +116 -1
- package/src/storage/filesystem-storage-browser.js +42 -2
- package/src/storage/filesystem-storage.js +72 -5
- package/src/storage/global-tables.js +35 -3
- package/src/storage/gun-async.js +75 -15
- package/src/storage/gun-auth.js +373 -0
- package/src/storage/gun-federation.js +785 -0
- package/src/storage/gun-references.js +209 -0
- package/src/storage/gun-schema.js +306 -0
- package/src/storage/gun-wrapper.js +475 -54
- package/src/storage/indexeddb-storage.js +112 -13
- package/src/storage/key-storage-simple.js +32 -9
- package/src/storage/key-storage.js +45 -13
- package/src/storage/memory-storage.js +68 -2
- package/src/storage/migration.js +20 -7
- package/src/storage/nostr-async.js +412 -122
- package/src/storage/nostr-client.js +749 -76
- package/src/storage/nostr-wrapper.js +6 -2
- package/src/storage/outbox-queue.js +55 -18
- package/src/storage/persistent-storage.js +62 -14
- package/src/storage/sync-service.js +51 -17
- package/src/storage/unified-storage.js +154 -0
- package/src/subscriptions/manager.js +34 -17
- package/types/index.d.ts +133 -0
- package/vite.config.cdn.js +60 -0
- package/tests/unit/ai/aggregation.test.js +0 -295
- package/tests/unit/ai/breakdown.test.js +0 -446
- package/tests/unit/ai/classifier.test.js +0 -294
- package/tests/unit/ai/council.test.js +0 -262
- package/tests/unit/ai/embeddings.test.js +0 -384
- package/tests/unit/ai/federation-ai.test.js +0 -344
- package/tests/unit/ai/h3-ai.test.js +0 -458
- package/tests/unit/ai/index.test.js +0 -304
- package/tests/unit/ai/json-ops.test.js +0 -307
- package/tests/unit/ai/llm-service.test.js +0 -390
- package/tests/unit/ai/nl-query.test.js +0 -383
- package/tests/unit/ai/relationships.test.js +0 -311
- package/tests/unit/ai/schema-extractor.test.js +0 -384
- package/tests/unit/ai/spatial.test.js +0 -279
- package/tests/unit/ai/tts.test.js +0 -279
- package/tests/unit/content.test.js +0 -332
- package/tests/unit/contract/core.test.js +0 -88
- package/tests/unit/contract/crypto.test.js +0 -198
- package/tests/unit/contract/data.test.js +0 -223
- package/tests/unit/contract/federation.test.js +0 -181
- package/tests/unit/contract/hierarchical.test.js +0 -113
- package/tests/unit/contract/schema.test.js +0 -114
- package/tests/unit/contract/social.test.js +0 -217
- package/tests/unit/contract/spatial.test.js +0 -110
- package/tests/unit/contract/subscriptions.test.js +0 -128
- package/tests/unit/contract/utils.test.js +0 -159
- package/tests/unit/core.test.js +0 -152
- package/tests/unit/crypto.test.js +0 -328
- package/tests/unit/federation.test.js +0 -234
- package/tests/unit/gun-async.test.js +0 -252
- package/tests/unit/hierarchical.test.js +0 -399
- package/tests/unit/integration/scenario-01-geographic-storage.test.js +0 -74
- package/tests/unit/integration/scenario-02-federation.test.js +0 -76
- package/tests/unit/integration/scenario-03-subscriptions.test.js +0 -102
- package/tests/unit/integration/scenario-04-validation.test.js +0 -129
- package/tests/unit/integration/scenario-05-hierarchy.test.js +0 -125
- package/tests/unit/integration/scenario-06-social.test.js +0 -135
- package/tests/unit/integration/scenario-07-persistence.test.js +0 -130
- package/tests/unit/integration/scenario-08-authorization.test.js +0 -161
- package/tests/unit/integration/scenario-09-cross-dimensional.test.js +0 -139
- package/tests/unit/integration/scenario-10-cross-holosphere-capabilities.test.js +0 -357
- package/tests/unit/integration/scenario-11-cross-holosphere-federation.test.js +0 -410
- package/tests/unit/integration/scenario-12-capability-federated-read.test.js +0 -719
- package/tests/unit/performance/benchmark.test.js +0 -85
- package/tests/unit/schema.test.js +0 -213
- package/tests/unit/spatial.test.js +0 -158
- package/tests/unit/storage.test.js +0 -195
- package/tests/unit/subscriptions.test.js +0 -328
- package/tests/unit/test-data-permanence-debug.js +0 -197
- package/tests/unit/test-data-permanence.js +0 -340
- package/tests/unit/test-key-persistence-fixed.js +0 -148
- package/tests/unit/test-key-persistence.js +0 -172
- package/tests/unit/test-relay-permanence.js +0 -376
- package/tests/unit/test-second-node.js +0 -95
- package/tests/unit/test-simple-write.js +0 -89
- /package/{cleanup-test-data.js → scripts/cleanup-test-data.js} +0 -0
- /package/{test-ai-real-api.js → scripts/test-ai-real-api.js} +0 -0
package/src/core/holosphere.js
CHANGED
|
@@ -1,7 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Core HoloSphere class providing the foundational infrastructure
|
|
3
|
+
* for holonic geospatial communication.
|
|
4
|
+
*
|
|
5
|
+
* This module implements the core HoloSphere class that supports multiple storage
|
|
6
|
+
* backends (Nostr, GunDB, ActivityPub) and provides essential operations for
|
|
7
|
+
* distributed P2P communication and data management.
|
|
8
|
+
*
|
|
9
|
+
* @module core/holosphere
|
|
10
|
+
*/
|
|
11
|
+
|
|
1
12
|
import { createClient } from '../storage/nostr-client.js';
|
|
2
13
|
import { BackendFactory } from '../storage/backend-factory.js';
|
|
14
|
+
import * as gunWrapper from '../storage/gun-wrapper.js';
|
|
15
|
+
import * as gunFederation from '../storage/gun-federation.js';
|
|
16
|
+
import { GunDBBackend } from '../storage/backends/gundb-backend.js';
|
|
3
17
|
import pkg from '../../package.json' with { type: 'json' };
|
|
4
18
|
|
|
19
|
+
/** @type {Function|null} Gun constructor, loaded dynamically */
|
|
20
|
+
let Gun = null;
|
|
21
|
+
/** @type {Promise<Function>|null} Promise for Gun loading */
|
|
22
|
+
let gunLoadPromise = null;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Dynamically loads the Gun module.
|
|
26
|
+
* Uses lazy loading to reduce initial bundle size and improve startup time.
|
|
27
|
+
*
|
|
28
|
+
* @private
|
|
29
|
+
* @returns {Promise<Function>} Gun constructor
|
|
30
|
+
*/
|
|
31
|
+
async function loadGun() {
|
|
32
|
+
if (Gun) return Gun;
|
|
33
|
+
if (gunLoadPromise) return gunLoadPromise;
|
|
34
|
+
|
|
35
|
+
gunLoadPromise = import('gun').then(module => {
|
|
36
|
+
Gun = module.default || module;
|
|
37
|
+
return Gun;
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return gunLoadPromise;
|
|
41
|
+
}
|
|
42
|
+
|
|
5
43
|
/**
|
|
6
44
|
* Get environment variable (works in Node.js, returns undefined in browser)
|
|
7
45
|
* @param {string} name - Environment variable name
|
|
@@ -27,9 +65,20 @@ function getDefaultRelays() {
|
|
|
27
65
|
}
|
|
28
66
|
|
|
29
67
|
/**
|
|
30
|
-
* HoloSphere - Holonic Geospatial Communication Infrastructure
|
|
31
|
-
*
|
|
32
|
-
*
|
|
68
|
+
* HoloSphere - Holonic Geospatial Communication Infrastructure.
|
|
69
|
+
*
|
|
70
|
+
* The core class that combines H3 hexagonal indexing with distributed P2P storage.
|
|
71
|
+
* Supports multiple storage backends including Nostr, GunDB, and ActivityPub.
|
|
72
|
+
*
|
|
73
|
+
* @class HoloSphere
|
|
74
|
+
* @example
|
|
75
|
+
* // Create with Nostr backend (default)
|
|
76
|
+
* const hs = new HoloSphere({ appName: 'myapp', relays: ['wss://relay.example.com'] });
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // Create with GunDB backend
|
|
80
|
+
* const hs = new HoloSphere({ appName: 'myapp', backend: 'gundb' });
|
|
81
|
+
* await hs.ready(); // Wait for async initialization
|
|
33
82
|
*/
|
|
34
83
|
export class HoloSphere {
|
|
35
84
|
/**
|
|
@@ -38,7 +87,7 @@ export class HoloSphere {
|
|
|
38
87
|
* @param {string} config.backend - Storage backend: 'nostr' | 'gundb' | 'activitypub' (default: 'nostr')
|
|
39
88
|
* @param {string[]} config.relays - Nostr relay URLs (default from HOLOSPHERE_RELAYS env or ['wss://relay.holons.io', 'wss://relay.nostr.band'])
|
|
40
89
|
* @param {string} config.privateKey - Private key for signing (hex format, optional)
|
|
41
|
-
* @param {string} config.logLevel - Log verbosity: ERROR|WARN|INFO|DEBUG (default: '
|
|
90
|
+
* @param {string} config.logLevel - Log verbosity: ERROR|WARN|INFO|DEBUG (default: 'INFO')
|
|
42
91
|
* @param {boolean} config.hybridMode - Enable hybrid mode (local + relay queries) (default: true)
|
|
43
92
|
* @param {Object} config.gundb - GunDB-specific configuration
|
|
44
93
|
* @param {Object} config.activitypub - ActivityPub-specific configuration
|
|
@@ -74,7 +123,7 @@ export class HoloSphere {
|
|
|
74
123
|
backend: config.backend || 'nostr',
|
|
75
124
|
relays: config.relays || getDefaultRelays(),
|
|
76
125
|
privateKey: config.privateKey || getEnv('HOLOSPHERE_PRIVATE_KEY'),
|
|
77
|
-
logLevel: config.logLevel || getEnv('HOLOSPHERE_LOG_LEVEL') || '
|
|
126
|
+
logLevel: config.logLevel || getEnv('HOLOSPHERE_LOG_LEVEL') || 'INFO',
|
|
78
127
|
hybridMode: config.hybridMode !== false, // Enable by default
|
|
79
128
|
};
|
|
80
129
|
|
|
@@ -89,9 +138,12 @@ export class HoloSphere {
|
|
|
89
138
|
this._backend = null;
|
|
90
139
|
|
|
91
140
|
// For backward compatibility with Nostr, initialize synchronously
|
|
92
|
-
//
|
|
141
|
+
// GunDB and other backends use async initialization via _backendReady
|
|
93
142
|
if (this.config.backend === 'nostr') {
|
|
94
143
|
this._initNostrSync(config);
|
|
144
|
+
} else if (this.config.backend === 'gundb') {
|
|
145
|
+
// GunDB uses async init due to dynamic import
|
|
146
|
+
this._backendReady = this._initGunDBAsync(config);
|
|
95
147
|
} else {
|
|
96
148
|
// Async initialization for other backends
|
|
97
149
|
this._backendReady = this._initBackendAsync(config);
|
|
@@ -143,6 +195,68 @@ export class HoloSphere {
|
|
|
143
195
|
}
|
|
144
196
|
}
|
|
145
197
|
|
|
198
|
+
/**
|
|
199
|
+
* Initialize GunDB backend asynchronously (for browser compatibility with dynamic import)
|
|
200
|
+
* @private
|
|
201
|
+
*/
|
|
202
|
+
async _initGunDBAsync(config) {
|
|
203
|
+
try {
|
|
204
|
+
const gundbConfig = config.gundb || {};
|
|
205
|
+
|
|
206
|
+
// Create the full-featured GunDB backend
|
|
207
|
+
this._backend = new GunDBBackend({
|
|
208
|
+
appName: this.config.appName,
|
|
209
|
+
peers: gundbConfig.peers || [],
|
|
210
|
+
radisk: gundbConfig.radisk !== false,
|
|
211
|
+
localStorage: gundbConfig.localStorage !== false,
|
|
212
|
+
dataDir: config.dataDir,
|
|
213
|
+
privateKey: this.config.privateKey,
|
|
214
|
+
strict: gundbConfig.strict || false,
|
|
215
|
+
schemaCacheMaxAge: gundbConfig.schemaCacheMaxAge || 3600000,
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
// Initialize the backend
|
|
219
|
+
await this._backend.init();
|
|
220
|
+
|
|
221
|
+
// Set public key from backend
|
|
222
|
+
this.publicKey = this._backend.publicKey;
|
|
223
|
+
|
|
224
|
+
// Store Gun instance for direct access
|
|
225
|
+
this._gun = this._backend.gun;
|
|
226
|
+
|
|
227
|
+
// Create a client-like interface for compatibility
|
|
228
|
+
this.client = {
|
|
229
|
+
publicKey: this.publicKey,
|
|
230
|
+
gun: this._gun,
|
|
231
|
+
write: (path, data) => this._backend.write(path, data),
|
|
232
|
+
read: (path, options) => this._backend.read(path, options),
|
|
233
|
+
readAll: (path, options) => this._backend.readAll(path, options),
|
|
234
|
+
update: (path, updates) => this._backend.update(path, updates),
|
|
235
|
+
delete: (path) => this._backend.delete(path),
|
|
236
|
+
subscribe: (path, callback, options) => this._backend.subscribe(path, callback, options),
|
|
237
|
+
buildPath: gunWrapper.buildPath,
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// Store Gun wrapper functions for direct access
|
|
241
|
+
this._gunWrapper = gunWrapper;
|
|
242
|
+
|
|
243
|
+
// Log startup information
|
|
244
|
+
this._logStartup({
|
|
245
|
+
version: pkg.version,
|
|
246
|
+
appName: this.config.appName,
|
|
247
|
+
backend: 'gundb',
|
|
248
|
+
peers: gundbConfig.peers || [],
|
|
249
|
+
publicKey: this.publicKey,
|
|
250
|
+
logLevel: this.config.logLevel,
|
|
251
|
+
persistence: gundbConfig.radisk !== false,
|
|
252
|
+
dataDir: config.dataDir,
|
|
253
|
+
});
|
|
254
|
+
} catch (error) {
|
|
255
|
+
this._log('ERROR', 'GunDB client initialization failed', { error: error.message });
|
|
256
|
+
throw new Error(`GunDB client initialization failed: ${error.message}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
146
260
|
/**
|
|
147
261
|
* Initialize non-Nostr backends asynchronously
|
|
148
262
|
* @private
|
|
@@ -270,4 +384,371 @@ export class HoloSphere {
|
|
|
270
384
|
metrics() {
|
|
271
385
|
return { ...this._metrics };
|
|
272
386
|
}
|
|
387
|
+
|
|
388
|
+
// ============================================================================
|
|
389
|
+
// GUNDB-SPECIFIC METHODS
|
|
390
|
+
// These methods are only available when using the 'gundb' backend
|
|
391
|
+
// ============================================================================
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Check if using GunDB backend
|
|
395
|
+
* @private
|
|
396
|
+
*/
|
|
397
|
+
_requireGunDB() {
|
|
398
|
+
if (this.config.backend !== 'gundb') {
|
|
399
|
+
throw new Error('This method requires the GunDB backend');
|
|
400
|
+
}
|
|
401
|
+
if (!this._backend) {
|
|
402
|
+
throw new Error('Backend not initialized. Call ready() first.');
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// ============================================================================
|
|
407
|
+
// GLOBAL TABLE OPERATIONS
|
|
408
|
+
// ============================================================================
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Write data to a global table
|
|
412
|
+
* @param {string} tableName - Global table name (e.g., 'federation', 'schemas')
|
|
413
|
+
* @param {Object} data - Data to write (must have 'id' field)
|
|
414
|
+
* @returns {Promise<boolean>} Success indicator
|
|
415
|
+
*/
|
|
416
|
+
async putGlobal(tableName, data) {
|
|
417
|
+
await this.ready();
|
|
418
|
+
this._requireGunDB();
|
|
419
|
+
return this._backend.writeGlobal(tableName, data);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/**
|
|
423
|
+
* Read data from a global table
|
|
424
|
+
* @param {string} tableName - Global table name
|
|
425
|
+
* @param {string} key - Data key
|
|
426
|
+
* @returns {Promise<Object|null>} Data or null if not found
|
|
427
|
+
*/
|
|
428
|
+
async getGlobal(tableName, key) {
|
|
429
|
+
await this.ready();
|
|
430
|
+
this._requireGunDB();
|
|
431
|
+
return this._backend.readGlobal(tableName, key);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/**
|
|
435
|
+
* Read all data from a global table
|
|
436
|
+
* @param {string} tableName - Global table name
|
|
437
|
+
* @returns {Promise<Object[]>} Array of data objects
|
|
438
|
+
*/
|
|
439
|
+
async getAllGlobal(tableName) {
|
|
440
|
+
await this.ready();
|
|
441
|
+
this._requireGunDB();
|
|
442
|
+
return this._backend.readAllGlobal(tableName);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* Delete data from a global table
|
|
447
|
+
* @param {string} tableName - Global table name
|
|
448
|
+
* @param {string} key - Data key
|
|
449
|
+
* @returns {Promise<boolean>} Success indicator
|
|
450
|
+
*/
|
|
451
|
+
async deleteGlobal(tableName, key) {
|
|
452
|
+
await this.ready();
|
|
453
|
+
this._requireGunDB();
|
|
454
|
+
return this._backend.deleteGlobal(tableName, key);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
// ============================================================================
|
|
458
|
+
// REFERENCE OPERATIONS
|
|
459
|
+
// ============================================================================
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Create a reference to data
|
|
463
|
+
* @param {string} holon - Holon ID
|
|
464
|
+
* @param {string} lens - Lens name
|
|
465
|
+
* @param {Object} data - Data object (must have 'id' field)
|
|
466
|
+
* @returns {Object} Reference object with id and soul
|
|
467
|
+
*/
|
|
468
|
+
createReference(holon, lens, data) {
|
|
469
|
+
this._requireGunDB();
|
|
470
|
+
return this._backend.createReference(holon, lens, data);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Check if data is a reference
|
|
475
|
+
* @param {Object} data - Data to check
|
|
476
|
+
* @returns {boolean} True if data is a reference
|
|
477
|
+
*/
|
|
478
|
+
isReference(data) {
|
|
479
|
+
this._requireGunDB();
|
|
480
|
+
return this._backend.isReference(data);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/**
|
|
484
|
+
* Resolve a reference to get actual data
|
|
485
|
+
* @param {Object} reference - Reference object
|
|
486
|
+
* @param {Object} options - Resolution options
|
|
487
|
+
* @returns {Promise<Object|null>} Resolved data or null
|
|
488
|
+
*/
|
|
489
|
+
async resolveReference(reference, options = {}) {
|
|
490
|
+
await this.ready();
|
|
491
|
+
this._requireGunDB();
|
|
492
|
+
return this._backend.resolveReference(reference, options);
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
// ============================================================================
|
|
496
|
+
// AUTHENTICATION OPERATIONS
|
|
497
|
+
// ============================================================================
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Authenticate for a holon
|
|
501
|
+
* @param {string} holonId - Holon ID
|
|
502
|
+
* @param {string} password - Password
|
|
503
|
+
* @returns {Promise<Object>} Authenticated user object
|
|
504
|
+
*/
|
|
505
|
+
async authenticate(holonId, password) {
|
|
506
|
+
await this.ready();
|
|
507
|
+
this._requireGunDB();
|
|
508
|
+
return this._backend.authenticate(holonId, password);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/**
|
|
512
|
+
* Create a new user for a holon
|
|
513
|
+
* @param {string} holonId - Holon ID
|
|
514
|
+
* @param {string} password - Password
|
|
515
|
+
* @returns {Promise<Object>} Created user object
|
|
516
|
+
*/
|
|
517
|
+
async createUser(holonId, password) {
|
|
518
|
+
await this.ready();
|
|
519
|
+
this._requireGunDB();
|
|
520
|
+
return this._backend.createUser(holonId, password);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Logout current user
|
|
525
|
+
*/
|
|
526
|
+
logout() {
|
|
527
|
+
this._requireGunDB();
|
|
528
|
+
this._backend.logout();
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Check if authenticated
|
|
533
|
+
* @returns {boolean} True if authenticated
|
|
534
|
+
*/
|
|
535
|
+
isAuthenticated() {
|
|
536
|
+
this._requireGunDB();
|
|
537
|
+
return this._backend.isAuthenticated();
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* Write to private storage (requires authentication)
|
|
542
|
+
* @param {string} lens - Lens name
|
|
543
|
+
* @param {string} key - Data key
|
|
544
|
+
* @param {Object} data - Data to write
|
|
545
|
+
* @returns {Promise<boolean>} Success indicator
|
|
546
|
+
*/
|
|
547
|
+
async writePrivate(lens, key, data) {
|
|
548
|
+
await this.ready();
|
|
549
|
+
this._requireGunDB();
|
|
550
|
+
return this._backend.writePrivate(lens, key, data);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Read from private storage (requires authentication)
|
|
555
|
+
* @param {string} lens - Lens name
|
|
556
|
+
* @param {string} key - Data key
|
|
557
|
+
* @returns {Promise<Object|null>} Data or null
|
|
558
|
+
*/
|
|
559
|
+
async readPrivate(lens, key) {
|
|
560
|
+
await this.ready();
|
|
561
|
+
this._requireGunDB();
|
|
562
|
+
return this._backend.readPrivate(lens, key);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
// ============================================================================
|
|
566
|
+
// SCHEMA OPERATIONS
|
|
567
|
+
// ============================================================================
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Set a schema for a lens
|
|
571
|
+
* @param {string} lens - Lens name
|
|
572
|
+
* @param {Object} schema - JSON Schema definition
|
|
573
|
+
* @returns {Promise<boolean>} Success indicator
|
|
574
|
+
*/
|
|
575
|
+
async setSchema(lens, schema) {
|
|
576
|
+
await this.ready();
|
|
577
|
+
this._requireGunDB();
|
|
578
|
+
return this._backend.setSchema(lens, schema);
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* Get a schema for a lens
|
|
583
|
+
* @param {string} lens - Lens name
|
|
584
|
+
* @returns {Promise<Object|null>} Schema or null
|
|
585
|
+
*/
|
|
586
|
+
async getSchema(lens) {
|
|
587
|
+
await this.ready();
|
|
588
|
+
this._requireGunDB();
|
|
589
|
+
return this._backend.getSchema(lens);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/**
|
|
593
|
+
* Validate data against a lens schema
|
|
594
|
+
* @param {string} lens - Lens name
|
|
595
|
+
* @param {Object} data - Data to validate
|
|
596
|
+
* @returns {Promise<Object>} Validation result { valid: boolean, errors: Array }
|
|
597
|
+
*/
|
|
598
|
+
async validateData(lens, data) {
|
|
599
|
+
await this.ready();
|
|
600
|
+
this._requireGunDB();
|
|
601
|
+
return this._backend.validateData(lens, data);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// ============================================================================
|
|
605
|
+
// FEDERATION OPERATIONS
|
|
606
|
+
// ============================================================================
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* Create a federation relationship between two spaces
|
|
610
|
+
* @param {string} spaceId1 - First space ID
|
|
611
|
+
* @param {string} spaceId2 - Second space ID
|
|
612
|
+
* @param {boolean} bidirectional - Whether to set up bidirectional notifications (default: true)
|
|
613
|
+
* @returns {Promise<boolean>} True if federation was created
|
|
614
|
+
*/
|
|
615
|
+
async federate(spaceId1, spaceId2, bidirectional = true) {
|
|
616
|
+
await this.ready();
|
|
617
|
+
this._requireGunDB();
|
|
618
|
+
return gunFederation.federate(this._backend, spaceId1, spaceId2, bidirectional);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* Remove a federation relationship
|
|
623
|
+
* @param {string} spaceId1 - First space ID
|
|
624
|
+
* @param {string} spaceId2 - Second space ID
|
|
625
|
+
* @returns {Promise<boolean>} True if federation was removed
|
|
626
|
+
*/
|
|
627
|
+
async unfederate(spaceId1, spaceId2) {
|
|
628
|
+
await this.ready();
|
|
629
|
+
this._requireGunDB();
|
|
630
|
+
return gunFederation.unfederate(this._backend, spaceId1, spaceId2);
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
/**
|
|
634
|
+
* Get federation info for a space
|
|
635
|
+
* @param {string} spaceId - Space ID
|
|
636
|
+
* @returns {Promise<Object|null>} Federation info or null
|
|
637
|
+
*/
|
|
638
|
+
async getFederation(spaceId) {
|
|
639
|
+
await this.ready();
|
|
640
|
+
this._requireGunDB();
|
|
641
|
+
return gunFederation.getFederation(this._backend, spaceId);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
/**
|
|
645
|
+
* Reset all federation relationships for a space
|
|
646
|
+
* @param {string} spaceId - Space ID
|
|
647
|
+
* @param {Object} options - Reset options
|
|
648
|
+
* @returns {Promise<Object>} Result object
|
|
649
|
+
*/
|
|
650
|
+
async resetFederation(spaceId, options = {}) {
|
|
651
|
+
await this.ready();
|
|
652
|
+
this._requireGunDB();
|
|
653
|
+
return gunFederation.resetFederation(this._backend, spaceId, options);
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* Propagate data to federated spaces
|
|
658
|
+
* @param {string} holon - Holon identifier
|
|
659
|
+
* @param {string} lens - Lens identifier
|
|
660
|
+
* @param {Object} data - Data to propagate
|
|
661
|
+
* @param {Object} options - Propagation options
|
|
662
|
+
* @returns {Promise<Object>} Result with success count and errors
|
|
663
|
+
*/
|
|
664
|
+
async propagate(holon, lens, data, options = {}) {
|
|
665
|
+
await this.ready();
|
|
666
|
+
this._requireGunDB();
|
|
667
|
+
return gunFederation.propagate(this._backend, holon, lens, data, options);
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* Get combined data from local and federated sources
|
|
672
|
+
* @param {string} holon - Local holon name
|
|
673
|
+
* @param {string} lens - Lens to query
|
|
674
|
+
* @param {Object} options - Options for data retrieval and aggregation
|
|
675
|
+
* @returns {Promise<Array>} Combined array of local and federated data
|
|
676
|
+
*/
|
|
677
|
+
async getFederated(holon, lens, options = {}) {
|
|
678
|
+
await this.ready();
|
|
679
|
+
this._requireGunDB();
|
|
680
|
+
return gunFederation.getFederated(this._backend, holon, lens, options);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* Subscribe to federation notifications for a space
|
|
685
|
+
* @param {string} spaceId - Space ID to subscribe to
|
|
686
|
+
* @param {Function} callback - Callback to execute on notifications
|
|
687
|
+
* @param {Object} options - Subscription options
|
|
688
|
+
* @returns {Promise<Object>} Subscription object with unsubscribe() method
|
|
689
|
+
*/
|
|
690
|
+
async subscribeFederation(spaceId, callback, options = {}) {
|
|
691
|
+
await this.ready();
|
|
692
|
+
this._requireGunDB();
|
|
693
|
+
return gunFederation.subscribeFederation(this._backend, spaceId, callback, options);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* Track a federated message across different chats
|
|
698
|
+
* @param {string} originalChatId - Original chat ID
|
|
699
|
+
* @param {string} messageId - Original message ID
|
|
700
|
+
* @param {string} federatedChatId - Federated chat ID
|
|
701
|
+
* @param {string} federatedMessageId - Federated message ID
|
|
702
|
+
* @param {string} type - Message type
|
|
703
|
+
* @returns {Promise<void>}
|
|
704
|
+
*/
|
|
705
|
+
async federateMessage(originalChatId, messageId, federatedChatId, federatedMessageId, type = 'generic') {
|
|
706
|
+
await this.ready();
|
|
707
|
+
this._requireGunDB();
|
|
708
|
+
return gunFederation.federateMessage(this._backend, originalChatId, messageId, federatedChatId, federatedMessageId, type);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* Get all federated messages for a given original message
|
|
713
|
+
* @param {string} originalChatId - Original chat ID
|
|
714
|
+
* @param {string} messageId - Original message ID
|
|
715
|
+
* @returns {Promise<Object|null>} Tracking information for the message
|
|
716
|
+
*/
|
|
717
|
+
async getFederatedMessages(originalChatId, messageId) {
|
|
718
|
+
await this.ready();
|
|
719
|
+
this._requireGunDB();
|
|
720
|
+
return gunFederation.getFederatedMessages(this._backend, originalChatId, messageId);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
/**
|
|
724
|
+
* Update a federated message across all federated chats
|
|
725
|
+
* @param {string} originalChatId - Original chat ID
|
|
726
|
+
* @param {string} messageId - Original message ID
|
|
727
|
+
* @param {Function} updateCallback - Function to update the message in each chat
|
|
728
|
+
* @returns {Promise<void>}
|
|
729
|
+
*/
|
|
730
|
+
async updateFederatedMessages(originalChatId, messageId, updateCallback) {
|
|
731
|
+
await this.ready();
|
|
732
|
+
this._requireGunDB();
|
|
733
|
+
return gunFederation.updateFederatedMessages(this._backend, originalChatId, messageId, updateCallback);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// ============================================================================
|
|
737
|
+
// LIFECYCLE
|
|
738
|
+
// ============================================================================
|
|
739
|
+
|
|
740
|
+
/**
|
|
741
|
+
* Closes the backend and cleans up resources.
|
|
742
|
+
* Should be called when done using the HoloSphere instance.
|
|
743
|
+
*
|
|
744
|
+
* @returns {void}
|
|
745
|
+
*/
|
|
746
|
+
close() {
|
|
747
|
+
if (this._backend) {
|
|
748
|
+
this._backend.close();
|
|
749
|
+
}
|
|
750
|
+
if (this.client && typeof this.client.close === 'function') {
|
|
751
|
+
this.client.close();
|
|
752
|
+
}
|
|
753
|
+
}
|
|
273
754
|
}
|