@azure/core-lro 3.3.2-alpha.20260311.2 → 3.4.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.
Files changed (49) hide show
  1. package/README.md +14 -15
  2. package/dist/browser/http/models.js.map +1 -1
  3. package/dist/browser/http/operation.js +1 -1
  4. package/dist/browser/http/operation.js.map +1 -1
  5. package/dist/commonjs/http/models.js +1 -0
  6. package/dist/commonjs/http/models.js.map +2 -2
  7. package/dist/commonjs/http/operation.js +2 -1
  8. package/dist/commonjs/http/operation.js.map +3 -3
  9. package/dist/commonjs/http/poller.js +1 -0
  10. package/dist/commonjs/http/poller.js.map +1 -1
  11. package/dist/commonjs/http/utils.js +1 -0
  12. package/dist/commonjs/http/utils.js.map +1 -1
  13. package/dist/commonjs/index.js +1 -0
  14. package/dist/commonjs/index.js.map +1 -1
  15. package/dist/commonjs/logger.js +1 -0
  16. package/dist/commonjs/logger.js.map +1 -1
  17. package/dist/commonjs/poller/constants.js +1 -0
  18. package/dist/commonjs/poller/constants.js.map +1 -1
  19. package/dist/commonjs/poller/models.js +1 -0
  20. package/dist/commonjs/poller/models.js.map +1 -1
  21. package/dist/commonjs/poller/operation.js +1 -0
  22. package/dist/commonjs/poller/operation.js.map +1 -1
  23. package/dist/commonjs/poller/poller.js +1 -0
  24. package/dist/commonjs/poller/poller.js.map +1 -1
  25. package/dist/commonjs/tsdoc-metadata.json +1 -1
  26. package/dist/esm/http/models.js +4 -0
  27. package/dist/esm/http/models.js.map +1 -7
  28. package/dist/esm/http/operation.js +217 -219
  29. package/dist/esm/http/operation.js.map +1 -7
  30. package/dist/esm/http/poller.js +44 -58
  31. package/dist/esm/http/poller.js.map +1 -7
  32. package/dist/esm/http/utils.js +41 -32
  33. package/dist/esm/http/utils.js.map +1 -7
  34. package/dist/esm/index.js +5 -6
  35. package/dist/esm/index.js.map +1 -7
  36. package/dist/esm/logger.js +8 -4
  37. package/dist/esm/logger.js.map +1 -7
  38. package/dist/esm/poller/constants.js +11 -6
  39. package/dist/esm/poller/constants.js.map +1 -7
  40. package/dist/esm/poller/models.js +4 -0
  41. package/dist/esm/poller/models.js.map +1 -7
  42. package/dist/esm/poller/operation.js +150 -176
  43. package/dist/esm/poller/operation.js.map +1 -7
  44. package/dist/esm/poller/poller.js +176 -177
  45. package/dist/esm/poller/poller.js.map +1 -7
  46. package/dist/react-native/http/models.js.map +1 -1
  47. package/dist/react-native/http/operation.js +1 -1
  48. package/dist/react-native/http/operation.js.map +1 -1
  49. package/package.json +33 -22
@@ -1,259 +1,257 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
1
3
  import { pollOperation } from "../poller/operation.js";
2
4
  import { logger } from "../logger.js";
3
5
  function getOperationLocationPollingUrl(inputs) {
4
- const { azureAsyncOperation, operationLocation } = inputs;
5
- return operationLocation ?? azureAsyncOperation;
6
+ const { azureAsyncOperation, operationLocation } = inputs;
7
+ return operationLocation ?? azureAsyncOperation;
6
8
  }
7
9
  function getLocationHeader(rawResponse) {
8
- return rawResponse.headers["location"];
10
+ return rawResponse.headers["location"];
9
11
  }
10
12
  function getOperationLocationHeader(rawResponse) {
11
- return rawResponse.headers["operation-location"];
13
+ return rawResponse.headers["operation-location"];
12
14
  }
13
15
  function getAzureAsyncOperationHeader(rawResponse) {
14
- return rawResponse.headers["azure-asyncoperation"];
16
+ return rawResponse.headers["azure-asyncoperation"];
15
17
  }
