@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,288 @@
1
+ /**
2
+ * @module integrations/blob/azure/service
3
+ * @summary Azure Blob storage service.
4
+ * @description Blob store backed by Azure Blob Storage via @azure/storage-blob.
5
+ */
6
+ import { BlobServiceClient, generateBlobSASQueryParameters, BlobSASPermissions, } from "@azure/storage-blob";
7
+ import { DefaultAzureCredential } from "@azure/identity";
8
+ import { AuthorizationError, ConnectionError, ForbiddenError, UnsupportedError, } from "@decaf-ts/core";
9
+ import { ConflictError, InternalError, NotFoundError, ValidationError, } from "@decaf-ts/db-decorators";
10
+ import { BlobStoreService } from "./../core/BlobStoreService.js";
11
+ import { collectToBuffer, computeSha256, toAsyncIterable } from "./../core/BlobValue.js";
12
+ export class AzureBlobStoreService extends BlobStoreService {
13
+ async initialize(...args) {
14
+ const { log } = (await this.logCtx(args, "initialize", true)).for(this.initialize);
15
+ const config = this.getConfigFromArgs(...args);
16
+ if (!config.container) {
17
+ throw new InternalError("AzureBlobStoreService requires a container");
18
+ }
19
+ if (config.connectionString) {
20
+ this.blobServiceClient =
21
+ BlobServiceClient.fromConnectionString(config.connectionString);
22
+ }
23
+ else {
24
+ const endpoint = config.endpoint || `https://${config.accountName}.blob.core.windows.net`;
25
+ this.blobServiceClient = new BlobServiceClient(endpoint, new DefaultAzureCredential());
26
+ }
27
+ const client = this.blobServiceClient.getContainerClient(config.container);
28
+ this._config = config;
29
+ this._client = client;
30
+ log.verbose(`Initialized Azure Blob store ${config.sourceId}`);
31
+ return { config, client };
32
+ }
33
+ async put(key, value, options = {}, ...args) {
34
+ const { log } = (await this.logCtx(args, "put", true)).for(this.put);
35
+ log.verbose(`Putting blob ${key}`);
36
+ const blobName = this.physicalKey(key);
37
+ if (options.ifNotExists) {
38
+ if (await this.has(key)) {
39
+ throw new ConflictError(`Blob already exists: ${key}`);
40
+ }
41
+ }
42
+ const buffer = await collectToBuffer(value);
43
+ if (options.expectedSha256) {
44
+ const sha256 = await computeSha256(buffer);
45
+ if (options.expectedSha256 !== sha256) {
46
+ throw new ValidationError(`Checksum mismatch for ${key}`);
47
+ }
48
+ }
49
+ try {
50
+ const blockBlobClient = this.client.getBlockBlobClient(blobName);
51
+ const response = await blockBlobClient.uploadData(buffer, {
52
+ blobHTTPHeaders: options.contentType
53
+ ? { blobContentType: options.contentType }
54
+ : undefined,
55
+ metadata: options.metadata,
56
+ });
57
+ const metadata = {
58
+ contentType: options.contentType,
59
+ contentLength: buffer.length,
60
+ etag: response.etag,
61
+ versionId: response.versionId,
62
+ custom: options.metadata,
63
+ };
64
+ return {
65
+ key,
66
+ uri: this.uri(key, "azure-blob", response.versionId ? `version=${response.versionId}` : undefined),
67
+ provider: this.provider,
68
+ sourceId: this.sourceId,
69
+ metadata,
70
+ };
71
+ }
72
+ catch (error) {
73
+ throw this.parseError(error);
74
+ }
75
+ }
76
+ async get(key, options = {}, ...args) {
77
+ const { log } = (await this.logCtx(args, "get", true)).for(this.get);
78
+ log.verbose(`Getting blob ${key}`);
79
+ const blobName = this.physicalKey(key);
80
+ try {
81
+ const blobClient = this.client.getBlobClient(blobName);
82
+ const downloadResponse = await blobClient.download(options.range?.start, options.range
83
+ ? (options.range.end ?? undefined) !== undefined
84
+ ? (options.range.end ?? undefined) - (options.range?.start ?? 0) + 1
85
+ : undefined
86
+ : undefined);
87
+ const metadata = {
88
+ contentType: downloadResponse.contentType,
89
+ contentLength: downloadResponse.contentLength,
90
+ etag: downloadResponse.etag,
91
+ };
92
+ const readable = downloadResponse.readableStreamBody;
93
+ return {
94
+ key,
95
+ value: toAsyncIterable(readable),
96
+ uri: this.uri(key, "azure-blob"),
97
+ provider: this.provider,
98
+ sourceId: this.sourceId,
99
+ metadata,
100
+ };
101
+ }
102
+ catch (error) {
103
+ throw this.parseError(error);
104
+ }
105
+ }
106
+ async has(key, ...args) {
107
+ const { log } = (await this.logCtx(args, "has", true)).for(this.has);
108
+ log.verbose(`Checking blob ${key}`);
109
+ try {
110
+ const blobClient = this.client.getBlobClient(this.physicalKey(key));
111
+ return Boolean(await blobClient.exists());
112
+ }
113
+ catch (error) {
114
+ throw this.parseError(error);
115
+ }
116
+ }
117
+ async stat(key, ...args) {
118
+ const { log } = (await this.logCtx(args, "stat", true)).for(this.stat);
119
+ log.verbose(`Statting blob ${key}`);
120
+ try {
121
+ const blobClient = this.client.getBlobClient(this.physicalKey(key));
122
+ const props = await blobClient.getProperties();
123
+ return {
124
+ contentType: props.contentType,
125
+ contentLength: props.contentLength,
126
+ etag: props.etag,
127
+ custom: props.metadata,
128
+ };
129
+ }
130
+ catch (error) {
131
+ throw this.parseError(error);
132
+ }
133
+ }
134
+ async delete(key, ...args) {
135
+ const { log } = (await this.logCtx(args, "delete", true)).for(this.delete);
136
+ log.verbose(`Deleting blob ${key}`);
137
+ try {
138
+ const blobClient = this.client.getBlobClient(this.physicalKey(key));
139
+ await blobClient.delete();
140
+ }
141
+ catch (error) {
142
+ throw this.parseError(error);
143
+ }
144
+ }
145
+ async copy(fromKey, toKey, options = {}, ...args) {
146
+ const { log } = (await this.logCtx(args, "copy", true)).for(this.copy);
147
+ log.verbose(`Copying blob ${fromKey} to ${toKey}`);
148
+ try {
149
+ const sourceClient = this.client.getBlobClient(this.physicalKey(fromKey));
150
+ const targetClient = this.client.getBlobClient(this.physicalKey(toKey));
151
+ const poller = await targetClient.beginCopyFromURL(sourceClient.url);
152
+ await poller.pollUntilDone();
153
+ const props = await targetClient.getProperties();
154
+ const metadata = {
155
+ contentType: options.contentType ?? props.contentType,
156
+ contentLength: props.contentLength,
157
+ etag: props.etag,
158
+ custom: options.metadata,
159
+ };
160
+ return {
161
+ key: toKey,
162
+ uri: this.uri(toKey, "azure-blob"),
163
+ provider: this.provider,
164
+ sourceId: this.sourceId,
165
+ metadata,
166
+ };
167
+ }
168
+ catch (error) {
169
+ throw this.parseError(error);
170
+ }
171
+ }
172
+ async list(options = {}, ...args) {
173
+ const { log } = (await this.logCtx(args, "list", true)).for(this.list);
174
+ log.verbose("Listing blobs");
175
+ const prefix = this.physicalKey(options.prefix ?? "");
176
+ try {
177
+ const items = [];
178
+ const maxPageSize = options.limit ?? undefined;
179
+ for await (const blob of this.client.listBlobsFlat({
180
+ prefix: prefix || undefined,
181
+ includeMetadata: true,
182
+ })) {
183
+ items.push({
184
+ key: blob.name,
185
+ metadata: {
186
+ contentLength: blob.properties.contentLength,
187
+ etag: blob.properties.etag,
188
+ contentType: blob.properties.contentType,
189
+ custom: blob.metadata,
190
+ },
191
+ });
192
+ if (maxPageSize && items.length >= maxPageSize)
193
+ break;
194
+ }
195
+ return { items };
196
+ }
197
+ catch (error) {
198
+ throw this.parseError(error);
199
+ }
200
+ }
201
+ async url(key, options = {}, ...args) {
202
+ const { log } = (await this.logCtx(args, "url", true)).for(this.url);
203
+ log.verbose(`Building url for blob ${key}`);
204
+ const blobName = this.physicalKey(key);
205
+ const operation = options.operation ?? "get";
206
+ const expiresIn = options.expiresInSeconds ?? 300;
207
+ try {
208
+ const blobClient = this.client.getBlobClient(blobName);
209
+ const credential = this.blobServiceClient.credential;
210
+ let url;
211
+ if (credential && typeof credential.accountName === "string") {
212
+ const sasToken = generateBlobSASQueryParameters({
213
+ containerName: this.config.container,
214
+ blobName,
215
+ permissions: BlobSASPermissions.from({
216
+ read: operation === "get",
217
+ create: operation === "put",
218
+ write: operation === "put",
219
+ }),
220
+ startsOn: new Date(),
221
+ expiresOn: new Date(Date.now() + expiresIn * 1000),
222
+ contentType: options.contentType,
223
+ }, credential).toString();
224
+ url = `${blobClient.url}?${sasToken}`;
225
+ }
226
+ else {
227
+ const token = await blobClient.generateSasUrl({
228
+ permissions: BlobSASPermissions.from({
229
+ read: operation === "get",
230
+ create: operation === "put",
231
+ write: operation === "put",
232
+ }),
233
+ expiresOn: new Date(Date.now() + expiresIn * 1000),
234
+ contentType: options.contentType,
235
+ });
236
+ url = token;
237
+ }
238
+ return {
239
+ url,
240
+ method: operation === "put" ? "PUT" : "GET",
241
+ expiresAt: new Date(Date.now() + expiresIn * 1000),
242
+ headers: options.contentType
243
+ ? { "Content-Type": options.contentType }
244
+ : undefined,
245
+ };
246
+ }
247
+ catch (error) {
248
+ throw this.parseError(error);
249
+ }
250
+ }
251
+ parseError(error) {
252
+ const err = error;
253
+ if (err instanceof NotFoundError ||
254
+ err instanceof ConflictError ||
255
+ err instanceof AuthorizationError ||
256
+ err instanceof ForbiddenError ||
257
+ err instanceof ValidationError ||
258
+ err instanceof ConnectionError ||
259
+ err instanceof UnsupportedError ||
260
+ err instanceof InternalError) {
261
+ return err;
262
+ }
263
+ const message = err.message || "Unknown error";
264
+ const lower = message.toLowerCase();
265
+ const statusCode = err?.statusCode || err?.$metadata?.httpStatusCode;
266
+ const code = err?.code;
267
+ if (lower.includes("blobnotfound") || statusCode === 404 || lower.includes("not found") || code === "BlobNotFound") {
268
+ return new NotFoundError(err);
269
+ }
270
+ if (statusCode === 409 || lower.includes("conflict") || lower.includes("already exists")) {
271
+ return new ConflictError(err);
272
+ }
273
+ if (statusCode === 401 || lower.includes("unauthorized")) {
274
+ return new AuthorizationError(err);
275
+ }
276
+ if (statusCode === 403 || lower.includes("permission") || lower.includes("forbidden")) {
277
+ return new ForbiddenError(err);
278
+ }
279
+ if (statusCode === 429 || lower.includes("rate limit")) {
280
+ return new ConflictError(err);
281
+ }
282
+ if (statusCode === 503 || lower.includes("timeout") || lower.includes("unavailable") || lower.includes("connection")) {
283
+ return new ConnectionError(err);
284
+ }
285
+ return new InternalError(err);
286
+ }
287
+ }
288
+ //# sourceMappingURL=AzureBlobStoreService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AzureBlobStoreService.js","sourceRoot":"","sources":["../../../../src/blob/azure/AzureBlobStoreService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @module integrations/blob/azure
3
+ * @summary Azure Blob storage exports.
4
+ * @description Re-exports the Azure Blob store service.
5
+ */
6
+ export * from "./AzureBlobStoreService.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/blob/azure/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,2CAAwC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * @module integrations/blob/core/errors
3
+ * @summary Blob error translation helpers.
4
+ * @description Re-exports standard DECAF errors used by blob store implementations and provides
5
+ * helper functions for translating provider library errors into the appropriate DECAF error types.
6
+ */
7
+ import { AuthorizationError, ConnectionError, ForbiddenError, UnsupportedError, } from "@decaf-ts/core";
8
+ import { BadRequestError, ConflictError, InternalError, NotFoundError, ValidationError, } from "@decaf-ts/db-decorators";
9
+ export { AuthorizationError, BadRequestError, ConflictError, ConnectionError, ForbiddenError, InternalError, NotFoundError, UnsupportedError, ValidationError, };
10
+ /**
11
+ * Translates a generic error into a DECAF error based on HTTP status code or message keywords.
12
+ * Used as a fallback by provider parseError methods.
13
+ */
14
+ export function translateBlobError(error) {
15
+ if (error instanceof NotFoundError ||
16
+ error instanceof ConflictError ||
17
+ error instanceof AuthorizationError ||
18
+ error instanceof ForbiddenError ||
19
+ error instanceof ValidationError ||
20
+ error instanceof ConnectionError ||
21
+ error instanceof UnsupportedError ||
22
+ error instanceof InternalError) {
23
+ return error;
24
+ }
25
+ const message = error.message || error.name || "Unknown error";
26
+ const lowerMessage = message.toLowerCase();
27
+ const statusCode = error?.statusCode ||
28
+ error?.$metadata?.httpStatusCode ||
29
+ error?.code;
30
+ if (lowerMessage.includes("not found") ||
31
+ statusCode === 404 ||
32
+ lowerMessage.includes("enoent") ||
33
+ lowerMessage.includes("blobnotfound") ||
34
+ statusCode === "ENOENT") {
35
+ return new NotFoundError(error);
36
+ }
37
+ if (lowerMessage.includes("already exists") ||
38
+ lowerMessage.includes("conflict") ||
39
+ statusCode === 409 ||
40
+ statusCode === "EEXIST") {
41
+ return new ConflictError(error);
42
+ }
43
+ if (lowerMessage.includes("unauthorized") || statusCode === 401) {
44
+ return new AuthorizationError(error);
45
+ }
46
+ if (lowerMessage.includes("permission") || statusCode === 403) {
47
+ return new ForbiddenError(error);
48
+ }
49
+ if (lowerMessage.includes("rate limit") ||
50
+ statusCode === 429) {
51
+ return new ConflictError(error);
52
+ }
53
+ if (lowerMessage.includes("connection") ||
54
+ lowerMessage.includes("timeout") ||
55
+ lowerMessage.includes("unavailable") ||
56
+ statusCode === 503) {
57
+ return new ConnectionError(error);
58
+ }
59
+ return new InternalError(error);
60
+ }
61
+ //# sourceMappingURL=BlobErrors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobErrors.js","sourceRoot":"","sources":["../../../../src/blob/core/BlobErrors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,eAAe,EACf,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,GAChB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAY;IAC7C,IACE,KAAK,YAAY,aAAa;QAC9B,KAAK,YAAY,aAAa;QAC9B,KAAK,YAAY,kBAAkB;QACnC,KAAK,YAAY,cAAc;QAC/B,KAAK,YAAY,eAAe;QAChC,KAAK,YAAY,eAAe;QAChC,KAAK,YAAY,gBAAgB;QACjC,KAAK,YAAY,aAAa,EAC9B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,eAAe,CAAC;IAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,UAAU,GACb,KAAa,EAAE,UAAU;QACzB,KAAa,EAAE,SAAS,EAAE,cAAc;QACxC,KAAa,EAAE,IAAI,CAAC;IAEvB,IACE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClC,UAAU,KAAK,GAAG;QAClB,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/B,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrC,UAAU,KAAK,QAAQ,EACvB,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,IACE,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;QACjC,UAAU,KAAK,GAAG;QAClB,UAAU,KAAK,QAAQ,EACvB,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAChE,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAC9D,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,IACE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;QACnC,UAAU,KAAK,GAAG,EAClB,CAAC;QACD,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,IACE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;QACnC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;QAChC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;QACpC,UAAU,KAAK,GAAG,EAClB,CAAC;QACD,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @module integrations/blob/core/key
3
+ * @summary Blob key helpers.
4
+ * @description Validation, cleaning, and prefixing helpers for blob keys.
5
+ */
6
+ import { ValidationError } from "@decaf-ts/db-decorators";
7
+ /**
8
+ * Strips leading slashes from a blob key and rejects unsafe path segments.
9
+ */
10
+ export function cleanKey(key) {
11
+ if (typeof key !== "string") {
12
+ throw new ValidationError(`Blob key must be a string`);
13
+ }
14
+ const clean = key.replace(/^\/+/, "");
15
+ if (clean === "" ||
16
+ clean === "." ||
17
+ clean === ".." ||
18
+ clean.includes("../") ||
19
+ clean.startsWith("../")) {
20
+ throw new ValidationError(`Invalid blob key: ${key}`);
21
+ }
22
+ return clean;
23
+ }
24
+ /**
25
+ * Applies the configured prefix (trimmed of leading/trailing slashes) to a cleaned key.
26
+ */
27
+ export function physicalKey(key, prefix) {
28
+ const clean = cleanKey(key);
29
+ const trimmedPrefix = prefix?.replace(/^\/+|\/+$/g, "");
30
+ return trimmedPrefix ? `${trimmedPrefix}/${clean}` : clean;
31
+ }
32
+ //# sourceMappingURL=BlobKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobKey.js","sourceRoot":"","sources":["../../../../src/blob/core/BlobKey.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,eAAe,CAAC,2BAA2B,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEtC,IACE,KAAK,KAAK,EAAE;QACZ,KAAK,KAAK,GAAG;QACb,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EACvB,CAAC;QACD,MAAM,IAAI,eAAe,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,MAAe;IACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5B,MAAM,aAAa,GAAG,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @module integrations/blob/core/factory
3
+ * @summary Blob store factory.
4
+ * @description Creates uninitialized blob store services selected by provider.
5
+ */
6
+ import { ValidationError } from "@decaf-ts/db-decorators";
7
+ import { S3BlobStoreService } from "./../s3/S3BlobStoreService.js";
8
+ import { MinioBlobStoreService } from "./../s3/MinioBlobStoreService.js";
9
+ import { R2BlobStoreService } from "./../s3/R2BlobStoreService.js";
10
+ import { AzureBlobStoreService } from "./../azure/AzureBlobStoreService.js";
11
+ import { GcsBlobStoreService } from "./../gcp/GcsBlobStoreService.js";
12
+ import { LocalBlobStoreService } from "./../local/LocalBlobStoreService.js";
13
+ import { IpfsBlobStoreService } from "./../ipfs/IpfsBlobStoreService.js";
14
+ import { MemoryBlobStoreService } from "./../memory/MemoryBlobStoreService.js";
15
+ export class BlobStoreFactory {
16
+ create(config) {
17
+ let service;
18
+ switch (config.provider) {
19
+ case "s3":
20
+ service = new S3BlobStoreService();
21
+ break;
22
+ case "minio":
23
+ service = new MinioBlobStoreService();
24
+ break;
25
+ case "r2":
26
+ service = new R2BlobStoreService();
27
+ break;
28
+ case "azure-blob":
29
+ service = new AzureBlobStoreService();
30
+ break;
31
+ case "gcs":
32
+ service = new GcsBlobStoreService();
33
+ break;
34
+ case "local":
35
+ service = new LocalBlobStoreService();
36
+ break;
37
+ case "ipfs":
38
+ service = new IpfsBlobStoreService();
39
+ break;
40
+ case "memory":
41
+ service = new MemoryBlobStoreService();
42
+ break;
43
+ default:
44
+ return assertNever(config);
45
+ }
46
+ return service;
47
+ }
48
+ }
49
+ function assertNever(value) {
50
+ throw new ValidationError(`Unsupported blob provider: ${JSON.stringify(value)}`);
51
+ }
52
+ //# sourceMappingURL=BlobStoreFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobStoreFactory.js","sourceRoot":"","sources":["../../../../src/blob/core/BlobStoreFactory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,kBAAkB,EAAE,sCAAiC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,yCAAoC;AACpE,OAAO,EAAE,kBAAkB,EAAE,sCAAiC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,4CAAuC;AACvE,OAAO,EAAE,mBAAmB,EAAE,wCAAmC;AACjE,OAAO,EAAE,qBAAqB,EAAE,4CAAuC;AACvE,OAAO,EAAE,oBAAoB,EAAE,0CAAqC;AACpE,OAAO,EAAE,sBAAsB,EAAE,8CAAyC;AAE1E,MAAM,OAAO,gBAAgB;IAC3B,MAAM,CACJ,MAAS;QAET,IAAI,OAAyB,CAAC;QAC9B,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;YACxB,KAAK,IAAI;gBACP,OAAO,GAAG,IAAI,kBAAkB,EAAiC,CAAC;gBAClE,MAAM;YACR,KAAK,OAAO;gBACV,OAAO,GAAG,IAAI,qBAAqB,EAAiC,CAAC;gBACrE,MAAM;YACR,KAAK,IAAI;gBACP,OAAO,GAAG,IAAI,kBAAkB,EAAiC,CAAC;gBAClE,MAAM;YACR,KAAK,YAAY;gBACf,OAAO,GAAG,IAAI,qBAAqB,EAAiC,CAAC;gBACrE,MAAM;YACR,KAAK,KAAK;gBACR,OAAO,GAAG,IAAI,mBAAmB,EAAiC,CAAC;gBACnE,MAAM;YACR,KAAK,OAAO;gBACV,OAAO,GAAG,IAAI,qBAAqB,EAAiC,CAAC;gBACrE,MAAM;YACR,KAAK,MAAM;gBACT,OAAO,GAAG,IAAI,oBAAoB,EAAiC,CAAC;gBACpE,MAAM;YACR,KAAK,QAAQ;gBACX,OAAO,GAAG,IAAI,sBAAsB,EAAiC,CAAC;gBACtE,MAAM;YACR;gBACE,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,SAAS,WAAW,CAAC,KAA6B;IAChD,MAAM,IAAI,eAAe,CACvB,8BAA8B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @module integrations/blob/core/service
3
+ * @summary Blob store service abstraction.
4
+ * @description Base abstraction for binary large object backends.
5
+ */
6
+ import { ClientBasedService, } from "@decaf-ts/core";
7
+ import { ValidationError } from "@decaf-ts/db-decorators";
8
+ import { cleanKey, physicalKey } from "./BlobKey.js";
9
+ export class BlobStoreService extends ClientBasedService {
10
+ constructor() {
11
+ super();
12
+ }
13
+ get provider() {
14
+ return this.config.provider;
15
+ }
16
+ get sourceId() {
17
+ return this.config.sourceId;
18
+ }
19
+ physicalKey(key) {
20
+ return physicalKey(key, this.config.prefix);
21
+ }
22
+ cleanKey(key) {
23
+ return cleanKey(key);
24
+ }
25
+ getConfigFromArgs(...args) {
26
+ const config = args[0];
27
+ if (!config || typeof config !== "object") {
28
+ throw new ValidationError("Blob store config must be the first initialize argument");
29
+ }
30
+ return config;
31
+ }
32
+ uri(key, scheme, extra) {
33
+ const base = `${scheme}://${this.sourceId}/${this.physicalKey(key)}`;
34
+ return extra ? `${base}?${extra}` : base;
35
+ }
36
+ }
37
+ //# sourceMappingURL=BlobStoreService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobStoreService.js","sourceRoot":"","sources":["../../../../src/blob/core/BlobStoreService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,kBAAkB,GAGnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAkB;AAiBlD,MAAM,OAAgB,gBAGpB,SAAQ,kBAAoC;IAC5C;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAoDS,WAAW,CAAC,GAAY;QAChC,OAAO,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAES,QAAQ,CAAC,GAAY;QAC7B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAES,iBAAiB,CACzB,GAAG,IAA6B;QAEhC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAA0B,CAAC;QAChD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,eAAe,CACvB,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,GAAG,CAAC,GAAY,EAAE,MAAc,EAAE,KAAc;QACxD,MAAM,IAAI,GAAG,GAAG,MAAM,MAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BlobTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobTypes.js","sourceRoot":"","sources":["../../../../src/blob/core/BlobTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @module integrations/blob/core/value
3
+ * @summary Blob value helpers.
4
+ * @description Utilities for normalizing blob values and collecting them into buffers.
5
+ */
6
+ import { getCrypto } from "@decaf-ts/crypto/common";
7
+ import { ValidationError } from "@decaf-ts/db-decorators";
8
+ /**
9
+ * Converts any supported BlobValue into an AsyncIterable of Uint8Array chunks.
10
+ */
11
+ export function toAsyncIterable(value) {
12
+ if (value instanceof Uint8Array) {
13
+ return (async function* () {
14
+ yield value;
15
+ })();
16
+ }
17
+ const anyValue = value;
18
+ if (anyValue && typeof anyValue[Symbol.asyncIterator] === "function") {
19
+ return anyValue;
20
+ }
21
+ if (anyValue && typeof anyValue.getReader === "function") {
22
+ return (async function* () {
23
+ const reader = anyValue.getReader();
24
+ try {
25
+ let result = await reader.read();
26
+ while (!result.done) {
27
+ yield result.value;
28
+ result = await reader.read();
29
+ }
30
+ }
31
+ finally {
32
+ reader.releaseLock();
33
+ }
34
+ })();
35
+ }
36
+ if (anyValue && typeof anyValue[Symbol.iterator] === "function") {
37
+ return (async function* () {
38
+ for (const chunk of anyValue) {
39
+ yield chunk;
40
+ }
41
+ })();
42
+ }
43
+ throw new ValidationError(`Unsupported blob value type: ${typeof value}`);
44
+ }
45
+ /**
46
+ * Collects an AsyncIterable of Uint8Array chunks into a single Buffer.
47
+ */
48
+ export async function collectToBuffer(value) {
49
+ if (value instanceof Uint8Array) {
50
+ return Buffer.from(value);
51
+ }
52
+ const chunks = [];
53
+ for await (const chunk of toAsyncIterable(value)) {
54
+ chunks.push(Buffer.from(chunk));
55
+ }
56
+ return Buffer.concat(chunks);
57
+ }
58
+ /**
59
+ * Computes the sha256 hex digest of a blob value.
60
+ */
61
+ export async function computeSha256(value) {
62
+ const buffer = await collectToBuffer(value);
63
+ const crypto = (await getCrypto());
64
+ return crypto.createHash("sha256").update(buffer).digest("hex");
65
+ }
66
+ //# sourceMappingURL=BlobValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlobValue.js","sourceRoot":"","sources":["../../../../src/blob/core/BlobValue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAgB;IAEhB,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,SAAS,CAAC;YACrB,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,MAAM,QAAQ,GAAG,KAAY,CAAC;IAC9B,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE,CAAC;QACrE,OAAO,QAAqC,CAAC;IAC/C,CAAC;IAED,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACzD,OAAO,CAAC,KAAK,SAAS,CAAC;YACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBACpB,MAAM,MAAM,CAAC,KAAmB,CAAC;oBACjC,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC/B,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC;QAChE,OAAO,CAAC,KAAK,SAAS,CAAC;YACrB,KAAK,MAAM,KAAK,IAAI,QAAgC,EAAE,CAAC;gBACrD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,MAAM,IAAI,eAAe,CACvB,gCAAgC,OAAO,KAAK,EAAE,CAC/C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAgB;IAEhB,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAgB;IAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,EAAE,CAAQ,CAAC;IAC1C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @module integrations/blob/core
3
+ * @summary Blob core exports.
4
+ * @description Re-exports the blob store core types, errors, key/value helpers, service abstraction, and factory.
5
+ */
6
+ export * from "./BlobTypes.js";
7
+ export * from "./BlobErrors.js";
8
+ export * from "./BlobKey.js";
9
+ export * from "./BlobValue.js";
10
+ export * from "./BlobStoreService.js";
11
+ export * from "./BlobStoreFactory.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/blob/core/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,+BAA4B;AAC5B,gCAA6B;AAC7B,6BAA0B;AAC1B,+BAA4B;AAC5B,sCAAmC;AACnC,sCAAmC"}