@azure/container-registry 1.0.0-beta.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/README.md +70 -37
- package/dist/index.js +1255 -1123
- package/dist/index.js.map +1 -1
- package/dist-esm/src/containerRegistryChallengeHandler.js +35 -38
- package/dist-esm/src/containerRegistryChallengeHandler.js.map +1 -1
- package/dist-esm/src/containerRegistryClient.js +69 -50
- package/dist-esm/src/containerRegistryClient.js.map +1 -1
- package/dist-esm/src/containerRegistryTokenCredential.js +39 -126
- package/dist-esm/src/containerRegistryTokenCredential.js.map +1 -1
- package/dist-esm/src/containerRepository.js +100 -63
- package/dist-esm/src/containerRepository.js.map +1 -1
- package/dist-esm/src/generated/generatedClient.js +7 -6
- package/dist-esm/src/generated/generatedClient.js.map +1 -1
- package/dist-esm/src/generated/generatedClientContext.js +13 -2
- package/dist-esm/src/generated/generatedClientContext.js.map +1 -1
- package/dist-esm/src/generated/index.js +1 -0
- package/dist-esm/src/generated/index.js.map +1 -1
- package/dist-esm/src/generated/models/index.js +61 -1
- package/dist-esm/src/generated/models/index.js.map +1 -1
- package/dist-esm/src/generated/models/mappers.js +514 -557
- package/dist-esm/src/generated/models/mappers.js.map +1 -1
- package/dist-esm/src/generated/models/parameters.js +87 -7
- package/dist-esm/src/generated/models/parameters.js.map +1 -1
- package/dist-esm/src/generated/operations/authentication.js +28 -8
- package/dist-esm/src/generated/operations/authentication.js.map +1 -1
- package/dist-esm/src/generated/operations/containerRegistry.js +27 -7
- package/dist-esm/src/generated/operations/containerRegistry.js.map +1 -1
- package/dist-esm/src/generated/operations/containerRegistryBlob.js +2 -2
- package/dist-esm/src/generated/operations/containerRegistryBlob.js.map +1 -1
- package/dist-esm/src/generated/operationsInterfaces/authentication.js +9 -0
- package/dist-esm/src/generated/operationsInterfaces/authentication.js.map +1 -0
- package/dist-esm/src/generated/operationsInterfaces/containerRegistry.js +9 -0
- package/dist-esm/src/generated/operationsInterfaces/containerRegistry.js.map +1 -0
- package/dist-esm/src/generated/operationsInterfaces/containerRegistryBlob.js +9 -0
- package/dist-esm/src/generated/operationsInterfaces/containerRegistryBlob.js.map +1 -0
- package/dist-esm/src/generated/operationsInterfaces/index.js +11 -0
- package/dist-esm/src/generated/operationsInterfaces/index.js.map +1 -0
- package/dist-esm/src/index.js.map +1 -1
- package/dist-esm/src/models.js +43 -2
- package/dist-esm/src/models.js.map +1 -1
- package/dist-esm/src/registryArtifact.js +176 -135
- package/dist-esm/src/registryArtifact.js.map +1 -1
- package/dist-esm/src/tracing.js +1 -1
- package/dist-esm/src/tracing.js.map +1 -1
- package/dist-esm/src/transformations.js +2 -2
- package/dist-esm/src/transformations.js.map +1 -1
- package/dist-esm/src/{base64.browser.js → utils/base64.browser.js} +0 -0
- package/dist-esm/src/utils/base64.browser.js.map +1 -0
- package/dist-esm/src/{base64.js → utils/base64.js} +0 -0
- package/dist-esm/src/utils/base64.js.map +1 -0
- package/dist-esm/src/{utils.js → utils/helpers.js} +1 -1
- package/dist-esm/src/utils/helpers.js.map +1 -0
- package/dist-esm/src/{tokenCycler.js → utils/tokenCycler.js} +29 -34
- package/dist-esm/src/utils/tokenCycler.js.map +1 -0
- package/dist-esm/src/{url.browser.js → utils/url.browser.js} +0 -0
- package/dist-esm/src/utils/url.browser.js.map +1 -0
- package/dist-esm/src/{url.js → utils/url.js} +0 -0
- package/dist-esm/src/utils/url.js.map +1 -0
- package/dist-esm/src/{wwwAuthenticateParser.js → utils/wwwAuthenticateParser.js} +0 -0
- package/dist-esm/src/utils/wwwAuthenticateParser.js.map +1 -0
- package/package.json +22 -25
- package/types/container-registry.d.ts +258 -83
- package/dist-esm/src/base64.browser.js.map +0 -1
- package/dist-esm/src/base64.js.map +0 -1
- package/dist-esm/src/constants.js +0 -4
- package/dist-esm/src/constants.js.map +0 -1
- package/dist-esm/src/tokenCycler.js.map +0 -1
- package/dist-esm/src/url.browser.js.map +0 -1
- package/dist-esm/src/url.js.map +0 -1
- package/dist-esm/src/utils.js.map +0 -1
- package/dist-esm/src/wwwAuthenticateParser.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/tracing.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,EAAE;AACF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;IAC3C,SAAS,EAAE,kBAAkB;IAC7B,aAAa,EAAE,oCAAoC;CACpD,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n//\nimport { createSpanFunction } from \"@azure/core-tracing\";\n\n/**\n * Creates a span using the global tracer.\n *\n * @param name - The name of the operation being performed.\n * @param tracingOptions - The options for the underlying http request.\n *\n * @internal\n */\nexport const createSpan = createSpanFunction({\n namespace: \"Azure.Containers\",\n packagePrefix: \"Azure.Containers.ContainerRegistry\"
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/tracing.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAClC,EAAE;AACF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;IAC3C,SAAS,EAAE,kBAAkB;IAC7B,aAAa,EAAE,oCAAoC;CACpD,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n//\nimport { createSpanFunction } from \"@azure/core-tracing\";\n\n/**\n * Creates a span using the global tracer.\n *\n * @param name - The name of the operation being performed.\n * @param tracingOptions - The options for the underlying http request.\n *\n * @internal\n */\nexport const createSpan = createSpanFunction({\n namespace: \"Azure.Containers\",\n packagePrefix: \"Azure.Containers.ContainerRegistry\",\n});\n"]}
|
|
@@ -7,14 +7,14 @@ export function toManifestWritableProperties(from) {
|
|
|
7
7
|
canDelete: from.canDelete,
|
|
8
8
|
canList: from.canList,
|
|
9
9
|
canRead: from.canRead,
|
|
10
|
-
canWrite: from.canWrite
|
|
10
|
+
canWrite: from.canWrite,
|
|
11
11
|
}
|
|
12
12
|
: undefined;
|
|
13
13
|
}
|
|
14
14
|
export function toArtifactManifestProperties(from, repositoryName, registryLoginServer) {
|
|
15
15
|
var _a, _b, _c, _d;
|
|
16
16
|
return Object.assign({ registryLoginServer,
|
|
17
|
-
repositoryName, digest: from.digest,
|
|
17
|
+
repositoryName, digest: from.digest, sizeInBytes: from.size, createdOn: from.createdOn, lastUpdatedOn: from.lastUpdatedOn, architecture: (_a = from.architecture) !== null && _a !== void 0 ? _a : undefined, operatingSystem: (_b = from.operatingSystem) !== null && _b !== void 0 ? _b : undefined, relatedArtifacts: (_c = from.relatedArtifacts) !== null && _c !== void 0 ? _c : [], tags: (_d = from.tags) !== null && _d !== void 0 ? _d : [] }, toManifestWritableProperties(from));
|
|
18
18
|
}
|
|
19
19
|
export function toServiceTagOrderBy(orderBy) {
|
|
20
20
|
return orderBy === "LastUpdatedOnAscending"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformations.js","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAsBlC,MAAM,UAAU,4BAA4B,CAC1C,IAAwC;IAExC,qFAAqF;IACrF,OAAO,IAAI;QACT,CAAC,CAAC;YACE,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;QACH,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,IAAuC,EACvC,cAAsB,EACtB,mBAA2B;;IAE3B,uBACE,mBAAmB;QACnB,cAAc,EACd,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,
|
|
1
|
+
{"version":3,"file":"transformations.js","sourceRoot":"","sources":["../../src/transformations.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAsBlC,MAAM,UAAU,4BAA4B,CAC1C,IAAwC;IAExC,qFAAqF;IACrF,OAAO,IAAI;QACT,CAAC,CAAC;YACE,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;QACH,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,IAAuC,EACvC,cAAsB,EACtB,mBAA2B;;IAE3B,uBACE,mBAAmB;QACnB,cAAc,EACd,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,WAAW,EAAE,IAAI,CAAC,IAAI,EACtB,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,YAAY,EAAE,MAAA,IAAI,CAAC,YAAY,mCAAI,SAAS,EAC5C,eAAe,EAAE,MAAA,IAAI,CAAC,eAAe,mCAAI,SAAS,EAClD,gBAAgB,EAAE,MAAA,IAAI,CAAC,gBAAgB,mCAAI,EAAE,EAC7C,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,EAAE,IAClB,4BAA4B,CAAC,IAAI,CAAC,EACrC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA0B;IAC5D,OAAO,OAAO,KAAK,wBAAwB;QACzC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,KAAK,yBAAyB;YACvC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAA+B;IAE/B,OAAO,OAAO,KAAK,wBAAwB;QACzC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO,KAAK,yBAAyB;YACvC,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport {\n ArtifactTagOrderBy as ServiceTagOrderBy,\n ArtifactManifestOrderBy as ServiceManifestOrderBy,\n ManifestWriteableProperties as ServiceManifestWritableProperties,\n ArtifactManifestProperties as ServiceArtifactManifestProperties,\n} from \"./generated/models\";\nimport { ArtifactManifestProperties, ArtifactTagOrder, ArtifactManifestOrder } from \"./models\";\n\n/** Changeable attributes. Filter out `quarantineState` and `quarantineDetails` returned by service */\ninterface ManifestWriteableProperties {\n /** Delete enabled */\n canDelete?: boolean;\n /** Write enabled */\n canWrite?: boolean;\n /** List enabled */\n canList?: boolean;\n /** Read enabled */\n canRead?: boolean;\n}\n\nexport function toManifestWritableProperties(\n from?: ServiceManifestWritableProperties\n): ManifestWriteableProperties | undefined {\n // don't return unwanted properties, namely `quarantineState` and `quarantineDetails`\n return from\n ? {\n canDelete: from.canDelete,\n canList: from.canList,\n canRead: from.canRead,\n canWrite: from.canWrite,\n }\n : undefined;\n}\n\nexport function toArtifactManifestProperties(\n from: ServiceArtifactManifestProperties,\n repositoryName: string,\n registryLoginServer: string\n): ArtifactManifestProperties {\n return {\n registryLoginServer,\n repositoryName,\n digest: from.digest,\n sizeInBytes: from.size,\n createdOn: from.createdOn,\n lastUpdatedOn: from.lastUpdatedOn,\n architecture: from.architecture ?? undefined,\n operatingSystem: from.operatingSystem ?? undefined,\n relatedArtifacts: from.relatedArtifacts ?? [],\n tags: from.tags ?? [],\n ...toManifestWritableProperties(from),\n };\n}\n\nexport function toServiceTagOrderBy(orderBy?: ArtifactTagOrder): ServiceTagOrderBy | undefined {\n return orderBy === \"LastUpdatedOnAscending\"\n ? \"timeasc\"\n : orderBy === \"LastUpdatedOnDescending\"\n ? \"timedesc\"\n : undefined;\n}\n\nexport function toServiceManifestOrderBy(\n orderBy?: ArtifactManifestOrder\n): ServiceManifestOrderBy | undefined {\n return orderBy === \"LastUpdatedOnAscending\"\n ? \"timeasc\"\n : orderBy === \"LastUpdatedOnDescending\"\n ? \"timedesc\"\n : undefined;\n}\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.browser.js","sourceRoot":"","sources":["../../../src/utils/base64.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAOlC;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\ndeclare global {\n function atob(input: string): string;\n}\n\n/**\n * Base64 decode\n *\n * @internal\n * @param encodedString -\n * @returns\n\n */\nexport function base64decode(encodedString: string): string {\n return atob(encodedString);\n}\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base64.js","sourceRoot":"","sources":["../../../src/utils/base64.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB;IAChD,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzD,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Base64 decode\n *\n * @internal\n * @param encodedString -\n * @returns\n */\nexport function base64decode(encodedString: string): string {\n return Buffer.from(encodedString, \"base64\").toString();\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAyB;IACvD,kCAAkC;IAClC,oDAAoD;IACpD,4CAA4C;IAC5C,OAAO,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,WAAmB;IAC1C,OAAO,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACnC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Extract the path part from the next link value returned by the service,\n * @internal\n */\nexport function extractNextLink(value: string | undefined): string | undefined {\n // The link value has this pattern\n // `</acr/v1/name/...&n=2&orderby=>; rel=\"next\"`\n // and we only want the part inside of <...>\n return value?.substr(1, value.indexOf(\">\") - 1);\n}\n\n/**\n * Checks whether a string is a digest\n * @internal\n */\nexport function isDigest(tagOrDigest: string): boolean {\n return tagOrDigest.includes(\":\");\n}\n"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
|
-
import { __awaiter } from "tslib";
|
|
4
3
|
function delay(t, value) {
|
|
5
4
|
return new Promise((resolve) => setTimeout(() => resolve(value), t));
|
|
6
5
|
}
|
|
@@ -8,7 +7,7 @@ function delay(t, value) {
|
|
|
8
7
|
export const DEFAULT_CYCLER_OPTIONS = {
|
|
9
8
|
forcedRefreshWindowInMs: 1000,
|
|
10
9
|
retryIntervalInMs: 3000,
|
|
11
|
-
refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry
|
|
10
|
+
refreshWindowInMs: 1000 * 60 * 2, // Start refreshing 2m before expiry
|
|
12
11
|
};
|
|
13
12
|
/**
|
|
14
13
|
* Converts an an unreliable access token getter (which may resolve with null)
|
|
@@ -20,37 +19,33 @@ export const DEFAULT_CYCLER_OPTIONS = {
|
|
|
20
19
|
* @param refreshTimeout - The timestamp after which the refresh attempt will fail, throwing an exception.
|
|
21
20
|
* @returns - A promise that, if it resolves, will resolve with an access token.
|
|
22
21
|
*/
|
|
23
|
-
function beginRefresh(getAccessToken, retryIntervalInMs, refreshTimeout) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
const finalToken = yield getAccessToken();
|
|
39
|
-
// Timeout is up, so throw if it's still null
|
|
40
|
-
if (finalToken === null) {
|
|
41
|
-
throw new Error("Failed to refresh access token.");
|
|
42
|
-
}
|
|
43
|
-
return finalToken;
|
|
44
|
-
}
|
|
45
|
-
});
|
|
22
|
+
async function beginRefresh(getAccessToken, retryIntervalInMs, refreshTimeout) {
|
|
23
|
+
// This wrapper handles exceptions gracefully as long as we haven't exceeded
|
|
24
|
+
// the timeout.
|
|
25
|
+
async function tryGetAccessToken() {
|
|
26
|
+
if (Date.now() < refreshTimeout) {
|
|
27
|
+
try {
|
|
28
|
+
return await getAccessToken();
|
|
29
|
+
}
|
|
30
|
+
catch (_a) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
46
33
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
34
|
+
else {
|
|
35
|
+
const finalToken = await getAccessToken();
|
|
36
|
+
// Timeout is up, so throw if it's still null
|
|
37
|
+
if (finalToken === null) {
|
|
38
|
+
throw new Error("Failed to refresh access token.");
|
|
39
|
+
}
|
|
40
|
+
return finalToken;
|
|
51
41
|
}
|
|
52
|
-
|
|
53
|
-
|
|
42
|
+
}
|
|
43
|
+
let token = await tryGetAccessToken();
|
|
44
|
+
while (token === null) {
|
|
45
|
+
await delay(retryIntervalInMs);
|
|
46
|
+
token = await tryGetAccessToken();
|
|
47
|
+
}
|
|
48
|
+
return token;
|
|
54
49
|
}
|
|
55
50
|
/**
|
|
56
51
|
* Creates a token cycler from a credential, scopes, and optional settings.
|
|
@@ -96,7 +91,7 @@ export function createTokenCycler(credential, tokenCyclerOptions) {
|
|
|
96
91
|
*/
|
|
97
92
|
get mustRefresh() {
|
|
98
93
|
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
|
|
99
|
-
}
|
|
94
|
+
},
|
|
100
95
|
};
|
|
101
96
|
/**
|
|
102
97
|
* Starts a refresh job or returns the existing job if one is already
|
|
@@ -132,7 +127,7 @@ export function createTokenCycler(credential, tokenCyclerOptions) {
|
|
|
132
127
|
get cachedToken() {
|
|
133
128
|
return token || undefined;
|
|
134
129
|
},
|
|
135
|
-
getToken: (scopes, tokenOptions) =>
|
|
130
|
+
getToken: async (scopes, tokenOptions) => {
|
|
136
131
|
//
|
|
137
132
|
// Simple rules:
|
|
138
133
|
// - If we MUST refresh, then return the refresh task, blocking
|
|
@@ -148,7 +143,7 @@ export function createTokenCycler(credential, tokenCyclerOptions) {
|
|
|
148
143
|
refresh(scopes, tokenOptions);
|
|
149
144
|
}
|
|
150
145
|
return token;
|
|
151
|
-
}
|
|
146
|
+
},
|
|
152
147
|
};
|
|
153
148
|
}
|
|
154
149
|
//# sourceMappingURL=tokenCycler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenCycler.js","sourceRoot":"","sources":["../../../src/utils/tokenCycler.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { AccessToken, GetTokenOptions, TokenCredential } from \"@azure/core-auth\";\n\nfunction delay<T>(t: number, value?: T): Promise<T | void> {\n return new Promise((resolve) => setTimeout(() => resolve(value), t));\n}\n/**\n * A function that gets a promise of an access token and allows providing\n * options.\n *\n * @param options - the options to pass to the underlying token provider\n */\nexport type AccessTokenGetter<T extends GetTokenOptions> = (\n scopes: string | string[],\n options: T\n) => Promise<AccessToken>;\n\n/**\n * The response of the\n */\nexport interface AccessTokenRefresher<T extends GetTokenOptions> {\n cachedToken?: AccessToken;\n getToken: AccessTokenGetter<T>;\n}\n\nexport interface TokenCyclerOptions {\n /**\n * The window of time before token expiration during which the token will be\n * considered unusable due to risk of the token expiring before sending the\n * request.\n *\n * This will only become meaningful if the refresh fails for over\n * (refreshWindow - forcedRefreshWindow) milliseconds.\n */\n forcedRefreshWindowInMs: number;\n /**\n * Interval in milliseconds to retry failed token refreshes.\n */\n retryIntervalInMs: number;\n /**\n * The window of time before token expiration during which\n * we will attempt to refresh the token.\n */\n refreshWindowInMs: number;\n}\n\n// Default options for the cycler if none are provided\nexport const DEFAULT_CYCLER_OPTIONS: TokenCyclerOptions = {\n forcedRefreshWindowInMs: 1000, // Force waiting for a refresh 1s before the token expires\n retryIntervalInMs: 3000, // Allow refresh attempts every 3s\n refreshWindowInMs: 1000 * 60 * 2, // Start refreshing 2m before expiry\n};\n\n/**\n * Converts an an unreliable access token getter (which may resolve with null)\n * into an AccessTokenGetter by retrying the unreliable getter in a regular\n * interval.\n *\n * @param getAccessToken - A function that produces a promise of an access token that may fail by returning null.\n * @param retryIntervalInMs - The time (in milliseconds) to wait between retry attempts.\n * @param refreshTimeout - The timestamp after which the refresh attempt will fail, throwing an exception.\n * @returns - A promise that, if it resolves, will resolve with an access token.\n */\nasync function beginRefresh(\n getAccessToken: () => Promise<AccessToken | null>,\n retryIntervalInMs: number,\n refreshTimeout: number\n): Promise<AccessToken> {\n // This wrapper handles exceptions gracefully as long as we haven't exceeded\n // the timeout.\n async function tryGetAccessToken(): Promise<AccessToken | null> {\n if (Date.now() < refreshTimeout) {\n try {\n return await getAccessToken();\n } catch {\n return null;\n }\n } else {\n const finalToken = await getAccessToken();\n\n // Timeout is up, so throw if it's still null\n if (finalToken === null) {\n throw new Error(\"Failed to refresh access token.\");\n }\n\n return finalToken;\n }\n }\n\n let token: AccessToken | null = await tryGetAccessToken();\n\n while (token === null) {\n await delay(retryIntervalInMs);\n\n token = await tryGetAccessToken();\n }\n\n return token;\n}\n\n/**\n * Creates a token cycler from a credential, scopes, and optional settings.\n *\n * A token cycler represents a way to reliably retrieve a valid access token\n * from a TokenCredential. It will handle initializing the token, refreshing it\n * when it nears expiration, and synchronizes refresh attempts to avoid\n * concurrency hazards.\n *\n * @param credential - the underlying TokenCredential that provides the access\n * token\n * @param tokenCyclerOptions - optionally override default settings for the cycler\n *\n * @returns - a function that reliably produces a valid access token\n */\nexport function createTokenCycler<T extends GetTokenOptions>(\n credential: TokenCredential,\n tokenCyclerOptions?: Partial<TokenCyclerOptions>\n): AccessTokenRefresher<T> {\n let refreshWorker: Promise<AccessToken> | null = null;\n let token: AccessToken | null = null;\n\n const options = {\n ...DEFAULT_CYCLER_OPTIONS,\n ...tokenCyclerOptions,\n };\n\n /**\n * This little holder defines several predicates that we use to construct\n * the rules of refreshing the token.\n */\n const cycler = {\n /**\n * Produces true if a refresh job is currently in progress.\n */\n get isRefreshing(): boolean {\n return refreshWorker !== null;\n },\n /**\n * Produces true if the cycler SHOULD refresh (we are within the refresh\n * window and not already refreshing)\n */\n get shouldRefresh(): boolean {\n return (\n !cycler.isRefreshing &&\n (token?.expiresOnTimestamp ?? 0) - options.refreshWindowInMs < Date.now()\n );\n },\n /**\n * Produces true if the cycler MUST refresh (null or nearly-expired\n * token).\n */\n get mustRefresh(): boolean {\n return (\n token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now()\n );\n },\n };\n\n /**\n * Starts a refresh job or returns the existing job if one is already\n * running.\n */\n function refresh(scopes: string | string[], getTokenOptions: T): Promise<AccessToken> {\n if (!cycler.isRefreshing) {\n // We bind `scopes` here to avoid passing it around a lot\n const tryGetAccessToken = (): Promise<AccessToken | null> =>\n credential.getToken(scopes, getTokenOptions);\n\n // Take advantage of promise chaining to insert an assignment to `token`\n // before the refresh can be considered done.\n refreshWorker = beginRefresh(\n tryGetAccessToken,\n options.retryIntervalInMs,\n // If we don't have a token, then we should timeout immediately\n token?.expiresOnTimestamp ?? Date.now()\n )\n .then((_token) => {\n refreshWorker = null;\n token = _token;\n return token;\n })\n .catch((reason) => {\n // We also should reset the refresher if we enter a failed state. All\n // existing awaiters will throw, but subsequent requests will start a\n // new retry chain.\n refreshWorker = null;\n token = null;\n throw reason;\n });\n }\n\n return refreshWorker as Promise<AccessToken>;\n }\n\n return {\n get cachedToken(): AccessToken | undefined {\n return token || undefined;\n },\n getToken: async (scopes: string | string[], tokenOptions: T): Promise<AccessToken> => {\n //\n // Simple rules:\n // - If we MUST refresh, then return the refresh task, blocking\n // the pipeline until a token is available.\n // - If we SHOULD refresh, then run refresh but don't return it\n // (we can still use the cached token).\n // - Return the token, since it's fine if we didn't return in\n // step 1.\n //\n if (cycler.mustRefresh) return refresh(scopes, tokenOptions);\n\n if (cycler.shouldRefresh) {\n refresh(scopes, tokenOptions);\n }\n\n return token as AccessToken;\n },\n };\n}\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.browser.js","sourceRoot":"","sources":["../../../src/utils/url.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,GAAG,GAAG,GAAG,CAAC;AAChB,MAAM,eAAe,GAAG,eAAe,CAAC;AAExC,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,eAAe,IAAI,eAAe,EAAE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nconst url = URL;\nconst urlSearchParams = URLSearchParams;\n\nexport { url as URL, urlSearchParams as URLSearchParams };\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/utils/url.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport { URL, URLSearchParams } from \"url\";\n"]}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wwwAuthenticateParser.js","sourceRoot":"","sources":["../../../src/utils/wwwAuthenticateParser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAuBlC;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,eAAuB;IAC1D,wDAAwD;IACxD,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9C,oFAAoF;IACpF,oDAAoD;IACpD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAClE,EAAE,CACH,CAAC;IACF,+DAA+D;IAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAC7B,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,CAAW,EAAE,EAAE,CAAC,iCAC/B,MAAM,KACT,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IACzB,EACF,EAAE,CACH,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/**\n * Defined supported names of WWW-Authenticate name-value pairs.\n */\nexport type ValidParsedWWWAuthenticateProperties =\n // \"authorization_uri\" was used in the track 1 version of KeyVault.\n // This is not a relevant property anymore, since the service is consistently answering with \"authorization\".\n // | \"authorization_uri\"\n | \"authorization\"\n | \"claims\"\n // Even though the service is moving to \"scope\", both \"resource\" and \"scope\" should be supported.\n | \"resource\"\n | \"scope\"\n | \"service\";\n\n/**\n * Represents the result of `parseWWWAuthenticate()`;\n */\nexport type ParsedWWWAuthenticate = {\n [Key in ValidParsedWWWAuthenticateProperties]?: string;\n};\n\n/**\n * Parses an WWW-Authenticate response.\n * This transforms a string value like:\n * `Bearer authorization=\"some_authorization\", resource=\"https://some.url\"`\n * into an object like:\n * `{ authorization: \"some_authorization\", resource: \"https://some.url\" }`\n * @param wwwAuthenticate - String value in the WWW-Authenticate header\n */\nexport function parseWWWAuthenticate(wwwAuthenticate: string): ParsedWWWAuthenticate {\n // First we split the string by either `,`, `, ` or ` `.\n const parts = wwwAuthenticate.split(/, *| +/);\n // Then we only keep the strings with an equal sign after a word and before a quote.\n // also splitting these sections by their equal sign\n const keyValues = parts.reduce<string[][]>(\n (acc, str) => (str.match(/\\w=\"/) ? [...acc, str.split(\"=\")] : acc),\n []\n );\n // Then we transform these key-value pairs back into an object.\n const parsed = keyValues.reduce<ParsedWWWAuthenticate>(\n (result, [key, value]: string[]) => ({\n ...result,\n [key]: value.slice(1, -1),\n }),\n {}\n );\n return parsed;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure/container-registry",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "An isomorphic client library for the Azure Container Registry service.",
|
|
5
5
|
"sdk-type": "client",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist-esm/src/index.js",
|
|
8
8
|
"browser": {
|
|
9
|
-
"./dist-esm/src/url.js": "./dist-esm/src/url.browser.js",
|
|
10
|
-
"./dist-esm/src/base64.js": "./dist-esm/src/base64.browser.js"
|
|
9
|
+
"./dist-esm/src/utils/url.js": "./dist-esm/src/utils/url.browser.js",
|
|
10
|
+
"./dist-esm/src/utils/base64.js": "./dist-esm/src/utils/base64.browser.js",
|
|
11
|
+
"./dist-esm/test/utils/isNode.js": "./dist-esm/src/test/isNode.browser.js"
|
|
11
12
|
},
|
|
12
13
|
"types": "types/container-registry.d.ts",
|
|
13
14
|
"//metadata": {
|
|
14
15
|
"constantPaths": [
|
|
15
16
|
{
|
|
16
17
|
"path": "src/generated/generatedClientContext.ts",
|
|
17
|
-
"prefix": "
|
|
18
|
+
"prefix": "const packageDetails"
|
|
18
19
|
},
|
|
19
20
|
{
|
|
20
|
-
"path": "
|
|
21
|
-
"prefix": "
|
|
21
|
+
"path": "swagger/README.md",
|
|
22
|
+
"prefix": "package-version"
|
|
22
23
|
}
|
|
23
24
|
]
|
|
24
25
|
},
|
|
@@ -28,21 +29,19 @@
|
|
|
28
29
|
"build:node": "tsc -p . && cross-env ONLY_NODE=true rollup -c 2>&1",
|
|
29
30
|
"build:samples": "echo Obsolete.",
|
|
30
31
|
"build:test": "tsc -p . && rollup -c 2>&1",
|
|
31
|
-
"build": "tsc -p . && rollup -c 2>&1 && api-extractor run --local",
|
|
32
|
+
"build": "npm run clean && tsc -p . && rollup -c 2>&1 && api-extractor run --local",
|
|
32
33
|
"check-format": "prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
|
|
33
34
|
"clean": "rimraf dist dist-* temp types *.tgz *.log",
|
|
34
|
-
"docs": "typedoc --excludePrivate --excludeNotExported --excludeExternals --stripInternal --mode file --out ./dist/docs ./src",
|
|
35
35
|
"execute:samples": "dev-tool samples run samples-dev",
|
|
36
36
|
"extract-api": "tsc -p . && api-extractor run --local",
|
|
37
37
|
"format": "prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"samples-dev/**/*.ts\" \"*.{js,json}\"",
|
|
38
|
-
"generate:client": "autorest --typescript
|
|
38
|
+
"generate:client": "autorest --typescript ./swagger/README.md",
|
|
39
39
|
"integration-test:browser": "karma start --single-run",
|
|
40
40
|
"integration-test:node": "nyc mocha -r esm --require source-map-support/register --reporter ../../../common/tools/mocha-multi-reporter.js --timeout 5000000 --full-trace \"dist-esm/test/{,!(browser)/**/}/*.spec.js\"",
|
|
41
41
|
"integration-test": "npm run integration-test:node && npm run integration-test:browser",
|
|
42
42
|
"lint:fix": "eslint package.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]",
|
|
43
43
|
"lint": "eslint package.json api-extractor.json src test --ext .ts",
|
|
44
44
|
"pack": "npm pack 2>&1",
|
|
45
|
-
"prebuild": "npm run clean",
|
|
46
45
|
"test:browser": "npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
|
|
47
46
|
"test:node": "npm run build:test && npm run unit-test:node && npm run integration-test:node",
|
|
48
47
|
"test": "npm run build:test && npm run unit-test && npm run integration-test",
|
|
@@ -59,7 +58,7 @@
|
|
|
59
58
|
],
|
|
60
59
|
"repository": "github:Azure/azure-sdk-for-js",
|
|
61
60
|
"engines": {
|
|
62
|
-
"node": ">=
|
|
61
|
+
"node": ">=12.0.0"
|
|
63
62
|
},
|
|
64
63
|
"keywords": [
|
|
65
64
|
"azure",
|
|
@@ -71,30 +70,29 @@
|
|
|
71
70
|
"bugs": {
|
|
72
71
|
"url": "https://github.com/Azure/azure-sdk-for-js/issues"
|
|
73
72
|
},
|
|
74
|
-
"homepage": "https://github.com/Azure/azure-sdk-for-js/blob/
|
|
73
|
+
"homepage": "https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/containerregistry/container-registry/README.md",
|
|
75
74
|
"sideEffects": false,
|
|
76
75
|
"prettier": "@azure/eslint-plugin-azure-sdk/prettier.json",
|
|
77
76
|
"dependencies": {
|
|
78
77
|
"@azure/core-auth": "^1.3.0",
|
|
79
78
|
"@azure/core-client": "^1.0.0",
|
|
80
|
-
"@azure/core-rest-pipeline": "1.1.0
|
|
79
|
+
"@azure/core-rest-pipeline": "^1.1.0",
|
|
81
80
|
"@azure/core-paging": "^1.1.1",
|
|
82
|
-
"@azure/core-tracing": "1.0.0-preview.
|
|
83
|
-
"@azure/core-util": "^1.0.0-beta.1",
|
|
81
|
+
"@azure/core-tracing": "1.0.0-preview.13",
|
|
84
82
|
"@azure/logger": "^1.0.0",
|
|
85
|
-
"tslib": "^2.
|
|
83
|
+
"tslib": "^2.2.0"
|
|
86
84
|
},
|
|
87
85
|
"devDependencies": {
|
|
88
86
|
"@azure/dev-tool": "^1.0.0",
|
|
89
87
|
"@azure/eslint-plugin-azure-sdk": "^3.0.0",
|
|
90
|
-
"@azure/identity": "^
|
|
91
|
-
"@azure/
|
|
92
|
-
"@azure/test-
|
|
93
|
-
"@microsoft/api-extractor": "7.
|
|
88
|
+
"@azure/identity": "^2.0.1",
|
|
89
|
+
"@azure/test-utils": "^1.0.0",
|
|
90
|
+
"@azure-tools/test-recorder": "^1.0.0",
|
|
91
|
+
"@microsoft/api-extractor": "^7.18.11",
|
|
94
92
|
"@types/chai": "^4.1.6",
|
|
95
93
|
"@types/chai-as-promised": "^7.1.0",
|
|
96
94
|
"@types/mocha": "^7.0.2",
|
|
97
|
-
"@types/node": "^
|
|
95
|
+
"@types/node": "^12.0.0",
|
|
98
96
|
"chai": "^4.2.0",
|
|
99
97
|
"chai-as-promised": "^7.1.1",
|
|
100
98
|
"cross-env": "^7.0.2",
|
|
@@ -115,12 +113,11 @@
|
|
|
115
113
|
"karma-mocha-reporter": "^2.2.5",
|
|
116
114
|
"karma-sourcemap-loader": "^0.3.8",
|
|
117
115
|
"mocha": "^7.1.1",
|
|
118
|
-
"mocha-junit-reporter": "^
|
|
119
|
-
"nyc": "^
|
|
120
|
-
"prettier": "^
|
|
116
|
+
"mocha-junit-reporter": "^2.0.0",
|
|
117
|
+
"nyc": "^15.0.0",
|
|
118
|
+
"prettier": "^2.5.1",
|
|
121
119
|
"rimraf": "^3.0.0",
|
|
122
120
|
"rollup": "^1.16.3",
|
|
123
|
-
"typedoc": "0.15.2",
|
|
124
121
|
"typescript": "~4.2.0",
|
|
125
122
|
"util": "^0.12.1"
|
|
126
123
|
},
|