svix 1.74.0 → 1.75.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/dist/index.d.ts CHANGED
@@ -16,6 +16,7 @@ export { PostOptions, ApiException } from "./util";
16
16
  export { HTTPValidationError, HttpErrorOut, ValidationError } from "./HttpErrors";
17
17
  export * from "./webhook";
18
18
  export * from "./models/index";
19
+ import { XOR } from "./util";
19
20
  export { ApplicationListOptions } from "./api/application";
20
21
  export { BackgroundTaskListOptions } from "./api/backgroundTask";
21
22
  export { EndpointListOptions, EndpointGetStatsOptions } from "./api/endpoint";
@@ -24,11 +25,15 @@ export { IntegrationListOptions } from "./api/integration";
24
25
  export { MessageListOptions, messageInRaw } from "./api/message";
25
26
  export { MessageAttemptListByEndpointOptions } from "./api/messageAttempt";
26
27
  export { OperationalWebhookEndpointListOptions } from "./api/operationalWebhookEndpoint";
27
- export interface SvixOptions {
28
+ export type SvixOptions = {
28
29
  debug?: boolean;
29
30
  serverUrl?: string;
30
31
  requestTimeout?: number;
31
- }
32
+ } & XOR<{
33
+ retryScheduleInMs?: number[];
34
+ }, {
35
+ numRetries?: number;
36
+ }>;
32
37
  export declare class Svix {
33
38
  private readonly requestCtx;
34
39
  constructor(token: string, options?: SvixOptions);
package/dist/index.js CHANGED
@@ -51,7 +51,29 @@ class Svix {
51
51
  var _a, _b, _c;
52
52
  const regionalUrl = (_a = REGIONS.find((x) => x.region === token.split(".")[1])) === null || _a === void 0 ? void 0 : _a.url;
53
53
  const baseUrl = (_c = (_b = options.serverUrl) !== null && _b !== void 0 ? _b : regionalUrl) !== null && _c !== void 0 ? _c : "https://api.svix.com";
54
- this.requestCtx = { baseUrl, token, timeout: options.requestTimeout };
54
+ if (options.retryScheduleInMs) {
55
+ this.requestCtx = {
56
+ baseUrl,
57
+ token,
58
+ timeout: options.requestTimeout,
59
+ retryScheduleInMs: options.retryScheduleInMs,
60
+ };
61
+ return;
62
+ }
63
+ if (options.numRetries) {
64
+ this.requestCtx = {
65
+ baseUrl,
66
+ token,
67
+ timeout: options.requestTimeout,
68
+ numRetries: options.numRetries,
69
+ };
70
+ return;
71
+ }
72
+ this.requestCtx = {
73
+ baseUrl,
74
+ token,
75
+ timeout: options.requestTimeout,
76
+ };
55
77
  }
56
78
  get application() {
57
79
  return new application_1.Application(this.requestCtx);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/request.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- export declare const LIB_VERSION = "1.74.0";
1
+ import { XOR } from "./util";
2
+ export declare const LIB_VERSION = "1.75.0";
2
3
  export declare enum HttpMethod {
3
4
  GET = "GET",
4
5
  HEAD = "HEAD",
@@ -10,11 +11,15 @@ export declare enum HttpMethod {
10
11
  TRACE = "TRACE",
11
12
  PATCH = "PATCH"
12
13
  }
13
- export interface SvixRequestContext {
14
+ export type SvixRequestContext = {
14
15
  baseUrl: string;
15
16
  token: string;
16
17
  timeout?: number;
17
- }
18
+ } & XOR<{
19
+ retryScheduleInMs?: number[];
20
+ }, {
21
+ numRetries?: number;
22
+ }>;
18
23
  type QueryParameter = string | boolean | number | Date | string[] | null | undefined;
19
24
  export declare class SvixRequest {
20
25
  private readonly method;
package/dist/request.js CHANGED
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.SvixRequest = exports.HttpMethod = exports.LIB_VERSION = void 0;
13
13
  const util_1 = require("./util");
14
14
  const uuid_1 = require("uuid");
15
- exports.LIB_VERSION = "1.74.0";
15
+ exports.LIB_VERSION = "1.75.0";
16
16
  const USER_AGENT = `svix-libs/${exports.LIB_VERSION}/javascript`;
17
17
  var HttpMethod;
18
18
  (function (HttpMethod) {
@@ -88,6 +88,7 @@ class SvixRequest {
88
88
  });
89
89
  }
90
90
  sendInner(ctx) {
91
+ var _a, _b;
91
92
  return __awaiter(this, void 0, void 0, function* () {
92
93
  const url = new URL(ctx.baseUrl + this.path);
93
94
  for (const [name, value] of Object.entries(this.queryParams)) {
@@ -108,7 +109,7 @@ class SvixRequest {
108
109
  headers: Object.assign({ accept: "application/json, */*;q=0.8", authorization: `Bearer ${ctx.token}`, "user-agent": USER_AGENT, "svix-req-id": randomId.toString() }, this.headerParams),
109
110
  credentials: isCredentialsSupported ? "same-origin" : undefined,
110
111
  signal: ctx.timeout !== undefined ? AbortSignal.timeout(ctx.timeout) : undefined,
111
- });
112
+ }, ctx.retryScheduleInMs, (_a = ctx.retryScheduleInMs) === null || _a === void 0 ? void 0 : _a[0], ((_b = ctx.retryScheduleInMs) === null || _b === void 0 ? void 0 : _b.length) || ctx.numRetries);
112
113
  return filterResponseForErrors(response);
113
114
  });
114
115
  }
@@ -129,7 +130,7 @@ function filterResponseForErrors(response) {
129
130
  throw new util_1.ApiException(response.status, responseBody, response.headers);
130
131
  });
131
132
  }
