@arkade-os/sdk 0.5.0-rc.2 → 0.5.0-rc.4

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 (118) hide show
  1. package/README.md +12 -67
  2. package/dist/adapters/expo.cjs +5 -6
  3. package/dist/adapters/expo.d.cts +2 -2
  4. package/dist/adapters/expo.d.ts +2 -2
  5. package/dist/adapters/expo.js +3 -4
  6. package/dist/{asyncStorageTaskQueue-C5rBYlru.d.ts → asyncStorageTaskQueue-BCiOgs5x.d.ts} +2 -2
  7. package/dist/{asyncStorageTaskQueue-BuDvgWh6.d.cts → asyncStorageTaskQueue-CTIwKrt5.d.cts} +2 -2
  8. package/dist/{chunk-3R476TDV.js → chunk-4EZOMPAO.js} +14 -38
  9. package/dist/chunk-4EZOMPAO.js.map +1 -0
  10. package/dist/{chunk-D25O4EGY.cjs → chunk-5NLJUXXQ.cjs} +10 -10
  11. package/dist/{chunk-D25O4EGY.cjs.map → chunk-5NLJUXXQ.cjs.map} +1 -1
  12. package/dist/{chunk-JZWLXNHV.cjs → chunk-C5Y2R63Z.cjs} +25 -71
  13. package/dist/chunk-C5Y2R63Z.cjs.map +1 -0
  14. package/dist/{chunk-6DNR46C7.js → chunk-CIBGIZUW.js} +4 -4
  15. package/dist/{chunk-6DNR46C7.js.map → chunk-CIBGIZUW.js.map} +1 -1
  16. package/dist/{chunk-43FKNLX4.cjs → chunk-F7HJO5GT.cjs} +61 -85
  17. package/dist/chunk-F7HJO5GT.cjs.map +1 -0
  18. package/dist/{chunk-ISO4TI5J.js → chunk-GLZNJFAT.js} +25 -67
  19. package/dist/chunk-GLZNJFAT.js.map +1 -0
  20. package/dist/{chunk-HLCGYOIH.cjs → chunk-GPJSGLWM.cjs} +17 -17
  21. package/dist/{chunk-HLCGYOIH.cjs.map → chunk-GPJSGLWM.cjs.map} +1 -1
  22. package/dist/{chunk-ZOTXDOS5.js → chunk-MOWSLXGO.js} +4 -4
  23. package/dist/{chunk-ZOTXDOS5.js.map → chunk-MOWSLXGO.js.map} +1 -1
  24. package/dist/{chunk-ZRNQV6HV.js → chunk-PYTAH2NY.js} +167 -703
  25. package/dist/chunk-PYTAH2NY.js.map +1 -0
  26. package/dist/{chunk-NVZJSKZS.cjs → chunk-SYRQJS5N.cjs} +18 -19
  27. package/dist/chunk-SYRQJS5N.cjs.map +1 -0
  28. package/dist/{chunk-4PKLULWT.js → chunk-XHASFSDU.js} +3 -4
  29. package/dist/chunk-XHASFSDU.js.map +1 -0
  30. package/dist/{chunk-GMZZQXV5.cjs → chunk-ZHLYFRYY.cjs} +583 -1128
  31. package/dist/chunk-ZHLYFRYY.cjs.map +1 -0
  32. package/dist/contracts/handlers/index.cjs +9 -10
  33. package/dist/contracts/handlers/index.d.cts +3 -3
  34. package/dist/contracts/handlers/index.d.ts +3 -3
  35. package/dist/contracts/handlers/index.js +2 -3
  36. package/dist/{delegate-1yp1HyP7.d.cts → delegate-CpQIgTs7.d.cts} +1 -1
  37. package/dist/{delegate-BAX5QftB.d.ts → delegate-Dv-us16c.d.ts} +1 -1
  38. package/dist/{hdWalletCapable-CmEU0NP1.d.ts → hdWalletCapable-BC4Fmmht.d.ts} +7 -25
  39. package/dist/{hdWalletCapable-eJgaT-ec.d.cts → hdWalletCapable-DotEa5rZ.d.cts} +7 -25
  40. package/dist/{index-DUxufw76.d.ts → index-Czz9HSqE.d.cts} +21 -220
  41. package/dist/{index-DUxufw76.d.cts → index-Czz9HSqE.d.ts} +21 -220
  42. package/dist/{index-Bem5vKzX.d.ts → index-DUkvXxpt.d.ts} +3 -3
  43. package/dist/{index-W_oMcOmG.d.cts → index-DdJt5fRc.d.cts} +3 -3
  44. package/dist/index.cjs +291 -340
  45. package/dist/index.d.cts +58 -223
  46. package/dist/index.d.ts +58 -223
  47. package/dist/index.js +4 -5
  48. package/dist/repositories/realm/index.cjs +57 -24
  49. package/dist/repositories/realm/index.cjs.map +1 -1
  50. package/dist/repositories/realm/index.d.cts +12 -4
  51. package/dist/repositories/realm/index.d.ts +12 -4
  52. package/dist/repositories/realm/index.js +43 -10
  53. package/dist/repositories/realm/index.js.map +1 -1
  54. package/dist/repositories/sqlite/index.cjs +103 -33
  55. package/dist/repositories/sqlite/index.cjs.map +1 -1
  56. package/dist/repositories/sqlite/index.d.cts +12 -2
  57. package/dist/repositories/sqlite/index.d.ts +12 -2
  58. package/dist/repositories/sqlite/index.js +90 -20
  59. package/dist/repositories/sqlite/index.js.map +1 -1
  60. package/dist/{taskRunner-Dr3NStc0.d.cts → taskRunner-7E_Rx8bD.d.cts} +2 -2
  61. package/dist/{taskRunner-D_iPiZIi.d.ts → taskRunner-DUId1UJ8.d.ts} +2 -2
  62. package/dist/wallet/expo/background.cjs +14 -15
  63. package/dist/wallet/expo/background.cjs.map +1 -1
  64. package/dist/wallet/expo/background.d.cts +3 -3
  65. package/dist/wallet/expo/background.d.ts +3 -3
  66. package/dist/wallet/expo/background.js +6 -7
  67. package/dist/wallet/expo/background.js.map +1 -1
  68. package/dist/wallet/expo/index.cjs +15 -23
  69. package/dist/wallet/expo/index.cjs.map +1 -1
  70. package/dist/wallet/expo/index.d.cts +4 -7
  71. package/dist/wallet/expo/index.d.ts +4 -7
  72. package/dist/wallet/expo/index.js +7 -15
  73. package/dist/wallet/expo/index.js.map +1 -1
  74. package/dist/worker/expo/index.cjs +9 -10
  75. package/dist/worker/expo/index.cjs.map +1 -1
  76. package/dist/worker/expo/index.d.cts +4 -4
  77. package/dist/worker/expo/index.d.ts +4 -4
  78. package/dist/worker/expo/index.js +5 -6
  79. package/dist/worker/expo/index.js.map +1 -1
  80. package/package.json +4 -42
  81. package/dist/adapters/asyncStorage.cjs +0 -48
  82. package/dist/adapters/asyncStorage.cjs.map +0 -1
  83. package/dist/adapters/asyncStorage.d.cts +0 -16
  84. package/dist/adapters/asyncStorage.d.ts +0 -16
  85. package/dist/adapters/asyncStorage.js +0 -46
  86. package/dist/adapters/asyncStorage.js.map +0 -1
  87. package/dist/adapters/fileSystem.cjs +0 -116
  88. package/dist/adapters/fileSystem.cjs.map +0 -1
  89. package/dist/adapters/fileSystem.d.cts +0 -17
  90. package/dist/adapters/fileSystem.d.ts +0 -17
  91. package/dist/adapters/fileSystem.js +0 -93
  92. package/dist/adapters/fileSystem.js.map +0 -1
  93. package/dist/adapters/indexedDB.cjs +0 -103
  94. package/dist/adapters/indexedDB.cjs.map +0 -1
  95. package/dist/adapters/indexedDB.d.cts +0 -18
  96. package/dist/adapters/indexedDB.d.ts +0 -18
  97. package/dist/adapters/indexedDB.js +0 -101
  98. package/dist/adapters/indexedDB.js.map +0 -1
  99. package/dist/adapters/localStorage.cjs +0 -50
  100. package/dist/adapters/localStorage.cjs.map +0 -1
  101. package/dist/adapters/localStorage.d.cts +0 -14
  102. package/dist/adapters/localStorage.d.ts +0 -14
  103. package/dist/adapters/localStorage.js +0 -48
  104. package/dist/adapters/localStorage.js.map +0 -1
  105. package/dist/chunk-3R476TDV.js.map +0 -1
  106. package/dist/chunk-43FKNLX4.cjs.map +0 -1
  107. package/dist/chunk-4PKLULWT.js.map +0 -1
  108. package/dist/chunk-5BLDMQED.cjs +0 -18
  109. package/dist/chunk-5BLDMQED.cjs.map +0 -1
  110. package/dist/chunk-GMZZQXV5.cjs.map +0 -1
  111. package/dist/chunk-ISO4TI5J.js.map +0 -1
  112. package/dist/chunk-JZWLXNHV.cjs.map +0 -1
  113. package/dist/chunk-NSBPE2FW.js +0 -15
  114. package/dist/chunk-NSBPE2FW.js.map +0 -1
  115. package/dist/chunk-NVZJSKZS.cjs.map +0 -1
  116. package/dist/chunk-ZRNQV6HV.js.map +0 -1
  117. package/dist/index-C0IanN1m.d.cts +0 -11
  118. package/dist/index-C0IanN1m.d.ts +0 -11
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/worker/expo/taskQueue.ts","../../../src/worker/expo/asyncStorageTaskQueue.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * A task item represents a unit of work in the inbox.\n */\nexport interface TaskItem {\n id: string;\n type: string;\n data: Record<string, unknown>;\n createdAt: number;\n}\n\n/**\n * A task result represents the outcome of processing a task item.\n */\nexport interface TaskResult {\n id: string;\n taskItemId: string;\n type: string;\n status: \"success\" | \"failed\" | \"noop\";\n data?: Record<string, unknown>;\n executedAt: number;\n}\n\n/**\n * Persistence layer for handing off work between foreground and background.\n *\n * - **Inbox**: tasks waiting to be processed.\n * - **Outbox**: results produced by processors, waiting to be consumed.\n */\nexport interface TaskQueue {\n // Inbox\n addTask(task: TaskItem): Promise<void>;\n removeTask(id: string): Promise<void>;\n getTasks(type?: string): Promise<TaskItem[]>;\n clearTasks(): Promise<void>;\n\n // Outbox\n pushResult(result: TaskResult): Promise<void>;\n getResults(): Promise<TaskResult[]>;\n acknowledgeResults(ids: string[]): Promise<void>;\n}\n\n/**\n * In-memory TaskQueue for testing and lightweight use.\n * State is lost when the process exits.\n */\nexport class InMemoryTaskQueue implements TaskQueue {\n private inbox = new Map<string, TaskItem>();\n private outbox = new Map<string, TaskResult>();\n\n async addTask(task: TaskItem): Promise<void> {\n this.inbox.set(task.id, task);\n }\n\n async removeTask(id: string): Promise<void> {\n this.inbox.delete(id);\n }\n\n async getTasks(type?: string): Promise<TaskItem[]> {\n const tasks = Array.from(this.inbox.values());\n if (type) {\n return tasks.filter((t) => t.type === type);\n }\n return tasks;\n }\n\n async clearTasks(): Promise<void> {\n this.inbox.clear();\n }\n\n async pushResult(result: TaskResult): Promise<void> {\n this.outbox.set(result.id, result);\n }\n\n async getResults(): Promise<TaskResult[]> {\n return Array.from(this.outbox.values());\n }\n\n async acknowledgeResults(ids: string[]): Promise<void> {\n for (const id of ids) {\n this.outbox.delete(id);\n }\n }\n}\n","import type { TaskItem, TaskResult, TaskQueue } from \"./taskQueue\";\n\n/**\n * Minimal async key-value storage interface.\n *\n * Compatible with `@react-native-async-storage/async-storage` and\n * any other storage that exposes the same three methods.\n */\nexport interface AsyncStorageLike {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n}\n\n/**\n * AsyncStorage-backed TaskQueue for Expo/React Native.\n *\n * Persists inbox, outbox, and an optional config blob to AsyncStorage\n * so that data survives process restarts and can be shared between\n * foreground and background execution contexts.\n */\nexport class AsyncStorageTaskQueue implements TaskQueue {\n private readonly inboxKey: string;\n private readonly outboxKey: string;\n private readonly configKey: string;\n\n constructor(\n private readonly storage: AsyncStorageLike,\n prefix = \"ark:task-queue\",\n ) {\n this.inboxKey = `${prefix}:inbox`;\n this.outboxKey = `${prefix}:outbox`;\n this.configKey = `${prefix}:config`;\n }\n\n // ── Inbox ────────────────────────────────────────────────────────\n\n async addTask(task: TaskItem): Promise<void> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n tasks.push(task);\n await this.writeList(this.inboxKey, tasks);\n }\n\n async removeTask(id: string): Promise<void> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n await this.writeList(\n this.inboxKey,\n tasks.filter((t) => t.id !== id),\n );\n }\n\n async getTasks(type?: string): Promise<TaskItem[]> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n if (type) {\n return tasks.filter((t) => t.type === type);\n }\n return tasks;\n }\n\n async clearTasks(): Promise<void> {\n await this.storage.removeItem(this.inboxKey);\n }\n\n // ── Outbox ───────────────────────────────────────────────────────\n\n async pushResult(result: TaskResult): Promise<void> {\n const results = await this.readList<TaskResult>(this.outboxKey);\n results.push(result);\n await this.writeList(this.outboxKey, results);\n }\n\n async getResults(): Promise<TaskResult[]> {\n return this.readList<TaskResult>(this.outboxKey);\n }\n\n async acknowledgeResults(ids: string[]): Promise<void> {\n const idSet = new Set(ids);\n const results = await this.readList<TaskResult>(this.outboxKey);\n await this.writeList(\n this.outboxKey,\n results.filter((r) => !idSet.has(r.id)),\n );\n }\n\n // ── Config persistence (for background handler rehydration) ──────\n\n /**\n * Persist a config blob alongside the queue data.\n * Used by @see ExpoWallet.setup to store the wallet parameters\n * that the background handler needs to reconstruct providers.\n */\n async persistConfig(config: Record<string, unknown> | object): Promise<void> {\n await this.storage.setItem(this.configKey, JSON.stringify(config));\n }\n\n /**\n * Load the persisted config blob.\n * Used by the background handler to rehydrate wallet dependencies.\n */\n async loadConfig<T = Record<string, unknown>>(): Promise<T | null> {\n const raw = await this.storage.getItem(this.configKey);\n return raw ? JSON.parse(raw) : null;\n }\n\n // ── Helpers ──────────────────────────────────────────────────────\n\n private async readList<T>(key: string): Promise<T[]> {\n const raw = await this.storage.getItem(key);\n return raw ? JSON.parse(raw) : [];\n }\n\n private async writeList<T>(key: string, list: T[]): Promise<void> {\n await this.storage.setItem(key, JSON.stringify(list));\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/worker/expo/taskQueue.ts","../../../src/worker/expo/asyncStorageTaskQueue.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * A task item represents a unit of work in the inbox.\n */\nexport interface TaskItem {\n id: string;\n type: string;\n data: Record<string, unknown>;\n createdAt: number;\n}\n\n/**\n * A task result represents the outcome of processing a task item.\n */\nexport interface TaskResult {\n id: string;\n taskItemId: string;\n type: string;\n status: \"success\" | \"failed\" | \"noop\";\n data?: Record<string, unknown>;\n executedAt: number;\n}\n\n/**\n * Persistence layer for handing off work between foreground and background.\n *\n * - **Inbox**: tasks waiting to be processed.\n * - **Outbox**: results produced by processors, waiting to be consumed.\n */\nexport interface TaskQueue {\n // Inbox\n addTask(task: TaskItem): Promise<void>;\n removeTask(id: string): Promise<void>;\n getTasks(type?: string): Promise<TaskItem[]>;\n clearTasks(): Promise<void>;\n\n // Outbox\n pushResult(result: TaskResult): Promise<void>;\n getResults(): Promise<TaskResult[]>;\n acknowledgeResults(ids: string[]): Promise<void>;\n}\n\n/**\n * In-memory TaskQueue for testing and lightweight use.\n * State is lost when the process exits.\n */\nexport class InMemoryTaskQueue implements TaskQueue {\n private inbox = new Map<string, TaskItem>();\n private outbox = new Map<string, TaskResult>();\n\n async addTask(task: TaskItem): Promise<void> {\n this.inbox.set(task.id, task);\n }\n\n async removeTask(id: string): Promise<void> {\n this.inbox.delete(id);\n }\n\n async getTasks(type?: string): Promise<TaskItem[]> {\n const tasks = Array.from(this.inbox.values());\n if (type) {\n return tasks.filter((t) => t.type === type);\n }\n return tasks;\n }\n\n async clearTasks(): Promise<void> {\n this.inbox.clear();\n }\n\n async pushResult(result: TaskResult): Promise<void> {\n this.outbox.set(result.id, result);\n }\n\n async getResults(): Promise<TaskResult[]> {\n return Array.from(this.outbox.values());\n }\n\n async acknowledgeResults(ids: string[]): Promise<void> {\n for (const id of ids) {\n this.outbox.delete(id);\n }\n }\n}\n","import type { TaskItem, TaskResult, TaskQueue } from \"./taskQueue\";\n\n/**\n * Minimal async key-value storage interface.\n *\n * Compatible with `@react-native-async-storage/async-storage` and\n * any other storage that exposes the same three methods.\n */\nexport interface AsyncStorageLike {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n}\n\n/**\n * AsyncStorage-backed TaskQueue for Expo/React Native.\n *\n * Persists inbox, outbox, and an optional config blob to AsyncStorage\n * so that data survives process restarts and can be shared between\n * foreground and background execution contexts.\n */\nexport class AsyncStorageTaskQueue implements TaskQueue {\n private readonly inboxKey: string;\n private readonly outboxKey: string;\n private readonly configKey: string;\n\n constructor(\n private readonly storage: AsyncStorageLike,\n prefix = \"ark:task-queue\",\n ) {\n this.inboxKey = `${prefix}:inbox`;\n this.outboxKey = `${prefix}:outbox`;\n this.configKey = `${prefix}:config`;\n }\n\n // ── Inbox ────────────────────────────────────────────────────────\n\n async addTask(task: TaskItem): Promise<void> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n tasks.push(task);\n await this.writeList(this.inboxKey, tasks);\n }\n\n async removeTask(id: string): Promise<void> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n await this.writeList(\n this.inboxKey,\n tasks.filter((t) => t.id !== id),\n );\n }\n\n async getTasks(type?: string): Promise<TaskItem[]> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n if (type) {\n return tasks.filter((t) => t.type === type);\n }\n return tasks;\n }\n\n async clearTasks(): Promise<void> {\n await this.storage.removeItem(this.inboxKey);\n }\n\n // ── Outbox ───────────────────────────────────────────────────────\n\n async pushResult(result: TaskResult): Promise<void> {\n const results = await this.readList<TaskResult>(this.outboxKey);\n results.push(result);\n await this.writeList(this.outboxKey, results);\n }\n\n async getResults(): Promise<TaskResult[]> {\n return this.readList<TaskResult>(this.outboxKey);\n }\n\n async acknowledgeResults(ids: string[]): Promise<void> {\n const idSet = new Set(ids);\n const results = await this.readList<TaskResult>(this.outboxKey);\n await this.writeList(\n this.outboxKey,\n results.filter((r) => !idSet.has(r.id)),\n );\n }\n\n // ── Config persistence (for background handler rehydration) ──────\n\n /**\n * Persist a config blob alongside the queue data.\n * Used by @see ExpoWallet.setup to store the wallet parameters\n * that the background handler needs to reconstruct providers.\n */\n async persistConfig(config: Record<string, unknown> | object): Promise<void> {\n await this.storage.setItem(this.configKey, JSON.stringify(config));\n }\n\n /**\n * Load the persisted config blob.\n * Used by the background handler to rehydrate wallet dependencies.\n */\n async loadConfig<T = Record<string, unknown>>(): Promise<T | null> {\n const raw = await this.storage.getItem(this.configKey);\n return raw ? JSON.parse(raw) : null;\n }\n\n // ── Helpers ──────────────────────────────────────────────────────\n\n private async readList<T>(key: string): Promise<T[]> {\n const raw = await this.storage.getItem(key);\n return raw ? JSON.parse(raw) : [];\n }\n\n private async writeList<T>(key: string, list: T[]): Promise<void> {\n await this.storage.setItem(key, JSON.stringify(list));\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkade-os/sdk",
3
- "version": "0.5.0-rc.2",
3
+ "version": "0.5.0-rc.4",
4
4
  "description": "TypeScript SDK for building Bitcoin wallets using the Arkade protocol",
5
5
  "repository": {
6
6
  "type": "git",
@@ -40,46 +40,6 @@
40
40
  "default": "./dist/adapters/expo.cjs"
41
41
  }
42
42
  },
