@doist/twist-sdk 2.1.2 → 2.1.4

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 (58) hide show
  1. package/dist/cjs/authentication.js +90 -5
  2. package/dist/cjs/batch-builder.js +2 -2
  3. package/dist/cjs/clients/base-client.js +2 -1
  4. package/dist/cjs/clients/channels-client.js +14 -14
  5. package/dist/cjs/clients/comments-client.js +7 -7
  6. package/dist/cjs/clients/conversation-messages-client.js +6 -6
  7. package/dist/cjs/clients/conversations-client.js +16 -16
  8. package/dist/cjs/clients/groups-client.js +10 -10
  9. package/dist/cjs/clients/inbox-client.js +7 -7
  10. package/dist/cjs/clients/reactions-client.js +4 -4
  11. package/dist/cjs/clients/search-client.js +4 -4
  12. package/dist/cjs/clients/threads-client.js +21 -21
  13. package/dist/cjs/clients/users-client.js +15 -15
  14. package/dist/cjs/clients/workspace-users-client.js +11 -11
  15. package/dist/cjs/clients/workspaces-client.js +8 -8
  16. package/dist/cjs/consts/endpoints.js +3 -2
  17. package/dist/cjs/testUtils/msw-setup.js +1 -1
  18. package/dist/cjs/{rest-client.js → transport/fetch-with-retry.js} +108 -153
  19. package/dist/cjs/transport/http-client.js +108 -0
  20. package/dist/cjs/transport/http-dispatcher.js +128 -0
  21. package/dist/cjs/types/api-version.js +6 -0
  22. package/dist/cjs/types/entities.js +4 -4
  23. package/dist/cjs/types/http.js +2 -0
  24. package/dist/cjs/types/index.js +1 -0
  25. package/dist/esm/authentication.js +85 -1
  26. package/dist/esm/batch-builder.js +1 -1
  27. package/dist/esm/clients/base-client.js +2 -1
  28. package/dist/esm/clients/channels-client.js +1 -1
  29. package/dist/esm/clients/comments-client.js +1 -1
  30. package/dist/esm/clients/conversation-messages-client.js +1 -1
  31. package/dist/esm/clients/conversations-client.js +1 -1
  32. package/dist/esm/clients/groups-client.js +1 -1
  33. package/dist/esm/clients/inbox-client.js +1 -1
  34. package/dist/esm/clients/reactions-client.js +1 -1
  35. package/dist/esm/clients/search-client.js +1 -1
  36. package/dist/esm/clients/threads-client.js +1 -1
  37. package/dist/esm/clients/users-client.js +1 -1
  38. package/dist/esm/clients/workspace-users-client.js +1 -1
  39. package/dist/esm/clients/workspaces-client.js +1 -1
  40. package/dist/esm/consts/endpoints.js +3 -2
  41. package/dist/esm/testUtils/msw-setup.js +1 -1
  42. package/dist/esm/{rest-client.js → transport/fetch-with-retry.js} +108 -150
  43. package/dist/esm/transport/http-client.js +103 -0
  44. package/dist/esm/transport/http-dispatcher.js +91 -0
  45. package/dist/esm/types/api-version.js +5 -1
  46. package/dist/esm/types/entities.js +1 -1
  47. package/dist/esm/types/http.js +1 -1
  48. package/dist/esm/types/index.js +1 -0
  49. package/dist/types/authentication.d.ts +5 -1
  50. package/dist/types/consts/endpoints.d.ts +2 -2
  51. package/dist/types/transport/fetch-with-retry.d.ts +4 -0
  52. package/dist/types/{rest-client.d.ts → transport/http-client.d.ts} +1 -4
  53. package/dist/types/transport/http-dispatcher.d.ts +3 -0
  54. package/dist/types/types/api-version.d.ts +3 -1
  55. package/dist/types/types/entities.d.ts +25 -0
  56. package/dist/types/types/http.d.ts +2 -1
  57. package/dist/types/types/index.d.ts +1 -0
  58. package/package.json +1 -1
@@ -47,121 +47,27 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
47
47
  }
48
48
  };
49
49
  Object.defineProperty(exports, "__esModule", { value: true });