16
18
  function findResourceLocation(inputs) {
17
- const { location, requestMethod, requestPath, resourceLocationConfig, skipFinalGet } = inputs;
18
- if (skipFinalGet) {
19
- return void 0;
20
- }
21
- switch (requestMethod) {
22
- case "PUT": {
23
- return requestPath;
19
+ const { location, requestMethod, requestPath, resourceLocationConfig, skipFinalGet } = inputs;
20
+ // If skipFinalGet is true, return undefined to skip the final GET request
21
+ if (skipFinalGet) {
22
+ return undefined;
24
23
  }
25
- case "DELETE": {
26
- return void 0;
24
+ switch (requestMethod) {
25
+ case "PUT": {
26
+ return requestPath;
27
+ }
28
+ case "DELETE": {
29
+ return undefined;
30
+ }
31
+ case "PATCH": {
32
+ return getDefault() ?? requestPath;
33
+ }
34
+ default: {
35
+ return getDefault();
36
+ }
27
37
  }
28
- case "PATCH": {
29
- return getDefault() ?? requestPath;
38
+ function getDefault() {
39
+ switch (resourceLocationConfig) {
40
+ case "operation-location":
41
+ case "azure-async-operation": {
42
+ return undefined;
43
+ }
44
+ case "original-uri": {
45
+ return requestPath;
46
+ }
47
+ case "location":
48
+ default: {
49
+ return location;
50
+ }
51
+ }
30
52
  }
31
- default: {
32
- return getDefault();
53
+ }
54
+ export function inferLroMode(rawResponse, resourceLocationConfig, skipFinalGet) {
55
+ const requestPath = rawResponse.request.url;
56
+ const requestMethod = rawResponse.request.method;
57
+ const operationLocation = getOperationLocationHeader(rawResponse);
58
+ const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse);
59
+ const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation });
60
+ const location = getLocationHeader(rawResponse);
61
+ const normalizedRequestMethod = requestMethod?.toLocaleUpperCase();
62
+ if (pollingUrl !== undefined) {
63
+ return {
64
+ mode: "OperationLocation",
65
+ operationLocation: pollingUrl,
66
+ resourceLocation: findResourceLocation({
67
+ requestMethod: normalizedRequestMethod,
68
+ location,
69
+ requestPath,
70
+ resourceLocationConfig,
71
+ skipFinalGet,
72
+ }),
73
+ initialRequestUrl: requestPath,
74
+ requestMethod,
75
+ };
33
76
  }
34
- }
35
- function getDefault() {
36
- switch (resourceLocationConfig) {
37
- case "operation-location":
38
- case "azure-async-operation": {
39
- return void 0;
40
- }
41
- case "original-uri": {
42
- return requestPath;
43
- }
44
- case "location":
45
- default: {
46
- return location;
47
- }
77
+ else if (location !== undefined) {
78
+ return {
79
+ mode: "ResourceLocation",
80
+ operationLocation: location,
81
+ initialRequestUrl: requestPath,
82
+ requestMethod,
83
+ };
84
+ }
85
+ else if (normalizedRequestMethod === "PUT" && requestPath) {
86
+ return {
87
+ mode: "Body",
88
+ operationLocation: requestPath,
89
+ initialRequestUrl: requestPath,
90
+ requestMethod,
91
+ };
92
+ }
93
+ else {
94
+ return undefined;
48
95
  }
49
- }
50
- }
51
- function inferLroMode(rawResponse, resourceLocationConfig, skipFinalGet) {
52
- const requestPath = rawResponse.request.url;
53
- const requestMethod = rawResponse.request.method;
54
- const operationLocation = getOperationLocationHeader(rawResponse);
55
- const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse);
56
- const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation });
57
- const location = getLocationHeader(rawResponse);
58
- const normalizedRequestMethod = requestMethod?.toLocaleUpperCase();
59
- if (pollingUrl !== void 0) {
60
- return {
61
- mode: "OperationLocation",
62
- operationLocation: pollingUrl,
63
- resourceLocation: findResourceLocation({
64
- requestMethod: normalizedRequestMethod,
65
- location,
66
- requestPath,
67
- resourceLocationConfig,
68
- skipFinalGet
69
- }),
70
- initialRequestUrl: requestPath,
71
- requestMethod
72
- };
73
- } else if (location !== void 0) {
74
- return {
75
- mode: "ResourceLocation",
76
- operationLocation: location,
77
- initialRequestUrl: requestPath,
78
- requestMethod
79
- };
80
- } else if (normalizedRequestMethod === "PUT" && requestPath) {
81
- return {
82
- mode: "Body",
83
- operationLocation: requestPath,
84
- initialRequestUrl: requestPath,
85
- requestMethod
86
- };
87
- } else {
88
- return void 0;
89
- }
90
96
  }
91
97
  function transformStatus(inputs) {
92
- const { status, statusCode } = inputs;
93
- if (typeof status !== "string" && status !== void 0) {
94
- throw new Error(
95
- `Polling was unsuccessful. Expected status to have a string value or no value but it has instead: ${status}. This doesn't necessarily indicate the operation has failed. Check your Azure subscription or resource status for more information.`
96
- );
97
- }
98
- logger.verbose(`LRO: Transforming status: ${status} with status code: ${statusCode}.`);
99
- const lowerCaseStatus = status?.toLocaleLowerCase();
100
- if (!lowerCaseStatus) {
101
- return toOperationStatus(statusCode);
102
- }
103
- if (lowerCaseStatus.includes("succeeded")) {
104
- return "succeeded";
105
- }
106
- if (lowerCaseStatus.includes("fail")) {
107
- return "failed";
108
- }
109
- if (["canceled", "cancelled"].includes(lowerCaseStatus)) {
110
- return "canceled";
111
- }
112
- return "running";
98
+ const { status, statusCode } = inputs;
99
+ if (typeof status !== "string" && status !== undefined) {
100
+ throw new Error(`Polling was unsuccessful. Expected status to have a string value or no value but it has instead: ${status}. This doesn't necessarily indicate the operation has failed. Check your Azure subscription or resource status for more information.`);
101
+ }
102
+ logger.verbose(`LRO: Transforming status: ${status} with status code: ${statusCode}.`);
103
+ const lowerCaseStatus = status?.toLocaleLowerCase();
104
+ if (!lowerCaseStatus) {
105
+ return toOperationStatus(statusCode);
106
+ }
107
+ if (lowerCaseStatus.includes("succeeded")) {
108
+ return "succeeded";
109
+ }
110
+ if (lowerCaseStatus.includes("fail")) {
111
+ return "failed";
112
+ }
113
+ if (["canceled", "cancelled"].includes(lowerCaseStatus)) {
114
+ return "canceled";
115
+ }
116
+ return "running";
113
117
  }