43
- "./adapters/localStorage": {
44
- "import": {
45
- "types": "./dist/adapters/localStorage.d.ts",
46
- "default": "./dist/adapters/localStorage.js"
47
- },
48
- "require": {
49
- "types": "./dist/adapters/localStorage.d.cts",
50
- "default": "./dist/adapters/localStorage.cjs"
51
- }
52
- },
53
- "./adapters/fileSystem": {
54
- "import": {
55
- "types": "./dist/adapters/fileSystem.d.ts",
56
- "default": "./dist/adapters/fileSystem.js"
57
- },
58
- "require": {
59
- "types": "./dist/adapters/fileSystem.d.cts",
60
- "default": "./dist/adapters/fileSystem.cjs"
61
- }
62
- },
63
- "./adapters/indexedDB": {
64
- "import": {
65
- "types": "./dist/adapters/indexedDB.d.ts",
66
- "default": "./dist/adapters/indexedDB.js"
67
- },
68
- "require": {
69
- "types": "./dist/adapters/indexedDB.d.cts",
70
- "default": "./dist/adapters/indexedDB.cjs"
71
- }
72
- },
73
- "./adapters/asyncStorage": {
74
- "import": {
75
- "types": "./dist/adapters/asyncStorage.d.ts",
76
- "default": "./dist/adapters/asyncStorage.js"
77
- },
78
- "require": {
79
- "types": "./dist/adapters/asyncStorage.d.cts",
80
- "default": "./dist/adapters/asyncStorage.cjs"
81
- }
82
- },
83
43
  "./repositories/sqlite": {
84
44
  "import": {
85
45
  "types": "./dist/repositories/sqlite/index.d.ts",
@@ -206,6 +166,8 @@
206
166
  "build": "tsup",
207
167
  "smoke:dist": "node scripts/smoke-dist.mjs",
208
168
  "typecheck": "tsc --noEmit",
169
+ "typecheck:tests": "tsc -p tsconfig.tests.json --noEmit",
170
+ "typecheck:types": "tsc -p tsconfig.typecheck.json --noEmit",
209
171
  "check:vtxo": "node scripts/check-virtual-status.mjs && node scripts/check-provider-boundary.mjs",
210
172
  "check:e2e-groups": "node ../../scripts/e2e-groups.mjs --check",
211
173
  "docs:build": "pnpm run typecheck && pnpm typedoc",
@@ -224,7 +186,7 @@
224
186
  "test:watch": "vitest",
225
187
  "test:coverage": "vitest run --coverage",
226
188
  "format": "biome format --write src test examples",
227
- "lint": "biome format src test examples && pnpm run check:vtxo && pnpm run check:e2e-groups",
189
+ "lint": "biome format src test examples && pnpm run typecheck:tests && pnpm run check:vtxo && pnpm run check:e2e-groups",
228
190
  "audit": "pnpm audit"
229
191
  }
230
192
  }
