@mapcreator/api 5.0.0-alpha.54 → 5.0.0-alpha.56
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/cjs/api/font.d.ts.map +1 -1
- package/cjs/api/font.js.map +1 -1
- package/cjs/api/jobRevision.d.ts.map +1 -1
- package/cjs/api/jobRevision.js +6 -4
- package/cjs/api/jobRevision.js.map +1 -1
- package/cjs/api/resources.d.ts +1 -1
- package/cjs/api/resources.d.ts.map +1 -1
- package/cjs/api/resources.js.map +1 -1
- package/cjs/index.d.ts +1 -2
- package/cjs/index.d.ts.map +1 -1
- package/cjs/index.js +2 -3
- package/cjs/index.js.map +1 -1
- package/cjs/oauth.d.ts +6 -12
- package/cjs/oauth.d.ts.map +1 -1
- package/cjs/oauth.js +203 -38
- package/cjs/oauth.js.map +1 -1
- package/cjs/utils.d.ts +2 -0
- package/cjs/utils.d.ts.map +1 -1
- package/cjs/utils.js +9 -5
- package/cjs/utils.js.map +1 -1
- package/esm/api/font.d.ts.map +1 -1
- package/esm/api/font.js +1 -1
- package/esm/api/font.js.map +1 -1
- package/esm/api/jobRevision.d.ts.map +1 -1
- package/esm/api/jobRevision.js +7 -5
- package/esm/api/jobRevision.js.map +1 -1
- package/esm/api/resources.d.ts +1 -1
- package/esm/api/resources.d.ts.map +1 -1
- package/esm/api/resources.js.map +1 -1
- package/esm/index.d.ts +1 -2
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -2
- package/esm/index.js.map +1 -1
- package/esm/oauth.d.ts +6 -12
- package/esm/oauth.d.ts.map +1 -1
- package/esm/oauth.js +201 -35
- package/esm/oauth.js.map +1 -1
- package/esm/utils.d.ts +2 -0
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +7 -4
- package/esm/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/api/font.ts +1 -9
- package/src/api/jobRevision.ts +6 -4
- package/src/api/resources.ts +2 -1
- package/src/index.ts +1 -4
- package/src/oauth.ts +253 -36
- package/src/utils.ts +7 -4
package/esm/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { apiHost, authenticate, token } from './oauth.js';
|
|
2
2
|
export const myUser = 'me';
|
|
3
3
|
export const myOrganisations = 'mine';
|
|
4
4
|
export const lastJobRevision = 'last';
|
|
@@ -6,6 +6,9 @@ export const defaultListHeader = { 'X-Per-Page': '50' };
|
|
|
6
6
|
export const deletedNoneParam = getSearchParams({ deleted: 'none' });
|
|
7
7
|
export const keysToRemove = ['created_at', 'deleted_at', 'updated_at'];
|
|
8
8
|
export const staticContext = { keysToRemove: new Set(keysToRemove), keysToAdd: [], revivers: {} };
|
|
9
|
+
// class AuthorizationError extends Error {}
|
|
10
|
+
export class NetworkError extends Error {
|
|
11
|
+
}
|
|
9
12
|
export class HTTPError extends Error {
|
|
10
13
|
constructor(response) {
|
|
11
14
|
super(response.statusText);
|
|
@@ -127,6 +130,7 @@ export async function request(path, body, extraHeaders, extraOptions) {
|
|
|
127
130
|
}
|
|
128
131
|
function getRequestInit(body, extraHeaders, extraOptions) {
|
|
129
132
|
var _a;
|
|
133
|
+
const authorization = token ? { Authorization: token.toString() } : null;
|
|
130
134
|
let contentType = null;
|
|
131
135
|
if (body !== undefined) {
|
|
132
136
|
switch (true) {
|
|
@@ -150,10 +154,9 @@ function getRequestInit(body, extraHeaders, extraOptions) {
|
|
|
150
154
|
body = JSON.stringify(body);
|
|
151
155
|
}
|
|
152
156
|
}
|
|
153
|
-
const method = (_a = extraOptions === null || extraOptions === void 0 ? void 0 : extraOptions.method) !== null && _a !== void 0 ? _a : (body != null ? 'POST' : 'GET'); // don't touch `!=` please
|
|
154
|
-
const authorization = getAuthorizationHeaders(method);
|
|
155
157
|
const headers = Object.assign(Object.assign(Object.assign({ Accept: 'application/json' }, authorization), contentType), extraHeaders);
|
|
156
|
-
|
|
158
|
+
const method = (_a = extraOptions === null || extraOptions === void 0 ? void 0 : extraOptions.method) !== null && _a !== void 0 ? _a : (body != null ? 'POST' : 'GET'); // don't touch `!=` please
|
|
159
|
+
return { body, headers, method };
|
|
157
160
|
}
|
|
158
161
|
export function getContext(revivers, keys = Object.keys(revivers)) {
|
|
159
162
|
return {
|
package/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/api/font.ts
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
type ApiCommonData,
|
|
3
|
-
type ApiError,
|
|
4
|
-
type ApiSuccess,
|
|
5
|
-
type Flatten,
|
|
6
|
-
type Revivers,
|
|
7
|
-
getSearchParams,
|
|
8
|
-
request,
|
|
9
|
-
} from '../utils.js';
|
|
1
|
+
import { type ApiCommonData, type ApiError, type ApiSuccess, type Flatten, type Revivers, getSearchParams, request } from '../utils.js';
|
|
10
2
|
|
|
11
3
|
export type Font = {
|
|
12
4
|
id: number;
|
package/src/api/jobRevision.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { NetworkError, apiHost, authenticate, getAuthorizationHeaders, token } from '../oauth.js';
|
|
2
1
|
import { type ApiLayerData, type Layer, layerRevivers } from './layer.js';
|
|
2
|
+
import { apiHost, authenticate, token } from '../oauth.js';
|
|
3
3
|
import type { ApiMapstyleSetData } from './mapstyleSet.js';
|
|
4
4
|
import type { ApiLanguageData } from './language.js';
|
|
5
5
|
import {
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
type ApiSuccess,
|
|
11
11
|
type Flatten,
|
|
12
12
|
HTTPError,
|
|
13
|
+
NetworkError,
|
|
13
14
|
type Revivers,
|
|
14
15
|
defaultListHeader,
|
|
15
16
|
deletedNoneParam,
|
|
@@ -219,9 +220,10 @@ export async function getJobRevisionOutput(jobId: number): Promise<JobRevisionOu
|
|
|
219
220
|
await createJobRevisionBuild(jobId);
|
|
220
221
|
|
|
221
222
|
const href = `${apiHost}/v1/jobs/${jobId}/revisions/${lastJobRevision}/result/output`;
|
|
222
|
-
const headers =
|
|
223
|
-
const response = await fetch(href, { headers
|
|
224
|
-
|
|
223
|
+
const headers = { ...(token ? { Authorization: token.toString() } : null) };
|
|
224
|
+
const response = await fetch(href, { headers }).catch((error: Error) => {
|
|
225
|
+
throw new NetworkError(error?.message ?? error);
|
|
226
|
+
});
|
|
225
227
|
|
|
226
228
|
if (response.ok) {
|
|
227
229
|
const blob = await response.blob().catch(() => {
|
package/src/api/resources.ts
CHANGED
package/src/index.ts
CHANGED
package/src/oauth.ts
CHANGED
|
@@ -8,22 +8,27 @@ export let token: {
|
|
|
8
8
|
toString: () => string;
|
|
9
9
|
} | null = null;
|
|
10
10
|
|
|
11
|
+
let apiClientId = '';
|
|
11
12
|
let callbackUrl = '';
|
|
13
|
+
let oauthScopes = ['*'];
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
export class NetworkError extends Error {}
|
|
15
|
+
const anchorParams = ['access_token', 'token_type', 'expires_in', 'state'];
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
for (let i = 0; i < window.localStorage.length; ++i) {
|
|
20
|
-
const key = window.localStorage.key(i);
|
|
17
|
+
const storagePrefix = '_m4n_';
|
|
18
|
+
const statePrefix = 'oauth_state_';
|
|
19
|
+
const storageName = 'api_token';
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
const dummyTokenExpires = new Date('2100-01-01T01:00:00');
|
|
22
|
+
|
|
23
|
+
interface AnchorToken {
|
|
24
|
+
access_token: string;
|
|
25
|
+
token_type: string;
|
|
26
|
+
expires_in: string;
|
|
27
|
+
state: string;
|
|
25
28
|
}
|
|
26
29
|
|
|
30
|
+
const titleCase = (str: unknown): string => String(str).toLowerCase().replace(/\b\w/g, c => c.toUpperCase());
|
|
31
|
+
|
|
27
32
|
/**
|
|
28
33
|
* Setup internal structures to use dummy authentication flow
|
|
29
34
|
*
|
|
@@ -35,9 +40,9 @@ export function initDummyFlow(apiUrl: string, oauthToken: string): void {
|
|
|
35
40
|
|
|
36
41
|
apiHost = apiUrl.replace(/\/+$/, '');
|
|
37
42
|
token = {
|
|
38
|
-
type: parts[0]
|
|
43
|
+
type: titleCase(parts[0]),
|
|
39
44
|
token: parts[1],
|
|
40
|
-
expires:
|
|
45
|
+
expires: dummyTokenExpires,
|
|
41
46
|
|
|
42
47
|
toString(): string {
|
|
43
48
|
return `${this.type} ${this.token}`;
|
|
@@ -49,49 +54,261 @@ export function initDummyFlow(apiUrl: string, oauthToken: string): void {
|
|
|
49
54
|
* Setup internal structures to use implicit authentication flow
|
|
50
55
|
*
|
|
51
56
|
* @param {string} apiUrl - Full API URL
|
|
57
|
+
* @param {string} clientId - OAuth client id
|
|
52
58
|
* @param {string} [redirectUrl] - Callback URL
|
|
59
|
+
* @param {string[]} [scopes] - A list of required scopes
|
|
53
60
|
*/
|
|
54
|
-
export function initImplicitFlow(apiUrl: string, redirectUrl = ''): void {
|
|
61
|
+
export function initImplicitFlow(apiUrl: string, clientId: string, redirectUrl = '', scopes = ['*']): void {
|
|
55
62
|
apiHost = apiUrl.replace(/\/+$/, '');
|
|
56
63
|
|
|
64
|
+
apiClientId = String(clientId);
|
|
57
65
|
callbackUrl = String(redirectUrl || window.location.href.split('#')[0]);
|
|
66
|
+
oauthScopes = scopes;
|
|
67
|
+
|
|
68
|
+
{
|
|
69
|
+
const key = `${storagePrefix}${storageName}`;
|
|
70
|
+
const data = window.localStorage.getItem(key);
|
|
71
|
+
|
|
72
|
+
if (data) {
|
|
73
|
+
try {
|
|
74
|
+
const obj = JSON.parse(data) as { type?: unknown; token?: unknown; expires?: unknown };
|
|
75
|
+
|
|
76
|
+
if (
|
|
77
|
+
typeof obj.type === 'string' &&
|
|
78
|
+
typeof obj.token === 'string' &&
|
|
79
|
+
typeof obj.expires === 'string' &&
|
|
80
|
+
new Date(obj.expires) > new Date()
|
|
81
|
+
) {
|
|
82
|
+
token = {
|
|
83
|
+
type: titleCase(obj.type),
|
|
84
|
+
token: obj.token,
|
|
85
|
+
expires: new Date(obj.expires),
|
|
86
|
+
|
|
87
|
+
toString(): string {
|
|
88
|
+
return `${this.type} ${this.token}`;
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
} else {
|
|
92
|
+
window.localStorage.removeItem(key);
|
|
93
|
+
}
|
|
94
|
+
} catch (e) {
|
|
95
|
+
/* */
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
{
|
|
101
|
+
const obj = getAnchorToken();
|
|
102
|
+
|
|
103
|
+
if (isAnchorToken(obj)) {
|
|
104
|
+
// We'll not go there if anchor contains error and/or message
|
|
105
|
+
// This means that anchor parameters will be preserved for the next processing
|
|
106
|
+
cleanAnchorParams();
|
|
107
|
+
|
|
108
|
+
const expires = new Date(Date.now() + Number(obj.expires_in) * 1000);
|
|
109
|
+
|
|
110
|
+
if (isValidState(obj.state) && expires > new Date()) {
|
|
111
|
+
token = {
|
|
112
|
+
type: titleCase(obj.token_type),
|
|
113
|
+
token: obj.access_token,
|
|
114
|
+
expires,
|
|
115
|
+
|
|
116
|
+
toString(): string {
|
|
117
|
+
return `${this.type} ${this.token}`;
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const key = `${storagePrefix}${storageName}`;
|
|
122
|
+
const data = { type: token.type, token: token.token, expires: expires.toUTCString() };
|
|
123
|
+
|
|
124
|
+
window.localStorage.setItem(key, JSON.stringify(data));
|
|
125
|
+
} else {
|
|
126
|
+
// TODO: add some logic to handle this
|
|
127
|
+
// throw Error('Invalid state in url');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
58
131
|
|
|
59
|
-
|
|
132
|
+
if (authenticated()) {
|
|
133
|
+
const href = sessionStorage.getItem('redirect-url');
|
|
60
134
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
135
|
+
if (href) {
|
|
136
|
+
sessionStorage.removeItem('redirect-url');
|
|
137
|
+
window.history.replaceState(null, document.title, href);
|
|
138
|
+
}
|
|
64
139
|
}
|
|
65
140
|
}
|
|
66
141
|
|
|
67
|
-
export async function authenticate(): Promise<
|
|
142
|
+
export async function authenticate(): Promise<string> | never {
|
|
68
143
|
return new Promise(() => {
|
|
144
|
+
if (anchorContainsError()) {
|
|
145
|
+
console.error(getError());
|
|
146
|
+
cleanAnchorParams();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
forget();
|
|
150
|
+
|
|
69
151
|
sessionStorage.setItem('redirect-url', window.location.href);
|
|
70
|
-
window.location.assign(
|
|
152
|
+
window.location.assign(buildRedirectUrl());
|
|
71
153
|
});
|
|
72
154
|
}
|
|
73
155
|
|
|
74
|
-
export
|
|
75
|
-
|
|
76
|
-
|
|
156
|
+
export function authenticated(): boolean {
|
|
157
|
+
return token != null && token.expires > new Date() && (
|
|
158
|
+
token.expires.valueOf() === dummyTokenExpires.valueOf() ||
|
|
159
|
+
!!window.localStorage.getItem(`${storagePrefix}${storageName}`)
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export async function logout(): Promise<void> {
|
|
164
|
+
if (token) {
|
|
165
|
+
await fetch(`${apiHost}/oauth/logout`, {
|
|
166
|
+
method: 'POST',
|
|
167
|
+
headers: {
|
|
168
|
+
Accept: 'application/json',
|
|
169
|
+
Authorization: token.toString(),
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
forget();
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function forget(): void {
|
|
178
|
+
for (let i = 0; i < window.localStorage.length; ++i) {
|
|
179
|
+
const key = window.localStorage.key(i);
|
|
180
|
+
|
|
181
|
+
if (key?.startsWith(storagePrefix)) {
|
|
182
|
+
window.localStorage.removeItem(key);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
token = null;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function buildRedirectUrl(): string {
|
|
190
|
+
const queryParams = new URLSearchParams({
|
|
191
|
+
client_id: apiClientId,
|
|
192
|
+
redirect_uri: callbackUrl,
|
|
193
|
+
response_type: 'token',
|
|
194
|
+
scope: oauthScopes.join(' '),
|
|
195
|
+
state: generateState(),
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
return `${apiHost}/oauth/authorize?${queryParams}`;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function getAnchorQuery(): string {
|
|
202
|
+
return window.location.hash.replace(/^#\/?/, '');
|
|
203
|
+
}
|
|
77
204
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
205
|
+
function getAnchorParams(): Record<string, unknown> {
|
|
206
|
+
const query = getAnchorQuery();
|
|
207
|
+
// eslint-disable-next-line @stylistic/padding-line-between-statements,@typescript-eslint/no-unsafe-return
|
|
208
|
+
return Object.fromEntries(query.split('&').map(pair => pair.split('=').map(decodeURIComponent)));
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
function getAnchorToken(): Partial<AnchorToken> {
|
|
212
|
+
const params = getAnchorParams();
|
|
213
|
+
|
|
214
|
+
return Object.fromEntries(Object.entries(params).filter(([key]) => anchorParams.includes(key)));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function isAnchorToken(anchorToken: Partial<AnchorToken>): anchorToken is AnchorToken {
|
|
218
|
+
const queryKeys = Object.keys(anchorToken);
|
|
219
|
+
|
|
220
|
+
return anchorParams.every(key => queryKeys.includes(key));
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function cleanAnchorParams(): void {
|
|
224
|
+
const query = window.location.hash.replace(/^#\/?/, '');
|
|
225
|
+
const targets = [...anchorParams, 'error', 'message'];
|
|
226
|
+
const newHash = query
|
|
227
|
+
.split('&')
|
|
228
|
+
.filter(pair => !targets.includes(decodeURIComponent(pair.split('=')[0])))
|
|
229
|
+
.join('&');
|
|
230
|
+
|
|
231
|
+
if (newHash) {
|
|
232
|
+
window.location.hash = newHash;
|
|
233
|
+
} else {
|
|
234
|
+
const { origin, pathname, search } = window.location;
|
|
235
|
+
|
|
236
|
+
window.history.replaceState(null, document.title, `${origin}${pathname}${search}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
function isValidState(state: string): boolean {
|
|
241
|
+
const key = `${storagePrefix}${statePrefix}${state}`;
|
|
242
|
+
const found = window.localStorage.getItem(key) != null;
|
|
243
|
+
|
|
244
|
+
if (found) {
|
|
245
|
+
window.localStorage.removeItem(key);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
return found;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function anchorContainsError(): boolean {
|
|
252
|
+
return 'error' in getAnchorParams();
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function generateState(): string {
|
|
256
|
+
// @ts-expect-error TS2365
|
|
257
|
+
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
258
|
+
const state = (([1e7] + -1e3 + -4e3 + -8e3 + -1e11) as string).replace(
|
|
259
|
+
/[018]/g, // @ts-expect-error TS2362
|
|
260
|
+
c => (c ^ ((Math.random() * 256) & (0x0f >>> (c >>> 2)))).toString(16),
|
|
81
261
|
);
|
|
262
|
+
const key = `${storagePrefix}${statePrefix}${state}`;
|
|
263
|
+
|
|
264
|
+
window.localStorage.setItem(key, `${Date.now()}`);
|
|
265
|
+
|
|
266
|
+
return state;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
class OAuthError extends Error {
|
|
270
|
+
error: string;
|
|
271
|
+
|
|
272
|
+
constructor(message: string, error: unknown) {
|
|
273
|
+
super(message);
|
|
274
|
+
|
|
275
|
+
this.error = String(error);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
toString(): string {
|
|
279
|
+
let error = this.error;
|
|
280
|
+
|
|
281
|
+
if (error.includes('_')) {
|
|
282
|
+
error = error.replace('_', ' ').replace(/^./, c => c.toUpperCase());
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return this.message ? `${error}: ${this.message}` : error;
|
|
286
|
+
}
|
|
82
287
|
}
|
|
83
288
|
|
|
84
|
-
|
|
85
|
-
|
|
289
|
+
function getError(): OAuthError {
|
|
290
|
+
const params = getAnchorParams();
|
|
86
291
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
292
|
+
return params.message
|
|
293
|
+
? new OAuthError(params.message as string, params.error)
|
|
294
|
+
: new OAuthError(titleCase(params.error), params.error);
|
|
295
|
+
}
|
|
91
296
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
297
|
+
/**
|
|
298
|
+
* Our goal is to support even obsolete platforms (ES2017+ / Node.js 8.10+).
|
|
299
|
+
* This is a small polyfill for possibly missing method used in our codebase.
|
|
300
|
+
*/
|
|
301
|
+
if (!Object.fromEntries) { // eslint-disable-next-line arrow-body-style
|
|
302
|
+
Object.fromEntries = <T = never>(entries: Iterable<readonly [string | number, T]>): { [k: string]: T } => {
|
|
303
|
+
return Array.from(entries).reduce<{ [k: string]: T }>(
|
|
304
|
+
(object, entry) => {
|
|
305
|
+
if (!Array.isArray(entry)) {
|
|
306
|
+
throw new TypeError(`Iterator value ${entry as unknown as string} is not an entry object.`);
|
|
307
|
+
}
|
|
308
|
+
object[`${entry[0]}`] = entry[1];
|
|
309
|
+
|
|
310
|
+
return object;
|
|
311
|
+
}, {}
|
|
312
|
+
);
|
|
313
|
+
};
|
|
97
314
|
}
|
package/src/utils.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { NetworkError, apiHost, authenticate, getAuthorizationHeaders, token } from './oauth.js';
|
|
2
1
|
import type { CamelCasedProperties, SnakeCasedProperties } from 'type-fest';
|
|
2
|
+
import { apiHost, authenticate, token } from './oauth.js';
|
|
3
3
|
|
|
4
4
|
export type Flatten<Type> = Type extends Array<infer Item> ? Item : Type;
|
|
5
5
|
|
|
@@ -36,6 +36,9 @@ export const deletedNoneParam = getSearchParams({ deleted: 'none' });
|
|
|
36
36
|
export const keysToRemove = ['created_at', 'deleted_at', 'updated_at'];
|
|
37
37
|
export const staticContext = { keysToRemove: new Set(keysToRemove), keysToAdd: [], revivers: {} };
|
|
38
38
|
|
|
39
|
+
// class AuthorizationError extends Error {}
|
|
40
|
+
export class NetworkError extends Error {}
|
|
41
|
+
|
|
39
42
|
export class HTTPError extends Error {
|
|
40
43
|
statusCode: number;
|
|
41
44
|
constructor(response: Response) {
|
|
@@ -230,6 +233,7 @@ function getRequestInit<I extends ApiCommon, O extends Record<string, unknown>>(
|
|
|
230
233
|
extraHeaders?: Record<string, string> | null,
|
|
231
234
|
extraOptions?: ExtraOptions<I, O>,
|
|
232
235
|
): RequestInit {
|
|
236
|
+
const authorization = token ? { Authorization: token.toString() } : null;
|
|
233
237
|
let contentType = null as { 'Content-Type': string } | null;
|
|
234
238
|
|
|
235
239
|
if (body !== undefined) {
|
|
@@ -255,11 +259,10 @@ function getRequestInit<I extends ApiCommon, O extends Record<string, unknown>>(
|
|
|
255
259
|
}
|
|
256
260
|
}
|
|
257
261
|
|
|
258
|
-
const method = extraOptions?.method ?? (body != null ? 'POST' : 'GET'); // don't touch `!=` please
|
|
259
|
-
const authorization = getAuthorizationHeaders(method);
|
|
260
262
|
const headers = { Accept: 'application/json', ...authorization, ...contentType, ...extraHeaders };
|
|
263
|
+
const method = extraOptions?.method ?? (body != null ? 'POST' : 'GET'); // don't touch `!=` please
|
|
261
264
|
|
|
262
|
-
return { body, headers, method
|
|
265
|
+
return { body, headers, method } as RequestInit;
|
|
263
266
|
}
|
|
264
267
|
|
|
265
268
|
interface Context<I extends ApiCommon, O extends Record<string, unknown>> {
|