@decaf-ts/integrations 0.1.3 → 0.2.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 (172) hide show
  1. package/dist/integrations.cjs +1 -1
  2. package/docker/azure-blob-compose.yml +21 -0
  3. package/docker/gcs-blob-compose.yml +21 -0
  4. package/docker/ipfs-compose.yml +25 -0
  5. package/docker/minio-compose.yml +25 -0
  6. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +293 -0
  7. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +1 -0
  8. package/lib/cjs/blob/azure/index.cjs +24 -0
  9. package/lib/cjs/blob/azure/index.cjs.map +1 -0
  10. package/lib/cjs/blob/core/BlobErrors.cjs +74 -0
  11. package/lib/cjs/blob/core/BlobErrors.cjs.map +1 -0
  12. package/lib/cjs/blob/core/BlobKey.cjs +37 -0
  13. package/lib/cjs/blob/core/BlobKey.cjs.map +1 -0
  14. package/lib/cjs/blob/core/BlobStoreFactory.cjs +57 -0
  15. package/lib/cjs/blob/core/BlobStoreFactory.cjs.map +1 -0
  16. package/lib/cjs/blob/core/BlobStoreService.cjs +42 -0
  17. package/lib/cjs/blob/core/BlobStoreService.cjs.map +1 -0
  18. package/lib/cjs/blob/core/BlobTypes.cjs +4 -0
  19. package/lib/cjs/blob/core/BlobTypes.cjs.map +1 -0
  20. package/lib/cjs/blob/core/BlobValue.cjs +72 -0
  21. package/lib/cjs/blob/core/BlobValue.cjs.map +1 -0
  22. package/lib/cjs/blob/core/index.cjs +29 -0
  23. package/lib/cjs/blob/core/index.cjs.map +1 -0
  24. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +272 -0
  25. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +1 -0
  26. package/lib/cjs/blob/gcp/index.cjs +24 -0
  27. package/lib/cjs/blob/gcp/index.cjs.map +1 -0
  28. package/lib/cjs/blob/index.cjs +25 -0
  29. package/lib/cjs/blob/index.cjs.map +1 -0
  30. package/lib/cjs/blob/ipfs/IpfsBlobStoreService.cjs +182 -0
  31. package/lib/cjs/blob/ipfs/IpfsBlobStoreService.cjs.map +1 -0
  32. package/lib/cjs/blob/ipfs/IpfsKeyIndex.cjs +27 -0
  33. package/lib/cjs/blob/ipfs/IpfsKeyIndex.cjs.map +1 -0
  34. package/lib/cjs/blob/ipfs/LocalJsonIpfsKeyIndex.cjs +35 -0
  35. package/lib/cjs/blob/ipfs/LocalJsonIpfsKeyIndex.cjs.map +1 -0
  36. package/lib/cjs/blob/ipfs/MemoryIpfsKeyIndex.cjs +45 -0
  37. package/lib/cjs/blob/ipfs/MemoryIpfsKeyIndex.cjs.map +1 -0
  38. package/lib/cjs/blob/ipfs/PostgresIpfsKeyIndex.cjs +35 -0
  39. package/lib/cjs/blob/ipfs/PostgresIpfsKeyIndex.cjs.map +1 -0
  40. package/lib/cjs/blob/ipfs/index.cjs +28 -0
  41. package/lib/cjs/blob/ipfs/index.cjs.map +1 -0
  42. package/lib/cjs/blob/local/LocalBlobStoreService.cjs +288 -0
  43. package/lib/cjs/blob/local/LocalBlobStoreService.cjs.map +1 -0
  44. package/lib/cjs/blob/local/index.cjs +24 -0
  45. package/lib/cjs/blob/local/index.cjs.map +1 -0
  46. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs +146 -0
  47. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs.map +1 -0
  48. package/lib/cjs/blob/memory/index.cjs +24 -0
  49. package/lib/cjs/blob/memory/index.cjs.map +1 -0
  50. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs +14 -0
  51. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs.map +1 -0
  52. package/lib/cjs/blob/s3/R2BlobStoreService.cjs +14 -0
  53. package/lib/cjs/blob/s3/R2BlobStoreService.cjs.map +1 -0
  54. package/lib/cjs/blob/s3/S3BlobStoreService.cjs +322 -0
  55. package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +1 -0
  56. package/lib/cjs/blob/s3/index.cjs +26 -0
  57. package/lib/cjs/blob/s3/index.cjs.map +1 -0
  58. package/lib/cjs/docker/DockerComposeService.cjs +2 -2
  59. package/lib/cjs/docker/DockerComposeService.cjs.map +1 -1
  60. package/lib/cjs/index.cjs +3 -3
  61. package/lib/esm/blob/azure/AzureBlobStoreService.js +288 -0
  62. package/lib/esm/blob/azure/AzureBlobStoreService.js.map +1 -0
  63. package/lib/esm/blob/azure/index.js +7 -0
  64. package/lib/esm/blob/azure/index.js.map +1 -0
  65. package/lib/esm/blob/core/BlobErrors.js +61 -0
  66. package/lib/esm/blob/core/BlobErrors.js.map +1 -0
  67. package/lib/esm/blob/core/BlobKey.js +32 -0
  68. package/lib/esm/blob/core/BlobKey.js.map +1 -0
  69. package/lib/esm/blob/core/BlobStoreFactory.js +52 -0
  70. package/lib/esm/blob/core/BlobStoreFactory.js.map +1 -0
  71. package/lib/esm/blob/core/BlobStoreService.js +37 -0
  72. package/lib/esm/blob/core/BlobStoreService.js.map +1 -0
  73. package/lib/esm/blob/core/BlobTypes.js +2 -0
  74. package/lib/esm/blob/core/BlobTypes.js.map +1 -0
  75. package/lib/esm/blob/core/BlobValue.js +66 -0
  76. package/lib/esm/blob/core/BlobValue.js.map +1 -0
  77. package/lib/esm/blob/core/index.js +12 -0
  78. package/lib/esm/blob/core/index.js.map +1 -0
  79. package/lib/esm/blob/gcp/GcsBlobStoreService.js +267 -0
  80. package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +1 -0
  81. package/lib/esm/blob/gcp/index.js +7 -0
  82. package/lib/esm/blob/gcp/index.js.map +1 -0
  83. package/lib/esm/blob/index.js +8 -0
  84. package/lib/esm/blob/index.js.map +1 -0
  85. package/lib/esm/blob/ipfs/IpfsBlobStoreService.js +177 -0
  86. package/lib/esm/blob/ipfs/IpfsBlobStoreService.js.map +1 -0
  87. package/lib/esm/blob/ipfs/IpfsKeyIndex.js +23 -0
  88. package/lib/esm/blob/ipfs/IpfsKeyIndex.js.map +1 -0
  89. package/lib/esm/blob/ipfs/LocalJsonIpfsKeyIndex.js +30 -0
  90. package/lib/esm/blob/ipfs/LocalJsonIpfsKeyIndex.js.map +1 -0
  91. package/lib/esm/blob/ipfs/MemoryIpfsKeyIndex.js +40 -0
  92. package/lib/esm/blob/ipfs/MemoryIpfsKeyIndex.js.map +1 -0
  93. package/lib/esm/blob/ipfs/PostgresIpfsKeyIndex.js +30 -0
  94. package/lib/esm/blob/ipfs/PostgresIpfsKeyIndex.js.map +1 -0
  95. package/lib/esm/blob/ipfs/index.js +11 -0
  96. package/lib/esm/blob/ipfs/index.js.map +1 -0
  97. package/lib/esm/blob/local/LocalBlobStoreService.js +283 -0
  98. package/lib/esm/blob/local/LocalBlobStoreService.js.map +1 -0
  99. package/lib/esm/blob/local/index.js +7 -0
  100. package/lib/esm/blob/local/index.js.map +1 -0
  101. package/lib/esm/blob/memory/MemoryBlobStoreService.js +141 -0
  102. package/lib/esm/blob/memory/MemoryBlobStoreService.js.map +1 -0
  103. package/lib/esm/blob/memory/index.js +7 -0
  104. package/lib/esm/blob/memory/index.js.map +1 -0
  105. package/lib/esm/blob/s3/MinioBlobStoreService.js +9 -0
  106. package/lib/esm/blob/s3/MinioBlobStoreService.js.map +1 -0
  107. package/lib/esm/blob/s3/R2BlobStoreService.js +9 -0
  108. package/lib/esm/blob/s3/R2BlobStoreService.js.map +1 -0
  109. package/lib/esm/blob/s3/S3BlobStoreService.js +317 -0
  110. package/lib/esm/blob/s3/S3BlobStoreService.js.map +1 -0
  111. package/lib/esm/blob/s3/index.js +9 -0
  112. package/lib/esm/blob/s3/index.js.map +1 -0
  113. package/lib/esm/docker/DockerComposeService.js +2 -2
  114. package/lib/esm/docker/DockerComposeService.js.map +1 -1
  115. package/lib/esm/index.js +3 -3
  116. package/lib/types/blob/azure/AzureBlobStoreService.d.cts +25 -0
  117. package/lib/types/blob/azure/AzureBlobStoreService.d.mts +25 -0
  118. package/lib/types/blob/azure/index.d.cts +6 -0
  119. package/lib/types/blob/azure/index.d.mts +6 -0
  120. package/lib/types/blob/core/BlobErrors.d.cts +14 -0
  121. package/lib/types/blob/core/BlobErrors.d.mts +14 -0
  122. package/lib/types/blob/core/BlobKey.d.cts +9 -0
  123. package/lib/types/blob/core/BlobKey.d.mts +9 -0
  124. package/lib/types/blob/core/BlobStoreFactory.d.cts +5 -0
  125. package/lib/types/blob/core/BlobStoreFactory.d.mts +5 -0
  126. package/lib/types/blob/core/BlobStoreService.d.cts +28 -0
  127. package/lib/types/blob/core/BlobStoreService.d.mts +28 -0
  128. package/lib/types/blob/core/BlobTypes.d.cts +122 -0
  129. package/lib/types/blob/core/BlobTypes.d.mts +122 -0
  130. package/lib/types/blob/core/BlobValue.d.cts +13 -0
  131. package/lib/types/blob/core/BlobValue.d.mts +13 -0
  132. package/lib/types/blob/core/index.d.cts +11 -0
  133. package/lib/types/blob/core/index.d.mts +11 -0
  134. package/lib/types/blob/gcp/GcsBlobStoreService.d.cts +25 -0
  135. package/lib/types/blob/gcp/GcsBlobStoreService.d.mts +25 -0
  136. package/lib/types/blob/gcp/index.d.cts +6 -0
  137. package/lib/types/blob/gcp/index.d.mts +6 -0
  138. package/lib/types/blob/index.d.cts +7 -0
  139. package/lib/types/blob/index.d.mts +7 -0
  140. package/lib/types/blob/ipfs/IpfsBlobStoreService.d.cts +26 -0
  141. package/lib/types/blob/ipfs/IpfsBlobStoreService.d.mts +26 -0
  142. package/lib/types/blob/ipfs/IpfsKeyIndex.d.cts +9 -0
  143. package/lib/types/blob/ipfs/IpfsKeyIndex.d.mts +9 -0
  144. package/lib/types/blob/ipfs/LocalJsonIpfsKeyIndex.d.cts +11 -0
  145. package/lib/types/blob/ipfs/LocalJsonIpfsKeyIndex.d.mts +11 -0
  146. package/lib/types/blob/ipfs/MemoryIpfsKeyIndex.d.cts +15 -0
  147. package/lib/types/blob/ipfs/MemoryIpfsKeyIndex.d.mts +15 -0
  148. package/lib/types/blob/ipfs/PostgresIpfsKeyIndex.d.cts +11 -0
  149. package/lib/types/blob/ipfs/PostgresIpfsKeyIndex.d.mts +11 -0
  150. package/lib/types/blob/ipfs/index.d.cts +10 -0
  151. package/lib/types/blob/ipfs/index.d.mts +10 -0
  152. package/lib/types/blob/local/LocalBlobStoreService.d.cts +30 -0
  153. package/lib/types/blob/local/LocalBlobStoreService.d.mts +30 -0
  154. package/lib/types/blob/local/index.d.cts +6 -0
  155. package/lib/types/blob/local/index.d.mts +6 -0
  156. package/lib/types/blob/memory/MemoryBlobStoreService.d.cts +28 -0
  157. package/lib/types/blob/memory/MemoryBlobStoreService.d.mts +28 -0
  158. package/lib/types/blob/memory/index.d.cts +6 -0
  159. package/lib/types/blob/memory/index.d.mts +6 -0
  160. package/lib/types/blob/s3/MinioBlobStoreService.d.cts +8 -0
  161. package/lib/types/blob/s3/MinioBlobStoreService.d.mts +8 -0
  162. package/lib/types/blob/s3/R2BlobStoreService.d.cts +8 -0
  163. package/lib/types/blob/s3/R2BlobStoreService.d.mts +8 -0
  164. package/lib/types/blob/s3/S3BlobStoreService.d.cts +25 -0
  165. package/lib/types/blob/s3/S3BlobStoreService.d.mts +25 -0
  166. package/lib/types/blob/s3/index.d.cts +8 -0
  167. package/lib/types/blob/s3/index.d.mts +8 -0
  168. package/lib/types/docker/DockerComposeService.d.cts +6 -0
  169. package/lib/types/docker/DockerComposeService.d.mts +6 -0
  170. package/lib/types/index.d.cts +2 -2
  171. package/lib/types/index.d.mts +2 -2
  172. package/package.json +88 -6
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @module integrations/blob/ipfs
3
+ * @summary IPFS blob store exports.
4
+ * @description Re-exports the IPFS blob store service and key-index abstraction.
5
+ */
6
+ export * from "./IpfsBlobStoreService.js";
7
+ export * from "./IpfsKeyIndex.js";
8
+ export * from "./MemoryIpfsKeyIndex.js";
9
+ export * from "./PostgresIpfsKeyIndex.js";
10
+ export * from "./LocalJsonIpfsKeyIndex.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/blob/ipfs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,0CAAuC;AACvC,kCAA+B;AAC/B,wCAAqC;AACrC,0CAAuC;AACvC,2CAAwC"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * @module integrations/blob/local/service
3
+ * @summary Local filesystem blob store service.
4
+ * @description Filesystem-backed blob store wrapping node:fs with atomic writes and path-traversal protection.
5
+ */
6
+ import { ForbiddenError, UnsupportedError } from "@decaf-ts/core";
7
+ import { ConflictError, InternalError, NotFoundError, ValidationError, } from "@decaf-ts/db-decorators";
8
+ import { getCrypto } from "@decaf-ts/crypto/common";
9
+ import { createReadStream, createWriteStream, promises as fs, } from "fs";
10
+ import { dirname, join, relative, resolve, sep } from "path";
11
+ import { BlobStoreService } from "./../core/BlobStoreService.js";
12
+ export class LocalBlobStoreService extends BlobStoreService {
13
+ async initialize(...args) {
14
+ const config = this.getConfigFromArgs(...args);
15
+ if (!config.rootPath) {
16
+ throw new InternalError("LocalBlobStoreService requires a rootPath");
17
+ }
18
+ await fs.mkdir(config.rootPath, { recursive: true });
19
+ this._config = config;
20
+ this._client = { root: resolve(config.rootPath) };
21
+ return { config, client: this._client };
22
+ }
23
+ async put(key, value, options = {}, ...args) {
24
+ const { log } = (await this.logCtx(args, "put", true)).for(this.put);
25
+ log.verbose(`Putting blob ${key}`);
26
+ const targetPath = this.safePath(key);
27
+ if (options.ifNotExists) {
28
+ try {
29
+ await fs.stat(targetPath);
30
+ throw new ConflictError(`Blob already exists: ${key}`);
31
+ }
32
+ catch (e) {
33
+ if (e.code !== "ENOENT")
34
+ throw e;
35
+ }
36
+ }
37
+ await fs.mkdir(dirname(targetPath), { recursive: true });
38
+ const buffer = await collectToBufferLocal(value);
39
+ const crypto = (await getCrypto());
40
+ const sha256 = crypto.createHash("sha256").update(buffer).digest("hex");
41
+ if (options.expectedSha256 && options.expectedSha256 !== sha256) {
42
+ throw new ValidationError(`Checksum mismatch for ${key}`);
43
+ }
44
+ await this.atomicWrite(targetPath, buffer);
45
+ const metadata = {
46
+ contentType: options.contentType,
47
+ contentLength: buffer.length,
48
+ sha256,
49
+ custom: options.metadata,
50
+ };
51
+ return {
52
+ key,
53
+ uri: this.uri(key, "file"),
54
+ provider: this.provider,
55
+ sourceId: this.sourceId,
56
+ metadata,
57
+ };
58
+ }
59
+ async get(key, options = {}, ...args) {
60
+ const { log } = (await this.logCtx(args, "get", true)).for(this.get);
61
+ log.verbose(`Getting blob ${key}`);
62
+ const targetPath = this.safePath(key);
63
+ const stat = await this.safeStat(targetPath);
64
+ if (!stat) {
65
+ throw new NotFoundError(`Blob not found: ${key}`);
66
+ }
67
+ const stream = createReadStream(targetPath, {
68
+ start: options.range?.start,
69
+ end: options.range?.end,
70
+ });
71
+ const metadata = {
72
+ contentLength: stat.size,
73
+ };
74
+ return {
75
+ key,
76
+ value: streamToAsyncIterable(stream),
77
+ uri: this.uri(key, "file"),
78
+ provider: this.provider,
79
+ sourceId: this.sourceId,
80
+ metadata,
81
+ };
82
+ }
83
+ async has(key, ...args) {
84
+ const { log } = (await this.logCtx(args, "has", true)).for(this.has);
85
+ log.verbose(`Checking blob ${key}`);
86
+ const targetPath = this.safePath(key);
87
+ return Boolean(await this.safeStat(targetPath));
88
+ }
89
+ async stat(key, ...args) {
90
+ const { log } = (await this.logCtx(args, "stat", true)).for(this.stat);
91
+ log.verbose(`Statting blob ${key}`);
92
+ const targetPath = this.safePath(key);
93
+ const stat = await this.safeStat(targetPath);
94
+ if (!stat) {
95
+ throw new NotFoundError(`Blob not found: ${key}`);
96
+ }
97
+ return { contentLength: stat.size };
98
+ }
99
+ async delete(key, ...args) {
100
+ const { log } = (await this.logCtx(args, "delete", true)).for(this.delete);
101
+ log.verbose(`Deleting blob ${key}`);
102
+ const targetPath = this.safePath(key);
103
+ try {
104
+ await fs.unlink(targetPath);
105
+ }
106
+ catch (e) {
107
+ if (e.code !== "ENOENT")
108
+ throw e;
109
+ }
110
+ }
111
+ async copy(fromKey, toKey, options = {}, ...args) {
112
+ const { log } = (await this.logCtx(args, "copy", true)).for(this.copy);
113
+ log.verbose(`Copying blob ${fromKey} to ${toKey}`);
114
+ const fromPath = this.safePath(fromKey);
115
+ const fromStat = await this.safeStat(fromPath);
116
+ if (!fromStat) {
117
+ throw new NotFoundError(`Blob not found: ${fromKey}`);
118
+ }
119
+ const buffer = await fs.readFile(fromPath);
120
+ return this.put(toKey, buffer, options);
121
+ }
122
+ async list(options = {}, ...args) {
123
+ const { log } = (await this.logCtx(args, "list", true)).for(this.list);
124
+ log.verbose("Listing blobs");
125
+ const prefix = options.prefix ? this.physicalKey(options.prefix) : "";
126
+ const root = this.client.root;
127
+ const baseDir = prefix ? join(root, prefix) : root;
128
+ const allFiles = [];
129
+ await walkDir(baseDir, allFiles);
130
+ const keys = allFiles
131
+ .map((f) => {
132
+ const rel = relative(root, f).split(sep).join("/");
133
+ return prefix ? rel : rel;
134
+ })
135
+ .filter((k) => (prefix ? k.startsWith(prefix) : true))
136
+ .sort();
137
+ const limit = options.limit ?? 1000;
138
+ const startIndex = options.cursor ? Number(options.cursor) : 0;
139
+ const slice = keys.slice(startIndex, startIndex + limit);
140
+ const nextCursor = startIndex + limit < keys.length
141
+ ? String(startIndex + limit)
142
+ : undefined;
143
+ return {
144
+ items: slice.map((k) => ({ key: k })),
145
+ cursor: nextCursor,
146
+ };
147
+ }
148
+ async url(key, options = {}, ...args) {
149
+ const { log } = (await this.logCtx(args, "url", true)).for(this.url);
150
+ log.verbose(`Building url for blob ${key}`);
151
+ if (options.operation && options.operation !== "get") {
152
+ throw new UnsupportedError("Local blob store does not support PUT urls");
153
+ }
154
+ return {
155
+ url: this.uri(key, "file"),
156
+ method: "GET",
157
+ expiresAt: new Date(Date.now() + (options.expiresInSeconds ?? 300) * 1000),
158
+ };
159
+ }
160
+ parseError(error) {
161
+ const err = error;
162
+ if (err instanceof NotFoundError ||
163
+ err instanceof ConflictError ||
164
+ err instanceof ValidationError ||
165
+ err instanceof InternalError) {
166
+ return err;
167
+ }
168
+ const message = err.message || "Unknown error";
169
+ const lower = message.toLowerCase();
170
+ const code = err.code;
171
+ if (code === "ENOENT" || lower.includes("not found")) {
172
+ return new NotFoundError(err);
173
+ }
174
+ if (code === "EEXIST" || lower.includes("already exists")) {
175
+ return new ConflictError(err);
176
+ }
177
+ if (code === "EACCES" || code === "EPERM" || lower.includes("permission")) {
178
+ return new ForbiddenError(err);
179
+ }
180
+ if (code === "ENAMETOOLONG" || lower.includes("invalid")) {
181
+ return new ValidationError(err);
182
+ }
183
+ return new InternalError(err);
184
+ }
185
+ safePath(key) {
186
+ const physical = this.physicalKey(key);
187
+ const root = this.client.root;
188
+ const target = resolve(root, physical);
189
+ const rel = relative(root, target);
190
+ if (rel.startsWith("..") || rel === "" || rel === "." || rel.startsWith(`..${sep}`)) {
191
+ throw new ValidationError(`Blob key escapes root path: ${key}`);
192
+ }
193
+ return target;
194
+ }
195
+ async safeStat(path) {
196
+ try {
197
+ const stat = await fs.stat(path);
198
+ if (stat.isFile())
199
+ return { size: stat.size };
200
+ return undefined;
201
+ }
202
+ catch (e) {
203
+ if (e.code === "ENOENT")
204
+ return undefined;
205
+ throw e;
206
+ }
207
+ }
208
+ async atomicWrite(targetPath, buffer) {
209
+ const crypto = (await getCrypto());
210
+ const tmpPath = `${targetPath}.${crypto.randomBytes(6).toString("hex")}.tmp`;
211
+ const stream = createWriteStream(tmpPath);
212
+ await new Promise((resolve, reject) => {
213
+ stream.on("error", reject);
214
+ stream.on("finish", () => resolve());
215
+ stream.end(buffer);
216
+ });
217
+ try {
218
+ await fs.rename(tmpPath, targetPath);
219
+ }
220
+ catch (e) {
221
+ try {
222
+ await fs.unlink(tmpPath);
223
+ }
224
+ catch {
225
+ /* ignore */
226
+ }
227
+ throw e;
228
+ }
229
+ }
230
+ }
231
+ async function collectToBufferLocal(value) {
232
+ if (value instanceof Uint8Array)
233
+ return Buffer.from(value);
234
+ if (value instanceof Buffer)
235
+ return value;
236
+ if (typeof value?.[Symbol.asyncIterator] === "function") {
237
+ const chunks = [];
238
+ for await (const chunk of value) {
239
+ chunks.push(Buffer.from(chunk));
240
+ }
241
+ return Buffer.concat(chunks);
242
+ }
243
+ if (typeof value?.getReader === "function") {
244
+ const reader = value.getReader();
245
+ const chunks = [];
246
+ let result = await reader.read();
247
+ while (!result.done) {
248
+ chunks.push(Buffer.from(result.value));
249
+ result = await reader.read();
250
+ }
251
+ return Buffer.concat(chunks);
252
+ }
253
+ throw new ValidationError(`Unsupported blob value type: ${typeof value}`);
254
+ }
255
+ async function* streamToAsyncIterable(stream) {
256
+ for await (const chunk of stream) {
257
+ yield chunk;
258
+ }
259
+ }
260
+ async function walkDir(dir, acc) {
261
+ let entries;
262
+ try {
263
+ entries = await fs.readdir(dir);
264
+ }
265
+ catch (e) {
266
+ if (e.code === "ENOENT")
267
+ return;
268
+ throw e;
269
+ }
270
+ for (const entry of entries) {
271
+ if (entry.endsWith(".tmp"))
272
+ continue;
273
+ const full = join(dir, entry);
274
+ const stat = await fs.stat(full);
275
+ if (stat.isDirectory()) {
276
+ await walkDir(full, acc);
277
+ }
278
+ else {
279
+ acc.push(full);
280
+ }
281
+ }
282
+ }
283
+ //# sourceMappingURL=LocalBlobStoreService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalBlobStoreService.js","sourceRoot":"","sources":["../../../../src/blob/local/LocalBlobStoreService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAuB,cAAc,EAA2B,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChH,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,IAAI,EAAE,GAEf,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,sCAAiC;AAoB5D,MAAM,OAAO,qBAAsB,SAAQ,gBAG1C;IACU,KAAK,CAAC,UAAU,CACvB,GAAG,IAAyB;QAK5B,MAAM,MAAM,GACV,IAAI,CAAC,iBAAiB,CAA8B,GAAG,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,aAAa,CACrB,2CAA2C,CAC5C,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAY,EACZ,KAAgB,EAChB,UAA0B,EAAE,EAC5B,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,GAAG,CAAC,OAAO,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC1B,MAAM,IAAI,aAAa,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzD,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,EAAE,CAAQ,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAExE,IAAI,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YAChE,MAAM,IAAI,eAAe,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAiB;YAC7B,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,aAAa,EAAE,MAAM,CAAC,MAAM;YAC5B,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,QAAQ;SACzB,CAAC;QAEF,OAAO;YACL,GAAG;YACH,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAY,EACZ,UAA0B,EAAE,EAC5B,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,GAAG,CAAC,OAAO,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QAEnC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,aAAa,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,MAAM,GAAe,gBAAgB,CAAC,UAAU,EAAE;YACtD,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK;YAC3B,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG;SACxB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAiB;YAC7B,aAAa,EAAE,IAAI,CAAC,IAAI;SACzB,CAAC;QAEF,OAAO;YACL,GAAG;YACH,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC;YACpC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAY,EACZ,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,GAAG,CAAC,OAAO,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtC,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,IAAI,CACR,GAAY,EACZ,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,GAAG,CAAC,OAAO,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,aAAa,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,GAAY,EACZ,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3E,GAAG,CAAC,OAAO,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CACR,OAAgB,EAChB,KAAc,EACd,UAA0B,EAAE,EAC5B,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,GAAG,CAAC,OAAO,CAAC,gBAAgB,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,aAAa,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAI,CACR,UAA2B,EAAE,EAC7B,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEjC,MAAM,IAAI,GAAG,QAAQ;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5B,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACrD,IAAI,EAAE,CAAC;QAEV,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;QACzD,MAAM,UAAU,GACd,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM;YAC9B,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAC;QAEhB,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAY,EACZ,UAA0B,EAAE,EAC5B,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,GAAG,CAAC,OAAO,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YACrD,MAAM,IAAI,gBAAgB,CAAC,4CAA4C,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;YAC1B,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,IAAI,IAAI,CACjB,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,GAAG,CAAC,GAAG,IAAI,CACtD;SACF,CAAC;IACJ,CAAC;IAES,UAAU,CAAC,KAAc;QACjC,MAAM,GAAG,GAAG,KAAc,CAAC;QAC3B,IACE,GAAG,YAAY,aAAa;YAC5B,GAAG,YAAY,aAAa;YAC5B,GAAG,YAAY,eAAe;YAC9B,GAAG,YAAY,aAAa,EAC5B,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,eAAe,CAAC;QAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1D,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1E,OAAO,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAEO,QAAQ,CAAC,GAAY;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,eAAe,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,QAAQ,CACpB,IAAY;QAEZ,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9C,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACrE,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,UAAkB,EAAE,MAAc;QAC1D,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,EAAE,CAAQ,CAAC;QAC1C,MAAM,OAAO,GAAG,GAAG,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7E,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3B,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;CACF;AAED,KAAK,UAAU,oBAAoB,CAAC,KAAgB;IAClD,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,KAAK,YAAY,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,OAAQ,KAAa,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE,CAAC;QACjE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAkC,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAQ,KAAa,EAAE,SAAS,KAAK,UAAU,EAAE,CAAC;QACpD,MAAM,MAAM,GAAI,KAAwB,CAAC,SAAS,EAAE,CAAC;QACrD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACjC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAmB,CAAC,CAAC,CAAC;YACrD,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,IAAI,eAAe,CAAC,gCAAgC,OAAO,KAAK,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,qBAAqB,CACnC,MAAkB;IAElB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACjC,MAAM,KAAmB,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,GAAa;IAC/C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAK,CAA2B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QAC3D,MAAM,CAAC,CAAC;IACV,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,MAAM,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @module integrations/blob/local
3
+ * @summary Local filesystem blob store exports.
4
+ * @description Re-exports the local filesystem blob store service.
5
+ */
6
+ export * from "./LocalBlobStoreService.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/blob/local/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,2CAAwC"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * @module integrations/blob/memory/service
3
+ * @summary In-memory blob store service.
4
+ * @description Process-local Map-backed blob store for tests and examples. No SDK dependency.
5
+ */
6
+ import { UnsupportedError } from "@decaf-ts/core";
7
+ import { ConflictError, InternalError, NotFoundError, ValidationError, } from "@decaf-ts/db-decorators";
8
+ import { collectToBuffer, computeSha256, toAsyncIterable } from "./../core/BlobValue.js";
9
+ import { BlobStoreService } from "./../core/BlobStoreService.js";
10
+ export class MemoryBlobStoreService extends BlobStoreService {
11
+ async initialize(...args) {
12
+ const config = this.getConfigFromArgs(...args);
13
+ this._config = config;
14
+ this._client = new Map();
15
+ return { config, client: this._client };
16
+ }
17
+ async put(key, value, options = {}, ...args) {
18
+ const { log } = (await this.logCtx(args, "put", true)).for(this.put);
19
+ log.verbose(`Putting blob ${key}`);
20
+ const physicalKey = this.physicalKey(key);
21
+ if (options.ifNotExists && this.client.has(physicalKey)) {
22
+ throw new ConflictError(`Blob already exists: ${key}`);
23
+ }
24
+ const buffer = await collectToBuffer(value);
25
+ const sha256 = await computeSha256(buffer);
26
+ if (options.expectedSha256 && options.expectedSha256 !== sha256) {
27
+ throw new ValidationError(`Checksum mismatch for ${key}`);
28
+ }
29
+ const metadata = {
30
+ contentType: options.contentType,
31
+ contentLength: buffer.length,
32
+ sha256,
33
+ custom: options.metadata,
34
+ };
35
+ this.client.set(physicalKey, { value: buffer, metadata });
36
+ return {
37
+ key,
38
+ uri: this.uri(key, "memory"),
39
+ provider: this.provider,
40
+ sourceId: this.sourceId,
41
+ metadata,
42
+ };
43
+ }
44
+ async get(key, options = {}, ...args) {
45
+ const { log } = (await this.logCtx(args, "get", true)).for(this.get);
46
+ log.verbose(`Getting blob ${key}`);
47
+ const physicalKey = this.physicalKey(key);
48
+ const entry = this.client.get(physicalKey);
49
+ if (!entry) {
50
+ throw new NotFoundError(`Blob not found: ${key}`);
51
+ }
52
+ let value = entry.value;
53
+ if (options.range) {
54
+ const start = options.range.start;
55
+ const end = options.range.end ?? entry.value.length;
56
+ value = entry.value.subarray(start, end);
57
+ }
58
+ return {
59
+ key,
60
+ value: toAsyncIterable(value),
61
+ uri: this.uri(key, "memory"),
62
+ provider: this.provider,
63
+ sourceId: this.sourceId,
64
+ metadata: entry.metadata,
65
+ };
66
+ }
67
+ async has(key, ...args) {
68
+ const { log } = (await this.logCtx(args, "has", true)).for(this.has);
69
+ log.verbose(`Checking blob ${key}`);
70
+ return this.client.has(this.physicalKey(key));
71
+ }
72
+ async stat(key, ...args) {
73
+ const { log } = (await this.logCtx(args, "stat", true)).for(this.stat);
74
+ log.verbose(`Statting blob ${key}`);
75
+ const entry = this.client.get(this.physicalKey(key));
76
+ if (!entry) {
77
+ throw new NotFoundError(`Blob not found: ${key}`);
78
+ }
79
+ return entry.metadata;
80
+ }
81
+ async delete(key, ...args) {
82
+ const { log } = (await this.logCtx(args, "delete", true)).for(this.delete);
83
+ log.verbose(`Deleting blob ${key}`);
84
+ this.client.delete(this.physicalKey(key));
85
+ }
86
+ async copy(fromKey, toKey, options = {}, ...args) {
87
+ const { log } = (await this.logCtx(args, "copy", true)).for(this.copy);
88
+ log.verbose(`Copying blob ${fromKey} to ${toKey}`);
89
+ const source = this.client.get(this.physicalKey(fromKey));
90
+ if (!source) {
91
+ throw new NotFoundError(`Blob not found: ${fromKey}`);
92
+ }
93
+ return this.put(toKey, source.value, {
94
+ ...options,
95
+ contentType: options.contentType ?? source.metadata.contentType,
96
+ });
97
+ }
98
+ async list(options = {}, ...args) {
99
+ const { log } = (await this.logCtx(args, "list", true)).for(this.list);
100
+ log.verbose("Listing blobs");
101
+ const prefix = options.prefix ? this.physicalKey(options.prefix) : "";
102
+ const allKeys = Array.from(this.client.keys())
103
+ .filter((k) => (prefix ? k.startsWith(prefix) : true))
104
+ .sort();
105
+ const limit = options.limit ?? 1000;
106
+ const startIndex = options.cursor ? Number(options.cursor) : 0;
107
+ const slice = allKeys.slice(startIndex, startIndex + limit);
108
+ const nextCursor = startIndex + limit < allKeys.length
109
+ ? String(startIndex + limit)
110
+ : undefined;
111
+ return {
112
+ items: slice.map((k) => ({
113
+ key: k,
114
+ metadata: this.client.get(k)?.metadata,
115
+ })),
116
+ cursor: nextCursor,
117
+ };
118
+ }
119
+ async url(key, options = {}, ...args) {
120
+ const { log } = (await this.logCtx(args, "url", true)).for(this.url);
121
+ log.verbose(`Building url for blob ${key}`);
122
+ if (options.operation && options.operation !== "get") {
123
+ throw new UnsupportedError("Memory blob store does not support PUT urls");
124
+ }
125
+ return {
126
+ url: this.uri(key, "memory"),
127
+ method: "GET",
128
+ expiresAt: new Date(Date.now() + (options.expiresInSeconds ?? 300) * 1000),
129
+ };
130
+ }
131
+ parseError(error) {
132
+ if (error instanceof NotFoundError ||
133
+ error instanceof ConflictError ||
134
+ error instanceof ValidationError ||
135
+ error instanceof InternalError) {
136
+ return error;
137
+ }
138
+ return new InternalError(`Memory blob error: ${error.message}`);
139
+ }
140
+ }
141
+ //# sourceMappingURL=MemoryBlobStoreService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryBlobStoreService.js","sourceRoot":"","sources":["../../../../src/blob/memory/MemoryBlobStoreService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @module integrations/blob/memory
3
+ * @summary In-memory blob store exports.
4
+ * @description Re-exports the in-memory blob store service.
5
+ */
6
+ export * from "./MemoryBlobStoreService.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/blob/memory/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4CAAyC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @module integrations/blob/s3/minio
3
+ * @summary MinIO blob store service.
4
+ * @description S3-compatible blob store for MinIO. Extends S3BlobStoreService.
5
+ */
6
+ import { S3BlobStoreService } from "./S3BlobStoreService.js";
7
+ export class MinioBlobStoreService extends S3BlobStoreService {
8
+ }
9
+ //# sourceMappingURL=MinioBlobStoreService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MinioBlobStoreService.js","sourceRoot":"","sources":["../../../../src/blob/s3/MinioBlobStoreService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,kBAAkB,EAAE,gCAA6B;AAE1D,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;CAAG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @module integrations/blob/s3/r2
3
+ * @summary Cloudflare R2 blob store service.
4
+ * @description S3-compatible blob store for Cloudflare R2. Extends S3BlobStoreService.
5
+ */
6
+ import { S3BlobStoreService } from "./S3BlobStoreService.js";
7
+ export class R2BlobStoreService extends S3BlobStoreService {
8
+ }
9
+ //# sourceMappingURL=R2BlobStoreService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"R2BlobStoreService.js","sourceRoot":"","sources":["../../../../src/blob/s3/R2BlobStoreService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,kBAAkB,EAAE,gCAA6B;AAE1D,MAAM,OAAO,kBAAmB,SAAQ,kBAAkB;CAAG"}