@@ -1,48 +0,0 @@
1
- 'use strict';
2
-
3
- var chunk5BLDMQED_cjs = require('../chunk-5BLDMQED.cjs');
4
-
5
- // src/storage/asyncStorage.ts
6
- var AsyncStorageAdapter = class {
7
- AsyncStorage;
8
- constructor() {
9
- try {
10
- this.AsyncStorage = chunk5BLDMQED_cjs.__require("@react-native-async-storage/async-storage").default;
11
- } catch (error) {
12
- throw new Error(
13
- "AsyncStorage is not available. Make sure @react-native-async-storage/async-storage is installed in React Native environment."
14
- );
15
- }
16
- }
17
- async getItem(key) {
18
- return await this.AsyncStorage.getItem(key);
19
- }
20
- async setItem(key, value) {
21
- try {
22
- await this.AsyncStorage.setItem(key, value);
23
- } catch (error) {
24
- console.error(`Failed to set item for key ${key}:`, error);
25
- throw error;
26
- }
27
- }
28
- async removeItem(key) {
29
- try {
30
- await this.AsyncStorage.removeItem(key);
31
- } catch (error) {
32
- console.error(`Failed to remove item for key ${key}:`, error);
33
- throw error;
34
- }
35
- }
36
- async clear() {
37
- try {
38
- await this.AsyncStorage.clear();
39
- } catch (error) {
40
- console.error("Failed to clear AsyncStorage:", error);
41
- throw error;
42
- }
43
- }
44
- };
45
-
46
- exports.AsyncStorageAdapter = AsyncStorageAdapter;
47
- //# sourceMappingURL=asyncStorage.cjs.map
48
- //# sourceMappingURL=asyncStorage.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/storage/asyncStorage.ts"],"names":["__require"],"mappings":";;;;;AAMO,IAAM,sBAAN,MAAoD;AAAA,EAC/C,YAAA;AAAA,EAER,WAAA,GAAc;AACV,IAAA,IAAI;AAEA,MAAA,IAAA,CAAK,YAAA,GAAeA,2BAAA,CAAQ,2CAA2C,CAAA,CAAE,OAAA;AAAA,IAC7E,SAAS,KAAA,EAAO;AACZ,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ,GAAA,EAAqC;AAC/C,IAAA,OAAO,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAA,CAAQ,GAAA,EAAa,KAAA,EAA8B;AACrD,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AAAA,IAC9C,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACzD,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,GAAA,EAA4B;AACzC,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,CAAK,YAAA,CAAa,UAAA,CAAW,GAAG,CAAA;AAAA,IAC1C,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAC5D,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,KAAA,GAAuB;AACzB,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,IAClC,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,KAAK,CAAA;AACpD,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AACJ","file":"asyncStorage.cjs","sourcesContent":["import type { StorageAdapter } from \"./index\";\n\n/**\n * @deprecated Use repositories instead\n * Note: This requires @react-native-async-storage/async-storage to be installed\n */\nexport class AsyncStorageAdapter implements StorageAdapter {\n private AsyncStorage: any;\n\n constructor() {\n try {\n // Dynamic import to avoid errors in non-React Native environments\n this.AsyncStorage = require(\"@react-native-async-storage/async-storage\").default;\n } catch (error) {\n throw new Error(\n \"AsyncStorage is not available. Make sure @react-native-async-storage/async-storage is installed in React Native environment.\",\n );\n }\n }\n\n async getItem(key: string): Promise<string | null> {\n return await this.AsyncStorage.getItem(key);\n }\n\n async setItem(key: string, value: string): Promise<void> {\n try {\n await this.AsyncStorage.setItem(key, value);\n } catch (error) {\n console.error(`Failed to set item for key ${key}:`, error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n try {\n await this.AsyncStorage.removeItem(key);\n } catch (error) {\n console.error(`Failed to remove item for key ${key}:`, error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n try {\n await this.AsyncStorage.clear();\n } catch (error) {\n console.error(\"Failed to clear AsyncStorage:\", error);\n throw error;\n }\n }\n}\n"]}
@@ -1,16 +0,0 @@
1
- import { S as StorageAdapter } from '../index-C0IanN1m.cjs';
2
-
3
- /**
4
- * @deprecated Use repositories instead
5
- * Note: This requires @react-native-async-storage/async-storage to be installed
6
- */
7
- declare class AsyncStorageAdapter implements StorageAdapter {
8
- private AsyncStorage;
9
- constructor();
10
- getItem(key: string): Promise<string | null>;
11
- setItem(key: string, value: string): Promise<void>;
12
- removeItem(key: string): Promise<void>;
13
- clear(): Promise<void>;
14
- }
15
-
16
- export { AsyncStorageAdapter, StorageAdapter };
@@ -1,16 +0,0 @@
1
- import { S as StorageAdapter } from '../index-C0IanN1m.js';
2
-
3
- /**
4
- * @deprecated Use repositories instead
5
- * Note: This requires @react-native-async-storage/async-storage to be installed
6
- */
7
- declare class AsyncStorageAdapter implements StorageAdapter {
8
- private AsyncStorage;
9
- constructor();
10
- getItem(key: string): Promise<string | null>;
11
- setItem(key: string, value: string): Promise<void>;
12
- removeItem(key: string): Promise<void>;
13
- clear(): Promise<void>;
14
- }
15
-
16
- export { AsyncStorageAdapter, StorageAdapter };
@@ -1,46 +0,0 @@
1
- import { __require } from '../chunk-NSBPE2FW.js';
2
-
3
- // src/storage/asyncStorage.ts
4
- var AsyncStorageAdapter = class {
5
- AsyncStorage;
6
- constructor() {
7
- try {
8
- this.AsyncStorage = __require("@react-native-async-storage/async-storage").default;
9
- } catch (error) {
10
- throw new Error(
11
- "AsyncStorage is not available. Make sure @react-native-async-storage/async-storage is installed in React Native environment."
12
- );
13
- }
14
- }
15
- async getItem(key) {
16
- return await this.AsyncStorage.getItem(key);
17
- }
18
- async setItem(key, value) {
19
- try {
20
- await this.AsyncStorage.setItem(key, value);
21
- } catch (error) {
22
- console.error(`Failed to set item for key ${key}:`, error);
23
- throw error;
24
- }
25
- }
26
- async removeItem(key) {
27
- try {
28
- await this.AsyncStorage.removeItem(key);
29
- } catch (error) {
30
- console.error(`Failed to remove item for key ${key}:`, error);
31
- throw error;
32
- }
33
- }
34
- async clear() {
35
- try {
36
- await this.AsyncStorage.clear();
37
- } catch (error) {
38
- console.error("Failed to clear AsyncStorage:", error);
39
- throw error;
40
- }
41
- }
42
- };
43
-
44
- export { AsyncStorageAdapter };
45
- //# sourceMappingURL=asyncStorage.js.map
46
- //# sourceMappingURL=asyncStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/storage/asyncStorage.ts"],"names":[],"mappings":";;;AAMO,IAAM,sBAAN,MAAoD;AAAA,EAC/C,YAAA;AAAA,EAER,WAAA,GAAc;AACV,IAAA,IAAI;AAEA,MAAA,IAAA,CAAK,YAAA,GAAe,SAAA,CAAQ,2CAA2C,CAAA,CAAE,OAAA;AAAA,IAC7E,SAAS,KAAA,EAAO;AACZ,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ,GAAA,EAAqC;AAC/C,IAAA,OAAO,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAA,CAAQ,GAAA,EAAa,KAAA,EAA8B;AACrD,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,GAAA,EAAK,KAAK,CAAA;AAAA,IAC9C,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AACzD,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,GAAA,EAA4B;AACzC,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,CAAK,YAAA,CAAa,UAAA,CAAW,GAAG,CAAA;AAAA,IAC1C,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,8BAAA,EAAiC,GAAG,CAAA,CAAA,CAAA,EAAK,KAAK,CAAA;AAC5D,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AAAA,EAEA,MAAM,KAAA,GAAuB;AACzB,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,CAAK,aAAa,KAAA,EAAM;AAAA,IAClC,SAAS,KAAA,EAAO;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,KAAK,CAAA;AACpD,MAAA,MAAM,KAAA;AAAA,IACV;AAAA,EACJ;AACJ","file":"asyncStorage.js","sourcesContent":["import type { StorageAdapter } from \"./index\";\n\n/**\n * @deprecated Use repositories instead\n * Note: This requires @react-native-async-storage/async-storage to be installed\n */\nexport class AsyncStorageAdapter implements StorageAdapter {\n private AsyncStorage: any;\n\n constructor() {\n try {\n // Dynamic import to avoid errors in non-React Native environments\n this.AsyncStorage = require(\"@react-native-async-storage/async-storage\").default;\n } catch (error) {\n throw new Error(\n \"AsyncStorage is not available. Make sure @react-native-async-storage/async-storage is installed in React Native environment.\",\n );\n }\n }\n\n async getItem(key: string): Promise<string | null> {\n return await this.AsyncStorage.getItem(key);\n }\n\n async setItem(key: string, value: string): Promise<void> {\n try {\n await this.AsyncStorage.setItem(key, value);\n } catch (error) {\n console.error(`Failed to set item for key ${key}:`, error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n try {\n await this.AsyncStorage.removeItem(key);\n } catch (error) {\n console.error(`Failed to remove item for key ${key}:`, error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n try {\n await this.AsyncStorage.clear();\n } catch (error) {\n console.error(\"Failed to clear AsyncStorage:\", error);\n throw error;\n }\n }\n}\n"]}
@@ -1,116 +0,0 @@
1
- 'use strict';
2
-
3
- require('../chunk-5BLDMQED.cjs');
4
- var fs = require('fs/promises');
5
- var path = require('path');
6
-
7
- function _interopNamespace(e) {
8
- if (e && e.__esModule) return e;
9
- var n = Object.create(null);
10
- if (e) {
11
- Object.keys(e).forEach(function (k) {
12
- if (k !== 'default') {
13
- var d = Object.getOwnPropertyDescriptor(e, k);
14
- Object.defineProperty(n, k, d.get ? d : {
15
- enumerable: true,
16
- get: function () { return e[k]; }
17
- });
18
- }
19
- });
20
- }
21
- n.default = e;
22
- return Object.freeze(n);
23
- }
24
-
25
- var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
26
- var path__namespace = /*#__PURE__*/_interopNamespace(path);
27
-
28
- var FileSystemStorageAdapter = class {
29
- basePath;
30
- constructor(dirPath) {
31
- this.basePath = path__namespace.resolve(dirPath).replace(/[/\\]+$/, "");
32
- }
33
- validateAndGetFilePath(key) {
34
- if (key === "." || key === "..") {
35
- throw new Error("Invalid key: '.' and '..' are not allowed");
36
- }
37
- if (key.includes("\0")) {
38
- throw new Error("Invalid key: null bytes are not allowed");
39
- }
40
- if (key.includes("..")) {
41
- throw new Error("Invalid key: directory traversal is not allowed");
42
- }
43
- const reservedNames = /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i;
44
- const keyWithoutExt = key.split(".")[0];
45
- if (reservedNames.test(keyWithoutExt)) {
46
- throw new Error(`Invalid key: '${key}' uses a reserved Windows name`);
47
- }
48
- if (key.endsWith(" ") || key.endsWith(".")) {
49
- throw new Error("Invalid key: trailing spaces or dots are not allowed");
50
- }
51
- const normalizedKey = key.replace(/[/\\]/g, "_").replace(/[^a-zA-Z0-9._-]/g, "_");
52
- const resolved = path__namespace.resolve(this.basePath, normalizedKey);
53
- const relative2 = path__namespace.relative(this.basePath, resolved);
54
- if (relative2.startsWith("..") || relative2.includes(path__namespace.sep + "..")) {
55
- throw new Error("Invalid key: directory traversal is not allowed");
56
- }
57
- return resolved;
58
- }
59
- async ensureDirectory() {
60
- try {
61
- await fs__namespace.access(this.basePath);
62
- } catch {
63
- await fs__namespace.mkdir(this.basePath, { recursive: true });
64
- }
65
- }
66
- async getItem(key) {
67
- try {
68
- const filePath = this.validateAndGetFilePath(key);
69
- const data = await fs__namespace.readFile(filePath, "utf-8");
70
- return data;
71
- } catch (error) {
72
- if (error.code === "ENOENT") {
73
- return null;
74
- }
75
- console.error(`Failed to read file for key ${key}:`, error);
76
- return null;
77
- }
78
- }
79
- async setItem(key, value) {
80
- try {
81
- await this.ensureDirectory();
82
- const filePath = this.validateAndGetFilePath(key);
83
- await fs__namespace.writeFile(filePath, value, "utf-8");
84
- } catch (error) {
85
- console.error(`Failed to write file for key ${key}:`, error);
86
- throw error;
87
- }
88
- }
89
- async removeItem(key) {
90
- try {
91
- const filePath = this.validateAndGetFilePath(key);
92
- await fs__namespace.unlink(filePath);
93
- } catch (error) {
94
- if (error.code !== "ENOENT") {
95
- console.error(`Failed to remove file for key ${key}:`, error);
96
- }
97
- }
98
- }
99
- async clear() {
100
- try {
101
- const entries = await fs__namespace.readdir(this.basePath);
102
- await Promise.all(
103
- entries.map(async (entry) => {
104
- const entryPath = path__namespace.join(this.basePath, entry);
105
- await fs__namespace.rm(entryPath, { recursive: true, force: true });
106
- })
107
- );
108
- } catch (error) {
109
- console.error("Failed to clear storage directory:", error);
110
- }
111
- }
112
- };
113
-
114
- exports.FileSystemStorageAdapter = FileSystemStorageAdapter;
115
- //# sourceMappingURL=fileSystem.cjs.map
116
- //# sourceMappingURL=fileSystem.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/storage/fileSystem.ts"],"names":["path","relative","fs"],"mappings":"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","file":"fileSystem.cjs","sourcesContent":["import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport type { StorageAdapter } from \"./index\";\n\n/**\n * @deprecated Use repository implementations via `StorageConfig` instead.\n */\nexport class FileSystemStorageAdapter implements StorageAdapter {\n private readonly basePath: string;\n\n constructor(dirPath: string) {\n // Normalize and resolve the storage base path once\n this.basePath = path.resolve(dirPath).replace(/[/\\\\]+$/, \"\");\n }\n\n private validateAndGetFilePath(key: string): string {\n // Reject dangerous keys\n if (key === \".\" || key === \"..\") {\n throw new Error(\"Invalid key: '.' and '..' are not allowed\");\n }\n\n // Check for null bytes\n if (key.includes(\"\\0\")) {\n throw new Error(\"Invalid key: null bytes are not allowed\");\n }\n\n // Check for path traversal attempts before normalization\n if (key.includes(\"..\")) {\n throw new Error(\"Invalid key: directory traversal is not allowed\");\n }\n\n // Check for reserved Windows names (case-insensitive)\n const reservedNames = /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i;\n const keyWithoutExt = key.split(\".\")[0];\n if (reservedNames.test(keyWithoutExt)) {\n throw new Error(`Invalid key: '${key}' uses a reserved Windows name`);\n }\n\n // Check for trailing spaces or dots\n if (key.endsWith(\" \") || key.endsWith(\".\")) {\n throw new Error(\"Invalid key: trailing spaces or dots are not allowed\");\n }\n\n // Normalize path separators and sanitize key\n const normalizedKey = key.replace(/[/\\\\]/g, \"_\").replace(/[^a-zA-Z0-9._-]/g, \"_\");\n\n // Resolve the full path and check for directory traversal\n const resolved = path.resolve(this.basePath, normalizedKey);\n const relative = path.relative(this.basePath, resolved);\n\n // Reject if trying to escape the base directory\n if (relative.startsWith(\"..\") || relative.includes(path.sep + \"..\")) {\n throw new Error(\"Invalid key: directory traversal is not allowed\");\n }\n\n return resolved;\n }\n\n private async ensureDirectory(): Promise<void> {\n try {\n await fs.access(this.basePath);\n } catch {\n await fs.mkdir(this.basePath, { recursive: true });\n }\n }\n\n async getItem(key: string): Promise<string | null> {\n try {\n const filePath = this.validateAndGetFilePath(key);\n const data = await fs.readFile(filePath, \"utf-8\");\n return data;\n } catch (error: any) {\n if (error.code === \"ENOENT\") {\n return null;\n }\n console.error(`Failed to read file for key ${key}:`, error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n try {\n await this.ensureDirectory();\n const filePath = this.validateAndGetFilePath(key);\n await fs.writeFile(filePath, value, \"utf-8\");\n } catch (error) {\n console.error(`Failed to write file for key ${key}:`, error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n try {\n const filePath = this.validateAndGetFilePath(key);\n await fs.unlink(filePath);\n } catch (error: any) {\n if (error.code !== \"ENOENT\") {\n console.error(`Failed to remove file for key ${key}:`, error);\n }\n }\n }\n\n async clear(): Promise<void> {\n try {\n const entries = await fs.readdir(this.basePath);\n await Promise.all(\n entries.map(async (entry) => {\n const entryPath = path.join(this.basePath, entry);\n // Use fs.rm with recursive option to handle both files and directories\n await fs.rm(entryPath, { recursive: true, force: true });\n }),\n );\n } catch (error) {\n console.error(\"Failed to clear storage directory:\", error);\n }\n }\n}\n"]}
@@ -1,17 +0,0 @@
1
- import { S as StorageAdapter } from '../index-C0IanN1m.cjs';
2
-
3
- /**
4
- * @deprecated Use repository implementations via `StorageConfig` instead.
5
- */
6
- declare class FileSystemStorageAdapter implements StorageAdapter {
7
- private readonly basePath;
8
- constructor(dirPath: string);
9
- private validateAndGetFilePath;
10
- private ensureDirectory;
11
- getItem(key: string): Promise<string | null>;
12
- setItem(key: string, value: string): Promise<void>;
13
- removeItem(key: string): Promise<void>;
14
- clear(): Promise<void>;
15
- }
16
-
17
- export { FileSystemStorageAdapter, StorageAdapter };
@@ -1,17 +0,0 @@
1
- import { S as StorageAdapter } from '../index-C0IanN1m.js';
2
-
3
- /**
4
- * @deprecated Use repository implementations via `StorageConfig` instead.
5
- */
6
- declare class FileSystemStorageAdapter implements StorageAdapter {
7
- private readonly basePath;
8
- constructor(dirPath: string);
9
- private validateAndGetFilePath;
10
- private ensureDirectory;
11
- getItem(key: string): Promise<string | null>;
12
- setItem(key: string, value: string): Promise<void>;
13
- removeItem(key: string): Promise<void>;
14
- clear(): Promise<void>;
15
- }
16
-
17
- export { FileSystemStorageAdapter, StorageAdapter };
@@ -1,93 +0,0 @@
1
- import '../chunk-NSBPE2FW.js';
2
- import * as fs from 'fs/promises';
3
- import * as path from 'path';
4
-
5
- var FileSystemStorageAdapter = class {
6
- basePath;
7
- constructor(dirPath) {
8
- this.basePath = path.resolve(dirPath).replace(/[/\\]+$/, "");
9
- }
10
- validateAndGetFilePath(key) {
11
- if (key === "." || key === "..") {
12
- throw new Error("Invalid key: '.' and '..' are not allowed");
13
- }
14
- if (key.includes("\0")) {
15
- throw new Error("Invalid key: null bytes are not allowed");
16
- }
17
- if (key.includes("..")) {
18
- throw new Error("Invalid key: directory traversal is not allowed");
19
- }
20
- const reservedNames = /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i;
21
- const keyWithoutExt = key.split(".")[0];
22
- if (reservedNames.test(keyWithoutExt)) {
23
- throw new Error(`Invalid key: '${key}' uses a reserved Windows name`);
24
- }
25
- if (key.endsWith(" ") || key.endsWith(".")) {
26
- throw new Error("Invalid key: trailing spaces or dots are not allowed");
27
- }
28
- const normalizedKey = key.replace(/[/\\]/g, "_").replace(/[^a-zA-Z0-9._-]/g, "_");
29
- const resolved = path.resolve(this.basePath, normalizedKey);
30
- const relative2 = path.relative(this.basePath, resolved);
31
- if (relative2.startsWith("..") || relative2.includes(path.sep + "..")) {
32
- throw new Error("Invalid key: directory traversal is not allowed");
33
- }
34
- return resolved;
35
- }
36
- async ensureDirectory() {
37
- try {
38
- await fs.access(this.basePath);
39
- } catch {
40
- await fs.mkdir(this.basePath, { recursive: true });
41
- }
42
- }
43
- async getItem(key) {
44
- try {
45
- const filePath = this.validateAndGetFilePath(key);
46
- const data = await fs.readFile(filePath, "utf-8");
47
- return data;
48
- } catch (error) {
49
- if (error.code === "ENOENT") {
50
- return null;
51
- }
52
- console.error(`Failed to read file for key ${key}:`, error);
53
- return null;
54
- }
55
- }
56
- async setItem(key, value) {
57
- try {
58
- await this.ensureDirectory();
59
- const filePath = this.validateAndGetFilePath(key);
60
- await fs.writeFile(filePath, value, "utf-8");
61
- } catch (error) {
62
- console.error(`Failed to write file for key ${key}:`, error);
63
- throw error;
64
- }
65
- }
66
- async removeItem(key) {
67
- try {
68
- const filePath = this.validateAndGetFilePath(key);
69
- await fs.unlink(filePath);
70
- } catch (error) {
71
- if (error.code !== "ENOENT") {
72
- console.error(`Failed to remove file for key ${key}:`, error);
73
- }
74
- }
75
- }
76
- async clear() {
77
- try {
78
- const entries = await fs.readdir(this.basePath);
79
- await Promise.all(
80
- entries.map(async (entry) => {
81
- const entryPath = path.join(this.basePath, entry);
82
- await fs.rm(entryPath, { recursive: true, force: true });
83
- })
84
- );
85
- } catch (error) {
86
- console.error("Failed to clear storage directory:", error);
87
- }
88
- }
89
- };
90
-
91
- export { FileSystemStorageAdapter };
92
- //# sourceMappingURL=fileSystem.js.map
93
- //# sourceMappingURL=fileSystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/storage/fileSystem.ts"],"names":["relative"],"mappings":"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","file":"fileSystem.js","sourcesContent":["import * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport type { StorageAdapter } from \"./index\";\n\n/**\n * @deprecated Use repository implementations via `StorageConfig` instead.\n */\nexport class FileSystemStorageAdapter implements StorageAdapter {\n private readonly basePath: string;\n\n constructor(dirPath: string) {\n // Normalize and resolve the storage base path once\n this.basePath = path.resolve(dirPath).replace(/[/\\\\]+$/, \"\");\n }\n\n private validateAndGetFilePath(key: string): string {\n // Reject dangerous keys\n if (key === \".\" || key === \"..\") {\n throw new Error(\"Invalid key: '.' and '..' are not allowed\");\n }\n\n // Check for null bytes\n if (key.includes(\"\\0\")) {\n throw new Error(\"Invalid key: null bytes are not allowed\");\n }\n\n // Check for path traversal attempts before normalization\n if (key.includes(\"..\")) {\n throw new Error(\"Invalid key: directory traversal is not allowed\");\n }\n\n // Check for reserved Windows names (case-insensitive)\n const reservedNames = /^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$/i;\n const keyWithoutExt = key.split(\".\")[0];\n if (reservedNames.test(keyWithoutExt)) {\n throw new Error(`Invalid key: '${key}' uses a reserved Windows name`);\n }\n\n // Check for trailing spaces or dots\n if (key.endsWith(\" \") || key.endsWith(\".\")) {\n throw new Error(\"Invalid key: trailing spaces or dots are not allowed\");\n }\n\n // Normalize path separators and sanitize key\n const normalizedKey = key.replace(/[/\\\\]/g, \"_\").replace(/[^a-zA-Z0-9._-]/g, \"_\");\n\n // Resolve the full path and check for directory traversal\n const resolved = path.resolve(this.basePath, normalizedKey);\n const relative = path.relative(this.basePath, resolved);\n\n // Reject if trying to escape the base directory\n if (relative.startsWith(\"..\") || relative.includes(path.sep + \"..\")) {\n throw new Error(\"Invalid key: directory traversal is not allowed\");\n }\n\n return resolved;\n }\n\n private async ensureDirectory(): Promise<void> {\n try {\n await fs.access(this.basePath);\n } catch {\n await fs.mkdir(this.basePath, { recursive: true });\n }\n }\n\n async getItem(key: string): Promise<string | null> {\n try {\n const filePath = this.validateAndGetFilePath(key);\n const data = await fs.readFile(filePath, \"utf-8\");\n return data;\n } catch (error: any) {\n if (error.code === \"ENOENT\") {\n return null;\n }\n console.error(`Failed to read file for key ${key}:`, error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n try {\n await this.ensureDirectory();\n const filePath = this.validateAndGetFilePath(key);\n await fs.writeFile(filePath, value, \"utf-8\");\n } catch (error) {\n console.error(`Failed to write file for key ${key}:`, error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n try {\n const filePath = this.validateAndGetFilePath(key);\n await fs.unlink(filePath);\n } catch (error: any) {\n if (error.code !== \"ENOENT\") {\n console.error(`Failed to remove file for key ${key}:`, error);\n }\n }\n }\n\n async clear(): Promise<void> {\n try {\n const entries = await fs.readdir(this.basePath);\n await Promise.all(\n entries.map(async (entry) => {\n const entryPath = path.join(this.basePath, entry);\n // Use fs.rm with recursive option to handle both files and directories\n await fs.rm(entryPath, { recursive: true, force: true });\n }),\n );\n } catch (error) {\n console.error(\"Failed to clear storage directory:\", error);\n }\n }\n}\n"]}
@@ -1,103 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkGMZZQXV5_cjs = require('../chunk-GMZZQXV5.cjs');
4
- require('../chunk-NVZJSKZS.cjs');
5
- require('../chunk-43FKNLX4.cjs');
6
- require('../chunk-JZWLXNHV.cjs');
7
- require('../chunk-5BLDMQED.cjs');
8
-
9
- // src/storage/indexedDB.ts
10
- var IndexedDBStorageAdapter = class {
11
- dbName;
12
- version;
13
- db = null;
14
- constructor(dbName, version = chunkGMZZQXV5_cjs.DB_VERSION) {
15
- this.dbName = dbName;
16
- this.version = version;
17
- }
18
- async getDB() {
19
- if (this.db) return this.db;
20
- const globalObject = typeof window === "undefined" ? self : window;
21
- if (!(globalObject && "indexedDB" in globalObject)) {
22
- throw new Error("IndexedDB is not available in this environment");
23
- }
24
- return new Promise((resolve, reject) => {
25
- const request = globalObject.indexedDB.open(this.dbName, this.version);
26
- request.onerror = () => reject(request.error);
27
- request.onsuccess = () => {
28
- this.db = request.result;
29
- resolve(this.db);
30
- };
31
- request.onupgradeneeded = () => {
32
- const db = request.result;
33
- if (!db.objectStoreNames.contains("storage")) {
34
- db.createObjectStore("storage");
35
- }
36
- };
37
- });
38
- }
39
- async getItem(key) {
40
- try {
41
- const db = await this.getDB();
42
- return new Promise((resolve, reject) => {
43
- const transaction = db.transaction(["storage"], "readonly");
44
- const store = transaction.objectStore("storage");
45
- const request = store.get(key);
46
- request.onerror = () => reject(request.error);
47
- request.onsuccess = () => {
48
- resolve(request.result || null);
49
- };
50
- });
51
- } catch (error) {
52
- console.error(`Failed to get item for key ${key}:`, error);
53
- return null;
54
- }
55
- }
56
- async setItem(key, value) {
57
- try {
58
- const db = await this.getDB();
59
- return new Promise((resolve, reject) => {
60
- const transaction = db.transaction(["storage"], "readwrite");
61
- const store = transaction.objectStore("storage");
62
- const request = store.put(value, key);
63
- request.onerror = () => reject(request.error);
64
- request.onsuccess = () => resolve();
65
- });
66
- } catch (error) {
67
- console.error(`Failed to set item for key ${key}:`, error);
68
- throw error;
69
- }
70
- }
71
- async removeItem(key) {
72
- try {
73
- const db = await this.getDB();
74
- return new Promise((resolve, reject) => {
75
- const transaction = db.transaction(["storage"], "readwrite");
76
- const store = transaction.objectStore("storage");
77
- const request = store.delete(key);
78
- request.onerror = () => reject(request.error);
79
- request.onsuccess = () => resolve();
80
- });
81
- } catch (error) {
82
- console.error(`Failed to remove item for key ${key}:`, error);
83
- }
84
- }
85
- async clear() {
86
- try {
87
- const db = await this.getDB();
88
- return new Promise((resolve, reject) => {
89
- const transaction = db.transaction(["storage"], "readwrite");
90
- const store = transaction.objectStore("storage");
91
- const request = store.clear();
92
- request.onerror = () => reject(request.error);
93
- request.onsuccess = () => resolve();
94
- });
95
- } catch (error) {
96
- console.error("Failed to clear storage:", error);
97
- }
98
- }
99
- };
100
-
101
- exports.IndexedDBStorageAdapter = IndexedDBStorageAdapter;
102
- //# sourceMappingURL=indexedDB.cjs.map
103
- //# sourceMappingURL=indexedDB.cjs.map