@azure/app-configuration 1.9.2-alpha.20251022.1 → 1.9.2-alpha.20251028.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/dist/browser/appConfigurationClient.d.ts +1 -1
- package/dist/browser/appConfigurationClient.d.ts.map +1 -1
- package/dist/browser/appConfigurationClient.js +3 -1
- package/dist/browser/appConfigurationClient.js.map +1 -1
- package/dist/browser/featureFlag.d.ts +1 -0
- package/dist/browser/featureFlag.d.ts.map +1 -1
- package/dist/browser/featureFlag.js +4 -0
- package/dist/browser/featureFlag.js.map +1 -1
- package/dist/browser/generated/src/models/parameters.js +1 -1
- package/dist/browser/generated/src/models/parameters.js.map +1 -1
- package/dist/browser/internal/jsonModels.d.ts +2 -1
- package/dist/browser/internal/jsonModels.d.ts.map +1 -1
- package/dist/browser/internal/jsonModels.js.map +1 -1
- package/dist/browser/internal/queryParamPolicy.d.ts +9 -0
- package/dist/browser/internal/queryParamPolicy.d.ts.map +1 -0
- package/dist/browser/internal/queryParamPolicy.js +56 -0
- package/dist/browser/internal/queryParamPolicy.js.map +1 -0
- package/dist/browser/internal/{synctokenpolicy.d.ts → syncTokenPolicy.d.ts} +1 -1
- package/dist/{commonjs/internal/synctokenpolicy.d.ts.map → browser/internal/syncTokenPolicy.d.ts.map} +1 -1
- package/dist/{esm/internal/synctokenpolicy.js → browser/internal/syncTokenPolicy.js} +1 -1
- package/dist/{esm/internal/synctokenpolicy.js.map → browser/internal/syncTokenPolicy.js.map} +1 -1
- package/dist/commonjs/appConfigurationClient.d.ts +1 -1
- package/dist/commonjs/appConfigurationClient.d.ts.map +1 -1
- package/dist/commonjs/appConfigurationClient.js +5 -3
- package/dist/commonjs/appConfigurationClient.js.map +1 -1
- package/dist/commonjs/featureFlag.d.ts +1 -0
- package/dist/commonjs/featureFlag.d.ts.map +1 -1
- package/dist/commonjs/featureFlag.js +4 -0
- package/dist/commonjs/featureFlag.js.map +1 -1
- package/dist/commonjs/generated/src/models/parameters.js +1 -1
- package/dist/commonjs/generated/src/models/parameters.js.map +1 -1
- package/dist/commonjs/internal/jsonModels.d.ts +2 -1
- package/dist/commonjs/internal/jsonModels.d.ts.map +1 -1
- package/dist/commonjs/internal/jsonModels.js.map +1 -1
- package/dist/commonjs/internal/queryParamPolicy.d.ts +9 -0
- package/dist/commonjs/internal/queryParamPolicy.d.ts.map +1 -0
- package/dist/commonjs/internal/queryParamPolicy.js +59 -0
- package/dist/commonjs/internal/queryParamPolicy.js.map +1 -0
- package/dist/commonjs/internal/{synctokenpolicy.d.ts → syncTokenPolicy.d.ts} +1 -1
- package/dist/{browser/internal/synctokenpolicy.d.ts.map → commonjs/internal/syncTokenPolicy.d.ts.map} +1 -1
- package/dist/commonjs/internal/{synctokenpolicy.js → syncTokenPolicy.js} +1 -1
- package/dist/commonjs/internal/{synctokenpolicy.js.map → syncTokenPolicy.js.map} +1 -1
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/esm/appConfigurationClient.d.ts +1 -1
- package/dist/esm/appConfigurationClient.d.ts.map +1 -1
- package/dist/esm/appConfigurationClient.js +3 -1
- package/dist/esm/appConfigurationClient.js.map +1 -1
- package/dist/esm/featureFlag.d.ts +1 -0
- package/dist/esm/featureFlag.d.ts.map +1 -1
- package/dist/esm/featureFlag.js +4 -0
- package/dist/esm/featureFlag.js.map +1 -1
- package/dist/esm/generated/src/models/parameters.js +1 -1
- package/dist/esm/generated/src/models/parameters.js.map +1 -1
- package/dist/esm/internal/jsonModels.d.ts +2 -1
- package/dist/esm/internal/jsonModels.d.ts.map +1 -1
- package/dist/esm/internal/jsonModels.js.map +1 -1
- package/dist/esm/internal/queryParamPolicy.d.ts +9 -0
- package/dist/esm/internal/queryParamPolicy.d.ts.map +1 -0
- package/dist/esm/internal/queryParamPolicy.js +56 -0
- package/dist/esm/internal/queryParamPolicy.js.map +1 -0
- package/dist/esm/internal/{synctokenpolicy.d.ts → syncTokenPolicy.d.ts} +1 -1
- package/dist/esm/internal/{synctokenpolicy.d.ts.map → syncTokenPolicy.d.ts.map} +1 -1
- package/dist/{browser/internal/synctokenpolicy.js → esm/internal/syncTokenPolicy.js} +1 -1
- package/dist/{react-native/internal/synctokenpolicy.js.map → esm/internal/syncTokenPolicy.js.map} +1 -1
- package/dist/react-native/appConfigurationClient.d.ts +1 -1
- package/dist/react-native/appConfigurationClient.d.ts.map +1 -1
- package/dist/react-native/appConfigurationClient.js +3 -1
- package/dist/react-native/appConfigurationClient.js.map +1 -1
- package/dist/react-native/featureFlag.d.ts +1 -0
- package/dist/react-native/featureFlag.d.ts.map +1 -1
- package/dist/react-native/featureFlag.js +4 -0
- package/dist/react-native/featureFlag.js.map +1 -1
- package/dist/react-native/generated/src/models/parameters.js +1 -1
- package/dist/react-native/generated/src/models/parameters.js.map +1 -1
- package/dist/react-native/internal/jsonModels.d.ts +2 -1
- package/dist/react-native/internal/jsonModels.d.ts.map +1 -1
- package/dist/react-native/internal/jsonModels.js.map +1 -1
- package/dist/react-native/internal/queryParamPolicy.d.ts +9 -0
- package/dist/react-native/internal/queryParamPolicy.d.ts.map +1 -0
- package/dist/react-native/internal/queryParamPolicy.js +56 -0
- package/dist/react-native/internal/queryParamPolicy.js.map +1 -0
- package/dist/react-native/internal/{synctokenpolicy.d.ts → syncTokenPolicy.d.ts} +1 -1
- package/dist/react-native/internal/{synctokenpolicy.d.ts.map → syncTokenPolicy.d.ts.map} +1 -1
- package/dist/react-native/internal/{synctokenpolicy.js → syncTokenPolicy.js} +1 -1
- package/dist/{browser/internal/synctokenpolicy.js.map → react-native/internal/syncTokenPolicy.js.map} +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT License.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.queryParamPolicy = queryParamPolicy;
|
|
6
|
+
/**
|
|
7
|
+
* Creates a PipelinePolicy that normalizes query parameters:
|
|
8
|
+
* - Lowercase names
|
|
9
|
+
* - Sort by lowercase name
|
|
10
|
+
* - Preserve the relative order of duplicates
|
|
11
|
+
*/
|
|
12
|
+
function queryParamPolicy() {
|
|
13
|
+
return {
|
|
14
|
+
name: "queryParamPolicy",
|
|
15
|
+
async sendRequest(request, next) {
|
|
16
|
+
try {
|
|
17
|
+
const originalUrl = request.url;
|
|
18
|
+
const url = new URL(originalUrl);
|
|
19
|
+
if (url.search === "") {
|
|
20
|
+
return next(request);
|
|
21
|
+
}
|
|
22
|
+
const params = [];
|
|
23
|
+
for (const entry of url.search.substring(1).split("&")) {
|
|
24
|
+
if (entry === "") {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const equalIndex = entry.indexOf("=");
|
|
28
|
+
const name = equalIndex === -1 ? entry : entry.substring(0, equalIndex);
|
|
29
|
+
const value = equalIndex === -1 ? "" : entry.substring(equalIndex + 1);
|
|
30
|
+
params.push({ lowercaseName: name.toLowerCase(), value });
|
|
31
|
+
}
|
|
32
|
+
// Modern JavaScript Array.prototype.sort is stable
|
|
33
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#sort_stability
|
|
34
|
+
params.sort((a, b) => {
|
|
35
|
+
if (a.lowercaseName < b.lowercaseName) {
|
|
36
|
+
return -1;
|
|
37
|
+
}
|
|
38
|
+
else if (a.lowercaseName > b.lowercaseName) {
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
return 0;
|
|
42
|
+
});
|
|
43
|
+
const newSearchParams = params
|
|
44
|
+
.map(({ lowercaseName, value }) => `${lowercaseName}=${value}`)
|
|
45
|
+
.join("&");
|
|
46
|
+
const newUrl = url.origin + url.pathname + "?" + newSearchParams + url.hash;
|
|
47
|
+
if (newUrl !== originalUrl) {
|
|
48
|
+
request.url = newUrl;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// If anything goes wrong, fall back to sending the original request.
|
|
53
|
+
console.log("Failed to normalize query parameters.");
|
|
54
|
+
}
|
|
55
|
+
return next(request);
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=queryParamPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryParamPolicy.js","sourceRoot":"","sources":["../../../src/internal/queryParamPolicy.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;AAelC,4CAkDC;AAxDD;;;;;GAKG;AACH,SAAgB,gBAAgB;IAC9B,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,KAAK,CAAC,WAAW,CAAC,OAAwB,EAAE,IAAiB;YAC3D,IAAI,CAAC;gBACH,MAAM,WAAW,GAAW,OAAO,CAAC,GAAG,CAAC;gBACxC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;gBAEjC,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;oBACtB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,CAAC;gBAED,MAAM,MAAM,GAAiB,EAAE,CAAC;gBAChC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;wBACjB,SAAS;oBACX,CAAC;oBACD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACtC,MAAM,IAAI,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;oBACxE,MAAM,KAAK,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;oBACvE,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBAED,mDAAmD;gBACnD,6GAA6G;gBAC7G,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACnB,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;wBACtC,OAAO,CAAC,CAAC,CAAC;oBACZ,CAAC;yBAAM,IAAI,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;wBAC7C,OAAO,CAAC,CAAC;oBACX,CAAC;oBACD,OAAO,CAAC,CAAC;gBACX,CAAC,CAAC,CAAC;gBAEH,MAAM,eAAe,GAAW,MAAM;qBACnC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,aAAa,IAAI,KAAK,EAAE,CAAC;qBAC9D,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEb,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC;gBAC5E,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qEAAqE;gBACrE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACvD,CAAC;YAED,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 type {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\n\n/**\n * Creates a PipelinePolicy that normalizes query parameters:\n * - Lowercase names\n * - Sort by lowercase name\n * - Preserve the relative order of duplicates\n */\nexport function queryParamPolicy(): PipelinePolicy {\n return {\n name: \"queryParamPolicy\",\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n try {\n const originalUrl: string = request.url;\n const url = new URL(originalUrl);\n\n if (url.search === \"\") {\n return next(request);\n }\n\n const params: ParamEntry[] = [];\n for (const entry of url.search.substring(1).split(\"&\")) {\n if (entry === \"\") {\n continue;\n }\n const equalIndex = entry.indexOf(\"=\");\n const name = equalIndex === -1 ? entry : entry.substring(0, equalIndex);\n const value = equalIndex === -1 ? \"\" : entry.substring(equalIndex + 1);\n params.push({ lowercaseName: name.toLowerCase(), value });\n }\n\n // Modern JavaScript Array.prototype.sort is stable\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#sort_stability\n params.sort((a, b) => {\n if (a.lowercaseName < b.lowercaseName) {\n return -1;\n } else if (a.lowercaseName > b.lowercaseName) {\n return 1;\n }\n return 0;\n });\n\n const newSearchParams: string = params\n .map(({ lowercaseName, value }) => `${lowercaseName}=${value}`)\n .join(\"&\");\n\n const newUrl = url.origin + url.pathname + \"?\" + newSearchParams + url.hash;\n if (newUrl !== originalUrl) {\n request.url = newUrl;\n }\n } catch {\n // If anything goes wrong, fall back to sending the original request.\n console.log(\"Failed to normalize query parameters.\");\n }\n\n return next(request);\n },\n };\n}\n\ninterface ParamEntry {\n lowercaseName: string;\n value: string;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"syncTokenPolicy.d.ts","sourceRoot":"","sources":["../../../src/internal/syncTokenPolicy.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,2BAA2B,CAAC;AAGnC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,GAAG,cAAc,CAiBtE;AAED;;;;;;;;GAQG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,kBAAkB,CAAgC;IAE1D;;;;;;;;OAQG;IACH,2BAA2B,CAAC,oBAAoB,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAoB3E;;OAEG;IACH,uBAAuB,IAAI,MAAM,GAAG,SAAS;CAe9C;AAYD,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAsB3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"syncTokenPolicy.js","sourceRoot":"","sources":["../../../src/internal/syncTokenPolicy.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\nimport { logger } from \"../logger.js\";\n\n/**\n * The sync token header, as described here:\n * https://learn.microsoft.com/azure/azure-app-configuration/rest-api-consistency\n * @internal\n */\nexport const SyncTokenHeaderName = \"sync-token\";\n\n/**\n * A policy factory for injecting sync tokens properly into outgoing requests.\n * @param syncTokens - the sync tokens store to be used across requests.\n * @internal\n */\nexport function syncTokenPolicy(syncTokens: SyncTokens): PipelinePolicy {\n return {\n name: \"Sync Token Policy\",\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n const syncTokenHeaderValue = syncTokens.getSyncTokenHeaderValue();\n\n if (syncTokenHeaderValue) {\n logger.info(\n \"[syncTokenPolicy] Setting headers with ${SyncTokenHeaderName} and ${syncTokenHeaderValue}\",\n );\n request.headers.set(SyncTokenHeaderName, syncTokenHeaderValue);\n }\n const response = await next(request);\n syncTokens.addSyncTokenFromHeaderValue(response.headers.get(SyncTokenHeaderName));\n return response;\n },\n };\n}\n\n/**\n * Sync token tracker (allows for real-time consistency, even in the face of\n * caching and load balancing within App Configuration).\n *\n * (protocol and format described here)\n * https://learn.microsoft.com/azure/azure-app-configuration/rest-api-consistency\n *\n * @internal\n */\nexport class SyncTokens {\n private _currentSyncTokens = new Map<string, SyncToken>();\n\n /**\n * Takes the value from the header named after the constant `SyncTokenHeaderName`\n * and adds it to our list of accumulated sync tokens.\n *\n * If given an empty value (or undefined) it clears the current list of sync tokens.\n * (indicates the service has properly absorbed values into the cluster).\n *\n * @param syncTokenHeaderValue - The full value of the sync token header.\n */\n addSyncTokenFromHeaderValue(syncTokenHeaderValue: string | undefined): void {\n if (syncTokenHeaderValue == null || syncTokenHeaderValue === \"\") {\n // eventually everything gets synced up and we don't have to track\n // these headers anymore\n this._currentSyncTokens.clear();\n return;\n }\n\n const newTokens = syncTokenHeaderValue.split(\",\").map(parseSyncToken);\n\n for (const newToken of newTokens) {\n const existingToken = this._currentSyncTokens.get(newToken.id);\n\n if (!existingToken || existingToken.sequenceNumber < newToken.sequenceNumber) {\n this._currentSyncTokens.set(newToken.id, newToken);\n continue;\n }\n }\n }\n\n /**\n * Gets a properly formatted SyncToken header value.\n */\n getSyncTokenHeaderValue(): string | undefined {\n if (this._currentSyncTokens.size === 0) {\n return undefined;\n }\n\n const syncTokenStrings = [];\n\n for (const syncToken of this._currentSyncTokens.values()) {\n // note that you don't include the 'sn' field here - that's only\n // used for internal tracking of the 'version' for the token itself\n syncTokenStrings.push(`${syncToken.id}=${syncToken.value}`);\n }\n\n return syncTokenStrings.join(\",\");\n }\n}\n\n// An example sync token (from their documentation):\n//\n// jtqGc1I4=MDoyOA==;sn=28\n//\n// Which breaks down to:\n// id: jtqGc1I4\n// value: MDoyOA==\n// sequence number: 28\nconst syncTokenRegex = /^([^=]+)=([^;]+);sn=(\\d+)$/;\n\ninterface SyncToken {\n id: string;\n value: string;\n sequenceNumber: number;\n}\n\n/**\n * Parses a single sync token into it's constituent parts.\n *\n * @param syncToken - A single sync token.\n *\n * @internal\n */\nexport function parseSyncToken(syncToken: string): SyncToken {\n const matches = syncToken.match(syncTokenRegex);\n\n if (matches == null) {\n throw new Error(\n `Failed to parse sync token '${syncToken}' with regex ${syncTokenRegex.source}`,\n );\n }\n\n const sequenceNumber = parseInt(matches[3], 10);\n\n if (isNaN(sequenceNumber)) {\n // this should be impossible since our regex restricts to just digits\n // but there's nothing wrong with being thorough.\n throw new Error(`${syncToken}: The sequence number value '${matches[3]}' wasn't a number`);\n }\n\n return {\n id: matches[1],\n value: matches[2],\n sequenceNumber,\n };\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type AddConfigurationSettingOptions, type AddConfigurationSettingParam, type AddConfigurationSettingResponse, type AppConfigurationClientOptions, type ConfigurationSetting, type ConfigurationSettingId, type CreateSnapshotOptions, type CreateSnapshotResponse, type DeleteConfigurationSettingOptions, type DeleteConfigurationSettingResponse, type GetConfigurationSettingOptions, type GetConfigurationSettingResponse, type GetSnapshotOptions, type GetSnapshotResponse, type ListConfigurationSettingPage, type ListConfigurationSettingsForSnapshotOptions, type ListConfigurationSettingsOptions, type ListLabelsOptions, type ListLabelsPage, type ListRevisionsOptions, type ListRevisionsPage, type ListSnapshotsOptions, type ListSnapshotsPage, type PageSettings, type SetConfigurationSettingOptions, type SetConfigurationSettingParam, type SetConfigurationSettingResponse, type SetReadOnlyOptions, type SetReadOnlyResponse, type SettingLabel, type SnapshotInfo, type UpdateSnapshotOptions, type UpdateSnapshotResponse } from "./models.js";
|
|
2
2
|
import type { ConfigurationSnapshot } from "./generated/src/models/index.js";
|
|
3
3
|
import type { PagedAsyncIterableIterator } from "@azure/core-paging";
|
|
4
|
-
import { SyncTokens } from "./internal/
|
|
4
|
+
import { SyncTokens } from "./internal/syncTokenPolicy.js";
|
|
5
5
|
import type { TokenCredential } from "@azure/core-auth";
|
|
6
6
|
import type { FeatureFlagValue } from "./featureFlag.js";
|
|
7
7
|
import type { SecretReferenceValue } from "./secretReference.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appConfigurationClient.d.ts","sourceRoot":"","sources":["../../src/appConfigurationClient.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,iCAAiC,EACtC,KAAK,kCAAkC,EACvC,KAAK,8BAA8B,EACnC,KAAK,+BAA+B,EACpC,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAExB,KAAK,4BAA4B,EACjC,KAAK,2CAA2C,EAChD,KAAK,gCAAgC,EACrC,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,+BAA+B,EACpC,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAOV,qBAAqB,EAGtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,0BAA0B,EAAe,MAAM,oBAAoB,CAAC;AAIlF,OAAO,EAAE,UAAU,EAAmB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"appConfigurationClient.d.ts","sourceRoot":"","sources":["../../src/appConfigurationClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
import { getPagedAsyncIterator } from "@azure/core-paging";
|
|
4
4
|
import { bearerTokenAuthenticationPolicy } from "@azure/core-rest-pipeline";
|
|
5
|
-
import { SyncTokens, syncTokenPolicy } from "./internal/
|
|
5
|
+
import { SyncTokens, syncTokenPolicy } from "./internal/syncTokenPolicy.js";
|
|
6
|
+
import { queryParamPolicy } from "./internal/queryParamPolicy.js";
|
|
6
7
|
import { isTokenCredential } from "@azure/core-auth";
|
|
7
8
|
import { assertResponse, checkAndFormatIfAndIfNoneMatch, extractAfterTokenFromLinkHeader, extractAfterTokenFromNextLink, formatAcceptDateTime, formatConfigurationSettingsFiltersAndSelect, formatFieldsForSelect, formatFiltersAndSelect, formatLabelsFiltersAndSelect, formatSnapshotFiltersAndSelect, getScope, makeConfigurationSettingEmpty, serializeAsConfigurationSettingParam, transformKeyValue, transformKeyValueResponse, transformKeyValueResponseWithStatusCode, transformSnapshotResponse, } from "./internal/helpers.js";
|
|
8
9
|
import { AppConfiguration } from "./generated/src/appConfiguration.js";
|
|
@@ -72,6 +73,7 @@ export class AppConfigurationClient {
|
|
|
72
73
|
this._syncTokens = appConfigOptions.syncTokens || new SyncTokens();
|
|
73
74
|
this.client = new AppConfiguration(appConfigEndpoint, options?.apiVersion ?? appConfigurationApiVersion, internalClientPipelineOptions);
|
|
74
75
|
this.client.pipeline.addPolicy(authPolicy, { phase: "Sign" });
|
|
76
|
+
this.client.pipeline.addPolicy(queryParamPolicy());
|
|
75
77
|
this.client.pipeline.addPolicy(syncTokenPolicy(this._syncTokens), { afterPhase: "Retry" });
|
|
76
78
|
}
|
|
77
79
|
/**
|
|
@@ -1 +1 @@
|
|
|
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 {\n type AddConfigurationSettingOptions,\n type AddConfigurationSettingParam,\n type AddConfigurationSettingResponse,\n type AppConfigurationClientOptions,\n type ConfigurationSetting,\n type ConfigurationSettingId,\n type CreateSnapshotOptions,\n type CreateSnapshotResponse,\n type DeleteConfigurationSettingOptions,\n type DeleteConfigurationSettingResponse,\n type GetConfigurationSettingOptions,\n type GetConfigurationSettingResponse,\n type GetSnapshotOptions,\n type GetSnapshotResponse,\n type HttpResponseField,\n type ListConfigurationSettingPage,\n type ListConfigurationSettingsForSnapshotOptions,\n type ListConfigurationSettingsOptions,\n type ListLabelsOptions,\n type ListLabelsPage,\n type ListRevisionsOptions,\n type ListRevisionsPage,\n type ListSnapshotsOptions,\n type ListSnapshotsPage,\n type PageSettings,\n type SetConfigurationSettingOptions,\n type SetConfigurationSettingParam,\n type SetConfigurationSettingResponse,\n type SetReadOnlyOptions,\n type SetReadOnlyResponse,\n type SettingLabel,\n type SnapshotInfo,\n type UpdateSnapshotOptions,\n type UpdateSnapshotResponse,\n} from \"./models.js\";\nimport type {\n AppConfigurationGetKeyValuesHeaders,\n AppConfigurationGetRevisionsHeaders,\n AppConfigurationGetSnapshotsHeaders,\n GetKeyValuesResponse,\n GetRevisionsResponse,\n GetSnapshotsResponse,\n ConfigurationSnapshot,\n GetLabelsResponse,\n AppConfigurationGetLabelsHeaders,\n} from \"./generated/src/models/index.js\";\nimport type { InternalClientPipelineOptions } from \"@azure/core-client\";\nimport type { PagedAsyncIterableIterator, PagedResult } from \"@azure/core-paging\";\nimport { getPagedAsyncIterator } from \"@azure/core-paging\";\nimport type { PipelinePolicy, RestError } from \"@azure/core-rest-pipeline\";\nimport { bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\nimport { SyncTokens, syncTokenPolicy } from \"./internal/synctokenpolicy.js\";\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport { isTokenCredential } from \"@azure/core-auth\";\nimport type {\n SendConfigurationSettingsOptions,\n SendLabelsRequestOptions,\n} from \"./internal/helpers.js\";\nimport {\n assertResponse,\n checkAndFormatIfAndIfNoneMatch,\n extractAfterTokenFromLinkHeader,\n extractAfterTokenFromNextLink,\n formatAcceptDateTime,\n formatConfigurationSettingsFiltersAndSelect,\n formatFieldsForSelect,\n formatFiltersAndSelect,\n formatLabelsFiltersAndSelect,\n formatSnapshotFiltersAndSelect,\n getScope,\n makeConfigurationSettingEmpty,\n serializeAsConfigurationSettingParam,\n transformKeyValue,\n transformKeyValueResponse,\n transformKeyValueResponseWithStatusCode,\n transformSnapshotResponse,\n} from \"./internal/helpers.js\";\nimport { AppConfiguration } from \"./generated/src/appConfiguration.js\";\nimport type { FeatureFlagValue } from \"./featureFlag.js\";\nimport type { SecretReferenceValue } from \"./secretReference.js\";\nimport type { SnapshotReferenceValue } from \"./snapshotReference.js\";\nimport { appConfigKeyCredentialPolicy } from \"./appConfigCredential.js\";\nimport { tracingClient } from \"./internal/tracing.js\";\nimport { logger } from \"./logger.js\";\nimport type { OperationState, SimplePollerLike } from \"@azure/core-lro\";\nimport { appConfigurationApiVersion } from \"./internal/constants.js\";\n\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 \"application/vnd.microsoft.appconfig.snapshotset+json\",\n \"application/vnd.microsoft.appconfig.snapshot+json\",\n \"application/vnd.microsoft.appconfig.labelset+json\",\n \"application/json\",\n ],\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\n /**\n * Initializes a new instance of the AppConfigurationClient class.\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 let scope: string;\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 scope = getScope(appConfigEndpoint, appConfigOptions.audience);\n authPolicy = bearerTokenAuthenticationPolicy({\n scopes: scope,\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 ` To mitigate the issue, please refer to the troubleshooting guide here at https://aka.ms/azsdk/js/app-configuration/troubleshoot.`,\n );\n }\n }\n\n const internalClientPipelineOptions: InternalClientPipelineOptions = {\n ...appConfigOptions,\n loggingOptions: {\n logger: logger.info,\n },\n deserializationOptions: {\n expectedContentTypes: deserializationContentTypes,\n },\n };\n\n this._syncTokens = appConfigOptions.syncTokens || new SyncTokens();\n this.client = new AppConfiguration(\n appConfigEndpoint,\n options?.apiVersion ?? appConfigurationApiVersion,\n internalClientPipelineOptions,\n );\n this.client.pipeline.addPolicy(authPolicy, { phase: \"Sign\" });\n this.client.pipeline.addPolicy(syncTokenPolicy(this._syncTokens), { afterPhase: \"Retry\" });\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 snippet:AddConfigurationSetting\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const result = await client.addConfigurationSetting({\n * key: \"MyKey\",\n * label: \"MyLabel\",\n * value: \"MyValue\",\n * });\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 | AddConfigurationSettingParam<SnapshotReferenceValue>,\n options: AddConfigurationSettingOptions = {},\n ): Promise<AddConfigurationSettingResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.addConfigurationSetting\",\n options,\n async (updatedOptions) => {\n const keyValue = serializeAsConfigurationSettingParam(configurationSetting);\n logger.info(\"[addConfigurationSetting] Creating a key value pair\");\n try {\n const originalResponse = await this.client.putKeyValue(configurationSetting.key, {\n ifNoneMatch: \"*\",\n label: configurationSetting.label,\n entity: keyValue,\n ...updatedOptions,\n });\n const response = transformKeyValueResponse(originalResponse);\n assertResponse(response);\n return response;\n } catch (error) {\n const err = error as RestError;\n // Service does not return an error message. Raise a 412 error similar to .NET\n if (err.statusCode === 412) {\n err.message = `Status 412: Setting was already present`;\n }\n throw err;\n }\n throw new Error(\"Unreachable code\");\n },\n );\n }\n\n /**\n * Delete a setting from the Azure App Configuration service\n *\n * Example usage:\n * ```ts snippet:DeleteConfigurationSetting\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const deletedSetting = await client.deleteConfigurationSetting({\n * key: \"MyKey\",\n * label: \"MyLabel\",\n * });\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 tracingClient.withSpan(\n \"AppConfigurationClient.deleteConfigurationSetting\",\n options,\n async (updatedOptions) => {\n let status;\n logger.info(\"[deleteConfigurationSetting] Deleting key value pair\");\n const originalResponse = await this.client.deleteKeyValue(id.key, {\n label: id.label,\n ...updatedOptions,\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 /**\n * Gets a setting from the Azure App Configuration service.\n *\n * Example code:\n * ```ts snippet:GetConfigurationSetting\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\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 tracingClient.withSpan(\n \"AppConfigurationClient.getConfigurationSetting\",\n options,\n async (updatedOptions) => {\n let status;\n logger.info(\"[getConfigurationSetting] Getting key value pair\");\n const originalResponse = await this.client.getKeyValue(id.key, {\n ...updatedOptions,\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 /**\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 snippet:ListConfigurationSettings\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\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 pageEtags = options.pageEtags ? [...options.pageEtags] : undefined;\n delete options.pageEtags;\n const pagedResult: PagedResult<ListConfigurationSettingPage, PageSettings, string | undefined> =\n {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const etag = pageEtags?.shift();\n try {\n const response = await this.sendConfigurationSettingsRequest(\n { ...options, etag },\n pageLink,\n );\n const currentResponse: ListConfigurationSettingPage = {\n ...response,\n items: response.items != null ? response.items?.map(transformKeyValue) : [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n _response: response._response,\n };\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n } catch (error) {\n const err = error as RestError;\n\n const link = err.response?.headers?.get(\"link\");\n const continuationToken = link ? extractAfterTokenFromLinkHeader(link) : undefined;\n\n if (err.statusCode === 304) {\n err.message = `Status 304: No updates for this page`;\n logger.info(\n `[listConfigurationSettings] No updates for this page. The current etag for the page is ${etag}`,\n );\n return {\n page: {\n items: [],\n etag,\n _response: { ...err.response, status: 304 },\n } as unknown as ListConfigurationSettingPage,\n nextPageLink: continuationToken,\n };\n }\n\n throw err;\n }\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n /**\n * Lists settings from the Azure App Configuration service for snapshots based on name, optionally\n * filtered by key names, labels and accept datetime.\n *\n * Example code:\n * ```ts snippet:ListConfigurationSettingsForSnashots\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const allSettingsWithLabel = client.listConfigurationSettingsForSnashots({\n * snapshotName: \"MySnapshot\",\n * });\n * ```\n * @param options - Optional parameters for the request.\n */\n listConfigurationSettingsForSnapshot(\n snapshotName: string,\n options: ListConfigurationSettingsForSnapshotOptions = {},\n ): PagedAsyncIterableIterator<ConfigurationSetting, ListConfigurationSettingPage, PageSettings> {\n const pagedResult: PagedResult<ListConfigurationSettingPage, PageSettings, string | undefined> =\n {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const response = await this.sendConfigurationSettingsRequest(\n { snapshotName, ...options },\n pageLink,\n );\n const currentResponse = {\n ...response,\n items: response.items != null ? response.items?.map(transformKeyValue) : [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n };\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n /**\n * Get a list of labels from the Azure App Configuration service\n *\n * Example code:\n * ```ts snippet:ListLabels\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const allSettingsWithLabel = client.listLabels({ nameFilter: \"prod*\" });\n * ```\n * @param options - Optional parameters for the request.\n */\n listLabels(\n options: ListLabelsOptions = {},\n ): PagedAsyncIterableIterator<SettingLabel, ListLabelsPage, PageSettings> {\n const pagedResult: PagedResult<ListLabelsPage, PageSettings, string | undefined> = {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const response = await this.sendLabelsRequest(options, pageLink);\n const currentResponse: ListLabelsPage = {\n ...response,\n items: response.items ?? [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n _response: response._response,\n };\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n private async sendLabelsRequest(\n options: SendLabelsRequestOptions & PageSettings = {},\n pageLink: string | undefined,\n ): Promise<GetLabelsResponse & HttpResponseField<AppConfigurationGetLabelsHeaders>> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.listConfigurationSettings\",\n options,\n async (updatedOptions) => {\n const response = await this.client.getLabels({\n ...updatedOptions,\n ...formatAcceptDateTime(options),\n ...formatLabelsFiltersAndSelect(options),\n after: pageLink,\n });\n\n return response as GetLabelsResponse & HttpResponseField<AppConfigurationGetLabelsHeaders>;\n },\n );\n }\n\n private async sendConfigurationSettingsRequest(\n options: SendConfigurationSettingsOptions & PageSettings = {},\n pageLink: string | undefined,\n ): Promise<GetKeyValuesResponse & HttpResponseField<AppConfigurationGetKeyValuesHeaders>> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.listConfigurationSettings\",\n options,\n async (updatedOptions) => {\n const response = await this.client.getKeyValues({\n ...updatedOptions,\n ...formatAcceptDateTime(options),\n ...formatConfigurationSettingsFiltersAndSelect(options),\n ...checkAndFormatIfAndIfNoneMatch({ etag: options.etag }, { onlyIfChanged: true }),\n after: pageLink,\n });\n\n return response as GetKeyValuesResponse &\n HttpResponseField<AppConfigurationGetKeyValuesHeaders>;\n },\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 snippet:ListRevisions\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\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 pagedResult: PagedResult<ListRevisionsPage, PageSettings, string | undefined> = {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const response = await this.sendRevisionsRequest(options, pageLink);\n const currentResponse = {\n ...response,\n items: response.items != null ? response.items.map(transformKeyValue) : [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n };\n // let itemList = currentResponse.items;\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n private async sendRevisionsRequest(\n options: ListConfigurationSettingsOptions & PageSettings = {},\n pageLink: string | undefined,\n ): Promise<GetKeyValuesResponse & HttpResponseField<AppConfigurationGetKeyValuesHeaders>> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.listRevisions\",\n options,\n async (updatedOptions) => {\n const response = await this.client.getRevisions({\n ...updatedOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(updatedOptions),\n after: pageLink,\n });\n\n return response as GetRevisionsResponse &\n HttpResponseField<AppConfigurationGetRevisionsHeaders>;\n },\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 snippet:SetConfigurationSetting\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * await client.setConfigurationSetting({ key: \"MyKey\", value: \"MyValue\" });\n * ```\n */\n async setConfigurationSetting(\n configurationSetting:\n | SetConfigurationSettingParam\n | SetConfigurationSettingParam<FeatureFlagValue>\n | SetConfigurationSettingParam<SecretReferenceValue>\n | SetConfigurationSettingParam<SnapshotReferenceValue>,\n options: SetConfigurationSettingOptions = {},\n ): Promise<SetConfigurationSettingResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.setConfigurationSetting\",\n options,\n async (updatedOptions) => {\n const keyValue = serializeAsConfigurationSettingParam(configurationSetting);\n logger.info(\"[setConfigurationSetting] Setting new key value\");\n const response = transformKeyValueResponse(\n await this.client.putKeyValue(configurationSetting.key, {\n ...updatedOptions,\n label: configurationSetting.label,\n entity: keyValue,\n ...checkAndFormatIfAndIfNoneMatch(configurationSetting, options),\n }),\n );\n assertResponse(response);\n return response;\n },\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 tracingClient.withSpan(\n \"AppConfigurationClient.setReadOnly\",\n options,\n async (newOptions) => {\n let response;\n if (readOnly) {\n logger.info(\"[setReadOnly] Setting read-only status to ${readOnly}\");\n response = await this.client.putLock(id.key, {\n ...newOptions,\n label: id.label,\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n });\n } else {\n logger.info(\"[setReadOnly] Deleting read-only lock\");\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 /**\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 * Begins creating a snapshot for Azure App Configuration service, fails if it\n * already exists.\n */\n beginCreateSnapshot(\n snapshot: SnapshotInfo,\n // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n options: CreateSnapshotOptions = {},\n ): Promise<SimplePollerLike<OperationState<CreateSnapshotResponse>, CreateSnapshotResponse>> {\n return tracingClient.withSpan(\n `${AppConfigurationClient.name}.beginCreateSnapshot`,\n options,\n (updatedOptions) =>\n this.client.beginCreateSnapshot(snapshot.name, snapshot, { ...updatedOptions }),\n );\n }\n\n /**\n * Begins creating a snapshot for Azure App Configuration service, waits until it is done,\n * fails if it already exists.\n */\n beginCreateSnapshotAndWait(\n snapshot: SnapshotInfo,\n // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n options: CreateSnapshotOptions = {},\n ): Promise<CreateSnapshotResponse> {\n return tracingClient.withSpan(\n `${AppConfigurationClient.name}.beginCreateSnapshotAndWait`,\n options,\n (updatedOptions) =>\n this.client.beginCreateSnapshotAndWait(snapshot.name, snapshot, { ...updatedOptions }),\n );\n }\n\n /**\n * Get a snapshot from Azure App Configuration service\n *\n * Example usage:\n * ```ts snippet:GetSnapshot\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const retrievedSnapshot = await client.getSnapshot(\"testsnapshot\");\n * console.log(\"Retrieved snapshot:\", retrievedSnapshot);\n * ```\n * @param name - The name of the snapshot.\n * @param options - Optional parameters for the request.\n */\n getSnapshot(name: string, options: GetSnapshotOptions = {}): Promise<GetSnapshotResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.getSnapshot\",\n options,\n async (updatedOptions) => {\n logger.info(\"[getSnapshot] Get a snapshot\");\n const originalResponse = await this.client.getSnapshot(name, {\n ...updatedOptions,\n });\n const response = transformSnapshotResponse(originalResponse);\n assertResponse(response);\n return response;\n },\n );\n }\n\n /**\n * Recover an archived snapshot back to ready status\n *\n * Example usage:\n * ```ts snippet:RecoverSnapshot\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const result = await client.recoverSnapshot(\"MySnapshot\");\n * ```\n * @param name - The name of the snapshot.\n * @param options - Optional parameters for the request.\n */\n recoverSnapshot(\n name: string,\n // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n options: UpdateSnapshotOptions = {},\n ): Promise<UpdateSnapshotResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.recoverSnapshot\",\n options,\n async (updatedOptions) => {\n logger.info(\"[recoverSnapshot] Recover a snapshot\");\n const originalResponse = await this.client.updateSnapshot(\n name,\n { status: \"ready\" },\n {\n ...updatedOptions,\n ...checkAndFormatIfAndIfNoneMatch(\n { etag: options.etag },\n { onlyIfUnchanged: true, ...options },\n ),\n },\n );\n const response = transformSnapshotResponse(originalResponse);\n assertResponse(response);\n return response;\n },\n );\n }\n /**\n * Archive a ready snapshot\n *\n * Example usage:\n * ```ts snippet:ArchiveSnapshot\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const result = await client.archiveSnapshot({ name: \"MySnapshot\" });\n * ```\n * @param name - The name of the snapshot.\n * @param options - Optional parameters for the request.\n */\n archiveSnapshot(\n name: string,\n // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n options: UpdateSnapshotOptions = {},\n ): Promise<UpdateSnapshotResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.archiveSnapshot\",\n options,\n async (updatedOptions) => {\n logger.info(\"[archiveSnapshot] Archive a snapshot\");\n const originalResponse = await this.client.updateSnapshot(\n name,\n { status: \"archived\" },\n {\n ...updatedOptions,\n ...checkAndFormatIfAndIfNoneMatch(\n { etag: options.etag },\n { onlyIfUnchanged: true, ...options },\n ),\n },\n );\n const response = transformSnapshotResponse(originalResponse);\n assertResponse(response);\n return response;\n },\n );\n }\n\n /**\n * List all snapshots from Azure App Configuration service\n *\n * Example usage:\n * ```ts snippet:ListSnapshots\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const snapshots = await client.listSnapshots();\n *\n * for await (const snapshot of snapshots) {\n * console.log(`Found snapshot: ${snapshot.name}`);\n * }\n * ```\n * @param options - Optional parameters for the request.\n */\n listSnapshots(\n options: ListSnapshotsOptions = {},\n ): PagedAsyncIterableIterator<ConfigurationSnapshot, ListSnapshotsPage, PageSettings> {\n const pagedResult: PagedResult<ListSnapshotsPage, PageSettings, string | undefined> = {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const response = await this.sendSnapShotsRequest(options, pageLink);\n const currentResponse = {\n ...response,\n items: response.items != null ? response.items : [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n };\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n private async sendSnapShotsRequest(\n options: ListSnapshotsOptions & PageSettings = {},\n pageLink: string | undefined,\n ): Promise<GetSnapshotsResponse & HttpResponseField<AppConfigurationGetSnapshotsHeaders>> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.listSnapshots\",\n options,\n async (updatedOptions) => {\n const response = await this.client.getSnapshots({\n ...updatedOptions,\n ...formatSnapshotFiltersAndSelect(options),\n after: pageLink,\n });\n\n return response as GetSnapshotsResponse &\n HttpResponseField<AppConfigurationGetSnapshotsHeaders>;\n },\n );\n }\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 {\n type AddConfigurationSettingOptions,\n type AddConfigurationSettingParam,\n type AddConfigurationSettingResponse,\n type AppConfigurationClientOptions,\n type ConfigurationSetting,\n type ConfigurationSettingId,\n type CreateSnapshotOptions,\n type CreateSnapshotResponse,\n type DeleteConfigurationSettingOptions,\n type DeleteConfigurationSettingResponse,\n type GetConfigurationSettingOptions,\n type GetConfigurationSettingResponse,\n type GetSnapshotOptions,\n type GetSnapshotResponse,\n type HttpResponseField,\n type ListConfigurationSettingPage,\n type ListConfigurationSettingsForSnapshotOptions,\n type ListConfigurationSettingsOptions,\n type ListLabelsOptions,\n type ListLabelsPage,\n type ListRevisionsOptions,\n type ListRevisionsPage,\n type ListSnapshotsOptions,\n type ListSnapshotsPage,\n type PageSettings,\n type SetConfigurationSettingOptions,\n type SetConfigurationSettingParam,\n type SetConfigurationSettingResponse,\n type SetReadOnlyOptions,\n type SetReadOnlyResponse,\n type SettingLabel,\n type SnapshotInfo,\n type UpdateSnapshotOptions,\n type UpdateSnapshotResponse,\n} from \"./models.js\";\nimport type {\n AppConfigurationGetKeyValuesHeaders,\n AppConfigurationGetRevisionsHeaders,\n AppConfigurationGetSnapshotsHeaders,\n GetKeyValuesResponse,\n GetRevisionsResponse,\n GetSnapshotsResponse,\n ConfigurationSnapshot,\n GetLabelsResponse,\n AppConfigurationGetLabelsHeaders,\n} from \"./generated/src/models/index.js\";\nimport type { InternalClientPipelineOptions } from \"@azure/core-client\";\nimport type { PagedAsyncIterableIterator, PagedResult } from \"@azure/core-paging\";\nimport { getPagedAsyncIterator } from \"@azure/core-paging\";\nimport type { PipelinePolicy, RestError } from \"@azure/core-rest-pipeline\";\nimport { bearerTokenAuthenticationPolicy } from \"@azure/core-rest-pipeline\";\nimport { SyncTokens, syncTokenPolicy } from \"./internal/syncTokenPolicy.js\";\nimport { queryParamPolicy } from \"./internal/queryParamPolicy.js\";\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport { isTokenCredential } from \"@azure/core-auth\";\nimport type {\n SendConfigurationSettingsOptions,\n SendLabelsRequestOptions,\n} from \"./internal/helpers.js\";\nimport {\n assertResponse,\n checkAndFormatIfAndIfNoneMatch,\n extractAfterTokenFromLinkHeader,\n extractAfterTokenFromNextLink,\n formatAcceptDateTime,\n formatConfigurationSettingsFiltersAndSelect,\n formatFieldsForSelect,\n formatFiltersAndSelect,\n formatLabelsFiltersAndSelect,\n formatSnapshotFiltersAndSelect,\n getScope,\n makeConfigurationSettingEmpty,\n serializeAsConfigurationSettingParam,\n transformKeyValue,\n transformKeyValueResponse,\n transformKeyValueResponseWithStatusCode,\n transformSnapshotResponse,\n} from \"./internal/helpers.js\";\nimport { AppConfiguration } from \"./generated/src/appConfiguration.js\";\nimport type { FeatureFlagValue } from \"./featureFlag.js\";\nimport type { SecretReferenceValue } from \"./secretReference.js\";\nimport type { SnapshotReferenceValue } from \"./snapshotReference.js\";\nimport { appConfigKeyCredentialPolicy } from \"./appConfigCredential.js\";\nimport { tracingClient } from \"./internal/tracing.js\";\nimport { logger } from \"./logger.js\";\nimport type { OperationState, SimplePollerLike } from \"@azure/core-lro\";\nimport { appConfigurationApiVersion } from \"./internal/constants.js\";\n\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 \"application/vnd.microsoft.appconfig.snapshotset+json\",\n \"application/vnd.microsoft.appconfig.snapshot+json\",\n \"application/vnd.microsoft.appconfig.labelset+json\",\n \"application/json\",\n ],\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\n /**\n * Initializes a new instance of the AppConfigurationClient class.\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 let scope: string;\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 scope = getScope(appConfigEndpoint, appConfigOptions.audience);\n authPolicy = bearerTokenAuthenticationPolicy({\n scopes: scope,\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 ` To mitigate the issue, please refer to the troubleshooting guide here at https://aka.ms/azsdk/js/app-configuration/troubleshoot.`,\n );\n }\n }\n\n const internalClientPipelineOptions: InternalClientPipelineOptions = {\n ...appConfigOptions,\n loggingOptions: {\n logger: logger.info,\n },\n deserializationOptions: {\n expectedContentTypes: deserializationContentTypes,\n },\n };\n\n this._syncTokens = appConfigOptions.syncTokens || new SyncTokens();\n this.client = new AppConfiguration(\n appConfigEndpoint,\n options?.apiVersion ?? appConfigurationApiVersion,\n internalClientPipelineOptions,\n );\n this.client.pipeline.addPolicy(authPolicy, { phase: \"Sign\" });\n this.client.pipeline.addPolicy(queryParamPolicy());\n this.client.pipeline.addPolicy(syncTokenPolicy(this._syncTokens), { afterPhase: \"Retry\" });\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 snippet:AddConfigurationSetting\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const result = await client.addConfigurationSetting({\n * key: \"MyKey\",\n * label: \"MyLabel\",\n * value: \"MyValue\",\n * });\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 | AddConfigurationSettingParam<SnapshotReferenceValue>,\n options: AddConfigurationSettingOptions = {},\n ): Promise<AddConfigurationSettingResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.addConfigurationSetting\",\n options,\n async (updatedOptions) => {\n const keyValue = serializeAsConfigurationSettingParam(configurationSetting);\n logger.info(\"[addConfigurationSetting] Creating a key value pair\");\n try {\n const originalResponse = await this.client.putKeyValue(configurationSetting.key, {\n ifNoneMatch: \"*\",\n label: configurationSetting.label,\n entity: keyValue,\n ...updatedOptions,\n });\n const response = transformKeyValueResponse(originalResponse);\n assertResponse(response);\n return response;\n } catch (error) {\n const err = error as RestError;\n // Service does not return an error message. Raise a 412 error similar to .NET\n if (err.statusCode === 412) {\n err.message = `Status 412: Setting was already present`;\n }\n throw err;\n }\n throw new Error(\"Unreachable code\");\n },\n );\n }\n\n /**\n * Delete a setting from the Azure App Configuration service\n *\n * Example usage:\n * ```ts snippet:DeleteConfigurationSetting\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const deletedSetting = await client.deleteConfigurationSetting({\n * key: \"MyKey\",\n * label: \"MyLabel\",\n * });\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 tracingClient.withSpan(\n \"AppConfigurationClient.deleteConfigurationSetting\",\n options,\n async (updatedOptions) => {\n let status;\n logger.info(\"[deleteConfigurationSetting] Deleting key value pair\");\n const originalResponse = await this.client.deleteKeyValue(id.key, {\n label: id.label,\n ...updatedOptions,\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 /**\n * Gets a setting from the Azure App Configuration service.\n *\n * Example code:\n * ```ts snippet:GetConfigurationSetting\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\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 tracingClient.withSpan(\n \"AppConfigurationClient.getConfigurationSetting\",\n options,\n async (updatedOptions) => {\n let status;\n logger.info(\"[getConfigurationSetting] Getting key value pair\");\n const originalResponse = await this.client.getKeyValue(id.key, {\n ...updatedOptions,\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 /**\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 snippet:ListConfigurationSettings\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\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 pageEtags = options.pageEtags ? [...options.pageEtags] : undefined;\n delete options.pageEtags;\n const pagedResult: PagedResult<ListConfigurationSettingPage, PageSettings, string | undefined> =\n {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const etag = pageEtags?.shift();\n try {\n const response = await this.sendConfigurationSettingsRequest(\n { ...options, etag },\n pageLink,\n );\n const currentResponse: ListConfigurationSettingPage = {\n ...response,\n items: response.items != null ? response.items?.map(transformKeyValue) : [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n _response: response._response,\n };\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n } catch (error) {\n const err = error as RestError;\n\n const link = err.response?.headers?.get(\"link\");\n const continuationToken = link ? extractAfterTokenFromLinkHeader(link) : undefined;\n\n if (err.statusCode === 304) {\n err.message = `Status 304: No updates for this page`;\n logger.info(\n `[listConfigurationSettings] No updates for this page. The current etag for the page is ${etag}`,\n );\n return {\n page: {\n items: [],\n etag,\n _response: { ...err.response, status: 304 },\n } as unknown as ListConfigurationSettingPage,\n nextPageLink: continuationToken,\n };\n }\n\n throw err;\n }\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n /**\n * Lists settings from the Azure App Configuration service for snapshots based on name, optionally\n * filtered by key names, labels and accept datetime.\n *\n * Example code:\n * ```ts snippet:ListConfigurationSettingsForSnashots\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const allSettingsWithLabel = client.listConfigurationSettingsForSnashots({\n * snapshotName: \"MySnapshot\",\n * });\n * ```\n * @param options - Optional parameters for the request.\n */\n listConfigurationSettingsForSnapshot(\n snapshotName: string,\n options: ListConfigurationSettingsForSnapshotOptions = {},\n ): PagedAsyncIterableIterator<ConfigurationSetting, ListConfigurationSettingPage, PageSettings> {\n const pagedResult: PagedResult<ListConfigurationSettingPage, PageSettings, string | undefined> =\n {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const response = await this.sendConfigurationSettingsRequest(\n { snapshotName, ...options },\n pageLink,\n );\n const currentResponse = {\n ...response,\n items: response.items != null ? response.items?.map(transformKeyValue) : [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n };\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n /**\n * Get a list of labels from the Azure App Configuration service\n *\n * Example code:\n * ```ts snippet:ListLabels\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const allSettingsWithLabel = client.listLabels({ nameFilter: \"prod*\" });\n * ```\n * @param options - Optional parameters for the request.\n */\n listLabels(\n options: ListLabelsOptions = {},\n ): PagedAsyncIterableIterator<SettingLabel, ListLabelsPage, PageSettings> {\n const pagedResult: PagedResult<ListLabelsPage, PageSettings, string | undefined> = {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const response = await this.sendLabelsRequest(options, pageLink);\n const currentResponse: ListLabelsPage = {\n ...response,\n items: response.items ?? [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n _response: response._response,\n };\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n private async sendLabelsRequest(\n options: SendLabelsRequestOptions & PageSettings = {},\n pageLink: string | undefined,\n ): Promise<GetLabelsResponse & HttpResponseField<AppConfigurationGetLabelsHeaders>> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.listConfigurationSettings\",\n options,\n async (updatedOptions) => {\n const response = await this.client.getLabels({\n ...updatedOptions,\n ...formatAcceptDateTime(options),\n ...formatLabelsFiltersAndSelect(options),\n after: pageLink,\n });\n\n return response as GetLabelsResponse & HttpResponseField<AppConfigurationGetLabelsHeaders>;\n },\n );\n }\n\n private async sendConfigurationSettingsRequest(\n options: SendConfigurationSettingsOptions & PageSettings = {},\n pageLink: string | undefined,\n ): Promise<GetKeyValuesResponse & HttpResponseField<AppConfigurationGetKeyValuesHeaders>> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.listConfigurationSettings\",\n options,\n async (updatedOptions) => {\n const response = await this.client.getKeyValues({\n ...updatedOptions,\n ...formatAcceptDateTime(options),\n ...formatConfigurationSettingsFiltersAndSelect(options),\n ...checkAndFormatIfAndIfNoneMatch({ etag: options.etag }, { onlyIfChanged: true }),\n after: pageLink,\n });\n\n return response as GetKeyValuesResponse &\n HttpResponseField<AppConfigurationGetKeyValuesHeaders>;\n },\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 snippet:ListRevisions\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\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 pagedResult: PagedResult<ListRevisionsPage, PageSettings, string | undefined> = {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const response = await this.sendRevisionsRequest(options, pageLink);\n const currentResponse = {\n ...response,\n items: response.items != null ? response.items.map(transformKeyValue) : [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n };\n // let itemList = currentResponse.items;\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n private async sendRevisionsRequest(\n options: ListConfigurationSettingsOptions & PageSettings = {},\n pageLink: string | undefined,\n ): Promise<GetKeyValuesResponse & HttpResponseField<AppConfigurationGetKeyValuesHeaders>> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.listRevisions\",\n options,\n async (updatedOptions) => {\n const response = await this.client.getRevisions({\n ...updatedOptions,\n ...formatAcceptDateTime(options),\n ...formatFiltersAndSelect(updatedOptions),\n after: pageLink,\n });\n\n return response as GetRevisionsResponse &\n HttpResponseField<AppConfigurationGetRevisionsHeaders>;\n },\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 snippet:SetConfigurationSetting\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * await client.setConfigurationSetting({ key: \"MyKey\", value: \"MyValue\" });\n * ```\n */\n async setConfigurationSetting(\n configurationSetting:\n | SetConfigurationSettingParam\n | SetConfigurationSettingParam<FeatureFlagValue>\n | SetConfigurationSettingParam<SecretReferenceValue>\n | SetConfigurationSettingParam<SnapshotReferenceValue>,\n options: SetConfigurationSettingOptions = {},\n ): Promise<SetConfigurationSettingResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.setConfigurationSetting\",\n options,\n async (updatedOptions) => {\n const keyValue = serializeAsConfigurationSettingParam(configurationSetting);\n logger.info(\"[setConfigurationSetting] Setting new key value\");\n const response = transformKeyValueResponse(\n await this.client.putKeyValue(configurationSetting.key, {\n ...updatedOptions,\n label: configurationSetting.label,\n entity: keyValue,\n ...checkAndFormatIfAndIfNoneMatch(configurationSetting, options),\n }),\n );\n assertResponse(response);\n return response;\n },\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 tracingClient.withSpan(\n \"AppConfigurationClient.setReadOnly\",\n options,\n async (newOptions) => {\n let response;\n if (readOnly) {\n logger.info(\"[setReadOnly] Setting read-only status to ${readOnly}\");\n response = await this.client.putLock(id.key, {\n ...newOptions,\n label: id.label,\n ...checkAndFormatIfAndIfNoneMatch(id, options),\n });\n } else {\n logger.info(\"[setReadOnly] Deleting read-only lock\");\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 /**\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 * Begins creating a snapshot for Azure App Configuration service, fails if it\n * already exists.\n */\n beginCreateSnapshot(\n snapshot: SnapshotInfo,\n // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n options: CreateSnapshotOptions = {},\n ): Promise<SimplePollerLike<OperationState<CreateSnapshotResponse>, CreateSnapshotResponse>> {\n return tracingClient.withSpan(\n `${AppConfigurationClient.name}.beginCreateSnapshot`,\n options,\n (updatedOptions) =>\n this.client.beginCreateSnapshot(snapshot.name, snapshot, { ...updatedOptions }),\n );\n }\n\n /**\n * Begins creating a snapshot for Azure App Configuration service, waits until it is done,\n * fails if it already exists.\n */\n beginCreateSnapshotAndWait(\n snapshot: SnapshotInfo,\n // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n options: CreateSnapshotOptions = {},\n ): Promise<CreateSnapshotResponse> {\n return tracingClient.withSpan(\n `${AppConfigurationClient.name}.beginCreateSnapshotAndWait`,\n options,\n (updatedOptions) =>\n this.client.beginCreateSnapshotAndWait(snapshot.name, snapshot, { ...updatedOptions }),\n );\n }\n\n /**\n * Get a snapshot from Azure App Configuration service\n *\n * Example usage:\n * ```ts snippet:GetSnapshot\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const retrievedSnapshot = await client.getSnapshot(\"testsnapshot\");\n * console.log(\"Retrieved snapshot:\", retrievedSnapshot);\n * ```\n * @param name - The name of the snapshot.\n * @param options - Optional parameters for the request.\n */\n getSnapshot(name: string, options: GetSnapshotOptions = {}): Promise<GetSnapshotResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.getSnapshot\",\n options,\n async (updatedOptions) => {\n logger.info(\"[getSnapshot] Get a snapshot\");\n const originalResponse = await this.client.getSnapshot(name, {\n ...updatedOptions,\n });\n const response = transformSnapshotResponse(originalResponse);\n assertResponse(response);\n return response;\n },\n );\n }\n\n /**\n * Recover an archived snapshot back to ready status\n *\n * Example usage:\n * ```ts snippet:RecoverSnapshot\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const result = await client.recoverSnapshot(\"MySnapshot\");\n * ```\n * @param name - The name of the snapshot.\n * @param options - Optional parameters for the request.\n */\n recoverSnapshot(\n name: string,\n // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n options: UpdateSnapshotOptions = {},\n ): Promise<UpdateSnapshotResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.recoverSnapshot\",\n options,\n async (updatedOptions) => {\n logger.info(\"[recoverSnapshot] Recover a snapshot\");\n const originalResponse = await this.client.updateSnapshot(\n name,\n { status: \"ready\" },\n {\n ...updatedOptions,\n ...checkAndFormatIfAndIfNoneMatch(\n { etag: options.etag },\n { onlyIfUnchanged: true, ...options },\n ),\n },\n );\n const response = transformSnapshotResponse(originalResponse);\n assertResponse(response);\n return response;\n },\n );\n }\n /**\n * Archive a ready snapshot\n *\n * Example usage:\n * ```ts snippet:ArchiveSnapshot\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const result = await client.archiveSnapshot({ name: \"MySnapshot\" });\n * ```\n * @param name - The name of the snapshot.\n * @param options - Optional parameters for the request.\n */\n archiveSnapshot(\n name: string,\n // eslint-disable-next-line @azure/azure-sdk/ts-naming-options\n options: UpdateSnapshotOptions = {},\n ): Promise<UpdateSnapshotResponse> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.archiveSnapshot\",\n options,\n async (updatedOptions) => {\n logger.info(\"[archiveSnapshot] Archive a snapshot\");\n const originalResponse = await this.client.updateSnapshot(\n name,\n { status: \"archived\" },\n {\n ...updatedOptions,\n ...checkAndFormatIfAndIfNoneMatch(\n { etag: options.etag },\n { onlyIfUnchanged: true, ...options },\n ),\n },\n );\n const response = transformSnapshotResponse(originalResponse);\n assertResponse(response);\n return response;\n },\n );\n }\n\n /**\n * List all snapshots from Azure App Configuration service\n *\n * Example usage:\n * ```ts snippet:ListSnapshots\n * import { DefaultAzureCredential } from \"@azure/identity\";\n * import { AppConfigurationClient } from \"@azure/app-configuration\";\n *\n * // The endpoint for your App Configuration resource\n * const endpoint = \"https://example.azconfig.io\";\n * const credential = new DefaultAzureCredential();\n * const client = new AppConfigurationClient(endpoint, credential);\n *\n * const snapshots = await client.listSnapshots();\n *\n * for await (const snapshot of snapshots) {\n * console.log(`Found snapshot: ${snapshot.name}`);\n * }\n * ```\n * @param options - Optional parameters for the request.\n */\n listSnapshots(\n options: ListSnapshotsOptions = {},\n ): PagedAsyncIterableIterator<ConfigurationSnapshot, ListSnapshotsPage, PageSettings> {\n const pagedResult: PagedResult<ListSnapshotsPage, PageSettings, string | undefined> = {\n firstPageLink: undefined,\n getPage: async (pageLink: string | undefined) => {\n const response = await this.sendSnapShotsRequest(options, pageLink);\n const currentResponse = {\n ...response,\n items: response.items != null ? response.items : [],\n continuationToken: response.nextLink\n ? extractAfterTokenFromNextLink(response.nextLink)\n : undefined,\n };\n return {\n page: currentResponse,\n nextPageLink: currentResponse.continuationToken,\n };\n },\n toElements: (page) => page.items,\n };\n return getPagedAsyncIterator(pagedResult);\n }\n\n private async sendSnapShotsRequest(\n options: ListSnapshotsOptions & PageSettings = {},\n pageLink: string | undefined,\n ): Promise<GetSnapshotsResponse & HttpResponseField<AppConfigurationGetSnapshotsHeaders>> {\n return tracingClient.withSpan(\n \"AppConfigurationClient.listSnapshots\",\n options,\n async (updatedOptions) => {\n const response = await this.client.getSnapshots({\n ...updatedOptions,\n ...formatSnapshotFiltersAndSelect(options),\n after: pageLink,\n });\n\n return response as GetSnapshotsResponse &\n HttpResponseField<AppConfigurationGetSnapshotsHeaders>;\n },\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlag.d.ts","sourceRoot":"","sources":["../../src/featureFlag.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAInF;;GAEG;AACH,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,sBAAsB,8DAA8D,CAAC;AAElG;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,UAAU,EAAE;QACV,aAAa,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"featureFlag.d.ts","sourceRoot":"","sources":["../../src/featureFlag.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAInF;;GAEG;AACH,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,sBAAsB,8DAA8D,CAAC;AAElG;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,UAAU,EAAE;QACV,aAAa,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,EAAE,CAAC;QACxE,eAAe,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;KACjC,CAAC;IACF;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B;;OAEG;+CAEY,yBAAyB,CAAC,gBAAgB,CAAC,KACvD,yBAAyB;CA4B7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,GAC5B,oBAAoB,CAAC,gBAAgB,CAAC,CAgCxC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,IAAI,oBAAoB,GAAG,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAIjF"}
|
package/dist/esm/featureFlag.js
CHANGED
|
@@ -32,6 +32,7 @@ export const FeatureFlagHelper = {
|
|
|
32
32
|
description: featureFlag.value.description,
|
|
33
33
|
conditions: {
|
|
34
34
|
client_filters: featureFlag.value.conditions.clientFilters,
|
|
35
|
+
requirement_type: featureFlag.value.conditions.requirementType ?? "Any",
|
|
35
36
|
},
|
|
36
37
|
display_name: featureFlag.value.displayName,
|
|
37
38
|
};
|
|
@@ -69,6 +70,9 @@ export function parseFeatureFlag(setting) {
|
|
|
69
70
|
key,
|
|
70
71
|
contentType: featureFlagContentType,
|
|
71
72
|
};
|
|
73
|
+
if (jsonFeatureFlagValue.conditions.requirement_type) {
|
|
74
|
+
featureflag.value.conditions.requirementType = jsonFeatureFlagValue.conditions.requirement_type;
|
|
75
|
+
}
|
|
72
76
|
return featureflag;
|
|
73
77
|
}
|
|
74
78
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlag.js","sourceRoot":"","sources":["../../src/featureFlag.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,yBAAyB,CAAC;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,2DAA2D,CAAC;
|
|
1
|
+
{"version":3,"file":"featureFlag.js","sourceRoot":"","sources":["../../src/featureFlag.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ConfigurationSetting, ConfigurationSettingParam } from \"./models.js\";\nimport type { JsonFeatureFlagValue } from \"./internal/jsonModels.js\";\nimport { logger } from \"./logger.js\";\n\n/**\n * The prefix for feature flags.\n */\nexport const featureFlagPrefix = \".appconfig.featureflag/\";\n\n/**\n * The content type for a FeatureFlag\n */\nexport const featureFlagContentType = \"application/vnd.microsoft.appconfig.ff+json;charset=utf-8\";\n\n/**\n * Value of a feature flag\n */\nexport interface FeatureFlagValue {\n /**\n * Id for the feature flag.\n */\n id?: string;\n /**\n * A Feature filter consistently evaluates the state of a feature flag.\n * Our feature management library supports three types of built-in filters: Targeting, TimeWindow, and Percentage.\n * Custom filters can also be created based on different factors, such as device used, browser types, geographic location, etc.\n *\n * [More Info](https://learn.microsoft.com/azure/azure-app-configuration/howto-feature-filters-aspnet-core)\n */\n conditions: {\n clientFilters: { name: string; parameters?: Record<string, unknown> }[];\n requirementType?: \"All\" | \"Any\";\n };\n /**\n * Description of the feature.\n */\n description?: string;\n /**\n * Boolean flag to say if the feature flag is enabled.\n */\n enabled: boolean;\n /**\n * Display name for the feature to use for display rather than the ID.\n */\n displayName?: string;\n}\n\n/**\n * @internal\n */\nexport const FeatureFlagHelper = {\n /**\n * Takes the FeatureFlag (JSON) and returns a ConfigurationSetting (with the props encodeed in the value).\n */\n toConfigurationSettingParam: (\n featureFlag: ConfigurationSettingParam<FeatureFlagValue>,\n ): ConfigurationSettingParam => {\n logger.info(\"Encoding FeatureFlag value in a ConfigurationSetting:\", featureFlag);\n if (!featureFlag.value) {\n logger.error(\"FeatureFlag has an unexpected value\", featureFlag);\n throw new TypeError(`FeatureFlag has an unexpected value - ${featureFlag.value}`);\n }\n let key = featureFlag.key;\n if (typeof featureFlag.key === \"string\" && !featureFlag.key.startsWith(featureFlagPrefix)) {\n key = featureFlagPrefix + featureFlag.key;\n }\n const jsonFeatureFlagValue: JsonFeatureFlagValue = {\n id: featureFlag.value.id ?? key.replace(featureFlagPrefix, \"\"),\n enabled: featureFlag.value.enabled,\n description: featureFlag.value.description,\n conditions: {\n client_filters: featureFlag.value.conditions.clientFilters,\n requirement_type: featureFlag.value.conditions.requirementType ?? \"Any\",\n },\n display_name: featureFlag.value.displayName,\n };\n\n const configSetting = {\n ...featureFlag,\n key,\n value: JSON.stringify(jsonFeatureFlagValue),\n };\n return configSetting;\n },\n};\n\n/**\n * Takes the ConfigurationSetting as input and returns the ConfigurationSetting<FeatureFlagValue> by parsing the value string.\n */\nexport function parseFeatureFlag(\n setting: ConfigurationSetting,\n): ConfigurationSetting<FeatureFlagValue> {\n logger.info(\"Parsing the value to return the FeatureFlagValue\", setting);\n if (!isFeatureFlag(setting)) {\n logger.error(\"Invalid FeatureFlag input\", setting);\n throw TypeError(\n `Setting with key ${setting.key} is not a valid FeatureFlag, make sure to have the correct content-type and a valid non-null value.`,\n );\n }\n\n const jsonFeatureFlagValue = JSON.parse(setting.value) as JsonFeatureFlagValue;\n\n let key = setting.key;\n if (typeof setting.key === \"string\" && !setting.key.startsWith(featureFlagPrefix)) {\n key = featureFlagPrefix + setting.key;\n }\n const featureflag: ConfigurationSetting<FeatureFlagValue> = {\n ...setting,\n value: {\n id: jsonFeatureFlagValue.id,\n enabled: jsonFeatureFlagValue.enabled,\n description: jsonFeatureFlagValue.description,\n displayName: jsonFeatureFlagValue.display_name,\n conditions: { clientFilters: jsonFeatureFlagValue.conditions.client_filters },\n },\n key,\n contentType: featureFlagContentType,\n };\n\n if (jsonFeatureFlagValue.conditions.requirement_type) {\n featureflag.value.conditions.requirementType = jsonFeatureFlagValue.conditions.requirement_type;\n }\n return featureflag;\n}\n\n/**\n * Lets you know if the ConfigurationSetting is a feature flag.\n *\n * [Checks if the content type is featureFlagContentType `\"application/vnd.microsoft.appconfig.ff+json;charset=utf-8\"`]\n */\nexport function isFeatureFlag(\n setting: ConfigurationSetting,\n): setting is ConfigurationSetting & Required<Pick<ConfigurationSetting, \"value\">> {\n return (\n setting && setting.contentType === featureFlagContentType && typeof setting.value === \"string\"\n );\n}\n"]}
|