-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBaseClient.ts
More file actions
115 lines (103 loc) · 4.46 KB
/
Copy pathBaseClient.ts
File metadata and controls
115 lines (103 loc) · 4.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
// This file was auto-generated by Fern from our API Definition.
import { AnyAuthProvider } from "./auth/AnyAuthProvider.js";
import { BearerAuthProvider } from "./auth/BearerAuthProvider.js";
import { HeaderAuthProvider } from "./auth/HeaderAuthProvider.js";
import { mergeHeaders } from "./core/headers.js";
import * as core from "./core/index.js";
import type * as environments from "./environments.js";
export type AuthOption =
| false
| core.AuthProvider["getAuthRequest"]
| core.AuthProvider
| AnyAuthProvider.AuthOptions<[HeaderAuthProvider.AuthOptions, BearerAuthProvider.AuthOptions]>;
export type BaseClientOptions = {
environment?: core.Supplier<environments.IcePanelEnvironment | string>;
/** Specify a custom URL to connect the client to. */
baseUrl?: core.Supplier<string>;
/** Additional headers to include in requests. */
headers?: Record<string, string | core.Supplier<string | null | undefined> | null | undefined>;
/** The default maximum time to wait for a response in seconds. */
timeoutInSeconds?: number;
/** The default number of times to retry the request. Defaults to 2. */
maxRetries?: number;
/** Provide a custom fetch implementation. Useful for platforms that don't have a built-in fetch or need a custom implementation. */
fetch?: typeof fetch;
/** Configure logging for the client. */
logging?: core.logging.LogConfig | core.logging.Logger;
/** Override auth. Pass false to disable, a function returning auth headers, an AuthProvider, or auth options. */
auth?: AuthOption;
} & AnyAuthProvider.AuthOptions<[HeaderAuthProvider.AuthOptions, BearerAuthProvider.AuthOptions]>;
export interface BaseRequestOptions {
/** The maximum time to wait for a response in seconds. */
timeoutInSeconds?: number;
/** The number of times to retry the request. Defaults to 2. */
maxRetries?: number;
/** A hook to abort the request. */
abortSignal?: AbortSignal;
/** Additional query string parameters to include in the request. */
queryParams?: Record<string, unknown>;
/** Additional headers to include in the request. */
headers?: Record<string, string | core.Supplier<string | null | undefined> | null | undefined>;
}
export type NormalizedClientOptions<T extends BaseClientOptions = BaseClientOptions> = T & {
logging: core.logging.Logger;
authProvider?: core.AuthProvider;
};
export type NormalizedClientOptionsWithAuth<T extends BaseClientOptions = BaseClientOptions> =
NormalizedClientOptions<T> & {
authProvider: core.AuthProvider;
};
export function normalizeClientOptions<T extends BaseClientOptions = BaseClientOptions>(
options: T,
): NormalizedClientOptions<T> {
const headers = mergeHeaders(
{
"X-Fern-Language": "JavaScript",
"X-Fern-SDK-Name": "@icepanel/sdk",
"X-Fern-SDK-Version": "0.1.9",
"User-Agent": "@icepanel/sdk/0.1.9",
"X-Fern-Runtime": core.RUNTIME.type,
"X-Fern-Runtime-Version": core.RUNTIME.version,
},
options?.headers,
);
return {
...options,
logging: core.logging.createLogger(options?.logging),
headers,
} as NormalizedClientOptions<T>;
}
export function normalizeClientOptionsWithAuth<T extends BaseClientOptions = BaseClientOptions>(
options: T,
): NormalizedClientOptionsWithAuth<T> {
const normalized = normalizeClientOptions(options) as NormalizedClientOptionsWithAuth<T>;
if (options.auth === false) {
normalized.authProvider = new core.NoOpAuthProvider();
return normalized;
}
if (options.auth != null) {
if (typeof options.auth === "function") {
normalized.authProvider = { getAuthRequest: options.auth };
return normalized;
}
if (core.isAuthProvider(options.auth)) {
normalized.authProvider = options.auth;
return normalized;
}
Object.assign(normalized, options.auth);
}
const normalizedWithNoOpAuthProvider = withNoOpAuthProvider(normalized);
normalized.authProvider ??= AnyAuthProvider.createInstance(normalizedWithNoOpAuthProvider, [
HeaderAuthProvider,
BearerAuthProvider,
]);
return normalized;
}
function withNoOpAuthProvider<T extends BaseClientOptions = BaseClientOptions>(
options: NormalizedClientOptions<T>,
): NormalizedClientOptionsWithAuth<T> {
return {
...options,
authProvider: new core.NoOpAuthProvider(),
};
}