@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.
Files changed (86) hide show
  1. package/README.md +108 -0
  2. package/dist/app.d.ts +7 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +27 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/index.d.ts +6 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +24 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/middleware/ed25519-verify.d.ts +14 -0
  11. package/dist/middleware/ed25519-verify.d.ts.map +1 -0
  12. package/dist/middleware/ed25519-verify.js +31 -0
  13. package/dist/middleware/ed25519-verify.js.map +1 -0
  14. package/dist/middleware/erc8128.d.ts +25 -0
  15. package/dist/middleware/erc8128.d.ts.map +1 -0
  16. package/dist/middleware/erc8128.js +196 -0
  17. package/dist/middleware/erc8128.js.map +1 -0
  18. package/dist/middleware/mpp.d.ts +36 -0
  19. package/dist/middleware/mpp.d.ts.map +1 -0
  20. package/dist/middleware/mpp.js +122 -0
  21. package/dist/middleware/mpp.js.map +1 -0
  22. package/dist/middleware/session.d.ts +13 -0
  23. package/dist/middleware/session.d.ts.map +1 -0
  24. package/dist/middleware/session.js +47 -0
  25. package/dist/middleware/session.js.map +1 -0
  26. package/dist/routes/data.d.ts +5 -0
  27. package/dist/routes/data.d.ts.map +1 -0
  28. package/dist/routes/data.js +44 -0
  29. package/dist/routes/data.js.map +1 -0
  30. package/dist/routes/health.d.ts +3 -0
  31. package/dist/routes/health.d.ts.map +1 -0
  32. package/dist/routes/health.js +4 -0
  33. package/dist/routes/health.js.map +1 -0
  34. package/dist/routes/snapshots.d.ts +5 -0
  35. package/dist/routes/snapshots.d.ts.map +1 -0
  36. package/dist/routes/snapshots.js +31 -0
  37. package/dist/routes/snapshots.js.map +1 -0
  38. package/dist/routes/vault.d.ts +6 -0
  39. package/dist/routes/vault.d.ts.map +1 -0
  40. package/dist/routes/vault.js +105 -0
  41. package/dist/routes/vault.js.map +1 -0
  42. package/dist/services/index.d.ts +17 -0
  43. package/dist/services/index.d.ts.map +1 -0
  44. package/dist/services/index.js +60 -0
  45. package/dist/services/index.js.map +1 -0
  46. package/dist/services/live-discovery.d.ts +17 -0
  47. package/dist/services/live-discovery.d.ts.map +1 -0
  48. package/dist/services/live-discovery.js +97 -0
  49. package/dist/services/live-discovery.js.map +1 -0
  50. package/dist/services/live-snapshot.d.ts +18 -0
  51. package/dist/services/live-snapshot.d.ts.map +1 -0
  52. package/dist/services/live-snapshot.js +43 -0
  53. package/dist/services/live-snapshot.js.map +1 -0
  54. package/dist/services/live-vault.d.ts +27 -0
  55. package/dist/services/live-vault.d.ts.map +1 -0
  56. package/dist/services/live-vault.js +73 -0
  57. package/dist/services/live-vault.js.map +1 -0
  58. package/dist/services/mock-discovery.d.ts +14 -0
  59. package/dist/services/mock-discovery.d.ts.map +1 -0
  60. package/dist/services/mock-discovery.js +86 -0
  61. package/dist/services/mock-discovery.js.map +1 -0
  62. package/dist/services/mock-snapshot.d.ts +7 -0
  63. package/dist/services/mock-snapshot.d.ts.map +1 -0
  64. package/dist/services/mock-snapshot.js +30 -0
  65. package/dist/services/mock-snapshot.js.map +1 -0
  66. package/dist/services/mock-vault.d.ts +33 -0
  67. package/dist/services/mock-vault.d.ts.map +1 -0
  68. package/dist/services/mock-vault.js +88 -0
  69. package/dist/services/mock-vault.js.map +1 -0
  70. package/dist/services/orbitdb-peer.d.ts +12 -0
  71. package/dist/services/orbitdb-peer.d.ts.map +1 -0
  72. package/dist/services/orbitdb-peer.js +23 -0
  73. package/dist/services/orbitdb-peer.js.map +1 -0
  74. package/dist/services/plan.d.ts +14 -0
  75. package/dist/services/plan.d.ts.map +1 -0
  76. package/dist/services/plan.js +37 -0
  77. package/dist/services/plan.js.map +1 -0
  78. package/dist/services/test-helpers.d.ts +4 -0
  79. package/dist/services/test-helpers.d.ts.map +1 -0
  80. package/dist/services/test-helpers.js +10 -0
  81. package/dist/services/test-helpers.js.map +1 -0
  82. package/dist/services/types.d.ts +100 -0
  83. package/dist/services/types.d.ts.map +1 -0
  84. package/dist/services/types.js +2 -0
  85. package/dist/services/types.js.map +1 -0
  86. 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":"AAEA,MAAM,OAAO,gBAAgB;IACnB,KAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;IACnD,YAAY,GAAG,IAAI,GAAG,EAA6D,CAAC;IAEpF,WAAW,CAAC,OAAe;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,MAAe;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QAEtB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACnC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,GAAW;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,YAAoB,EAAE,IAAY;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CACR,OAAe,EACf,OAA8D;QAE9D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,KAAK,CACT,OAAe,EACf,IAAY,EACZ,KAAc,EACd,UAAkB;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACxC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAAY;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,MAAe;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,CAAC;QACtB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oCAAoC;IACpC,WAAW,CAAC,OAAe,EAAE,IAAY,EAAE,OAA6C;QACtF,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,OAAe,EACf,IAAY;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAE5B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -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,4 @@
1
+ import type { MockVaultService } from "./mock-vault.js";
2
+ export declare function setTestVaultService(service: MockVaultService): void;
3
+ export declare function getTestVaultService(): MockVaultService;
4
+ //# sourceMappingURL=test-helpers.d.ts.map
@@ -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"}