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.
- package/CHANGELOG.md +446 -0
- package/FEATURES.md +431 -0
- package/LICENSE +29 -166
- package/LICENSE-AGPL.md +180 -0
- package/dist/cdn/holosphere.min.js +55 -0
- package/dist/cdn/holosphere.min.js.map +1 -0
- package/dist/cjs/holosphere.cjs +1 -1
- package/dist/esm/holosphere.js +1 -1
- package/dist/{index-CKffQDmQ.cjs → index-DDGt_V9o.cjs} +2 -2
- package/dist/{index-CKffQDmQ.cjs.map → index-DDGt_V9o.cjs.map} +1 -1
- package/dist/{index-4XHHKe6S.js → index-DJXftyvB.js} +1905 -337
- package/dist/index-DJXftyvB.js.map +1 -0
- package/dist/{index-Dz5kOZMI.cjs → index-DMbdcMtK.cjs} +17 -4
- package/dist/index-DMbdcMtK.cjs.map +1 -0
- package/dist/{index-BjP1TXGz.js → index-DeZ1xz_s.js} +2 -2
- package/dist/{index-BjP1TXGz.js.map → index-DeZ1xz_s.js.map} +1 -1
- package/dist/{indexeddb-storage-lExjjFlV.js → indexeddb-storage-BFt6hMeF.js} +48 -4
- package/dist/indexeddb-storage-BFt6hMeF.js.map +1 -0
- package/dist/{indexeddb-storage-DD7EFBVc.cjs → indexeddb-storage-BK5tv4Sh.cjs} +2 -2
- package/dist/indexeddb-storage-BK5tv4Sh.cjs.map +1 -0
- package/dist/{memory-storage-C68adso2.js → memory-storage-C9HuoL2E.js} +44 -4
- package/dist/memory-storage-C9HuoL2E.js.map +1 -0
- package/dist/{memory-storage-DD_6yyXT.cjs → memory-storage-Dao7jfYG.cjs} +2 -2
- package/dist/memory-storage-Dao7jfYG.cjs.map +1 -0
- package/dist/{secp256k1-DYELiqgx.cjs → secp256k1-BbKzbLtD.cjs} +2 -2
- package/dist/{secp256k1-DYELiqgx.cjs.map → secp256k1-BbKzbLtD.cjs.map} +1 -1
- package/dist/{secp256k1-OM8siPyy.js → secp256k1-CreY7Pcl.js} +2 -2
- package/dist/{secp256k1-OM8siPyy.js.map → secp256k1-CreY7Pcl.js.map} +1 -1
- 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/jsdoc.json +26 -0
- package/package.json +14 -3
- 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/content/social-protocols.js +34 -25
- package/src/contracts/chain-manager.js +68 -40
- package/src/contracts/deployer.js +70 -42
- package/src/contracts/event-listener.js +61 -29
- package/src/contracts/holon-contracts.js +46 -31
- package/src/contracts/index.js +5 -6
- package/src/contracts/networks.js +19 -14
- package/src/contracts/operations.js +58 -41
- package/src/contracts/queries.js +54 -20
- package/src/core/holosphere.js +35 -6
- package/src/crypto/nostr-utils.js +82 -76
- package/src/crypto/secp256k1.js +7 -2
- package/src/federation/handshake.js +7 -7
- package/src/federation/hologram.js +9 -1
- package/src/hierarchical/upcast.js +34 -20
- package/src/index.js +655 -5
- package/src/lib/ai-methods.js +352 -3
- package/src/lib/contract-methods.js +152 -3
- package/src/lib/errors.js +31 -1
- package/src/lib/federation-methods.js +110 -3
- package/src/lib/index.js +9 -5
- package/src/schema/validator.js +22 -3
- package/src/spatial/h3-operations.js +17 -1
- 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 +29 -2
- 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 +7 -2
- package/src/storage/gun-async.js +20 -11
- package/src/storage/gun-auth.js +15 -4
- package/src/storage/gun-federation.js +14 -5
- package/src/storage/gun-references.js +16 -5
- package/src/storage/gun-schema.js +25 -10
- package/src/storage/gun-wrapper.js +99 -36
- package/src/storage/indexeddb-storage.js +65 -4
- package/src/storage/key-storage-simple.js +32 -9
- package/src/storage/key-storage.js +45 -13
- package/src/storage/memory-storage.js +65 -4
- package/src/storage/migration.js +20 -7
- package/src/storage/nostr-async.js +157 -67
- package/src/storage/nostr-client.js +173 -49
- package/src/storage/nostr-wrapper.js +6 -2
- package/src/storage/outbox-queue.js +55 -18
- package/src/storage/persistent-storage.js +56 -13
- package/src/storage/sync-service.js +51 -17
- package/src/storage/unified-storage.js +7 -2
- package/src/subscriptions/manager.js +33 -16
- package/dist/index-4XHHKe6S.js.map +0 -1
- package/dist/index-Dz5kOZMI.cjs.map +0 -1
- package/dist/indexeddb-storage-DD7EFBVc.cjs.map +0 -1
- package/dist/indexeddb-storage-lExjjFlV.js.map +0 -1
- package/dist/memory-storage-C68adso2.js.map +0 -1
- package/dist/memory-storage-DD_6yyXT.cjs.map +0 -1
- /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
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Abstract Storage Backend Interface
|
|
3
|
-
*
|
|
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,
|
|
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
|
|
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
|
|
3
|
-
*
|
|
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
|
|
3
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
4
|
-
*
|
|
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
|
-
*
|
|
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';
|
package/src/storage/gun-async.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Gun Async Utilities
|
|
3
|
-
*
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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) {
|
package/src/storage/gun-auth.js
CHANGED
|
@@ -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
|
*/
|