@microsoft/agents-hosting-storage-blob 1.9.0-beta.8.gf58e66b2ee → 1.9.1
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/README.md +26 -8
- package/dist/package.json +4 -4
- package/dist/src/blobsStorage.d.ts +68 -36
- package/dist/src/blobsStorage.js +286 -61
- package/dist/src/blobsStorage.js.map +1 -1
- package/dist/src/errorHelper.js +40 -0
- package/dist/src/errorHelper.js.map +1 -1
- package/package.json +4 -4
- package/src/blobsStorage.ts +303 -125
- package/src/errorHelper.ts +48 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobsStorage.js","sourceRoot":"","sources":["../../src/blobsStorage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"blobsStorage.js","sourceRoot":"","sources":["../../src/blobsStorage.ts"],"names":[],"mappings":"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"}
|
package/dist/src/errorHelper.js
CHANGED
|
@@ -39,6 +39,46 @@ exports.Errors = {
|
|
|
39
39
|
ETagConflict: {
|
|
40
40
|
code: -160002,
|
|
41
41
|
description: 'Storage: error writing "{key}" due to eTag conflict.'
|
|
42
|
+
},
|
|
43
|
+
/** Error thrown when an empty V2 storage version token is provided. */
|
|
44
|
+
StorageV2ExpectedVersionEmpty: {
|
|
45
|
+
code: -160003,
|
|
46
|
+
description: 'Storage V2 expectedVersion cannot be empty.'
|
|
47
|
+
},
|
|
48
|
+
/** Error thrown when a V2 value is not a non-array object. */
|
|
49
|
+
StorageV2ValueRequired: {
|
|
50
|
+
code: -160004,
|
|
51
|
+
description: 'Storage V2 values must be non-null, non-array objects.'
|
|
52
|
+
},
|
|
53
|
+
/** Error thrown when an Azure Blob V2 operation fails unexpectedly. */
|
|
54
|
+
StorageV2OperationFailed: {
|
|
55
|
+
code: -160005,
|
|
56
|
+
description: 'Blob Storage V2 {operation} failed for key "{key}".'
|
|
57
|
+
},
|
|
58
|
+
/** Error thrown when a legacy Blob Storage write fails unexpectedly. */
|
|
59
|
+
StorageWriteFailed: {
|
|
60
|
+
code: -160008,
|
|
61
|
+
description: 'Blob Storage failed to write key "{key}".'
|
|
62
|
+
},
|
|
63
|
+
/** Error thrown when a V2 storage key is empty or whitespace. */
|
|
64
|
+
StorageV2KeyRequired: {
|
|
65
|
+
code: -160006,
|
|
66
|
+
description: 'Storage V2 keys must be non-empty strings.'
|
|
67
|
+
},
|
|
68
|
+
/** Error thrown when a V2 write mode is not supported. */
|
|
69
|
+
StorageV2WriteModeUnsupported: {
|
|
70
|
+
code: -160007,
|
|
71
|
+
description: 'Storage V2 write mode "{mode}" is not supported.'
|
|
72
|
+
},
|
|
73
|
+
/** Error thrown when V2 write changes are missing or invalid. */
|
|
74
|
+
StorageV2ChangesRequired: {
|
|
75
|
+
code: -160009,
|
|
76
|
+
description: 'Storage V2 changes must be an object.'
|
|
77
|
+
},
|
|
78
|
+
/** Error thrown when the V2 key collection is missing or invalid. */
|
|
79
|
+
StorageV2KeysRequired: {
|
|
80
|
+
code: -160010,
|
|
81
|
+
description: 'Storage V2 keys must be an array.'
|
|
42
82
|
}
|
|
43
83
|
};
|
|
44
84
|
//# sourceMappingURL=errorHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHelper.js","sourceRoot":"","sources":["../../src/errorHelper.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;AAIlC;;;;;;;;;;;;;;GAcG;AACU,QAAA,MAAM,GAA4C;IAC7D;;OAEG;IACH,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,gDAAgD;KAC9D;IAED;;OAEG;IACH,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,gCAAgC;KAC9C;IAED;;OAEG;IACH,YAAY,EAAE;QACZ,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,sDAAsD;KACpE;CACF,CAAA"}
|
|
1
|
+
{"version":3,"file":"errorHelper.js","sourceRoot":"","sources":["../../src/errorHelper.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;AAIlC;;;;;;;;;;;;;;GAcG;AACU,QAAA,MAAM,GAA4C;IAC7D;;OAEG;IACH,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,gDAAgD;KAC9D;IAED;;OAEG;IACH,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,gCAAgC;KAC9C;IAED;;OAEG;IACH,YAAY,EAAE;QACZ,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,sDAAsD;KACpE;IAED,uEAAuE;IACvE,6BAA6B,EAAE;QAC7B,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,6CAA6C;KAC3D;IAED,8DAA8D;IAC9D,sBAAsB,EAAE;QACtB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,wDAAwD;KACtE;IAED,uEAAuE;IACvE,wBAAwB,EAAE;QACxB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,qDAAqD;KACnE;IAED,wEAAwE;IACxE,kBAAkB,EAAE;QAClB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,2CAA2C;KACzD;IAED,iEAAiE;IACjE,oBAAoB,EAAE;QACpB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,4CAA4C;KAC1D;IAED,0DAA0D;IAC1D,6BAA6B,EAAE;QAC7B,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,kDAAkD;KAChE;IAED,iEAAiE;IACjE,wBAAwB,EAAE;QACxB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,uCAAuC;KACrD;IAED,qEAAqE;IACrE,qBAAqB,EAAE;QACrB,IAAI,EAAE,CAAC,MAAM;QACb,WAAW,EAAE,mCAAmC;KACjD;CACF,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@microsoft/agents-hosting-storage-blob",
|
|
4
|
-
"version": "1.9.
|
|
4
|
+
"version": "1.9.1",
|
|
5
5
|
"homepage": "https://github.com/microsoft/Agents-for-js",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@azure/core-auth": "1.10.1",
|
|
20
20
|
"@azure/storage-blob": "12.31.0",
|
|
21
|
-
"@microsoft/agents-hosting": "1.9.
|
|
22
|
-
"@microsoft/agents-activity": "1.9.
|
|
23
|
-
"@microsoft/agents-telemetry": "1.9.
|
|
21
|
+
"@microsoft/agents-hosting": "1.9.1",
|
|
22
|
+
"@microsoft/agents-activity": "1.9.1",
|
|
23
|
+
"@microsoft/agents-telemetry": "1.9.1",
|
|
24
24
|
"zod": "3.25.75"
|
|
25
25
|
},
|
|
26
26
|
"license": "MIT",
|
package/src/blobsStorage.ts
CHANGED
|
@@ -1,82 +1,39 @@
|
|
|
1
1
|
import * as z from 'zod'
|
|
2
2
|
import StreamConsumers from 'stream/consumers'
|
|
3
3
|
import { isTokenCredential, TokenCredential } from '@azure/core-auth'
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
ContainerClient,
|
|
7
|
-
StoragePipelineOptions,
|
|
8
|
-
StorageSharedKeyCredential,
|
|
9
|
-
} from '@azure/storage-blob'
|
|
10
|
-
import { Storage, StoreItems } from '@microsoft/agents-hosting'
|
|
4
|
+
import { AnonymousCredential, ContainerClient, StoragePipelineOptions, StorageSharedKeyCredential } from '@azure/storage-blob'
|
|
5
|
+
import { getStorageWriteExpiry, StorageDeleteOptions, StorageDeleteResults, StorageOperationStatus, StorageReadResults, StorageWriteMode, StorageWriteOptions, StorageWriteResults, Storage, StorageV2, StoreItems } from '@microsoft/agents-hosting'
|
|
11
6
|
import { ExceptionHelper } from '@microsoft/agents-activity'
|
|
12
7
|
import { Errors } from './errorHelper'
|
|
13
8
|
import { sanitizeBlobKey } from './blobsTranscriptStore'
|
|
14
9
|
import { ignoreError, isStatusCodeError } from './ignoreError'
|
|
15
|
-
import { trace, debug } from '@microsoft/agents-telemetry'
|
|
10
|
+
import { trace, debug, redactString } from '@microsoft/agents-telemetry'
|
|
16
11
|
import { BlobsStorageTraceDefinitions } from './observability'
|
|
17
12
|
|
|
18
13
|
const logger = debug('agents:blob-storage')
|
|
14
|
+
const expirationMetadataKey = 'agentsstorageexpiresat'
|
|
19
15
|
|
|
20
|
-
/**
|
|
21
|
-
* Options for configuring the BlobsStorage.
|
|
22
|
-
*/
|
|
16
|
+
/** Options for configuring Blob storage. */
|
|
23
17
|
export interface BlobsStorageOptions {
|
|
24
|
-
/**
|
|
25
|
-
* Optional Azure Storage pipeline options to customize request behavior
|
|
26
|
-
*/
|
|
18
|
+
/** Optional Azure Storage pipeline options to customize request behavior. */
|
|
27
19
|
storagePipelineOptions?: StoragePipelineOptions;
|
|
28
20
|
}
|
|
29
21
|
|
|
30
|
-
/**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
*/
|
|
34
|
-
export class BlobsStorage implements Storage {
|
|
35
|
-
private readonly _containerClient: ContainerClient
|
|
22
|
+
/** Shared Blob client setup and raw Blob primitives. */
|
|
23
|
+
class BlobsStorageInternals {
|
|
24
|
+
readonly _containerClient: ContainerClient
|
|
36
25
|
private readonly _concurrency = Infinity
|
|
37
26
|
private _initializePromise?: Promise<unknown>
|
|
38
27
|
|
|
39
|
-
|
|
40
|
-
* Creates a new instance of the BlobsStorage class.
|
|
41
|
-
*
|
|
42
|
-
* @param containerName The name of the Blob container to use
|
|
43
|
-
* @param connectionString Optional, The Azure Storage connection string
|
|
44
|
-
* @param options Optional configuration settings for the storage provider
|
|
45
|
-
* @param url Optional URL to the blob service (used instead of connectionString if provided)
|
|
46
|
-
* @param credential Optional credential for authentication (used with url if provided)
|
|
47
|
-
*/
|
|
48
|
-
constructor (
|
|
49
|
-
containerName: string,
|
|
50
|
-
connectionString?: string,
|
|
51
|
-
options?: BlobsStorageOptions,
|
|
52
|
-
url = '',
|
|
53
|
-
credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential
|
|
54
|
-
) {
|
|
28
|
+
constructor (containerName: string, connectionString?: string, options?: BlobsStorageOptions, url = '', credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential) {
|
|
55
29
|
if (url.trim() !== '') {
|
|
56
|
-
z.object({ url: z.string() }).parse({
|
|
57
|
-
url,
|
|
58
|
-
})
|
|
59
|
-
|
|
30
|
+
z.object({ url: z.string() }).parse({ url })
|
|
60
31
|
this._containerClient = new ContainerClient(url, credential, options?.storagePipelineOptions)
|
|
61
|
-
|
|
62
|
-
if (url.trim() === 'UseDevelopmentStorage=true;') {
|
|
63
|
-
this._concurrency = 1
|
|
64
|
-
}
|
|
32
|
+
if (url.trim() === 'UseDevelopmentStorage=true;') this._concurrency = 1
|
|
65
33
|
} else {
|
|
66
|
-
z.object({ connectionString: z.string(), containerName: z.string() }).parse({
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
this._containerClient = new ContainerClient(
|
|
72
|
-
connectionString!,
|
|
73
|
-
containerName,
|
|
74
|
-
options?.storagePipelineOptions
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
if (connectionString!.trim() === 'UseDevelopmentStorage=true;') {
|
|
78
|
-
this._concurrency = 1
|
|
79
|
-
}
|
|
34
|
+
z.object({ connectionString: z.string(), containerName: z.string() }).parse({ connectionString, containerName })
|
|
35
|
+
this._containerClient = new ContainerClient(connectionString!, containerName, options?.storagePipelineOptions)
|
|
36
|
+
if (connectionString!.trim() === 'UseDevelopmentStorage=true;') this._concurrency = 1
|
|
80
37
|
}
|
|
81
38
|
logger.info('BlobsStorage settings loaded', {
|
|
82
39
|
container: containerName,
|
|
@@ -88,111 +45,332 @@ export class BlobsStorage implements Storage {
|
|
|
88
45
|
})
|
|
89
46
|
}
|
|
90
47
|
|
|
91
|
-
|
|
92
|
-
|
|
48
|
+
_initialize (): Promise<unknown> {
|
|
49
|
+
if (!this._initializePromise) this._initializePromise = this._containerClient.createIfNotExists()
|
|
50
|
+
return this._initializePromise
|
|
93
51
|
}
|
|
94
52
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
53
|
+
async getVersion (key: string): Promise<string | undefined> {
|
|
54
|
+
try {
|
|
55
|
+
return (await this._containerClient.getBlobClient(sanitizeBlobKey(key)).getProperties()).etag
|
|
56
|
+
} catch (err) {
|
|
57
|
+
if (isStatusCodeError(404)(err as Error)) return undefined
|
|
58
|
+
throwStorageOperationError('read version', key, err)
|
|
98
59
|
}
|
|
99
|
-
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** A legacy Azure Blob storage provider. */
|
|
64
|
+
export class BlobsStorage extends BlobsStorageInternals implements Storage {
|
|
65
|
+
constructor (containerName: string, connectionString?: string, options?: BlobsStorageOptions, url = '', credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential) {
|
|
66
|
+
super(containerName, connectionString, options, url, credential)
|
|
100
67
|
}
|
|
101
68
|
|
|
102
69
|
/**
|
|
103
|
-
* Reads
|
|
70
|
+
* Reads legacy items from Azure Blob Storage.
|
|
104
71
|
*
|
|
105
|
-
* @param keys
|
|
106
|
-
* @returns
|
|
107
|
-
*
|
|
72
|
+
* @param keys The keys to read.
|
|
73
|
+
* @returns Existing items keyed by storage key. Missing blobs are omitted and returned items
|
|
74
|
+
* include the Blob ETag as their legacy `eTag`.
|
|
108
75
|
*/
|
|
109
76
|
async read (keys: string[]): Promise<StoreItems> {
|
|
110
77
|
return trace(BlobsStorageTraceDefinitions.read, async ({ record }) => {
|
|
111
78
|
record({ keyCount: keys?.length ?? 0 })
|
|
112
79
|
z.object({ keys: z.array(z.string()) }).parse({ keys })
|
|
113
|
-
|
|
114
80
|
await this._initialize()
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
if (!blob) {
|
|
125
|
-
return result
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const { etag: eTag, readableStreamBody } = blob
|
|
129
|
-
if (!readableStreamBody) {
|
|
130
|
-
return result
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const parsed = (await StreamConsumers.json(readableStreamBody)) as any
|
|
134
|
-
result.value = { ...parsed, eTag }
|
|
135
|
-
logger.debug(`Read blob: ${key}, eTag: ${eTag}`)
|
|
81
|
+
const results = await Promise.all(keys.map(async key => {
|
|
82
|
+
const result = { key, value: undefined as unknown }
|
|
83
|
+
const blob = await ignoreError(this._containerClient.getBlobClient(sanitizeBlobKey(key)).download(), isStatusCodeError(404))
|
|
84
|
+
if (!blob?.readableStreamBody) return result
|
|
85
|
+
const parsed = await StreamConsumers.json(blob.readableStreamBody) as Record<string, unknown>
|
|
86
|
+
result.value = { ...parsed, eTag: blob.etag }
|
|
87
|
+
logger.debug(`Read blob: ${key}, eTag: ${blob.etag}`)
|
|
136
88
|
return result
|
|
137
89
|
}))
|
|
138
|
-
|
|
139
|
-
return results.reduce((acc, { key, value }) => (value ? { ...acc, [key]: value } : acc), {})
|
|
90
|
+
return results.reduce<StoreItems>((items, { key, value }) => value ? { ...items, [key]: value } : items, {})
|
|
140
91
|
})
|
|
141
92
|
}
|
|
142
93
|
|
|
143
94
|
/**
|
|
144
|
-
* Writes
|
|
95
|
+
* Writes legacy items to Azure Blob Storage.
|
|
145
96
|
*
|
|
146
|
-
* @param changes The items to write
|
|
147
|
-
* @
|
|
148
|
-
*
|
|
97
|
+
* @param changes The items to write, keyed by storage key.
|
|
98
|
+
* @throws If the input is invalid, Blob Storage cannot complete the write, or a legacy `eTag`
|
|
99
|
+
* condition fails.
|
|
149
100
|
*/
|
|
150
101
|
async write (changes: StoreItems): Promise<void> {
|
|
151
102
|
return trace(BlobsStorageTraceDefinitions.write, async ({ record }) => {
|
|
103
|
+
record({ keyCount: changes ? Object.keys(changes).length : 0 })
|
|
152
104
|
z.record(z.unknown()).parse(changes)
|
|
153
|
-
record({ keyCount: Object.keys(changes).length })
|
|
154
|
-
|
|
155
105
|
await this._initialize()
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
throw err
|
|
172
|
-
}
|
|
106
|
+
await Promise.all(Object.entries(changes).map(async ([key, { eTag = '', ...change }]) => {
|
|
107
|
+
try {
|
|
108
|
+
const blob = this._containerClient.getBlockBlobClient(sanitizeBlobKey(key))
|
|
109
|
+
const serialized = JSON.stringify(change)
|
|
110
|
+
logger.debug(`Writing blob: ${key}, eTag: ${eTag}, size: ${serialized.length}`)
|
|
111
|
+
const conditions = typeof eTag === 'string' && eTag !== '*'
|
|
112
|
+
? { ifMatch: eTag }
|
|
113
|
+
: {}
|
|
114
|
+
await blob.upload(serialized, serialized.length, {
|
|
115
|
+
conditions,
|
|
116
|
+
blobHTTPHeaders: { blobContentType: 'application/json' },
|
|
117
|
+
})
|
|
118
|
+
} catch (err: any) {
|
|
119
|
+
if (err.statusCode === 412) {
|
|
120
|
+
throw ExceptionHelper.generateException(Error, Errors.ETagConflict, undefined, { key })
|
|
173
121
|
}
|
|
174
|
-
|
|
175
|
-
|
|
122
|
+
throw ExceptionHelper.generateException(Error, Errors.StorageWriteFailed, err, { key })
|
|
123
|
+
}
|
|
124
|
+
}))
|
|
176
125
|
})
|
|
177
126
|
}
|
|
178
127
|
|
|
179
128
|
/**
|
|
180
|
-
* Deletes
|
|
129
|
+
* Deletes legacy items from Azure Blob Storage.
|
|
181
130
|
*
|
|
182
|
-
* @param keys
|
|
183
|
-
* @returns A promise that resolves when the delete operation is complete
|
|
184
|
-
* @throws Will throw if keys parameter is invalid
|
|
131
|
+
* @param keys The keys to delete. Missing blobs are ignored.
|
|
185
132
|
*/
|
|
186
133
|
async delete (keys: string[]): Promise<void> {
|
|
187
134
|
return trace(BlobsStorageTraceDefinitions.delete, async ({ record }) => {
|
|
188
135
|
record({ keyCount: keys?.length ?? 0 })
|
|
189
136
|
z.object({ keys: z.array(z.string()) }).parse({ keys })
|
|
190
|
-
|
|
191
137
|
await this._initialize()
|
|
138
|
+
await Promise.all(keys.map(key => ignoreError(this._containerClient.deleteBlob(sanitizeBlobKey(key)), isStatusCodeError(404))))
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* An Azure Blob Storage provider for the structured {@link StorageV2} contract.
|
|
145
|
+
*
|
|
146
|
+
* This is the V2 counterpart to {@link BlobsStorage} and accepts the same connection settings.
|
|
147
|
+
* It returns a result for every requested key and exposes the Azure Blob ETag as the separate
|
|
148
|
+
* storage `version`, preserving any `eTag` property in an application value. Writes support
|
|
149
|
+
* create-only, replace, and expected-version conditions to detect concurrent updates.
|
|
150
|
+
*/
|
|
151
|
+
export class BlobsStorageV2 extends StorageV2 {
|
|
152
|
+
private readonly internals: BlobsStorageInternals
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Creates a V2 Azure Blob Storage provider.
|
|
156
|
+
*
|
|
157
|
+
* @param containerName The Blob container name when using a connection string.
|
|
158
|
+
* @param connectionString The Azure Storage connection string.
|
|
159
|
+
* @param options Optional Azure Storage pipeline options.
|
|
160
|
+
* @param url The Blob service or container URL when using a credential.
|
|
161
|
+
* @param credential The credential used with `url`.
|
|
162
|
+
*/
|
|
163
|
+
constructor (containerName: string, connectionString?: string, options?: BlobsStorageOptions, url = '', credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential) {
|
|
164
|
+
super()
|
|
165
|
+
this.internals = new BlobsStorageInternals(containerName, connectionString, options, url, credential)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Reads Blob values and ETag versions.
|
|
170
|
+
*
|
|
171
|
+
* @param keys The keys to read. Empty batches are valid.
|
|
172
|
+
* @returns A result for every key, with `notFound` for missing blobs and the Blob ETag as the
|
|
173
|
+
* version for successful reads.
|
|
174
|
+
*/
|
|
175
|
+
async read<T extends object = Record<string, unknown>> (keys: string[]): Promise<StorageReadResults<T>> {
|
|
176
|
+
return trace(BlobsStorageTraceDefinitions.read, async ({ record }) => {
|
|
177
|
+
record({ keyCount: keys?.length ?? 0 })
|
|
178
|
+
validateV2Keys(keys)
|
|
179
|
+
if (keys.length === 0) return {}
|
|
180
|
+
await this.internals._initialize()
|
|
181
|
+
const results: StorageReadResults<T> = {}
|
|
182
|
+
await Promise.all(keys.map(async key => {
|
|
183
|
+
try {
|
|
184
|
+
const { etag: version, metadata, readableStreamBody } = await this.internals._containerClient.getBlobClient(sanitizeBlobKey(key)).download()
|
|
185
|
+
if (!readableStreamBody) {
|
|
186
|
+
results[key] = { key, status: StorageOperationStatus.NotFound }
|
|
187
|
+
return
|
|
188
|
+
}
|
|
189
|
+
if (isExpired(metadata?.[expirationMetadataKey])) {
|
|
190
|
+
readableStreamBody.destroy()
|
|
191
|
+
logger.info('Blob expired, deleting from storage', {
|
|
192
|
+
key: redactString(key, true),
|
|
193
|
+
eTag: redactString(version, true),
|
|
194
|
+
expiresAt: metadata?.[expirationMetadataKey],
|
|
195
|
+
})
|
|
196
|
+
await ignoreError(this.internals._containerClient.deleteBlob(sanitizeBlobKey(key), { conditions: { ifMatch: version } }), isStatusCodeError(404, 412))
|
|
197
|
+
results[key] = { key, status: StorageOperationStatus.NotFound }
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
const value = await StreamConsumers.json(readableStreamBody) as T
|
|
201
|
+
results[key] = { key, status: StorageOperationStatus.Succeeded, value, version }
|
|
202
|
+
logger.debug(`Read blob: ${key}, eTag: ${version}`)
|
|
203
|
+
} catch (err) {
|
|
204
|
+
if (isStatusCodeError(404)(err as Error)) {
|
|
205
|
+
results[key] = { key, status: StorageOperationStatus.NotFound }
|
|
206
|
+
return
|
|
207
|
+
}
|
|
208
|
+
throwStorageOperationError('read', key, err)
|
|
209
|
+
}
|
|
210
|
+
}))
|
|
211
|
+
return results
|
|
212
|
+
})
|
|
213
|
+
}
|
|
192
214
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
215
|
+
/**
|
|
216
|
+
* Writes Blob values with optional concurrency conditions.
|
|
217
|
+
*
|
|
218
|
+
* @param changes The values to write, keyed by storage key.
|
|
219
|
+
* @param options Create-only, replace, or expected-version conditions.
|
|
220
|
+
* @returns A result for every supplied key, including Blob concurrency-condition outcomes.
|
|
221
|
+
*/
|
|
222
|
+
async write<T extends object = Record<string, unknown>> (changes: Record<string, T>, options?: StorageWriteOptions): Promise<StorageWriteResults> {
|
|
223
|
+
return trace(BlobsStorageTraceDefinitions.write, async ({ record }) => {
|
|
224
|
+
record({ keyCount: changes ? Object.keys(changes).length : 0 })
|
|
225
|
+
validateExpectedVersion(options?.expectedVersion)
|
|
226
|
+
validateV2Changes(changes)
|
|
227
|
+
const mode = options?.mode ?? StorageWriteMode.Upsert
|
|
228
|
+
validateWriteMode(mode)
|
|
229
|
+
if (Object.keys(changes).length === 0) return {}
|
|
230
|
+
await this.internals._initialize()
|
|
231
|
+
const results: StorageWriteResults = {}
|
|
232
|
+
const expiresAt = getStorageWriteExpiry(options)
|
|
233
|
+
await Promise.all(Object.entries(changes).map(async ([key, change]) => {
|
|
234
|
+
const blob = this.internals._containerClient.getBlockBlobClient(sanitizeBlobKey(key))
|
|
235
|
+
const needsCurrentVersion = mode !== StorageWriteMode.Upsert || options?.expectedVersion !== undefined
|
|
236
|
+
const currentVersion = needsCurrentVersion
|
|
237
|
+
? await this.internals.getVersion(key)
|
|
238
|
+
: undefined
|
|
239
|
+
if (mode === StorageWriteMode.CreateOnly && currentVersion !== undefined) {
|
|
240
|
+
results[key] = { key, status: StorageOperationStatus.Conflict, version: currentVersion }
|
|
241
|
+
return
|
|
242
|
+
}
|
|
243
|
+
if (mode === StorageWriteMode.Replace && currentVersion === undefined) {
|
|
244
|
+
results[key] = { key, status: StorageOperationStatus.NotFound }
|
|
245
|
+
return
|
|
246
|
+
}
|
|
247
|
+
if (options?.expectedVersion !== undefined && options.expectedVersion !== currentVersion) {
|
|
248
|
+
results[key] = { key, status: StorageOperationStatus.ConditionNotMet, version: currentVersion }
|
|
249
|
+
return
|
|
250
|
+
}
|
|
251
|
+
const serialized = JSON.stringify(change)
|
|
252
|
+
const conditions = mode === StorageWriteMode.CreateOnly
|
|
253
|
+
? { ifNoneMatch: '*' }
|
|
254
|
+
: options?.expectedVersion !== undefined
|
|
255
|
+
? { ifMatch: options.expectedVersion }
|
|
256
|
+
: mode === StorageWriteMode.Replace && currentVersion !== undefined
|
|
257
|
+
? { ifMatch: currentVersion }
|
|
258
|
+
: undefined
|
|
259
|
+
try {
|
|
260
|
+
const response = await blob.upload(serialized, serialized.length, {
|
|
261
|
+
conditions,
|
|
262
|
+
blobHTTPHeaders: { blobContentType: 'application/json' },
|
|
263
|
+
metadata: expiresAt === undefined ? {} : { [expirationMetadataKey]: expiresAt.toString() },
|
|
264
|
+
})
|
|
265
|
+
results[key] = { key, status: StorageOperationStatus.Succeeded, version: response.etag }
|
|
266
|
+
} catch (err) {
|
|
267
|
+
const statusCode = (err as { statusCode?: number }).statusCode
|
|
268
|
+
if (mode === StorageWriteMode.CreateOnly && (statusCode === 409 || statusCode === 412)) {
|
|
269
|
+
results[key] = { key, status: StorageOperationStatus.Conflict, version: currentVersion }
|
|
270
|
+
return
|
|
271
|
+
}
|
|
272
|
+
if (statusCode === 412) {
|
|
273
|
+
results[key] = { key, status: StorageOperationStatus.ConditionNotMet, version: currentVersion }
|
|
274
|
+
return
|
|
275
|
+
}
|
|
276
|
+
if (statusCode === 404) {
|
|
277
|
+
results[key] = { key, status: StorageOperationStatus.NotFound }
|
|
278
|
+
return
|
|
279
|
+
}
|
|
280
|
+
throwStorageOperationError('write', key, err)
|
|
281
|
+
}
|
|
282
|
+
}))
|
|
283
|
+
return results
|
|
284
|
+
})
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Deletes Blob values with an optional ETag version condition.
|
|
289
|
+
*
|
|
290
|
+
* @param keys The keys to delete. Empty batches are valid.
|
|
291
|
+
* @param options An optional expected Blob ETag version.
|
|
292
|
+
* @returns A result for every supplied key.
|
|
293
|
+
*/
|
|
294
|
+
async delete (keys: string[], options?: StorageDeleteOptions): Promise<StorageDeleteResults> {
|
|
295
|
+
return trace(BlobsStorageTraceDefinitions.delete, async ({ record }) => {
|
|
296
|
+
record({ keyCount: keys?.length ?? 0 })
|
|
297
|
+
validateExpectedVersion(options?.expectedVersion)
|
|
298
|
+
validateV2Keys(keys)
|
|
299
|
+
if (keys.length === 0) return {}
|
|
300
|
+
await this.internals._initialize()
|
|
301
|
+
const results: StorageDeleteResults = {}
|
|
302
|
+
await Promise.all(keys.map(async key => {
|
|
303
|
+
let currentVersion: string | undefined
|
|
304
|
+
if (options?.expectedVersion !== undefined) {
|
|
305
|
+
currentVersion = await this.internals.getVersion(key)
|
|
306
|
+
if (currentVersion === undefined) {
|
|
307
|
+
results[key] = { key, status: StorageOperationStatus.NotFound }
|
|
308
|
+
return
|
|
309
|
+
}
|
|
310
|
+
if (options.expectedVersion !== currentVersion) {
|
|
311
|
+
results[key] = { key, status: StorageOperationStatus.ConditionNotMet, version: currentVersion }
|
|
312
|
+
return
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
try {
|
|
316
|
+
const deleteOptions = options?.expectedVersion === undefined
|
|
317
|
+
? undefined
|
|
318
|
+
: { conditions: { ifMatch: options.expectedVersion } }
|
|
319
|
+
await this.internals._containerClient.deleteBlob(sanitizeBlobKey(key), deleteOptions)
|
|
320
|
+
results[key] = { key, status: StorageOperationStatus.Succeeded, version: currentVersion }
|
|
321
|
+
} catch (err) {
|
|
322
|
+
const statusCode = (err as { statusCode?: number }).statusCode
|
|
323
|
+
if (statusCode === 412) {
|
|
324
|
+
results[key] = { key, status: StorageOperationStatus.ConditionNotMet, version: currentVersion }
|
|
325
|
+
return
|
|
326
|
+
}
|
|
327
|
+
if (statusCode === 404) {
|
|
328
|
+
results[key] = { key, status: StorageOperationStatus.NotFound }
|
|
329
|
+
return
|
|
330
|
+
}
|
|
331
|
+
throwStorageOperationError('delete', key, err)
|
|
332
|
+
}
|
|
333
|
+
}))
|
|
334
|
+
return results
|
|
196
335
|
})
|
|
197
336
|
}
|
|
198
337
|
}
|
|
338
|
+
|
|
339
|
+
function validateExpectedVersion (expectedVersion: string | undefined): void {
|
|
340
|
+
if (expectedVersion === '') throw ExceptionHelper.generateException(RangeError, Errors.StorageV2ExpectedVersionEmpty)
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function validateWriteMode (mode: StorageWriteMode): void {
|
|
344
|
+
if (!Object.values(StorageWriteMode).includes(mode)) {
|
|
345
|
+
throw ExceptionHelper.generateException(RangeError, Errors.StorageV2WriteModeUnsupported, undefined, { mode: String(mode) })
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
function validateV2Changes (changes: Record<string, unknown>): void {
|
|
350
|
+
if (changes === null || typeof changes !== 'object' || Array.isArray(changes)) {
|
|
351
|
+
throw ExceptionHelper.generateException(ReferenceError, Errors.StorageV2ChangesRequired)
|
|
352
|
+
}
|
|
353
|
+
if (Object.keys(changes).some(key => key.trim() === '')) {
|
|
354
|
+
throw ExceptionHelper.generateException(ReferenceError, Errors.StorageV2KeyRequired)
|
|
355
|
+
}
|
|
356
|
+
if (Object.values(changes).some(value => value === null || typeof value !== 'object' || Array.isArray(value))) {
|
|
357
|
+
throw ExceptionHelper.generateException(TypeError, Errors.StorageV2ValueRequired)
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
function validateV2Keys (keys: string[]): void {
|
|
362
|
+
if (!Array.isArray(keys)) throw ExceptionHelper.generateException(ReferenceError, Errors.StorageV2KeysRequired)
|
|
363
|
+
if (keys.some(key => typeof key !== 'string' || key.trim() === '')) {
|
|
364
|
+
throw ExceptionHelper.generateException(ReferenceError, Errors.StorageV2KeyRequired)
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
function throwStorageOperationError (operation: string, key: string, error: unknown): never {
|
|
369
|
+
throw ExceptionHelper.generateException(Error, Errors.StorageV2OperationFailed, error instanceof Error ? error : undefined, { operation, key })
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
function isExpired (expiresAt?: string): boolean {
|
|
373
|
+
if (expiresAt === undefined) return false
|
|
374
|
+
const timestamp = Number(expiresAt)
|
|
375
|
+
return Number.isFinite(timestamp) && timestamp <= Date.now()
|
|
376
|
+
}
|