@roarkanalytics/sdk 0.1.0-alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +25 -0
- package/LICENSE +201 -0
- package/README.md +344 -0
- package/api-promise.d.mts +47 -0
- package/api-promise.d.mts.map +1 -0
- package/api-promise.d.ts +47 -0
- package/api-promise.d.ts.map +1 -0
- package/api-promise.js +84 -0
- package/api-promise.js.map +1 -0
- package/api-promise.mjs +80 -0
- package/api-promise.mjs.map +1 -0
- package/client.d.mts +186 -0
- package/client.d.mts.map +1 -0
- package/client.d.ts +186 -0
- package/client.d.ts.map +1 -0
- package/client.js +449 -0
- package/client.js.map +1 -0
- package/client.mjs +422 -0
- package/client.mjs.map +1 -0
- package/error.d.mts +47 -0
- package/error.d.mts.map +1 -0
- package/error.d.ts +47 -0
- package/error.d.ts.map +1 -0
- package/error.js +113 -0
- package/error.js.map +1 -0
- package/error.mjs +97 -0
- package/error.mjs.map +1 -0
- package/index.d.mts +6 -0
- package/index.d.mts.map +1 -0
- package/index.d.ts +6 -0
- package/index.d.ts.map +1 -0
- package/index.js +30 -0
- package/index.js.map +1 -0
- package/index.mjs +7 -0
- package/index.mjs.map +1 -0
- package/internal/builtin-types.d.mts +65 -0
- package/internal/builtin-types.d.mts.map +1 -0
- package/internal/builtin-types.d.ts +65 -0
- package/internal/builtin-types.d.ts.map +1 -0
- package/internal/builtin-types.js +4 -0
- package/internal/builtin-types.js.map +1 -0
- package/internal/builtin-types.mjs +3 -0
- package/internal/builtin-types.mjs.map +1 -0
- package/internal/detect-platform.d.mts +15 -0
- package/internal/detect-platform.d.mts.map +1 -0
- package/internal/detect-platform.d.ts +15 -0
- package/internal/detect-platform.d.ts.map +1 -0
- package/internal/detect-platform.js +162 -0
- package/internal/detect-platform.js.map +1 -0
- package/internal/detect-platform.mjs +157 -0
- package/internal/detect-platform.mjs.map +1 -0
- package/internal/errors.d.mts +3 -0
- package/internal/errors.d.mts.map +1 -0
- package/internal/errors.d.ts +3 -0
- package/internal/errors.d.ts.map +1 -0
- package/internal/errors.js +26 -0
- package/internal/errors.js.map +1 -0
- package/internal/errors.mjs +21 -0
- package/internal/errors.mjs.map +1 -0
- package/internal/headers.d.mts +21 -0
- package/internal/headers.d.mts.map +1 -0
- package/internal/headers.d.ts +21 -0
- package/internal/headers.d.ts.map +1 -0
- package/internal/headers.js +77 -0
- package/internal/headers.js.map +1 -0
- package/internal/headers.mjs +72 -0
- package/internal/headers.mjs.map +1 -0
- package/internal/parse.d.mts +10 -0
- package/internal/parse.d.mts.map +1 -0
- package/internal/parse.d.ts +10 -0
- package/internal/parse.d.ts.map +1 -0
- package/internal/parse.js +28 -0
- package/internal/parse.js.map +1 -0
- package/internal/parse.mjs +24 -0
- package/internal/parse.mjs.map +1 -0
- package/internal/polyfill/crypto.node.d.ts +10 -0
- package/internal/polyfill/crypto.node.js +11 -0
- package/internal/polyfill/crypto.node.mjs +2 -0
- package/internal/polyfill/file.node.d.ts +9 -0
- package/internal/polyfill/file.node.js +17 -0
- package/internal/polyfill/file.node.mjs +9 -0
- package/internal/request-options.d.mts +34 -0
- package/internal/request-options.d.mts.map +1 -0
- package/internal/request-options.d.ts +34 -0
- package/internal/request-options.d.ts.map +1 -0
- package/internal/request-options.js +39 -0
- package/internal/request-options.js.map +1 -0
- package/internal/request-options.mjs +34 -0
- package/internal/request-options.mjs.map +1 -0
- package/internal/shim-types.d.mts +28 -0
- package/internal/shim-types.d.ts +28 -0
- package/internal/shims.d.mts +61 -0
- package/internal/shims.d.mts.map +1 -0
- package/internal/shims.d.ts +61 -0
- package/internal/shims.d.ts.map +1 -0
- package/internal/shims.js +101 -0
- package/internal/shims.js.map +1 -0
- package/internal/shims.mjs +92 -0
- package/internal/shims.mjs.map +1 -0
- package/internal/types.d.mts +68 -0
- package/internal/types.d.mts.map +1 -0
- package/internal/types.d.ts +68 -0
- package/internal/types.d.ts.map +1 -0
- package/internal/types.js +4 -0
- package/internal/types.js.map +1 -0
- package/internal/types.mjs +3 -0
- package/internal/types.mjs.map +1 -0
- package/internal/uploads.d.mts +73 -0
- package/internal/uploads.d.mts.map +1 -0
- package/internal/uploads.d.ts +73 -0
- package/internal/uploads.d.ts.map +1 -0
- package/internal/uploads.js +208 -0
- package/internal/uploads.js.map +1 -0
- package/internal/uploads.mjs +200 -0
- package/internal/uploads.mjs.map +1 -0
- package/internal/utils/base64.d.mts +3 -0
- package/internal/utils/base64.d.mts.map +1 -0
- package/internal/utils/base64.d.ts +3 -0
- package/internal/utils/base64.d.ts.map +1 -0
- package/internal/utils/base64.js +33 -0
- package/internal/utils/base64.js.map +1 -0
- package/internal/utils/base64.mjs +28 -0
- package/internal/utils/base64.mjs.map +1 -0
- package/internal/utils/env.d.mts +9 -0
- package/internal/utils/env.d.mts.map +1 -0
- package/internal/utils/env.d.ts +9 -0
- package/internal/utils/env.d.ts.map +1 -0
- package/internal/utils/env.js +22 -0
- package/internal/utils/env.js.map +1 -0
- package/internal/utils/env.mjs +18 -0
- package/internal/utils/env.mjs.map +1 -0
- package/internal/utils/log.d.mts +4 -0
- package/internal/utils/log.d.mts.map +1 -0
- package/internal/utils/log.d.ts +4 -0
- package/internal/utils/log.d.ts.map +1 -0
- package/internal/utils/log.js +47 -0
- package/internal/utils/log.js.map +1 -0
- package/internal/utils/log.mjs +43 -0
- package/internal/utils/log.mjs.map +1 -0
- package/internal/utils/sleep.d.mts +2 -0
- package/internal/utils/sleep.d.mts.map +1 -0
- package/internal/utils/sleep.d.ts +2 -0
- package/internal/utils/sleep.d.ts.map +1 -0
- package/internal/utils/sleep.js +7 -0
- package/internal/utils/sleep.js.map +1 -0
- package/internal/utils/sleep.mjs +3 -0
- package/internal/utils/sleep.mjs.map +1 -0
- package/internal/utils/uuid.d.mts +5 -0
- package/internal/utils/uuid.d.mts.map +1 -0
- package/internal/utils/uuid.d.ts +5 -0
- package/internal/utils/uuid.d.ts.map +1 -0
- package/internal/utils/uuid.js +15 -0
- package/internal/utils/uuid.js.map +1 -0
- package/internal/utils/uuid.mjs +11 -0
- package/internal/utils/uuid.mjs.map +1 -0
- package/internal/utils/values.d.mts +15 -0
- package/internal/utils/values.d.mts.map +1 -0
- package/internal/utils/values.d.ts +15 -0
- package/internal/utils/values.d.ts.map +1 -0
- package/internal/utils/values.js +100 -0
- package/internal/utils/values.js.map +1 -0
- package/internal/utils/values.mjs +84 -0
- package/internal/utils/values.mjs.map +1 -0
- package/internal/utils.d.mts +7 -0
- package/internal/utils.d.mts.map +1 -0
- package/internal/utils.d.ts +7 -0
- package/internal/utils.d.ts.map +1 -0
- package/internal/utils.js +24 -0
- package/internal/utils.js.map +1 -0
- package/internal/utils.mjs +8 -0
- package/internal/utils.mjs.map +1 -0
- package/package.json +119 -0
- package/resource.d.mts +6 -0
- package/resource.d.mts.map +1 -0
- package/resource.d.ts +6 -0
- package/resource.d.ts.map +1 -0
- package/resource.js +11 -0
- package/resource.js.map +1 -0
- package/resource.mjs +7 -0
- package/resource.mjs.map +1 -0
- package/resources/calls.d.mts +85 -0
- package/resources/calls.d.mts.map +1 -0
- package/resources/calls.d.ts +85 -0
- package/resources/calls.d.ts.map +1 -0
- package/resources/calls.js +15 -0
- package/resources/calls.js.map +1 -0
- package/resources/calls.mjs +11 -0
- package/resources/calls.mjs.map +1 -0
- package/resources/index.d.mts +2 -0
- package/resources/index.d.mts.map +1 -0
- package/resources/index.d.ts +2 -0
- package/resources/index.d.ts.map +1 -0
- package/resources/index.js +7 -0
- package/resources/index.js.map +1 -0
- package/resources/index.mjs +3 -0
- package/resources/index.mjs.map +1 -0
- package/src/api-promise.ts +92 -0
- package/src/client.ts +646 -0
- package/src/error.ts +130 -0
- package/src/index.ts +22 -0
- package/src/internal/builtin-types.ts +79 -0
- package/src/internal/detect-platform.ts +196 -0
- package/src/internal/errors.ts +22 -0
- package/src/internal/headers.ts +96 -0
- package/src/internal/parse.ts +41 -0
- package/src/internal/polyfill/crypto.node.d.ts +10 -0
- package/src/internal/polyfill/crypto.node.js +11 -0
- package/src/internal/polyfill/crypto.node.mjs +2 -0
- package/src/internal/polyfill/file.node.d.ts +9 -0
- package/src/internal/polyfill/file.node.js +17 -0
- package/src/internal/polyfill/file.node.mjs +9 -0
- package/src/internal/request-options.ts +67 -0
- package/src/internal/shim-types.d.ts +28 -0
- package/src/internal/shims.ts +145 -0
- package/src/internal/types.ts +98 -0
- package/src/internal/uploads.ts +307 -0
- package/src/internal/utils/base64.ts +37 -0
- package/src/internal/utils/env.ts +18 -0
- package/src/internal/utils/log.ts +49 -0
- package/src/internal/utils/sleep.ts +3 -0
- package/src/internal/utils/uuid.ts +13 -0
- package/src/internal/utils/values.ts +94 -0
- package/src/internal/utils.ts +8 -0
- package/src/lib/.keep +4 -0
- package/src/resource.ts +11 -0
- package/src/resources/calls.ts +118 -0
- package/src/resources/index.ts +3 -0
- package/src/tsconfig.json +11 -0
- package/src/uploads.ts +1 -0
- package/src/version.ts +1 -0
- package/uploads.d.mts +2 -0
- package/uploads.d.mts.map +1 -0
- package/uploads.d.ts +2 -0
- package/uploads.d.ts.map +1 -0
- package/uploads.js +6 -0
- package/uploads.js.map +1 -0
- package/uploads.mjs +2 -0
- package/uploads.mjs.map +1 -0
- package/version.d.mts +2 -0
- package/version.d.mts.map +1 -0
- package/version.d.ts +2 -0
- package/version.d.ts.map +1 -0
- package/version.js +5 -0
- package/version.js.map +1 -0
- package/version.mjs +2 -0
- package/version.mjs.map +1 -0
package/src/error.ts
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
2
|
+
|
3
|
+
import { castToError } from './internal/errors';
|
4
|
+
|
5
|
+
export class PetstoreError extends Error {}
|
6
|
+
|
7
|
+
export class APIError<
|
8
|
+
TStatus extends number | undefined = number | undefined,
|
9
|
+
THeaders extends Headers | undefined = Headers | undefined,
|
10
|
+
TError extends Object | undefined = Object | undefined,
|
11
|
+
> extends PetstoreError {
|
12
|
+
/** HTTP status for the response that caused the error */
|
13
|
+
readonly status: TStatus;
|
14
|
+
/** HTTP headers for the response that caused the error */
|
15
|
+
readonly headers: THeaders;
|
16
|
+
/** JSON body of the response that caused the error */
|
17
|
+
readonly error: TError;
|
18
|
+
|
19
|
+
constructor(status: TStatus, error: TError, message: string | undefined, headers: THeaders) {
|
20
|
+
super(`${APIError.makeMessage(status, error, message)}`);
|
21
|
+
this.status = status;
|
22
|
+
this.headers = headers;
|
23
|
+
this.error = error;
|
24
|
+
}
|
25
|
+
|
26
|
+
private static makeMessage(status: number | undefined, error: any, message: string | undefined) {
|
27
|
+
const msg =
|
28
|
+
error?.message ?
|
29
|
+
typeof error.message === 'string' ?
|
30
|
+
error.message
|
31
|
+
: JSON.stringify(error.message)
|
32
|
+
: error ? JSON.stringify(error)
|
33
|
+
: message;
|
34
|
+
|
35
|
+
if (status && msg) {
|
36
|
+
return `${status} ${msg}`;
|
37
|
+
}
|
38
|
+
if (status) {
|
39
|
+
return `${status} status code (no body)`;
|
40
|
+
}
|
41
|
+
if (msg) {
|
42
|
+
return msg;
|
43
|
+
}
|
44
|
+
return '(no status code or body)';
|
45
|
+
}
|
46
|
+
|
47
|
+
static generate(
|
48
|
+
status: number | undefined,
|
49
|
+
errorResponse: Object | undefined,
|
50
|
+
message: string | undefined,
|
51
|
+
headers: Headers | undefined,
|
52
|
+
): APIError {
|
53
|
+
if (!status || !headers) {
|
54
|
+
return new APIConnectionError({ message, cause: castToError(errorResponse) });
|
55
|
+
}
|
56
|
+
|
57
|
+
const error = errorResponse as Record<string, any>;
|
58
|
+
|
59
|
+
if (status === 400) {
|
60
|
+
return new BadRequestError(status, error, message, headers);
|
61
|
+
}
|
62
|
+
|
63
|
+
if (status === 401) {
|
64
|
+
return new AuthenticationError(status, error, message, headers);
|
65
|
+
}
|
66
|
+
|
67
|
+
if (status === 403) {
|
68
|
+
return new PermissionDeniedError(status, error, message, headers);
|
69
|
+
}
|
70
|
+
|
71
|
+
if (status === 404) {
|
72
|
+
return new NotFoundError(status, error, message, headers);
|
73
|
+
}
|
74
|
+
|
75
|
+
if (status === 409) {
|
76
|
+
return new ConflictError(status, error, message, headers);
|
77
|
+
}
|
78
|
+
|
79
|
+
if (status === 422) {
|
80
|
+
return new UnprocessableEntityError(status, error, message, headers);
|
81
|
+
}
|
82
|
+
|
83
|
+
if (status === 429) {
|
84
|
+
return new RateLimitError(status, error, message, headers);
|
85
|
+
}
|
86
|
+
|
87
|
+
if (status >= 500) {
|
88
|
+
return new InternalServerError(status, error, message, headers);
|
89
|
+
}
|
90
|
+
|
91
|
+
return new APIError(status, error, message, headers);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
export class APIUserAbortError extends APIError<undefined, undefined, undefined> {
|
96
|
+
constructor({ message }: { message?: string } = {}) {
|
97
|
+
super(undefined, undefined, message || 'Request was aborted.', undefined);
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
export class APIConnectionError extends APIError<undefined, undefined, undefined> {
|
102
|
+
constructor({ message, cause }: { message?: string | undefined; cause?: Error | undefined }) {
|
103
|
+
super(undefined, undefined, message || 'Connection error.', undefined);
|
104
|
+
// in some environments the 'cause' property is already declared
|
105
|
+
// @ts-ignore
|
106
|
+
if (cause) this.cause = cause;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
|
110
|
+
export class APIConnectionTimeoutError extends APIConnectionError {
|
111
|
+
constructor({ message }: { message?: string } = {}) {
|
112
|
+
super({ message: message ?? 'Request timed out.' });
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
export class BadRequestError extends APIError<400, Headers> {}
|
117
|
+
|
118
|
+
export class AuthenticationError extends APIError<401, Headers> {}
|
119
|
+
|
120
|
+
export class PermissionDeniedError extends APIError<403, Headers> {}
|
121
|
+
|
122
|
+
export class NotFoundError extends APIError<404, Headers> {}
|
123
|
+
|
124
|
+
export class ConflictError extends APIError<409, Headers> {}
|
125
|
+
|
126
|
+
export class UnprocessableEntityError extends APIError<422, Headers> {}
|
127
|
+
|
128
|
+
export class RateLimitError extends APIError<429, Headers> {}
|
129
|
+
|
130
|
+
export class InternalServerError extends APIError<number, Headers> {}
|
package/src/index.ts
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
2
|
+
|
3
|
+
export { Petstore as default } from './client';
|
4
|
+
|
5
|
+
export { type Uploadable, toFile } from './uploads';
|
6
|
+
export { APIPromise } from './api-promise';
|
7
|
+
export { Petstore, type ClientOptions } from './client';
|
8
|
+
export {
|
9
|
+
PetstoreError,
|
10
|
+
APIError,
|
11
|
+
APIConnectionError,
|
12
|
+
APIConnectionTimeoutError,
|
13
|
+
APIUserAbortError,
|
14
|
+
NotFoundError,
|
15
|
+
ConflictError,
|
16
|
+
RateLimitError,
|
17
|
+
BadRequestError,
|
18
|
+
AuthenticationError,
|
19
|
+
InternalServerError,
|
20
|
+
PermissionDeniedError,
|
21
|
+
UnprocessableEntityError,
|
22
|
+
} from './error';
|
@@ -0,0 +1,79 @@
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
2
|
+
|
3
|
+
export type Fetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
4
|
+
|
5
|
+
/**
|
6
|
+
* An alias to the builtin `RequestInit` type so we can
|
7
|
+
* easily alias it in import statements if there are name clashes.
|
8
|
+
*
|
9
|
+
* https://developer.mozilla.org/docs/Web/API/RequestInit
|
10
|
+
*/
|
11
|
+
type _RequestInit = RequestInit;
|
12
|
+
|
13
|
+
/**
|
14
|
+
* An alias to the builtin `Response` type so we can
|
15
|
+
* easily alias it in import statements if there are name clashes.
|
16
|
+
*
|
17
|
+
* https://developer.mozilla.org/docs/Web/API/Response
|
18
|
+
*/
|
19
|
+
type _Response = Response;
|
20
|
+
|
21
|
+
/**
|
22
|
+
* The type for the first argument to `fetch`.
|
23
|
+
*
|
24
|
+
* https://developer.mozilla.org/docs/Web/API/Window/fetch#resource
|
25
|
+
*/
|
26
|
+
type _RequestInfo = Request | URL | string;
|
27
|
+
|
28
|
+
/**
|
29
|
+
* The type for constructing `RequestInit` Headers.
|
30
|
+
*
|
31
|
+
* https://developer.mozilla.org/docs/Web/API/RequestInit#setting_headers
|
32
|
+
*/
|
33
|
+
type _HeadersInit = RequestInit['headers'];
|
34
|
+
|
35
|
+
/**
|
36
|
+
* The type for constructing `RequestInit` body.
|
37
|
+
*
|
38
|
+
* https://developer.mozilla.org/docs/Web/API/RequestInit#body
|
39
|
+
*/
|
40
|
+
type _BodyInit = RequestInit['body'];
|
41
|
+
|
42
|
+
export type {
|
43
|
+
_BodyInit as BodyInit,
|
44
|
+
_HeadersInit as HeadersInit,
|
45
|
+
_RequestInfo as RequestInfo,
|
46
|
+
_RequestInit as RequestInit,
|
47
|
+
_Response as Response,
|
48
|
+
};
|
49
|
+
|
50
|
+
/**
|
51
|
+
* A copy of the builtin `EndingType` type as it isn't fully supported in certain
|
52
|
+
* environments and attempting to reference the global version will error.
|
53
|
+
*
|
54
|
+
* https://github.com/microsoft/TypeScript/blob/49ad1a3917a0ea57f5ff248159256e12bb1cb705/src/lib/dom.generated.d.ts#L27941
|
55
|
+
*/
|
56
|
+
type EndingType = 'native' | 'transparent';
|
57
|
+
|
58
|
+
/**
|
59
|
+
* A copy of the builtin `BlobPropertyBag` type as it isn't fully supported in certain
|
60
|
+
* environments and attempting to reference the global version will error.
|
61
|
+
*
|
62
|
+
* https://github.com/microsoft/TypeScript/blob/49ad1a3917a0ea57f5ff248159256e12bb1cb705/src/lib/dom.generated.d.ts#L154
|
63
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob#options
|
64
|
+
*/
|
65
|
+
export interface BlobPropertyBag {
|
66
|
+
endings?: EndingType;
|
67
|
+
type?: string;
|
68
|
+
}
|
69
|
+
|
70
|
+
/**
|
71
|
+
* A copy of the builtin `FilePropertyBag` type as it isn't fully supported in certain
|
72
|
+
* environments and attempting to reference the global version will error.
|
73
|
+
*
|
74
|
+
* https://github.com/microsoft/TypeScript/blob/49ad1a3917a0ea57f5ff248159256e12bb1cb705/src/lib/dom.generated.d.ts#L503
|
75
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/File/File#options
|
76
|
+
*/
|
77
|
+
export interface FilePropertyBag extends BlobPropertyBag {
|
78
|
+
lastModified?: number;
|
79
|
+
}
|
@@ -0,0 +1,196 @@
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
2
|
+
|
3
|
+
import { VERSION } from '../version';
|
4
|
+
|
5
|
+
export const isRunningInBrowser = () => {
|
6
|
+
return (
|
7
|
+
// @ts-ignore
|
8
|
+
typeof window !== 'undefined' &&
|
9
|
+
// @ts-ignore
|
10
|
+
typeof window.document !== 'undefined' &&
|
11
|
+
// @ts-ignore
|
12
|
+
typeof navigator !== 'undefined'
|
13
|
+
);
|
14
|
+
};
|
15
|
+
|
16
|
+
type DetectedPlatform = 'deno' | 'node' | 'edge' | 'unknown';
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Note this does not detect 'browser'; for that, use getBrowserInfo().
|
20
|
+
*/
|
21
|
+
function getDetectedPlatform(): DetectedPlatform {
|
22
|
+
if (typeof Deno !== 'undefined' && Deno.build != null) {
|
23
|
+
return 'deno';
|
24
|
+
}
|
25
|
+
if (typeof EdgeRuntime !== 'undefined') {
|
26
|
+
return 'edge';
|
27
|
+
}
|
28
|
+
if (
|
29
|
+
Object.prototype.toString.call(
|
30
|
+
typeof (globalThis as any).process !== 'undefined' ? (globalThis as any).process : 0,
|
31
|
+
) === '[object process]'
|
32
|
+
) {
|
33
|
+
return 'node';
|
34
|
+
}
|
35
|
+
return 'unknown';
|
36
|
+
}
|
37
|
+
|
38
|
+
declare const Deno: any;
|
39
|
+
declare const EdgeRuntime: any;
|
40
|
+
type Arch = 'x32' | 'x64' | 'arm' | 'arm64' | `other:${string}` | 'unknown';
|
41
|
+
type PlatformName =
|
42
|
+
| 'MacOS'
|
43
|
+
| 'Linux'
|
44
|
+
| 'Windows'
|
45
|
+
| 'FreeBSD'
|
46
|
+
| 'OpenBSD'
|
47
|
+
| 'iOS'
|
48
|
+
| 'Android'
|
49
|
+
| `Other:${string}`
|
50
|
+
| 'Unknown';
|
51
|
+
type Browser = 'ie' | 'edge' | 'chrome' | 'firefox' | 'safari';
|
52
|
+
type PlatformProperties = {
|
53
|
+
'X-Stainless-Lang': 'js';
|
54
|
+
'X-Stainless-Package-Version': string;
|
55
|
+
'X-Stainless-OS': PlatformName;
|
56
|
+
'X-Stainless-Arch': Arch;
|
57
|
+
'X-Stainless-Runtime': 'node' | 'deno' | 'edge' | `browser:${Browser}` | 'unknown';
|
58
|
+
'X-Stainless-Runtime-Version': string;
|
59
|
+
};
|
60
|
+
const getPlatformProperties = (): PlatformProperties => {
|
61
|
+
const detectedPlatform = getDetectedPlatform();
|
62
|
+
if (detectedPlatform === 'deno') {
|
63
|
+
return {
|
64
|
+
'X-Stainless-Lang': 'js',
|
65
|
+
'X-Stainless-Package-Version': VERSION,
|
66
|
+
'X-Stainless-OS': normalizePlatform(Deno.build.os),
|
67
|
+
'X-Stainless-Arch': normalizeArch(Deno.build.arch),
|
68
|
+
'X-Stainless-Runtime': 'deno',
|
69
|
+
'X-Stainless-Runtime-Version':
|
70
|
+
typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',
|
71
|
+
};
|
72
|
+
}
|
73
|
+
if (typeof EdgeRuntime !== 'undefined') {
|
74
|
+
return {
|
75
|
+
'X-Stainless-Lang': 'js',
|
76
|
+
'X-Stainless-Package-Version': VERSION,
|
77
|
+
'X-Stainless-OS': 'Unknown',
|
78
|
+
'X-Stainless-Arch': `other:${EdgeRuntime}`,
|
79
|
+
'X-Stainless-Runtime': 'edge',
|
80
|
+
'X-Stainless-Runtime-Version': (globalThis as any).process.version,
|
81
|
+
};
|
82
|
+
}
|
83
|
+
// Check if Node.js
|
84
|
+
if (detectedPlatform === 'node') {
|
85
|
+
return {
|
86
|
+
'X-Stainless-Lang': 'js',
|
87
|
+
'X-Stainless-Package-Version': VERSION,
|
88
|
+
'X-Stainless-OS': normalizePlatform((globalThis as any).process.platform),
|
89
|
+
'X-Stainless-Arch': normalizeArch((globalThis as any).process.arch),
|
90
|
+
'X-Stainless-Runtime': 'node',
|
91
|
+
'X-Stainless-Runtime-Version': (globalThis as any).process.version,
|
92
|
+
};
|
93
|
+
}
|
94
|
+
|
95
|
+
const browserInfo = getBrowserInfo();
|
96
|
+
if (browserInfo) {
|
97
|
+
return {
|
98
|
+
'X-Stainless-Lang': 'js',
|
99
|
+
'X-Stainless-Package-Version': VERSION,
|
100
|
+
'X-Stainless-OS': 'Unknown',
|
101
|
+
'X-Stainless-Arch': 'unknown',
|
102
|
+
'X-Stainless-Runtime': `browser:${browserInfo.browser}`,
|
103
|
+
'X-Stainless-Runtime-Version': browserInfo.version,
|
104
|
+
};
|
105
|
+
}
|
106
|
+
|
107
|
+
// TODO add support for Cloudflare workers, etc.
|
108
|
+
return {
|
109
|
+
'X-Stainless-Lang': 'js',
|
110
|
+
'X-Stainless-Package-Version': VERSION,
|
111
|
+
'X-Stainless-OS': 'Unknown',
|
112
|
+
'X-Stainless-Arch': 'unknown',
|
113
|
+
'X-Stainless-Runtime': 'unknown',
|
114
|
+
'X-Stainless-Runtime-Version': 'unknown',
|
115
|
+
};
|
116
|
+
};
|
117
|
+
|
118
|
+
type BrowserInfo = {
|
119
|
+
browser: Browser;
|
120
|
+
version: string;
|
121
|
+
};
|
122
|
+
|
123
|
+
declare const navigator: { userAgent: string } | undefined;
|
124
|
+
|
125
|
+
// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts
|
126
|
+
function getBrowserInfo(): BrowserInfo | null {
|
127
|
+
if (typeof navigator === 'undefined' || !navigator) {
|
128
|
+
return null;
|
129
|
+
}
|
130
|
+
|
131
|
+
// NOTE: The order matters here!
|
132
|
+
const browserPatterns = [
|
133
|
+
{ key: 'edge' as const, pattern: /Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ },
|
134
|
+
{ key: 'ie' as const, pattern: /MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ },
|
135
|
+
{ key: 'ie' as const, pattern: /Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/ },
|
136
|
+
{ key: 'chrome' as const, pattern: /Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ },
|
137
|
+
{ key: 'firefox' as const, pattern: /Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/ },
|
138
|
+
{ key: 'safari' as const, pattern: /(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/ },
|
139
|
+
];
|
140
|
+
|
141
|
+
// Find the FIRST matching browser
|
142
|
+
for (const { key, pattern } of browserPatterns) {
|
143
|
+
const match = pattern.exec(navigator.userAgent);
|
144
|
+
if (match) {
|
145
|
+
const major = match[1] || 0;
|
146
|
+
const minor = match[2] || 0;
|
147
|
+
const patch = match[3] || 0;
|
148
|
+
|
149
|
+
return { browser: key, version: `${major}.${minor}.${patch}` };
|
150
|
+
}
|
151
|
+
}
|
152
|
+
|
153
|
+
return null;
|
154
|
+
}
|
155
|
+
|
156
|
+
const normalizeArch = (arch: string): Arch => {
|
157
|
+
// Node docs:
|
158
|
+
// - https://nodejs.org/api/process.html#processarch
|
159
|
+
// Deno docs:
|
160
|
+
// - https://doc.deno.land/deno/stable/~/Deno.build
|
161
|
+
if (arch === 'x32') return 'x32';
|
162
|
+
if (arch === 'x86_64' || arch === 'x64') return 'x64';
|
163
|
+
if (arch === 'arm') return 'arm';
|
164
|
+
if (arch === 'aarch64' || arch === 'arm64') return 'arm64';
|
165
|
+
if (arch) return `other:${arch}`;
|
166
|
+
return 'unknown';
|
167
|
+
};
|
168
|
+
|
169
|
+
const normalizePlatform = (platform: string): PlatformName => {
|
170
|
+
// Node platforms:
|
171
|
+
// - https://nodejs.org/api/process.html#processplatform
|
172
|
+
// Deno platforms:
|
173
|
+
// - https://doc.deno.land/deno/stable/~/Deno.build
|
174
|
+
// - https://github.com/denoland/deno/issues/14799
|
175
|
+
|
176
|
+
platform = platform.toLowerCase();
|
177
|
+
|
178
|
+
// NOTE: this iOS check is untested and may not work
|
179
|
+
// Node does not work natively on IOS, there is a fork at
|
180
|
+
// https://github.com/nodejs-mobile/nodejs-mobile
|
181
|
+
// however it is unknown at the time of writing how to detect if it is running
|
182
|
+
if (platform.includes('ios')) return 'iOS';
|
183
|
+
if (platform === 'android') return 'Android';
|
184
|
+
if (platform === 'darwin') return 'MacOS';
|
185
|
+
if (platform === 'win32') return 'Windows';
|
186
|
+
if (platform === 'freebsd') return 'FreeBSD';
|
187
|
+
if (platform === 'openbsd') return 'OpenBSD';
|
188
|
+
if (platform === 'linux') return 'Linux';
|
189
|
+
if (platform) return `Other:${platform}`;
|
190
|
+
return 'Unknown';
|
191
|
+
};
|
192
|
+
|
193
|
+
let _platformHeaders: PlatformProperties;
|
194
|
+
export const getPlatformHeaders = () => {
|
195
|
+
return (_platformHeaders ??= getPlatformProperties());
|
196
|
+
};
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
2
|
+
|
3
|
+
export function isAbortError(err: unknown) {
|
4
|
+
return (
|
5
|
+
typeof err === 'object' &&
|
6
|
+
err !== null &&
|
7
|
+
// Spec-compliant fetch implementations
|
8
|
+
(('name' in err && (err as any).name === 'AbortError') ||
|
9
|
+
// Expo fetch
|
10
|
+
('message' in err && String((err as any).message).includes('FetchRequestCanceledException')))
|
11
|
+
);
|
12
|
+
}
|
13
|
+
|
14
|
+
export const castToError = (err: any): Error => {
|
15
|
+
if (err instanceof Error) return err;
|
16
|
+
if (typeof err === 'object' && err !== null) {
|
17
|
+
try {
|
18
|
+
return new Error(JSON.stringify(err));
|
19
|
+
} catch {}
|
20
|
+
}
|
21
|
+
return new Error(err);
|
22
|
+
};
|
@@ -0,0 +1,96 @@
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
2
|
+
|
3
|
+
type HeaderValue = string | undefined | null;
|
4
|
+
export type HeadersLike =
|
5
|
+
| Headers
|
6
|
+
| readonly [string, HeaderValue][]
|
7
|
+
| Record<string, HeaderValue | readonly HeaderValue[]>
|
8
|
+
| undefined
|
9
|
+
| null
|
10
|
+
| NullableHeaders;
|
11
|
+
|
12
|
+
const brand_privateNullableHeaders = Symbol('brand.privateNullableHeaders');
|
13
|
+
|
14
|
+
/**
|
15
|
+
* @internal
|
16
|
+
* Users can pass explicit nulls to unset default headers. When we parse them
|
17
|
+
* into a standard headers type we need to preserve that information.
|
18
|
+
*/
|
19
|
+
export type NullableHeaders = {
|
20
|
+
/** Brand check, prevent users from creating a NullableHeaders. */
|
21
|
+
[brand_privateNullableHeaders]: true;
|
22
|
+
/** Parsed headers. */
|
23
|
+
values: Headers;
|
24
|
+
/** Set of lowercase header names explicitly set to null. */
|
25
|
+
nulls: Set<string>;
|
26
|
+
};
|
27
|
+
|
28
|
+
const isArray = Array.isArray as (val: unknown) => val is readonly unknown[];
|
29
|
+
|
30
|
+
function* iterateHeaders(headers: HeadersLike): IterableIterator<readonly [string, string | null]> {
|
31
|
+
if (!headers) return;
|
32
|
+
|
33
|
+
if (brand_privateNullableHeaders in headers) {
|
34
|
+
const { values, nulls } = headers;
|
35
|
+
yield* values.entries();
|
36
|
+
for (const name of nulls) {
|
37
|
+
yield [name, null];
|
38
|
+
}
|
39
|
+
return;
|
40
|
+
}
|
41
|
+
|
42
|
+
let shouldClear = false;
|
43
|
+
let iter: Iterable<readonly [string, HeaderValue | readonly HeaderValue[]]>;
|
44
|
+
if (headers instanceof Headers) {
|
45
|
+
iter = headers.entries();
|
46
|
+
} else if (isArray(headers)) {
|
47
|
+
iter = headers;
|
48
|
+
} else {
|
49
|
+
shouldClear = true;
|
50
|
+
iter = Object.entries(headers ?? {});
|
51
|
+
}
|
52
|
+
for (let row of iter) {
|
53
|
+
const name = row[0];
|
54
|
+
const values = isArray(row[1]) ? row[1] : [row[1]];
|
55
|
+
let didClear = false;
|
56
|
+
for (const value of values) {
|
57
|
+
if (value === undefined) continue;
|
58
|
+
|
59
|
+
// Objects keys always overwrite older headers, they never append.
|
60
|
+
// Yield a null to clear the header before adding the new values.
|
61
|
+
if (shouldClear && !didClear) {
|
62
|
+
didClear = true;
|
63
|
+
yield [name, null];
|
64
|
+
}
|
65
|
+
yield [name, value];
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
export const buildHeaders = (newHeaders: HeadersLike[]): NullableHeaders => {
|
71
|
+
const targetHeaders = new Headers();
|
72
|
+
const nullHeaders = new Set<string>();
|
73
|
+
const seenHeaders = new Set<string>();
|
74
|
+
for (const headers of newHeaders) {
|
75
|
+
for (const [name, value] of iterateHeaders(headers)) {
|
76
|
+
const lowerName = name.toLowerCase();
|
77
|
+
if (!seenHeaders.has(lowerName)) {
|
78
|
+
targetHeaders.delete(name);
|
79
|
+
seenHeaders.add(lowerName);
|
80
|
+
}
|
81
|
+
if (value === null) {
|
82
|
+
targetHeaders.delete(name);
|
83
|
+
nullHeaders.add(lowerName);
|
84
|
+
} else {
|
85
|
+
targetHeaders.append(name, value);
|
86
|
+
nullHeaders.delete(lowerName);
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };
|
91
|
+
};
|
92
|
+
|
93
|
+
export const isEmptyHeaders = (headers: HeadersLike) => {
|
94
|
+
for (const _ of iterateHeaders(headers)) return false;
|
95
|
+
return true;
|
96
|
+
};
|
@@ -0,0 +1,41 @@
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
2
|
+
|
3
|
+
import type { FinalRequestOptions } from './request-options';
|
4
|
+
import { type Petstore } from '../client';
|
5
|
+
import { logger } from './utils/log';
|
6
|
+
|
7
|
+
export type APIResponseProps = {
|
8
|
+
response: Response;
|
9
|
+
options: FinalRequestOptions;
|
10
|
+
controller: AbortController;
|
11
|
+
};
|
12
|
+
|
13
|
+
export async function defaultParseResponse<T>(client: Petstore, props: APIResponseProps): Promise<T> {
|
14
|
+
const { response } = props;
|
15
|
+
|
16
|
+
// fetch refuses to read the body when the status code is 204.
|
17
|
+
if (response.status === 204) {
|
18
|
+
return null as T;
|
19
|
+
}
|
20
|
+
|
21
|
+
if (props.options.__binaryResponse) {
|
22
|
+
return response as unknown as T;
|
23
|
+
}
|
24
|
+
|
25
|
+
const contentType = response.headers.get('content-type');
|
26
|
+
const isJSON =
|
27
|
+
contentType?.includes('application/json') || contentType?.includes('application/vnd.api+json');
|
28
|
+
if (isJSON) {
|
29
|
+
const json = await response.json();
|
30
|
+
|
31
|
+
logger(client).debug('response', response.status, response.url, response.headers, json);
|
32
|
+
|
33
|
+
return json as T;
|
34
|
+
}
|
35
|
+
|
36
|
+
const text = await response.text();
|
37
|
+
logger(client).debug('response', response.status, response.url, response.headers, text);
|
38
|
+
|
39
|
+
// TODO handle blob, arraybuffer, other content types, etc.
|
40
|
+
return text as unknown as T;
|
41
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
export declare const crypto: {
|
2
|
+
/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/getRandomValues) */
|
3
|
+
getRandomValues<T extends ArrayBufferView | null>(array: T): T;
|
4
|
+
/**
|
5
|
+
* Available only in secure contexts.
|
6
|
+
*
|
7
|
+
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/Crypto/randomUUID)
|
8
|
+
*/
|
9
|
+
randomUUID?: () => string;
|
10
|
+
};
|
@@ -0,0 +1,11 @@
|
|
1
|
+
if (typeof require !== 'undefined') {
|
2
|
+
if (globalThis.crypto) {
|
3
|
+
exports.crypto = globalThis.crypto;
|
4
|
+
} else {
|
5
|
+
try {
|
6
|
+
// Use [require][0](...) and not require(...) so bundlers don't try to bundle the
|
7
|
+
// crypto module.
|
8
|
+
exports.crypto = [require][0]('node:crypto').webcrypto;
|
9
|
+
} catch (e) {}
|
10
|
+
}
|
11
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
/**
|
2
|
+
* This file polyfills the global `File` object for you if it's not already defined
|
3
|
+
* when running on Node.js
|
4
|
+
*
|
5
|
+
* This is only needed on Node.js v18 & v19. Newer versions already define `File`
|
6
|
+
* as a global.
|
7
|
+
*/
|
8
|
+
|
9
|
+
if (typeof require !== 'undefined') {
|
10
|
+
if (!globalThis.File) {
|
11
|
+
try {
|
12
|
+
// Use [require][0](...) and not require(...) so bundlers don't try to bundle the
|
13
|
+
// buffer module.
|
14
|
+
globalThis.File = [require][0]('node:buffer').File;
|
15
|
+
} catch (e) {}
|
16
|
+
}
|
17
|
+
}
|