@agentuity/core 0.0.69 → 0.0.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/services/_util.d.ts.map +1 -1
- package/dist/services/_util.js +11 -1
- package/dist/services/_util.js.map +1 -1
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +0 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/stream.d.ts.map +1 -1
- package/dist/services/stream.js +6 -5
- package/dist/services/stream.js.map +1 -1
- package/package.json +2 -1
- package/src/services/_util.ts +10 -1
- package/src/services/index.ts +0 -1
- package/src/services/stream.ts +10 -8
- package/dist/services/objectstore.d.ts +0 -257
- package/dist/services/objectstore.d.ts.map +0 -1
- package/dist/services/objectstore.js +0 -422
- package/dist/services/objectstore.js.map +0 -1
- package/src/__test__/error.test.ts +0 -431
- package/src/services/__test__/keyvalue.test.ts +0 -402
- package/src/services/__test__/mock-adapter.ts +0 -114
- package/src/services/__test__/objectstore.test.ts +0 -431
- package/src/services/__test__/stream.test.ts +0 -554
- package/src/services/__test__/vector.test.ts +0 -819
- package/src/services/objectstore.ts +0 -816
|
@@ -1,422 +0,0 @@
|
|
|
1
|
-
import { buildUrl, toServiceException } from './_util';
|
|
2
|
-
import { StructuredError } from '../error';
|
|
3
|
-
const ObjectStoreBucketMissingError = StructuredError('ObjectStoreBucketMissingError', 'bucket is required and cannot be empty');
|
|
4
|
-
const ObjectStoreKeyMissingError = StructuredError('ObjectStoreKeyMissingError', 'key is required and cannot be empty');
|
|
5
|
-
const ObjectStoreDataMissingError = StructuredError('ObjectStoreDataMissingError', 'data is required');
|
|
6
|
-
const ObjectStoreResponseError = StructuredError('ObjectStoreResponseError')();
|
|
7
|
-
const ObjectStoreResponseInvalidError = StructuredError('ObjectStoreResponseInvalidError');
|
|
8
|
-
const ObjectStoreNotFoundError = StructuredError('ObjectStoreNotFoundError', 'object not found');
|
|
9
|
-
/**
|
|
10
|
-
* Implementation of the ObjectStorage interface
|
|
11
|
-
*/
|
|
12
|
-
export class ObjectStorageService {
|
|
13
|
-
#adapter;
|
|
14
|
-
#baseUrl;
|
|
15
|
-
constructor(baseUrl, adapter) {
|
|
16
|
-
this.#baseUrl = baseUrl;
|
|
17
|
-
this.#adapter = adapter;
|
|
18
|
-
}
|
|
19
|
-
async get(bucket, key) {
|
|
20
|
-
if (!bucket?.trim()) {
|
|
21
|
-
throw new ObjectStoreBucketMissingError();
|
|
22
|
-
}
|
|
23
|
-
if (!key?.trim()) {
|
|
24
|
-
throw new ObjectStoreKeyMissingError();
|
|
25
|
-
}
|
|
26
|
-
const url = buildUrl(this.#baseUrl, `/object/2025-03-17/${encodeURIComponent(bucket)}/${encodeURIComponent(key)}`);
|
|
27
|
-
const signal = AbortSignal.timeout(10_000);
|
|
28
|
-
const options = {
|
|
29
|
-
method: 'GET',
|
|
30
|
-
signal,
|
|
31
|
-
telemetry: {
|
|
32
|
-
name: 'agentuity.objectstore.get',
|
|
33
|
-
attributes: {
|
|
34
|
-
'objectstore.bucket': bucket,
|
|
35
|
-
'objectstore.key': key,
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
try {
|
|
40
|
-
const result = await this.#adapter.invoke(url, options);
|
|
41
|
-
if (result.response.status === 404) {
|
|
42
|
-
return { exists: false };
|
|
43
|
-
}
|
|
44
|
-
if (!result.ok) {
|
|
45
|
-
throw new ObjectStoreResponseError({
|
|
46
|
-
status: result.response.status,
|
|
47
|
-
message: `Failed to get object: ${result.response.statusText} (${result.response.status})`,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
const data = result.data;
|
|
51
|
-
if (!(data instanceof ArrayBuffer)) {
|
|
52
|
-
throw new ObjectStoreResponseInvalidError({
|
|
53
|
-
message: 'Expected ArrayBuffer response from object store',
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
const contentType = result.response.headers.get('content-type') || 'application/octet-stream';
|
|
57
|
-
return {
|
|
58
|
-
exists: true,
|
|
59
|
-
data: new Uint8Array(data),
|
|
60
|
-
contentType,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
catch (err) {
|
|
64
|
-
if (err instanceof Response) {
|
|
65
|
-
throw await toServiceException('GET', url, err);
|
|
66
|
-
}
|
|
67
|
-
throw err;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
async put(bucket, key, data, params) {
|
|
71
|
-
if (!bucket?.trim()) {
|
|
72
|
-
throw new ObjectStoreBucketMissingError();
|
|
73
|
-
}
|
|
74
|
-
if (!key?.trim()) {
|
|
75
|
-
throw new ObjectStoreKeyMissingError();
|
|
76
|
-
}
|
|
77
|
-
if (!data) {
|
|
78
|
-
throw new ObjectStoreDataMissingError();
|
|
79
|
-
}
|
|
80
|
-
const url = buildUrl(this.#baseUrl, `/object/2025-03-17/${encodeURIComponent(bucket)}/${encodeURIComponent(key)}`);
|
|
81
|
-
const headers = {
|
|
82
|
-
'Content-Type': params?.contentType || 'application/octet-stream',
|
|
83
|
-
};
|
|
84
|
-
if (params?.contentEncoding) {
|
|
85
|
-
headers['Content-Encoding'] = params.contentEncoding;
|
|
86
|
-
}
|
|
87
|
-
if (params?.cacheControl) {
|
|
88
|
-
headers['Cache-Control'] = params.cacheControl;
|
|
89
|
-
}
|
|
90
|
-
if (params?.contentDisposition) {
|
|
91
|
-
headers['Content-Disposition'] = params.contentDisposition;
|
|
92
|
-
}
|
|
93
|
-
if (params?.contentLanguage) {
|
|
94
|
-
headers['Content-Language'] = params.contentLanguage;
|
|
95
|
-
}
|
|
96
|
-
if (params?.metadata) {
|
|
97
|
-
for (const [metaKey, metaValue] of Object.entries(params.metadata)) {
|
|
98
|
-
headers[`x-metadata-${metaKey}`] = metaValue;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
let body;
|
|
102
|
-
if (data instanceof ArrayBuffer) {
|
|
103
|
-
body = data;
|
|
104
|
-
}
|
|
105
|
-
else if (data instanceof Uint8Array) {
|
|
106
|
-
if (data.byteOffset !== 0 || data.byteLength !== data.buffer.byteLength) {
|
|
107
|
-
body = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
body = data.buffer;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
body = data;
|
|
115
|
-
}
|
|
116
|
-
const signal = AbortSignal.timeout(30_000);
|
|
117
|
-
const options = {
|
|
118
|
-
method: 'PUT',
|
|
119
|
-
headers,
|
|
120
|
-
body,
|
|
121
|
-
signal,
|
|
122
|
-
telemetry: {
|
|
123
|
-
name: 'agentuity.objectstore.put',
|
|
124
|
-
attributes: {
|
|
125
|
-
'objectstore.bucket': bucket,
|
|
126
|
-
'objectstore.key': key,
|
|
127
|
-
'objectstore.contentType': params?.contentType || 'application/octet-stream',
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
};
|
|
131
|
-
try {
|
|
132
|
-
const result = await this.#adapter.invoke(url, options);
|
|
133
|
-
if (!result.ok || (result.response.status !== 200 && result.response.status !== 201)) {
|
|
134
|
-
throw new ObjectStoreResponseError({
|
|
135
|
-
status: result.response.status,
|
|
136
|
-
message: `Failed to put object: ${result.response.statusText} (${result.response.status})`,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
catch (err) {
|
|
141
|
-
if (err instanceof Response) {
|
|
142
|
-
throw await toServiceException('PUT', url, err);
|
|
143
|
-
}
|
|
144
|
-
throw err;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
async delete(bucket, key) {
|
|
148
|
-
if (!bucket?.trim()) {
|
|
149
|
-
throw new ObjectStoreBucketMissingError();
|
|
150
|
-
}
|
|
151
|
-
if (!key?.trim()) {
|
|
152
|
-
throw new ObjectStoreKeyMissingError();
|
|
153
|
-
}
|
|
154
|
-
const url = buildUrl(this.#baseUrl, `/object/2025-03-17/${encodeURIComponent(bucket)}/${encodeURIComponent(key)}`);
|
|
155
|
-
const signal = AbortSignal.timeout(10_000);
|
|
156
|
-
const options = {
|
|
157
|
-
method: 'DELETE',
|
|
158
|
-
signal,
|
|
159
|
-
telemetry: {
|
|
160
|
-
name: 'agentuity.objectstore.delete',
|
|
161
|
-
attributes: {
|
|
162
|
-
'objectstore.bucket': bucket,
|
|
163
|
-
'objectstore.key': key,
|
|
164
|
-
},
|
|
165
|
-
},
|
|
166
|
-
};
|
|
167
|
-
try {
|
|
168
|
-
const result = await this.#adapter.invoke(url, options);
|
|
169
|
-
if (result.response.status === 404) {
|
|
170
|
-
return false;
|
|
171
|
-
}
|
|
172
|
-
if (result.response.status === 200) {
|
|
173
|
-
return true;
|
|
174
|
-
}
|
|
175
|
-
throw new ObjectStoreResponseError({
|
|
176
|
-
status: result.response.status,
|
|
177
|
-
message: `Failed to delete object: ${result.response.statusText} (${result.response.status})`,
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
catch (err) {
|
|
181
|
-
if (err instanceof Response) {
|
|
182
|
-
throw await toServiceException('DELETE', url, err);
|
|
183
|
-
}
|
|
184
|
-
throw err;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
async createPublicURL(bucket, key, params) {
|
|
188
|
-
if (!bucket?.trim()) {
|
|
189
|
-
throw new ObjectStoreBucketMissingError();
|
|
190
|
-
}
|
|
191
|
-
if (!key?.trim()) {
|
|
192
|
-
throw new ObjectStoreKeyMissingError();
|
|
193
|
-
}
|
|
194
|
-
const url = buildUrl(this.#baseUrl, `/object/2025-03-17/presigned/${encodeURIComponent(bucket)}/${encodeURIComponent(key)}`);
|
|
195
|
-
const requestBody = {};
|
|
196
|
-
if (params?.expiresDuration) {
|
|
197
|
-
requestBody.expires = params.expiresDuration;
|
|
198
|
-
}
|
|
199
|
-
const signal = AbortSignal.timeout(10_000);
|
|
200
|
-
const options = {
|
|
201
|
-
method: 'POST',
|
|
202
|
-
contentType: 'application/json',
|
|
203
|
-
body: JSON.stringify(requestBody),
|
|
204
|
-
signal,
|
|
205
|
-
telemetry: {
|
|
206
|
-
name: 'agentuity.objectstore.createPublicURL',
|
|
207
|
-
attributes: {
|
|
208
|
-
'objectstore.bucket': bucket,
|
|
209
|
-
'objectstore.key': key,
|
|
210
|
-
'objectstore.expiresDuration': params?.expiresDuration?.toString() || '',
|
|
211
|
-
},
|
|
212
|
-
},
|
|
213
|
-
};
|
|
214
|
-
try {
|
|
215
|
-
const result = await this.#adapter.invoke(url, options);
|
|
216
|
-
if (!result.ok) {
|
|
217
|
-
throw new ObjectStoreResponseError({
|
|
218
|
-
status: result.response.status,
|
|
219
|
-
message: `Failed to create public URL: ${result.response.statusText} (${result.response.status})`,
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
const data = result.data;
|
|
223
|
-
if (!data.success) {
|
|
224
|
-
throw new ObjectStoreResponseError({
|
|
225
|
-
status: result.response.status,
|
|
226
|
-
message: data.message || 'Failed to create public URL',
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
return data.url;
|
|
230
|
-
}
|
|
231
|
-
catch (err) {
|
|
232
|
-
if (err instanceof Error && err.message.includes('Object not found')) {
|
|
233
|
-
throw err;
|
|
234
|
-
}
|
|
235
|
-
if (err instanceof Response) {
|
|
236
|
-
throw await toServiceException('POST', url, err);
|
|
237
|
-
}
|
|
238
|
-
throw err;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
async listBuckets() {
|
|
242
|
-
const url = buildUrl(this.#baseUrl, '/object/2025-03-17/buckets');
|
|
243
|
-
const signal = AbortSignal.timeout(10_000);
|
|
244
|
-
const options = {
|
|
245
|
-
method: 'GET',
|
|
246
|
-
signal,
|
|
247
|
-
telemetry: {
|
|
248
|
-
name: 'agentuity.objectstore.listBuckets',
|
|
249
|
-
attributes: {},
|
|
250
|
-
},
|
|
251
|
-
};
|
|
252
|
-
try {
|
|
253
|
-
const result = await this.#adapter.invoke(url, options);
|
|
254
|
-
if (!result.ok) {
|
|
255
|
-
throw new ObjectStoreResponseError({
|
|
256
|
-
status: result.response.status,
|
|
257
|
-
message: `Failed to list buckets: ${result.response.statusText} (${result.response.status})`,
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
|
-
return result.data.buckets;
|
|
261
|
-
}
|
|
262
|
-
catch (err) {
|
|
263
|
-
if (err instanceof Response) {
|
|
264
|
-
throw await toServiceException('GET', url, err);
|
|
265
|
-
}
|
|
266
|
-
throw err;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
async listKeys(bucket) {
|
|
270
|
-
if (!bucket?.trim()) {
|
|
271
|
-
throw new ObjectStoreBucketMissingError();
|
|
272
|
-
}
|
|
273
|
-
const url = buildUrl(this.#baseUrl, `/object/2025-03-17/keys/${encodeURIComponent(bucket)}`);
|
|
274
|
-
const signal = AbortSignal.timeout(10_000);
|
|
275
|
-
const options = {
|
|
276
|
-
method: 'GET',
|
|
277
|
-
signal,
|
|
278
|
-
telemetry: {
|
|
279
|
-
name: 'agentuity.objectstore.listKeys',
|
|
280
|
-
attributes: {
|
|
281
|
-
'objectstore.bucket': bucket,
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
};
|
|
285
|
-
try {
|
|
286
|
-
const result = await this.#adapter.invoke(url, options);
|
|
287
|
-
if (!result.ok) {
|
|
288
|
-
throw new ObjectStoreResponseError({
|
|
289
|
-
status: result.response.status,
|
|
290
|
-
message: `Failed to list keys: ${result.response.statusText} (${result.response.status})`,
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
return result.data.objects;
|
|
294
|
-
}
|
|
295
|
-
catch (err) {
|
|
296
|
-
if (err instanceof Response) {
|
|
297
|
-
throw await toServiceException('GET', url, err);
|
|
298
|
-
}
|
|
299
|
-
throw err;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
async listObjects(bucket, options) {
|
|
303
|
-
if (!bucket?.trim()) {
|
|
304
|
-
throw new ObjectStoreBucketMissingError();
|
|
305
|
-
}
|
|
306
|
-
const params = new URLSearchParams();
|
|
307
|
-
if (options?.prefix) {
|
|
308
|
-
params.set('prefix', options.prefix);
|
|
309
|
-
}
|
|
310
|
-
if (options?.limit) {
|
|
311
|
-
params.set('limit', options.limit.toString());
|
|
312
|
-
}
|
|
313
|
-
const queryString = params.toString();
|
|
314
|
-
const url = buildUrl(this.#baseUrl, `/object/2025-03-17/objects/${encodeURIComponent(bucket)}${queryString ? `?${queryString}` : ''}`);
|
|
315
|
-
const signal = AbortSignal.timeout(10_000);
|
|
316
|
-
const fetchOptions = {
|
|
317
|
-
method: 'GET',
|
|
318
|
-
signal,
|
|
319
|
-
telemetry: {
|
|
320
|
-
name: 'agentuity.objectstore.listObjects',
|
|
321
|
-
attributes: {
|
|
322
|
-
'objectstore.bucket': bucket,
|
|
323
|
-
'objectstore.prefix': options?.prefix || '',
|
|
324
|
-
'objectstore.limit': (options?.limit || 1000).toString(),
|
|
325
|
-
},
|
|
326
|
-
},
|
|
327
|
-
};
|
|
328
|
-
try {
|
|
329
|
-
const result = await this.#adapter.invoke(url, fetchOptions);
|
|
330
|
-
if (!result.ok) {
|
|
331
|
-
throw new ObjectStoreResponseError({
|
|
332
|
-
status: result.response.status,
|
|
333
|
-
message: `Failed to list objects: ${result.response.statusText} (${result.response.status})`,
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
return result.data.objects;
|
|
337
|
-
}
|
|
338
|
-
catch (err) {
|
|
339
|
-
if (err instanceof Response) {
|
|
340
|
-
throw await toServiceException('GET', url, err);
|
|
341
|
-
}
|
|
342
|
-
throw err;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
async headObject(bucket, key) {
|
|
346
|
-
if (!bucket?.trim()) {
|
|
347
|
-
throw new ObjectStoreBucketMissingError();
|
|
348
|
-
}
|
|
349
|
-
if (!key?.trim()) {
|
|
350
|
-
throw new ObjectStoreKeyMissingError();
|
|
351
|
-
}
|
|
352
|
-
const url = buildUrl(this.#baseUrl, `/object/2025-03-17/head/${encodeURIComponent(bucket)}/${encodeURIComponent(key)}`);
|
|
353
|
-
const signal = AbortSignal.timeout(10_000);
|
|
354
|
-
const fetchOptions = {
|
|
355
|
-
method: 'GET',
|
|
356
|
-
signal,
|
|
357
|
-
telemetry: {
|
|
358
|
-
name: 'agentuity.objectstore.headObject',
|
|
359
|
-
attributes: {
|
|
360
|
-
'objectstore.bucket': bucket,
|
|
361
|
-
'objectstore.key': key,
|
|
362
|
-
},
|
|
363
|
-
},
|
|
364
|
-
};
|
|
365
|
-
try {
|
|
366
|
-
const result = await this.#adapter.invoke(url, fetchOptions);
|
|
367
|
-
if (!result.ok) {
|
|
368
|
-
if (result.response.status === 404) {
|
|
369
|
-
throw new ObjectStoreNotFoundError();
|
|
370
|
-
}
|
|
371
|
-
throw new ObjectStoreResponseError({
|
|
372
|
-
status: result.response.status,
|
|
373
|
-
message: `Failed to get object metadata: ${result.response.statusText} (${result.response.status})`,
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
return result.data;
|
|
377
|
-
}
|
|
378
|
-
catch (err) {
|
|
379
|
-
if (err instanceof Response) {
|
|
380
|
-
throw await toServiceException('GET', url, err);
|
|
381
|
-
}
|
|
382
|
-
throw err;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
async deleteBucket(bucket) {
|
|
386
|
-
if (!bucket?.trim()) {
|
|
387
|
-
throw new ObjectStoreBucketMissingError();
|
|
388
|
-
}
|
|
389
|
-
const url = buildUrl(this.#baseUrl, `/object/2025-03-17/${encodeURIComponent(bucket)}`);
|
|
390
|
-
const signal = AbortSignal.timeout(30_000);
|
|
391
|
-
const options = {
|
|
392
|
-
method: 'DELETE',
|
|
393
|
-
signal,
|
|
394
|
-
telemetry: {
|
|
395
|
-
name: 'agentuity.objectstore.deleteBucket',
|
|
396
|
-
attributes: {
|
|
397
|
-
'objectstore.bucket': bucket,
|
|
398
|
-
},
|
|
399
|
-
},
|
|
400
|
-
};
|
|
401
|
-
try {
|
|
402
|
-
const result = await this.#adapter.invoke(url, options);
|
|
403
|
-
if (result.response.status === 404) {
|
|
404
|
-
return false;
|
|
405
|
-
}
|
|
406
|
-
if (result.response.status === 200) {
|
|
407
|
-
return true;
|
|
408
|
-
}
|
|
409
|
-
throw new ObjectStoreResponseError({
|
|
410
|
-
status: result.response.status,
|
|
411
|
-
message: `Failed to delete bucket: ${result.response.statusText} (${result.response.status})`,
|
|
412
|
-
});
|
|
413
|
-
}
|
|
414
|
-
catch (err) {
|
|
415
|
-
if (err instanceof Response) {
|
|
416
|
-
throw await toServiceException('DELETE', url, err);
|
|
417
|
-
}
|
|
418
|
-
throw err;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
//# sourceMappingURL=objectstore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"objectstore.js","sourceRoot":"","sources":["../../src/services/objectstore.ts"],"names":[],"mappings":"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"}
|