132
- function sendWithRetry(url, init, triesLeft = 2, nextInterval = 50, retryCount = 1) {
133
+ function sendWithRetry(url, init, retryScheduleInMs, nextInterval = 50, triesLeft = 2, retryCount = 1) {
133
134
  return __awaiter(this, void 0, void 0, function* () {
134
135
  const sleep = (interval) => new Promise((resolve) => setTimeout(resolve, interval));
135
136
  try {
@@ -145,7 +146,8 @@ function sendWithRetry(url, init, triesLeft = 2, nextInterval = 50, retryCount =
145
146
  }
146
147
  yield sleep(nextInterval);
147
148
  init.headers["svix-retry-count"] = retryCount.toString();
148
- return yield sendWithRetry(url, init, --triesLeft, nextInterval * 2, ++retryCount);
149
+ nextInterval = (retryScheduleInMs === null || retryScheduleInMs === void 0 ? void 0 : retryScheduleInMs[retryCount]) || nextInterval * 2;
150
+ return yield sendWithRetry(url, init, retryScheduleInMs, nextInterval, --triesLeft, ++retryCount);
149
151
  });
150
152
  }
151
153
  //# sourceMappingURL=request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAA2C;AAE3C,+BAAoC;AAEvB,QAAA,WAAW,GAAG,QAAQ,CAAC;AACpC,MAAM,UAAU,GAAG,aAAa,mBAAW,aAAa,CAAC;AAEzD,IAAY,UAUX;AAVD,WAAY,UAAU;IACpB,yBAAW,CAAA;IACX,2BAAa,CAAA;IACb,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,+BAAiB,CAAA;IACjB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,6BAAe,CAAA;IACf,6BAAe,CAAA;AACjB,CAAC,EAVW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAUrB;AAyBD,MAAa,WAAW;IACtB,YACmB,MAAkB,EAC3B,IAAY;QADH,WAAM,GAAN,MAAM,CAAY;QAC3B,SAAI,GAAJ,IAAI,CAAQ;QAId,gBAAW,GAA2B,EAAE,CAAC;QACzC,iBAAY,GAA2B,EAAE,CAAC;IAJ/C,CAAC;IAMG,YAAY,CAAC,IAAY,EAAE,KAAa;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,kBAAkB,IAAI,YAAY,CAAC,CAAC;SACrD;QACD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,CAAC;IAEM,aAAa,CAAC,IAAY,EAAE,KAAqB;QACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE;YACzC,OAAO;SACR;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;SAChC;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAClE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;SAC3C;aAAM,IAAI,KAAK,YAAY,IAAI,EAAE;YAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;SAC9C;aAAM,IAAI,KAAK,YAAY,KAAK,EAAE;YACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC1C;SACF;aAAM;YAEL,MAAM,mBAAmB,GAAU,KAAK,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,uBAAuB,CAAC,CAAC;SACjE;IACH,CAAC;IAEM,cAAc,CAAC,IAAY,EAAE,KAAc;QAChD,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO;SACR;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAClC,CAAC;IAEM,OAAO,CAAC,KAAU;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAWY,IAAI,CACf,GAAuB,EAEvB,iBAAyC;;YAEzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;gBAC1B,OAAU,IAAI,CAAC;aAChB;YACD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACrD,CAAC;KAAA;IAGY,kBAAkB,CAAC,GAAuB;;YACrD,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;KAAA;IAEa,SAAS,CAAC,GAAuB;;;YAC7C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAC5D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACnC;YAED,IACE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,SAAS;gBAClD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,EACpC;gBACA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,GAAG,OAAO,GAAG,IAAA,SAAM,GAAE,CAAC;aAC3D;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAErE,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;gBACrB,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;aACxD;YAID,MAAM,sBAAsB,GAAG,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC;YAElE,MAAM,QAAQ,GAAG,MAAM,aAAa,CAClC,GAAG,EACH;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,kBACL,MAAM,EAAE,6BAA6B,EACrC,aAAa,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,EACpC,YAAY,EAAE,UAAU,EACxB,aAAa,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAC/B,IAAI,CAAC,YAAY,CACrB;gBACD,WAAW,EAAE,sBAAsB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;gBAC/D,MAAM,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;aACjF,EACD,GAAG,CAAC,iBAAiB,EACrB,MAAA,GAAG,CAAC,iBAAiB,0CAAG,CAAC,CAAC,EAC1B,CAAA,MAAA,GAAG,CAAC,iBAAiB,0CAAE,MAAM,KAAI,GAAG,CAAC,UAAU,CAChD,CAAC;YACF,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;;KAC1C;CACF;AA3HD,kCA2HC;AAED,SAAe,uBAAuB,CAAC,QAAkB;;QACvD,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;YACzB,OAAO,QAAQ,CAAC;SACjB;QAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE3C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;YAC3B,MAAM,IAAI,mBAAY,CACpB,QAAQ,CAAC,MAAM,EACf,IAAI,CAAC,KAAK,CAAC,YAAY,CAAwB,EAC/C,QAAQ,CAAC,OAAO,CACjB,CAAC;SACH;QAED,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE;YACpD,MAAM,IAAI,mBAAY,CACpB,QAAQ,CAAC,MAAM,EACf,IAAI,CAAC,KAAK,CAAC,YAAY,CAAiB,EACxC,QAAQ,CAAC,OAAO,CACjB,CAAC;SACH;QACD,MAAM,IAAI,mBAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;CAAA;AAMD,SAAe,aAAa,CAC1B,GAAQ,EACR,IAAqB,EACrB,iBAA4B,EAC5B,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC,EACb,UAAU,GAAG,CAAC;;QAEd,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,EAAE,CACjC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE1D,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACxC,IAAI,SAAS,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE;gBAC3C,OAAO,QAAQ,CAAC;aACjB;SACF;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,SAAS,IAAI,CAAC,EAAE;gBAClB,MAAM,CAAC,CAAC;aACT;SACF;QAED,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QACzD,YAAY,GAAG,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAG,UAAU,CAAC,KAAI,YAAY,GAAG,CAAC,CAAC;QACnE,OAAO,MAAM,aAAa,CACxB,GAAG,EACH,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,EAAE,SAAS,EACX,EAAE,UAAU,CACb,CAAC;IACJ,CAAC;CAAA"}
package/dist/util.d.ts CHANGED
@@ -7,3 +7,8 @@ export declare class ApiException<T> extends Error {
7
7
  headers: Record<string, string>;
8
8
  constructor(code: number, body: T, headers: Headers);
9
9
  }
10
+ export type XOR<T, U> = (T & {
11
+ [K in keyof U]?: never;
12
+ }) | (U & {
13
+ [K in keyof T]?: never;
14
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svix",
3
- "version": "1.74.0",
3
+ "version": "1.75.0",
4
4
  "description": "Svix webhooks API client and webhook verification library",
5
5
  "author": "svix",
6
6
  "repository": "https://github.com/svix/svix-libs",
package/src/index.ts CHANGED
@@ -19,6 +19,7 @@ export { PostOptions, ApiException } from "./util";
19
19
  export { HTTPValidationError, HttpErrorOut, ValidationError } from "./HttpErrors";
20
20
  export * from "./webhook";
21
21
  export * from "./models/index";
22
+ import { XOR } from "./util";
22
23
 
23
24
  export { ApplicationListOptions } from "./api/application";
24
25
  export { BackgroundTaskListOptions } from "./api/backgroundTask";
@@ -29,12 +30,24 @@ export { MessageListOptions, messageInRaw } from "./api/message";
29
30
  export { MessageAttemptListByEndpointOptions } from "./api/messageAttempt";
30
31
  export { OperationalWebhookEndpointListOptions } from "./api/operationalWebhookEndpoint";
31
32
 
32
- export interface SvixOptions {
33
+ export type SvixOptions = {
33
34
  debug?: boolean;
34
35
  serverUrl?: string;
35
36
  /** Time in milliseconds to wait for requests to get a response. */
36
37
  requestTimeout?: number;
37
- }
38
+ } & XOR<
39
+ {
40
+ /** List of delays (in milliseconds) to wait before each retry attempt.*/
41
+ retryScheduleInMs?: number[];
42
+ },
43
+ {
44
+ /** The number of times the client will retry if a server-side error
45
+ * or timeout is received.
46
+ * Default: 2
47
+ */
48
+ numRetries?: number;
49
+ }
50
+ >;
38
51
 
39
52
  const REGIONS = [
40
53
  { region: "us", url: "https://api.us.svix.com" },
@@ -51,7 +64,29 @@ export class Svix {
51
64
  const regionalUrl = REGIONS.find((x) => x.region === token.split(".")[1])?.url;
52
65
  const baseUrl: string = options.serverUrl ?? regionalUrl ?? "https://api.svix.com";
53
66
 
54
- this.requestCtx = { baseUrl, token, timeout: options.requestTimeout };
67
+ if (options.retryScheduleInMs) {
68
+ this.requestCtx = {
69
+ baseUrl,
70
+ token,
71
+ timeout: options.requestTimeout,
72
+ retryScheduleInMs: options.retryScheduleInMs,
73
+ };
74
+ return;
75
+ }
76
+ if (options.numRetries) {
77
+ this.requestCtx = {
78
+ baseUrl,
79
+ token,
80
+ timeout: options.requestTimeout,
81
+ numRetries: options.numRetries,
82
+ };
83
+ return;
84
+ }
85
+ this.requestCtx = {
86
+ baseUrl,
87
+ token,
88
+ timeout: options.requestTimeout,
89
+ };
55
90
  }
56
91
 
57
92
  public get application() {
@@ -114,15 +114,19 @@ describe("mockttp tests", () => {
114
114
  });
115
115
 
116
116
  test("test retry for status => 500", async () => {
117
+ const numRetries = 5;
117
118
  const endpointMock = await mockServer
118
119
  .forGet("/api/v1/app")
119
120
  .thenReply(500, `{"code":"500","detail":"asd"}`);
120
- const svx = new Svix("token", { serverUrl: mockServer.url });
121
+ const svx = new Svix("token", {
122
+ serverUrl: mockServer.url,
123
+ numRetries,
124
+ });
121
125
 
122
126
  await expect(svx.application.list()).rejects.toThrow(ApiException);
123
127
 
124
128
  const requests = await endpointMock.getSeenRequests();
125
- expect(requests.length).toBe(3);
129
+ expect(requests.length).toBe(numRetries + 1);
126
130
 
127
131
  // same svix-req-id for each retry
128
132
  const req_id = requests[0].headers["svix-req-id"];
@@ -139,6 +143,29 @@ describe("mockttp tests", () => {
139
143
  }
140
144
  });
141
145
 
146
+ test("test retry schedule for status => 500", async () => {
147
+ const retryScheduleInMs = [60, 120, 240];
148
+ const endpointMock = await mockServer
149
+ .forGet("/api/v1/app")
150
+ .thenReply(500, `{"code":"500","detail":"asd"}`);
151
+ const before = new Date().getTime();
152
+ const svx = new Svix("token", {
153
+ serverUrl: mockServer.url,
154
+ retryScheduleInMs,
155
+ });
156
+
157
+ await expect(svx.application.list()).rejects.toThrow(ApiException);
158
+
159
+ const requests = await endpointMock.getSeenRequests();
160
+ expect(requests.length).toBe(retryScheduleInMs.length + 1);
161
+
162
+ const after = new Date().getTime();
163
+
164
+ expect(after - before).toBeGreaterThanOrEqual(
165
+ retryScheduleInMs.reduce((prev, curr) => prev + curr, 0)
166
+ );
167
+ });
168
+
142
169
  test("no body in response does not return anything", async () => {
143
170
  const endpointMock = await mockServer
144
171
  .forDelete("/api/v1/app/app1")
package/src/request.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { ApiException } from "./util";
1
+ import { ApiException, XOR } from "./util";
2
2
  import { HttpErrorOut, HTTPValidationError } from "./HttpErrors";
3
3
  import { v4 as uuidv4 } from "uuid";
4
4
 
5
- export const LIB_VERSION = "1.74.0";
5
+ export const LIB_VERSION = "1.75.0";
6
6
  const USER_AGENT = `svix-libs/${LIB_VERSION}/javascript`;
7
7
 
8
8
  export enum HttpMethod {
@@ -17,14 +17,26 @@ export enum HttpMethod {
17
17
  PATCH = "PATCH",
18
18
  }
19
19
 
20
- export interface SvixRequestContext {
20
+ export type SvixRequestContext = {
21
21
  /** The API base URL, like "https://api.svix.com" */
22
22
  baseUrl: string;
23
23
  /** The 'bearer' scheme access token */
24
24
  token: string;
25
25
  /** Time in milliseconds to wait for requests to get a response. */
26
26
  timeout?: number;
27
- }
27
+ } & XOR<
28
+ {
29
+ /** List of delays (in milliseconds) to wait before each retry attempt.*/
30
+ retryScheduleInMs?: number[];
31
+ },
32
+ {
33
+ /** The number of times the client will retry if a server-side error
34
+ * or timeout is received.
35
+ * Default: 2
36
+ */
37
+ numRetries?: number;
38
+ }
39
+ >;
28
40
 
29
41
  type QueryParameter = string | boolean | number | Date | string[] | null | undefined;
30
42
 
@@ -130,19 +142,25 @@ export class SvixRequest {
130
142
  // https://github.com/cloudflare/workers-sdk/issues/2514#issuecomment-2178070014
131
143
  const isCredentialsSupported = "credentials" in Request.prototype;
132
144
 
133
- const response = await sendWithRetry(url, {
134
- method: this.method.toString(),
135
- body: this.body,
136
- headers: {
137
- accept: "application/json, */*;q=0.8",
138
- authorization: `Bearer ${ctx.token}`,
139
- "user-agent": USER_AGENT,
140
- "svix-req-id": randomId.toString(),
141
- ...this.headerParams,
145
+ const response = await sendWithRetry(
146
+ url,
147
+ {
148
+ method: this.method.toString(),
149
+ body: this.body,
150
+ headers: {
151
+ accept: "application/json, */*;q=0.8",
152
+ authorization: `Bearer ${ctx.token}`,
153
+ "user-agent": USER_AGENT,
154
+ "svix-req-id": randomId.toString(),
155
+ ...this.headerParams,
156
+ },
157
+ credentials: isCredentialsSupported ? "same-origin" : undefined,
158
+ signal: ctx.timeout !== undefined ? AbortSignal.timeout(ctx.timeout) : undefined,
142
159
  },
143
- credentials: isCredentialsSupported ? "same-origin" : undefined,
144
- signal: ctx.timeout !== undefined ? AbortSignal.timeout(ctx.timeout) : undefined,
145
- });
160
+ ctx.retryScheduleInMs,
161
+ ctx.retryScheduleInMs?.[0],
162
+ ctx.retryScheduleInMs?.length || ctx.numRetries
163
+ );
146
164
  return filterResponseForErrors(response);
147
165
  }
148
166
  }
@@ -179,8 +197,9 @@ type SvixRequestInit = RequestInit & {
179
197
  async function sendWithRetry(
180
198
  url: URL,
181
199
  init: SvixRequestInit,
182
- triesLeft = 2,
200
+ retryScheduleInMs?: number[],
183
201
  nextInterval = 50,
202
+ triesLeft = 2,
184
203
  retryCount = 1
185
204
  ): Promise<Response> {
186
205
  const sleep = (interval: number) =>
@@ -199,5 +218,13 @@ async function sendWithRetry(
199
218
 
200
219
  await sleep(nextInterval);
201
220
  init.headers["svix-retry-count"] = retryCount.toString();
202
- return await sendWithRetry(url, init, --triesLeft, nextInterval * 2, ++retryCount);
221
+ nextInterval = retryScheduleInMs?.[retryCount] || nextInterval * 2;
222
+ return await sendWithRetry(
223
+ url,
224
+ init,
225
+ retryScheduleInMs,
226
+ nextInterval,
227
+ --triesLeft,
228
+ ++retryCount
229
+ );
203
230
  }
package/src/util.ts CHANGED
@@ -17,3 +17,7 @@ export class ApiException<T> extends Error {
17
17
  });
18
18
  }
19
19
  }
20
+
21
+ export type XOR<T, U> =
22
+ | (T & { [K in keyof U]?: never })
23
+ | (U & { [K in keyof T]?: never });