@azure/storage-file-share 12.23.0-beta.1 → 12.24.0-alpha.20240612.4
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.js +472 -380
- package/dist/index.js.map +1 -1
- package/dist-esm/storage-blob/src/BatchResponseParser.js.map +1 -1
- package/dist-esm/storage-blob/src/BatchUtils.js.map +1 -1
- package/dist-esm/storage-blob/src/BlobBatch.js +5 -5
- package/dist-esm/storage-blob/src/BlobBatch.js.map +1 -1
- package/dist-esm/storage-blob/src/BlobBatchClient.js.map +1 -1
- package/dist-esm/storage-blob/src/BlobDownloadResponse.js.map +1 -1
- package/dist-esm/storage-blob/src/BlobLeaseClient.js +2 -2
- package/dist-esm/storage-blob/src/BlobLeaseClient.js.map +1 -1
- package/dist-esm/storage-blob/src/BlobQueryResponse.js.map +1 -1
- package/dist-esm/storage-blob/src/BlobServiceClient.js +8 -8
- package/dist-esm/storage-blob/src/BlobServiceClient.js.map +1 -1
- package/dist-esm/storage-blob/src/Clients.js +27 -7
- package/dist-esm/storage-blob/src/Clients.js.map +1 -1
- package/dist-esm/storage-blob/src/ContainerClient.js +30 -12
- package/dist-esm/storage-blob/src/ContainerClient.js.map +1 -1
- package/dist-esm/storage-blob/src/PageBlobRangeResponse.js.map +1 -1
- package/dist-esm/storage-blob/src/Pipeline.js +1 -1
- package/dist-esm/storage-blob/src/Pipeline.js.map +1 -1
- package/dist-esm/storage-blob/src/Range.js.map +1 -1
- package/dist-esm/storage-blob/src/StorageContextClient.js.map +1 -1
- package/dist-esm/storage-blob/src/credentials/AnonymousCredential.js.map +1 -1
- package/dist-esm/storage-blob/src/credentials/Credential.js.map +1 -1
- package/dist-esm/storage-blob/src/credentials/StorageSharedKeyCredential.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/models/index.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/models/mappers.js +2383 -2362
- package/dist-esm/storage-blob/src/generated/src/models/mappers.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/models/parameters.js +444 -444
- package/dist-esm/storage-blob/src/generated/src/models/parameters.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operations/appendBlob.js +20 -20
- package/dist-esm/storage-blob/src/generated/src/operations/appendBlob.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operations/blob.js +144 -136
- package/dist-esm/storage-blob/src/generated/src/operations/blob.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operations/blockBlob.js +33 -33
- package/dist-esm/storage-blob/src/generated/src/operations/blockBlob.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operations/container.js +117 -109
- package/dist-esm/storage-blob/src/generated/src/operations/container.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operations/pageBlob.js +47 -47
- package/dist-esm/storage-blob/src/generated/src/operations/pageBlob.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operations/service.js +56 -48
- package/dist-esm/storage-blob/src/generated/src/operations/service.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/appendBlob.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/blob.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/blockBlob.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/container.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/pageBlob.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/operationsInterfaces/service.js.map +1 -1
- package/dist-esm/storage-blob/src/generated/src/storageClient.js +5 -5
- package/dist-esm/storage-blob/src/generated/src/storageClient.js.map +1 -1
- package/dist-esm/storage-blob/src/generatedModels.js.map +1 -1
- package/dist-esm/storage-blob/src/index.js +1 -1
- package/dist-esm/storage-blob/src/index.js.map +1 -1
- package/dist-esm/storage-blob/src/models.js +7 -0
- package/dist-esm/storage-blob/src/models.js.map +1 -1
- package/dist-esm/storage-blob/src/policies/RequestPolicy.js.map +1 -1
- package/dist-esm/storage-blob/src/policies/StorageBrowserPolicy.js.map +1 -1
- package/dist-esm/storage-blob/src/policies/StorageBrowserPolicyV2.js.map +1 -1
- package/dist-esm/storage-blob/src/policies/StorageRetryPolicy.js +15 -0
- package/dist-esm/storage-blob/src/policies/StorageRetryPolicy.js.map +1 -1
- package/dist-esm/storage-blob/src/policies/StorageRetryPolicyV2.js +15 -0
- package/dist-esm/storage-blob/src/policies/StorageRetryPolicyV2.js.map +1 -1
- package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicy.js +2 -1
- package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicy.js.map +1 -1
- package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.browser.js.map +1 -1
- package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.js +2 -1
- package/dist-esm/storage-blob/src/policies/StorageSharedKeyCredentialPolicyV2.js.map +1 -1
- package/dist-esm/storage-blob/src/pollers/BlobStartCopyFromUrlPoller.js.map +1 -1
- package/dist-esm/storage-blob/src/sas/AccountSASPermissions.js +1 -1
- package/dist-esm/storage-blob/src/sas/AccountSASPermissions.js.map +1 -1
- package/dist-esm/storage-blob/src/sas/AccountSASResourceTypes.js.map +1 -1
- package/dist-esm/storage-blob/src/sas/AccountSASServices.js.map +1 -1
- package/dist-esm/storage-blob/src/sas/AccountSASSignatureValues.js.map +1 -1
- package/dist-esm/storage-blob/src/sas/BlobSASPermissions.js.map +1 -1
- package/dist-esm/storage-blob/src/sas/BlobSASSignatureValues.js +2 -2
- package/dist-esm/storage-blob/src/sas/BlobSASSignatureValues.js.map +1 -1
- package/dist-esm/storage-blob/src/sas/ContainerSASPermissions.js.map +1 -1
- package/dist-esm/storage-blob/src/sas/SASQueryParameters.js +6 -6
- package/dist-esm/storage-blob/src/sas/SASQueryParameters.js.map +1 -1
- package/dist-esm/storage-blob/src/utils/Batch.js.map +1 -1
- package/dist-esm/storage-blob/src/utils/BlobQuickQueryStream.js.map +1 -1
- package/dist-esm/storage-blob/src/utils/Mutex.js.map +1 -1
- package/dist-esm/storage-blob/src/utils/RetriableReadableStream.js.map +1 -1
- package/dist-esm/storage-blob/src/utils/SharedKeyComparator.js +73 -0
- package/dist-esm/storage-blob/src/utils/SharedKeyComparator.js.map +1 -0
- package/dist-esm/storage-blob/src/utils/cache.js.map +1 -1
- package/dist-esm/storage-blob/src/utils/constants.js +5 -2
- package/dist-esm/storage-blob/src/utils/constants.js.map +1 -1
- package/dist-esm/storage-blob/src/utils/utils.common.js.map +1 -1
- package/dist-esm/storage-blob/src/utils/utils.node.js.map +1 -1
- package/dist-esm/storage-file-share/src/AccountSASPermissions.js.map +1 -1
- package/dist-esm/storage-file-share/src/AccountSASResourceTypes.js.map +1 -1
- package/dist-esm/storage-file-share/src/AccountSASServices.js.map +1 -1
- package/dist-esm/storage-file-share/src/AccountSASSignatureValues.js +1 -1
- package/dist-esm/storage-file-share/src/AccountSASSignatureValues.js.map +1 -1
- package/dist-esm/storage-file-share/src/Clients.js +19 -20
- package/dist-esm/storage-file-share/src/Clients.js.map +1 -1
- package/dist-esm/storage-file-share/src/FileDownloadResponse.js.map +1 -1
- package/dist-esm/storage-file-share/src/FileSASPermissions.js.map +1 -1
- package/dist-esm/storage-file-share/src/FileSASSignatureValues.js.map +1 -1
- package/dist-esm/storage-file-share/src/FileSystemAttributes.js.map +1 -1
- package/dist-esm/storage-file-share/src/Pipeline.js +259 -0
- package/dist-esm/storage-file-share/src/Pipeline.js.map +1 -0
- package/dist-esm/storage-file-share/src/Range.js.map +1 -1
- package/dist-esm/storage-file-share/src/SASQueryParameters.js.map +1 -1
- package/dist-esm/storage-file-share/src/ShareClientInternal.js.map +1 -1
- package/dist-esm/storage-file-share/src/ShareSASPermissions.js.map +1 -1
- package/dist-esm/storage-file-share/src/ShareServiceClient.js +6 -7
- package/dist-esm/storage-file-share/src/ShareServiceClient.js.map +1 -1
- package/dist-esm/storage-file-share/src/StorageClient.js +1 -1
- package/dist-esm/storage-file-share/src/StorageClient.js.map +1 -1
- package/dist-esm/storage-file-share/src/StorageContextClient.js.map +1 -1
- package/dist-esm/storage-file-share/src/StorageRetryPolicyFactory.js +26 -0
- package/dist-esm/storage-file-share/src/StorageRetryPolicyFactory.js.map +1 -0
- package/dist-esm/storage-file-share/src/generated/src/models/index.js +2 -0
- package/dist-esm/storage-file-share/src/generated/src/models/index.js.map +1 -1
- package/dist-esm/storage-file-share/src/generated/src/models/mappers.js +29 -0
- package/dist-esm/storage-file-share/src/generated/src/models/mappers.js.map +1 -1
- package/dist-esm/storage-file-share/src/generated/src/models/parameters.js +21 -1
- package/dist-esm/storage-file-share/src/generated/src/models/parameters.js.map +1 -1
- package/dist-esm/storage-file-share/src/generated/src/operations/file.js +3 -1
- package/dist-esm/storage-file-share/src/generated/src/operations/file.js.map +1 -1
- package/dist-esm/storage-file-share/src/generated/src/operations/share.js +3 -1
- package/dist-esm/storage-file-share/src/generated/src/operations/share.js.map +1 -1
- package/dist-esm/storage-file-share/src/generated/src/storageClient.js +2 -2
- package/dist-esm/storage-file-share/src/generated/src/storageClient.js.map +1 -1
- package/dist-esm/storage-file-share/src/generatedModels.js.map +1 -1
- package/dist-esm/storage-file-share/src/index.browser.js +2 -2
- package/dist-esm/storage-file-share/src/index.browser.js.map +1 -1
- package/dist-esm/storage-file-share/src/index.js +3 -2
- package/dist-esm/storage-file-share/src/index.js.map +1 -1
- package/dist-esm/storage-file-share/src/models.js +16 -0
- package/dist-esm/storage-file-share/src/models.js.map +1 -1
- package/dist-esm/storage-file-share/src/policies/StorageRetryPolicy.js +220 -0
- package/dist-esm/storage-file-share/src/policies/StorageRetryPolicy.js.map +1 -0
- package/dist-esm/storage-file-share/src/policies/StorageRetryPolicyV2.js +176 -0
- package/dist-esm/storage-file-share/src/policies/StorageRetryPolicyV2.js.map +1 -0
- package/dist-esm/storage-file-share/src/utils/Batch.js.map +1 -1
- package/dist-esm/storage-file-share/src/utils/BufferScheduler.js.map +1 -1
- package/dist-esm/storage-file-share/src/utils/RetriableReadableStream.js.map +1 -1
- package/dist-esm/storage-file-share/src/utils/constants.js +9 -2
- package/dist-esm/storage-file-share/src/utils/constants.js.map +1 -1
- package/dist-esm/storage-file-share/src/utils/utils.common.js.map +1 -1
- package/dist-esm/storage-file-share/src/utils/utils.node.js.map +1 -1
- package/package.json +19 -34
- package/types/latest/storage-file-share.d.ts +52 -17
- package/dist-esm/storage-blob/src/BatchUtils.browser.js +0 -11
- package/dist-esm/storage-blob/src/BatchUtils.browser.js.map +0 -1
- package/dist-esm/storage-blob/src/BlobDownloadResponse.browser.js +0 -7
- package/dist-esm/storage-blob/src/BlobDownloadResponse.browser.js.map +0 -1
- package/dist-esm/storage-blob/src/BlobQueryResponse.browser.js +0 -362
- package/dist-esm/storage-blob/src/BlobQueryResponse.browser.js.map +0 -1
- package/dist-esm/storage-blob/src/index.browser.js +0 -23
- package/dist-esm/storage-blob/src/index.browser.js.map +0 -1
- package/dist-esm/storage-blob/src/utils/utils.browser.js +0 -48
- package/dist-esm/storage-blob/src/utils/utils.browser.js.map +0 -1
- package/types/3.1/storage-file-share.d.ts +0 -6941
package/dist/index.js
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
'use strict';
|
2
2
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
4
|
+
|
3
5
|
var coreRestPipeline = require('@azure/core-rest-pipeline');
|
4
6
|
var coreUtil = require('@azure/core-util');
|
5
7
|
var tslib = require('tslib');
|
@@ -7,16 +9,14 @@ var coreAuth = require('@azure/core-auth');
|
|
7
9
|
var coreHttpCompat = require('@azure/core-http-compat');
|
8
10
|
var coreClient = require('@azure/core-client');
|
9
11
|
var coreXml = require('@azure/core-xml');
|
10
|
-
var logger$
|
12
|
+
var logger$1 = require('@azure/logger');
|
11
13
|
var abortController = require('@azure/abort-controller');
|
12
14
|
var crypto = require('crypto');
|
13
15
|
var coreTracing = require('@azure/core-tracing');
|
14
|
-
require('@azure/core-paging');
|
15
16
|
var stream = require('stream');
|
16
17
|
var events = require('events');
|
17
18
|
var fs = require('fs');
|
18
19
|
var util = require('util');
|
19
|
-
var uuid = require('uuid');
|
20
20
|
|
21
21
|
function _interopNamespaceDefault(e) {
|
22
22
|
var n = Object.create(null);
|
@@ -336,13 +336,17 @@ function ipRangeToString(ipRange) {
|
|
336
336
|
|
337
337
|
// Copyright (c) Microsoft Corporation.
|
338
338
|
// Licensed under the MIT license.
|
339
|
-
const SDK_VERSION
|
340
|
-
const SERVICE_VERSION = "
|
339
|
+
const SDK_VERSION = "12.24.0-beta.1";
|
340
|
+
const SERVICE_VERSION = "2024-08-04";
|
341
341
|
const FILE_MAX_SIZE_BYTES = 4 * 1024 * 1024 * 1024 * 1024; // 4TB
|
342
342
|
const FILE_RANGE_MAX_SIZE_BYTES = 4 * 1024 * 1024; // 4MB
|
343
343
|
const DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS = 5;
|
344
344
|
const DEFAULT_HIGH_LEVEL_CONCURRENCY = 5;
|
345
345
|
const REQUEST_TIMEOUT = 100 * 1000; // In ms
|
346
|
+
/**
|
347
|
+
* The OAuth scope to use with Azure Storage.
|
348
|
+
*/
|
349
|
+
const StorageOAuthScopes = "https://storage.azure.com/.default";
|
346
350
|
const URLConstants$1 = {
|
347
351
|
Parameters: {
|
348
352
|
FORCE_BROWSER_NO_CACHE: "_",
|
@@ -353,6 +357,90 @@ const URLConstants$1 = {
|
|
353
357
|
};
|
354
358
|
const FileAttributesPreserve = "Preserve";
|
355
359
|
const FileAttributesNone = "None";
|
360
|
+
const StorageFileLoggingAllowedHeaderNames = [
|
361
|
+
"Access-Control-Allow-Origin",
|
362
|
+
"Cache-Control",
|
363
|
+
"Content-Length",
|
364
|
+
"Content-Type",
|
365
|
+
"Date",
|
366
|
+
"Request-Id",
|
367
|
+
"traceparent",
|
368
|
+
"Transfer-Encoding",
|
369
|
+
"User-Agent",
|
370
|
+
"x-ms-client-request-id",
|
371
|
+
"x-ms-date",
|
372
|
+
"x-ms-error-code",
|
373
|
+
"x-ms-request-id",
|
374
|
+
"x-ms-return-client-request-id",
|
375
|
+
"x-ms-version",
|
376
|
+
"Accept-Ranges",
|
377
|
+
"Content-Disposition",
|
378
|
+
"Content-Encoding",
|
379
|
+
"Content-Language",
|
380
|
+
"Content-MD5",
|
381
|
+
"Content-Range",
|
382
|
+
"ETag",
|
383
|
+
"Last-Modified",
|
384
|
+
"Server",
|
385
|
+
"Vary",
|
386
|
+
"x-ms-content-crc64",
|
387
|
+
"x-ms-copy-action",
|
388
|
+
"x-ms-copy-completion-time",
|
389
|
+
"x-ms-copy-id",
|
390
|
+
"x-ms-copy-progress",
|
391
|
+
"x-ms-copy-status",
|
392
|
+
"x-ms-has-immutability-policy",
|
393
|
+
"x-ms-has-legal-hold",
|
394
|
+
"x-ms-lease-state",
|
395
|
+
"x-ms-lease-status",
|
396
|
+
"x-ms-range",
|
397
|
+
"x-ms-request-server-encrypted",
|
398
|
+
"x-ms-server-encrypted",
|
399
|
+
"x-ms-snapshot",
|
400
|
+
"x-ms-source-range",
|
401
|
+
"x-ms-cache-control",
|
402
|
+
"x-ms-content-disposition",
|
403
|
+
"x-ms-content-encoding",
|
404
|
+
"x-ms-content-language",
|
405
|
+
"x-ms-content-length",
|
406
|
+
"x-ms-content-md5",
|
407
|
+
"x-ms-content-type",
|
408
|
+
"x-ms-copy-source-error-code",
|
409
|
+
"x-ms-copy-source-status-code",
|
410
|
+
"x-ms-file-attributes",
|
411
|
+
"x-ms-file-change-time",
|
412
|
+
"x-ms-file-creation-time",
|
413
|
+
"x-ms-file-id",
|
414
|
+
"x-ms-file-last-write-time",
|
415
|
+
"x-ms-file-parent-id",
|
416
|
+
"x-ms-handle-id",
|
417
|
+
"x-ms-number-of-handles-closed",
|
418
|
+
"x-ms-recursive",
|
419
|
+
"x-ms-share-quota",
|
420
|
+
"x-ms-type",
|
421
|
+
"x-ms-write",
|
422
|
+
];
|
423
|
+
const StorageFileLoggingAllowedQueryParameters = [
|
424
|
+
"comp",
|
425
|
+
"maxresults",
|
426
|
+
"rscc",
|
427
|
+
"rscd",
|
428
|
+
"rsce",
|
429
|
+
"rscl",
|
430
|
+
"rsct",
|
431
|
+
"se",
|
432
|
+
"si",
|
433
|
+
"sip",
|
434
|
+
"sp",
|
435
|
+
"spr",
|
436
|
+
"sr",
|
437
|
+
"srt",
|
438
|
+
"ss",
|
439
|
+
"st",
|
440
|
+
"sv",
|
441
|
+
"copyid",
|
442
|
+
"restype",
|
443
|
+
];
|
356
444
|
/// List of ports used for path style addressing.
|
357
445
|
/// Path style addressing means that storage account is put in URI's Path segment in instead of in host.
|
358
446
|
const PathStylePorts = [
|
@@ -606,6 +694,36 @@ function truncatedISO8061Date(date, withMilliseconds = true) {
|
|
606
694
|
? dateString.substring(0, dateString.length - 1) + "0000" + "Z"
|
607
695
|
: dateString.substring(0, dateString.length - 5) + "Z";
|
608
696
|
}
|
697
|
+
/**
|
698
|
+
* Delay specified time interval.
|
699
|
+
*
|
700
|
+
* @param timeInMs -
|
701
|
+
* @param aborter -
|
702
|
+
* @param abortError -
|
703
|
+
*/
|
704
|
+
async function delay(timeInMs, aborter, abortError) {
|
705
|
+
return new Promise((resolve, reject) => {
|
706
|
+
/* eslint-disable-next-line prefer-const */
|
707
|
+
let timeout;
|
708
|
+
const abortHandler = () => {
|
709
|
+
if (timeout !== undefined) {
|
710
|
+
clearTimeout(timeout);
|
711
|
+
}
|
712
|
+
reject(abortError);
|
713
|
+
};
|
714
|
+
const resolveHandler = () => {
|
715
|
+
if (aborter !== undefined) {
|
716
|
+
aborter.removeEventListener("abort", abortHandler);
|
717
|
+
}
|
718
|
+
resolve();
|
719
|
+
};
|
720
|
+
/* eslint-disable-next-line prefer-const */
|
721
|
+
timeout = setTimeout(resolveHandler, timeInMs);
|
722
|
+
if (aborter !== undefined) {
|
723
|
+
aborter.addEventListener("abort", abortHandler);
|
724
|
+
}
|
725
|
+
});
|
726
|
+
}
|
609
727
|
/**
|
610
728
|
* Extracts account name from the url
|
611
729
|
* @param url - url to extract the account name from
|
@@ -1005,7 +1123,7 @@ function generateAccountSASQueryParameters(accountSASSignatureValues, sharedKeyC
|
|
1005
1123
|
accountSASSignatureValues.ipRange ? ipRangeToString(accountSASSignatureValues.ipRange) : "",
|
1006
1124
|
accountSASSignatureValues.protocol ? accountSASSignatureValues.protocol : "",
|
1007
1125
|
version,
|
1008
|
-
"",
|
1126
|
+
"", // Reserved for encryption scope
|
1009
1127
|
"", // Account SAS requires an additional newline character
|
1010
1128
|
].join("\n");
|
1011
1129
|
}
|
@@ -1279,7 +1397,7 @@ function getCanonicalName(accountName, shareName, filePath) {
|
|
1279
1397
|
/**
|
1280
1398
|
* The `@azure/logger` configuration for this package.
|
1281
1399
|
*/
|
1282
|
-
const logger
|
1400
|
+
const logger = logger$1.createClientLogger("storage-file-share");
|
1283
1401
|
|
1284
1402
|
// Copyright (c) Microsoft Corporation.
|
1285
1403
|
// Licensed under the MIT license.
|
@@ -1321,294 +1439,6 @@ class BaseRequestPolicy {
|
|
1321
1439
|
}
|
1322
1440
|
}
|
1323
1441
|
|
1324
|
-
// Copyright (c) Microsoft Corporation.
|
1325
|
-
// Licensed under the MIT license.
|
1326
|
-
const SDK_VERSION = "12.23.0-beta.1";
|
1327
|
-
/**
|
1328
|
-
* The OAuth scope to use with Azure Storage.
|
1329
|
-
*/
|
1330
|
-
const StorageOAuthScopes = "https://storage.azure.com/.default";
|
1331
|
-
const URLConstants = {
|
1332
|
-
Parameters: {
|
1333
|
-
FORCE_BROWSER_NO_CACHE: "_",
|
1334
|
-
SIGNATURE: "sig",
|
1335
|
-
SNAPSHOT: "snapshot",
|
1336
|
-
VERSIONID: "versionid",
|
1337
|
-
TIMEOUT: "timeout",
|
1338
|
-
},
|
1339
|
-
};
|
1340
|
-
const HeaderConstants = {
|
1341
|
-
AUTHORIZATION: "Authorization",
|
1342
|
-
AUTHORIZATION_SCHEME: "Bearer",
|
1343
|
-
CONTENT_ENCODING: "Content-Encoding",
|
1344
|
-
CONTENT_ID: "Content-ID",
|
1345
|
-
CONTENT_LANGUAGE: "Content-Language",
|
1346
|
-
CONTENT_LENGTH: "Content-Length",
|
1347
|
-
CONTENT_MD5: "Content-Md5",
|
1348
|
-
CONTENT_TRANSFER_ENCODING: "Content-Transfer-Encoding",
|
1349
|
-
CONTENT_TYPE: "Content-Type",
|
1350
|
-
COOKIE: "Cookie",
|
1351
|
-
DATE: "date",
|
1352
|
-
IF_MATCH: "if-match",
|
1353
|
-
IF_MODIFIED_SINCE: "if-modified-since",
|
1354
|
-
IF_NONE_MATCH: "if-none-match",
|
1355
|
-
IF_UNMODIFIED_SINCE: "if-unmodified-since",
|
1356
|
-
PREFIX_FOR_STORAGE: "x-ms-",
|
1357
|
-
RANGE: "Range",
|
1358
|
-
USER_AGENT: "User-Agent",
|
1359
|
-
X_MS_CLIENT_REQUEST_ID: "x-ms-client-request-id",
|
1360
|
-
X_MS_COPY_SOURCE: "x-ms-copy-source",
|
1361
|
-
X_MS_DATE: "x-ms-date",
|
1362
|
-
X_MS_ERROR_CODE: "x-ms-error-code",
|
1363
|
-
X_MS_VERSION: "x-ms-version",
|
1364
|
-
};
|
1365
|
-
const StorageBlobLoggingAllowedHeaderNames = [
|
1366
|
-
"Access-Control-Allow-Origin",
|
1367
|
-
"Cache-Control",
|
1368
|
-
"Content-Length",
|
1369
|
-
"Content-Type",
|
1370
|
-
"Date",
|
1371
|
-
"Request-Id",
|
1372
|
-
"traceparent",
|
1373
|
-
"Transfer-Encoding",
|
1374
|
-
"User-Agent",
|
1375
|
-
"x-ms-client-request-id",
|
1376
|
-
"x-ms-date",
|
1377
|
-
"x-ms-error-code",
|
1378
|
-
"x-ms-request-id",
|
1379
|
-
"x-ms-return-client-request-id",
|
1380
|
-
"x-ms-version",
|
1381
|
-
"Accept-Ranges",
|
1382
|
-
"Content-Disposition",
|
1383
|
-
"Content-Encoding",
|
1384
|
-
"Content-Language",
|
1385
|
-
"Content-MD5",
|
1386
|
-
"Content-Range",
|
1387
|
-
"ETag",
|
1388
|
-
"Last-Modified",
|
1389
|
-
"Server",
|
1390
|
-
"Vary",
|
1391
|
-
"x-ms-content-crc64",
|
1392
|
-
"x-ms-copy-action",
|
1393
|
-
"x-ms-copy-completion-time",
|
1394
|
-
"x-ms-copy-id",
|
1395
|
-
"x-ms-copy-progress",
|
1396
|
-
"x-ms-copy-status",
|
1397
|
-
"x-ms-has-immutability-policy",
|
1398
|
-
"x-ms-has-legal-hold",
|
1399
|
-
"x-ms-lease-state",
|
1400
|
-
"x-ms-lease-status",
|
1401
|
-
"x-ms-range",
|
1402
|
-
"x-ms-request-server-encrypted",
|
1403
|
-
"x-ms-server-encrypted",
|
1404
|
-
"x-ms-snapshot",
|
1405
|
-
"x-ms-source-range",
|
1406
|
-
"If-Match",
|
1407
|
-
"If-Modified-Since",
|
1408
|
-
"If-None-Match",
|
1409
|
-
"If-Unmodified-Since",
|
1410
|
-
"x-ms-access-tier",
|
1411
|
-
"x-ms-access-tier-change-time",
|
1412
|
-
"x-ms-access-tier-inferred",
|
1413
|
-
"x-ms-account-kind",
|
1414
|
-
"x-ms-archive-status",
|
1415
|
-
"x-ms-blob-append-offset",
|
1416
|
-
"x-ms-blob-cache-control",
|
1417
|
-
"x-ms-blob-committed-block-count",
|
1418
|
-
"x-ms-blob-condition-appendpos",
|
1419
|
-
"x-ms-blob-condition-maxsize",
|
1420
|
-
"x-ms-blob-content-disposition",
|
1421
|
-
"x-ms-blob-content-encoding",
|
1422
|
-
"x-ms-blob-content-language",
|
1423
|
-
"x-ms-blob-content-length",
|
1424
|
-
"x-ms-blob-content-md5",
|
1425
|
-
"x-ms-blob-content-type",
|
1426
|
-
"x-ms-blob-public-access",
|
1427
|
-
"x-ms-blob-sequence-number",
|
1428
|
-
"x-ms-blob-type",
|
1429
|
-
"x-ms-copy-destination-snapshot",
|
1430
|
-
"x-ms-creation-time",
|
1431
|
-
"x-ms-default-encryption-scope",
|
1432
|
-
"x-ms-delete-snapshots",
|
1433
|
-
"x-ms-delete-type-permanent",
|
1434
|
-
"x-ms-deny-encryption-scope-override",
|
1435
|
-
"x-ms-encryption-algorithm",
|
1436
|
-
"x-ms-if-sequence-number-eq",
|
1437
|
-
"x-ms-if-sequence-number-le",
|
1438
|
-
"x-ms-if-sequence-number-lt",
|
1439
|
-
"x-ms-incremental-copy",
|
1440
|
-
"x-ms-lease-action",
|
1441
|
-
"x-ms-lease-break-period",
|
1442
|
-
"x-ms-lease-duration",
|
1443
|
-
"x-ms-lease-id",
|
1444
|
-
"x-ms-lease-time",
|
1445
|
-
"x-ms-page-write",
|
1446
|
-
"x-ms-proposed-lease-id",
|
1447
|
-
"x-ms-range-get-content-md5",
|
1448
|
-
"x-ms-rehydrate-priority",
|
1449
|
-
"x-ms-sequence-number-action",
|
1450
|
-
"x-ms-sku-name",
|
1451
|
-
"x-ms-source-content-md5",
|
1452
|
-
"x-ms-source-if-match",
|
1453
|
-
"x-ms-source-if-modified-since",
|
1454
|
-
"x-ms-source-if-none-match",
|
1455
|
-
"x-ms-source-if-unmodified-since",
|
1456
|
-
"x-ms-tag-count",
|
1457
|
-
"x-ms-encryption-key-sha256",
|
1458
|
-
"x-ms-if-tags",
|
1459
|
-
"x-ms-source-if-tags",
|
1460
|
-
];
|
1461
|
-
const StorageBlobLoggingAllowedQueryParameters = [
|
1462
|
-
"comp",
|
1463
|
-
"maxresults",
|
1464
|
-
"rscc",
|
1465
|
-
"rscd",
|
1466
|
-
"rsce",
|
1467
|
-
"rscl",
|
1468
|
-
"rsct",
|
1469
|
-
"se",
|
1470
|
-
"si",
|
1471
|
-
"sip",
|
1472
|
-
"sp",
|
1473
|
-
"spr",
|
1474
|
-
"sr",
|
1475
|
-
"srt",
|
1476
|
-
"ss",
|
1477
|
-
"st",
|
1478
|
-
"sv",
|
1479
|
-
"include",
|
1480
|
-
"marker",
|
1481
|
-
"prefix",
|
1482
|
-
"copyid",
|
1483
|
-
"restype",
|
1484
|
-
"blockid",
|
1485
|
-
"blocklisttype",
|
1486
|
-
"delimiter",
|
1487
|
-
"prevsnapshot",
|
1488
|
-
"ske",
|
1489
|
-
"skoid",
|
1490
|
-
"sks",
|
1491
|
-
"skt",
|
1492
|
-
"sktid",
|
1493
|
-
"skv",
|
1494
|
-
"snapshot",
|
1495
|
-
];
|
1496
|
-
|
1497
|
-
// Copyright (c) Microsoft Corporation.
|
1498
|
-
// Licensed under the MIT license.
|
1499
|
-
/**
|
1500
|
-
* Set URL parameter name and value. If name exists in URL parameters, old value
|
1501
|
-
* will be replaced by name key. If not provide value, the parameter will be deleted.
|
1502
|
-
*
|
1503
|
-
* @param url - Source URL string
|
1504
|
-
* @param name - Parameter name
|
1505
|
-
* @param value - Parameter value
|
1506
|
-
* @returns An updated URL string
|
1507
|
-
*/
|
1508
|
-
function setURLParameter(url, name, value) {
|
1509
|
-
const urlParsed = new URL(url);
|
1510
|
-
const encodedName = encodeURIComponent(name);
|
1511
|
-
const encodedValue = value ? encodeURIComponent(value) : undefined;
|
1512
|
-
// mutating searchParams will change the encoding, so we have to do this ourselves
|
1513
|
-
const searchString = urlParsed.search === "" ? "?" : urlParsed.search;
|
1514
|
-
const searchPieces = [];
|
1515
|
-
for (const pair of searchString.slice(1).split("&")) {
|
1516
|
-
if (pair) {
|
1517
|
-
const [key] = pair.split("=", 2);
|
1518
|
-
if (key !== encodedName) {
|
1519
|
-
searchPieces.push(pair);
|
1520
|
-
}
|
1521
|
-
}
|
1522
|
-
}
|
1523
|
-
if (encodedValue) {
|
1524
|
-
searchPieces.push(`${encodedName}=${encodedValue}`);
|
1525
|
-
}
|
1526
|
-
urlParsed.search = searchPieces.length ? `?${searchPieces.join("&")}` : "";
|
1527
|
-
return urlParsed.toString();
|
1528
|
-
}
|
1529
|
-
/**
|
1530
|
-
* Set URL host.
|
1531
|
-
*
|
1532
|
-
* @param url - Source URL string
|
1533
|
-
* @param host - New host string
|
1534
|
-
* @returns An updated URL string
|
1535
|
-
*/
|
1536
|
-
function setURLHost(url, host) {
|
1537
|
-
const urlParsed = new URL(url);
|
1538
|
-
urlParsed.hostname = host;
|
1539
|
-
return urlParsed.toString();
|
1540
|
-
}
|
1541
|
-
/**
|
1542
|
-
* Get URL path from an URL string.
|
1543
|
-
*
|
1544
|
-
* @param url - Source URL string
|
1545
|
-
*/
|
1546
|
-
function getURLPath(url) {
|
1547
|
-
try {
|
1548
|
-
const urlParsed = new URL(url);
|
1549
|
-
return urlParsed.pathname;
|
1550
|
-
}
|
1551
|
-
catch (e) {
|
1552
|
-
return undefined;
|
1553
|
-
}
|
1554
|
-
}
|
1555
|
-
/**
|
1556
|
-
* Get URL query key value pairs from an URL string.
|
1557
|
-
*
|
1558
|
-
* @param url -
|
1559
|
-
*/
|
1560
|
-
function getURLQueries(url) {
|
1561
|
-
let queryString = new URL(url).search;
|
1562
|
-
if (!queryString) {
|
1563
|
-
return {};
|
1564
|
-
}
|
1565
|
-
queryString = queryString.trim();
|
1566
|
-
queryString = queryString.startsWith("?") ? queryString.substring(1) : queryString;
|
1567
|
-
let querySubStrings = queryString.split("&");
|
1568
|
-
querySubStrings = querySubStrings.filter((value) => {
|
1569
|
-
const indexOfEqual = value.indexOf("=");
|
1570
|
-
const lastIndexOfEqual = value.lastIndexOf("=");
|
1571
|
-
return (indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1);
|
1572
|
-
});
|
1573
|
-
const queries = {};
|
1574
|
-
for (const querySubString of querySubStrings) {
|
1575
|
-
const splitResults = querySubString.split("=");
|
1576
|
-
const key = splitResults[0];
|
1577
|
-
const value = splitResults[1];
|
1578
|
-
queries[key] = value;
|
1579
|
-
}
|
1580
|
-
return queries;
|
1581
|
-
}
|
1582
|
-
/**
|
1583
|
-
* Delay specified time interval.
|
1584
|
-
*
|
1585
|
-
* @param timeInMs -
|
1586
|
-
* @param aborter -
|
1587
|
-
* @param abortError -
|
1588
|
-
*/
|
1589
|
-
async function delay(timeInMs, aborter, abortError) {
|
1590
|
-
return new Promise((resolve, reject) => {
|
1591
|
-
/* eslint-disable-next-line prefer-const */
|
1592
|
-
let timeout;
|
1593
|
-
const abortHandler = () => {
|
1594
|
-
if (timeout !== undefined) {
|
1595
|
-
clearTimeout(timeout);
|
1596
|
-
}
|
1597
|
-
reject(abortError);
|
1598
|
-
};
|
1599
|
-
const resolveHandler = () => {
|
1600
|
-
if (aborter !== undefined) {
|
1601
|
-
aborter.removeEventListener("abort", abortHandler);
|
1602
|
-
}
|
1603
|
-
resolve();
|
1604
|
-
};
|
1605
|
-
timeout = setTimeout(resolveHandler, timeInMs);
|
1606
|
-
if (aborter !== undefined) {
|
1607
|
-
aborter.addEventListener("abort", abortHandler);
|
1608
|
-
}
|
1609
|
-
});
|
1610
|
-
}
|
1611
|
-
|
1612
1442
|
// Copyright (c) Microsoft Corporation.
|
1613
1443
|
// Licensed under the MIT license.
|
1614
1444
|
/**
|
@@ -1631,7 +1461,6 @@ const DEFAULT_RETRY_OPTIONS$1 = {
|
|
1631
1461
|
maxTries: 4,
|
1632
1462
|
retryDelayInMs: 4 * 1000,
|
1633
1463
|
retryPolicyType: exports.StorageRetryPolicyType.EXPONENTIAL,
|
1634
|
-
secondaryHost: "",
|
1635
1464
|
tryTimeoutInMs: undefined, // Use server side default timeout strategy
|
1636
1465
|
};
|
1637
1466
|
const RETRY_ABORT_ERROR$1 = new abortController.AbortError("The operation was aborted.");
|
@@ -1667,9 +1496,6 @@ class StorageRetryPolicy extends BaseRequestPolicy {
|
|
1667
1496
|
maxRetryDelayInMs: retryOptions.maxRetryDelayInMs && retryOptions.maxRetryDelayInMs >= 0
|
1668
1497
|
? retryOptions.maxRetryDelayInMs
|
1669
1498
|
: DEFAULT_RETRY_OPTIONS$1.maxRetryDelayInMs,
|
1670
|
-
secondaryHost: retryOptions.secondaryHost
|
1671
|
-
? retryOptions.secondaryHost
|
1672
|
-
: DEFAULT_RETRY_OPTIONS$1.secondaryHost,
|
1673
1499
|
};
|
1674
1500
|
}
|
1675
1501
|
/**
|
@@ -1692,20 +1518,14 @@ class StorageRetryPolicy extends BaseRequestPolicy {
|
|
1692
1518
|
*/
|
1693
1519
|
async attemptSendRequest(request, secondaryHas404, attempt) {
|
1694
1520
|
const newRequest = request.clone();
|
1695
|
-
const isPrimaryRetry =
|
1696
|
-
!this.retryOptions.secondaryHost ||
|
1697
|
-
!(request.method === "GET" || request.method === "HEAD" || request.method === "OPTIONS") ||
|
1698
|
-
attempt % 2 === 1;
|
1699
|
-
if (!isPrimaryRetry) {
|
1700
|
-
newRequest.url = setURLHost(newRequest.url, this.retryOptions.secondaryHost);
|
1701
|
-
}
|
1521
|
+
const isPrimaryRetry = true;
|
1702
1522
|
// Set the server-side timeout query parameter "timeout=[seconds]"
|
1703
1523
|
if (this.retryOptions.tryTimeoutInMs) {
|
1704
|
-
newRequest.url = setURLParameter(newRequest.url, URLConstants.Parameters.TIMEOUT, Math.floor(this.retryOptions.tryTimeoutInMs / 1000).toString());
|
1524
|
+
newRequest.url = setURLParameter$1(newRequest.url, URLConstants$1.Parameters.TIMEOUT, Math.floor(this.retryOptions.tryTimeoutInMs / 1000).toString());
|
1705
1525
|
}
|
1706
1526
|
let response;
|
1707
1527
|
try {
|
1708
|
-
logger
|
1528
|
+
logger.info(`RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? "Primary" : "Secondary"}`);
|
1709
1529
|
response = await this._nextPolicy.sendRequest(newRequest);
|
1710
1530
|
if (!this.shouldRetry(isPrimaryRetry, attempt, response)) {
|
1711
1531
|
return response;
|
@@ -1713,7 +1533,7 @@ class StorageRetryPolicy extends BaseRequestPolicy {
|
|
1713
1533
|
secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);
|
1714
1534
|
}
|
1715
1535
|
catch (err) {
|
1716
|
-
logger
|
1536
|
+
logger.error(`RetryPolicy: Caught error, message: ${err.message}, code: ${err.code}`);
|
1717
1537
|
if (!this.shouldRetry(isPrimaryRetry, attempt, response, err)) {
|
1718
1538
|
throw err;
|
1719
1539
|
}
|
@@ -1731,7 +1551,7 @@ class StorageRetryPolicy extends BaseRequestPolicy {
|
|
1731
1551
|
*/
|
1732
1552
|
shouldRetry(isPrimaryRetry, attempt, response, err) {
|
1733
1553
|
if (attempt >= this.retryOptions.maxTries) {
|
1734
|
-
logger
|
1554
|
+
logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions
|
1735
1555
|
.maxTries}, no further try.`);
|
1736
1556
|
return false;
|
1737
1557
|
}
|
@@ -1753,7 +1573,7 @@ class StorageRetryPolicy extends BaseRequestPolicy {
|
|
1753
1573
|
if (err.name.toUpperCase().includes(retriableError) ||
|
1754
1574
|
err.message.toUpperCase().includes(retriableError) ||
|
1755
1575
|
(err.code && err.code.toString().toUpperCase() === retriableError)) {
|
1756
|
-
logger
|
1576
|
+
logger.info(`RetryPolicy: Network error ${retriableError} found, will retry.`);
|
1757
1577
|
return true;
|
1758
1578
|
}
|
1759
1579
|
}
|
@@ -1764,17 +1584,33 @@ class StorageRetryPolicy extends BaseRequestPolicy {
|
|
1764
1584
|
if (response || err) {
|
1765
1585
|
const statusCode = response ? response.status : err ? err.statusCode : 0;
|
1766
1586
|
if (!isPrimaryRetry && statusCode === 404) {
|
1767
|
-
logger
|
1587
|
+
logger.info(`RetryPolicy: Secondary access with 404, will retry.`);
|
1768
1588
|
return true;
|
1769
1589
|
}
|
1770
1590
|
// Server internal error or server timeout
|
1771
1591
|
if (statusCode === 503 || statusCode === 500) {
|
1772
|
-
logger
|
1592
|
+
logger.info(`RetryPolicy: Will retry for status code ${statusCode}.`);
|
1773
1593
|
return true;
|
1774
1594
|
}
|
1775
1595
|
}
|
1596
|
+
// [Copy source error code] Feature is pending on service side, skip retry on copy source error for now.
|
1597
|
+
// if (response) {
|
1598
|
+
// // Retry select Copy Source Error Codes.
|
1599
|
+
// if (response?.status >= 400) {
|
1600
|
+
// const copySourceError = response.headers.get(HeaderConstants.X_MS_CopySourceErrorCode);
|
1601
|
+
// if (copySourceError !== undefined) {
|
1602
|
+
// switch (copySourceError)
|
1603
|
+
// {
|
1604
|
+
// case "InternalError":
|
1605
|
+
// case "OperationTimedOut":
|
1606
|
+
// case "ServerBusy":
|
1607
|
+
// return true;
|
1608
|
+
// }
|
1609
|
+
// }
|
1610
|
+
// }
|
1611
|
+
// }
|
1776
1612
|
if ((err === null || err === void 0 ? void 0 : err.code) === "PARSE_ERROR" && (err === null || err === void 0 ? void 0 : err.message.startsWith(`Error "Error: Unclosed root tag`))) {
|
1777
|
-
logger
|
1613
|
+
logger.info("RetryPolicy: Incomplete XML response likely due to service timeout, will retry.");
|
1778
1614
|
return true;
|
1779
1615
|
}
|
1780
1616
|
return false;
|
@@ -1801,7 +1637,7 @@ class StorageRetryPolicy extends BaseRequestPolicy {
|
|
1801
1637
|
else {
|
1802
1638
|
delayTimeInMs = Math.random() * 1000;
|
1803
1639
|
}
|
1804
|
-
logger
|
1640
|
+
logger.info(`RetryPolicy: Delay for ${delayTimeInMs}ms`);
|
1805
1641
|
return delay(delayTimeInMs, abortSignal, RETRY_ABORT_ERROR$1);
|
1806
1642
|
}
|
1807
1643
|
}
|
@@ -1830,6 +1666,118 @@ class StorageRetryPolicyFactory {
|
|
1830
1666
|
}
|
1831
1667
|
}
|
1832
1668
|
|
1669
|
+
// Copyright (c) Microsoft Corporation.
|
1670
|
+
// Licensed under the MIT license.
|
1671
|
+
const URLConstants = {
|
1672
|
+
Parameters: {
|
1673
|
+
FORCE_BROWSER_NO_CACHE: "_",
|
1674
|
+
SIGNATURE: "sig",
|
1675
|
+
SNAPSHOT: "snapshot",
|
1676
|
+
VERSIONID: "versionid",
|
1677
|
+
TIMEOUT: "timeout",
|
1678
|
+
},
|
1679
|
+
};
|
1680
|
+
const HeaderConstants = {
|
1681
|
+
AUTHORIZATION: "Authorization",
|
1682
|
+
AUTHORIZATION_SCHEME: "Bearer",
|
1683
|
+
CONTENT_ENCODING: "Content-Encoding",
|
1684
|
+
CONTENT_ID: "Content-ID",
|
1685
|
+
CONTENT_LANGUAGE: "Content-Language",
|
1686
|
+
CONTENT_LENGTH: "Content-Length",
|
1687
|
+
CONTENT_MD5: "Content-Md5",
|
1688
|
+
CONTENT_TRANSFER_ENCODING: "Content-Transfer-Encoding",
|
1689
|
+
CONTENT_TYPE: "Content-Type",
|
1690
|
+
COOKIE: "Cookie",
|
1691
|
+
DATE: "date",
|
1692
|
+
IF_MATCH: "if-match",
|
1693
|
+
IF_MODIFIED_SINCE: "if-modified-since",
|
1694
|
+
IF_NONE_MATCH: "if-none-match",
|
1695
|
+
IF_UNMODIFIED_SINCE: "if-unmodified-since",
|
1696
|
+
PREFIX_FOR_STORAGE: "x-ms-",
|
1697
|
+
RANGE: "Range",
|
1698
|
+
USER_AGENT: "User-Agent",
|
1699
|
+
X_MS_CLIENT_REQUEST_ID: "x-ms-client-request-id",
|
1700
|
+
X_MS_COPY_SOURCE: "x-ms-copy-source",
|
1701
|
+
X_MS_DATE: "x-ms-date",
|
1702
|
+
X_MS_ERROR_CODE: "x-ms-error-code",
|
1703
|
+
X_MS_VERSION: "x-ms-version",
|
1704
|
+
X_MS_CopySourceErrorCode: "x-ms-copy-source-error-code",
|
1705
|
+
};
|
1706
|
+
|
1707
|
+
// Copyright (c) Microsoft Corporation.
|
1708
|
+
// Licensed under the MIT license.
|
1709
|
+
/**
|
1710
|
+
* Set URL parameter name and value. If name exists in URL parameters, old value
|
1711
|
+
* will be replaced by name key. If not provide value, the parameter will be deleted.
|
1712
|
+
*
|
1713
|
+
* @param url - Source URL string
|
1714
|
+
* @param name - Parameter name
|
1715
|
+
* @param value - Parameter value
|
1716
|
+
* @returns An updated URL string
|
1717
|
+
*/
|
1718
|
+
function setURLParameter(url, name, value) {
|
1719
|
+
const urlParsed = new URL(url);
|
1720
|
+
const encodedName = encodeURIComponent(name);
|
1721
|
+
const encodedValue = value ? encodeURIComponent(value) : undefined;
|
1722
|
+
// mutating searchParams will change the encoding, so we have to do this ourselves
|
1723
|
+
const searchString = urlParsed.search === "" ? "?" : urlParsed.search;
|
1724
|
+
const searchPieces = [];
|
1725
|
+
for (const pair of searchString.slice(1).split("&")) {
|
1726
|
+
if (pair) {
|
1727
|
+
const [key] = pair.split("=", 2);
|
1728
|
+
if (key !== encodedName) {
|
1729
|
+
searchPieces.push(pair);
|
1730
|
+
}
|
1731
|
+
}
|
1732
|
+
}
|
1733
|
+
if (encodedValue) {
|
1734
|
+
searchPieces.push(`${encodedName}=${encodedValue}`);
|
1735
|
+
}
|
1736
|
+
urlParsed.search = searchPieces.length ? `?${searchPieces.join("&")}` : "";
|
1737
|
+
return urlParsed.toString();
|
1738
|
+
}
|
1739
|
+
/**
|
1740
|
+
* Get URL path from an URL string.
|
1741
|
+
*
|
1742
|
+
* @param url - Source URL string
|
1743
|
+
*/
|
1744
|
+
function getURLPath(url) {
|
1745
|
+
try {
|
1746
|
+
const urlParsed = new URL(url);
|
1747
|
+
return urlParsed.pathname;
|
1748
|
+
}
|
1749
|
+
catch (e) {
|
1750
|
+
return undefined;
|
1751
|
+
}
|
1752
|
+
}
|
1753
|
+
/**
|
1754
|
+
* Get URL query key value pairs from an URL string.
|
1755
|
+
*
|
1756
|
+
* @param url -
|
1757
|
+
*/
|
1758
|
+
function getURLQueries(url) {
|
1759
|
+
let queryString = new URL(url).search;
|
1760
|
+
if (!queryString) {
|
1761
|
+
return {};
|
1762
|
+
}
|
1763
|
+
queryString = queryString.trim();
|
1764
|
+
queryString = queryString.startsWith("?") ? queryString.substring(1) : queryString;
|
1765
|
+
let querySubStrings = queryString.split("&");
|
1766
|
+
querySubStrings = querySubStrings.filter((value) => {
|
1767
|
+
const indexOfEqual = value.indexOf("=");
|
1768
|
+
const lastIndexOfEqual = value.lastIndexOf("=");
|
1769
|
+
return (indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1);
|
1770
|
+
});
|
1771
|
+
const queries = {};
|
1772
|
+
for (const querySubString of querySubStrings) {
|
1773
|
+
const splitResults = querySubString.split("=");
|
1774
|
+
const key = splitResults[0];
|
1775
|
+
const value = splitResults[1];
|
1776
|
+
queries[key] = value;
|
1777
|
+
}
|
1778
|
+
return queries;
|
1779
|
+
}
|
1780
|
+
|
1833
1781
|
// Copyright (c) Microsoft Corporation.
|
1834
1782
|
// Licensed under the MIT license.
|
1835
1783
|
/**
|
@@ -1858,6 +1806,79 @@ class CredentialPolicy extends BaseRequestPolicy {
|
|
1858
1806
|
}
|
1859
1807
|
}
|
1860
1808
|
|
1809
|
+
// Copyright (c) Microsoft Corporation.
|
1810
|
+
// Licensed under the MIT license.
|
1811
|
+
/*
|
1812
|
+
* We need to imitate .Net culture-aware sorting, which is used in storage service.
|
1813
|
+
* Below tables contain sort-keys for en-US culture.
|
1814
|
+
*/
|
1815
|
+
const table_lv0 = new Uint32Array([
|
1816
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1817
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x71c, 0x0, 0x71f, 0x721,
|
1818
|
+
0x723, 0x725, 0x0, 0x0, 0x0, 0x72d, 0x803, 0x0, 0x0, 0x733, 0x0, 0xd03, 0xd1a, 0xd1c, 0xd1e,
|
1819
|
+
0xd20, 0xd22, 0xd24, 0xd26, 0xd28, 0xd2a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe02, 0xe09, 0xe0a,
|
1820
|
+
0xe1a, 0xe21, 0xe23, 0xe25, 0xe2c, 0xe32, 0xe35, 0xe36, 0xe48, 0xe51, 0xe70, 0xe7c, 0xe7e, 0xe89,
|
1821
|
+
0xe8a, 0xe91, 0xe99, 0xe9f, 0xea2, 0xea4, 0xea6, 0xea7, 0xea9, 0x0, 0x0, 0x0, 0x743, 0x744, 0x748,
|
1822
|
+
0xe02, 0xe09, 0xe0a, 0xe1a, 0xe21, 0xe23, 0xe25, 0xe2c, 0xe32, 0xe35, 0xe36, 0xe48, 0xe51, 0xe70,
|
1823
|
+
0xe7c, 0xe7e, 0xe89, 0xe8a, 0xe91, 0xe99, 0xe9f, 0xea2, 0xea4, 0xea6, 0xea7, 0xea9, 0x0, 0x74c,
|
1824
|
+
0x0, 0x750, 0x0,
|
1825
|
+
]);
|
1826
|
+
const table_lv2 = new Uint32Array([
|
1827
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1828
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1829
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1830
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
|
1831
|
+
0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12,
|
1832
|
+
0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1833
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1834
|
+
]);
|
1835
|
+
const table_lv4 = new Uint32Array([
|
1836
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1837
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1838
|
+
0x0, 0x8012, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8212, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1839
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1840
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1841
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1842
|
+
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
|
1843
|
+
]);
|
1844
|
+
function compareHeader(lhs, rhs) {
|
1845
|
+
if (isLessThan(lhs, rhs))
|
1846
|
+
return -1;
|
1847
|
+
return 1;
|
1848
|
+
}
|
1849
|
+
function isLessThan(lhs, rhs) {
|
1850
|
+
const tables = [table_lv0, table_lv2, table_lv4];
|
1851
|
+
let curr_level = 0;
|
1852
|
+
let i = 0;
|
1853
|
+
let j = 0;
|
1854
|
+
while (curr_level < tables.length) {
|
1855
|
+
if (curr_level === tables.length - 1 && i !== j) {
|
1856
|
+
return i > j;
|
1857
|
+
}
|
1858
|
+
const weight1 = i < lhs.length ? tables[curr_level][lhs[i].charCodeAt(0)] : 0x1;
|
1859
|
+
const weight2 = j < rhs.length ? tables[curr_level][rhs[j].charCodeAt(0)] : 0x1;
|
1860
|
+
if (weight1 === 0x1 && weight2 === 0x1) {
|
1861
|
+
i = 0;
|
1862
|
+
j = 0;
|
1863
|
+
++curr_level;
|
1864
|
+
}
|
1865
|
+
else if (weight1 === weight2) {
|
1866
|
+
++i;
|
1867
|
+
++j;
|
1868
|
+
}
|
1869
|
+
else if (weight1 === 0) {
|
1870
|
+
++i;
|
1871
|
+
}
|
1872
|
+
else if (weight2 === 0) {
|
1873
|
+
++j;
|
1874
|
+
}
|
1875
|
+
else {
|
1876
|
+
return weight1 < weight2;
|
1877
|
+
}
|
1878
|
+
}
|
1879
|
+
return false;
|
1880
|
+
}
|
1881
|
+
|
1861
1882
|
// Copyright (c) Microsoft Corporation.
|
1862
1883
|
// Licensed under the MIT license.
|
1863
1884
|
/**
|
@@ -1949,7 +1970,7 @@ class StorageSharedKeyCredentialPolicy extends CredentialPolicy {
|
|
1949
1970
|
return value.name.toLowerCase().startsWith(HeaderConstants.PREFIX_FOR_STORAGE);
|
1950
1971
|
});
|
1951
1972
|
headersArray.sort((a, b) => {
|
1952
|
-
return a.name.toLowerCase()
|
1973
|
+
return compareHeader(a.name.toLowerCase(), b.name.toLowerCase());
|
1953
1974
|
});
|
1954
1975
|
// Remove duplicate headers
|
1955
1976
|
headersArray = headersArray.filter((value, index, array) => {
|
@@ -2172,17 +2193,16 @@ const RETRY_ABORT_ERROR = new abortController.AbortError("The operation was abor
|
|
2172
2193
|
* Retry policy with exponential retry and linear retry implemented.
|
2173
2194
|
*/
|
2174
2195
|
function storageRetryPolicy(options = {}) {
|
2175
|
-
var _a, _b, _c, _d, _e
|
2196
|
+
var _a, _b, _c, _d, _e;
|
2176
2197
|
const retryPolicyType = (_a = options.retryPolicyType) !== null && _a !== void 0 ? _a : DEFAULT_RETRY_OPTIONS.retryPolicyType;
|
2177
2198
|
const maxTries = (_b = options.maxTries) !== null && _b !== void 0 ? _b : DEFAULT_RETRY_OPTIONS.maxTries;
|
2178
2199
|
const retryDelayInMs = (_c = options.retryDelayInMs) !== null && _c !== void 0 ? _c : DEFAULT_RETRY_OPTIONS.retryDelayInMs;
|
2179
2200
|
const maxRetryDelayInMs = (_d = options.maxRetryDelayInMs) !== null && _d !== void 0 ? _d : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs;
|
2180
|
-
const
|
2181
|
-
const tryTimeoutInMs = (_f = options.tryTimeoutInMs) !== null && _f !== void 0 ? _f : DEFAULT_RETRY_OPTIONS.tryTimeoutInMs;
|
2201
|
+
const tryTimeoutInMs = (_e = options.tryTimeoutInMs) !== null && _e !== void 0 ? _e : DEFAULT_RETRY_OPTIONS.tryTimeoutInMs;
|
2182
2202
|
function shouldRetry({ isPrimaryRetry, attempt, response, error, }) {
|
2183
2203
|
var _a, _b;
|
2184
2204
|
if (attempt >= maxTries) {
|
2185
|
-
logger
|
2205
|
+
logger.info(`RetryPolicy: Attempt(s) ${attempt} >= maxTries ${maxTries}, no further try.`);
|
2186
2206
|
return false;
|
2187
2207
|
}
|
2188
2208
|
if (error) {
|
@@ -2190,13 +2210,13 @@ function storageRetryPolicy(options = {}) {
|
|
2190
2210
|
if (error.name.toUpperCase().includes(retriableError) ||
|
2191
2211
|
error.message.toUpperCase().includes(retriableError) ||
|
2192
2212
|
(error.code && error.code.toString().toUpperCase() === retriableError)) {
|
2193
|
-
logger
|
2213
|
+
logger.info(`RetryPolicy: Network error ${retriableError} found, will retry.`);
|
2194
2214
|
return true;
|
2195
2215
|
}
|
2196
2216
|
}
|
2197
2217
|
if ((error === null || error === void 0 ? void 0 : error.code) === "PARSE_ERROR" &&
|
2198
2218
|
(error === null || error === void 0 ? void 0 : error.message.startsWith(`Error "Error: Unclosed root tag`))) {
|
2199
|
-
logger
|
2219
|
+
logger.info("RetryPolicy: Incomplete XML response likely due to service timeout, will retry.");
|
2200
2220
|
return true;
|
2201
2221
|
}
|
2202
2222
|
}
|
@@ -2206,20 +2226,36 @@ function storageRetryPolicy(options = {}) {
|
|
2206
2226
|
if (response || error) {
|
2207
2227
|
const statusCode = (_b = (_a = response === null || response === void 0 ? void 0 : response.status) !== null && _a !== void 0 ? _a : error === null || error === void 0 ? void 0 : error.statusCode) !== null && _b !== void 0 ? _b : 0;
|
2208
2228
|
if (!isPrimaryRetry && statusCode === 404) {
|
2209
|
-
logger
|
2229
|
+
logger.info(`RetryPolicy: Secondary access with 404, will retry.`);
|
2210
2230
|
return true;
|
2211
2231
|
}
|
2212
2232
|
// Server internal error or server timeout
|
2213
2233
|
if (statusCode === 503 || statusCode === 500) {
|
2214
|
-
logger
|
2234
|
+
logger.info(`RetryPolicy: Will retry for status code ${statusCode}.`);
|
2215
2235
|
return true;
|
2216
2236
|
}
|
2217
2237
|
}
|
2238
|
+
// [Copy source error code] Feature is pending on service side, skip retry on copy source error for now.
|
2239
|
+
// if (response) {
|
2240
|
+
// // Retry select Copy Source Error Codes.
|
2241
|
+
// if (response?.status >= 400) {
|
2242
|
+
// const copySourceError = response.headers.get(HeaderConstants.X_MS_CopySourceErrorCode);
|
2243
|
+
// if (copySourceError !== undefined) {
|
2244
|
+
// switch (copySourceError)
|
2245
|
+
// {
|
2246
|
+
// case "InternalError":
|
2247
|
+
// case "OperationTimedOut":
|
2248
|
+
// case "ServerBusy":
|
2249
|
+
// return true;
|
2250
|
+
// }
|
2251
|
+
// }
|
2252
|
+
// }
|
2253
|
+
// }
|
2218
2254
|
return false;
|
2219
2255
|
}
|
2220
2256
|
function calculateDelay(isPrimaryRetry, attempt) {
|
2221
2257
|
let delayTimeInMs = 0;
|
2222
|
-
|
2258
|
+
{
|
2223
2259
|
switch (retryPolicyType) {
|
2224
2260
|
case StorageRetryPolicyType.EXPONENTIAL:
|
2225
2261
|
delayTimeInMs = Math.min((Math.pow(2, attempt - 1) - 1) * retryDelayInMs, maxRetryDelayInMs);
|
@@ -2229,10 +2265,7 @@ function storageRetryPolicy(options = {}) {
|
|
2229
2265
|
break;
|
2230
2266
|
}
|
2231
2267
|
}
|
2232
|
-
|
2233
|
-
delayTimeInMs = Math.random() * 1000;
|
2234
|
-
}
|
2235
|
-
logger$1.info(`RetryPolicy: Delay for ${delayTimeInMs}ms`);
|
2268
|
+
logger.info(`RetryPolicy: Delay for ${delayTimeInMs}ms`);
|
2236
2269
|
return delayTimeInMs;
|
2237
2270
|
}
|
2238
2271
|
return {
|
@@ -2240,35 +2273,31 @@ function storageRetryPolicy(options = {}) {
|
|
2240
2273
|
async sendRequest(request, next) {
|
2241
2274
|
// Set the server-side timeout query parameter "timeout=[seconds]"
|
2242
2275
|
if (tryTimeoutInMs) {
|
2243
|
-
request.url = setURLParameter(request.url, URLConstants.Parameters.TIMEOUT, String(Math.floor(tryTimeoutInMs / 1000)));
|
2276
|
+
request.url = setURLParameter$1(request.url, URLConstants$1.Parameters.TIMEOUT, String(Math.floor(tryTimeoutInMs / 1000)));
|
2244
2277
|
}
|
2245
2278
|
const primaryUrl = request.url;
|
2246
|
-
const secondaryUrl = secondaryHost ? setURLHost(request.url, secondaryHost) : undefined;
|
2247
2279
|
let secondaryHas404 = false;
|
2248
2280
|
let attempt = 1;
|
2249
2281
|
let retryAgain = true;
|
2250
2282
|
let response;
|
2251
2283
|
let error;
|
2252
2284
|
while (retryAgain) {
|
2253
|
-
const isPrimaryRetry =
|
2254
|
-
|
2255
|
-
!["GET", "HEAD", "OPTIONS"].includes(request.method) ||
|
2256
|
-
attempt % 2 === 1;
|
2257
|
-
request.url = isPrimaryRetry ? primaryUrl : secondaryUrl;
|
2285
|
+
const isPrimaryRetry = true;
|
2286
|
+
request.url = primaryUrl;
|
2258
2287
|
response = undefined;
|
2259
2288
|
error = undefined;
|
2260
2289
|
try {
|
2261
|
-
logger
|
2290
|
+
logger.info(`RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? "Primary" : "Secondary"}`);
|
2262
2291
|
response = await next(request);
|
2263
2292
|
secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);
|
2264
2293
|
}
|
2265
2294
|
catch (e) {
|
2266
2295
|
if (coreRestPipeline.isRestError(e)) {
|
2267
|
-
logger
|
2296
|
+
logger.error(`RetryPolicy: Caught error, message: ${e.message}, code: ${e.code}`);
|
2268
2297
|
error = e;
|
2269
2298
|
}
|
2270
2299
|
else {
|
2271
|
-
logger
|
2300
|
+
logger.error(`RetryPolicy: Caught error, message: ${coreUtil.getErrorMessage(e)}`);
|
2272
2301
|
throw e;
|
2273
2302
|
}
|
2274
2303
|
}
|
@@ -2366,7 +2395,7 @@ function storageSharedKeyCredentialPolicy(options) {
|
|
2366
2395
|
}
|
2367
2396
|
}
|
2368
2397
|
headersArray.sort((a, b) => {
|
2369
|
-
return a.name.toLowerCase()
|
2398
|
+
return compareHeader(a.name.toLowerCase(), b.name.toLowerCase());
|
2370
2399
|
});
|
2371
2400
|
// Remove duplicate headers
|
2372
2401
|
headersArray = headersArray.filter((value, index, array) => {
|
@@ -2577,9 +2606,9 @@ function getCoreClientOptions(pipeline) {
|
|
2577
2606
|
? `${restOptions.userAgentOptions.userAgentPrefix} ${packageDetails}`
|
2578
2607
|
: `${packageDetails}`;
|
2579
2608
|
corePipeline = coreClient.createClientPipeline(Object.assign(Object.assign({}, restOptions), { loggingOptions: {
|
2580
|
-
additionalAllowedHeaderNames:
|
2581
|
-
additionalAllowedQueryParameters:
|
2582
|
-
logger: logger
|
2609
|
+
additionalAllowedHeaderNames: StorageFileLoggingAllowedHeaderNames,
|
2610
|
+
additionalAllowedQueryParameters: StorageFileLoggingAllowedQueryParameters,
|
2611
|
+
logger: logger.info,
|
2583
2612
|
}, userAgentOptions: {
|
2584
2613
|
userAgentPrefix,
|
2585
2614
|
}, serializationOptions: {
|
@@ -2625,7 +2654,7 @@ function getCoreClientOptions(pipeline) {
|
|
2625
2654
|
}
|
2626
2655
|
pipeline._corePipeline = corePipeline;
|
2627
2656
|
}
|
2628
|
-
return Object.assign(Object.assign({}, restOptions), { httpClient, pipeline: corePipeline });
|
2657
|
+
return Object.assign(Object.assign({}, restOptions), { allowInsecureConnection: true, httpClient, pipeline: corePipeline });
|
2629
2658
|
}
|
2630
2659
|
function getCredentialFromPipeline(pipeline) {
|
2631
2660
|
// see if we squirreled one away on the type itself
|
@@ -2722,7 +2751,7 @@ function isCoreHttpPolicyFactory(factory) {
|
|
2722
2751
|
*/
|
2723
2752
|
const tracingClient = coreTracing.createTracingClient({
|
2724
2753
|
packageName: "@azure/storage-file-share",
|
2725
|
-
packageVersion: SDK_VERSION
|
2754
|
+
packageVersion: SDK_VERSION,
|
2726
2755
|
namespace: "Microsoft.Storage",
|
2727
2756
|
});
|
2728
2757
|
|
@@ -2968,6 +2997,13 @@ const StorageError = {
|
|
2968
2997
|
name: "String"
|
2969
2998
|
}
|
2970
2999
|
},
|
3000
|
+
authenticationErrorDetail: {
|
3001
|
+
serializedName: "AuthenticationErrorDetail",
|
3002
|
+
xmlName: "AuthenticationErrorDetail",
|
3003
|
+
type: {
|
3004
|
+
name: "String"
|
3005
|
+
}
|
3006
|
+
},
|
2971
3007
|
code: {
|
2972
3008
|
serializedName: "Code",
|
2973
3009
|
xmlName: "Code",
|
@@ -3240,6 +3276,13 @@ const SharePropertiesInternal = {
|
|
3240
3276
|
name: "Enum",
|
3241
3277
|
allowedValues: ["NoRootSquash", "RootSquash", "AllSquash"]
|
3242
3278
|
}
|
3279
|
+
},
|
3280
|
+
enableSnapshotVirtualDirectoryAccess: {
|
3281
|
+
serializedName: "EnableSnapshotVirtualDirectoryAccess",
|
3282
|
+
xmlName: "EnableSnapshotVirtualDirectoryAccess",
|
3283
|
+
type: {
|
3284
|
+
name: "Boolean"
|
3285
|
+
}
|
3243
3286
|
}
|
3244
3287
|
}
|
3245
3288
|
}
|
@@ -3736,6 +3779,14 @@ const HandleItem = {
|
|
3736
3779
|
name: "String"
|
3737
3780
|
}
|
3738
3781
|
},
|
3782
|
+
clientName: {
|
3783
|
+
serializedName: "ClientName",
|
3784
|
+
required: true,
|
3785
|
+
xmlName: "ClientName",
|
3786
|
+
type: {
|
3787
|
+
name: "String"
|
3788
|
+
}
|
3789
|
+
},
|
3739
3790
|
openTime: {
|
3740
3791
|
serializedName: "OpenTime",
|
3741
3792
|
required: true,
|
@@ -4221,6 +4272,13 @@ const ShareGetPropertiesHeaders = {
|
|
4221
4272
|
allowedValues: ["NoRootSquash", "RootSquash", "AllSquash"]
|
4222
4273
|
}
|
4223
4274
|
},
|
4275
|
+
enableSnapshotVirtualDirectoryAccess: {
|
4276
|
+
serializedName: "x-ms-enable-snapshot-virtual-directory-access",
|
4277
|
+
xmlName: "x-ms-enable-snapshot-virtual-directory-access",
|
4278
|
+
type: {
|
4279
|
+
name: "Boolean"
|
4280
|
+
}
|
4281
|
+
},
|
4224
4282
|
errorCode: {
|
4225
4283
|
serializedName: "x-ms-error-code",
|
4226
4284
|
xmlName: "x-ms-error-code",
|
@@ -8101,7 +8159,7 @@ const timeoutInSeconds = {
|
|
8101
8159
|
const version = {
|
8102
8160
|
parameterPath: "version",
|
8103
8161
|
mapper: {
|
8104
|
-
defaultValue: "
|
8162
|
+
defaultValue: "2024-08-04",
|
8105
8163
|
isConstant: true,
|
8106
8164
|
serializedName: "x-ms-version",
|
8107
8165
|
type: {
|
@@ -8250,6 +8308,16 @@ const rootSquash = {
|
|
8250
8308
|
}
|
8251
8309
|
}
|
8252
8310
|
};
|
8311
|
+
const enableSnapshotVirtualDirectoryAccess = {
|
8312
|
+
parameterPath: ["options", "enableSnapshotVirtualDirectoryAccess"],
|
8313
|
+
mapper: {
|
8314
|
+
serializedName: "x-ms-enable-snapshot-virtual-directory-access",
|
8315
|
+
xmlName: "x-ms-enable-snapshot-virtual-directory-access",
|
8316
|
+
type: {
|
8317
|
+
name: "Boolean"
|
8318
|
+
}
|
8319
|
+
}
|
8320
|
+
};
|
8253
8321
|
const shareSnapshot = {
|
8254
8322
|
parameterPath: ["options", "shareSnapshot"],
|
8255
8323
|
mapper: {
|
@@ -9130,6 +9198,16 @@ const prevsharesnapshot = {
|
|
9130
9198
|
}
|
9131
9199
|
}
|
9132
9200
|
};
|
9201
|
+
const supportRename = {
|
9202
|
+
parameterPath: ["options", "supportRename"],
|
9203
|
+
mapper: {
|
9204
|
+
serializedName: "x-ms-file-support-rename",
|
9205
|
+
xmlName: "x-ms-file-support-rename",
|
9206
|
+
type: {
|
9207
|
+
name: "Boolean"
|
9208
|
+
}
|
9209
|
+
}
|
9210
|
+
};
|
9133
9211
|
const filePermissionCopyMode = {
|
9134
9212
|
parameterPath: ["options", "copyFileSmbInfo", "filePermissionCopyMode"],
|
9135
9213
|
mapper: {
|
@@ -9491,7 +9569,8 @@ const createOperationSpec$2 = {
|
|
9491
9569
|
quota,
|
9492
9570
|
accessTier,
|
9493
9571
|
enabledProtocols,
|
9494
|
-
rootSquash
|
9572
|
+
rootSquash,
|
9573
|
+
enableSnapshotVirtualDirectoryAccess
|
9495
9574
|
],
|
9496
9575
|
isXML: true,
|
9497
9576
|
serializer: xmlSerializer$2
|
@@ -9802,6 +9881,7 @@ const setPropertiesOperationSpec$1 = {
|
|
9802
9881
|
quota,
|
9803
9882
|
accessTier,
|
9804
9883
|
rootSquash,
|
9884
|
+
enableSnapshotVirtualDirectoryAccess,
|
9805
9885
|
leaseId
|
9806
9886
|
],
|
9807
9887
|
isXML: true,
|
@@ -10861,6 +10941,7 @@ const uploadRangeFromURLOperationSpec = {
|
|
10861
10941
|
version,
|
10862
10942
|
accept1,
|
10863
10943
|
leaseId,
|
10944
|
+
fileRequestIntent,
|
10864
10945
|
allowTrailingDot,
|
10865
10946
|
allowSourceTrailingDot,
|
10866
10947
|
range1,
|
@@ -10903,7 +10984,8 @@ const getRangeListOperationSpec = {
|
|
10903
10984
|
leaseId,
|
10904
10985
|
fileRequestIntent,
|
10905
10986
|
allowTrailingDot,
|
10906
|
-
range
|
10987
|
+
range,
|
10988
|
+
supportRename
|
10907
10989
|
],
|
10908
10990
|
isXML: true,
|
10909
10991
|
serializer: xmlSerializer
|
@@ -11096,7 +11178,7 @@ let StorageClient$1 = class StorageClient extends coreHttpCompat__namespace.Exte
|
|
11096
11178
|
const defaults = {
|
11097
11179
|
requestContentType: "application/json; charset=utf-8"
|
11098
11180
|
};
|
11099
|
-
const packageDetails = `azsdk-js-azure-storage-file-share/12.
|
11181
|
+
const packageDetails = `azsdk-js-azure-storage-file-share/12.24.0-beta.1`;
|
11100
11182
|
const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
|
11101
11183
|
? `${options.userAgentOptions.userAgentPrefix} ${packageDetails}`
|
11102
11184
|
: `${packageDetails}`;
|
@@ -11107,7 +11189,7 @@ let StorageClient$1 = class StorageClient extends coreHttpCompat__namespace.Exte
|
|
11107
11189
|
// Parameter assignments
|
11108
11190
|
this.url = url;
|
11109
11191
|
// Assigning values to Constant parameters
|
11110
|
-
this.version = options.version || "
|
11192
|
+
this.version = options.version || "2024-08-04";
|
11111
11193
|
this.fileRangeWriteFromUrl = options.fileRangeWriteFromUrl || "update";
|
11112
11194
|
this.service = new ServiceImpl(this);
|
11113
11195
|
this.share = new ShareImpl(this);
|
@@ -11801,13 +11883,6 @@ function rangeToString(range) {
|
|
11801
11883
|
: `bytes=${range.offset}-`;
|
11802
11884
|
}
|
11803
11885
|
|
11804
|
-
// Copyright (c) Microsoft Corporation.
|
11805
|
-
// Licensed under the MIT license.
|
11806
|
-
/**
|
11807
|
-
* The `@azure/logger` configuration for this package.
|
11808
|
-
*/
|
11809
|
-
const logger = logger$2.createClientLogger("storage-file-share");
|
11810
|
-
|
11811
11886
|
// Copyright (c) Microsoft Corporation.
|
11812
11887
|
// Licensed under the MIT license.
|
11813
11888
|
/**
|
@@ -11903,6 +11978,22 @@ function fileLastWriteTimeToString(time) {
|
|
11903
11978
|
function fileChangeTimeToString(time) {
|
11904
11979
|
return time instanceof Date ? truncatedISO8061Date(time) : time;
|
11905
11980
|
}
|
11981
|
+
/**
|
11982
|
+
* Defines the known cloud audiences for Storage.
|
11983
|
+
*/
|
11984
|
+
exports.StorageFileAudience = void 0;
|
11985
|
+
(function (StorageFileAudience) {
|
11986
|
+
/**
|
11987
|
+
* The OAuth scope to use to retrieve an AAD token for Azure Storage.
|
11988
|
+
*/
|
11989
|
+
StorageFileAudience["StorageOAuthScopes"] = "https://storage.azure.com/.default";
|
11990
|
+
})(exports.StorageFileAudience || (exports.StorageFileAudience = {}));
|
11991
|
+
/**
|
11992
|
+
* To get the OAuth audience for a storage account for file service.
|
11993
|
+
*/
|
11994
|
+
function getFileServiceAccountAudience(storageAccountName) {
|
11995
|
+
return `https://${storageAccountName}.file.core.windows.net/.default`;
|
11996
|
+
}
|
11906
11997
|
|
11907
11998
|
// Copyright (c) Microsoft Corporation.
|
11908
11999
|
// Licensed under the MIT license.
|
@@ -12382,7 +12473,7 @@ class ShareClient extends StorageClient {
|
|
12382
12473
|
options) {
|
12383
12474
|
let pipeline;
|
12384
12475
|
let url;
|
12385
|
-
if (credentialOrPipelineOrShareName
|
12476
|
+
if (isPipelineLike(credentialOrPipelineOrShareName)) {
|
12386
12477
|
// (url: string, pipeline: Pipeline)
|
12387
12478
|
url = urlOrConnectionString;
|
12388
12479
|
pipeline = credentialOrPipelineOrShareName;
|
@@ -12877,7 +12968,7 @@ class ShareDirectoryClient extends StorageClient {
|
|
12877
12968
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options */
|
12878
12969
|
options = {}) {
|
12879
12970
|
let pipeline;
|
12880
|
-
if (credentialOrPipeline
|
12971
|
+
if (isPipelineLike(credentialOrPipeline)) {
|
12881
12972
|
pipeline = credentialOrPipeline;
|
12882
12973
|
}
|
12883
12974
|
else if (credentialOrPipeline instanceof Credential ||
|
@@ -13171,8 +13262,8 @@ class ShareDirectoryClient extends StorageClient {
|
|
13171
13262
|
* items. The marker value is opaque to the client.
|
13172
13263
|
* @param options - Options to list files and directories operation.
|
13173
13264
|
*/
|
13174
|
-
iterateFilesAndDirectoriesSegments(
|
13175
|
-
return tslib.__asyncGenerator(this, arguments, function* iterateFilesAndDirectoriesSegments_1() {
|
13265
|
+
iterateFilesAndDirectoriesSegments(marker_1) {
|
13266
|
+
return tslib.__asyncGenerator(this, arguments, function* iterateFilesAndDirectoriesSegments_1(marker, options = {}) {
|
13176
13267
|
if (options.prefix === "") {
|
13177
13268
|
options.prefix = undefined;
|
13178
13269
|
}
|
@@ -13189,8 +13280,8 @@ class ShareDirectoryClient extends StorageClient {
|
|
13189
13280
|
*
|
13190
13281
|
* @param options - Options to list files and directories operation.
|
13191
13282
|
*/
|
13192
|
-
listFilesAndDirectoriesItems(
|
13193
|
-
return tslib.__asyncGenerator(this, arguments, function* listFilesAndDirectoriesItems_1() {
|
13283
|
+
listFilesAndDirectoriesItems() {
|
13284
|
+
return tslib.__asyncGenerator(this, arguments, function* listFilesAndDirectoriesItems_1(options = {}) {
|
13194
13285
|
var _a, e_1, _b, _c;
|
13195
13286
|
if (options.prefix === "") {
|
13196
13287
|
options.prefix = undefined;
|
@@ -13378,8 +13469,8 @@ class ShareDirectoryClient extends StorageClient {
|
|
13378
13469
|
* set of list items.
|
13379
13470
|
* @param options - Options to list handles operation.
|
13380
13471
|
*/
|
13381
|
-
iterateHandleSegments(
|
13382
|
-
return tslib.__asyncGenerator(this, arguments, function* iterateHandleSegments_1() {
|
13472
|
+
iterateHandleSegments(marker_1) {
|
13473
|
+
return tslib.__asyncGenerator(this, arguments, function* iterateHandleSegments_1(marker, options = {}) {
|
13383
13474
|
let listHandlesResponse;
|
13384
13475
|
if (!!marker || marker === undefined) {
|
13385
13476
|
do {
|
@@ -13395,8 +13486,8 @@ class ShareDirectoryClient extends StorageClient {
|
|
13395
13486
|
*
|
13396
13487
|
* @param options - Options to list handles operation.
|
13397
13488
|
*/
|
13398
|
-
listHandleItems(
|
13399
|
-
return tslib.__asyncGenerator(this, arguments, function* listHandleItems_1() {
|
13489
|
+
listHandleItems() {
|
13490
|
+
return tslib.__asyncGenerator(this, arguments, function* listHandleItems_1(options = {}) {
|
13400
13491
|
var _a, e_2, _b, _c;
|
13401
13492
|
let marker;
|
13402
13493
|
try {
|
@@ -13693,7 +13784,7 @@ class ShareFileClient extends StorageClient {
|
|
13693
13784
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options */
|
13694
13785
|
options) {
|
13695
13786
|
let pipeline;
|
13696
|
-
if (credentialOrPipeline
|
13787
|
+
if (isPipelineLike(credentialOrPipeline)) {
|
13697
13788
|
pipeline = credentialOrPipeline;
|
13698
13789
|
}
|
13699
13790
|
else if (credentialOrPipeline instanceof Credential ||
|
@@ -14136,7 +14227,7 @@ class ShareFileClient extends StorageClient {
|
|
14136
14227
|
*/
|
14137
14228
|
async getRangeListDiff(prevShareSnapshot, options = {}) {
|
14138
14229
|
return tracingClient.withSpan("ShareFileClient-getRangeListDiff", options, async (updatedOptions) => {
|
14139
|
-
return assertResponse(await this.context.getRangeList(Object.assign(Object.assign(Object.assign({}, updatedOptions), { prevsharesnapshot: prevShareSnapshot, range: updatedOptions.range ? rangeToString(updatedOptions.range) : undefined }), this.shareClientConfig)));
|
14230
|
+
return assertResponse(await this.context.getRangeList(Object.assign(Object.assign(Object.assign({}, updatedOptions), { prevsharesnapshot: prevShareSnapshot, supportRename: options.includeRenames, range: updatedOptions.range ? rangeToString(updatedOptions.range) : undefined }), this.shareClientConfig)));
|
14140
14231
|
});
|
14141
14232
|
}
|
14142
14233
|
/**
|
@@ -14524,8 +14615,8 @@ class ShareFileClient extends StorageClient {
|
|
14524
14615
|
* set of list items.
|
14525
14616
|
* @param options - Options to list handles operation.
|
14526
14617
|
*/
|
14527
|
-
iterateHandleSegments(
|
14528
|
-
return tslib.__asyncGenerator(this, arguments, function* iterateHandleSegments_2() {
|
14618
|
+
iterateHandleSegments(marker_1) {
|
14619
|
+
return tslib.__asyncGenerator(this, arguments, function* iterateHandleSegments_2(marker, options = {}) {
|
14529
14620
|
let listHandlesResponse;
|
14530
14621
|
if (!!marker || marker === undefined) {
|
14531
14622
|
do {
|
@@ -14541,8 +14632,8 @@ class ShareFileClient extends StorageClient {
|
|
14541
14632
|
*
|
14542
14633
|
* @param options - Options to list handles operation.
|
14543
14634
|
*/
|
14544
|
-
listHandleItems(
|
14545
|
-
return tslib.__asyncGenerator(this, arguments, function* listHandleItems_2() {
|
14635
|
+
listHandleItems() {
|
14636
|
+
return tslib.__asyncGenerator(this, arguments, function* listHandleItems_2(options = {}) {
|
14546
14637
|
var _a, e_3, _b, _c;
|
14547
14638
|
let marker;
|
14548
14639
|
try {
|
@@ -14789,7 +14880,7 @@ class ShareLeaseClient {
|
|
14789
14880
|
}
|
14790
14881
|
this._url = client.url;
|
14791
14882
|
if (!leaseId) {
|
14792
|
-
leaseId =
|
14883
|
+
leaseId = coreUtil.randomUUID();
|
14793
14884
|
}
|
14794
14885
|
this._leaseId = leaseId;
|
14795
14886
|
}
|
@@ -14929,7 +15020,7 @@ class ShareServiceClient extends StorageClient {
|
|
14929
15020
|
/* eslint-disable-next-line @azure/azure-sdk/ts-naming-options */
|
14930
15021
|
options) {
|
14931
15022
|
let pipeline;
|
14932
|
-
if (credentialOrPipeline
|
15023
|
+
if (isPipelineLike(credentialOrPipeline)) {
|
14933
15024
|
pipeline = credentialOrPipeline;
|
14934
15025
|
}
|
14935
15026
|
else if (credentialOrPipeline instanceof Credential ||
|
@@ -15030,8 +15121,8 @@ class ShareServiceClient extends StorageClient {
|
|
15030
15121
|
* items. The marker value is opaque to the client.
|
15031
15122
|
* @param options - Options to list shares operation.
|
15032
15123
|
*/
|
15033
|
-
listSegments(
|
15034
|
-
return tslib.__asyncGenerator(this, arguments, function* listSegments_1() {
|
15124
|
+
listSegments(marker_1) {
|
15125
|
+
return tslib.__asyncGenerator(this, arguments, function* listSegments_1(marker, options = {}) {
|
15035
15126
|
if (options.prefix === "") {
|
15036
15127
|
options.prefix = undefined;
|
15037
15128
|
}
|
@@ -15048,8 +15139,8 @@ class ShareServiceClient extends StorageClient {
|
|
15048
15139
|
*
|
15049
15140
|
* @param options - Options to list shares operation.
|
15050
15141
|
*/
|
15051
|
-
listItems(
|
15052
|
-
return tslib.__asyncGenerator(this, arguments, function* listItems_1() {
|
15142
|
+
listItems() {
|
15143
|
+
return tslib.__asyncGenerator(this, arguments, function* listItems_1(options = {}) {
|
15053
15144
|
var _a, e_1, _b, _c;
|
15054
15145
|
if (options.prefix === "") {
|
15055
15146
|
options.prefix = undefined;
|
@@ -15269,7 +15360,7 @@ exports.KnownShareTokenIntent = void 0;
|
|
15269
15360
|
KnownShareTokenIntent["Backup"] = "backup";
|
15270
15361
|
})(exports.KnownShareTokenIntent || (exports.KnownShareTokenIntent = {}));
|
15271
15362
|
|
15272
|
-
Object.defineProperty(exports,
|
15363
|
+
Object.defineProperty(exports, "RestError", {
|
15273
15364
|
enumerable: true,
|
15274
15365
|
get: function () { return coreRestPipeline.RestError; }
|
15275
15366
|
});
|
@@ -15300,6 +15391,7 @@ exports.StorageSharedKeyCredential = StorageSharedKeyCredential;
|
|
15300
15391
|
exports.StorageSharedKeyCredentialPolicy = StorageSharedKeyCredentialPolicy;
|
15301
15392
|
exports.generateAccountSASQueryParameters = generateAccountSASQueryParameters;
|
15302
15393
|
exports.generateFileSASQueryParameters = generateFileSASQueryParameters;
|
15394
|
+
exports.getFileServiceAccountAudience = getFileServiceAccountAudience;
|
15303
15395
|
exports.isPipelineLike = isPipelineLike;
|
15304
15396
|
exports.logger = logger;
|
15305
15397
|
exports.newPipeline = newPipeline;
|