// // Copyright (c) Microsoft and contributors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // // See the License for the specific language governing permissions and // limitations under the License. // var exports = module.exports; /** * Creates a connection string that can be used to create a service which runs on the storage emulator. The emulator must be downloaded separately. * * @param {string} [proxyUri] The proxyUri. By default, http://127.0.0.1 * @return {string} A connection string representing the development storage credentials. * @example * var azure = require('azure-storage'); * var devStoreCreds = azure.generateDevelopmentStorageCredentials(); * var blobService = azure.createBlobService(devStoreCreds); */ exports.generateDevelopmentStorageCredentials = function (proxyUri) { var devStore = 'UseDevelopmentStorage=true;'; if(proxyUri){ devStore += 'DevelopmentStorageProxyUri=' + proxyUri; } return devStore; }; /** * Table client exports. * @ignore */ var TableService = require('./services/table/tableservice'); exports.TableService = TableService; exports.TableQuery = require('./services/table/tablequery'); exports.TableBatch = require('./services/table/tablebatch'); exports.TableUtilities = require('./services/table/tableutilities'); /** * Creates a new {@link TableService} object. * If no storageaccount or storageaccesskey are provided, the AZURE_STORAGE_CONNECTION_STRING and then the AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_ACCESS_KEY * environment variables will be used. * * @param {string} [storageAccountOrConnectionString] The storage account or the connection string. * @param {string} [storageAccessKey] The storage access key. * @param {string|object} [host] The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @return {TableService} A new TableService object. * */ exports.createTableService = function (storageAccountOrConnectionString, storageAccessKey, host) { return new TableService(storageAccountOrConnectionString, storageAccessKey, host); }; /** * Creates a new {@link TableService} object using the host Uri and the SAS credentials provided. * * @param {string|object} host The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @param {string} sasToken The Shared Access Signature token. * @return {TableService} A new TableService object with the SAS credentials. */ exports.createTableServiceWithSas = function (hostUri, sasToken) { return new TableService(null, null, hostUri, sasToken); }; /** * Blob client exports. * @ignore */ var BlobService = require('./services/blob/blobservice.node'); exports.BlobService = BlobService; exports.BlobUtilities = require('./services/blob/blobutilities'); /** * Creates a new {@link BlobService} object. * If no storageaccount or storageaccesskey are provided, the AZURE_STORAGE_CONNECTION_STRING and then the AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_ACCESS_KEY * environment variables will be used. * * @param {string} storageAccountOrConnectionString The storage account or the connection string. * @param {string} [storageAccessKey] The storage access key. * @param {string|object} [host] The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @return {BlobService} A new BlobService object. */ exports.createBlobService = function (storageAccountOrConnectionString, storageAccessKey, host) { return new BlobService(storageAccountOrConnectionString, storageAccessKey, host, null); }; /** * Creates a new {@link BlobService} object using the host Uri and the SAS credentials provided. * * @param {string|object} host The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @param {string} sasToken The Shared Access Signature token. * @return {BlobService} A new BlobService object with the SAS credentials. */ exports.createBlobServiceWithSas = function (host, sasToken) { return new BlobService(null, null, host, sasToken); }; /** * Creates a new {@link BlobService} object using the host Uri and the {@link TokenCredential} provided, which supports OAuth. * * @param {string|object} host The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @param {TokenCredential} tokenCredential The token credential object. * @return {BlobService} A new BlobService object with the {@link TokenCredential} object. * * @example * var azure = require('azure-storage'); * var tokenCredential = new azure.TokenCredential('myOAuthAccessToken'); * var blobService = azure.createBlobServiceWithTokenCredential('https://account.blob.core.windows.net', tokenCredential); * tokenCredential.set('updatedOAuthAccessToken'); */ exports.createBlobServiceWithTokenCredential = function (host, tokenCredential) { return new BlobService(null, null, host, null, null, tokenCredential); }; /** * Creates a new {@link BlobService} object using the host uri and anonymous access. * * @param {string|object} host The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @return {BlobService} A new BlobService object with the anonymous credentials. */ exports.createBlobServiceAnonymous = function (host) { return new BlobService(null, null, host, null); }; /** * File client exports. * @ignore */ var FileService = require('./services/file/fileservice.node'); exports.FileService = FileService; exports.FileUtilities = require('./services/file/fileutilities'); /** * Creates a new {@link FileService} object. * If no storageaccount or storageaccesskey are provided, the AZURE_STORAGE_CONNECTION_STRING and then the AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_ACCESS_KEY * environment variables will be used. * * @param {string} storageAccountOrConnectionString The storage account or the connection string. * @param {string} [storageAccessKey] The storage access key. * @param {string|object} [host] The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @return {FileService} A new FileService object. */ exports.createFileService = function (storageAccountOrConnectionString, storageAccessKey, host) { return new FileService(storageAccountOrConnectionString, storageAccessKey, host); }; /** * Creates a new {@link FileService} object using the host Uri and the SAS credentials provided. * * @param {string|object} host The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @param {string} sasToken The Shared Access Signature token. * @return {FileService} A new FileService object with the SAS credentials. */ exports.createFileServiceWithSas = function (hostUri, sasToken) { return new FileService(null, null, hostUri, sasToken); }; /** * Queue client exports. * @ignore */ var QueueService = require('./services/queue/queueservice'); exports.QueueService = QueueService; exports.QueueUtilities = require('./services/queue/queueutilities'); exports.QueueMessageEncoder = require('./services/queue/queuemessageencoder'); /** * Creates a new {@link QueueService} object. * If no storageaccount or storageaccesskey are provided, the AZURE_STORAGE_CONNECTION_STRING and then the AZURE_STORAGE_ACCOUNT and AZURE_STORAGE_ACCESS_KEY * environment variables will be used. * * @param {string} [storageAccountOrConnectionString] The storage account or the connection string. * @param {string} [storageAccessKey] The storage access key. * @param {string|object} [host] The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @return {QueueService} A new QueueService object. */ exports.createQueueService = function (storageAccountOrConnectionString, storageAccessKey, host) { return new QueueService(storageAccountOrConnectionString, storageAccessKey, host); }; /** * Creates a new {@link QueueService} object using the host Uri and the SAS credentials provided. * * @param {string|object} host The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @param {string} sasToken The Shared Access Signature token. * @return {QueueService} A new QueueService object with the SAS credentials. */ exports.createQueueServiceWithSas = function(hostUri, sasToken) { return new QueueService(null, null, hostUri, sasToken); }; /** * Creates a new {@link QueueService} object using the host Uri and the {@link TokenCredential} provided, which supports OAuth. * * @param {string|object} host The host address. To define primary only, pass a string. * Otherwise 'host.primaryHost' defines the primary host and 'host.secondaryHost' defines the secondary host. * @param {TokenCredential} tokenCredential The TokenCredential object. * @return {QueueService} A new QueueService object with the {@link TokenCredential} object. * * @example * var azure = require('azure-storage'); * var tokenCredential = new azure.TokenCredential('myOAuthAccessToken'); * var queueService = azure.createQueueServiceWithTokenCredential('https://account.queue.core.windows.net', tokenCredential); * tokenCredential.set('updatedOAuthAccessToken'); */ exports.createQueueServiceWithTokenCredential = function (host, tokenCredential) { return new QueueService(null, null, host, null, null, tokenCredential); }; /** * Account SAS * @ignore */ var azureCommon = require('./common/common.node'); var StorageServiceClient = azureCommon.StorageServiceClient; var SharedKey = azureCommon.SharedKey; /** * Generates an account shared access signature token * * @param {string} [storageAccountOrConnectionString] The storage account or the connection string. * @param {string} [storageAccessKey] The storage access key. * @param {object} sharedAccessPolicy The shared access policy. * @param {SharedAccessServices} sharedAccessPolicy.AccessPolicy.Services The services (blob, file, queue, table) for a shared access signature associated with this shared access policy. * Refer to `Constants.AccountSasConstants.Services`. * @param {SharedAccessResourceTypes} sharedAccessPolicy.AccessPolicy.ResourceTypes The resource type for a shared access signature associated with this shared access policy. * Refer to `Constants.AccountSasConstants.ResourceTypes`. * @param {SharedAccessPermissions} sharedAccessPolicy.AccessPolicy.Permissions The permissions for a shared access signature. * Refer to `Constants.AccountSasConstants.Permissions`. * @param {date} sharedAccessPolicy.AccessPolicy.Start The time at which the Shared Access Signature becomes valid. * @param {date} sharedAccessPolicy.AccessPolicy.Expiry The time at which the Shared Access Signature becomes expired. * @param {string} sharedAccessPolicy.AccessPolicy.IPAddressOrRange The permission type. Refer to `Constants.AccountSasConstants.ResourceTypes`. * @param {string} sharedAccessPolicy.AccessPolicy.Protocols The possible protocols. Refer to `Constants.AccountSasConstants.ResourceTypes`. */ exports.generateAccountSharedAccessSignature = function(storageAccountOrConnectionString, storageAccessKey, sharedAccessAccountPolicy) { var storageSettings = StorageServiceClient.getStorageSettings(storageAccountOrConnectionString, storageAccessKey); var sharedKey = new SharedKey(storageSettings._name, storageSettings._key); return sharedKey.generateAccountSignedQueryString(sharedAccessAccountPolicy); }; /** * A callback that returns a response object. * @callback errorOrResponse * @param {object} error If an error occurs, will contain information about the error. * @param {object} response Contains information about the response returned for the operation. * For example, HTTP status codes and headers. */ /** * A callback that returns result and response objects. * @callback errorOrResult * @param {object} error If an error occurs, will contain information about the error. * @param {object} result The result of the operation. * @param {object} response Contains information about the response returned for the operation. * For example, HTTP status codes and headers. */ /** * Specifying conditional headers for blob service operations. See http://msdn.microsoft.com/en-us/library/dd179371.aspx for more information. * @typedef {object} AccessConditions * @property {string} EtagMatch If the ETag for the blob matches the specified ETag. * Specify the wildcard character (*) to perform the operation only if the resource does exist, and fail the operation if it does not exist. * @property {string} EtagNonMatch If the ETag for the blob does not match the specified ETag. * Specify the wildcard character (*) to perform the operation only if the resource does not exist, and fail the operation if it does exist. * @property {Date|string} DateModifedSince If the blob has been modified since the specified date. * @property {Date|string} DateUnModifiedSince If the blob has not been modified since the specified date. * @property {Number|string} SequenceNumberLessThanOrEqual If the blob's sequence number is less than or equal to the specified value. * For Put Page operation only. See https://msdn.microsoft.com/en-us/library/azure/ee691975.aspx for more information. * @property {Number|string} SequenceNumberLessThan If the blob's sequence number is less than the specified value. * For Put Page operation only. See https://msdn.microsoft.com/en-us/library/azure/ee691975.aspx for more information. * @property {Number|string} SequenceNumberEqual If the blob's sequence number is equal to the specified value. * For Put Page operation only. See https://msdn.microsoft.com/en-us/library/azure/ee691975.aspx for more information. * @property {Number|string} MaxBlobSize If the Append Block operation would cause the blob to exceed that limit or if the blob size is already greater than the specified value. * For Append Block operation only. See https://msdn.microsoft.com/en-us/library/mt427365.aspx for more information. * @property {Number|string} MaxAppendPosition If the append position is equal to the specified value. * For Append Block operation only. See https://msdn.microsoft.com/en-us/library/mt427365.aspx for more information. */ /** * The properties of a storage service, including properties of Storage Analytics and CORS (Cross-Origin Resource Sharing) rules. * @typedef {object} ServiceProperties * @property {string} DefaultServiceVersion The default version of Storage Analytics currently in use. * @property {LoggingProperties} Logging The Logging settings. * @property {MetricsProperties} HourMetrics The HourMetrics settings provide a summary of request statistics grouped by API in hourly aggregates. * @property {MetricsProperties} MinuteMetrics The HourMetrics settings provide request statistics grouped by API for each minute. * @property {object} Cors Groups all CORS rules. * @property {CorsRule[]} Cors.CorsRules Groups settings for a `[CORS rule]{@link CorsRule}`. */ /** * The properties of a storage account. * @typedef {object} AccountProperties * @property {string} SkuName The header that specifies storage SKU, also known as account type. * @property {string} AccountKind The header that describes the flavour of the storage account, also known as account kind. */ /** * The properties of a blob storage service, including properties of Storage Analytics, CORS (Cross-Origin Resource Sharing) rules and Static Webiste configurations. * @typedef {object} BlobServiceProperties * @property {string} DefaultServiceVersion The default version of Storage Analytics currently in use. * @property {LoggingProperties} Logging The Logging settings. * @property {MetricsProperties} HourMetrics The HourMetrics settings provide a summary of request statistics grouped by API in hourly aggregates. * @property {MetricsProperties} MinuteMetrics The HourMetrics settings provide request statistics grouped by API for each minute. * @property {StaticWebsiteProperties} StaticWebsite The Azure Static Website settings. * @property {object} Cors Groups all CORS rules. * @property {CorsRule[]} Cors.CorsRules Groups settings for a `[CORS rule]{@link CorsRule}`. */ /** * The Azure Static Website settings. * @typedef {object} StaticWebsiteProperties * @property {boolean} Enabled Whether feature of Static Website is enabled. * @property {string} IndexDocument Indicates index document page path. * @property {string} ErrorDocument404Path Indicates 404 document page path. */ /** * The Azure Analytics logging settings. * @typedef {object} LoggingProperties * @property {string} Version The version of Storage Analytics currently in use for logging. * @property {boolean} Delete Indicates whether delete requests are being logged. * @property {boolean} Read Indicates whether read requests are being logged. * @property {boolean} Write Indicates whether write requests are being logged. * @property {RetentionPolicy} RetentionPolicy The retention policy of the log data. */ /** * The setting of Azure Analytics summary of request stastics. * @typedef {object} MetricsProperties * @property {string} Version The version of Storage Analytics currently in use for hour metrics. * @property {string} Enabled Indicates whether metrics are enabled * @property {boolean} IncludeAPIs Indicates whether metrics generate summary statistics for called API operations. * @property {RetentionPolicy} RetentionPolicy The retention policy of the metrics data. */ /** * The CORS rule of a storage service. * @typedef {object} CorsRule * @property {string[]} AllowedMethods A list of HTTP methods that are allowed to be executed by the origin. For Azure Storage, permitted methods are DELETE, GET, HEAD, MERGE, POST, OPTIONS or PUT. * @property {string[]} AllowedOrigins A list of origin domains that are allowed via CORS, or "*" if all domains are allowed. * @property {string[]} AllowedHeaders A list of headers allowed to be part of the cross-origin request. * @property {string[]} ExposedHeaders A list of response headers to expose to CORS clients. * @property {number} MaxAgeInSeconds The number of seconds that the client/browser should cache a preflight response. */ /** * The Azure Analytics logging or metrics retention policy. * @typedef {object} RetentionPolicy * @property {boolean} Enabled Indicates whether a retention policy is enabled for the storage service. * @property {number} Days Indicates the number of days that logging data is retained. All data older than this value will be deleted. */ /** * The access policy. * @typedef {object} AccessPolicy * @property {string} Permissions The permission type. * @property {Date} Start The time at which the access policy becomes valid. * @property {Date} Expiry The time at which the access policy becomes expired. * @property {string} IPAddressOrRange An IP address or a range of IP addresses from which to accept requests. When specifying a range, note that the range is inclusive. * @property {string} Protocols The protocols permitted for a request made with the SAS. * @property {string} Services The services (blob, file, queue, table) for a shared access signature associated with this shared access policy. * @property {string} ResourceTypes The resource type for a shared access signature associated with this shared access policy. */ /** * The service statistics. * @typedef {object} ServiceStats * @property {object} GeoReplication The geo replication stastics. * @property {string} GeoReplication.Status The status of the secondary location. * @property {Date} GeoReplication.LastSyncTime A GMT date/time value, to the second. * All primary writes preceding this value are guaranteed to be available for read operations at the secondary. * Primary writes after this point in time may or may not be available for reads. */ /** * The range. * @typedef {object} Range * @property {number} start The start of the range. * @property {number} end The end of the range. */ /** * The range diff. Refer to https://msdn.microsoft.com/en-us/library/azure/mt736912.aspx * @typedef {object} RangeDiff * @property {number} start The start of the range. * @property {number} end The end of the range. * @property {boolean} isCleared If the range is cleared or not. */ exports.Constants = azureCommon.Constants; exports.StorageUtilities = azureCommon.StorageUtilities; exports.AccessCondition = azureCommon.AccessCondition; exports.SR = azureCommon.SR; exports.StorageServiceClient = StorageServiceClient; exports.Logger = azureCommon.Logger; exports.WebResource = azureCommon.WebResource; exports.Validate = azureCommon.validate; exports.date = azureCommon.date; exports.TokenCredential = azureCommon.TokenCredential; // Other filters exports.LinearRetryPolicyFilter = azureCommon.LinearRetryPolicyFilter; exports.ExponentialRetryPolicyFilter = azureCommon.ExponentialRetryPolicyFilter; exports.RetryPolicyFilter = azureCommon.RetryPolicyFilter;