@mapcreator/api 5.0.0-alpha.69 → 5.0.0-alpha.71
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/choropleth.d.ts +32 -0
- package/cjs/api/choropleth.d.ts.map +1 -1
- package/cjs/api/choropleth.js +11 -0
- package/cjs/api/choropleth.js.map +1 -1
- package/cjs/api/font.d.ts.map +1 -1
- package/cjs/api/font.js.map +1 -1
- package/cjs/api/insetMap.d.ts.map +1 -1
- package/cjs/api/insetMap.js +5 -3
- package/cjs/api/insetMap.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/oauth.d.ts +6 -9
- package/cjs/oauth.d.ts.map +1 -1
- package/cjs/oauth.js +203 -28
- package/cjs/oauth.js.map +1 -1
- package/cjs/utils.d.ts.map +1 -1
- package/cjs/utils.js +3 -3
- package/cjs/utils.js.map +1 -1
- package/esm/api/choropleth.d.ts +32 -0
- package/esm/api/choropleth.d.ts.map +1 -1
- package/esm/api/choropleth.js +9 -0
- package/esm/api/choropleth.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/insetMap.d.ts.map +1 -1
- package/esm/api/insetMap.js +6 -4
- package/esm/api/insetMap.js.map +1 -1
- package/esm/api/jobRevision.d.ts.map +1 -1
- package/esm/api/jobRevision.js +6 -4
- package/esm/api/jobRevision.js.map +1 -1
- package/esm/oauth.d.ts +6 -9
- package/esm/oauth.d.ts.map +1 -1
- package/esm/oauth.js +201 -27
- package/esm/oauth.js.map +1 -1
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +4 -4
- package/esm/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/api/choropleth.ts +63 -0
- package/src/api/font.ts +1 -9
- package/src/api/insetMap.ts +5 -4
- package/src/api/jobRevision.ts +5 -4
- package/src/oauth.ts +258 -28
- package/src/utils.ts +4 -4
package/esm/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/esm/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { apiHost, authenticate,
|
|
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';
|
|
@@ -130,6 +130,7 @@ export async function request(path, body, extraHeaders, extraOptions) {
|
|
|
130
130
|
}
|
|
131
131
|
function getRequestInit(body, extraHeaders, extraOptions) {
|
|
132
132
|
var _a;
|
|
133
|
+
const authorization = token ? { Authorization: token.toString() } : null;
|
|
133
134
|
let contentType = null;
|
|
134
135
|
if (body !== undefined) {
|
|
135
136
|
switch (true) {
|
|
@@ -153,10 +154,9 @@ function getRequestInit(body, extraHeaders, extraOptions) {
|
|
|
153
154
|
body = JSON.stringify(body);
|
|
154
155
|
}
|
|
155
156
|
}
|
|
156
|
-
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
|
|
157
|
-
const authorization = getAuthorizationHeaders(method);
|
|
158
157
|
const headers = Object.assign(Object.assign(Object.assign({ Accept: 'application/json' }, authorization), contentType), extraHeaders);
|
|
159
|
-
|
|
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 };
|
|
160
160
|
}
|
|
161
161
|
export function getContext(revivers, keys = Object.keys(revivers)) {
|
|
162
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/choropleth.ts
CHANGED
|
@@ -357,3 +357,66 @@ export async function listChildrenGroupChoropleths(
|
|
|
357
357
|
|
|
358
358
|
return request<ApiPolygonChoroplethArray, PolygonChoropleth>(path).then(polygons => polygons.map(processPolygonData));
|
|
359
359
|
}
|
|
360
|
+
|
|
361
|
+
export type MatchedGroup = {
|
|
362
|
+
id: number;
|
|
363
|
+
sml: number;
|
|
364
|
+
childrenCount: number;
|
|
365
|
+
matchField: string;
|
|
366
|
+
property: string;
|
|
367
|
+
name: string;
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
export type ApiMatchedGroup = {
|
|
371
|
+
id: number;
|
|
372
|
+
sml: number;
|
|
373
|
+
children_count: number;
|
|
374
|
+
match_field: string;
|
|
375
|
+
property: string;
|
|
376
|
+
name: string;
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
export async function getGroupsByDataSample(
|
|
380
|
+
sample: Array<Record<string, string[]>>,
|
|
381
|
+
language: string,
|
|
382
|
+
): Promise<MatchedGroup[]> {
|
|
383
|
+
const path = `/v1/choropleth/groups/sample`;
|
|
384
|
+
|
|
385
|
+
type ApiMatchedGroupArray = {
|
|
386
|
+
data: ApiMatchedGroup[];
|
|
387
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
388
|
+
|
|
389
|
+
return request<ApiMatchedGroupArray, MatchedGroup>(path, { sample, language });
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
export type BoundPolygon = {
|
|
393
|
+
index: number;
|
|
394
|
+
id: number;
|
|
395
|
+
sml: number;
|
|
396
|
+
name: string;
|
|
397
|
+
inputName: string;
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
export type ApiBoundPolygon = {
|
|
401
|
+
index: number;
|
|
402
|
+
id: number;
|
|
403
|
+
sml: number;
|
|
404
|
+
name: string;
|
|
405
|
+
input_name: string;
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
export async function getBoundPolygons(
|
|
409
|
+
groupId: number,
|
|
410
|
+
property: string,
|
|
411
|
+
data: string[],
|
|
412
|
+
language: string,
|
|
413
|
+
): Promise<BoundPolygon[]> {
|
|
414
|
+
const path = `/v1/choropleth/groups/bind`;
|
|
415
|
+
const postBody = { group_id: groupId, property, data, language };
|
|
416
|
+
|
|
417
|
+
type ApiBoundPolygonArray = {
|
|
418
|
+
data: ApiBoundPolygon[];
|
|
419
|
+
} & Omit<ApiSuccess, 'data'> | ApiError;
|
|
420
|
+
|
|
421
|
+
return request<ApiBoundPolygonArray, BoundPolygon>(path, postBody);
|
|
422
|
+
}
|
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/insetMap.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { apiHost, authenticate,
|
|
1
|
+
import { apiHost, authenticate, token } from '../oauth.js';
|
|
2
2
|
import {
|
|
3
3
|
APIError,
|
|
4
4
|
type ApiCommonData,
|
|
@@ -63,9 +63,10 @@ export async function getInsetMap(insetMapId: number): Promise<InsetMap> {
|
|
|
63
63
|
|
|
64
64
|
export async function getInsetMapTopoJson<TopoJSON>(insetMapId: number): Promise<TopoJSON> {
|
|
65
65
|
const href = `${apiHost}/v1/inset-maps/${insetMapId}/json`;
|
|
66
|
-
const headers =
|
|
67
|
-
const response = await fetch(href, { headers
|
|
68
|
-
|
|
66
|
+
const headers = { Accept: 'application/json', ...(token ? { Authorization: token.toString() } : null) };
|
|
67
|
+
const response = await fetch(href, { headers }).catch((error: Error) => {
|
|
68
|
+
throw new NetworkError(error?.message ?? error);
|
|
69
|
+
});
|
|
69
70
|
|
|
70
71
|
if (response.ok) {
|
|
71
72
|
return response.json().catch(() => {
|
package/src/api/jobRevision.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { 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 {
|
|
@@ -221,9 +221,10 @@ export async function getJobRevisionOutput(jobId: number): Promise<JobRevisionOu
|
|
|
221
221
|
await createJobRevisionBuild(jobId);
|
|
222
222
|
|
|
223
223
|
const href = `${apiHost}/v1/jobs/${jobId}/revisions/${lastJobRevision}/result/output`;
|
|
224
|
-
const headers =
|
|
225
|
-
const response = await fetch(href, { headers
|
|
226
|
-
|
|
224
|
+
const headers = { ...(token ? { Authorization: token.toString() } : null) };
|
|
225
|
+
const response = await fetch(href, { headers }).catch((error: Error) => {
|
|
226
|
+
throw new NetworkError(error?.message ?? error);
|
|
227
|
+
});
|
|
227
228
|
|
|
228
229
|
if (response.ok) {
|
|
229
230
|
const blob = await response.blob().catch(() => {
|
package/src/oauth.ts
CHANGED
|
@@ -8,19 +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
|
-
* Cleanup of previously used data. The code part can be removed in a while.
|
|
15
|
-
*/
|
|
16
|
-
for (let i = 0; i < window.localStorage.length; ++i) {
|
|
17
|
-
const key = window.localStorage.key(i);
|
|
15
|
+
const anchorParams = ['access_token', 'token_type', 'expires_in', 'state'];
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
const storagePrefix = '_m4n_';
|
|
18
|
+
const statePrefix = 'oauth_state_';
|
|
19
|
+
const storageName = 'api_token';
|
|
20
|
+
|
|
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;
|
|
22
28
|
}
|
|
23
29
|
|
|
30
|
+
const titleCase = (str: unknown): string => String(str).toLowerCase().replace(/\b\w/g, c => c.toUpperCase());
|
|
31
|
+
|
|
24
32
|
/**
|
|
25
33
|
* Setup internal structures to use dummy authentication flow
|
|
26
34
|
*
|
|
@@ -32,9 +40,9 @@ export function initDummyFlow(apiUrl: string, oauthToken: string): void {
|
|
|
32
40
|
|
|
33
41
|
apiHost = apiUrl.replace(/\/+$/, '');
|
|
34
42
|
token = {
|
|
35
|
-
type: parts[0]
|
|
43
|
+
type: titleCase(parts[0]),
|
|
36
44
|
token: parts[1],
|
|
37
|
-
expires:
|
|
45
|
+
expires: dummyTokenExpires,
|
|
38
46
|
|
|
39
47
|
toString(): string {
|
|
40
48
|
return `${this.type} ${this.token}`;
|
|
@@ -46,39 +54,261 @@ export function initDummyFlow(apiUrl: string, oauthToken: string): void {
|
|
|
46
54
|
* Setup internal structures to use implicit authentication flow
|
|
47
55
|
*
|
|
48
56
|
* @param {string} apiUrl - Full API URL
|
|
57
|
+
* @param {string} clientId - OAuth client id
|
|
49
58
|
* @param {string} [redirectUrl] - Callback URL
|
|
59
|
+
* @param {string[]} [scopes] - A list of required scopes
|
|
50
60
|
*/
|
|
51
|
-
export function initImplicitFlow(apiUrl: string, redirectUrl = ''): void {
|
|
61
|
+
export function initImplicitFlow(apiUrl: string, clientId: string, redirectUrl = '', scopes = ['*']): void {
|
|
52
62
|
apiHost = apiUrl.replace(/\/+$/, '');
|
|
53
63
|
|
|
64
|
+
apiClientId = String(clientId);
|
|
54
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
|
+
}
|
|
55
131
|
|
|
56
|
-
|
|
132
|
+
if (authenticated()) {
|
|
133
|
+
const href = sessionStorage.getItem('redirect-url');
|
|
57
134
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
135
|
+
if (href) {
|
|
136
|
+
sessionStorage.removeItem('redirect-url');
|
|
137
|
+
window.history.replaceState(null, document.title, href);
|
|
138
|
+
}
|
|
61
139
|
}
|
|
62
140
|
}
|
|
63
141
|
|
|
64
|
-
export async function authenticate(): Promise<
|
|
142
|
+
export async function authenticate(): Promise<string> | never {
|
|
65
143
|
return new Promise(() => {
|
|
144
|
+
if (anchorContainsError()) {
|
|
145
|
+
console.error(getError());
|
|
146
|
+
cleanAnchorParams();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
forget();
|
|
150
|
+
|
|
66
151
|
sessionStorage.setItem('redirect-url', window.location.href);
|
|
67
|
-
window.location.assign(
|
|
152
|
+
window.location.assign(buildRedirectUrl());
|
|
68
153
|
});
|
|
69
154
|
}
|
|
70
155
|
|
|
71
|
-
|
|
72
|
-
|
|
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
|
+
}
|
|
204
|
+
|
|
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
|
+
}
|
|
73
254
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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),
|
|
261
|
+
);
|
|
262
|
+
const key = `${storagePrefix}${statePrefix}${state}`;
|
|
78
263
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function getError(): OAuthError {
|
|
290
|
+
const params = getAnchorParams();
|
|
291
|
+
|
|
292
|
+
return params.message
|
|
293
|
+
? new OAuthError(params.message as string, params.error)
|
|
294
|
+
: new OAuthError(titleCase(params.error), params.error);
|
|
295
|
+
}
|
|
296
|
+
|
|
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
|
+
};
|
|
84
314
|
}
|
package/src/utils.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { 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
|
|
|
@@ -233,6 +233,7 @@ function getRequestInit<I extends ApiCommon, O extends Record<string, unknown>>(
|
|
|
233
233
|
extraHeaders?: Record<string, string> | null,
|
|
234
234
|
extraOptions?: ExtraOptions<I, O>,
|
|
235
235
|
): RequestInit {
|
|
236
|
+
const authorization = token ? { Authorization: token.toString() } : null;
|
|
236
237
|
let contentType = null as { 'Content-Type': string } | null;
|
|
237
238
|
|
|
238
239
|
if (body !== undefined) {
|
|
@@ -258,11 +259,10 @@ function getRequestInit<I extends ApiCommon, O extends Record<string, unknown>>(
|
|
|
258
259
|
}
|
|
259
260
|
}
|
|
260
261
|
|
|
261
|
-
const method = extraOptions?.method ?? (body != null ? 'POST' : 'GET'); // don't touch `!=` please
|
|
262
|
-
const authorization = getAuthorizationHeaders(method);
|
|
263
262
|
const headers = { Accept: 'application/json', ...authorization, ...contentType, ...extraHeaders };
|
|
263
|
+
const method = extraOptions?.method ?? (body != null ? 'POST' : 'GET'); // don't touch `!=` please
|
|
264
264
|
|
|
265
|
-
return { body, headers, method
|
|
265
|
+
return { body, headers, method } as RequestInit;
|
|
266
266
|
}
|
|
267
267
|
|
|
268
268
|
interface Context<I extends ApiCommon, O extends Record<string, unknown>> {
|