@smithy/util-waiter 2.0.16 → 2.1.1
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-cjs/createWaiter.js +1 -27
- package/dist-cjs/index.js +155 -5
- package/dist-cjs/poller.js +1 -38
- package/dist-cjs/utils/index.js +1 -5
- package/dist-cjs/utils/sleep.js +1 -7
- package/dist-cjs/utils/validate.js +1 -21
- package/dist-cjs/waiter.js +1 -38
- package/package.json +4 -4
package/dist-cjs/createWaiter.js
CHANGED
|
@@ -1,27 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createWaiter = void 0;
|
|
4
|
-
const poller_1 = require("./poller");
|
|
5
|
-
const utils_1 = require("./utils");
|
|
6
|
-
const waiter_1 = require("./waiter");
|
|
7
|
-
const abortTimeout = async (abortSignal) => {
|
|
8
|
-
return new Promise((resolve) => {
|
|
9
|
-
abortSignal.onabort = () => resolve({ state: waiter_1.WaiterState.ABORTED });
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
const createWaiter = async (options, input, acceptorChecks) => {
|
|
13
|
-
const params = {
|
|
14
|
-
...waiter_1.waiterServiceDefaults,
|
|
15
|
-
...options,
|
|
16
|
-
};
|
|
17
|
-
(0, utils_1.validateWaiterOptions)(params);
|
|
18
|
-
const exitConditions = [(0, poller_1.runPolling)(params, input, acceptorChecks)];
|
|
19
|
-
if (options.abortController) {
|
|
20
|
-
exitConditions.push(abortTimeout(options.abortController.signal));
|
|
21
|
-
}
|
|
22
|
-
if (options.abortSignal) {
|
|
23
|
-
exitConditions.push(abortTimeout(options.abortSignal));
|
|
24
|
-
}
|
|
25
|
-
return Promise.race(exitConditions);
|
|
26
|
-
};
|
|
27
|
-
exports.createWaiter = createWaiter;
|
|
1
|
+
module.exports = require("./index.js");
|
package/dist-cjs/index.js
CHANGED
|
@@ -1,5 +1,155 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/index.ts
|
|
21
|
+
var src_exports = {};
|
|
22
|
+
__export(src_exports, {
|
|
23
|
+
WaiterState: () => WaiterState,
|
|
24
|
+
checkExceptions: () => checkExceptions,
|
|
25
|
+
createWaiter: () => createWaiter,
|
|
26
|
+
waiterServiceDefaults: () => waiterServiceDefaults
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(src_exports);
|
|
29
|
+
|
|
30
|
+
// src/utils/sleep.ts
|
|
31
|
+
var sleep = /* @__PURE__ */ __name((seconds) => {
|
|
32
|
+
return new Promise((resolve) => setTimeout(resolve, seconds * 1e3));
|
|
33
|
+
}, "sleep");
|
|
34
|
+
|
|
35
|
+
// src/waiter.ts
|
|
36
|
+
var waiterServiceDefaults = {
|
|
37
|
+
minDelay: 2,
|
|
38
|
+
maxDelay: 120
|
|
39
|
+
};
|
|
40
|
+
var WaiterState = /* @__PURE__ */ ((WaiterState2) => {
|
|
41
|
+
WaiterState2["ABORTED"] = "ABORTED";
|
|
42
|
+
WaiterState2["FAILURE"] = "FAILURE";
|
|
43
|
+
WaiterState2["SUCCESS"] = "SUCCESS";
|
|
44
|
+
WaiterState2["RETRY"] = "RETRY";
|
|
45
|
+
WaiterState2["TIMEOUT"] = "TIMEOUT";
|
|
46
|
+
return WaiterState2;
|
|
47
|
+
})(WaiterState || {});
|
|
48
|
+
var checkExceptions = /* @__PURE__ */ __name((result) => {
|
|
49
|
+
if (result.state === "ABORTED" /* ABORTED */) {
|
|
50
|
+
const abortError = new Error(
|
|
51
|
+
`${JSON.stringify({
|
|
52
|
+
...result,
|
|
53
|
+
reason: "Request was aborted"
|
|
54
|
+
})}`
|
|
55
|
+
);
|
|
56
|
+
abortError.name = "AbortError";
|
|
57
|
+
throw abortError;
|
|
58
|
+
} else if (result.state === "TIMEOUT" /* TIMEOUT */) {
|
|
59
|
+
const timeoutError = new Error(
|
|
60
|
+
`${JSON.stringify({
|
|
61
|
+
...result,
|
|
62
|
+
reason: "Waiter has timed out"
|
|
63
|
+
})}`
|
|
64
|
+
);
|
|
65
|
+
timeoutError.name = "TimeoutError";
|
|
66
|
+
throw timeoutError;
|
|
67
|
+
} else if (result.state !== "SUCCESS" /* SUCCESS */) {
|
|
68
|
+
throw new Error(`${JSON.stringify({ result })}`);
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}, "checkExceptions");
|
|
72
|
+
|
|
73
|
+
// src/poller.ts
|
|
74
|
+
var exponentialBackoffWithJitter = /* @__PURE__ */ __name((minDelay, maxDelay, attemptCeiling, attempt) => {
|
|
75
|
+
if (attempt > attemptCeiling)
|
|
76
|
+
return maxDelay;
|
|
77
|
+
const delay = minDelay * 2 ** (attempt - 1);
|
|
78
|
+
return randomInRange(minDelay, delay);
|
|
79
|
+
}, "exponentialBackoffWithJitter");
|
|
80
|
+
var randomInRange = /* @__PURE__ */ __name((min, max) => min + Math.random() * (max - min), "randomInRange");
|
|
81
|
+
var runPolling = /* @__PURE__ */ __name(async ({ minDelay, maxDelay, maxWaitTime, abortController, client, abortSignal }, input, acceptorChecks) => {
|
|
82
|
+
var _a;
|
|
83
|
+
const { state, reason } = await acceptorChecks(client, input);
|
|
84
|
+
if (state !== "RETRY" /* RETRY */) {
|
|
85
|
+
return { state, reason };
|
|
86
|
+
}
|
|
87
|
+
let currentAttempt = 1;
|
|
88
|
+
const waitUntil = Date.now() + maxWaitTime * 1e3;
|
|
89
|
+
const attemptCeiling = Math.log(maxDelay / minDelay) / Math.log(2) + 1;
|
|
90
|
+
while (true) {
|
|
91
|
+
if (((_a = abortController == null ? void 0 : abortController.signal) == null ? void 0 : _a.aborted) || (abortSignal == null ? void 0 : abortSignal.aborted)) {
|
|
92
|
+
return { state: "ABORTED" /* ABORTED */ };
|
|
93
|
+
}
|
|
94
|
+
const delay = exponentialBackoffWithJitter(minDelay, maxDelay, attemptCeiling, currentAttempt);
|
|
95
|
+
if (Date.now() + delay * 1e3 > waitUntil) {
|
|
96
|
+
return { state: "TIMEOUT" /* TIMEOUT */ };
|
|
97
|
+
}
|
|
98
|
+
await sleep(delay);
|
|
99
|
+
const { state: state2, reason: reason2 } = await acceptorChecks(client, input);
|
|
100
|
+
if (state2 !== "RETRY" /* RETRY */) {
|
|
101
|
+
return { state: state2, reason: reason2 };
|
|
102
|
+
}
|
|
103
|
+
currentAttempt += 1;
|
|
104
|
+
}
|
|
105
|
+
}, "runPolling");
|
|
106
|
+
|
|
107
|
+
// src/utils/validate.ts
|
|
108
|
+
var validateWaiterOptions = /* @__PURE__ */ __name((options) => {
|
|
109
|
+
if (options.maxWaitTime < 1) {
|
|
110
|
+
throw new Error(`WaiterConfiguration.maxWaitTime must be greater than 0`);
|
|
111
|
+
} else if (options.minDelay < 1) {
|
|
112
|
+
throw new Error(`WaiterConfiguration.minDelay must be greater than 0`);
|
|
113
|
+
} else if (options.maxDelay < 1) {
|
|
114
|
+
throw new Error(`WaiterConfiguration.maxDelay must be greater than 0`);
|
|
115
|
+
} else if (options.maxWaitTime <= options.minDelay) {
|
|
116
|
+
throw new Error(
|
|
117
|
+
`WaiterConfiguration.maxWaitTime [${options.maxWaitTime}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`
|
|
118
|
+
);
|
|
119
|
+
} else if (options.maxDelay < options.minDelay) {
|
|
120
|
+
throw new Error(
|
|
121
|
+
`WaiterConfiguration.maxDelay [${options.maxDelay}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
}, "validateWaiterOptions");
|
|
125
|
+
|
|
126
|
+
// src/createWaiter.ts
|
|
127
|
+
var abortTimeout = /* @__PURE__ */ __name(async (abortSignal) => {
|
|
128
|
+
return new Promise((resolve) => {
|
|
129
|
+
abortSignal.onabort = () => resolve({ state: "ABORTED" /* ABORTED */ });
|
|
130
|
+
});
|
|
131
|
+
}, "abortTimeout");
|
|
132
|
+
var createWaiter = /* @__PURE__ */ __name(async (options, input, acceptorChecks) => {
|
|
133
|
+
const params = {
|
|
134
|
+
...waiterServiceDefaults,
|
|
135
|
+
...options
|
|
136
|
+
};
|
|
137
|
+
validateWaiterOptions(params);
|
|
138
|
+
const exitConditions = [runPolling(params, input, acceptorChecks)];
|
|
139
|
+
if (options.abortController) {
|
|
140
|
+
exitConditions.push(abortTimeout(options.abortController.signal));
|
|
141
|
+
}
|
|
142
|
+
if (options.abortSignal) {
|
|
143
|
+
exitConditions.push(abortTimeout(options.abortSignal));
|
|
144
|
+
}
|
|
145
|
+
return Promise.race(exitConditions);
|
|
146
|
+
}, "createWaiter");
|
|
147
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
148
|
+
|
|
149
|
+
0 && (module.exports = {
|
|
150
|
+
WaiterState,
|
|
151
|
+
checkExceptions,
|
|
152
|
+
createWaiter,
|
|
153
|
+
waiterServiceDefaults
|
|
154
|
+
});
|
|
155
|
+
|
package/dist-cjs/poller.js
CHANGED
|
@@ -1,38 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.runPolling = void 0;
|
|
4
|
-
const sleep_1 = require("./utils/sleep");
|
|
5
|
-
const waiter_1 = require("./waiter");
|
|
6
|
-
const exponentialBackoffWithJitter = (minDelay, maxDelay, attemptCeiling, attempt) => {
|
|
7
|
-
if (attempt > attemptCeiling)
|
|
8
|
-
return maxDelay;
|
|
9
|
-
const delay = minDelay * 2 ** (attempt - 1);
|
|
10
|
-
return randomInRange(minDelay, delay);
|
|
11
|
-
};
|
|
12
|
-
const randomInRange = (min, max) => min + Math.random() * (max - min);
|
|
13
|
-
const runPolling = async ({ minDelay, maxDelay, maxWaitTime, abortController, client, abortSignal }, input, acceptorChecks) => {
|
|
14
|
-
var _a;
|
|
15
|
-
const { state, reason } = await acceptorChecks(client, input);
|
|
16
|
-
if (state !== waiter_1.WaiterState.RETRY) {
|
|
17
|
-
return { state, reason };
|
|
18
|
-
}
|
|
19
|
-
let currentAttempt = 1;
|
|
20
|
-
const waitUntil = Date.now() + maxWaitTime * 1000;
|
|
21
|
-
const attemptCeiling = Math.log(maxDelay / minDelay) / Math.log(2) + 1;
|
|
22
|
-
while (true) {
|
|
23
|
-
if (((_a = abortController === null || abortController === void 0 ? void 0 : abortController.signal) === null || _a === void 0 ? void 0 : _a.aborted) || (abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.aborted)) {
|
|
24
|
-
return { state: waiter_1.WaiterState.ABORTED };
|
|
25
|
-
}
|
|
26
|
-
const delay = exponentialBackoffWithJitter(minDelay, maxDelay, attemptCeiling, currentAttempt);
|
|
27
|
-
if (Date.now() + delay * 1000 > waitUntil) {
|
|
28
|
-
return { state: waiter_1.WaiterState.TIMEOUT };
|
|
29
|
-
}
|
|
30
|
-
await (0, sleep_1.sleep)(delay);
|
|
31
|
-
const { state, reason } = await acceptorChecks(client, input);
|
|
32
|
-
if (state !== waiter_1.WaiterState.RETRY) {
|
|
33
|
-
return { state, reason };
|
|
34
|
-
}
|
|
35
|
-
currentAttempt += 1;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
exports.runPolling = runPolling;
|
|
1
|
+
module.exports = require("./index.js");
|
package/dist-cjs/utils/index.js
CHANGED
package/dist-cjs/utils/sleep.js
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sleep = void 0;
|
|
4
|
-
const sleep = (seconds) => {
|
|
5
|
-
return new Promise((resolve) => setTimeout(resolve, seconds * 1000));
|
|
6
|
-
};
|
|
7
|
-
exports.sleep = sleep;
|
|
1
|
+
module.exports = require("../index.js");
|
|
@@ -1,21 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateWaiterOptions = void 0;
|
|
4
|
-
const validateWaiterOptions = (options) => {
|
|
5
|
-
if (options.maxWaitTime < 1) {
|
|
6
|
-
throw new Error(`WaiterConfiguration.maxWaitTime must be greater than 0`);
|
|
7
|
-
}
|
|
8
|
-
else if (options.minDelay < 1) {
|
|
9
|
-
throw new Error(`WaiterConfiguration.minDelay must be greater than 0`);
|
|
10
|
-
}
|
|
11
|
-
else if (options.maxDelay < 1) {
|
|
12
|
-
throw new Error(`WaiterConfiguration.maxDelay must be greater than 0`);
|
|
13
|
-
}
|
|
14
|
-
else if (options.maxWaitTime <= options.minDelay) {
|
|
15
|
-
throw new Error(`WaiterConfiguration.maxWaitTime [${options.maxWaitTime}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`);
|
|
16
|
-
}
|
|
17
|
-
else if (options.maxDelay < options.minDelay) {
|
|
18
|
-
throw new Error(`WaiterConfiguration.maxDelay [${options.maxDelay}] must be greater than WaiterConfiguration.minDelay [${options.minDelay}] for this waiter`);
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
exports.validateWaiterOptions = validateWaiterOptions;
|
|
1
|
+
module.exports = require("../index.js");
|
package/dist-cjs/waiter.js
CHANGED
|
@@ -1,38 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkExceptions = exports.WaiterState = exports.waiterServiceDefaults = void 0;
|
|
4
|
-
exports.waiterServiceDefaults = {
|
|
5
|
-
minDelay: 2,
|
|
6
|
-
maxDelay: 120,
|
|
7
|
-
};
|
|
8
|
-
var WaiterState;
|
|
9
|
-
(function (WaiterState) {
|
|
10
|
-
WaiterState["ABORTED"] = "ABORTED";
|
|
11
|
-
WaiterState["FAILURE"] = "FAILURE";
|
|
12
|
-
WaiterState["SUCCESS"] = "SUCCESS";
|
|
13
|
-
WaiterState["RETRY"] = "RETRY";
|
|
14
|
-
WaiterState["TIMEOUT"] = "TIMEOUT";
|
|
15
|
-
})(WaiterState = exports.WaiterState || (exports.WaiterState = {}));
|
|
16
|
-
const checkExceptions = (result) => {
|
|
17
|
-
if (result.state === WaiterState.ABORTED) {
|
|
18
|
-
const abortError = new Error(`${JSON.stringify({
|
|
19
|
-
...result,
|
|
20
|
-
reason: "Request was aborted",
|
|
21
|
-
})}`);
|
|
22
|
-
abortError.name = "AbortError";
|
|
23
|
-
throw abortError;
|
|
24
|
-
}
|
|
25
|
-
else if (result.state === WaiterState.TIMEOUT) {
|
|
26
|
-
const timeoutError = new Error(`${JSON.stringify({
|
|
27
|
-
...result,
|
|
28
|
-
reason: "Waiter has timed out",
|
|
29
|
-
})}`);
|
|
30
|
-
timeoutError.name = "TimeoutError";
|
|
31
|
-
throw timeoutError;
|
|
32
|
-
}
|
|
33
|
-
else if (result.state !== WaiterState.SUCCESS) {
|
|
34
|
-
throw new Error(`${JSON.stringify({ result })}`);
|
|
35
|
-
}
|
|
36
|
-
return result;
|
|
37
|
-
};
|
|
38
|
-
exports.checkExceptions = checkExceptions;
|
|
1
|
+
module.exports = require("./index.js");
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@smithy/util-waiter",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Shared utilities for client waiters for the AWS SDK",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@smithy/abort-controller": "^2.
|
|
7
|
-
"@smithy/types": "^2.
|
|
6
|
+
"@smithy/abort-controller": "^2.1.1",
|
|
7
|
+
"@smithy/types": "^2.9.1",
|
|
8
8
|
"tslib": "^2.5.0"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types && yarn build:types:downlevel'",
|
|
12
|
-
"build:cjs": "
|
|
12
|
+
"build:cjs": "node ../../scripts/inline util-waiter",
|
|
13
13
|
"build:es": "yarn g:tsc -p tsconfig.es.json",
|
|
14
14
|
"build:types": "yarn g:tsc -p tsconfig.types.json",
|
|
15
15
|
"build:types:downlevel": "downlevel-dts dist-types dist-types/ts3.4",
|