@azure/app-configuration 1.3.2-alpha.20220401.1 → 1.4.0-alpha.20220407.2
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/CHANGELOG.md +11 -7
- package/dist/index.js +153 -374
- package/dist/index.js.map +1 -1
- package/dist-esm/src/appConfigCredential.js +24 -30
- package/dist-esm/src/appConfigCredential.js.map +1 -1
- package/dist-esm/src/appConfigurationClient.js +48 -63
- package/dist-esm/src/appConfigurationClient.js.map +1 -1
- package/dist-esm/src/generated/src/appConfiguration.js +47 -89
- package/dist-esm/src/generated/src/appConfiguration.js.map +1 -1
- package/dist-esm/src/generated/src/index.js +0 -1
- package/dist-esm/src/generated/src/index.js.map +1 -1
- package/dist-esm/src/generated/src/models/index.js +78 -1
- package/dist-esm/src/generated/src/models/index.js.map +1 -1
- package/dist-esm/src/generated/src/models/mappers.js.map +1 -1
- package/dist-esm/src/generated/src/models/parameters.js +7 -8
- package/dist-esm/src/generated/src/models/parameters.js.map +1 -1
- package/dist-esm/src/internal/helpers.js +33 -18
- package/dist-esm/src/internal/helpers.js.map +1 -1
- package/dist-esm/src/internal/synctokenpolicy.js +9 -18
- package/dist-esm/src/internal/synctokenpolicy.js.map +1 -1
- package/dist-esm/src/internal/tracingHelpers.js +1 -1
- package/dist-esm/src/internal/tracingHelpers.js.map +1 -1
- package/dist-esm/src/models.js.map +1 -1
- package/dist-esm/test/internal/helpers.spec.js +3 -12
- package/dist-esm/test/internal/helpers.spec.js.map +1 -1
- package/dist-esm/test/internal/http.spec.js +2 -14
- package/dist-esm/test/internal/http.spec.js.map +1 -1
- package/dist-esm/test/internal/node/throttlingRetryPolicy.spec.js +6 -5
- package/dist-esm/test/internal/node/throttlingRetryPolicy.spec.js.map +1 -1
- package/dist-esm/test/internal/tracingHelpers.spec.js.map +1 -1
- package/dist-esm/test/public/auth.spec.js +1 -1
- package/dist-esm/test/public/auth.spec.js.map +1 -1
- package/dist-esm/test/public/etags.spec.js +1 -2
- package/dist-esm/test/public/etags.spec.js.map +1 -1
- package/dist-esm/test/public/index.readonlytests.spec.js +6 -1
- package/dist-esm/test/public/index.readonlytests.spec.js.map +1 -1
- package/dist-esm/test/public/index.spec.js +23 -8
- package/dist-esm/test/public/index.spec.js.map +1 -1
- package/dist-esm/test/public/secretReference.spec.js.map +1 -1
- package/dist-esm/test/public/throwOrNotThrow.spec.js +1 -1
- package/dist-esm/test/public/throwOrNotThrow.spec.js.map +1 -1
- package/dist-esm/test/public/utils/testHelpers.js.map +1 -1
- package/package.json +10 -2
- package/types/app-configuration.d.ts +5 -13
- package/dist-esm/src/generated/src/appConfigurationContext.js +0 -46
- package/dist-esm/src/generated/src/appConfigurationContext.js.map +0 -1
- package/dist-esm/src/policies/throttlingRetryPolicy.js +0 -126
- package/dist-esm/src/policies/throttlingRetryPolicy.js.map +0 -1
- package/dist-esm/test/internal/throttlingRetryPolicyTests.spec.js +0 -145
- package/dist-esm/test/internal/throttlingRetryPolicyTests.spec.js.map +0 -1
|
@@ -1,37 +1,31 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
|
-
import { URLBuilder, } from "@azure/core-http";
|
|
4
3
|
import { sha256Digest, sha256Hmac } from "./internal/cryptoHelpers";
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
5
|
+
* Create an HTTP pipeline policy to authenticate a request
|
|
6
|
+
* using an `AzureKeyCredential` for AppConfig.
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
webResource.headers.set("x-ms-content-sha256", contentHash);
|
|
31
|
-
// Syntax for Authorization header
|
|
32
|
-
// Reference - https://docs.microsoft.com/en-us/azure/azure-app-configuration/rest-api-authentication-hmac#syntax
|
|
33
|
-
webResource.headers.set("Authorization", `HMAC-SHA256 Credential=${this.credential}&SignedHeaders=${signedHeaders}&Signature=${signature}`);
|
|
34
|
-
return webResource;
|
|
35
|
-
}
|
|
8
|
+
export function appConfigKeyCredentialPolicy(credential, secret) {
|
|
9
|
+
return {
|
|
10
|
+
name: "AppConfigKeyCredentialPolicy",
|
|
11
|
+
async sendRequest(request, next) {
|
|
12
|
+
var _a;
|
|
13
|
+
const verb = request.method;
|
|
14
|
+
const utcNow = new Date().toUTCString();
|
|
15
|
+
const contentHash = await sha256Digest(((_a = request.body) === null || _a === void 0 ? void 0 : _a.toString()) || "");
|
|
16
|
+
const signedHeaders = "x-ms-date;host;x-ms-content-sha256";
|
|
17
|
+
const url = new URL(request.url);
|
|
18
|
+
const query = url.search;
|
|
19
|
+
const urlPathAndQuery = query ? `${url.pathname}${query}` : url.pathname;
|
|
20
|
+
const stringToSign = `${verb}\n${urlPathAndQuery}\n${utcNow};${url.host};${contentHash}`;
|
|
21
|
+
const signature = await sha256Hmac(secret, stringToSign);
|
|
22
|
+
request.headers.set("x-ms-date", utcNow);
|
|
23
|
+
request.headers.set("x-ms-content-sha256", contentHash);
|
|
24
|
+
// Syntax for Authorization header
|
|
25
|
+
// Reference - https://docs.microsoft.com/en-us/azure/azure-app-configuration/rest-api-authentication-hmac#syntax
|
|
26
|
+
request.headers.set("Authorization", `HMAC-SHA256 Credential=${credential}&SignedHeaders=${signedHeaders}&Signature=${signature}`);
|
|
27
|
+
return next(request);
|
|
28
|
+
},
|
|
29
|
+
};
|
|
36
30
|
}
|
|
37
31
|
//# sourceMappingURL=appConfigCredential.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appConfigCredential.js","sourceRoot":"","sources":["../../src/appConfigCredential.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;
|
|
1
|
+
{"version":3,"file":"appConfigCredential.js","sourceRoot":"","sources":["../../src/appConfigCredential.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAQlC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,UAAkB,EAAE,MAAc;IAC7E,OAAO;QACL,IAAI,EAAE,8BAA8B;QACpC,KAAK,CAAC,WAAW,CAAC,OAAwB,EAAE,IAAiB;;YAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,CAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,QAAQ,EAAE,KAAI,EAAE,CAAC,CAAC;YACvE,MAAM,aAAa,GAAG,oCAAoC,CAAC;YAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;YACzB,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;YACzE,MAAM,YAAY,GAAG,GAAG,IAAI,KAAK,eAAe,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;YACzF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAEzD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YACzC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;YACxD,kCAAkC;YAClC,iHAAiH;YACjH,OAAO,CAAC,OAAO,CAAC,GAAG,CACjB,eAAe,EACf,0BAA0B,UAAU,kBAAkB,aAAa,cAAc,SAAS,EAAE,CAC7F,CAAC;YAEF,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\nimport { sha256Digest, sha256Hmac } from \"./internal/cryptoHelpers\";\n\n/**\n * Create an HTTP pipeline policy to authenticate a request\n * using an `AzureKeyCredential` for AppConfig.\n */\nexport function appConfigKeyCredentialPolicy(credential: string, secret: string): PipelinePolicy {\n return {\n name: \"AppConfigKeyCredentialPolicy\",\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n const verb = request.method;\n const utcNow = new Date().toUTCString();\n const contentHash = await sha256Digest(request.body?.toString() || \"\");\n const signedHeaders = \"x-ms-date;host;x-ms-content-sha256\";\n const url = new URL(request.url);\n const query = url.search;\n const urlPathAndQuery = query ? `${url.pathname}${query}` : url.pathname;\n const stringToSign = `${verb}\\n${urlPathAndQuery}\\n${utcNow};${url.host};${contentHash}`;\n const signature = await sha256Hmac(secret, stringToSign);\n\n request.headers.set(\"x-ms-date\", utcNow);\n request.headers.set(\"x-ms-content-sha256\", contentHash);\n // Syntax for Authorization header\n // Reference - https://docs.microsoft.com/en-us/azure/azure-app-configuration/rest-api-authentication-hmac#syntax\n request.headers.set(\n \"Authorization\",\n `HMAC-SHA256 Credential=${credential}&SignedHeaders=${signedHeaders}&Signature=${signature}`\n );\n\n return next(request);\n },\n };\n}\n"]}
|
|
@@ -3,22 +3,19 @@
|
|
|
3
3
|
import { __asyncDelegator, __asyncGenerator, __asyncValues, __await } from "tslib";
|
|
4
4
|
// https://azure.github.io/azure-sdk/typescript_design.html#ts-config-lib
|
|
5
5
|
/// <reference lib="esnext.asynciterable" />
|
|
6
|
-
import {
|
|
6
|
+
import { appConfigKeyCredentialPolicy } from "./appConfigCredential";
|
|
7
7
|
import { AppConfiguration } from "./generated/src/appConfiguration";
|
|
8
|
-
import { isTokenCredential
|
|
9
|
-
import { throttlingRetryPolicy } from "./policies/throttlingRetryPolicy";
|
|
8
|
+
import { isTokenCredential } from "@azure/core-auth";
|
|
10
9
|
import "@azure/core-asynciterator-polyfill";
|
|
11
|
-
import { checkAndFormatIfAndIfNoneMatch, extractAfterTokenFromNextLink,
|
|
12
|
-
import { tracingPolicy } from "@azure/core-http";
|
|
10
|
+
import { assertResponse, checkAndFormatIfAndIfNoneMatch, extractAfterTokenFromNextLink, formatAcceptDateTime, formatFieldsForSelect, formatFiltersAndSelect, makeConfigurationSettingEmpty, serializeAsConfigurationSettingParam, transformKeyValue, transformKeyValueResponse, transformKeyValueResponseWithStatusCode, } from "./internal/helpers";
|
|
13
11
|
import { trace as traceFromTracingHelpers } from "./internal/tracingHelpers";
|
|
14
|
-
import {
|
|
15
|
-
|
|
12
|
+
import { SyncTokens, syncTokenPolicy } from "./internal/synctokenpolicy";
|
|
13
|
+
import { deserializationPolicy, deserializationPolicyName, } from "@azure/core-client";
|
|
14
|
+
import { bearerTokenAuthenticationPolicy } from "@azure/core-rest-pipeline";
|
|
16
15
|
/**
|
|
17
|
-
* This constant should always be the same as the package.json's version - we use it when forming the
|
|
18
|
-
* User - Agent header. There's a unit test that makes sure it always stays in sync.
|
|
19
16
|
* @internal
|
|
20
17
|
*/
|
|
21
|
-
export const packageVersion = "1.
|
|
18
|
+
export const packageVersion = "1.4.0-beta.1";
|
|
22
19
|
const apiVersion = "1.0";
|
|
23
20
|
const ConnectionStringRegex = /Endpoint=(.*);Id=(.*);Secret=(.*)/;
|
|
24
21
|
const deserializationContentTypes = {
|
|
@@ -40,24 +37,35 @@ export class AppConfigurationClient {
|
|
|
40
37
|
let appConfigOptions = {};
|
|
41
38
|
let appConfigCredential;
|
|
42
39
|
let appConfigEndpoint;
|
|
40
|
+
let authPolicy;
|
|
43
41
|
if (isTokenCredential(tokenCredentialOrOptions)) {
|
|
44
42
|
appConfigOptions = options || {};
|
|
45
43
|
appConfigCredential = tokenCredentialOrOptions;
|
|
46
|
-
appConfigEndpoint = connectionStringOrEndpoint
|
|
44
|
+
appConfigEndpoint = connectionStringOrEndpoint.endsWith("/")
|
|
45
|
+
? connectionStringOrEndpoint.slice(0, -1)
|
|
46
|
+
: connectionStringOrEndpoint;
|
|
47
|
+
authPolicy = bearerTokenAuthenticationPolicy({
|
|
48
|
+
scopes: `${appConfigEndpoint}/.default`,
|
|
49
|
+
credential: appConfigCredential,
|
|
50
|
+
});
|
|
47
51
|
}
|
|
48
52
|
else {
|
|
49
53
|
appConfigOptions = tokenCredentialOrOptions || {};
|
|
50
54
|
const regexMatch = connectionStringOrEndpoint === null || connectionStringOrEndpoint === void 0 ? void 0 : connectionStringOrEndpoint.match(ConnectionStringRegex);
|
|
51
55
|
if (regexMatch) {
|
|
52
|
-
appConfigCredential = new AppConfigCredential(regexMatch[2], regexMatch[3]);
|
|
53
56
|
appConfigEndpoint = regexMatch[1];
|
|
57
|
+
authPolicy = appConfigKeyCredentialPolicy(regexMatch[2], regexMatch[3]);
|
|
54
58
|
}
|
|
55
59
|
else {
|
|
56
60
|
throw new Error(`Invalid connection string. Valid connection strings should match the regex '${ConnectionStringRegex.source}'.`);
|
|
57
61
|
}
|
|
58
62
|
}
|
|
59
63
|
this._syncTokens = appConfigOptions.syncTokens || new SyncTokens();
|
|
60
|
-
this.client = new AppConfiguration(
|
|
64
|
+
this.client = new AppConfiguration(appConfigEndpoint, apiVersion, appConfigOptions);
|
|
65
|
+
this.client.pipeline.addPolicy(authPolicy, { phase: "Sign" });
|
|
66
|
+
this.client.pipeline.addPolicy(syncTokenPolicy(this._syncTokens), { afterPhase: "Retry" });
|
|
67
|
+
this.client.pipeline.removePolicy({ name: deserializationPolicyName });
|
|
68
|
+
this.client.pipeline.addPolicy(deserializationPolicy({ expectedContentTypes: deserializationContentTypes }), { phase: "Deserialize" });
|
|
61
69
|
}
|
|
62
70
|
/**
|
|
63
71
|
* Add a setting into the Azure App Configuration service, failing if it
|
|
@@ -74,7 +82,9 @@ export class AppConfigurationClient {
|
|
|
74
82
|
return this._trace("addConfigurationSetting", options, async (newOptions) => {
|
|
75
83
|
const keyValue = serializeAsConfigurationSettingParam(configurationSetting);
|
|
76
84
|
const originalResponse = await this.client.putKeyValue(configurationSetting.key, Object.assign({ ifNoneMatch: "*", label: configurationSetting.label, entity: keyValue }, newOptions));
|
|
77
|
-
|
|
85
|
+
const response = transformKeyValueResponse(originalResponse);
|
|
86
|
+
assertResponse(response);
|
|
87
|
+
return response;
|
|
78
88
|
});
|
|
79
89
|
}
|
|
80
90
|
/**
|
|
@@ -89,8 +99,13 @@ export class AppConfigurationClient {
|
|
|
89
99
|
*/
|
|
90
100
|
deleteConfigurationSetting(id, options = {}) {
|
|
91
101
|
return this._trace("deleteConfigurationSetting", options, async (newOptions) => {
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
let status;
|
|
103
|
+
const originalResponse = await this.client.deleteKeyValue(id.key, Object.assign(Object.assign(Object.assign({ label: id.label }, newOptions), checkAndFormatIfAndIfNoneMatch(id, options)), { onResponse: (response) => {
|
|
104
|
+
status = response.status;
|
|
105
|
+
} }));
|
|
106
|
+
const response = transformKeyValueResponseWithStatusCode(originalResponse, status);
|
|
107
|
+
assertResponse(response);
|
|
108
|
+
return response;
|
|
94
109
|
});
|
|
95
110
|
}
|
|
96
111
|
/**
|
|
@@ -105,8 +120,11 @@ export class AppConfigurationClient {
|
|
|
105
120
|
*/
|
|
106
121
|
async getConfigurationSetting(id, options = {}) {
|
|
107
122
|
return this._trace("getConfigurationSetting", options, async (newOptions) => {
|
|
108
|
-
|
|
109
|
-
const
|
|
123
|
+
let status;
|
|
124
|
+
const originalResponse = await this.client.getKeyValue(id.key, Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, newOptions), { label: id.label, select: formatFieldsForSelect(options.fields) }), formatAcceptDateTime(options)), checkAndFormatIfAndIfNoneMatch(id, options)), { onResponse: (response) => {
|
|
125
|
+
status = response.status;
|
|
126
|
+
} }));
|
|
127
|
+
const response = transformKeyValueResponseWithStatusCode(originalResponse, status);
|
|
110
128
|
// 304 only comes back if the user has passed a conditional option in their
|
|
111
129
|
// request _and_ the remote object has the same etag as what the user passed.
|
|
112
130
|
if (response.statusCode === 304) {
|
|
@@ -116,6 +134,7 @@ export class AppConfigurationClient {
|
|
|
116
134
|
// and now we'll undefine all the other properties that are not HTTP related
|
|
117
135
|
makeConfigurationSettingEmpty(response);
|
|
118
136
|
}
|
|
137
|
+
assertResponse(response);
|
|
119
138
|
return response;
|
|
120
139
|
});
|
|
121
140
|
}
|
|
@@ -245,9 +264,9 @@ export class AppConfigurationClient {
|
|
|
245
264
|
}));
|
|
246
265
|
yield __await(yield* __asyncDelegator(__asyncValues(this.createListRevisionsPageFromResponse(currentResponse))));
|
|
247
266
|
while (currentResponse.nextLink) {
|
|
248
|
-
currentResponse = yield __await(this._trace("listRevisions", options, (newOptions) => {
|
|
267
|
+
currentResponse = (yield __await(this._trace("listRevisions", options, (newOptions) => {
|
|
249
268
|
return this.client.getRevisions(Object.assign(Object.assign(Object.assign(Object.assign({}, newOptions), formatAcceptDateTime(options)), formatFiltersAndSelect(options)), { after: extractAfterTokenFromNextLink(currentResponse.nextLink) }));
|
|
250
|
-
}));
|
|
269
|
+
})));
|
|
251
270
|
if (!currentResponse.items) {
|
|
252
271
|
break;
|
|
253
272
|
}
|
|
@@ -274,8 +293,9 @@ export class AppConfigurationClient {
|
|
|
274
293
|
async setConfigurationSetting(configurationSetting, options = {}) {
|
|
275
294
|
return this._trace("setConfigurationSetting", options, async (newOptions) => {
|
|
276
295
|
const keyValue = serializeAsConfigurationSettingParam(configurationSetting);
|
|
277
|
-
const response = await this.client.putKeyValue(configurationSetting.key, Object.assign(Object.assign(Object.assign({}, newOptions), { label: configurationSetting.label, entity: keyValue }), checkAndFormatIfAndIfNoneMatch(configurationSetting, options)));
|
|
278
|
-
|
|
296
|
+
const response = transformKeyValueResponse(await this.client.putKeyValue(configurationSetting.key, Object.assign(Object.assign(Object.assign({}, newOptions), { label: configurationSetting.label, entity: keyValue }), checkAndFormatIfAndIfNoneMatch(configurationSetting, options))));
|
|
297
|
+
assertResponse(response);
|
|
298
|
+
return response;
|
|
279
299
|
});
|
|
280
300
|
}
|
|
281
301
|
/**
|
|
@@ -284,14 +304,16 @@ export class AppConfigurationClient {
|
|
|
284
304
|
*/
|
|
285
305
|
async setReadOnly(id, readOnly, options = {}) {
|
|
286
306
|
return this._trace("setReadOnly", options, async (newOptions) => {
|
|
307
|
+
let response;
|
|
287
308
|
if (readOnly) {
|
|
288
|
-
|
|
289
|
-
return transformKeyValueResponse(response);
|
|
309
|
+
response = await this.client.putLock(id.key, Object.assign(Object.assign(Object.assign({}, newOptions), { label: id.label }), checkAndFormatIfAndIfNoneMatch(id, options)));
|
|
290
310
|
}
|
|
291
311
|
else {
|
|
292
|
-
|
|
293
|
-
return transformKeyValueResponse(response);
|
|
312
|
+
response = await this.client.deleteLock(id.key, Object.assign(Object.assign(Object.assign({}, newOptions), { label: id.label }), checkAndFormatIfAndIfNoneMatch(id, options)));
|
|
294
313
|
}
|
|
314
|
+
response = transformKeyValueResponse(response);
|
|
315
|
+
assertResponse(response);
|
|
316
|
+
return response;
|
|
295
317
|
});
|
|
296
318
|
}
|
|
297
319
|
/**
|
|
@@ -303,41 +325,4 @@ export class AppConfigurationClient {
|
|
|
303
325
|
this._syncTokens.addSyncTokenFromHeaderValue(syncToken);
|
|
304
326
|
}
|
|
305
327
|
}
|
|
306
|
-
/**
|
|
307
|
-
* Gets the options for the generated AppConfigurationClient
|
|
308
|
-
* @internal
|
|
309
|
-
*/
|
|
310
|
-
export function getGeneratedClientOptions(endpoint, syncTokens, internalAppConfigOptions) {
|
|
311
|
-
const retryPolicies = [
|
|
312
|
-
exponentialRetryPolicy(),
|
|
313
|
-
systemErrorRetryPolicy(),
|
|
314
|
-
throttlingRetryPolicy(internalAppConfigOptions.retryOptions),
|
|
315
|
-
];
|
|
316
|
-
const userAgent = getUserAgentPrefix(internalAppConfigOptions.userAgentOptions &&
|
|
317
|
-
internalAppConfigOptions.userAgentOptions.userAgentPrefix);
|
|
318
|
-
return {
|
|
319
|
-
endpoint,
|
|
320
|
-
deserializationContentTypes,
|
|
321
|
-
// we'll add in our own custom retry policies
|
|
322
|
-
noRetryPolicy: true,
|
|
323
|
-
requestPolicyFactories: (defaults) => [
|
|
324
|
-
tracingPolicy({ userAgent }),
|
|
325
|
-
syncTokenPolicy(syncTokens),
|
|
326
|
-
userAgentPolicy({ value: userAgent }),
|
|
327
|
-
...retryPolicies,
|
|
328
|
-
...defaults,
|
|
329
|
-
],
|
|
330
|
-
generateClientRequestIdHeader: true,
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* @internal
|
|
335
|
-
*/
|
|
336
|
-
export function getUserAgentPrefix(userSuppliedUserAgent) {
|
|
337
|
-
const appConfigDefaultUserAgent = `${packageName}/${packageVersion} ${getCoreHttpDefaultUserAgentValue()}`;
|
|
338
|
-
if (!userSuppliedUserAgent) {
|
|
339
|
-
return appConfigDefaultUserAgent;
|
|
340
|
-
}
|
|
341
|
-
return `${userSuppliedUserAgent} ${appConfigDefaultUserAgent}`;
|
|
342
|
-
}
|
|
343
328
|
//# sourceMappingURL=appConfigurationClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appConfigurationClient.js","sourceRoot":"","sources":["../../src/appConfigurationClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAElC,yEAAyE;AACzE,4CAA4C;AAE5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EAGtB,wBAAwB,IAAI,gCAAgC,EAC5D,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,oCAAoC,CAAC;AAwB5C,OAAO,EACL,8BAA8B,EAC9B,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,yBAAyB,EACzB,uCAAuC,EACvC,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,oCAAoC,GACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,KAAK,IAAI,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAK7E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAIzE,MAAM,WAAW,GAAG,4BAA4B,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AACtC,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,MAAM,qBAAqB,GAAG,mCAAmC,CAAC;AAClE,MAAM,2BAA2B,GAAG;IAClC,IAAI,EAAE;QACJ,gDAAgD;QAChD,6CAA6C;QAC7C,8CAA8C;QAC9C,iDAAiD;QACjD,+CAA+C;KAChD;CACF,CAAC;AAqCF;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAwBjC,YACE,0BAAkC,EAClC,wBAA0E,EAC1E,OAAuC;QAxBzC,cAAc;QACN,WAAM,GAAG,uBAAuB,CAAC;QAyBvC,IAAI,gBAAgB,GAA0C,EAAE,CAAC;QACjE,IAAI,mBAA+D,CAAC;QACpE,IAAI,iBAAyB,CAAC;QAE9B,IAAI,iBAAiB,CAAC,wBAAwB,CAAC,EAAE;YAC/C,gBAAgB,GAAI,OAAiD,IAAI,EAAE,CAAC;YAC5E,mBAAmB,GAAG,wBAAwB,CAAC;YAC/C,iBAAiB,GAAG,0BAA0B,CAAC;SAChD;aAAM;YACL,gBAAgB,GAAI,wBAAkE,IAAI,EAAE,CAAC;YAC7F,MAAM,UAAU,GAAG,0BAA0B,aAA1B,0BAA0B,uBAA1B,0BAA0B,CAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC5E,IAAI,UAAU,EAAE;gBACd,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5E,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;aACnC;iBAAM;gBACL,MAAM,IAAI,KAAK,CACb,+EAA+E,qBAAqB,CAAC,MAAM,IAAI,CAChH,CAAC;aACH;SACF;QAED,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,UAAU,IAAI,IAAI,UAAU,EAAE,CAAC;QAEnE,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAgB,CAChC,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,yBAAyB,CAAC,iBAAiB,EAAE,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CACjF,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,uBAAuB,CACrB,oBAGsD,EACtD,UAA0C,EAAE;QAE5C,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC1E,MAAM,QAAQ,GAAG,oCAAoC,CAAC,oBAAoB,CAAC,CAAC;YAC5E,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG,kBAC7E,WAAW,EAAE,GAAG,EAChB,KAAK,EAAE,oBAAoB,CAAC,KAAK,EACjC,MAAM,EAAE,QAAQ,IACb,UAAU,EACb,CAAC;YACH,OAAO,yBAAyB,CAAC,gBAAgB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,0BAA0B,CACxB,EAA0B,EAC1B,UAA6C,EAAE;QAE/C,OAAO,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC7E,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,gCAC9D,KAAK,EAAE,EAAE,CAAC,KAAK,IACZ,UAAU,GACV,8BAA8B,CAAC,EAAE,EAAE,OAAO,CAAC,EAC9C,CAAC;YAEH,OAAO,uCAAuC,CAAC,gBAAgB,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,uBAAuB,CAC3B,EAA0B,EAC1B,UAA0C,EAAE;QAE5C,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC1E,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,8DACxD,UAAU,KACb,KAAK,EAAE,EAAE,CAAC,KAAK,EACf,MAAM,EAAE,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,KAC1C,oBAAoB,CAAC,OAAO,CAAC,GAC7B,8BAA8B,CAAC,EAAE,EAAE,OAAO,CAAC,EAC9C,CAAC;YAEH,MAAM,QAAQ,GACZ,uCAAuC,CAAC,gBAAgB,CAAC,CAAC;YAE5D,2EAA2E;YAC3E,6EAA6E;YAC7E,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE;gBAC/B,sFAAsF;gBACtF,eAAe;gBACf,QAAQ,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAEtB,4EAA4E;gBAC5E,6BAA6B,CAAC,QAAQ,CAAC,CAAC;aACzC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,yBAAyB,CACvB,UAA4C,EAAE;QAE9C,MAAM,IAAI,GAAG,IAAI,CAAC,oCAAoC,CAAC,OAAO,CAAC,CAAC;QAEhE,OAAO;YACL,IAAI;gBACF,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,CAAC;YACD,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,EAAE,CAAC,WAAyB,EAAE,EAAE,EAAE;gBACtC,iFAAiF;gBACjF,2CAA2C;gBAC3C,OAAO,IAAI,CAAC,+BAA+B,iCACtC,OAAO,KACV,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,IAC7C,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IAEc,oCAAoC,CACjD,OAAyC;;;;gBAEzC,KAAyB,IAAA,KAAA,cAAA,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAA,IAAA;oBAA3D,MAAM,IAAI,WAAA,CAAA;oBACnB,KAAK,MAAM,oBAAoB,IAAI,IAAI,CAAC,KAAK,EAAE;wBAC7C,oBAAM,oBAAoB,CAAA,CAAC;qBAC5B;iBACF;;;;;;;;;QACH,CAAC;KAAA;IAEc,+BAA+B,CAC5C,UAA2D,EAAE;;YAE7D,IAAI,eAAe,GAAG,cAAM,IAAI,CAAC,MAAM,CACrC,2BAA2B,EAC3B,OAAO,EACP,KAAK,EAAE,UAAU,EAAE,EAAE;gBACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,6DAC1C,UAAU,GACV,oBAAoB,CAAC,OAAO,CAAC,GAC7B,sBAAsB,CAAC,OAAO,CAAC,KAClC,KAAK,EAAE,OAAO,CAAC,iBAAiB,IAChC,CAAC;gBAEH,OAAO,QAAQ,CAAC;YAClB,CAAC,CACF,CAAA,CAAC;YAEF,cAAA,KAAK,CAAC,CAAC,iBAAA,cAAA,IAAI,CAAC,uCAAuC,CAAC,eAAe,CAAC,CAAA,CAAA,CAAA,CAAC;YAErE,OAAO,eAAe,CAAC,QAAQ,EAAE;gBAC/B,eAAe,GAAG,cAAM,IAAI,CAAC,MAAM,CACjC,2BAA2B,EAC3B,OAAO;gBACP,mCAAmC;gBACnC,KAAK,EAAE,UAAU,EAAE,EAAE;oBACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,6DAC1C,UAAU,GACV,oBAAoB,CAAC,OAAO,CAAC,GAC7B,sBAAsB,CAAC,OAAO,CAAC,KAClC,KAAK,EAAE,6BAA6B,CAAC,eAAe,CAAC,QAAS,CAAC,IAC/D,CAAC;oBAEH,OAAO,QAAQ,CAAC;gBAClB,CAAC,CACF,CAAA,CAAC;gBAEF,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;oBAC1B,MAAM;iBACP;gBAED,cAAA,KAAK,CAAC,CAAC,iBAAA,cAAA,IAAI,CAAC,uCAAuC,CAAC,eAAe,CAAC,CAAA,CAAA,CAAA,CAAC;aACtE;QACH,CAAC;KAAA;IAEO,CAAC,uCAAuC,CAC9C,eAAqD;QAErD,sCACK,eAAe,KAClB,KAAK,EAAE,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,EACxF,iBAAiB,EAAE,eAAe,CAAC,QAAQ;gBACzC,CAAC,CAAC,6BAA6B,CAAC,eAAe,CAAC,QAAQ,CAAC;gBACzD,CAAC,CAAC,SAAS,GACd,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,aAAa,CACX,OAA8B;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAEpD,OAAO;YACL,IAAI;gBACF,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,CAAC;YACD,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,EAAE,CAAC,WAAyB,EAAE,EAAE,EAAE;gBACtC,iFAAiF;gBACjF,2CAA2C;gBAC3C,OAAO,IAAI,CAAC,mBAAmB,iCAC1B,OAAO,KACV,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,IAC7C,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IAEc,wBAAwB,CACrC,OAA8B;;;;gBAE9B,KAAyB,IAAA,KAAA,cAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA,IAAA;oBAA/C,MAAM,IAAI,WAAA,CAAA;oBACnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;wBAC7B,oBAAM,IAAI,CAAA,CAAC;qBACZ;iBACF;;;;;;;;;QACH,CAAC;KAAA;IAEc,mBAAmB,CAChC,UAA+C,EAAE;;YAEjD,IAAI,eAAe,GAAG,cAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;gBACrF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,6DAC1C,UAAU,GACV,oBAAoB,CAAC,OAAO,CAAC,GAC7B,sBAAsB,CAAC,UAAU,CAAC,KACrC,KAAK,EAAE,OAAO,CAAC,iBAAiB,IAChC,CAAC;gBAEH,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAC,CAAA,CAAC;YAEH,cAAA,KAAK,CAAC,CAAC,iBAAA,cAAA,IAAI,CAAC,mCAAmC,CAAC,eAAe,CAAC,CAAA,CAAA,CAAA,CAAC;YAEjE,OAAO,eAAe,CAAC,QAAQ,EAAE;gBAC/B,eAAe,GAAG,cAAM,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE;oBAC3E,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,6DAC1B,UAAU,GACV,oBAAoB,CAAC,OAAO,CAAC,GAC7B,sBAAsB,CAAC,OAAO,CAAC,KAClC,KAAK,EAAE,6BAA6B,CAAC,eAAe,CAAC,QAAS,CAAC,IAC/D,CAAC;gBACL,CAAC,CAAC,CAAA,CAAC;gBAEH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;oBAC1B,MAAM;iBACP;gBAED,cAAA,KAAK,CAAC,CAAC,iBAAA,cAAA,IAAI,CAAC,mCAAmC,CAAC,eAAe,CAAC,CAAA,CAAA,CAAA,CAAC;aAClE;QACH,CAAC;KAAA;IAEO,CAAC,mCAAmC,CAC1C,eAAqD;QAErD,sCACK,eAAe,KAClB,KAAK,EAAE,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,EACxF,iBAAiB,EAAE,eAAe,CAAC,QAAQ;gBACzC,CAAC,CAAC,6BAA6B,CAAC,eAAe,CAAC,QAAQ,CAAC;gBACzD,CAAC,CAAC,SAAS,GACd,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,uBAAuB,CAC3B,oBAGsD,EACtD,UAA0C,EAAE;QAE5C,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC1E,MAAM,QAAQ,GAAG,oCAAoC,CAAC,oBAAoB,CAAC,CAAC;YAC5E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,GAAG,gDAClE,UAAU,KACb,KAAK,EAAE,oBAAoB,CAAC,KAAK,EACjC,MAAM,EAAE,QAAQ,KACb,8BAA8B,CAAC,oBAAoB,EAAE,OAAO,CAAC,EAChE,CAAC;YAEH,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,WAAW,CACf,EAA0B,EAC1B,QAAiB,EACjB,UAA8B,EAAE;QAEhC,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YAC9D,IAAI,QAAQ,EAAE;gBACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,gDAC5C,UAAU,KACb,KAAK,EAAE,EAAE,CAAC,KAAK,KACZ,8BAA8B,CAAC,EAAE,EAAE,OAAO,CAAC,EAC9C,CAAC;gBAEH,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;aAC5C;iBAAM;gBACL,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,gDAC/C,UAAU,KACb,KAAK,EAAE,EAAE,CAAC,KAAK,KACZ,8BAA8B,CAAC,EAAE,EAAE,OAAO,CAAC,EAC9C,CAAC;gBAEH,OAAO,yBAAyB,CAAC,QAAQ,CAAC,CAAC;aAC5C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,SAAiB;QAC/B,IAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;CACF;AACD;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAgB,EAChB,UAAsB,EACtB,wBAA+D;IAE/D,MAAM,aAAa,GAAG;QACpB,sBAAsB,EAAE;QACxB,sBAAsB,EAAE;QACxB,qBAAqB,CAAC,wBAAwB,CAAC,YAAY,CAAC;KAC7D,CAAC;IAEF,MAAM,SAAS,GAAG,kBAAkB,CAClC,wBAAwB,CAAC,gBAAgB;QACvC,wBAAwB,CAAC,gBAAgB,CAAC,eAAe,CAC5D,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,2BAA2B;QAC3B,6CAA6C;QAC7C,aAAa,EAAE,IAAI;QACnB,sBAAsB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpC,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;YAC5B,eAAe,CAAC,UAAU,CAAC;YAC3B,eAAe,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YACrC,GAAG,aAAa;YAChB,GAAG,QAAQ;SACZ;QACD,6BAA6B,EAAE,IAAI;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,qBAAyC;IAC1E,MAAM,yBAAyB,GAAG,GAAG,WAAW,IAAI,cAAc,IAAI,gCAAgC,EAAE,EAAE,CAAC;IAE3G,IAAI,CAAC,qBAAqB,EAAE;QAC1B,OAAO,yBAAyB,CAAC;KAClC;IAED,OAAO,GAAG,qBAAqB,IAAI,yBAAyB,EAAE,CAAC;AACjE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// https://azure.github.io/azure-sdk/typescript_design.html#ts-config-lib\n/// <reference lib=\"esnext.asynciterable\" />\n\nimport { AppConfigCredential } from \"./appConfigCredential\";\nimport { AppConfiguration } from \"./generated/src/appConfiguration\";\nimport { PagedAsyncIterableIterator } from \"@azure/core-paging\";\nimport {\n isTokenCredential,\n exponentialRetryPolicy,\n systemErrorRetryPolicy,\n ServiceClientCredentials,\n UserAgentOptions,\n getDefaultUserAgentValue as getCoreHttpDefaultUserAgentValue,\n userAgentPolicy,\n} from \"@azure/core-http\";\nimport { throttlingRetryPolicy } from \"./policies/throttlingRetryPolicy\";\nimport { TokenCredential } from \"@azure/core-auth\";\n\nimport \"@azure/core-asynciterator-polyfill\";\n\nimport {\n AddConfigurationSettingOptions,\n AddConfigurationSettingParam,\n AddConfigurationSettingResponse,\n ConfigurationSetting,\n ConfigurationSettingId,\n DeleteConfigurationSettingOptions,\n DeleteConfigurationSettingResponse,\n GetConfigurationSettingOptions,\n GetConfigurationSettingResponse,\n ListConfigurationSettingPage,\n ListConfigurationSettingsOptions,\n ListRevisionsOptions,\n ListRevisionsPage,\n PageSettings,\n RetryOptions,\n SetConfigurationSettingOptions,\n SetConfigurationSettingParam,\n SetConfigurationSettingResponse,\n SetReadOnlyOptions,\n SetReadOnlyResponse,\n} from \"./models\";\nimport {\n checkAndFormatIfAndIfNoneMatch,\n extractAfterTokenFromNextLink,\n formatFiltersAndSelect,\n makeConfigurationSettingEmpty,\n transformKeyValueResponse,\n transformKeyValueResponseWithStatusCode,\n transformKeyValue,\n formatAcceptDateTime,\n formatFieldsForSelect,\n serializeAsConfigurationSettingParam,\n} from \"./internal/helpers\";\nimport { tracingPolicy } from \"@azure/core-http\";\nimport { trace as traceFromTracingHelpers } from \"./internal/tracingHelpers\";\nimport {\n AppConfigurationGetKeyValuesResponse,\n AppConfigurationOptionalParams as GeneratedAppConfigurationClientOptions,\n} from \"./generated/src/models\";\nimport { syncTokenPolicy, SyncTokens } from \"./internal/synctokenpolicy\";\nimport { FeatureFlagValue } from \"./featureFlag\";\nimport { SecretReferenceValue } from \"./secretReference\";\n\nconst packageName = \"azsdk-js-app-configuration\";\n\n/**\n * This constant should always be the same as the package.json's version - we use it when forming the\n * User - Agent header. There's a unit test that makes sure it always stays in sync.\n * @internal\n */\nexport const packageVersion = \"1.3.2\";\nconst apiVersion = \"1.0\";\nconst ConnectionStringRegex = /Endpoint=(.*);Id=(.*);Secret=(.*)/;\nconst deserializationContentTypes = {\n json: [\n \"application/vnd.microsoft.appconfig.kvset+json\",\n \"application/vnd.microsoft.appconfig.kv+json\",\n \"application/vnd.microsoft.appconfig.kvs+json\",\n \"application/vnd.microsoft.appconfig.keyset+json\",\n \"application/vnd.microsoft.appconfig.revs+json\",\n ],\n};\n\n/**\n * Provides configuration options for AppConfigurationClient.\n */\nexport interface AppConfigurationClientOptions {\n // NOTE: AppConfigurationClient is currently using it's own version of the ThrottlingRetryPolicy\n // which we are going to unify with core-http. When we do that we can have this options\n // interface extend PipelineOptions, and also switch over to using`createPipelineFromOptions`\n // which will auto-create all of these policies and remove a lot of code.\n //\n // In the meantime we'll just deal with having our own interface that's compatible with PipelineOptions\n // for the small subset we absolutely need to support.\n\n /**\n * Options for adding user agent details to outgoing requests.\n */\n userAgentOptions?: UserAgentOptions;\n\n /**\n * Options that control how to retry failed requests.\n */\n retryOptions?: RetryOptions;\n}\n\n/**\n * Provides internal configuration options for AppConfigurationClient.\n * @internal\n */\nexport interface InternalAppConfigurationClientOptions extends AppConfigurationClientOptions {\n /**\n * The sync token cache to use for this client.\n * NOTE: this is an internal option, not for general client usage.\n */\n syncTokens?: SyncTokens;\n}\n\n/**\n * Client for the Azure App Configuration service.\n */\nexport class AppConfigurationClient {\n private client: AppConfiguration;\n private _syncTokens: SyncTokens;\n // (for tests)\n private _trace = traceFromTracingHelpers;\n\n /**\n * Initializes a new instance of the AppConfigurationClient class.\n * @param connectionString - Connection string needed for a client to connect to Azure.\n * @param options - Options for the AppConfigurationClient.\n */\n constructor(connectionString: string, options?: AppConfigurationClientOptions);\n /**\n * Initializes a new instance of the AppConfigurationClient class using\n * a TokenCredential.\n * @param endpoint - The endpoint of the App Configuration service (ex: https://sample.azconfig.io).\n * @param tokenCredential - An object that implements the `TokenCredential` interface used to authenticate requests to the service. Use the \\@azure/identity package to create a credential that suits your needs.\n * @param options - Options for the AppConfigurationClient.\n */\n constructor(\n endpoint: string,\n tokenCredential: TokenCredential,\n options?: AppConfigurationClientOptions\n );\n constructor(\n connectionStringOrEndpoint: string,\n tokenCredentialOrOptions?: TokenCredential | AppConfigurationClientOptions,\n options?: AppConfigurationClientOptions\n ) {\n let appConfigOptions: InternalAppConfigurationClientOptions = {};\n let appConfigCredential: ServiceClientCredentials | TokenCredential;\n let appConfigEndpoint: string;\n\n if (isTokenCredential(tokenCredentialOrOptions)) {\n appConfigOptions = (options as InternalAppConfigurationClientOptions) || {};\n appConfigCredential = tokenCredentialOrOptions;\n appConfigEndpoint = connectionStringOrEndpoint;\n } else {\n appConfigOptions = (tokenCredentialOrOptions as InternalAppConfigurationClientOptions) || {};\n const regexMatch = connectionStringOrEndpoint?.match(ConnectionStringRegex);\n if (regexMatch) {\n appConfigCredential = new AppConfigCredential(regexMatch[2], regexMatch[3]);\n appConfigEndpoint = regexMatch[1];\n } else {\n throw new Error(\n `Invalid connection string. Valid connection strings should match the regex '${ConnectionStringRegex.source}'.`\n );\n }\n }\n\n this._syncTokens = appConfigOptions.syncTokens || new SyncTokens();\n\n this.client = new AppConfiguration(\n appConfigCredential,\n appConfigEndpoint,\n apiVersion,\n getGeneratedClientOptions(appConfigEndpoint, this._syncTokens, appConfigOptions)\n );\n }\n\n /**\n * Add a setting into the Azure App Configuration service, failing if it\n * already exists.\n *\n * Example usage:\n * ```ts\n * const result = await client.addConfigurationSetting({ key: \"MyKey\", label: \"MyLabel\", value: \"MyValue\" });\n * ```\n * @param configurationSetting - A configuration setting.\n * @param options - Optional parameters for the request.\n */\n addConfigurationSetting(\n configurationSetting:\n | AddConfigurationSettingParam\n | AddConfigurationSettingParam<FeatureFlagValue>\n | AddConfigurationSettingParam<SecretReferenceValue>,\n options: AddConfigurationSettingOptions = {}\n ): Promise<AddConfigurationSettingResponse> {\n return this._trace(\"addConfigurationSetting\", options, async (newOptions) => {\n const keyValue = serializeAsConfigurationSettingParam(configurationSetting);\n const originalResponse = await this.client.putKeyValue(configurationSetting.key, {\n ifNoneMatch: \"*\",\n label: configurationSetting.label,\n entity: keyValue,\n ...newOptions,\n });\n return transformKeyValueResponse(originalResponse);\n });\n }\n\n /**\n * Delete a setting from the Azure App Configuration service\n *\n * Example usage:\n * ```ts\n * const deletedSetting = await client.deleteConfigurationSetting({ key: \"MyKey\", label: \"MyLabel\" });\n * ```\n * @param id - The id of the configuration setting to delete.\n * @param options - Optional parameters for the request (ex: etag, label)\n */\n deleteConfigurationSetting(\n id: ConfigurationSettingId,\n options: DeleteConfigurationSettingOptions = {}\n ): Promise<DeleteConfigurationSettingResponse> {\n return this._trace(\"deleteConfigurationSetting\", options, async (newOptions) => {\n const originalResponse = await this.client.deleteKeyValue(id.key, {\n label: id.label,\n ...newOptions,\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n });\n\n return transformKeyValueResponseWithStatusCode(originalResponse);\n });\n }\n\n /**\n * Gets a setting from the Azure App Configuration service.\n *\n * Example code:\n * ```ts\n * const setting = await client.getConfigurationSetting({ key: \"MyKey\", label: \"MyLabel\" });\n * ```\n * @param id - The id of the configuration setting to get.\n * @param options - Optional parameters for the request.\n */\n async getConfigurationSetting(\n id: ConfigurationSettingId,\n options: GetConfigurationSettingOptions = {}\n ): Promise<GetConfigurationSettingResponse> {\n return this._trace(\"getConfigurationSetting\", options, async (newOptions) => {\n const originalResponse = await this.client.getKeyValue(id.key, {\n ...newOptions,\n label: id.label,\n select: formatFieldsForSelect(options.fields),\n ...formatAcceptDateTime(options),\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n });\n\n const response: GetConfigurationSettingResponse =\n transformKeyValueResponseWithStatusCode(originalResponse);\n\n // 304 only comes back if the user has passed a conditional option in their\n // request _and_ the remote object has the same etag as what the user passed.\n if (response.statusCode === 304) {\n // this is one of our few 'required' fields so we'll make sure it does get initialized\n // with a value\n response.key = id.key;\n\n // and now we'll undefine all the other properties that are not HTTP related\n makeConfigurationSettingEmpty(response);\n }\n\n return response;\n });\n }\n\n /**\n * Lists settings from the Azure App Configuration service, optionally\n * filtered by key names, labels and accept datetime.\n *\n * Example code:\n * ```ts\n * const allSettingsWithLabel = client.listConfigurationSettings({ labelFilter: \"MyLabel\" });\n * ```\n * @param options - Optional parameters for the request.\n */\n listConfigurationSettings(\n options: ListConfigurationSettingsOptions = {}\n ): PagedAsyncIterableIterator<ConfigurationSetting, ListConfigurationSettingPage, PageSettings> {\n const iter = this.getListConfigurationSettingsIterator(options);\n\n return {\n next() {\n return iter.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n byPage: (settings: PageSettings = {}) => {\n // The appconfig service doesn't currently support letting you select a page size\n // so we're ignoring their setting for now.\n return this.listConfigurationSettingsByPage({\n ...options,\n continuationToken: settings.continuationToken,\n });\n },\n };\n }\n\n private async *getListConfigurationSettingsIterator(\n options: ListConfigurationSettingsOptions\n ): AsyncIterableIterator<ConfigurationSetting> {\n for await (const page of this.listConfigurationSettingsByPage(options)) {\n for (const configurationSetting of page.items) {\n yield configurationSetting;\n }\n }\n }\n\n private async *listConfigurationSettingsByPage(\n options: ListConfigurationSettingsOptions & PageSettings = {}\n ): AsyncIterableIterator<ListConfigurationSettingPage> {\n let currentResponse = await this._trace(\n \"listConfigurationSettings\",\n options,\n async (newOptions) => {\n const response = await this.client.getKeyValues({\n ...newOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(options),\n after: options.continuationToken,\n });\n\n return response;\n }\n );\n\n yield* this.createListConfigurationPageFromResponse(currentResponse);\n\n while (currentResponse.nextLink) {\n currentResponse = await this._trace(\n \"listConfigurationSettings\",\n options,\n // TODO: same code up above. Unify.\n async (newOptions) => {\n const response = await this.client.getKeyValues({\n ...newOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(options),\n after: extractAfterTokenFromNextLink(currentResponse.nextLink!),\n });\n\n return response;\n }\n );\n\n if (!currentResponse.items) {\n break;\n }\n\n yield* this.createListConfigurationPageFromResponse(currentResponse);\n }\n }\n\n private *createListConfigurationPageFromResponse(\n currentResponse: AppConfigurationGetKeyValuesResponse\n ): Generator<ListConfigurationSettingPage> {\n yield {\n ...currentResponse,\n items: currentResponse.items != null ? currentResponse.items.map(transformKeyValue) : [],\n continuationToken: currentResponse.nextLink\n ? extractAfterTokenFromNextLink(currentResponse.nextLink)\n : undefined,\n };\n }\n\n /**\n * Lists revisions of a set of keys, optionally filtered by key names,\n * labels and accept datetime.\n *\n * Example code:\n * ```ts\n * const revisionsIterator = client.listRevisions({ keys: [\"MyKey\"] });\n * ```\n * @param options - Optional parameters for the request.\n */\n listRevisions(\n options?: ListRevisionsOptions\n ): PagedAsyncIterableIterator<ConfigurationSetting, ListRevisionsPage, PageSettings> {\n const iter = this.getListRevisionsIterator(options);\n\n return {\n next() {\n return iter.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n byPage: (settings: PageSettings = {}) => {\n // The appconfig service doesn't currently support letting you select a page size\n // so we're ignoring their setting for now.\n return this.listRevisionsByPage({\n ...options,\n continuationToken: settings.continuationToken,\n });\n },\n };\n }\n\n private async *getListRevisionsIterator(\n options?: ListRevisionsOptions\n ): AsyncIterableIterator<ConfigurationSetting> {\n for await (const page of this.listRevisionsByPage(options)) {\n for (const item of page.items) {\n yield item;\n }\n }\n }\n\n private async *listRevisionsByPage(\n options: ListRevisionsOptions & PageSettings = {}\n ): AsyncIterableIterator<ListRevisionsPage> {\n let currentResponse = await this._trace(\"listRevisions\", options, async (newOptions) => {\n const response = await this.client.getRevisions({\n ...newOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(newOptions),\n after: options.continuationToken,\n });\n\n return response;\n });\n\n yield* this.createListRevisionsPageFromResponse(currentResponse);\n\n while (currentResponse.nextLink) {\n currentResponse = await this._trace(\"listRevisions\", options, (newOptions) => {\n return this.client.getRevisions({\n ...newOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(options),\n after: extractAfterTokenFromNextLink(currentResponse.nextLink!),\n });\n });\n\n if (!currentResponse.items) {\n break;\n }\n\n yield* this.createListRevisionsPageFromResponse(currentResponse);\n }\n }\n\n private *createListRevisionsPageFromResponse(\n currentResponse: AppConfigurationGetKeyValuesResponse\n ) {\n yield {\n ...currentResponse,\n items: currentResponse.items != null ? currentResponse.items.map(transformKeyValue) : [],\n continuationToken: currentResponse.nextLink\n ? extractAfterTokenFromNextLink(currentResponse.nextLink)\n : undefined,\n };\n }\n\n /**\n * Sets the value of a key in the Azure App Configuration service, allowing for an optional etag.\n * @param key - The name of the key.\n * @param configurationSetting - A configuration value.\n * @param options - Optional parameters for the request.\n *\n * Example code:\n * ```ts\n * await client.setConfigurationSetting({ key: \"MyKey\", value: \"MyValue\" });\n * ```\n */\n async setConfigurationSetting(\n configurationSetting:\n | SetConfigurationSettingParam\n | SetConfigurationSettingParam<FeatureFlagValue>\n | SetConfigurationSettingParam<SecretReferenceValue>,\n options: SetConfigurationSettingOptions = {}\n ): Promise<SetConfigurationSettingResponse> {\n return this._trace(\"setConfigurationSetting\", options, async (newOptions) => {\n const keyValue = serializeAsConfigurationSettingParam(configurationSetting);\n const response = await this.client.putKeyValue(configurationSetting.key, {\n ...newOptions,\n label: configurationSetting.label,\n entity: keyValue,\n ...checkAndFormatIfAndIfNoneMatch(configurationSetting, options),\n });\n\n return transformKeyValueResponse(response);\n });\n }\n\n /**\n * Sets or clears a key's read-only status.\n * @param id - The id of the configuration setting to modify.\n */\n async setReadOnly(\n id: ConfigurationSettingId,\n readOnly: boolean,\n options: SetReadOnlyOptions = {}\n ): Promise<SetReadOnlyResponse> {\n return this._trace(\"setReadOnly\", options, async (newOptions) => {\n if (readOnly) {\n const response = await this.client.putLock(id.key, {\n ...newOptions,\n label: id.label,\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n });\n\n return transformKeyValueResponse(response);\n } else {\n const response = await this.client.deleteLock(id.key, {\n ...newOptions,\n label: id.label,\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n });\n\n return transformKeyValueResponse(response);\n }\n });\n }\n\n /**\n * Adds an external synchronization token to ensure service requests receive up-to-date values.\n *\n * @param syncToken - The synchronization token value.\n */\n updateSyncToken(syncToken: string): void {\n this._syncTokens.addSyncTokenFromHeaderValue(syncToken);\n }\n}\n/**\n * Gets the options for the generated AppConfigurationClient\n * @internal\n */\nexport function getGeneratedClientOptions(\n endpoint: string,\n syncTokens: SyncTokens,\n internalAppConfigOptions: InternalAppConfigurationClientOptions\n): GeneratedAppConfigurationClientOptions {\n const retryPolicies = [\n exponentialRetryPolicy(),\n systemErrorRetryPolicy(),\n throttlingRetryPolicy(internalAppConfigOptions.retryOptions),\n ];\n\n const userAgent = getUserAgentPrefix(\n internalAppConfigOptions.userAgentOptions &&\n internalAppConfigOptions.userAgentOptions.userAgentPrefix\n );\n\n return {\n endpoint,\n deserializationContentTypes,\n // we'll add in our own custom retry policies\n noRetryPolicy: true,\n requestPolicyFactories: (defaults) => [\n tracingPolicy({ userAgent }),\n syncTokenPolicy(syncTokens),\n userAgentPolicy({ value: userAgent }),\n ...retryPolicies,\n ...defaults,\n ],\n generateClientRequestIdHeader: true,\n };\n}\n\n/**\n * @internal\n */\nexport function getUserAgentPrefix(userSuppliedUserAgent: string | undefined): string {\n const appConfigDefaultUserAgent = `${packageName}/${packageVersion} ${getCoreHttpDefaultUserAgentValue()}`;\n\n if (!userSuppliedUserAgent) {\n return appConfigDefaultUserAgent;\n }\n\n return `${userSuppliedUserAgent} ${appConfigDefaultUserAgent}`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"appConfigurationClient.js","sourceRoot":"","sources":["../../src/appConfigurationClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// https://azure.github.io/azure-sdk/typescript_design.html#ts-config-lib\n/// <reference lib=\"esnext.asynciterable\" />\n\nimport { appConfigKeyCredentialPolicy } from \"./appConfigCredential\";\nimport { AppConfiguration } from \"./generated/src/appConfiguration\";\nimport { PagedAsyncIterableIterator } from \"@azure/core-paging\";\nimport { TokenCredential, isTokenCredential } from \"@azure/core-auth\";\n\nimport \"@azure/core-asynciterator-polyfill\";\n\nimport {\n AddConfigurationSettingOptions,\n AddConfigurationSettingParam,\n AddConfigurationSettingResponse,\n ConfigurationSetting,\n ConfigurationSettingId,\n DeleteConfigurationSettingOptions,\n DeleteConfigurationSettingResponse,\n GetConfigurationSettingOptions,\n GetConfigurationSettingResponse,\n HttpResponseField,\n ListConfigurationSettingPage,\n ListConfigurationSettingsOptions,\n ListRevisionsOptions,\n ListRevisionsPage,\n PageSettings,\n SetConfigurationSettingOptions,\n SetConfigurationSettingParam,\n SetConfigurationSettingResponse,\n SetReadOnlyOptions,\n SetReadOnlyResponse,\n} from \"./models\";\nimport {\n assertResponse,\n checkAndFormatIfAndIfNoneMatch,\n extractAfterTokenFromNextLink,\n formatAcceptDateTime,\n formatFieldsForSelect,\n formatFiltersAndSelect,\n makeConfigurationSettingEmpty,\n serializeAsConfigurationSettingParam,\n transformKeyValue,\n transformKeyValueResponse,\n transformKeyValueResponseWithStatusCode,\n} from \"./internal/helpers\";\nimport { trace as traceFromTracingHelpers } from \"./internal/tracingHelpers\";\nimport {\n AppConfigurationGetKeyValuesHeaders,\n AppConfigurationGetRevisionsHeaders,\n GetKeyValuesResponse,\n GetRevisionsResponse,\n} from \"./generated/src/models\";\nimport { SyncTokens, syncTokenPolicy } from \"./internal/synctokenpolicy\";\nimport { FeatureFlagValue } from \"./featureFlag\";\nimport { SecretReferenceValue } from \"./secretReference\";\nimport {\n CommonClientOptions,\n deserializationPolicy,\n deserializationPolicyName,\n} from \"@azure/core-client\";\nimport { PipelinePolicy, bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\n\n/**\n * @internal\n */\nexport const packageVersion = \"1.4.0-beta.1\";\nconst apiVersion = \"1.0\";\nconst ConnectionStringRegex = /Endpoint=(.*);Id=(.*);Secret=(.*)/;\nconst deserializationContentTypes = {\n json: [\n \"application/vnd.microsoft.appconfig.kvset+json\",\n \"application/vnd.microsoft.appconfig.kv+json\",\n \"application/vnd.microsoft.appconfig.kvs+json\",\n \"application/vnd.microsoft.appconfig.keyset+json\",\n \"application/vnd.microsoft.appconfig.revs+json\",\n ],\n};\n\n/**\n * Provides configuration options for AppConfigurationClient.\n */\nexport interface AppConfigurationClientOptions extends CommonClientOptions {}\n\n/**\n * Provides internal configuration options for AppConfigurationClient.\n * @internal\n */\nexport interface InternalAppConfigurationClientOptions extends AppConfigurationClientOptions {\n /**\n * The sync token cache to use for this client.\n * NOTE: this is an internal option, not for general client usage.\n */\n syncTokens?: SyncTokens;\n}\n\n/**\n * Client for the Azure App Configuration service.\n */\nexport class AppConfigurationClient {\n private client: AppConfiguration;\n private _syncTokens: SyncTokens;\n // (for tests)\n private _trace = traceFromTracingHelpers;\n\n /**\n * Initializes a new instance of the AppConfigurationClient class.\n * @param connectionString - Connection string needed for a client to connect to Azure.\n * @param options - Options for the AppConfigurationClient.\n */\n constructor(connectionString: string, options?: AppConfigurationClientOptions);\n /**\n * Initializes a new instance of the AppConfigurationClient class using\n * a TokenCredential.\n * @param endpoint - The endpoint of the App Configuration service (ex: https://sample.azconfig.io).\n * @param tokenCredential - An object that implements the `TokenCredential` interface used to authenticate requests to the service. Use the \\@azure/identity package to create a credential that suits your needs.\n * @param options - Options for the AppConfigurationClient.\n */\n constructor(\n endpoint: string,\n tokenCredential: TokenCredential,\n options?: AppConfigurationClientOptions\n );\n constructor(\n connectionStringOrEndpoint: string,\n tokenCredentialOrOptions?: TokenCredential | AppConfigurationClientOptions,\n options?: AppConfigurationClientOptions\n ) {\n let appConfigOptions: InternalAppConfigurationClientOptions = {};\n let appConfigCredential: TokenCredential;\n let appConfigEndpoint: string;\n let authPolicy: PipelinePolicy;\n\n if (isTokenCredential(tokenCredentialOrOptions)) {\n appConfigOptions = (options as InternalAppConfigurationClientOptions) || {};\n appConfigCredential = tokenCredentialOrOptions;\n appConfigEndpoint = connectionStringOrEndpoint.endsWith(\"/\")\n ? connectionStringOrEndpoint.slice(0, -1)\n : connectionStringOrEndpoint;\n authPolicy = bearerTokenAuthenticationPolicy({\n scopes: `${appConfigEndpoint}/.default`,\n credential: appConfigCredential,\n });\n } else {\n appConfigOptions = (tokenCredentialOrOptions as InternalAppConfigurationClientOptions) || {};\n const regexMatch = connectionStringOrEndpoint?.match(ConnectionStringRegex);\n if (regexMatch) {\n appConfigEndpoint = regexMatch[1];\n authPolicy = appConfigKeyCredentialPolicy(regexMatch[2], regexMatch[3]);\n } else {\n throw new Error(\n `Invalid connection string. Valid connection strings should match the regex '${ConnectionStringRegex.source}'.`\n );\n }\n }\n\n this._syncTokens = appConfigOptions.syncTokens || new SyncTokens();\n this.client = new AppConfiguration(appConfigEndpoint, apiVersion, appConfigOptions);\n this.client.pipeline.addPolicy(authPolicy, { phase: \"Sign\" });\n this.client.pipeline.addPolicy(syncTokenPolicy(this._syncTokens), { afterPhase: \"Retry\" });\n this.client.pipeline.removePolicy({ name: deserializationPolicyName });\n this.client.pipeline.addPolicy(\n deserializationPolicy({ expectedContentTypes: deserializationContentTypes }),\n { phase: \"Deserialize\" }\n );\n }\n\n /**\n * Add a setting into the Azure App Configuration service, failing if it\n * already exists.\n *\n * Example usage:\n * ```ts\n * const result = await client.addConfigurationSetting({ key: \"MyKey\", label: \"MyLabel\", value: \"MyValue\" });\n * ```\n * @param configurationSetting - A configuration setting.\n * @param options - Optional parameters for the request.\n */\n addConfigurationSetting(\n configurationSetting:\n | AddConfigurationSettingParam\n | AddConfigurationSettingParam<FeatureFlagValue>\n | AddConfigurationSettingParam<SecretReferenceValue>,\n options: AddConfigurationSettingOptions = {}\n ): Promise<AddConfigurationSettingResponse> {\n return this._trace(\"addConfigurationSetting\", options, async (newOptions) => {\n const keyValue = serializeAsConfigurationSettingParam(configurationSetting);\n const originalResponse = await this.client.putKeyValue(configurationSetting.key, {\n ifNoneMatch: \"*\",\n label: configurationSetting.label,\n entity: keyValue,\n ...newOptions,\n });\n const response = transformKeyValueResponse(originalResponse);\n assertResponse(response);\n return response;\n });\n }\n\n /**\n * Delete a setting from the Azure App Configuration service\n *\n * Example usage:\n * ```ts\n * const deletedSetting = await client.deleteConfigurationSetting({ key: \"MyKey\", label: \"MyLabel\" });\n * ```\n * @param id - The id of the configuration setting to delete.\n * @param options - Optional parameters for the request (ex: etag, label)\n */\n deleteConfigurationSetting(\n id: ConfigurationSettingId,\n options: DeleteConfigurationSettingOptions = {}\n ): Promise<DeleteConfigurationSettingResponse> {\n return this._trace(\"deleteConfigurationSetting\", options, async (newOptions) => {\n let status;\n const originalResponse = await this.client.deleteKeyValue(id.key, {\n label: id.label,\n ...newOptions,\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n onResponse: (response) => {\n status = response.status;\n },\n });\n\n const response = transformKeyValueResponseWithStatusCode(originalResponse, status);\n assertResponse(response);\n return response;\n });\n }\n\n /**\n * Gets a setting from the Azure App Configuration service.\n *\n * Example code:\n * ```ts\n * const setting = await client.getConfigurationSetting({ key: \"MyKey\", label: \"MyLabel\" });\n * ```\n * @param id - The id of the configuration setting to get.\n * @param options - Optional parameters for the request.\n */\n async getConfigurationSetting(\n id: ConfigurationSettingId,\n options: GetConfigurationSettingOptions = {}\n ): Promise<GetConfigurationSettingResponse> {\n return this._trace(\"getConfigurationSetting\", options, async (newOptions) => {\n let status;\n const originalResponse = await this.client.getKeyValue(id.key, {\n ...newOptions,\n label: id.label,\n select: formatFieldsForSelect(options.fields),\n ...formatAcceptDateTime(options),\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n onResponse: (response) => {\n status = response.status;\n },\n });\n\n const response = transformKeyValueResponseWithStatusCode(originalResponse, status);\n\n // 304 only comes back if the user has passed a conditional option in their\n // request _and_ the remote object has the same etag as what the user passed.\n if (response.statusCode === 304) {\n // this is one of our few 'required' fields so we'll make sure it does get initialized\n // with a value\n response.key = id.key;\n\n // and now we'll undefine all the other properties that are not HTTP related\n makeConfigurationSettingEmpty(response);\n }\n assertResponse(response);\n return response;\n });\n }\n\n /**\n * Lists settings from the Azure App Configuration service, optionally\n * filtered by key names, labels and accept datetime.\n *\n * Example code:\n * ```ts\n * const allSettingsWithLabel = client.listConfigurationSettings({ labelFilter: \"MyLabel\" });\n * ```\n * @param options - Optional parameters for the request.\n */\n listConfigurationSettings(\n options: ListConfigurationSettingsOptions = {}\n ): PagedAsyncIterableIterator<ConfigurationSetting, ListConfigurationSettingPage, PageSettings> {\n const iter = this.getListConfigurationSettingsIterator(options);\n\n return {\n next() {\n return iter.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n byPage: (settings: PageSettings = {}) => {\n // The appconfig service doesn't currently support letting you select a page size\n // so we're ignoring their setting for now.\n return this.listConfigurationSettingsByPage({\n ...options,\n continuationToken: settings.continuationToken,\n });\n },\n };\n }\n\n private async *getListConfigurationSettingsIterator(\n options: ListConfigurationSettingsOptions\n ): AsyncIterableIterator<ConfigurationSetting> {\n for await (const page of this.listConfigurationSettingsByPage(options)) {\n for (const configurationSetting of page.items) {\n yield configurationSetting;\n }\n }\n }\n\n private async *listConfigurationSettingsByPage(\n options: ListConfigurationSettingsOptions & PageSettings = {}\n ): AsyncIterableIterator<ListConfigurationSettingPage> {\n let currentResponse = await this._trace(\n \"listConfigurationSettings\",\n options,\n async (newOptions) => {\n const response = await this.client.getKeyValues({\n ...newOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(options),\n after: options.continuationToken,\n });\n\n return response as GetKeyValuesResponse &\n HttpResponseField<AppConfigurationGetKeyValuesHeaders>;\n }\n );\n\n yield* this.createListConfigurationPageFromResponse(currentResponse);\n\n while (currentResponse.nextLink) {\n currentResponse = await this._trace(\n \"listConfigurationSettings\",\n options,\n // TODO: same code up above. Unify.\n async (newOptions) => {\n const response = await this.client.getKeyValues({\n ...newOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(options),\n after: extractAfterTokenFromNextLink(currentResponse.nextLink!),\n });\n\n return response as GetKeyValuesResponse &\n HttpResponseField<AppConfigurationGetKeyValuesHeaders>;\n }\n );\n\n if (!currentResponse.items) {\n break;\n }\n\n yield* this.createListConfigurationPageFromResponse(currentResponse);\n }\n }\n\n private *createListConfigurationPageFromResponse(\n currentResponse: GetKeyValuesResponse & HttpResponseField<AppConfigurationGetKeyValuesHeaders>\n ): Generator<ListConfigurationSettingPage> {\n yield {\n ...currentResponse,\n items: currentResponse.items != null ? currentResponse.items.map(transformKeyValue) : [],\n continuationToken: currentResponse.nextLink\n ? extractAfterTokenFromNextLink(currentResponse.nextLink)\n : undefined,\n };\n }\n\n /**\n * Lists revisions of a set of keys, optionally filtered by key names,\n * labels and accept datetime.\n *\n * Example code:\n * ```ts\n * const revisionsIterator = client.listRevisions({ keys: [\"MyKey\"] });\n * ```\n * @param options - Optional parameters for the request.\n */\n listRevisions(\n options?: ListRevisionsOptions\n ): PagedAsyncIterableIterator<ConfigurationSetting, ListRevisionsPage, PageSettings> {\n const iter = this.getListRevisionsIterator(options);\n\n return {\n next() {\n return iter.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n byPage: (settings: PageSettings = {}) => {\n // The appconfig service doesn't currently support letting you select a page size\n // so we're ignoring their setting for now.\n return this.listRevisionsByPage({\n ...options,\n continuationToken: settings.continuationToken,\n });\n },\n };\n }\n\n private async *getListRevisionsIterator(\n options?: ListRevisionsOptions\n ): AsyncIterableIterator<ConfigurationSetting> {\n for await (const page of this.listRevisionsByPage(options)) {\n for (const item of page.items) {\n yield item;\n }\n }\n }\n\n private async *listRevisionsByPage(\n options: ListRevisionsOptions & PageSettings = {}\n ): AsyncIterableIterator<ListRevisionsPage> {\n let currentResponse = await this._trace(\"listRevisions\", options, async (newOptions) => {\n const response = await this.client.getRevisions({\n ...newOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(newOptions),\n after: options.continuationToken,\n });\n\n return response as GetRevisionsResponse &\n HttpResponseField<AppConfigurationGetRevisionsHeaders>;\n });\n\n yield* this.createListRevisionsPageFromResponse(currentResponse);\n\n while (currentResponse.nextLink) {\n currentResponse = (await this._trace(\"listRevisions\", options, (newOptions) => {\n return this.client.getRevisions({\n ...newOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(options),\n after: extractAfterTokenFromNextLink(currentResponse.nextLink!),\n });\n })) as GetRevisionsResponse & HttpResponseField<AppConfigurationGetRevisionsHeaders>;\n\n if (!currentResponse.items) {\n break;\n }\n\n yield* this.createListRevisionsPageFromResponse(currentResponse);\n }\n }\n\n private *createListRevisionsPageFromResponse(\n currentResponse: GetKeyValuesResponse & HttpResponseField<AppConfigurationGetKeyValuesHeaders>\n ) {\n yield {\n ...currentResponse,\n items: currentResponse.items != null ? currentResponse.items.map(transformKeyValue) : [],\n continuationToken: currentResponse.nextLink\n ? extractAfterTokenFromNextLink(currentResponse.nextLink)\n : undefined,\n };\n }\n\n /**\n * Sets the value of a key in the Azure App Configuration service, allowing for an optional etag.\n * @param key - The name of the key.\n * @param configurationSetting - A configuration value.\n * @param options - Optional parameters for the request.\n *\n * Example code:\n * ```ts\n * await client.setConfigurationSetting({ key: \"MyKey\", value: \"MyValue\" });\n * ```\n */\n async setConfigurationSetting(\n configurationSetting:\n | SetConfigurationSettingParam\n | SetConfigurationSettingParam<FeatureFlagValue>\n | SetConfigurationSettingParam<SecretReferenceValue>,\n options: SetConfigurationSettingOptions = {}\n ): Promise<SetConfigurationSettingResponse> {\n return this._trace(\"setConfigurationSetting\", options, async (newOptions) => {\n const keyValue = serializeAsConfigurationSettingParam(configurationSetting);\n const response = transformKeyValueResponse(\n await this.client.putKeyValue(configurationSetting.key, {\n ...newOptions,\n label: configurationSetting.label,\n entity: keyValue,\n ...checkAndFormatIfAndIfNoneMatch(configurationSetting, options),\n })\n );\n assertResponse(response);\n return response;\n });\n }\n\n /**\n * Sets or clears a key's read-only status.\n * @param id - The id of the configuration setting to modify.\n */\n async setReadOnly(\n id: ConfigurationSettingId,\n readOnly: boolean,\n options: SetReadOnlyOptions = {}\n ): Promise<SetReadOnlyResponse> {\n return this._trace(\"setReadOnly\", options, async (newOptions) => {\n let response;\n if (readOnly) {\n response = await this.client.putLock(id.key, {\n ...newOptions,\n label: id.label,\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n });\n } else {\n response = await this.client.deleteLock(id.key, {\n ...newOptions,\n label: id.label,\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n });\n }\n response = transformKeyValueResponse(response);\n assertResponse(response);\n return response;\n });\n }\n\n /**\n * Adds an external synchronization token to ensure service requests receive up-to-date values.\n *\n * @param syncToken - The synchronization token value.\n */\n updateSyncToken(syncToken: string): void {\n this._syncTokens.addSyncTokenFromHeaderValue(syncToken);\n }\n}\n"]}
|