@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.
- package/dist/cjs/authentication.js +90 -5
- package/dist/cjs/batch-builder.js +2 -2
- package/dist/cjs/clients/base-client.js +2 -1
- package/dist/cjs/clients/channels-client.js +14 -14
- package/dist/cjs/clients/comments-client.js +7 -7
- package/dist/cjs/clients/conversation-messages-client.js +6 -6
- package/dist/cjs/clients/conversations-client.js +16 -16
- package/dist/cjs/clients/groups-client.js +10 -10
- package/dist/cjs/clients/inbox-client.js +7 -7
- package/dist/cjs/clients/reactions-client.js +4 -4
- package/dist/cjs/clients/search-client.js +4 -4
- package/dist/cjs/clients/threads-client.js +21 -21
- package/dist/cjs/clients/users-client.js +15 -15
- package/dist/cjs/clients/workspace-users-client.js +11 -11
- package/dist/cjs/clients/workspaces-client.js +8 -8
- package/dist/cjs/consts/endpoints.js +3 -2
- package/dist/cjs/testUtils/msw-setup.js +1 -1
- package/dist/cjs/{rest-client.js → transport/fetch-with-retry.js} +108 -153
- package/dist/cjs/transport/http-client.js +108 -0
- package/dist/cjs/transport/http-dispatcher.js +128 -0
- package/dist/cjs/types/api-version.js +6 -0
- package/dist/cjs/types/entities.js +4 -4
- package/dist/cjs/types/http.js +2 -0
- package/dist/cjs/types/index.js +1 -0
- package/dist/esm/authentication.js +85 -1
- package/dist/esm/batch-builder.js +1 -1
- package/dist/esm/clients/base-client.js +2 -1
- package/dist/esm/clients/channels-client.js +1 -1
- package/dist/esm/clients/comments-client.js +1 -1
- package/dist/esm/clients/conversation-messages-client.js +1 -1
- package/dist/esm/clients/conversations-client.js +1 -1
- package/dist/esm/clients/groups-client.js +1 -1
- package/dist/esm/clients/inbox-client.js +1 -1
- package/dist/esm/clients/reactions-client.js +1 -1
- package/dist/esm/clients/search-client.js +1 -1
- package/dist/esm/clients/threads-client.js +1 -1
- package/dist/esm/clients/users-client.js +1 -1
- package/dist/esm/clients/workspace-users-client.js +1 -1
- package/dist/esm/clients/workspaces-client.js +1 -1
- package/dist/esm/consts/endpoints.js +3 -2
- package/dist/esm/testUtils/msw-setup.js +1 -1
- package/dist/esm/{rest-client.js → transport/fetch-with-retry.js} +108 -150
- package/dist/esm/transport/http-client.js +103 -0
- package/dist/esm/transport/http-dispatcher.js +91 -0
- package/dist/esm/types/api-version.js +5 -1
- package/dist/esm/types/entities.js +1 -1
- package/dist/esm/types/http.js +1 -1
- package/dist/esm/types/index.js +1 -0
- package/dist/types/authentication.d.ts +5 -1
- package/dist/types/consts/endpoints.d.ts +2 -2
- package/dist/types/transport/fetch-with-retry.d.ts +4 -0
- package/dist/types/{rest-client.d.ts → transport/http-client.d.ts} +1 -4
- package/dist/types/transport/http-dispatcher.d.ts +3 -0
- package/dist/types/types/api-version.d.ts +3 -1
- package/dist/types/types/entities.d.ts +25 -0
- package/dist/types/types/http.d.ts +2 -1
- package/dist/types/types/index.d.ts +1 -0
- 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
|
-
|
|
53
|
-
|
|
54
|
-
var
|
|
55
|
-
var
|
|
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,
|
|
152
|
-
var
|
|
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 (
|
|
155
|
-
switch (
|
|
60
|
+
return __generator(this, function (_c) {
|
|
61
|
+
switch (_c.label) {
|
|
156
62
|
case 0:
|
|
157
63
|
attempt = 0;
|
|
158
|
-
|
|
64
|
+
_c.label = 1;
|
|
159
65
|
case 1:
|
|
160
66
|
if (!(attempt <= maxRetries)) return [3 /*break*/, 13];
|
|
161
67
|
clearTimeoutFn = void 0;
|
|
162
|
-
|
|
68
|
+
_c.label = 2;
|
|
163
69
|
case 2:
|
|
164
|
-
|
|
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 =
|
|
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 =
|
|
183
|
-
|
|
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 =
|
|
90
|
+
responseText = _c.sent();
|
|
189
91
|
responseData = void 0;
|
|
190
92
|
try {
|
|
191
93
|
responseData = responseText ? JSON.parse(responseText) : undefined;
|
|
192
94
|
}
|
|
193
|
-
catch (
|
|
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 =
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
case 10:
|
|
221
|
-
|
|
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((
|
|
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
|
|
138
|
+
function fetchWithDefaultTransport(url, options, signal) {
|
|
245
139
|
return __awaiter(this, void 0, void 0, function () {
|
|
246
|
-
var
|
|
247
|
-
return __generator(this, function (
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
return [
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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
|
|
269
|
-
return
|
|
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
|
+
}
|
|
@@ -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
|
-
|
|
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(),
|
package/dist/cjs/types/http.js
CHANGED
package/dist/cjs/types/index.js
CHANGED
|
@@ -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);
|