50
- exports.paramsSerializer = paramsSerializer;
51
50
  exports.fetchWithRetry = fetchWithRetry;
52
- exports.request = request;
53
- exports.isSuccess = isSuccess;
54
- var undici_1 = require("undici");
55
- var errors_1 = require("./types/errors");
56
- var case_conversion_1 = require("./utils/case-conversion");
57
- var timestamp_conversion_1 = require("./utils/timestamp-conversion");
58
- /**
59
- * HTTP agent with keepAlive disabled to prevent hanging connections
60
- * This ensures the process exits immediately after requests complete
61
- */
62
- var httpAgent = new undici_1.Agent({
63
- keepAliveTimeout: 1, // Close connections after 1ms of idle time
64
- keepAliveMaxTimeout: 1, // Maximum time to keep connections alive
65
- });
66
- function paramsSerializer(params) {
67
- var qs = new URLSearchParams();
68
- Object.keys(params).forEach(function (key) {
69
- var value = params[key];
70
- if (value != null) {
71
- if (Array.isArray(value)) {
72
- qs.append(key, value.join(','));
73
- }
74
- else {
75
- qs.append(key, String(value));
76
- }
77
- }
78
- });
79
- return qs.toString();
80
- }
81
- var defaultHeaders = {
82
- 'Content-Type': 'application/json',
83
- };
84
- function getAuthHeader(apiToken) {
85
- return "Bearer ".concat(apiToken);
86
- }
87
- function getRequestConfiguration(baseURL, apiToken, requestId) {
88
- var authHeader = apiToken ? { Authorization: getAuthHeader(apiToken) } : undefined;
89
- var requestIdHeader = requestId ? { 'X-Request-Id': requestId } : undefined;
90
- var headers = __assign(__assign(__assign({}, defaultHeaders), authHeader), requestIdHeader);
91
- return { baseURL: baseURL, headers: headers, timeout: 30000 };
92
- }
93
- function sleep(ms) {
94
- return __awaiter(this, void 0, void 0, function () {
95
- return __generator(this, function (_a) {
96
- return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, ms); })];
97
- });
98
- });
99
- }
100
- function isNetworkError(error) {
101
- return error.name === 'TypeError' || error.message.toLowerCase().includes('network');
102
- }
103
- function getRetryDelay(retryCount) {
104
- return retryCount === 1 ? 0 : 500;
105
- }
106
- /**
107
- * Creates an AbortSignal that aborts after timeoutMs. Returns the signal and a
108
- * clear function to cancel the timeout early.
109
- */
110
- function createTimeoutSignal(timeoutMs, existingSignal) {
111
- var controller = new AbortController();
112
- var timeoutId = setTimeout(function () {
113
- controller.abort(new Error("Request timeout after ".concat(timeoutMs, "ms")));
114
- }, timeoutMs);
115
- function clear() {
116
- clearTimeout(timeoutId);
117
- }
118
- // Forward existing signal if provided
119
- if (existingSignal) {
120
- if (existingSignal.aborted) {
121
- controller.abort(existingSignal.reason);
122
- }
123
- else {
124
- existingSignal.addEventListener('abort', function () {
125
- controller.abort(existingSignal.reason);
126
- clear();
127
- }, { once: true });
128
- }
129
- }
130
- return { signal: controller.signal, clear: clear };
131
- }
132
- /**
133
- * Converts native fetch Response to CustomFetchResponse for consistent interface
134
- */
135
- function convertResponseToCustomFetch(response) {
136
- var headers = {};
137
- response.headers.forEach(function (value, key) {
138
- headers[key] = value;
139
- });
140
- return {
141
- ok: response.ok,
142
- status: response.status,
143
- statusText: response.statusText,
144
- headers: headers,
145
- text: function () { return response.clone().text(); },
146
- json: function () { return response.json(); },
147
- };
148
- }
51
+ var errors_1 = require("../types/errors");
52
+ var case_conversion_1 = require("../utils/case-conversion");
53
+ var timestamp_conversion_1 = require("../utils/timestamp-conversion");
54
+ var http_dispatcher_1 = require("./http-dispatcher");
149
55
  function fetchWithRetry(url_1, options_1) {
150
56
  return __awaiter(this, arguments, void 0, function (url, options, maxRetries, customFetch) {
151
- var lastError, attempt, clearTimeoutFn, requestSignal, timeoutResult, response, _a, _b, responseText, responseData, camelCased, transformed, error_1, delay;
152
- var _c;
57
+ var lastError, attempt, clearTimeoutFn, requestSignal, timeoutResult, response, _a, responseText, responseData, camelCased, transformed, error_1, delay;
58
+ var _b;
153
59
  if (maxRetries === void 0) { maxRetries = 3; }
154
- return __generator(this, function (_d) {
155
- switch (_d.label) {
60
+ return __generator(this, function (_c) {
61
+ switch (_c.label) {
156
62
  case 0:
157
63
  attempt = 0;
158
- _d.label = 1;
64
+ _c.label = 1;
159
65
  case 1:
160
66
  if (!(attempt <= maxRetries)) return [3 /*break*/, 13];
161
67
  clearTimeoutFn = void 0;
162
- _d.label = 2;
68
+ _c.label = 2;
163
69
  case 2:
164
- _d.trys.push([2, 8, , 12]);
70
+ _c.trys.push([2, 8, , 12]);
165
71
  requestSignal = options.signal || undefined;
166
72
  if (options.timeout && options.timeout > 0) {
167
73
  timeoutResult = createTimeoutSignal(options.timeout, requestSignal);
@@ -171,26 +77,22 @@ function fetchWithRetry(url_1, options_1) {
171
77
  if (!customFetch) return [3 /*break*/, 4];
172
78
  return [4 /*yield*/, customFetch(url, options)];
173
79
  case 3:
174
- _a = _d.sent();
80
+ _a = _c.sent();
175
81
  return [3 /*break*/, 6];
176
- case 4:
177
- _b = convertResponseToCustomFetch;
178
- return [4 /*yield*/, fetch(url, __assign(__assign({}, options), { signal: requestSignal,
179
- // @ts-expect-error - dispatcher is valid for Node.js fetch but not in TS types
180
- dispatcher: httpAgent }))];
82
+ case 4: return [4 /*yield*/, fetchWithDefaultTransport(url, options, requestSignal)];
181
83
  case 5:
182
- _a = _b.apply(void 0, [_d.sent()]);
183
- _d.label = 6;
84
+ _a = _c.sent();
85
+ _c.label = 6;
184
86
  case 6:
185
87
  response = _a;
186
88
  return [4 /*yield*/, response.text()];
187
89
  case 7:
188
- responseText = _d.sent();
90
+ responseText = _c.sent();
189
91
  responseData = void 0;
190
92
  try {
191
93
  responseData = responseText ? JSON.parse(responseText) : undefined;
192
94
  }
193
- catch (_e) {
95
+ catch (_d) {
194
96
  responseData = responseText;
195
97
  }
196
98
  if (!response.ok) {
@@ -198,7 +100,6 @@ function fetchWithRetry(url_1, options_1) {
198
100
  }
199
101
  camelCased = (0, case_conversion_1.camelCaseKeys)(responseData);
200
102
  transformed = (0, timestamp_conversion_1.transformTimestamps)(camelCased);
201
- // Success – clear pending timeout (if any) so Node can exit promptly
202
103
  if (clearTimeoutFn) {
203
104
  clearTimeoutFn();
204
105
  }
@@ -208,27 +109,20 @@ function fetchWithRetry(url_1, options_1) {
208
109
  headers: response.headers,
209
110
  }];
210
111
  case 8:
211
- error_1 = _d.sent();
112
+ error_1 = _c.sent();
113
+ if (clearTimeoutFn) {
114
+ clearTimeoutFn();
115
+ }
212
116
  lastError = error_1 instanceof Error ? error_1 : new Error('Unknown error');
213
117
  if (!(attempt < maxRetries && isNetworkError(lastError))) return [3 /*break*/, 11];
214
118
  delay = getRetryDelay(attempt + 1);
215
119
  if (!(delay > 0)) return [3 /*break*/, 10];
216
120
  return [4 /*yield*/, sleep(delay)];
217
121
  case 9:
218
- _d.sent();
219
- _d.label = 10;
220
- case 10:
221
- // Retry path ensure this attempt's timeout is cleared before looping
222
- if (clearTimeoutFn) {
223
- clearTimeoutFn();
224
- }
225
- return [3 /*break*/, 12];
226
- case 11:
227
- // Final error – clear timeout before throwing
228
- if (clearTimeoutFn) {
229
- clearTimeoutFn();
230
- }
231
- return [3 /*break*/, 13];
122
+ _c.sent();
123
+ _c.label = 10;
124
+ case 10: return [3 /*break*/, 12];
125
+ case 11: return [3 /*break*/, 13];
232
126
  case 12:
233
127
  attempt++;
234
128
  return [3 /*break*/, 1];
@@ -236,35 +130,96 @@ function fetchWithRetry(url_1, options_1) {
236
130
  if (lastError instanceof errors_1.TwistRequestError) {
237
131
  throw lastError;
238
132
  }
239
- throw new errors_1.TwistRequestError((_c = lastError === null || lastError === void 0 ? void 0 : lastError.message) !== null && _c !== void 0 ? _c : 'Request failed');
133
+ throw new errors_1.TwistRequestError((_b = lastError === null || lastError === void 0 ? void 0 : lastError.message) !== null && _b !== void 0 ? _b : 'Request failed');
240
134
  }
241
135
  });
242
136
  });
243
137
  }
244
- function request(args) {
138
+ function fetchWithDefaultTransport(url, options, signal) {
245
139
  return __awaiter(this, void 0, void 0, function () {
246
- var httpMethod, baseUri, relativePath, apiToken, payload, requestId, customFetch, config, url, options, searchParams, urlWithParams;
247
- return __generator(this, function (_a) {
248
- httpMethod = args.httpMethod, baseUri = args.baseUri, relativePath = args.relativePath, apiToken = args.apiToken, payload = args.payload, requestId = args.requestId, customFetch = args.customFetch;
249
- config = getRequestConfiguration(baseUri, apiToken, requestId);
250
- url = new URL(relativePath, config.baseURL).toString();
251
- options = {
252
- method: httpMethod,
253
- headers: config.headers,
254
- timeout: config.timeout,
255
- };
256
- if (httpMethod === 'GET' && payload) {
257
- searchParams = paramsSerializer((0, case_conversion_1.snakeCaseKeys)(payload));
258
- urlWithParams = searchParams ? "".concat(url, "?").concat(searchParams) : url;
259
- return [2 /*return*/, fetchWithRetry(urlWithParams, options, 3, customFetch)];
260
- }
261
- if (payload && httpMethod !== 'GET') {
262
- options.body = JSON.stringify((0, case_conversion_1.snakeCaseKeys)(payload));
140
+ var dispatcher, response, _a;
141
+ return __generator(this, function (_b) {
142
+ switch (_b.label) {
143
+ case 0: return [4 /*yield*/, (0, http_dispatcher_1.getDefaultDispatcher)()];
144
+ case 1:
145
+ dispatcher = _b.sent();
146
+ if (!dispatcher) return [3 /*break*/, 3];
147
+ return [4 /*yield*/, fetch(url, __assign(__assign({}, options), { signal: signal,
148
+ // @ts-expect-error - dispatcher is valid for Node.js fetch but not in TS types
149
+ dispatcher: dispatcher }))];
150
+ case 2:
151
+ _a = _b.sent();
152
+ return [3 /*break*/, 5];
153
+ case 3: return [4 /*yield*/, fetch(url, __assign(__assign({}, options), { signal: signal }))];
154
+ case 4:
155
+ _a = _b.sent();
156
+ _b.label = 5;
157
+ case 5:
158
+ response = _a;
159
+ return [2 /*return*/, convertResponseToCustomFetch(response)];
263
160
  }
264
- return [2 /*return*/, fetchWithRetry(url, options, 3, customFetch)];
265
161
  });
266
162
  });
267
163
  }
268
- function isSuccess(response) {
269
- return response.status >= 200 && response.status < 300;
164
+ function sleep(ms) {
165
+ return __awaiter(this, void 0, void 0, function () {
166
+ return __generator(this, function (_a) {
167
+ return [2 /*return*/, new Promise(function (resolve) { return setTimeout(resolve, ms); })];
168
+ });
169
+ });
170
+ }
171
+ var timeoutErrorName = 'TimeoutError';
172
+ function createTimeoutError(timeoutMs) {
173
+ var error = new Error("Request timeout after ".concat(timeoutMs, "ms"));
174
+ error.name = timeoutErrorName;
175
+ return error;
176
+ }
177
+ function isNetworkError(error) {
178
+ return (error.name === 'TypeError' ||
179
+ error.name === timeoutErrorName ||
180
+ error.message.toLowerCase().includes('network'));
181
+ }
182
+ function getRetryDelay(retryCount) {
183
+ return retryCount === 1 ? 0 : 500;
184
+ }
185
+ function createTimeoutSignal(timeoutMs, existingSignal) {
186
+ var controller = new AbortController();
187
+ var timeoutId = setTimeout(function () {
188
+ controller.abort(createTimeoutError(timeoutMs));
189
+ }, timeoutMs);
190
+ var abortHandler;
191
+ function clear() {
192
+ clearTimeout(timeoutId);
193
+ if (existingSignal && abortHandler) {
194
+ existingSignal.removeEventListener('abort', abortHandler);
195
+ }
196
+ }
197
+ if (existingSignal) {
198
+ if (existingSignal.aborted) {
199
+ clearTimeout(timeoutId);
200
+ controller.abort(existingSignal.reason);
201
+ }
202
+ else {
203
+ abortHandler = function () {
204
+ clearTimeout(timeoutId);
205
+ controller.abort(existingSignal.reason);
206
+ };
207
+ existingSignal.addEventListener('abort', abortHandler, { once: true });
208
+ }
209
+ }
210
+ return { signal: controller.signal, clear: clear };
211
+ }
212
+ function convertResponseToCustomFetch(response) {
213
+ var headers = {};
214
+ response.headers.forEach(function (value, key) {
215
+ headers[key] = value;
216
+ });
217
+ return {
218
+ ok: response.ok,
219
+ status: response.status,
220
+ statusText: response.statusText,
221
+ headers: headers,
222
+ text: function () { return response.clone().text(); },
223
+ json: function () { return response.json(); },
224
+ };
270
225
  }
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.paramsSerializer = paramsSerializer;
51
+ exports.request = request;
52
+ exports.isSuccess = isSuccess;
53
+ var case_conversion_1 = require("../utils/case-conversion");
54
+ var fetch_with_retry_1 = require("./fetch-with-retry");
55
+ function paramsSerializer(params) {
56
+ var qs = new URLSearchParams();
57
+ Object.keys(params).forEach(function (key) {
58
+ var value = params[key];
59
+ if (value != null) {
60
+ if (Array.isArray(value)) {
61
+ qs.append(key, value.join(','));
62
+ }
63
+ else {
64
+ qs.append(key, String(value));
65
+ }
66
+ }
67
+ });
68
+ return qs.toString();
69
+ }
70
+ var defaultHeaders = {
71
+ 'Content-Type': 'application/json',
72
+ };
73
+ function getAuthHeader(apiToken) {
74
+ return "Bearer ".concat(apiToken);
75
+ }
76
+ function getRequestConfiguration(baseURL, apiToken, requestId) {
77
+ var authHeader = apiToken ? { Authorization: getAuthHeader(apiToken) } : undefined;
78
+ var requestIdHeader = requestId ? { 'X-Request-Id': requestId } : undefined;
79
+ var headers = __assign(__assign(__assign({}, defaultHeaders), authHeader), requestIdHeader);
80
+ return { baseURL: baseURL, headers: headers, timeout: 30000 };
81
+ }
82
+ function request(args) {
83
+ return __awaiter(this, void 0, void 0, function () {
84
+ var httpMethod, baseUri, relativePath, apiToken, payload, requestId, customFetch, config, url, options, searchParams, urlWithParams;
85
+ return __generator(this, function (_a) {
86
+ httpMethod = args.httpMethod, baseUri = args.baseUri, relativePath = args.relativePath, apiToken = args.apiToken, payload = args.payload, requestId = args.requestId, customFetch = args.customFetch;
87
+ config = getRequestConfiguration(baseUri, apiToken, requestId);
88
+ url = new URL(relativePath, config.baseURL).toString();
89
+ options = {
90
+ method: httpMethod,
91
+ headers: config.headers,
92
+ timeout: config.timeout,
93
+ };
94
+ if (httpMethod === 'GET' && payload) {
95
+ searchParams = paramsSerializer((0, case_conversion_1.snakeCaseKeys)(payload));
96
+ urlWithParams = searchParams ? "".concat(url, "?").concat(searchParams) : url;
97
+ return [2 /*return*/, (0, fetch_with_retry_1.fetchWithRetry)(urlWithParams, options, 3, customFetch)];
98
+ }
99
+ if (payload && httpMethod !== 'GET') {
100
+ options.body = JSON.stringify((0, case_conversion_1.snakeCaseKeys)(payload));
101
+ }
102
+ return [2 /*return*/, (0, fetch_with_retry_1.fetchWithRetry)(url, options, 3, customFetch)];
103
+ });
104
+ });
105
+ }
106
+ function isSuccess(response) {
107
+ return response.status >= 200 && response.status < 300;
108
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __generator = (this && this.__generator) || function (thisArg, body) {
45
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
46
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
47
+ function verb(n) { return function (v) { return step([n, v]); }; }
48
+ function step(op) {
49
+ if (f) throw new TypeError("Generator is already executing.");
50
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
51
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
52
+ if (y = 0, t) op = [op[0] & 2, t.value];
53
+ switch (op[0]) {
54
+ case 0: case 1: t = op; break;
55
+ case 4: _.label++; return { value: op[1], done: false };
56
+ case 5: _.label++; y = op[1]; op = [0]; continue;
57
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
58
+ default:
59
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
60
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
61
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
62
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
63
+ if (t[2]) _.ops.pop();
64
+ _.trys.pop(); continue;
65
+ }
66
+ op = body.call(thisArg, _);
67
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
68
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
69
+ }
70
+ };
71
+ Object.defineProperty(exports, "__esModule", { value: true });
72
+ exports.getDefaultDispatcher = getDefaultDispatcher;
73
+ exports.resetDefaultDispatcherForTests = resetDefaultDispatcherForTests;
74
+ // Use effectively-disabled keep-alive so short-lived CLI processes do not stay
75
+ // open waiting on idle sockets. Undici requires positive values, so we use 1ms.
76
+ var keepAliveOptions = {
77
+ keepAliveTimeout: 1,
78
+ keepAliveMaxTimeout: 1,
79
+ };
80
+ var defaultDispatcher;
81
+ var defaultDispatcherPromise;
82
+ function getDefaultDispatcher() {
83
+ return __awaiter(this, void 0, void 0, function () {
84
+ return __generator(this, function (_a) {
85
+ if (defaultDispatcher) {
86
+ return [2 /*return*/, defaultDispatcher];
87
+ }
88
+ if (!defaultDispatcherPromise) {
89
+ defaultDispatcherPromise = createDefaultDispatcher()
90
+ .then(function (dispatcher) {
91
+ defaultDispatcher = dispatcher;
92
+ return dispatcher;
93
+ })
94
+ .catch(function (error) {
95
+ defaultDispatcher = undefined;
96
+ defaultDispatcherPromise = undefined;
97
+ throw error;
98
+ });
99
+ }
100
+ return [2 /*return*/, defaultDispatcherPromise];
101
+ });
102
+ });
103
+ }
104
+ function resetDefaultDispatcherForTests() {
105
+ defaultDispatcher = undefined;
106
+ defaultDispatcherPromise = undefined;
107
+ }
108
+ function isNodeEnvironment() {
109
+ var _a;
110
+ return typeof process !== 'undefined' && typeof ((_a = process.versions) === null || _a === void 0 ? void 0 : _a.node) === 'string';
111
+ }
112
+ function createDefaultDispatcher() {
113
+ return __awaiter(this, void 0, void 0, function () {
114
+ var EnvHttpProxyAgent;
115
+ return __generator(this, function (_a) {
116
+ switch (_a.label) {
117
+ case 0:
118
+ if (!isNodeEnvironment()) {
119
+ return [2 /*return*/, undefined];
120
+ }
121
+ return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require('undici')); })];
122
+ case 1:
123
+ EnvHttpProxyAgent = (_a.sent()).EnvHttpProxyAgent;
124
+ return [2 /*return*/, new EnvHttpProxyAgent(keepAliveOptions)];
125
+ }
126
+ });
127
+ });
128
+ }
@@ -1,2 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_API_VERSION = exports.API_VERSIONS = void 0;
4
+ /**
5
+ * Supported Twist API versions
6
+ */
7
+ exports.API_VERSIONS = ['v3', 'v4'];
8
+ exports.DEFAULT_API_VERSION = 'v3';
@@ -11,14 +11,14 @@ var __assign = (this && this.__assign) || function () {
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.SearchResultSchema = exports.SEARCH_RESULT_TYPES = exports.UnreadConversationSchema = exports.UnreadThreadSchema = exports.InboxThreadSchema = exports.ConversationMessageSchema = exports.WorkspaceUserSchema = exports.CommentSchema = exports.ConversationSchema = exports.GroupSchema = exports.ThreadSchema = exports.ChannelSchema = exports.WorkspaceSchema = exports.UserSchema = exports.SystemMessageSchema = void 0;
14
+ exports.SearchResultSchema = exports.SEARCH_RESULT_TYPES = exports.UnreadConversationSchema = exports.UnreadThreadSchema = exports.InboxThreadSchema = exports.ConversationMessageSchema = exports.WorkspaceUserSchema = exports.CommentSchema = exports.ConversationSchema = exports.GroupSchema = exports.ThreadSchema = exports.ChannelSchema = exports.WorkspaceSchema = exports.UserSchema = exports.BaseUserSchema = exports.SystemMessageSchema = void 0;
15
15
  var zod_1 = require("zod");
16
16
  var url_helpers_1 = require("../utils/url-helpers");
17
17
  var enums_1 = require("./enums");
18
18
  // Reusable schema for system messages that can be either a string or an object
19
19
  exports.SystemMessageSchema = zod_1.z.union([zod_1.z.string(), zod_1.z.unknown()]).nullable().optional();
20
20
  // Base user schema with common fields shared between User and WorkspaceUser
21
- var BaseUserSchema = zod_1.z.object({
21
+ exports.BaseUserSchema = zod_1.z.object({
22
22
  id: zod_1.z.number(),
23
23
  name: zod_1.z.string(),
24
24
  shortName: zod_1.z.string(),
@@ -50,7 +50,7 @@ var BaseUserSchema = zod_1.z.object({
50
50
  setupPending: zod_1.z.union([zod_1.z.boolean(), zod_1.z.number()]).nullable().optional(),
51
51
  });
52
52
  // User entity from API
53
- exports.UserSchema = BaseUserSchema.extend({
53
+ exports.UserSchema = exports.BaseUserSchema.extend({
54
54
  email: zod_1.z.email(),
55
55
  snoozeDndStart: zod_1.z.string().nullable().optional(),
56
56
  clientId: zod_1.z.string().nullable().optional(),
@@ -262,7 +262,7 @@ exports.CommentSchema = zod_1.z
262
262
  commentId: data.id,
263
263
  }) })); });
264
264
  // WorkspaceUser entity from v4 API
265
- exports.WorkspaceUserSchema = BaseUserSchema.extend({
265
+ exports.WorkspaceUserSchema = exports.BaseUserSchema.extend({
266
266
  email: zod_1.z.string().nullable().optional(),
267
267
  userType: zod_1.z.enum(enums_1.USER_TYPES),
268
268
  dateFormat: zod_1.z.string().nullable().optional(),
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HTTP_METHODS = void 0;
4
+ exports.HTTP_METHODS = ['POST', 'GET', 'PUT', 'PATCH', 'DELETE'];
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api-version"), exports);
17
18
  __exportStar(require("./batch"), exports);
18
19
  __exportStar(require("./entities"), exports);
19
20
  __exportStar(require("./enums"), exports);