@orbitmem/relay 0.1.0
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 +108 -0
- package/dist/app.d.ts +7 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +27 -0
- package/dist/app.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/ed25519-verify.d.ts +14 -0
- package/dist/middleware/ed25519-verify.d.ts.map +1 -0
- package/dist/middleware/ed25519-verify.js +31 -0
- package/dist/middleware/ed25519-verify.js.map +1 -0
- package/dist/middleware/erc8128.d.ts +25 -0
- package/dist/middleware/erc8128.d.ts.map +1 -0
- package/dist/middleware/erc8128.js +196 -0
- package/dist/middleware/erc8128.js.map +1 -0
- package/dist/middleware/mpp.d.ts +36 -0
- package/dist/middleware/mpp.d.ts.map +1 -0
- package/dist/middleware/mpp.js +122 -0
- package/dist/middleware/mpp.js.map +1 -0
- package/dist/middleware/session.d.ts +13 -0
- package/dist/middleware/session.d.ts.map +1 -0
- package/dist/middleware/session.js +47 -0
- package/dist/middleware/session.js.map +1 -0
- package/dist/routes/data.d.ts +5 -0
- package/dist/routes/data.d.ts.map +1 -0
- package/dist/routes/data.js +44 -0
- package/dist/routes/data.js.map +1 -0
- package/dist/routes/health.d.ts +3 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +4 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/snapshots.d.ts +5 -0
- package/dist/routes/snapshots.d.ts.map +1 -0
- package/dist/routes/snapshots.js +31 -0
- package/dist/routes/snapshots.js.map +1 -0
- package/dist/routes/vault.d.ts +6 -0
- package/dist/routes/vault.d.ts.map +1 -0
- package/dist/routes/vault.js +105 -0
- package/dist/routes/vault.js.map +1 -0
- package/dist/services/index.d.ts +17 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +60 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/live-discovery.d.ts +17 -0
- package/dist/services/live-discovery.d.ts.map +1 -0
- package/dist/services/live-discovery.js +97 -0
- package/dist/services/live-discovery.js.map +1 -0
- package/dist/services/live-snapshot.d.ts +18 -0
- package/dist/services/live-snapshot.d.ts.map +1 -0
- package/dist/services/live-snapshot.js +43 -0
- package/dist/services/live-snapshot.js.map +1 -0
- package/dist/services/live-vault.d.ts +27 -0
- package/dist/services/live-vault.d.ts.map +1 -0
- package/dist/services/live-vault.js +73 -0
- package/dist/services/live-vault.js.map +1 -0
- package/dist/services/mock-discovery.d.ts +14 -0
- package/dist/services/mock-discovery.d.ts.map +1 -0
- package/dist/services/mock-discovery.js +86 -0
- package/dist/services/mock-discovery.js.map +1 -0
- package/dist/services/mock-snapshot.d.ts +7 -0
- package/dist/services/mock-snapshot.d.ts.map +1 -0
- package/dist/services/mock-snapshot.js +30 -0
- package/dist/services/mock-snapshot.js.map +1 -0
- package/dist/services/mock-vault.d.ts +33 -0
- package/dist/services/mock-vault.d.ts.map +1 -0
- package/dist/services/mock-vault.js +88 -0
- package/dist/services/mock-vault.js.map +1 -0
- package/dist/services/orbitdb-peer.d.ts +12 -0
- package/dist/services/orbitdb-peer.d.ts.map +1 -0
- package/dist/services/orbitdb-peer.js +23 -0
- package/dist/services/orbitdb-peer.js.map +1 -0
- package/dist/services/plan.d.ts +14 -0
- package/dist/services/plan.d.ts.map +1 -0
- package/dist/services/plan.js +37 -0
- package/dist/services/plan.js.map +1 -0
- package/dist/services/test-helpers.d.ts +4 -0
- package/dist/services/test-helpers.d.ts.map +1 -0
- package/dist/services/test-helpers.js +10 -0
- package/dist/services/test-helpers.js.map +1 -0
- package/dist/services/types.d.ts +100 -0
- package/dist/services/types.d.ts.map +1 -0
- package/dist/services/types.js +2 -0
- package/dist/services/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-snapshot.js","sourceRoot":"","sources":["../../src/services/live-snapshot.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAqB;IAC3B,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC3C,aAAa,GAAwB,IAAI,CAAC;IAElD,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBACpD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBACzD,MAAM,MAAM,GAAG,MAAO,MAAc,CAAC,MAAM,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzC,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7B,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBACpC,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAa,EAAE,UAAmB;QAC9D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,IAAW,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAiB;YACzB,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;YACnB,IAAI,EAAE,OAAO,CAAC,MAAM;YACpB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,MAAM;YACN,UAAU,EAAE,UAAU,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC/E,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IVaultService, VaultEntry } from "./types.js";
|
|
2
|
+
export declare class LiveVaultService implements IVaultService {
|
|
3
|
+
private dbCache;
|
|
4
|
+
private getDB;
|
|
5
|
+
getPublicKeys(address: string, prefix?: string): Promise<string[]>;
|
|
6
|
+
getPublic(address: string, key: string): Promise<VaultEntry | null>;
|
|
7
|
+
getEncrypted(vaultAddress: string, path: string): Promise<VaultEntry | null>;
|
|
8
|
+
seed(address: string, entries: {
|
|
9
|
+
key: string;
|
|
10
|
+
value: unknown;
|
|
11
|
+
visibility: string;
|
|
12
|
+
}[]): Promise<number>;
|
|
13
|
+
sync(address: string): Promise<{
|
|
14
|
+
status: string;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
}>;
|
|
17
|
+
write(address: string, path: string, value: unknown, _visibility: string): Promise<{
|
|
18
|
+
hash: string;
|
|
19
|
+
}>;
|
|
20
|
+
delete(address: string, path: string): Promise<void>;
|
|
21
|
+
getKeys(address: string, prefix?: string): Promise<string[]>;
|
|
22
|
+
getVaultPricing(_address: string, _path: string): Promise<{
|
|
23
|
+
amount: string;
|
|
24
|
+
currency: string;
|
|
25
|
+
} | null>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=live-vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-vault.d.ts","sourceRoot":"","sources":["../../src/services/live-vault.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,qBAAa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,OAAO,CAA0B;YAE3B,KAAK;IAQb,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAYlE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IASnE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAO5E,IAAI,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,GAC7D,OAAO,CAAC,MAAM,CAAC;IAQZ,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAMrE,KAAK,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAMtB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAU5D,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAIxD"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { openVaultDB } from "./orbitdb-peer.js";
|
|
2
|
+
export class LiveVaultService {
|
|
3
|
+
dbCache = new Map();
|
|
4
|
+
async getDB(address) {
|
|
5
|
+
if (!this.dbCache.has(address)) {
|
|
6
|
+
const db = await openVaultDB(address);
|
|
7
|
+
this.dbCache.set(address, db);
|
|
8
|
+
}
|
|
9
|
+
return this.dbCache.get(address);
|
|
10
|
+
}
|
|
11
|
+
async getPublicKeys(address, prefix) {
|
|
12
|
+
const db = await this.getDB(address);
|
|
13
|
+
const all = await db.all();
|
|
14
|
+
// In live mode, visibility metadata is stored in a separate "-meta" db.
|
|
15
|
+
// For now, return all top-level keys (public relay only sees public data).
|
|
16
|
+
let keys = Object.keys(all);
|
|
17
|
+
if (prefix) {
|
|
18
|
+
keys = keys.filter((k) => k.startsWith(prefix));
|
|
19
|
+
}
|
|
20
|
+
return keys;
|
|
21
|
+
}
|
|
22
|
+
async getPublic(address, key) {
|
|
23
|
+
const db = await this.getDB(address);
|
|
24
|
+
const value = await db.get(key);
|
|
25
|
+
if (value === undefined)
|
|
26
|
+
return null;
|
|
27
|
+
// In live mode, we treat all replicated data as public
|
|
28
|
+
// (private data is encrypted client-side and opaque to the relay)
|
|
29
|
+
return { value, visibility: "public" };
|
|
30
|
+
}
|
|
31
|
+
async getEncrypted(vaultAddress, path) {
|
|
32
|
+
const db = await this.getDB(vaultAddress);
|
|
33
|
+
const value = await db.get(path);
|
|
34
|
+
if (value === undefined)
|
|
35
|
+
return null;
|
|
36
|
+
return { value, visibility: "private" };
|
|
37
|
+
}
|
|
38
|
+
async seed(address, entries) {
|
|
39
|
+
const db = await this.getDB(address);
|
|
40
|
+
for (const entry of entries) {
|
|
41
|
+
await db.put(entry.key, entry.value);
|
|
42
|
+
}
|
|
43
|
+
return entries.length;
|
|
44
|
+
}
|
|
45
|
+
async sync(address) {
|
|
46
|
+
// Opening/replicating the DB triggers OrbitDB CRDT sync
|
|
47
|
+
await this.getDB(address);
|
|
48
|
+
return { status: "synced", timestamp: Date.now() };
|
|
49
|
+
}
|
|
50
|
+
async write(address, path, value, _visibility) {
|
|
51
|
+
const db = await this.getDB(address);
|
|
52
|
+
const hash = await db.put(path, value);
|
|
53
|
+
return { hash: hash ?? `live-${Date.now()}` };
|
|
54
|
+
}
|
|
55
|
+
async delete(address, path) {
|
|
56
|
+
const db = await this.getDB(address);
|
|
57
|
+
await db.del(path);
|
|
58
|
+
}
|
|
59
|
+
async getKeys(address, prefix) {
|
|
60
|
+
const db = await this.getDB(address);
|
|
61
|
+
const all = await db.all();
|
|
62
|
+
let keys = Object.keys(all);
|
|
63
|
+
if (prefix) {
|
|
64
|
+
keys = keys.filter((k) => k.startsWith(prefix));
|
|
65
|
+
}
|
|
66
|
+
return keys;
|
|
67
|
+
}
|
|
68
|
+
async getVaultPricing(_address, _path) {
|
|
69
|
+
// TODO: Implement live pricing lookup from OrbitDB -meta store
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=live-vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-vault.js","sourceRoot":"","sources":["../../src/services/live-vault.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DataStats, IDiscoveryService, UserStats } from "./types.js";
|
|
2
|
+
export declare class MockDiscoveryService implements IDiscoveryService {
|
|
3
|
+
private registry;
|
|
4
|
+
search(query: {
|
|
5
|
+
schema?: string;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
verifiedOnly?: boolean;
|
|
8
|
+
minQuality?: number;
|
|
9
|
+
}): Promise<unknown[]>;
|
|
10
|
+
getScore(dataId: number): Promise<unknown>;
|
|
11
|
+
getStats(): Promise<DataStats>;
|
|
12
|
+
getUserStats(signer: string): Promise<UserStats>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=mock-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-discovery.d.ts","sourceRoot":"","sources":["../../src/services/mock-discovery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1E,qBAAa,oBAAqB,YAAW,iBAAiB;IAC5D,OAAO,CAAC,QAAQ,CAAsB;IAEhC,MAAM,CAAC,KAAK,EAAE;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAShB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1C,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;IAuD9B,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAqBvD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { MockRegistry } from "@orbitmem/sdk/discovery";
|
|
2
|
+
export class MockDiscoveryService {
|
|
3
|
+
registry = new MockRegistry();
|
|
4
|
+
async search(query) {
|
|
5
|
+
return this.registry.findData({
|
|
6
|
+
schema: query.schema,
|
|
7
|
+
tags: query.tags?.length ? query.tags : undefined,
|
|
8
|
+
verifiedOnly: query.verifiedOnly || undefined,
|
|
9
|
+
minQuality: query.minQuality,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
async getScore(dataId) {
|
|
13
|
+
return this.registry.getDataScore(dataId);
|
|
14
|
+
}
|
|
15
|
+
async getStats() {
|
|
16
|
+
const allData = await this.search({});
|
|
17
|
+
const scores = await Promise.all(allData.map((d) => this.getScore(d.dataId)));
|
|
18
|
+
const totalEntries = allData.length;
|
|
19
|
+
const totalFeedback = scores.reduce((sum, s) => sum + s.totalFeedback, 0);
|
|
20
|
+
const avgQuality = totalEntries > 0
|
|
21
|
+
? Math.round(scores.reduce((sum, s) => sum + s.quality, 0) / totalEntries)
|
|
22
|
+
: 0;
|
|
23
|
+
const buckets = [
|
|
24
|
+
{ range: "0-20", min: 0, max: 20, count: 0 },
|
|
25
|
+
{ range: "21-40", min: 21, max: 40, count: 0 },
|
|
26
|
+
{ range: "41-60", min: 41, max: 60, count: 0 },
|
|
27
|
+
{ range: "61-80", min: 61, max: 80, count: 0 },
|
|
28
|
+
{ range: "81-100", min: 81, max: 100, count: 0 },
|
|
29
|
+
];
|
|
30
|
+
for (const s of scores) {
|
|
31
|
+
const bucket = buckets.find((b) => s.quality >= b.min && s.quality <= b.max);
|
|
32
|
+
if (bucket)
|
|
33
|
+
bucket.count++;
|
|
34
|
+
}
|
|
35
|
+
const qualityDistribution = buckets.map(({ range, count }) => ({ range, count }));
|
|
36
|
+
const tagCounts = new Map();
|
|
37
|
+
for (const d of allData) {
|
|
38
|
+
for (const tag of d.tags ?? []) {
|
|
39
|
+
tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const topTags = Array.from(tagCounts.entries())
|
|
43
|
+
.map(([tag, count]) => ({ tag, count }))
|
|
44
|
+
.sort((a, b) => b.count - a.count)
|
|
45
|
+
.slice(0, 10);
|
|
46
|
+
const now = Date.now();
|
|
47
|
+
const days = Array.from({ length: 7 }, (_, i) => {
|
|
48
|
+
const d = new Date(now - (6 - i) * 86400000);
|
|
49
|
+
return d.toLocaleDateString("en-US", { weekday: "short" });
|
|
50
|
+
});
|
|
51
|
+
const activityMap = new Map(days.map((d) => [d, { entries: 0, feedback: 0 }]));
|
|
52
|
+
for (const d of allData) {
|
|
53
|
+
const day = new Date(d.registeredAt).toLocaleDateString("en-US", { weekday: "short" });
|
|
54
|
+
const entry = activityMap.get(day);
|
|
55
|
+
if (entry)
|
|
56
|
+
entry.entries++;
|
|
57
|
+
}
|
|
58
|
+
const activity = days.map((date) => ({
|
|
59
|
+
date,
|
|
60
|
+
entries: activityMap.get(date)?.entries ?? 0,
|
|
61
|
+
feedback: activityMap.get(date)?.feedback ?? 0,
|
|
62
|
+
}));
|
|
63
|
+
return { totalEntries, totalFeedback, avgQuality, qualityDistribution, topTags, activity };
|
|
64
|
+
}
|
|
65
|
+
async getUserStats(signer) {
|
|
66
|
+
const feedback = this.registry.getUserFeedback(signer);
|
|
67
|
+
const feedbackSubmitted = feedback.length;
|
|
68
|
+
const avgRatingGiven = feedbackSubmitted > 0
|
|
69
|
+
? Math.round(feedback.reduce((sum, f) => sum + f.entry.value, 0) / feedbackSubmitted)
|
|
70
|
+
: 0;
|
|
71
|
+
const dataEntriesRated = new Set(feedback.map((f) => f.dataId)).size;
|
|
72
|
+
const tagCounts = new Map();
|
|
73
|
+
for (const { entry } of feedback) {
|
|
74
|
+
if (entry.tag1)
|
|
75
|
+
tagCounts.set(entry.tag1, (tagCounts.get(entry.tag1) ?? 0) + 1);
|
|
76
|
+
if (entry.tag2)
|
|
77
|
+
tagCounts.set(entry.tag2, (tagCounts.get(entry.tag2) ?? 0) + 1);
|
|
78
|
+
}
|
|
79
|
+
const topTagsUsed = Array.from(tagCounts.entries())
|
|
80
|
+
.map(([tag, count]) => ({ tag, count }))
|
|
81
|
+
.sort((a, b) => b.count - a.count)
|
|
82
|
+
.slice(0, 10);
|
|
83
|
+
return { feedbackSubmitted, avgRatingGiven, dataEntriesRated, topTagsUsed };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=mock-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-discovery.js","sourceRoot":"","sources":["../../src/services/mock-discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ISnapshotService, SnapshotMeta } from "./types.js";
|
|
2
|
+
export declare class MockSnapshotService implements ISnapshotService {
|
|
3
|
+
private store;
|
|
4
|
+
list(signer: string): Promise<SnapshotMeta[]>;
|
|
5
|
+
archive(signer: string, data?: string, entryCount?: number): Promise<SnapshotMeta>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=mock-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-snapshot.d.ts","sourceRoot":"","sources":["../../src/services/mock-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjE,qBAAa,mBAAoB,YAAW,gBAAgB;IAC1D,OAAO,CAAC,KAAK,CAA0D;IAEjE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAM7C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAyBzF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export class MockSnapshotService {
|
|
2
|
+
store = new Map();
|
|
3
|
+
async list(signer) {
|
|
4
|
+
return Array.from(this.store.values())
|
|
5
|
+
.filter((s) => s.signer === signer)
|
|
6
|
+
.map(({ data: _, ...rest }) => rest);
|
|
7
|
+
}
|
|
8
|
+
async archive(signer, data, entryCount) {
|
|
9
|
+
const encoded = new TextEncoder().encode(data ?? "{}");
|
|
10
|
+
const cidBytes = crypto.getRandomValues(new Uint8Array(32));
|
|
11
|
+
const cid = "bafy" +
|
|
12
|
+
Array.from(cidBytes)
|
|
13
|
+
.map((b) => b.toString(36))
|
|
14
|
+
.join("")
|
|
15
|
+
.slice(0, 55);
|
|
16
|
+
const snapshot = {
|
|
17
|
+
cid,
|
|
18
|
+
size: encoded.length,
|
|
19
|
+
archivedAt: Date.now(),
|
|
20
|
+
signer,
|
|
21
|
+
entryCount: entryCount ?? 0,
|
|
22
|
+
encrypted: true,
|
|
23
|
+
data: encoded,
|
|
24
|
+
};
|
|
25
|
+
this.store.set(cid, snapshot);
|
|
26
|
+
const { data: _, ...meta } = snapshot;
|
|
27
|
+
return meta;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=mock-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-snapshot.js","sourceRoot":"","sources":["../../src/services/mock-snapshot.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IACtB,KAAK,GAAG,IAAI,GAAG,EAA+C,CAAC;IAEvE,KAAK,CAAC,IAAI,CAAC,MAAc;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;aAClC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAa,EAAE,UAAmB;QAC9D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,GAAG,GACP,MAAM;YACN,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;iBACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;iBAC1B,IAAI,CAAC,EAAE,CAAC;iBACR,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAElB,MAAM,QAAQ,GAAG;YACf,GAAG;YACH,IAAI,EAAE,OAAO,CAAC,MAAM;YACpB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,MAAM;YACN,UAAU,EAAE,UAAU,IAAI,CAAC;YAC3B,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,OAAO;SACd,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAE9B,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IVaultService, VaultEntry } from "./types.js";
|
|
2
|
+
export declare class MockVaultService implements IVaultService {
|
|
3
|
+
private store;
|
|
4
|
+
private pricingStore;
|
|
5
|
+
private getOrCreate;
|
|
6
|
+
getPublicKeys(address: string, prefix?: string): Promise<string[]>;
|
|
7
|
+
getPublic(address: string, key: string): Promise<VaultEntry | null>;
|
|
8
|
+
getEncrypted(vaultAddress: string, path: string): Promise<VaultEntry | null>;
|
|
9
|
+
seed(address: string, entries: {
|
|
10
|
+
key: string;
|
|
11
|
+
value: unknown;
|
|
12
|
+
visibility: string;
|
|
13
|
+
}[]): Promise<number>;
|
|
14
|
+
sync(_address: string): Promise<{
|
|
15
|
+
status: string;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
}>;
|
|
18
|
+
write(address: string, path: string, value: unknown, visibility: string): Promise<{
|
|
19
|
+
hash: string;
|
|
20
|
+
}>;
|
|
21
|
+
delete(address: string, path: string): Promise<void>;
|
|
22
|
+
getKeys(address: string, prefix?: string): Promise<string[]>;
|
|
23
|
+
/** Seed pricing data for testing */
|
|
24
|
+
seedPricing(address: string, path: string, pricing: {
|
|
25
|
+
amount: string;
|
|
26
|
+
currency: string;
|
|
27
|
+
}): void;
|
|
28
|
+
getVaultPricing(address: string, path: string): Promise<{
|
|
29
|
+
amount: string;
|
|
30
|
+
currency: string;
|
|
31
|
+
} | null>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=mock-vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-vault.d.ts","sourceRoot":"","sources":["../../src/services/mock-vault.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,qBAAa,gBAAiB,YAAW,aAAa;IACpD,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,YAAY,CAAwE;IAE5F,OAAO,CAAC,WAAW;IAOb,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAclE,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAQnE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAM5E,IAAI,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,GAC7D,OAAO,CAAC,MAAM,CAAC;IAQZ,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAItE,KAAK,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAMtB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOpD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAUlE,oCAAoC;IACpC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOzF,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAYxD"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export class MockVaultService {
|
|
2
|
+
store = new Map();
|
|
3
|
+
pricingStore = new Map();
|
|
4
|
+
getOrCreate(address) {
|
|
5
|
+
if (!this.store.has(address)) {
|
|
6
|
+
this.store.set(address, new Map());
|
|
7
|
+
}
|
|
8
|
+
return this.store.get(address);
|
|
9
|
+
}
|
|
10
|
+
async getPublicKeys(address, prefix) {
|
|
11
|
+
const vault = this.store.get(address);
|
|
12
|
+
if (!vault)
|
|
13
|
+
return [];
|
|
14
|
+
let keys = Array.from(vault.entries())
|
|
15
|
+
.filter(([_, v]) => v.visibility === "public")
|
|
16
|
+
.map(([k]) => k);
|
|
17
|
+
if (prefix) {
|
|
18
|
+
keys = keys.filter((k) => k.startsWith(prefix));
|
|
19
|
+
}
|
|
20
|
+
return keys;
|
|
21
|
+
}
|
|
22
|
+
async getPublic(address, key) {
|
|
23
|
+
const vault = this.store.get(address);
|
|
24
|
+
if (!vault)
|
|
25
|
+
return null;
|
|
26
|
+
const entry = vault.get(key);
|
|
27
|
+
if (!entry || entry.visibility !== "public")
|
|
28
|
+
return null;
|
|
29
|
+
return entry;
|
|
30
|
+
}
|
|
31
|
+
async getEncrypted(vaultAddress, path) {
|
|
32
|
+
const vault = this.store.get(vaultAddress);
|
|
33
|
+
if (!vault)
|
|
34
|
+
return null;
|
|
35
|
+
return vault.get(path) ?? null;
|
|
36
|
+
}
|
|
37
|
+
async seed(address, entries) {
|
|
38
|
+
const vault = this.getOrCreate(address);
|
|
39
|
+
for (const entry of entries) {
|
|
40
|
+
vault.set(entry.key, { value: entry.value, visibility: entry.visibility });
|
|
41
|
+
}
|
|
42
|
+
return entries.length;
|
|
43
|
+
}
|
|
44
|
+
async sync(_address) {
|
|
45
|
+
return { status: "synced", timestamp: Date.now() };
|
|
46
|
+
}
|
|
47
|
+
async write(address, path, value, visibility) {
|
|
48
|
+
const vault = this.getOrCreate(address);
|
|
49
|
+
vault.set(path, { value, visibility });
|
|
50
|
+
return { hash: `mock-hash-${Date.now()}` };
|
|
51
|
+
}
|
|
52
|
+
async delete(address, path) {
|
|
53
|
+
const vault = this.store.get(address);
|
|
54
|
+
if (vault) {
|
|
55
|
+
vault.delete(path);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async getKeys(address, prefix) {
|
|
59
|
+
const vault = this.store.get(address);
|
|
60
|
+
if (!vault)
|
|
61
|
+
return [];
|
|
62
|
+
let keys = Array.from(vault.keys());
|
|
63
|
+
if (prefix) {
|
|
64
|
+
keys = keys.filter((k) => k.startsWith(prefix));
|
|
65
|
+
}
|
|
66
|
+
return keys;
|
|
67
|
+
}
|
|
68
|
+
/** Seed pricing data for testing */
|
|
69
|
+
seedPricing(address, path, pricing) {
|
|
70
|
+
if (!this.pricingStore.has(address)) {
|
|
71
|
+
this.pricingStore.set(address, new Map());
|
|
72
|
+
}
|
|
73
|
+
this.pricingStore.get(address).set(path, pricing);
|
|
74
|
+
}
|
|
75
|
+
async getVaultPricing(address, path) {
|
|
76
|
+
const vault = this.pricingStore.get(address);
|
|
77
|
+
if (!vault)
|
|
78
|
+
return null;
|
|
79
|
+
const perPath = vault.get(path);
|
|
80
|
+
if (perPath)
|
|
81
|
+
return perPath;
|
|
82
|
+
const fallback = vault.get("_default");
|
|
83
|
+
if (fallback)
|
|
84
|
+
return fallback;
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=mock-vault.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock-vault.js","sourceRoot":"","sources":["../../src/services/mock-vault.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function getOrbitDBPeer(opts?: {
|
|
2
|
+
directory?: string;
|
|
3
|
+
listenAddrs?: string[];
|
|
4
|
+
}): Promise<{
|
|
5
|
+
orbitdb: any;
|
|
6
|
+
ipfs: any;
|
|
7
|
+
libp2p: any;
|
|
8
|
+
cleanup: () => Promise<void>;
|
|
9
|
+
}>;
|
|
10
|
+
export declare function openVaultDB(vaultAddress: string): Promise<any>;
|
|
11
|
+
export declare function stopOrbitDBPeer(): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=orbitdb-peer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbitdb-peer.d.ts","sourceRoot":"","sources":["../../src/services/orbitdb-peer.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,IAAI,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;GASzF;AAED,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,gBAIrD;AAED,wBAAsB,eAAe,kBAKpC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createOrbitDBInstance } from "@orbitmem/sdk";
|
|
2
|
+
let peerInstance = null;
|
|
3
|
+
export async function getOrbitDBPeer(opts) {
|
|
4
|
+
if (peerInstance)
|
|
5
|
+
return peerInstance;
|
|
6
|
+
peerInstance = await createOrbitDBInstance({
|
|
7
|
+
directory: opts?.directory ?? "./relay-orbitdb",
|
|
8
|
+
listenAddrs: opts?.listenAddrs ?? ["/ip4/0.0.0.0/tcp/0"],
|
|
9
|
+
});
|
|
10
|
+
return peerInstance;
|
|
11
|
+
}
|
|
12
|
+
export async function openVaultDB(vaultAddress) {
|
|
13
|
+
const peer = await getOrbitDBPeer();
|
|
14
|
+
// Open or replicate an existing vault by its OrbitDB address
|
|
15
|
+
return peer.orbitdb.open(vaultAddress, { type: "nested" });
|
|
16
|
+
}
|
|
17
|
+
export async function stopOrbitDBPeer() {
|
|
18
|
+
if (peerInstance) {
|
|
19
|
+
await peerInstance.cleanup();
|
|
20
|
+
peerInstance = null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=orbitdb-peer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbitdb-peer.js","sourceRoot":"","sources":["../../src/services/orbitdb-peer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,IAAI,YAAY,GAA6D,IAAI,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAqD;IACxF,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IAEtC,YAAY,GAAG,MAAM,qBAAqB,CAAC;QACzC,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,iBAAiB;QAC/C,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,CAAC,oBAAoB,CAAC;KACzD,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,YAAoB;IACpD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;IACpC,6DAA6D;IAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC7B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { IPlanService, PlanInfo } from "./types.js";
|
|
2
|
+
export declare class PlanService implements IPlanService {
|
|
3
|
+
private plans;
|
|
4
|
+
getPlan(signer: string): Promise<PlanInfo>;
|
|
5
|
+
addUsage(signer: string, bytes: number): Promise<void>;
|
|
6
|
+
removeUsage(signer: string, bytes: number): Promise<void>;
|
|
7
|
+
getUsage(signer: string): Promise<{
|
|
8
|
+
used: number;
|
|
9
|
+
limit: number;
|
|
10
|
+
tier: string;
|
|
11
|
+
}>;
|
|
12
|
+
setPlan(signer: string, tier: PlanInfo["tier"]): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AASzD,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,KAAK,CAA+D;IAEtE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAS1C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAKhF,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAKrE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const PLAN_LIMITS = {
|
|
2
|
+
free: 5 * 1024 * 1024,
|
|
3
|
+
starter: 10 * 1024 * 1024 * 1024,
|
|
4
|
+
pro: 50 * 1024 * 1024 * 1024,
|
|
5
|
+
enterprise: Number.POSITIVE_INFINITY,
|
|
6
|
+
};
|
|
7
|
+
export class PlanService {
|
|
8
|
+
plans = new Map();
|
|
9
|
+
async getPlan(signer) {
|
|
10
|
+
const entry = this.plans.get(signer) ?? { tier: "free", used: 0 };
|
|
11
|
+
return {
|
|
12
|
+
tier: entry.tier,
|
|
13
|
+
storageLimit: PLAN_LIMITS[entry.tier],
|
|
14
|
+
used: entry.used,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async addUsage(signer, bytes) {
|
|
18
|
+
const entry = this.plans.get(signer) ?? { tier: "free", used: 0 };
|
|
19
|
+
entry.used += bytes;
|
|
20
|
+
this.plans.set(signer, entry);
|
|
21
|
+
}
|
|
22
|
+
async removeUsage(signer, bytes) {
|
|
23
|
+
const entry = this.plans.get(signer) ?? { tier: "free", used: 0 };
|
|
24
|
+
entry.used = Math.max(0, entry.used - bytes);
|
|
25
|
+
this.plans.set(signer, entry);
|
|
26
|
+
}
|
|
27
|
+
async getUsage(signer) {
|
|
28
|
+
const plan = await this.getPlan(signer);
|
|
29
|
+
return { used: plan.used, limit: plan.storageLimit, tier: plan.tier };
|
|
30
|
+
}
|
|
31
|
+
async setPlan(signer, tier) {
|
|
32
|
+
const entry = this.plans.get(signer) ?? { tier: "free", used: 0 };
|
|
33
|
+
entry.tier = tier;
|
|
34
|
+
this.plans.set(signer, entry);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/services/plan.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAqC;IACpD,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IACrB,OAAO,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;IAChC,GAAG,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;IAC5B,UAAU,EAAE,MAAM,CAAC,iBAAiB;CACrC,CAAC;AAEF,MAAM,OAAO,WAAW;IACd,KAAK,GAAG,IAAI,GAAG,EAAoD,CAAC;IAE5E,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3E,OAAO;YACL,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;YACrC,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,KAAa;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3E,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,KAAa;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3E,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,IAAsB;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3E,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../src/services/test-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIxD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAEnE;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAGtD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
let testVaultService = null;
|
|
2
|
+
export function setTestVaultService(service) {
|
|
3
|
+
testVaultService = service;
|
|
4
|
+
}
|
|
5
|
+
export function getTestVaultService() {
|
|
6
|
+
if (!testVaultService)
|
|
7
|
+
throw new Error("Test vault service not initialized");
|
|
8
|
+
return testVaultService;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/services/test-helpers.ts"],"names":[],"mappings":"AAEA,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAErD,MAAM,UAAU,mBAAmB,CAAC,OAAyB;IAC3D,gBAAgB,GAAG,OAAO,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC,gBAAgB;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC7E,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|