@wildix/xbees-conversations-client 1.2.8 → 1.2.9

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.
@@ -32,6 +32,40 @@ class ConversationsClient extends smithy_client_1.Client {
32
32
  this.middlewareStack.add(smithy_utils_1.authorizationMiddleware.bind(this, configuration.token), { step: "build" });
33
33
  this.middlewareStack.use((0, middleware_user_agent_1.getUserAgentPlugin)(this.config));
34
34
  this.middlewareStack.use((0, middleware_retry_1.getRetryPlugin)(this.config));
35
+ this.middlewareStack.add((next) => async (args) => {
36
+ try {
37
+ return await next(args);
38
+ }
39
+ catch (error) {
40
+ const statusCode = error?.$metadata?.httpStatusCode ?? error?.$response?.statusCode;
41
+ const headers = error?.$response?.headers;
42
+ if (statusCode === 429 && headers) {
43
+ const headerEntries = Object.entries(headers);
44
+ const getHeaderWithKey = (name) => {
45
+ const normalizedName = name.toLowerCase();
46
+ for (const [key, value] of headerEntries) {
47
+ if (key.toLowerCase() === normalizedName && typeof value === "string") {
48
+ return [key, value];
49
+ }
50
+ }
51
+ return undefined;
52
+ };
53
+ const retryAfterHeader = getHeaderWithKey("retry-after");
54
+ if (retryAfterHeader) {
55
+ const [retryAfterKey, retryAfterValue] = retryAfterHeader;
56
+ const retryAfterNumeric = Number(retryAfterValue);
57
+ if (!Number.isNaN(retryAfterNumeric) && retryAfterNumeric >= 1000) {
58
+ headers[retryAfterKey] = new Date(Date.now() + retryAfterNumeric).toUTCString();
59
+ }
60
+ }
61
+ }
62
+ throw error;
63
+ }
64
+ }, {
65
+ name: "retryAfterHeaderNormalizationMiddleware",
66
+ step: "finalizeRequest",
67
+ priority: "low",
68
+ });
35
69
  if (configuration?.retryLogging) {
36
70
  this.middlewareStack.add((next) => async (args) => {
37
71
  const request = args.request;
@@ -69,9 +103,9 @@ class ConversationsClient extends smithy_client_1.Client {
69
103
  const rateLimitRemainingRaw = getHeader("x-ratelimit-remaining", "ratelimit-remaining", "rateLimitRemaining");
70
104
  let retryAfterDelayMs;
71
105
  if (retryAfterRaw !== undefined) {
72
- const retryAfterSeconds = Number(retryAfterRaw);
73
- if (!Number.isNaN(retryAfterSeconds)) {
74
- retryAfterDelayMs = retryAfterSeconds * 1000;
106
+ const retryAfterNumeric = Number(retryAfterRaw);
107
+ if (!Number.isNaN(retryAfterNumeric)) {
108
+ retryAfterDelayMs = retryAfterNumeric >= 1000 ? retryAfterNumeric : retryAfterNumeric * 1000;
75
109
  }
76
110
  else {
77
111
  retryAfterDelayMs = new Date(retryAfterRaw).getTime() - Date.now();
@@ -81,7 +115,12 @@ class ConversationsClient extends smithy_client_1.Client {
81
115
  if (rateLimitResetRaw !== undefined) {
82
116
  const resetValue = Number(rateLimitResetRaw);
83
117
  if (!Number.isNaN(resetValue)) {
84
- rateLimitResetDelayMs = resetValue > 1000000000 ? (resetValue * 1000) - Date.now() : resetValue * 1000;
118
+ if (resetValue > 1000000000) {
119
+ rateLimitResetDelayMs = (resetValue * 1000) - Date.now();
120
+ }
121
+ else {
122
+ rateLimitResetDelayMs = resetValue >= 1000 ? resetValue : resetValue * 1000;
123
+ }
85
124
  }
86
125
  }
87
126
  if (willRetry) {
@@ -29,6 +29,40 @@ export class ConversationsClient extends __Client {
29
29
  this.middlewareStack.add(authorizationMiddleware.bind(this, configuration.token), { step: "build" });
30
30
  this.middlewareStack.use(getUserAgentPlugin(this.config));
31
31
  this.middlewareStack.use(getRetryPlugin(this.config));
32
+ this.middlewareStack.add((next) => async (args) => {
33
+ try {
34
+ return await next(args);
35
+ }
36
+ catch (error) {
37
+ const statusCode = error?.$metadata?.httpStatusCode ?? error?.$response?.statusCode;
38
+ const headers = error?.$response?.headers;
39
+ if (statusCode === 429 && headers) {
40
+ const headerEntries = Object.entries(headers);
41
+ const getHeaderWithKey = (name) => {
42
+ const normalizedName = name.toLowerCase();
43
+ for (const [key, value] of headerEntries) {
44
+ if (key.toLowerCase() === normalizedName && typeof value === "string") {
45
+ return [key, value];
46
+ }
47
+ }
48
+ return undefined;
49
+ };
50
+ const retryAfterHeader = getHeaderWithKey("retry-after");
51
+ if (retryAfterHeader) {
52
+ const [retryAfterKey, retryAfterValue] = retryAfterHeader;
53
+ const retryAfterNumeric = Number(retryAfterValue);
54
+ if (!Number.isNaN(retryAfterNumeric) && retryAfterNumeric >= 1000) {
55
+ headers[retryAfterKey] = new Date(Date.now() + retryAfterNumeric).toUTCString();
56
+ }
57
+ }
58
+ }
59
+ throw error;
60
+ }
61
+ }, {
62
+ name: "retryAfterHeaderNormalizationMiddleware",
63
+ step: "finalizeRequest",
64
+ priority: "low",
65
+ });
32
66
  if (configuration?.retryLogging) {
33
67
  this.middlewareStack.add((next) => async (args) => {
34
68
  const request = args.request;
@@ -66,9 +100,9 @@ export class ConversationsClient extends __Client {
66
100
  const rateLimitRemainingRaw = getHeader("x-ratelimit-remaining", "ratelimit-remaining", "rateLimitRemaining");
67
101
  let retryAfterDelayMs;
68
102
  if (retryAfterRaw !== undefined) {
69
- const retryAfterSeconds = Number(retryAfterRaw);
70
- if (!Number.isNaN(retryAfterSeconds)) {
71
- retryAfterDelayMs = retryAfterSeconds * 1000;
103
+ const retryAfterNumeric = Number(retryAfterRaw);
104
+ if (!Number.isNaN(retryAfterNumeric)) {
105
+ retryAfterDelayMs = retryAfterNumeric >= 1000 ? retryAfterNumeric : retryAfterNumeric * 1000;
72
106
  }
73
107
  else {
74
108
  retryAfterDelayMs = new Date(retryAfterRaw).getTime() - Date.now();
@@ -78,7 +112,12 @@ export class ConversationsClient extends __Client {
78
112
  if (rateLimitResetRaw !== undefined) {
79
113
  const resetValue = Number(rateLimitResetRaw);
80
114
  if (!Number.isNaN(resetValue)) {
81
- rateLimitResetDelayMs = resetValue > 1000000000 ? (resetValue * 1000) - Date.now() : resetValue * 1000;
115
+ if (resetValue > 1000000000) {
116
+ rateLimitResetDelayMs = (resetValue * 1000) - Date.now();
117
+ }
118
+ else {
119
+ rateLimitResetDelayMs = resetValue >= 1000 ? resetValue : resetValue * 1000;
120
+ }
82
121
  }
83
122
  }
84
123
  if (willRetry) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@wildix/xbees-conversations-client",
3
3
  "description": "@wildix/xbees-conversations-client client",
4
- "version": "1.2.8",
4
+ "version": "1.2.9",
5
5
  "scripts": {
6
6
  "build": "concurrently 'yarn:build:cjs' 'yarn:build:es' 'yarn:build:types'",
7
7
  "build:cjs": "tsc -p tsconfig.cjs.json",