114
118
  function getStatus(rawResponse) {
115
- const { status } = rawResponse.body ?? {};
116
- return transformStatus({ status, statusCode: rawResponse.statusCode });
119
+ const { status } = rawResponse.body ?? {};
120
+ return transformStatus({ status, statusCode: rawResponse.statusCode });
117
121
  }
118
122
  function getProvisioningState(rawResponse) {
119
- const { properties, provisioningState } = rawResponse.body ?? {};
120
- const status = properties?.provisioningState ?? provisioningState;
121
- return transformStatus({ status, statusCode: rawResponse.statusCode });
123
+ const { properties, provisioningState } = rawResponse.body ?? {};
124
+ const status = properties?.provisioningState ?? provisioningState;
125
+ return transformStatus({ status, statusCode: rawResponse.statusCode });
122
126
  }
123
127
  function toOperationStatus(statusCode) {
124
- if (statusCode === 202) {
125
- return "running";
126
- } else if (statusCode < 300) {
127
- return "succeeded";
128
- } else {
129
- return "failed";
130
- }
131
- }
132
- function parseRetryAfter({ rawResponse }) {
133
- const retryAfter = rawResponse.headers["retry-after"];
134
- if (retryAfter !== void 0) {
135
- const retryAfterInSeconds = parseInt(retryAfter);
136
- return isNaN(retryAfterInSeconds) ? calculatePollingIntervalFromDate(new Date(retryAfter)) : retryAfterInSeconds * 1e3;
137
- }
138
- return void 0;
139
- }
140
- function getErrorFromResponse(response) {
141
- const error = accessBodyProperty(response, "error");
142
- if (!error) {
143
- logger.warning(
144
- `The long-running operation failed but there is no error property in the response's body`
145
- );
146
- return;
147
- }
148
- if (!error.code || !error.message) {
149
- logger.warning(
150
- `The long-running operation failed but the error property in the response's body doesn't contain code or message`
151
- );
152
- return;
153
- }
154
- return error;
155
- }
156
- function calculatePollingIntervalFromDate(retryAfterDate) {
157
- const timeNow = Math.floor((/* @__PURE__ */ new Date()).getTime());
158
- const retryAfterTime = retryAfterDate.getTime();
159
- if (timeNow < retryAfterTime) {
160
- return retryAfterTime - timeNow;
161
- }
162
- return void 0;
163
- }
164
- function getStatusFromInitialResponse(inputs) {
165
- const { response, state, operationLocation } = inputs;
166
- function helper() {
167
- const mode = state.config.metadata?.["mode"];
168
- switch (mode) {
169
- case void 0:
170
- return toOperationStatus(response.rawResponse.statusCode);
171
- case "Body":
172
- return getOperationStatus(response, state);
173
- default:
128
+ if (statusCode === 202) {
174
129
  return "running";
175
130
  }
176
- }
177
- const status = helper();
178
- return status === "running" && operationLocation === void 0 ? "succeeded" : status;
131
+ else if (statusCode < 300) {
132
+ return "succeeded";
133
+ }
134
+ else {
135
+ return "failed";
136
+ }
179
137
  }
180
- function getOperationLocation({ rawResponse }, state) {
181
- const mode = state.config.metadata?.["mode"];
182
- switch (mode) {
183
- case "OperationLocation": {
184
- return getOperationLocationPollingUrl({
185
- operationLocation: getOperationLocationHeader(rawResponse),
186
- azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse)
187
- });
138
+ export function parseRetryAfter({ rawResponse }) {
139
+ const retryAfter = rawResponse.headers["retry-after"];
140
+ if (retryAfter !== undefined) {
141
+ // Retry-After header value is either in HTTP date format, or in seconds
142
+ const retryAfterInSeconds = parseInt(retryAfter);
143
+ return isNaN(retryAfterInSeconds)
144
+ ? calculatePollingIntervalFromDate(new Date(retryAfter))
145
+ : retryAfterInSeconds * 1000;
188
146
  }
189
- case "ResourceLocation": {
190
- return getLocationHeader(rawResponse);
147
+ return undefined;
148
+ }
149
+ export function getErrorFromResponse(response) {
150
+ const error = accessBodyProperty(response, "error");
151
+ if (!error) {
152
+ logger.warning(`The long-running operation failed but there is no error property in the response's body`);
153
+ return;
191
154
  }
192
- case "Body":
193
- default: {
194
- return void 0;
155
+ if (!error.code || !error.message) {
156
+ logger.warning(`The long-running operation failed but the error property in the response's body doesn't contain code or message`);
157
+ return;
195
158
  }
196
- }
159
+ return error;
197
160
  }
198
- function getOperationStatus({ rawResponse }, state) {
199
- const mode = state.config.metadata?.["mode"];
200
- switch (mode) {
201
- case "OperationLocation": {
202
- return getStatus(rawResponse);
161
+ function calculatePollingIntervalFromDate(retryAfterDate) {
162
+ const timeNow = Math.floor(new Date().getTime());
163
+ const retryAfterTime = retryAfterDate.getTime();
164
+ if (timeNow < retryAfterTime) {
165
+ return retryAfterTime - timeNow;
203
166
  }
204
- case "ResourceLocation": {
205
- return toOperationStatus(rawResponse.statusCode);
167
+ return undefined;
168
+ }
169
+ export function getStatusFromInitialResponse(inputs) {
170
+ const { response, state, operationLocation } = inputs;
171
+ function helper() {
172
+ const mode = state.config.metadata?.["mode"];
173
+ switch (mode) {
174
+ case undefined:
175
+ return toOperationStatus(response.rawResponse.statusCode);
176
+ case "Body":
177
+ return getOperationStatus(response, state);
178
+ default:
179
+ return "running";
180
+ }
206
181
  }
207
- case "Body": {
208
- return getProvisioningState(rawResponse);
182
+ const status = helper();
183
+ return status === "running" && operationLocation === undefined ? "succeeded" : status;
184
+ }
185
+ export function getOperationLocation({ rawResponse }, state) {
186
+ const mode = state.config.metadata?.["mode"];
187
+ switch (mode) {
188
+ case "OperationLocation": {
189
+ return getOperationLocationPollingUrl({
190
+ operationLocation: getOperationLocationHeader(rawResponse),
191
+ azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse),
192
+ });
193
+ }
194
+ case "ResourceLocation": {
195
+ return getLocationHeader(rawResponse);
196
+ }
197
+ case "Body":
198
+ default: {
199
+ return undefined;
200
+ }
201
+ }
202
+ }
203
+ export function getOperationStatus({ rawResponse }, state) {
204
+ const mode = state.config.metadata?.["mode"];
205
+ switch (mode) {
206
+ case "OperationLocation": {
207
+ return getStatus(rawResponse);
208
+ }
209
+ case "ResourceLocation": {
210
+ return toOperationStatus(rawResponse.statusCode);
211
+ }
212
+ case "Body": {
213
+ return getProvisioningState(rawResponse);
214
+ }
215
+ default:
216
+ throw new Error(`Internal error: Unexpected operation mode: ${mode}`);
209
217
  }
210
- default:
211
- throw new Error(`Internal error: Unexpected operation mode: ${mode}`);
212
- }
213
218
  }
214
219
  function accessBodyProperty({ flatResponse, rawResponse }, prop) {
215
- return flatResponse?.[prop] ?? rawResponse.body?.[prop];
220
+ return flatResponse?.[prop] ?? rawResponse.body?.[prop];
216
221
  }
217
- function getResourceLocation(res, state) {
218
- const loc = accessBodyProperty(res, "resourceLocation");
219
- if (loc && typeof loc === "string") {
220
- state.config.resourceLocation = loc;
221
- }
222
- return state.config.resourceLocation;
222
+ export function getResourceLocation(res, state) {
223
+ const loc = accessBodyProperty(res, "resourceLocation");
224
+ if (loc && typeof loc === "string") {
225
+ state.config.resourceLocation = loc;
226
+ }
227
+ return state.config.resourceLocation;
223
228
  }
224
- function isOperationError(e) {
225
- return e.name === "RestError";
229
+ export function isOperationError(e) {
230
+ return e.name === "RestError";
226
231
  }
227
- async function pollHttpOperation(inputs) {
228
- const { lro, options, processResult, updateState, setDelay, state, setErrorAsResult } = inputs;
229
- return pollOperation({
230
- state,
231
- setDelay,
232
- processResult: processResult ? ({ flatResponse }, inputState) => processResult(flatResponse, inputState) : ({ flatResponse }) => flatResponse,
233
- getError: getErrorFromResponse,
234
- updateState,
235
- getPollingInterval: parseRetryAfter,
236
- getOperationLocation,
237
- getOperationStatus,
238
- isOperationError,
239
- getResourceLocation,
240
- options,
241
- /**
242
- * The expansion here is intentional because `lro` could be an object that
243
- * references an inner this, so we need to preserve a reference to it.
244
- */
245
- poll: async (location, inputOptions) => lro.sendPollRequest(location, inputOptions),
246
- setErrorAsResult
247
- });
232
+ /** Polls the long-running operation. */
233
+ export async function pollHttpOperation(inputs) {
234
+ const { lro, options, processResult, updateState, setDelay, state, setErrorAsResult } = inputs;
235
+ return pollOperation({
236
+ state,
237
+ setDelay,
238
+ processResult: processResult
239
+ ? ({ flatResponse }, inputState) => processResult(flatResponse, inputState)
240
+ : ({ flatResponse }) => flatResponse,
241
+ getError: getErrorFromResponse,
242
+ updateState,
243
+ getPollingInterval: parseRetryAfter,
244
+ getOperationLocation,
245
+ getOperationStatus,
246
+ isOperationError,
247
+ getResourceLocation,
248
+ options,
249
+ /**
250
+ * The expansion here is intentional because `lro` could be an object that
251
+ * references an inner this, so we need to preserve a reference to it.
252
+ */
253
+ poll: (location, inputOptions) => lro.sendPollRequest(location, inputOptions),
254
+ setErrorAsResult,
255
+ });
248
256
  }
249
- export {
250
- getErrorFromResponse,
251
- getOperationLocation,
252
- getOperationStatus,
253
- getResourceLocation,
254
- getStatusFromInitialResponse,
255
- inferLroMode,
256
- isOperationError,
257
- parseRetryAfter,
258
- pollHttpOperation
259
- };
257
+ //# sourceMappingURL=operation.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/core-lro/src/http/operation.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n HttpOperationMode,\n RunningOperation,\n ResourceLocationConfig,\n OperationResponse,\n RawResponse,\n ResponseBody,\n} from \"./models.js\";\nimport type {\n LroError,\n OperationConfig,\n OperationState,\n OperationStatus,\n RestorableOperationState,\n} from \"../poller/models.js\";\nimport { pollOperation } from \"../poller/operation.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { logger } from \"../logger.js\";\n\nfunction getOperationLocationPollingUrl(inputs: {\n operationLocation?: string;\n azureAsyncOperation?: string;\n}): string | undefined {\n const { azureAsyncOperation, operationLocation } = inputs;\n return operationLocation ?? azureAsyncOperation;\n}\n\nfunction getLocationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"location\"];\n}\n\nfunction getOperationLocationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"operation-location\"];\n}\n\nfunction getAzureAsyncOperationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"azure-asyncoperation\"];\n}\n\nfunction findResourceLocation(inputs: {\n requestMethod?: string;\n location?: string;\n requestPath?: string;\n resourceLocationConfig?: ResourceLocationConfig;\n skipFinalGet?: boolean;\n}): string | undefined {\n const { location, requestMethod, requestPath, resourceLocationConfig, skipFinalGet } = inputs;\n\n // If skipFinalGet is true, return undefined to skip the final GET request\n if (skipFinalGet) {\n return undefined;\n }\n\n switch (requestMethod) {\n case \"PUT\": {\n return requestPath;\n }\n case \"DELETE\": {\n return undefined;\n }\n case \"PATCH\": {\n return getDefault() ?? requestPath;\n }\n default: {\n return getDefault();\n }\n }\n\n function getDefault(): string | undefined {\n switch (resourceLocationConfig) {\n case \"operation-location\":\n case \"azure-async-operation\": {\n return undefined;\n }\n case \"original-uri\": {\n return requestPath;\n }\n case \"location\":\n default: {\n return location;\n }\n }\n }\n}\n\nexport function inferLroMode(\n rawResponse: RawResponse,\n resourceLocationConfig?: ResourceLocationConfig,\n skipFinalGet?: boolean,\n): (OperationConfig & { mode: HttpOperationMode }) | undefined {\n const requestPath = rawResponse.request.url;\n const requestMethod = rawResponse.request.method;\n const operationLocation = getOperationLocationHeader(rawResponse);\n const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse);\n const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation });\n const location = getLocationHeader(rawResponse);\n const normalizedRequestMethod = requestMethod?.toLocaleUpperCase();\n if (pollingUrl !== undefined) {\n return {\n mode: \"OperationLocation\",\n operationLocation: pollingUrl,\n resourceLocation: findResourceLocation({\n requestMethod: normalizedRequestMethod,\n location,\n requestPath,\n resourceLocationConfig,\n skipFinalGet,\n }),\n initialRequestUrl: requestPath,\n requestMethod,\n };\n } else if (location !== undefined) {\n return {\n mode: \"ResourceLocation\",\n operationLocation: location,\n initialRequestUrl: requestPath,\n requestMethod,\n };\n } else if (normalizedRequestMethod === \"PUT\" && requestPath) {\n return {\n mode: \"Body\",\n operationLocation: requestPath,\n initialRequestUrl: requestPath,\n requestMethod,\n };\n } else {\n return undefined;\n }\n}\n\nfunction transformStatus(inputs: { status: unknown; statusCode: number }): OperationStatus {\n const { status, statusCode } = inputs;\n if (typeof status !== \"string\" && status !== undefined) {\n throw new Error(\n `Polling was unsuccessful. Expected status to have a string value or no value but it has instead: ${status}. This doesn't necessarily indicate the operation has failed. Check your Azure subscription or resource status for more information.`,\n );\n }\n logger.verbose(`LRO: Transforming status: ${status} with status code: ${statusCode}.`);\n const lowerCaseStatus = status?.toLocaleLowerCase();\n if (!lowerCaseStatus) {\n return toOperationStatus(statusCode);\n }\n if (lowerCaseStatus.includes(\"succeeded\")) {\n return \"succeeded\";\n }\n if (lowerCaseStatus.includes(\"fail\")) {\n return \"failed\";\n }\n if ([\"canceled\", \"cancelled\"].includes(lowerCaseStatus)) {\n return \"canceled\";\n }\n return \"running\";\n}\n\nfunction getStatus(rawResponse: RawResponse): OperationStatus {\n const { status } = (rawResponse.body as ResponseBody) ?? {};\n return transformStatus({ status, statusCode: rawResponse.statusCode });\n}\n\nfunction getProvisioningState(rawResponse: RawResponse): OperationStatus {\n const { properties, provisioningState } = (rawResponse.body as ResponseBody) ?? {};\n const status = properties?.provisioningState ?? provisioningState;\n return transformStatus({ status, statusCode: rawResponse.statusCode });\n}\n\nfunction toOperationStatus(statusCode: number): OperationStatus {\n if (statusCode === 202) {\n return \"running\";\n } else if (statusCode < 300) {\n return \"succeeded\";\n } else {\n return \"failed\";\n }\n}\n\nexport function parseRetryAfter<T>({ rawResponse }: OperationResponse<T>): number | undefined {\n const retryAfter: string | undefined = rawResponse.headers[\"retry-after\"];\n if (retryAfter !== undefined) {\n // Retry-After header value is either in HTTP date format, or in seconds\n const retryAfterInSeconds = parseInt(retryAfter);\n return isNaN(retryAfterInSeconds)\n ? calculatePollingIntervalFromDate(new Date(retryAfter))\n : retryAfterInSeconds * 1000;\n }\n return undefined;\n}\n\nexport function getErrorFromResponse<T>(response: OperationResponse<T>): LroError | undefined {\n const error = accessBodyProperty(response, \"error\");\n if (!error) {\n logger.warning(\n `The long-running operation failed but there is no error property in the response's body`,\n );\n return;\n }\n if (!error.code || !error.message) {\n logger.warning(\n `The long-running operation failed but the error property in the response's body doesn't contain code or message`,\n );\n return;\n }\n return error as LroError;\n}\n\nfunction calculatePollingIntervalFromDate(retryAfterDate: Date): number | undefined {\n const timeNow = Math.floor(new Date().getTime());\n const retryAfterTime = retryAfterDate.getTime();\n if (timeNow < retryAfterTime) {\n return retryAfterTime - timeNow;\n }\n return undefined;\n}\n\nexport function getStatusFromInitialResponse<\n TResult,\n TState extends OperationState<TResult>,\n>(inputs: {\n response: OperationResponse<unknown>;\n state: RestorableOperationState<TResult, TState>;\n operationLocation?: string;\n}): OperationStatus {\n const { response, state, operationLocation } = inputs;\n function helper(): OperationStatus {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case undefined:\n return toOperationStatus(response.rawResponse.statusCode);\n case \"Body\":\n return getOperationStatus(response, state);\n default:\n return \"running\";\n }\n }\n const status = helper();\n return status === \"running\" && operationLocation === undefined ? \"succeeded\" : status;\n}\n\nexport function getOperationLocation<TResult, TState extends OperationState<TResult>>(\n { rawResponse }: OperationResponse,\n state: RestorableOperationState<TResult, TState>,\n): string | undefined {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case \"OperationLocation\": {\n return getOperationLocationPollingUrl({\n operationLocation: getOperationLocationHeader(rawResponse),\n azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse),\n });\n }\n case \"ResourceLocation\": {\n return getLocationHeader(rawResponse);\n }\n case \"Body\":\n default: {\n return undefined;\n }\n }\n}\n\nexport function getOperationStatus<TResult, TState extends OperationState<TResult>>(\n { rawResponse }: OperationResponse,\n state: RestorableOperationState<TResult, TState>,\n): OperationStatus {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case \"OperationLocation\": {\n return getStatus(rawResponse);\n }\n case \"ResourceLocation\": {\n return toOperationStatus(rawResponse.statusCode);\n }\n case \"Body\": {\n return getProvisioningState(rawResponse);\n }\n default:\n throw new Error(`Internal error: Unexpected operation mode: ${mode}`);\n }\n}\n\nfunction accessBodyProperty<P extends string>(\n { flatResponse, rawResponse }: OperationResponse,\n prop: P,\n): ResponseBody[P] {\n return (flatResponse as ResponseBody)?.[prop] ?? (rawResponse.body as ResponseBody)?.[prop];\n}\n\nexport function getResourceLocation<TResult, TState extends OperationState<TResult>>(\n res: OperationResponse,\n state: RestorableOperationState<TResult, TState>,\n): string | undefined {\n const loc = accessBodyProperty(res, \"resourceLocation\");\n if (loc && typeof loc === \"string\") {\n state.config.resourceLocation = loc;\n }\n return state.config.resourceLocation;\n}\n\nexport function isOperationError(e: Error): boolean {\n return e.name === \"RestError\";\n}\n\n/** Polls the long-running operation. */\nexport async function pollHttpOperation<TState extends OperationState<TResult>, TResult>(inputs: {\n lro: RunningOperation;\n processResult?: (result: unknown, state: TState) => Promise<TResult>;\n updateState?: (state: TState, lastResponse: OperationResponse) => void;\n isDone?: (lastResponse: OperationResponse, state: TState) => boolean;\n setDelay: (intervalInMs: number) => void;\n options?: { abortSignal?: AbortSignalLike };\n state: RestorableOperationState<TResult, TState>;\n setErrorAsResult: boolean;\n}): Promise<void> {\n const { lro, options, processResult, updateState, setDelay, state, setErrorAsResult } = inputs;\n return pollOperation({\n state,\n setDelay,\n processResult: processResult\n ? ({ flatResponse }, inputState) => processResult(flatResponse, inputState)\n : ({ flatResponse }) => flatResponse as Promise<TResult>,\n getError: getErrorFromResponse,\n updateState,\n getPollingInterval: parseRetryAfter,\n getOperationLocation,\n getOperationStatus,\n isOperationError,\n getResourceLocation,\n options,\n /**\n * The expansion here is intentional because `lro` could be an object that\n * references an inner this, so we need to preserve a reference to it.\n */\n poll: async (location: string, inputOptions?: { abortSignal?: AbortSignalLike }) =>\n lro.sendPollRequest(location, inputOptions),\n setErrorAsResult,\n });\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
1
+ {"version":3,"file":"operation.js","sourceRoot":"","sources":["../../../src/http/operation.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n HttpOperationMode,\n RunningOperation,\n ResourceLocationConfig,\n OperationResponse,\n RawResponse,\n ResponseBody,\n} from \"./models.js\";\nimport type {\n LroError,\n OperationConfig,\n OperationState,\n OperationStatus,\n RestorableOperationState,\n} from \"../poller/models.js\";\nimport { pollOperation } from \"../poller/operation.js\";\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { logger } from \"../logger.js\";\n\nfunction getOperationLocationPollingUrl(inputs: {\n operationLocation?: string;\n azureAsyncOperation?: string;\n}): string | undefined {\n const { azureAsyncOperation, operationLocation } = inputs;\n return operationLocation ?? azureAsyncOperation;\n}\n\nfunction getLocationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"location\"];\n}\n\nfunction getOperationLocationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"operation-location\"];\n}\n\nfunction getAzureAsyncOperationHeader(rawResponse: RawResponse): string | undefined {\n return rawResponse.headers[\"azure-asyncoperation\"];\n}\n\nfunction findResourceLocation(inputs: {\n requestMethod?: string;\n location?: string;\n requestPath?: string;\n resourceLocationConfig?: ResourceLocationConfig;\n skipFinalGet?: boolean;\n}): string | undefined {\n const { location, requestMethod, requestPath, resourceLocationConfig, skipFinalGet } = inputs;\n\n // If skipFinalGet is true, return undefined to skip the final GET request\n if (skipFinalGet) {\n return undefined;\n }\n\n switch (requestMethod) {\n case \"PUT\": {\n return requestPath;\n }\n case \"DELETE\": {\n return undefined;\n }\n case \"PATCH\": {\n return getDefault() ?? requestPath;\n }\n default: {\n return getDefault();\n }\n }\n\n function getDefault(): string | undefined {\n switch (resourceLocationConfig) {\n case \"operation-location\":\n case \"azure-async-operation\": {\n return undefined;\n }\n case \"original-uri\": {\n return requestPath;\n }\n case \"location\":\n default: {\n return location;\n }\n }\n }\n}\n\nexport function inferLroMode(\n rawResponse: RawResponse,\n resourceLocationConfig?: ResourceLocationConfig,\n skipFinalGet?: boolean,\n): (OperationConfig & { mode: HttpOperationMode }) | undefined {\n const requestPath = rawResponse.request.url;\n const requestMethod = rawResponse.request.method;\n const operationLocation = getOperationLocationHeader(rawResponse);\n const azureAsyncOperation = getAzureAsyncOperationHeader(rawResponse);\n const pollingUrl = getOperationLocationPollingUrl({ operationLocation, azureAsyncOperation });\n const location = getLocationHeader(rawResponse);\n const normalizedRequestMethod = requestMethod?.toLocaleUpperCase();\n if (pollingUrl !== undefined) {\n return {\n mode: \"OperationLocation\",\n operationLocation: pollingUrl,\n resourceLocation: findResourceLocation({\n requestMethod: normalizedRequestMethod,\n location,\n requestPath,\n resourceLocationConfig,\n skipFinalGet,\n }),\n initialRequestUrl: requestPath,\n requestMethod,\n };\n } else if (location !== undefined) {\n return {\n mode: \"ResourceLocation\",\n operationLocation: location,\n initialRequestUrl: requestPath,\n requestMethod,\n };\n } else if (normalizedRequestMethod === \"PUT\" && requestPath) {\n return {\n mode: \"Body\",\n operationLocation: requestPath,\n initialRequestUrl: requestPath,\n requestMethod,\n };\n } else {\n return undefined;\n }\n}\n\nfunction transformStatus(inputs: { status: unknown; statusCode: number }): OperationStatus {\n const { status, statusCode } = inputs;\n if (typeof status !== \"string\" && status !== undefined) {\n throw new Error(\n `Polling was unsuccessful. Expected status to have a string value or no value but it has instead: ${status}. This doesn't necessarily indicate the operation has failed. Check your Azure subscription or resource status for more information.`,\n );\n }\n logger.verbose(`LRO: Transforming status: ${status} with status code: ${statusCode}.`);\n const lowerCaseStatus = status?.toLocaleLowerCase();\n if (!lowerCaseStatus) {\n return toOperationStatus(statusCode);\n }\n if (lowerCaseStatus.includes(\"succeeded\")) {\n return \"succeeded\";\n }\n if (lowerCaseStatus.includes(\"fail\")) {\n return \"failed\";\n }\n if ([\"canceled\", \"cancelled\"].includes(lowerCaseStatus)) {\n return \"canceled\";\n }\n return \"running\";\n}\n\nfunction getStatus(rawResponse: RawResponse): OperationStatus {\n const { status } = (rawResponse.body as ResponseBody) ?? {};\n return transformStatus({ status, statusCode: rawResponse.statusCode });\n}\n\nfunction getProvisioningState(rawResponse: RawResponse): OperationStatus {\n const { properties, provisioningState } = (rawResponse.body as ResponseBody) ?? {};\n const status = properties?.provisioningState ?? provisioningState;\n return transformStatus({ status, statusCode: rawResponse.statusCode });\n}\n\nfunction toOperationStatus(statusCode: number): OperationStatus {\n if (statusCode === 202) {\n return \"running\";\n } else if (statusCode < 300) {\n return \"succeeded\";\n } else {\n return \"failed\";\n }\n}\n\nexport function parseRetryAfter<T>({ rawResponse }: OperationResponse<T>): number | undefined {\n const retryAfter: string | undefined = rawResponse.headers[\"retry-after\"];\n if (retryAfter !== undefined) {\n // Retry-After header value is either in HTTP date format, or in seconds\n const retryAfterInSeconds = parseInt(retryAfter);\n return isNaN(retryAfterInSeconds)\n ? calculatePollingIntervalFromDate(new Date(retryAfter))\n : retryAfterInSeconds * 1000;\n }\n return undefined;\n}\n\nexport function getErrorFromResponse<T>(response: OperationResponse<T>): LroError | undefined {\n const error = accessBodyProperty(response, \"error\");\n if (!error) {\n logger.warning(\n `The long-running operation failed but there is no error property in the response's body`,\n );\n return;\n }\n if (!error.code || !error.message) {\n logger.warning(\n `The long-running operation failed but the error property in the response's body doesn't contain code or message`,\n );\n return;\n }\n return error as LroError;\n}\n\nfunction calculatePollingIntervalFromDate(retryAfterDate: Date): number | undefined {\n const timeNow = Math.floor(new Date().getTime());\n const retryAfterTime = retryAfterDate.getTime();\n if (timeNow < retryAfterTime) {\n return retryAfterTime - timeNow;\n }\n return undefined;\n}\n\nexport function getStatusFromInitialResponse<\n TResult,\n TState extends OperationState<TResult>,\n>(inputs: {\n response: OperationResponse<unknown>;\n state: RestorableOperationState<TResult, TState>;\n operationLocation?: string;\n}): OperationStatus {\n const { response, state, operationLocation } = inputs;\n function helper(): OperationStatus {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case undefined:\n return toOperationStatus(response.rawResponse.statusCode);\n case \"Body\":\n return getOperationStatus(response, state);\n default:\n return \"running\";\n }\n }\n const status = helper();\n return status === \"running\" && operationLocation === undefined ? \"succeeded\" : status;\n}\n\nexport function getOperationLocation<TResult, TState extends OperationState<TResult>>(\n { rawResponse }: OperationResponse,\n state: RestorableOperationState<TResult, TState>,\n): string | undefined {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case \"OperationLocation\": {\n return getOperationLocationPollingUrl({\n operationLocation: getOperationLocationHeader(rawResponse),\n azureAsyncOperation: getAzureAsyncOperationHeader(rawResponse),\n });\n }\n case \"ResourceLocation\": {\n return getLocationHeader(rawResponse);\n }\n case \"Body\":\n default: {\n return undefined;\n }\n }\n}\n\nexport function getOperationStatus<TResult, TState extends OperationState<TResult>>(\n { rawResponse }: OperationResponse,\n state: RestorableOperationState<TResult, TState>,\n): OperationStatus {\n const mode = state.config.metadata?.[\"mode\"];\n switch (mode) {\n case \"OperationLocation\": {\n return getStatus(rawResponse);\n }\n case \"ResourceLocation\": {\n return toOperationStatus(rawResponse.statusCode);\n }\n case \"Body\": {\n return getProvisioningState(rawResponse);\n }\n default:\n throw new Error(`Internal error: Unexpected operation mode: ${mode}`);\n }\n}\n\nfunction accessBodyProperty<P extends string>(\n { flatResponse, rawResponse }: OperationResponse,\n prop: P,\n): ResponseBody[P] {\n return (flatResponse as ResponseBody)?.[prop] ?? (rawResponse.body as ResponseBody)?.[prop];\n}\n\nexport function getResourceLocation<TResult, TState extends OperationState<TResult>>(\n res: OperationResponse,\n state: RestorableOperationState<TResult, TState>,\n): string | undefined {\n const loc = accessBodyProperty(res, \"resourceLocation\");\n if (loc && typeof loc === \"string\") {\n state.config.resourceLocation = loc;\n }\n return state.config.resourceLocation;\n}\n\nexport function isOperationError(e: Error): boolean {\n return e.name === \"RestError\";\n}\n\n/** Polls the long-running operation. */\nexport async function pollHttpOperation<TState extends OperationState<TResult>, TResult>(inputs: {\n lro: RunningOperation;\n processResult?: (result: unknown, state: TState) => Promise<TResult>;\n updateState?: (state: TState, lastResponse: OperationResponse) => void;\n isDone?: (lastResponse: OperationResponse, state: TState) => boolean;\n setDelay: (intervalInMs: number) => void;\n options?: { abortSignal?: AbortSignalLike };\n state: RestorableOperationState<TResult, TState>;\n setErrorAsResult: boolean;\n}): Promise<void> {\n const { lro, options, processResult, updateState, setDelay, state, setErrorAsResult } = inputs;\n return pollOperation({\n state,\n setDelay,\n processResult: processResult\n ? ({ flatResponse }, inputState) => processResult(flatResponse, inputState)\n : ({ flatResponse }) => flatResponse as Promise<TResult>,\n getError: getErrorFromResponse,\n updateState,\n getPollingInterval: parseRetryAfter,\n getOperationLocation,\n getOperationStatus,\n isOperationError,\n getResourceLocation,\n options,\n /**\n * The expansion here is intentional because `lro` could be an object that\n * references an inner this, so we need to preserve a reference to it.\n */\n poll: (location: string, inputOptions?: { abortSignal?: AbortSignalLike }) =>\n lro.sendPollRequest(location, inputOptions),\n setErrorAsResult,\n });\n}\n"]}