@web_of_trust/core 0.2.2
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/README.md +357 -0
- package/dist/adapters/authorization/InMemoryAuthorizationAdapter.d.ts +30 -0
- package/dist/adapters/authorization/InMemoryAuthorizationAdapter.d.ts.map +1 -0
- package/dist/adapters/crypto/WebCryptoAdapter.d.ts +30 -0
- package/dist/adapters/crypto/WebCryptoAdapter.d.ts.map +1 -0
- package/dist/adapters/crypto/index.d.ts +2 -0
- package/dist/adapters/crypto/index.d.ts.map +1 -0
- package/dist/adapters/discovery/HttpDiscoveryAdapter.d.ts +25 -0
- package/dist/adapters/discovery/HttpDiscoveryAdapter.d.ts.map +1 -0
- package/dist/adapters/discovery/InMemoryGraphCacheStore.d.ts +29 -0
- package/dist/adapters/discovery/InMemoryGraphCacheStore.d.ts.map +1 -0
- package/dist/adapters/discovery/InMemoryPublishStateStore.d.ts +13 -0
- package/dist/adapters/discovery/InMemoryPublishStateStore.d.ts.map +1 -0
- package/dist/adapters/discovery/OfflineFirstDiscoveryAdapter.d.ts +62 -0
- package/dist/adapters/discovery/OfflineFirstDiscoveryAdapter.d.ts.map +1 -0
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/interfaces/AuthorizationAdapter.d.ts +52 -0
- package/dist/adapters/interfaces/AuthorizationAdapter.d.ts.map +1 -0
- package/dist/adapters/interfaces/CryptoAdapter.d.ts +43 -0
- package/dist/adapters/interfaces/CryptoAdapter.d.ts.map +1 -0
- package/dist/adapters/interfaces/DiscoveryAdapter.d.ts +71 -0
- package/dist/adapters/interfaces/DiscoveryAdapter.d.ts.map +1 -0
- package/dist/adapters/interfaces/GraphCacheStore.d.ts +66 -0
- package/dist/adapters/interfaces/GraphCacheStore.d.ts.map +1 -0
- package/dist/adapters/interfaces/MessagingAdapter.d.ts +23 -0
- package/dist/adapters/interfaces/MessagingAdapter.d.ts.map +1 -0
- package/dist/adapters/interfaces/OutboxStore.d.ts +35 -0
- package/dist/adapters/interfaces/OutboxStore.d.ts.map +1 -0
- package/dist/adapters/interfaces/PublishStateStore.d.ts +23 -0
- package/dist/adapters/interfaces/PublishStateStore.d.ts.map +1 -0
- package/dist/adapters/interfaces/ReactiveStorageAdapter.d.ts +23 -0
- package/dist/adapters/interfaces/ReactiveStorageAdapter.d.ts.map +1 -0
- package/dist/adapters/interfaces/ReplicationAdapter.d.ts +57 -0
- package/dist/adapters/interfaces/ReplicationAdapter.d.ts.map +1 -0
- package/dist/adapters/interfaces/SpaceMetadataStorage.d.ts +46 -0
- package/dist/adapters/interfaces/SpaceMetadataStorage.d.ts.map +1 -0
- package/dist/adapters/interfaces/StorageAdapter.d.ts +32 -0
- package/dist/adapters/interfaces/StorageAdapter.d.ts.map +1 -0
- package/dist/adapters/interfaces/Subscribable.d.ts +22 -0
- package/dist/adapters/interfaces/Subscribable.d.ts.map +1 -0
- package/dist/adapters/interfaces/index.d.ts +12 -0
- package/dist/adapters/interfaces/index.d.ts.map +1 -0
- package/dist/adapters/messaging/AutomergeOutboxStore.d.ts +24 -0
- package/dist/adapters/messaging/AutomergeOutboxStore.d.ts.map +1 -0
- package/dist/adapters/messaging/InMemoryMessagingAdapter.d.ts +36 -0
- package/dist/adapters/messaging/InMemoryMessagingAdapter.d.ts.map +1 -0
- package/dist/adapters/messaging/InMemoryOutboxStore.d.ts +12 -0
- package/dist/adapters/messaging/InMemoryOutboxStore.d.ts.map +1 -0
- package/dist/adapters/messaging/OutboxMessagingAdapter.d.ts +61 -0
- package/dist/adapters/messaging/OutboxMessagingAdapter.d.ts.map +1 -0
- package/dist/adapters/messaging/TracedOutboxMessagingAdapter.d.ts +20 -0
- package/dist/adapters/messaging/TracedOutboxMessagingAdapter.d.ts.map +1 -0
- package/dist/adapters/messaging/WebSocketMessagingAdapter.d.ts +63 -0
- package/dist/adapters/messaging/WebSocketMessagingAdapter.d.ts.map +1 -0
- package/dist/adapters/messaging/index.d.ts +3 -0
- package/dist/adapters/messaging/index.d.ts.map +1 -0
- package/dist/adapters/storage/AutomergeSpaceMetadataStorage.d.ts +22 -0
- package/dist/adapters/storage/AutomergeSpaceMetadataStorage.d.ts.map +1 -0
- package/dist/adapters/storage/InMemoryCompactStore.d.ts +18 -0
- package/dist/adapters/storage/InMemoryCompactStore.d.ts.map +1 -0
- package/dist/adapters/storage/InMemorySpaceMetadataStorage.d.ts +17 -0
- package/dist/adapters/storage/InMemorySpaceMetadataStorage.d.ts.map +1 -0
- package/dist/adapters/storage/IndexedDBSpaceMetadataStorage.d.ts +15 -0
- package/dist/adapters/storage/IndexedDBSpaceMetadataStorage.d.ts.map +1 -0
- package/dist/adapters/storage/LocalStorageAdapter.d.ts +26 -0
- package/dist/adapters/storage/LocalStorageAdapter.d.ts.map +1 -0
- package/dist/adapters/storage/index.d.ts +2 -0
- package/dist/adapters/storage/index.d.ts.map +1 -0
- package/dist/crypto/capabilities.d.ts +80 -0
- package/dist/crypto/capabilities.d.ts.map +1 -0
- package/dist/crypto/did.d.ts +19 -0
- package/dist/crypto/did.d.ts.map +1 -0
- package/dist/crypto/encoding.d.ts +7 -0
- package/dist/crypto/encoding.d.ts.map +1 -0
- package/dist/crypto/envelope-auth.d.ts +30 -0
- package/dist/crypto/envelope-auth.d.ts.map +1 -0
- package/dist/crypto/index.d.ts +4 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/jws.d.ts +26 -0
- package/dist/crypto/jws.d.ts.map +1 -0
- package/dist/identity/SeedStorage.d.ts +64 -0
- package/dist/identity/SeedStorage.d.ts.map +1 -0
- package/dist/identity/WotIdentity.d.ts +134 -0
- package/dist/identity/WotIdentity.d.ts.map +1 -0
- package/dist/identity/index.d.ts +3 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6840 -0
- package/dist/services/AttestationDeliveryService.d.ts +61 -0
- package/dist/services/AttestationDeliveryService.d.ts.map +1 -0
- package/dist/services/EncryptedSyncService.d.ts +26 -0
- package/dist/services/EncryptedSyncService.d.ts.map +1 -0
- package/dist/services/GraphCacheService.d.ts +56 -0
- package/dist/services/GraphCacheService.d.ts.map +1 -0
- package/dist/services/GroupKeyService.d.ts +43 -0
- package/dist/services/GroupKeyService.d.ts.map +1 -0
- package/dist/services/ProfileService.d.ts +19 -0
- package/dist/services/ProfileService.d.ts.map +1 -0
- package/dist/services/VaultClient.d.ts +53 -0
- package/dist/services/VaultClient.d.ts.map +1 -0
- package/dist/services/VaultPushScheduler.d.ts +49 -0
- package/dist/services/VaultPushScheduler.d.ts.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/storage/CompactStorageManager.d.ts +22 -0
- package/dist/storage/CompactStorageManager.d.ts.map +1 -0
- package/dist/storage/PersistenceMetrics.d.ts +141 -0
- package/dist/storage/PersistenceMetrics.d.ts.map +1 -0
- package/dist/storage/TraceLog.d.ts +85 -0
- package/dist/storage/TraceLog.d.ts.map +1 -0
- package/dist/storage/TracedCompactStorageManager.d.ts +12 -0
- package/dist/storage/TracedCompactStorageManager.d.ts.map +1 -0
- package/dist/types/attestation.d.ts +33 -0
- package/dist/types/attestation.d.ts.map +1 -0
- package/dist/types/contact.d.ts +25 -0
- package/dist/types/contact.d.ts.map +1 -0
- package/dist/types/identity.d.ts +28 -0
- package/dist/types/identity.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/messaging.d.ts +33 -0
- package/dist/types/messaging.d.ts.map +1 -0
- package/dist/types/proof.d.ts +12 -0
- package/dist/types/proof.d.ts.map +1 -0
- package/dist/types/resource-ref.d.ts +25 -0
- package/dist/types/resource-ref.d.ts.map +1 -0
- package/dist/types/space.d.ts +25 -0
- package/dist/types/space.d.ts.map +1 -0
- package/dist/types/verification.d.ts +49 -0
- package/dist/types/verification.d.ts.map +1 -0
- package/dist/verification/VerificationHelper.d.ts +75 -0
- package/dist/verification/VerificationHelper.d.ts.map +1 -0
- package/dist/verification/index.d.ts +2 -0
- package/dist/verification/index.d.ts.map +1 -0
- package/dist/wordlists/german-positive.d.ts +21 -0
- package/dist/wordlists/german-positive.d.ts.map +1 -0
- package/dist/wordlists/index.d.ts +2 -0
- package/dist/wordlists/index.d.ts.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { MessagingAdapter } from '../adapters/interfaces/MessagingAdapter';
|
|
2
|
+
import { OutboxStore } from '../adapters/interfaces/OutboxStore';
|
|
3
|
+
import { Subscribable } from '../adapters/interfaces/Subscribable';
|
|
4
|
+
/**
|
|
5
|
+
* Delivery status lifecycle:
|
|
6
|
+
* sending → queued → delivered → acknowledged
|
|
7
|
+
* ↘ failed ↙
|
|
8
|
+
*/
|
|
9
|
+
export type DeliveryStatus = 'sending' | 'queued' | 'delivered' | 'acknowledged' | 'failed';
|
|
10
|
+
/**
|
|
11
|
+
* Tracks delivery status for attestation messages.
|
|
12
|
+
*
|
|
13
|
+
* Responsibilities:
|
|
14
|
+
* - Status map (attestationId → DeliveryStatus)
|
|
15
|
+
* - Reactive status updates via Subscribable
|
|
16
|
+
* - Relay receipt listener (delivered/failed)
|
|
17
|
+
* - Attestation-ack listener (acknowledged)
|
|
18
|
+
* - Outbox bootstrap (queued/failed on startup)
|
|
19
|
+
* - Optional persistence callback
|
|
20
|
+
*
|
|
21
|
+
* Does NOT handle attestation CRUD — that stays in the app layer.
|
|
22
|
+
*/
|
|
23
|
+
export declare class AttestationDeliveryService {
|
|
24
|
+
private deliveryStatus;
|
|
25
|
+
private statusSubscribers;
|
|
26
|
+
private receiptUnsubscribe;
|
|
27
|
+
private messageUnsubscribe;
|
|
28
|
+
private persistFn;
|
|
29
|
+
/**
|
|
30
|
+
* Set a persistence callback for delivery status (called on every status change).
|
|
31
|
+
* Apps use this to persist status to their storage layer (e.g. Automerge, IndexedDB).
|
|
32
|
+
*/
|
|
33
|
+
setPersistFn(fn: (attestationId: string, status: string) => Promise<void>): void;
|
|
34
|
+
/**
|
|
35
|
+
* Restore delivery statuses from persistent storage (call on app startup).
|
|
36
|
+
*/
|
|
37
|
+
restore(statuses: Map<string, string>): void;
|
|
38
|
+
getStatus(attestationId: string): DeliveryStatus | undefined;
|
|
39
|
+
watchStatus(): Subscribable<Map<string, DeliveryStatus>>;
|
|
40
|
+
/**
|
|
41
|
+
* Set status for an attestation. Called by the app layer after send attempts.
|
|
42
|
+
*/
|
|
43
|
+
setStatus(attestationId: string, status: DeliveryStatus): void;
|
|
44
|
+
/**
|
|
45
|
+
* Listen for relay delivery receipts and attestation-ack messages.
|
|
46
|
+
* Call once after messaging is connected.
|
|
47
|
+
*/
|
|
48
|
+
listenForReceipts(messaging: MessagingAdapter): void;
|
|
49
|
+
/**
|
|
50
|
+
* Stop listening for receipts. Call on disconnect/cleanup.
|
|
51
|
+
*/
|
|
52
|
+
stopListening(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Bootstrap delivery status from outbox (on app startup).
|
|
55
|
+
* Marks pending attestation envelopes as 'queued'.
|
|
56
|
+
* Marks stale 'sending' statuses (not in outbox) as 'failed'.
|
|
57
|
+
*/
|
|
58
|
+
initFromOutbox(outboxStore: OutboxStore): Promise<void>;
|
|
59
|
+
private notifySubscribers;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=AttestationDeliveryService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttestationDeliveryService.d.ts","sourceRoot":"","sources":["../../src/services/AttestationDeliveryService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAEvE;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,CAAA;AAE3F;;;;;;;;;;;;GAYG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,iBAAiB,CAAwD;IACjF,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,SAAS,CAA0E;IAE3F;;;OAGG;IACH,YAAY,CAAC,EAAE,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIhF;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAY5C,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI5D,WAAW,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAUxD;;OAEG;IACH,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAS9D;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,IAAI;IA4BpD;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB7D,OAAO,CAAC,iBAAiB;CAK1B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EncryptedSyncService — Encrypts/decrypts CRDT changes with a group key.
|
|
3
|
+
*
|
|
4
|
+
* Used for Encrypted Group Spaces: each change is AES-256-GCM encrypted
|
|
5
|
+
* before being sent to other members. The server (relay) never sees plaintext.
|
|
6
|
+
*
|
|
7
|
+
* Pattern: Encrypt-then-sync (inspired by Keyhive/NextGraph)
|
|
8
|
+
*/
|
|
9
|
+
export interface EncryptedChange {
|
|
10
|
+
ciphertext: Uint8Array;
|
|
11
|
+
nonce: Uint8Array;
|
|
12
|
+
spaceId: string;
|
|
13
|
+
generation: number;
|
|
14
|
+
fromDid: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class EncryptedSyncService {
|
|
17
|
+
/**
|
|
18
|
+
* Encrypt a CRDT change with a group key.
|
|
19
|
+
*/
|
|
20
|
+
static encryptChange(data: Uint8Array, groupKey: Uint8Array, spaceId: string, generation: number, fromDid: string): Promise<EncryptedChange>;
|
|
21
|
+
/**
|
|
22
|
+
* Decrypt a CRDT change with a group key.
|
|
23
|
+
*/
|
|
24
|
+
static decryptChange(change: EncryptedChange, groupKey: Uint8Array): Promise<Uint8Array>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=EncryptedSyncService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EncryptedSyncService.d.ts","sourceRoot":"","sources":["../../src/services/EncryptedSyncService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,UAAU,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,qBAAa,oBAAoB;IAC/B;;OAEG;WACU,aAAa,CACxB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,UAAU,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,CAAC;IAyB3B;;OAEG;WACU,aAAa,CACxB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,UAAU,CAAC;CAiBvB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { DiscoveryAdapter } from '../adapters/interfaces/DiscoveryAdapter';
|
|
2
|
+
import { GraphCacheStore, CachedGraphEntry } from '../adapters/interfaces/GraphCacheStore';
|
|
3
|
+
export interface GraphCacheOptions {
|
|
4
|
+
/** How long before cached data is considered stale (ms). Default: 1 hour. */
|
|
5
|
+
staleDurationMs?: number;
|
|
6
|
+
/** Maximum concurrent fetches during bulk refresh. Default: 3. */
|
|
7
|
+
concurrency?: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Orchestrator that fetches graph data via DiscoveryAdapter
|
|
11
|
+
* and persists it to GraphCacheStore.
|
|
12
|
+
*
|
|
13
|
+
* Implements stale-while-revalidate: returns cached data immediately,
|
|
14
|
+
* refreshes in background when stale.
|
|
15
|
+
*/
|
|
16
|
+
export declare class GraphCacheService {
|
|
17
|
+
private discovery;
|
|
18
|
+
private store;
|
|
19
|
+
private staleDurationMs;
|
|
20
|
+
private concurrency;
|
|
21
|
+
private refreshing;
|
|
22
|
+
constructor(discovery: DiscoveryAdapter, store: GraphCacheStore, options?: GraphCacheOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Ensure a DID's data is cached. Returns cached data immediately.
|
|
25
|
+
* If stale or missing, fetches in background.
|
|
26
|
+
*/
|
|
27
|
+
ensureCached(did: string): Promise<CachedGraphEntry | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Force-refresh a DID's graph data from the network.
|
|
30
|
+
* Returns the fresh data, or existing cached data if fetch fails.
|
|
31
|
+
*/
|
|
32
|
+
refresh(did: string): Promise<CachedGraphEntry | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Refresh graph data for all given contact DIDs.
|
|
35
|
+
* Used on app start to populate cache for contacts.
|
|
36
|
+
* Respects concurrency limit. Only refreshes stale/missing entries.
|
|
37
|
+
*/
|
|
38
|
+
refreshContacts(contactDids: string[]): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Lightweight batch refresh: fetches only name + counts for all DIDs
|
|
41
|
+
* in a single HTTP request via resolveSummaries().
|
|
42
|
+
*
|
|
43
|
+
* Falls back to full refreshContacts() if the DiscoveryAdapter
|
|
44
|
+
* doesn't support resolveSummaries().
|
|
45
|
+
*/
|
|
46
|
+
refreshContactSummaries(contactDids: string[]): Promise<void>;
|
|
47
|
+
/** Resolve DID to display name from cache. */
|
|
48
|
+
resolveName(did: string): Promise<string | null>;
|
|
49
|
+
/** Batch resolve DIDs to names from cache. */
|
|
50
|
+
resolveNames(dids: string[]): Promise<Map<string, string>>;
|
|
51
|
+
/** Find which of myContactDids have also verified the target DID. */
|
|
52
|
+
findMutualContacts(targetDid: string, myContactDids: string[]): Promise<string[]>;
|
|
53
|
+
private isStale;
|
|
54
|
+
private refreshInBackground;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=GraphCacheService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphCacheService.d.ts","sourceRoot":"","sources":["../../src/services/GraphCacheService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAA;AAE/F,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAM1B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IANf,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,UAAU,CAAoB;gBAG5B,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,eAAe,EAC9B,OAAO,CAAC,EAAE,iBAAiB;IAM7B;;;OAGG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAUjE;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAe5D;;;;OAIG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAe3D;;;;;;OAMG;IACG,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBnE,8CAA8C;IACxC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAItD,8CAA8C;IACxC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIhE,qEAAqE;IAC/D,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAIvF,OAAO,CAAC,OAAO;YAKD,mBAAmB;CASlC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GroupKeyService — Manages symmetric group keys for Encrypted Spaces.
|
|
3
|
+
*
|
|
4
|
+
* Each space has a group key that all members share. The key can be rotated
|
|
5
|
+
* (e.g., when a member is removed). Old keys are kept so that old messages
|
|
6
|
+
* can still be decrypted. Keys are identified by (spaceId, generation).
|
|
7
|
+
*
|
|
8
|
+
* In-memory only — persistence is handled by the StorageAdapter.
|
|
9
|
+
*/
|
|
10
|
+
export declare class GroupKeyService {
|
|
11
|
+
private spaces;
|
|
12
|
+
/**
|
|
13
|
+
* Create a new group key for a space (generation 0).
|
|
14
|
+
* Returns the generated key.
|
|
15
|
+
*/
|
|
16
|
+
createKey(spaceId: string): Promise<Uint8Array>;
|
|
17
|
+
/**
|
|
18
|
+
* Rotate the group key for a space.
|
|
19
|
+
* Increments generation, old keys remain accessible.
|
|
20
|
+
*/
|
|
21
|
+
rotateKey(spaceId: string): Promise<Uint8Array>;
|
|
22
|
+
/**
|
|
23
|
+
* Get the current (latest) key for a space.
|
|
24
|
+
* Returns null if space is unknown.
|
|
25
|
+
*/
|
|
26
|
+
getCurrentKey(spaceId: string): Uint8Array | null;
|
|
27
|
+
/**
|
|
28
|
+
* Get the current generation number for a space.
|
|
29
|
+
* Returns -1 if space is unknown.
|
|
30
|
+
*/
|
|
31
|
+
getCurrentGeneration(spaceId: string): number;
|
|
32
|
+
/**
|
|
33
|
+
* Get a key by generation (for decrypting old messages).
|
|
34
|
+
* Returns null if space or generation is unknown.
|
|
35
|
+
*/
|
|
36
|
+
getKeyByGeneration(spaceId: string, generation: number): Uint8Array | null;
|
|
37
|
+
/**
|
|
38
|
+
* Import a key for a space at a specific generation.
|
|
39
|
+
* Used when receiving a group key from an invite.
|
|
40
|
+
*/
|
|
41
|
+
importKey(spaceId: string, key: Uint8Array, generation: number): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=GroupKeyService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupKeyService.d.ts","sourceRoot":"","sources":["../../src/services/GroupKeyService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAmC;IAEjD;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMrD;;;OAGG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAWrD;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAMjD;;;OAGG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAM7C;;;OAGG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAM1E;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;CAYtE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PublicProfile } from '../types/identity';
|
|
2
|
+
import { WotIdentity } from '../identity/WotIdentity';
|
|
3
|
+
export declare class ProfileService {
|
|
4
|
+
/**
|
|
5
|
+
* Sign a public profile as JWS using the identity's private key
|
|
6
|
+
*/
|
|
7
|
+
static signProfile(profile: PublicProfile, identity: WotIdentity): Promise<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Verify a JWS-signed profile.
|
|
10
|
+
* Extracts the DID from the payload, resolves the public key,
|
|
11
|
+
* and verifies the signature.
|
|
12
|
+
*/
|
|
13
|
+
static verifyProfile(jws: string): Promise<{
|
|
14
|
+
valid: boolean;
|
|
15
|
+
profile?: PublicProfile;
|
|
16
|
+
error?: string;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ProfileService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProfileService.d.ts","sourceRoot":"","sources":["../../src/services/ProfileService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAK1D,qBAAa,cAAc;IACzB;;OAEG;WACU,WAAW,CACtB,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC;IAIlB;;;;OAIG;WACU,aAAa,CACxB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,aAAa,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAqCxE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { WotIdentity } from '../identity/WotIdentity';
|
|
2
|
+
export interface VaultChange {
|
|
3
|
+
seq: number;
|
|
4
|
+
data: string;
|
|
5
|
+
authorDid: string;
|
|
6
|
+
createdAt: string;
|
|
7
|
+
}
|
|
8
|
+
export interface VaultSnapshot {
|
|
9
|
+
data: string;
|
|
10
|
+
upToSeq: number;
|
|
11
|
+
}
|
|
12
|
+
export interface VaultDocInfo {
|
|
13
|
+
latestSeq: number;
|
|
14
|
+
snapshotSeq: number | null;
|
|
15
|
+
changeCount: number;
|
|
16
|
+
}
|
|
17
|
+
export interface VaultChangesResponse {
|
|
18
|
+
docId: string;
|
|
19
|
+
snapshot: VaultSnapshot | null;
|
|
20
|
+
changes: VaultChange[];
|
|
21
|
+
}
|
|
22
|
+
export declare class VaultClient {
|
|
23
|
+
private vaultUrl;
|
|
24
|
+
private identity;
|
|
25
|
+
/** Cache capabilities per docId (valid for 1 hour) */
|
|
26
|
+
private capabilityCache;
|
|
27
|
+
constructor(vaultUrl: string, identity: WotIdentity);
|
|
28
|
+
/**
|
|
29
|
+
* Push an encrypted change to the vault.
|
|
30
|
+
* @returns The assigned sequence number.
|
|
31
|
+
*/
|
|
32
|
+
pushChange(docId: string, encryptedData: Uint8Array): Promise<number>;
|
|
33
|
+
/**
|
|
34
|
+
* Get all changes (and optional snapshot) for a document.
|
|
35
|
+
*/
|
|
36
|
+
getChanges(docId: string, since?: number): Promise<VaultChangesResponse>;
|
|
37
|
+
/**
|
|
38
|
+
* Store a compacted snapshot (replaces changes up to upToSeq).
|
|
39
|
+
*/
|
|
40
|
+
putSnapshot(docId: string, encryptedData: Uint8Array, nonce: Uint8Array, upToSeq: number): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Get document info (seq, change count).
|
|
43
|
+
*/
|
|
44
|
+
getDocInfo(docId: string): Promise<VaultDocInfo | null>;
|
|
45
|
+
/**
|
|
46
|
+
* Delete a document from the vault.
|
|
47
|
+
*/
|
|
48
|
+
deleteDoc(docId: string): Promise<void>;
|
|
49
|
+
private authHeaders;
|
|
50
|
+
private getOrCreateCapability;
|
|
51
|
+
}
|
|
52
|
+
export declare function base64ToUint8(b64: string): Uint8Array;
|
|
53
|
+
//# sourceMappingURL=VaultClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VaultClient.d.ts","sourceRoot":"","sources":["../../src/services/VaultClient.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAG1D,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAA;IAC9B,OAAO,EAAE,WAAW,EAAE,CAAA;CACvB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAa;IAC7B,sDAAsD;IACtD,OAAO,CAAC,eAAe,CAAwD;gBAEnE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW;IAKnD;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB3E;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAwBzE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC9G;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAuB7D;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAsB/B,WAAW;YAcX,qBAAqB;CA0BpC;AAYD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAOrD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VaultPushScheduler — Immediate vs. debounced persistence scheduling.
|
|
3
|
+
*
|
|
4
|
+
* Two modes:
|
|
5
|
+
* - pushImmediate(): Explicit user actions (profile save, task create, contact add).
|
|
6
|
+
* Pushes right away, deduplicates via Automerge.getHeads() comparison.
|
|
7
|
+
* - pushDebounced(): Streaming changes (collaborative text editing) or remote sync.
|
|
8
|
+
* Waits for a pause before pushing.
|
|
9
|
+
*
|
|
10
|
+
* In-flight deduplication: If a push is already running and another comes in,
|
|
11
|
+
* at most one additional push is queued (not N).
|
|
12
|
+
*
|
|
13
|
+
* Lifecycle: Registers visibilitychange + beforeunload to flush pending work
|
|
14
|
+
* when the user leaves the tab.
|
|
15
|
+
*/
|
|
16
|
+
export interface VaultPushSchedulerConfig {
|
|
17
|
+
/** The actual push function (encrypt + HTTP). */
|
|
18
|
+
pushFn: () => Promise<void>;
|
|
19
|
+
/** Returns a string representing current doc state (Automerge.getHeads().join(',')). Null = no doc yet. */
|
|
20
|
+
getHeadsFn: () => string | null;
|
|
21
|
+
/** Debounce delay in ms. Default: 5000. */
|
|
22
|
+
debounceMs?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class VaultPushScheduler {
|
|
25
|
+
private pushFn;
|
|
26
|
+
private getHeadsFn;
|
|
27
|
+
private debounceMs;
|
|
28
|
+
private lastPushedHeads;
|
|
29
|
+
private debounceTimer;
|
|
30
|
+
private pushing;
|
|
31
|
+
private pendingAfterPush;
|
|
32
|
+
private destroyed;
|
|
33
|
+
private onVisibilityChange;
|
|
34
|
+
private onBeforeUnload;
|
|
35
|
+
constructor(config: VaultPushSchedulerConfig);
|
|
36
|
+
/** Set initial heads (e.g. after loading from vault — vault already has this state). */
|
|
37
|
+
setLastPushedHeads(heads: string | null): void;
|
|
38
|
+
/** Explicit user action — push immediately (deduplicated). */
|
|
39
|
+
pushImmediate(): void;
|
|
40
|
+
/** Streaming / remote sync — push after debounce delay. */
|
|
41
|
+
pushDebounced(): void;
|
|
42
|
+
/** Flush any pending debounced push immediately (lifecycle events). */
|
|
43
|
+
flush(): void;
|
|
44
|
+
/** Clean up timers and lifecycle handlers. */
|
|
45
|
+
destroy(): void;
|
|
46
|
+
private clearDebounce;
|
|
47
|
+
private schedulePush;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=VaultPushScheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VaultPushScheduler.d.ts","sourceRoot":"","sources":["../../src/services/VaultPushScheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,wBAAwB;IACvC,iDAAiD;IACjD,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,2GAA2G;IAC3G,UAAU,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAC/B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,UAAU,CAAQ;IAE1B,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,aAAa,CAA6C;IAClE,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,cAAc,CAA4B;gBAEtC,MAAM,EAAE,wBAAwB;IAuB5C,wFAAwF;IACxF,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI9C,8DAA8D;IAC9D,aAAa,IAAI,IAAI;IAMrB,2DAA2D;IAC3D,aAAa,IAAI,IAAI;IASrB,uEAAuE;IACvE,KAAK,IAAI,IAAI;IAQb,8CAA8C;IAC9C,OAAO,IAAI,IAAI;IAgBf,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;CA8BrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CompactStorageManager — Single-snapshot-per-doc IndexedDB store.
|
|
3
|
+
*
|
|
4
|
+
* Unlike automerge-repo's IndexedDBStorageAdapter (which accumulates chunks),
|
|
5
|
+
* this store keeps exactly ONE Automerge.save() snapshot per docId.
|
|
6
|
+
* Saves overwrite — no accumulation, no OOM.
|
|
7
|
+
*
|
|
8
|
+
* IDB: database name is configurable, object store 'snapshots'.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CompactStorageManager {
|
|
11
|
+
private dbName;
|
|
12
|
+
private db;
|
|
13
|
+
constructor(dbName?: string);
|
|
14
|
+
open(): Promise<void>;
|
|
15
|
+
save(docId: string, binary: Uint8Array): Promise<void>;
|
|
16
|
+
load(docId: string): Promise<Uint8Array | null>;
|
|
17
|
+
delete(docId: string): Promise<void>;
|
|
18
|
+
list(): Promise<string[]>;
|
|
19
|
+
close(): void;
|
|
20
|
+
private getDb;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=CompactStorageManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompactStorageManager.d.ts","sourceRoot":"","sources":["../../src/storage/CompactStorageManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,EAAE,CAA2B;gBAEzB,MAAM,GAAE,MAA4B;IAI1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBrB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAW/C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAoB/B,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,KAAK;CAId"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistence Metrics
|
|
3
|
+
*
|
|
4
|
+
* Structured logging and monitoring for the persistence layer.
|
|
5
|
+
* Collects load/save/error metrics and exposes them via window.wotDebug().
|
|
6
|
+
* Automatically writes to TraceLog for unified data-flow tracing.
|
|
7
|
+
*
|
|
8
|
+
* Output format:
|
|
9
|
+
* [persistence] ✓ load impl=legacy source=indexeddb time=3775ms size=12.3KB contacts=9
|
|
10
|
+
* [persistence] ✓ save impl=legacy target=vault time=210ms size=12.3KB
|
|
11
|
+
* [persistence] ✗ save impl=legacy target=vault error="NetworkError" time=5002ms
|
|
12
|
+
*/
|
|
13
|
+
export type ImplTag = 'legacy' | 'compact-store' | 'yjs';
|
|
14
|
+
export type LoadSource = 'compact-store' | 'indexeddb' | 'vault' | 'wot-profiles' | 'migration' | 'new';
|
|
15
|
+
export type SaveTarget = 'compact-store' | 'vault';
|
|
16
|
+
export interface LoadMetric {
|
|
17
|
+
source: LoadSource;
|
|
18
|
+
timeMs: number;
|
|
19
|
+
sizeBytes: number;
|
|
20
|
+
details: Record<string, unknown>;
|
|
21
|
+
at: string;
|
|
22
|
+
}
|
|
23
|
+
export interface SaveMetric {
|
|
24
|
+
target: SaveTarget;
|
|
25
|
+
timeMs: number;
|
|
26
|
+
sizeBytes: number;
|
|
27
|
+
blockedUiMs?: number;
|
|
28
|
+
at: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ErrorMetric {
|
|
31
|
+
operation: string;
|
|
32
|
+
error: string;
|
|
33
|
+
at: string;
|
|
34
|
+
}
|
|
35
|
+
export interface MigrationMetric {
|
|
36
|
+
fromChunks: number;
|
|
37
|
+
toSizeBytes: number;
|
|
38
|
+
at: string;
|
|
39
|
+
}
|
|
40
|
+
export interface SaveStats {
|
|
41
|
+
lastAt: string | null;
|
|
42
|
+
lastTimeMs: number;
|
|
43
|
+
lastSizeBytes: number;
|
|
44
|
+
totalSaves: number;
|
|
45
|
+
errors: number;
|
|
46
|
+
}
|
|
47
|
+
export interface SpaceMetric {
|
|
48
|
+
spaceId: string;
|
|
49
|
+
name: string | null;
|
|
50
|
+
loadSource: LoadSource | null;
|
|
51
|
+
loadTimeMs: number | null;
|
|
52
|
+
docSizeBytes: number;
|
|
53
|
+
compactStoreSaves: number;
|
|
54
|
+
vaultSaves: number;
|
|
55
|
+
lastSaveMs: number | null;
|
|
56
|
+
members: number;
|
|
57
|
+
}
|
|
58
|
+
export interface DebugSnapshot {
|
|
59
|
+
impl: ImplTag;
|
|
60
|
+
persistence: {
|
|
61
|
+
lastLoad: LoadMetric | null;
|
|
62
|
+
saves: {
|
|
63
|
+
compactStore: SaveStats;
|
|
64
|
+
vault: SaveStats;
|
|
65
|
+
};
|
|
66
|
+
migration: MigrationMetric | null;
|
|
67
|
+
errors: ErrorMetric[];
|
|
68
|
+
};
|
|
69
|
+
spaces: SpaceMetric[];
|
|
70
|
+
sync: {
|
|
71
|
+
relay: {
|
|
72
|
+
connected: boolean;
|
|
73
|
+
url: string | null;
|
|
74
|
+
peers: number;
|
|
75
|
+
lastMessage: string | null;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
automerge: {
|
|
79
|
+
saveBlockedUiMs: {
|
|
80
|
+
last: number;
|
|
81
|
+
avg: number;
|
|
82
|
+
max: number;
|
|
83
|
+
};
|
|
84
|
+
docSizeBytes: number;
|
|
85
|
+
docStats: {
|
|
86
|
+
contacts: number;
|
|
87
|
+
attestations: number;
|
|
88
|
+
spaces: number;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
legacy: {
|
|
92
|
+
idbChunkCount: number | null;
|
|
93
|
+
healthCheckResult: boolean | null;
|
|
94
|
+
findDurationMs: number | null;
|
|
95
|
+
flushDurationMs: number | null;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export declare class PersistenceMetrics {
|
|
99
|
+
private impl;
|
|
100
|
+
private lastLoad;
|
|
101
|
+
private compactStoreSaves;
|
|
102
|
+
private vaultSaves;
|
|
103
|
+
private migration;
|
|
104
|
+
private errors;
|
|
105
|
+
private blockedUiSamples;
|
|
106
|
+
private spaceMetrics;
|
|
107
|
+
private _idbChunkCount;
|
|
108
|
+
private _healthCheckResult;
|
|
109
|
+
private _findDurationMs;
|
|
110
|
+
private _flushDurationMs;
|
|
111
|
+
private _relayConnected;
|
|
112
|
+
private _relayUrl;
|
|
113
|
+
private _relayPeers;
|
|
114
|
+
private _relayLastMessage;
|
|
115
|
+
private _docSizeBytes;
|
|
116
|
+
private _docContacts;
|
|
117
|
+
private _docAttestations;
|
|
118
|
+
private _docSpaces;
|
|
119
|
+
constructor(impl: ImplTag);
|
|
120
|
+
logLoad(source: LoadSource, timeMs: number, sizeBytes: number, details?: Record<string, unknown>): void;
|
|
121
|
+
logSave(target: SaveTarget, timeMs: number, sizeBytes: number, blockedUiMs?: number): void;
|
|
122
|
+
logError(operation: string, error: unknown): void;
|
|
123
|
+
logMigration(fromChunks: number, toSizeBytes: number): void;
|
|
124
|
+
setIdbChunkCount(count: number): void;
|
|
125
|
+
setHealthCheckResult(healthy: boolean): void;
|
|
126
|
+
setFindDuration(ms: number): void;
|
|
127
|
+
setFlushDuration(ms: number): void;
|
|
128
|
+
setRelayStatus(connected: boolean, url: string | null, peers: number): void;
|
|
129
|
+
setDocStats(sizeBytes: number, contacts: number, attestations: number, spaces: number): void;
|
|
130
|
+
logSpaceLoad(spaceId: string, name: string | null, source: LoadSource, timeMs: number, sizeBytes: number, members: number): void;
|
|
131
|
+
logSpaceSave(spaceId: string, target: SaveTarget, timeMs: number, sizeBytes: number): void;
|
|
132
|
+
removeSpace(spaceId: string): void;
|
|
133
|
+
setImpl(impl: ImplTag): void;
|
|
134
|
+
getSnapshot(): DebugSnapshot;
|
|
135
|
+
}
|
|
136
|
+
export declare function getMetrics(): PersistenceMetrics;
|
|
137
|
+
/**
|
|
138
|
+
* Register window.wotDebug() and window.wotTrace() — always available, not sensitive data.
|
|
139
|
+
*/
|
|
140
|
+
export declare function registerDebugApi(metrics: PersistenceMetrics): void;
|
|
141
|
+
//# sourceMappingURL=PersistenceMetrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersistenceMetrics.d.ts","sourceRoot":"","sources":["../../src/storage/PersistenceMetrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TraceLog — Central tracing system for all store operations.
|
|
3
|
+
*
|
|
4
|
+
* Ring buffer of 1000 entries in memory, persisted asynchronously to IndexedDB.
|
|
5
|
+
* Allows developers to see the full data flow: which stores are accessed,
|
|
6
|
+
* in what order, with what timing and result.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* import { getTraceLog } from '@web_of_trust/core'
|
|
10
|
+
* const trace = getTraceLog()
|
|
11
|
+
* trace.log({ store: 'compact-store', operation: 'write', label: 'save personal-doc', durationMs: 12, sizeBytes: 4096, success: true })
|
|
12
|
+
* trace.subscribe(entries => console.log('new trace:', entries))
|
|
13
|
+
* window.wotTrace() // → TraceEntry[]
|
|
14
|
+
*/
|
|
15
|
+
export type TraceStore = 'compact-store' | 'relay' | 'vault' | 'profiles' | 'outbox' | 'personal-doc' | 'crdt' | 'crypto';
|
|
16
|
+
export type TraceOp = 'read' | 'write' | 'send' | 'receive' | 'sync' | 'delete' | 'flush' | 'error' | 'connect' | 'disconnect';
|
|
17
|
+
export interface TraceEntry {
|
|
18
|
+
id: number;
|
|
19
|
+
timestamp: string;
|
|
20
|
+
store: TraceStore;
|
|
21
|
+
operation: TraceOp;
|
|
22
|
+
label: string;
|
|
23
|
+
durationMs: number;
|
|
24
|
+
sizeBytes?: number;
|
|
25
|
+
success: boolean;
|
|
26
|
+
error?: string;
|
|
27
|
+
meta?: Record<string, unknown>;
|
|
28
|
+
}
|
|
29
|
+
export type TraceFilter = {
|
|
30
|
+
store?: TraceStore;
|
|
31
|
+
operation?: TraceOp;
|
|
32
|
+
success?: boolean;
|
|
33
|
+
since?: string;
|
|
34
|
+
limit?: number;
|
|
35
|
+
};
|
|
36
|
+
type TraceSubscriber = (entry: TraceEntry) => void;
|
|
37
|
+
export declare class TraceLog {
|
|
38
|
+
private entries;
|
|
39
|
+
private nextId;
|
|
40
|
+
private subscribers;
|
|
41
|
+
private db;
|
|
42
|
+
private pendingWrites;
|
|
43
|
+
private flushTimer;
|
|
44
|
+
private initialized;
|
|
45
|
+
init(): Promise<void>;
|
|
46
|
+
log(entry: Omit<TraceEntry, 'id' | 'timestamp'>): TraceEntry;
|
|
47
|
+
getAll(filter?: TraceFilter): TraceEntry[];
|
|
48
|
+
getLatest(count?: number): TraceEntry[];
|
|
49
|
+
getErrors(count?: number): TraceEntry[];
|
|
50
|
+
getByStore(store: TraceStore): TraceEntry[];
|
|
51
|
+
getPerformanceSummary(): Record<string, {
|
|
52
|
+
count: number;
|
|
53
|
+
avgMs: number;
|
|
54
|
+
p95Ms: number;
|
|
55
|
+
maxMs: number;
|
|
56
|
+
}>;
|
|
57
|
+
subscribe(callback: TraceSubscriber): () => void;
|
|
58
|
+
clear(): void;
|
|
59
|
+
get size(): number;
|
|
60
|
+
private notifySubscribers;
|
|
61
|
+
private startFlushTimer;
|
|
62
|
+
private flushToDb;
|
|
63
|
+
private openDb;
|
|
64
|
+
private loadFromDb;
|
|
65
|
+
}
|
|
66
|
+
export declare function getTraceLog(): TraceLog;
|
|
67
|
+
/**
|
|
68
|
+
* Convenience: time an async operation and log it.
|
|
69
|
+
*
|
|
70
|
+
* Usage:
|
|
71
|
+
* const data = await traceAsync('compact-store', 'read', 'load personal-doc', async () => {
|
|
72
|
+
* return await compactStore.load(docId)
|
|
73
|
+
* })
|
|
74
|
+
*/
|
|
75
|
+
export declare function traceAsync<T>(store: TraceStore, operation: TraceOp, label: string, fn: () => Promise<T>, meta?: Record<string, unknown>): Promise<T>;
|
|
76
|
+
/**
|
|
77
|
+
* Wrap fetch() to trace HTTP calls to Vault/Profiles servers.
|
|
78
|
+
*/
|
|
79
|
+
export declare function tracedFetch(store: TraceStore, label: string, url: string, init?: RequestInit, meta?: Record<string, unknown>): Promise<Response>;
|
|
80
|
+
/**
|
|
81
|
+
* Register window.wotTrace() — always available, not sensitive data.
|
|
82
|
+
*/
|
|
83
|
+
export declare function registerTraceApi(traceLog: TraceLog): void;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=TraceLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TraceLog.d.ts","sourceRoot":"","sources":["../../src/storage/TraceLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CompactStorageManager } from './CompactStorageManager';
|
|
2
|
+
export declare class TracedCompactStorageManager {
|
|
3
|
+
private inner;
|
|
4
|
+
constructor(inner: CompactStorageManager);
|
|
5
|
+
open(): Promise<void>;
|
|
6
|
+
save(docId: string, binary: Uint8Array): Promise<void>;
|
|
7
|
+
load(docId: string): Promise<Uint8Array | null>;
|
|
8
|
+
delete(docId: string): Promise<void>;
|
|
9
|
+
list(): Promise<string[]>;
|
|
10
|
+
close(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=TracedCompactStorageManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TracedCompactStorageManager.d.ts","sourceRoot":"","sources":["../../src/storage/TracedCompactStorageManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAG/D,qBAAa,2BAA2B;IAC1B,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,qBAAqB;IAE1C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBrB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BtD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA6B/C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BpC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA2B/B,KAAK,IAAI,IAAI;CAUd"}
|