@plumile/auth 0.1.106
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/LICENSE +21 -0
- package/README.md +3 -0
- package/lib/esm/authRefreshState.d.ts +32 -0
- package/lib/esm/authRefreshState.d.ts.map +1 -0
- package/lib/esm/authRefreshState.js +9 -0
- package/lib/esm/index.d.ts +5 -0
- package/lib/esm/index.d.ts.map +1 -0
- package/lib/esm/index.js +5 -0
- package/lib/esm/refreshTokenClient.d.ts +28 -0
- package/lib/esm/refreshTokenClient.d.ts.map +1 -0
- package/lib/esm/refreshTokenClient.js +148 -0
- package/lib/esm/relay.d.ts +25 -0
- package/lib/esm/relay.d.ts.map +1 -0
- package/lib/esm/relay.js +27 -0
- package/lib/esm/shortAccessToken.d.ts +40 -0
- package/lib/esm/shortAccessToken.d.ts.map +1 -0
- package/lib/esm/shortAccessToken.js +359 -0
- package/lib/tsconfig.esm.tsbuildinfo +1 -0
- package/lib/types/authRefreshState.d.ts +32 -0
- package/lib/types/authRefreshState.d.ts.map +1 -0
- package/lib/types/index.d.ts +5 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/refreshTokenClient.d.ts +28 -0
- package/lib/types/refreshTokenClient.d.ts.map +1 -0
- package/lib/types/relay.d.ts +25 -0
- package/lib/types/relay.d.ts.map +1 -0
- package/lib/types/shortAccessToken.d.ts +40 -0
- package/lib/types/shortAccessToken.d.ts.map +1 -0
- package/package.json +82 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Plumile and its affiliates.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type BuiltInAuthRefreshFailureReason = 'NETWORK_ERROR' | 'TIMEOUT' | 'INVALID_RESPONSE' | 'INVALID_ACCESS_TOKEN' | 'REFRESH_IN_COOLDOWN' | 'SESSION_EXPIRED' | 'CREDENTIALS_REJECTED';
|
|
2
|
+
export type AuthRefreshFailureReason = BuiltInAuthRefreshFailureReason | (string & {});
|
|
3
|
+
export type AuthRefreshState = {
|
|
4
|
+
status: 'anonymous';
|
|
5
|
+
} | {
|
|
6
|
+
status: 'refreshing';
|
|
7
|
+
previousExpiresAtMs?: number;
|
|
8
|
+
} | {
|
|
9
|
+
status: 'authenticated';
|
|
10
|
+
expiresAtMs: number;
|
|
11
|
+
} | {
|
|
12
|
+
status: 'temporarily_unavailable';
|
|
13
|
+
reason: AuthRefreshFailureReason;
|
|
14
|
+
retryAtMs?: number;
|
|
15
|
+
previousExpiresAtMs?: number;
|
|
16
|
+
} | {
|
|
17
|
+
status: 'session_expired';
|
|
18
|
+
reason: AuthRefreshFailureReason;
|
|
19
|
+
};
|
|
20
|
+
export interface AuthRefreshFailure {
|
|
21
|
+
reason: AuthRefreshFailureReason;
|
|
22
|
+
retryable: boolean;
|
|
23
|
+
clearSession: boolean;
|
|
24
|
+
retryAfterMs?: number;
|
|
25
|
+
status?: number;
|
|
26
|
+
message?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare class AuthRefreshError extends Error {
|
|
29
|
+
readonly failure: AuthRefreshFailure;
|
|
30
|
+
constructor(failure: AuthRefreshFailure);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=authRefreshState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authRefreshState.d.ts","sourceRoot":"","sources":["../../src/authRefreshState.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,+BAA+B,GACvC,eAAe,GACf,SAAS,GACT,kBAAkB,GAClB,sBAAsB,GACtB,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,wBAAwB,GAChC,+BAA+B,GAC/B,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAChD;IACE,MAAM,EAAE,yBAAyB,CAAC;IAClC,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GACD;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,OAAO,EAAE,kBAAkB,CAAC;gBAEzB,OAAO,EAAE,kBAAkB;CAK/C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export class AuthRefreshError extends Error {
|
|
2
|
+
failure;
|
|
3
|
+
constructor(failure) {
|
|
4
|
+
super(failure.message ?? failure.reason);
|
|
5
|
+
this.name = 'AuthRefreshError';
|
|
6
|
+
this.failure = failure;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFJlZnJlc2hTdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoUmVmcmVzaFN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtDQSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsS0FBSztJQUN6QixPQUFPLENBQXFCO0lBRTVDLFlBQW1CLE9BQTJCO1FBQzVDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEJ1aWx0SW5BdXRoUmVmcmVzaEZhaWx1cmVSZWFzb24gPVxuICB8ICdORVRXT1JLX0VSUk9SJ1xuICB8ICdUSU1FT1VUJ1xuICB8ICdJTlZBTElEX1JFU1BPTlNFJ1xuICB8ICdJTlZBTElEX0FDQ0VTU19UT0tFTidcbiAgfCAnUkVGUkVTSF9JTl9DT09MRE9XTidcbiAgfCAnU0VTU0lPTl9FWFBJUkVEJ1xuICB8ICdDUkVERU5USUFMU19SRUpFQ1RFRCc7XG5cbmV4cG9ydCB0eXBlIEF1dGhSZWZyZXNoRmFpbHVyZVJlYXNvbiA9XG4gIHwgQnVpbHRJbkF1dGhSZWZyZXNoRmFpbHVyZVJlYXNvblxuICB8IChzdHJpbmcgJiB7fSk7XG5cbmV4cG9ydCB0eXBlIEF1dGhSZWZyZXNoU3RhdGUgPVxuICB8IHsgc3RhdHVzOiAnYW5vbnltb3VzJyB9XG4gIHwgeyBzdGF0dXM6ICdyZWZyZXNoaW5nJzsgcHJldmlvdXNFeHBpcmVzQXRNcz86IG51bWJlciB9XG4gIHwgeyBzdGF0dXM6ICdhdXRoZW50aWNhdGVkJzsgZXhwaXJlc0F0TXM6IG51bWJlciB9XG4gIHwge1xuICAgICAgc3RhdHVzOiAndGVtcG9yYXJpbHlfdW5hdmFpbGFibGUnO1xuICAgICAgcmVhc29uOiBBdXRoUmVmcmVzaEZhaWx1cmVSZWFzb247XG4gICAgICByZXRyeUF0TXM/OiBudW1iZXI7XG4gICAgICBwcmV2aW91c0V4cGlyZXNBdE1zPzogbnVtYmVyO1xuICAgIH1cbiAgfCB7IHN0YXR1czogJ3Nlc3Npb25fZXhwaXJlZCc7IHJlYXNvbjogQXV0aFJlZnJlc2hGYWlsdXJlUmVhc29uIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFJlZnJlc2hGYWlsdXJlIHtcbiAgcmVhc29uOiBBdXRoUmVmcmVzaEZhaWx1cmVSZWFzb247XG4gIHJldHJ5YWJsZTogYm9vbGVhbjtcbiAgY2xlYXJTZXNzaW9uOiBib29sZWFuO1xuICByZXRyeUFmdGVyTXM/OiBudW1iZXI7XG4gIHN0YXR1cz86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhSZWZyZXNoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBmYWlsdXJlOiBBdXRoUmVmcmVzaEZhaWx1cmU7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGZhaWx1cmU6IEF1dGhSZWZyZXNoRmFpbHVyZSkge1xuICAgIHN1cGVyKGZhaWx1cmUubWVzc2FnZSA/PyBmYWlsdXJlLnJlYXNvbik7XG4gICAgdGhpcy5uYW1lID0gJ0F1dGhSZWZyZXNoRXJyb3InO1xuICAgIHRoaXMuZmFpbHVyZSA9IGZhaWx1cmU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC"}
|
package/lib/esm/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './authRefreshState.js';
|
|
2
|
+
export * from './refreshTokenClient.js';
|
|
3
|
+
export * from './shortAccessToken.js';
|
|
4
|
+
export * from './relay.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F1dGhSZWZyZXNoU3RhdGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZWZyZXNoVG9rZW5DbGllbnQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zaG9ydEFjY2Vzc1Rva2VuLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcmVsYXkuanMnO1xuIl19
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AuthRefreshFailure } from './authRefreshState.js';
|
|
2
|
+
export interface RefreshTokenClientSuccess {
|
|
3
|
+
ok: true;
|
|
4
|
+
accessToken: string;
|
|
5
|
+
expiresAtMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RefreshTokenClientFailure {
|
|
8
|
+
ok: false;
|
|
9
|
+
failure: AuthRefreshFailure;
|
|
10
|
+
}
|
|
11
|
+
export type RefreshTokenClientResult = RefreshTokenClientSuccess | RefreshTokenClientFailure;
|
|
12
|
+
export type RefreshTokenSuccessParser = (body: unknown, response: Response) => RefreshTokenClientSuccess | null;
|
|
13
|
+
export type RefreshTokenFailureParser = (body: unknown, response: Response) => AuthRefreshFailure | null;
|
|
14
|
+
export interface RefreshTokenClientOptions {
|
|
15
|
+
endpoint: string | URL;
|
|
16
|
+
timeoutMs?: number;
|
|
17
|
+
credentials?: RequestCredentials;
|
|
18
|
+
fetchImpl?: typeof fetch;
|
|
19
|
+
requestInit?: RequestInit | (() => RequestInit | Promise<RequestInit>);
|
|
20
|
+
parseSuccessBody?: RefreshTokenSuccessParser;
|
|
21
|
+
parseFailureBody?: RefreshTokenFailureParser;
|
|
22
|
+
}
|
|
23
|
+
export declare const DEFAULT_REFRESH_TIMEOUT_MS = 10000;
|
|
24
|
+
export declare function parseRetryAfterMs(response: Response): number | undefined;
|
|
25
|
+
export declare function parseDefaultRefreshSuccessBody(body: unknown): RefreshTokenClientSuccess | null;
|
|
26
|
+
export declare function parseDefaultRefreshFailureBody(body: unknown, response: Response): AuthRefreshFailure | null;
|
|
27
|
+
export declare function requestShortAccessToken(options: RefreshTokenClientOptions): Promise<RefreshTokenClientResult>;
|
|
28
|
+
//# sourceMappingURL=refreshTokenClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refreshTokenClient.d.ts","sourceRoot":"","sources":["../../src/refreshTokenClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,MAAM,wBAAwB,GAChC,yBAAyB,GACzB,yBAAyB,CAAC;AAE9B,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,QAAQ,KACf,yBAAyB,GAAG,IAAI,CAAC;AAEtC,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,QAAQ,KACf,kBAAkB,GAAG,IAAI,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACvE,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAC9C;AAED,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAYjD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAiBxE;AAKD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,OAAO,GACZ,yBAAyB,GAAG,IAAI,CAgClC;AAKD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,QAAQ,GACjB,kBAAkB,GAAG,IAAI,CAgC3B;AAiDD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAmDnC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
export const DEFAULT_REFRESH_TIMEOUT_MS = 10_000;
|
|
2
|
+
function isRecord(value) {
|
|
3
|
+
return value != null && typeof value === 'object';
|
|
4
|
+
}
|
|
5
|
+
export function parseRetryAfterMs(response) {
|
|
6
|
+
const value = response.headers.get('Retry-After');
|
|
7
|
+
if (value == null || value.trim() === '') {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
const seconds = Number(value);
|
|
11
|
+
if (Number.isFinite(seconds) && seconds >= 0) {
|
|
12
|
+
return seconds * 1000;
|
|
13
|
+
}
|
|
14
|
+
const dateMs = Date.parse(value);
|
|
15
|
+
if (Number.isFinite(dateMs)) {
|
|
16
|
+
return Math.max(0, dateMs - Date.now());
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
export function parseDefaultRefreshSuccessBody(body) {
|
|
21
|
+
if (!isRecord(body)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
if (body.status === 'SUCCESS' &&
|
|
25
|
+
typeof body.access_token === 'string' &&
|
|
26
|
+
body.access_token !== '') {
|
|
27
|
+
let expiresAtMs;
|
|
28
|
+
if (typeof body.expires_at_ms === 'number' &&
|
|
29
|
+
Number.isFinite(body.expires_at_ms)) {
|
|
30
|
+
expiresAtMs = body.expires_at_ms;
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
ok: true,
|
|
34
|
+
accessToken: body.access_token,
|
|
35
|
+
expiresAtMs,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (typeof body.access_token === 'string' && body.access_token !== '') {
|
|
39
|
+
return {
|
|
40
|
+
ok: true,
|
|
41
|
+
accessToken: body.access_token,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
export function parseDefaultRefreshFailureBody(body, response) {
|
|
47
|
+
if (isRecord(body) &&
|
|
48
|
+
body.status === 'ERROR' &&
|
|
49
|
+
typeof body.reason === 'string' &&
|
|
50
|
+
typeof body.retryable === 'boolean' &&
|
|
51
|
+
typeof body.clear_session === 'boolean') {
|
|
52
|
+
let message;
|
|
53
|
+
if (typeof body.message === 'string') {
|
|
54
|
+
message = body.message;
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
reason: body.reason,
|
|
58
|
+
retryable: body.retryable,
|
|
59
|
+
clearSession: body.clear_session,
|
|
60
|
+
retryAfterMs: parseRetryAfterMs(response),
|
|
61
|
+
status: response.status,
|
|
62
|
+
message,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (response.status === 401 || response.status === 403) {
|
|
66
|
+
return {
|
|
67
|
+
reason: 'CREDENTIALS_REJECTED',
|
|
68
|
+
retryable: false,
|
|
69
|
+
clearSession: true,
|
|
70
|
+
status: response.status,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
async function readJson(response) {
|
|
76
|
+
return response.json().catch(() => {
|
|
77
|
+
return null;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function failure(reason, options = {}) {
|
|
81
|
+
return {
|
|
82
|
+
ok: false,
|
|
83
|
+
failure: {
|
|
84
|
+
reason,
|
|
85
|
+
retryable: options.retryable ?? true,
|
|
86
|
+
clearSession: options.clearSession ?? false,
|
|
87
|
+
retryAfterMs: options.retryAfterMs,
|
|
88
|
+
status: options.status,
|
|
89
|
+
message: options.message,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
async function resolveRequestInit(value) {
|
|
94
|
+
if (value == null) {
|
|
95
|
+
return {};
|
|
96
|
+
}
|
|
97
|
+
if (typeof value === 'function') {
|
|
98
|
+
return value();
|
|
99
|
+
}
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
export async function requestShortAccessToken(options) {
|
|
103
|
+
const fetchImpl = options.fetchImpl ?? globalThis.fetch;
|
|
104
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_REFRESH_TIMEOUT_MS;
|
|
105
|
+
const controller = new AbortController();
|
|
106
|
+
const timeout = setTimeout(() => {
|
|
107
|
+
controller.abort();
|
|
108
|
+
}, timeoutMs);
|
|
109
|
+
try {
|
|
110
|
+
const extraInit = await resolveRequestInit(options.requestInit);
|
|
111
|
+
const response = await fetchImpl(options.endpoint, {
|
|
112
|
+
...extraInit,
|
|
113
|
+
method: extraInit.method ?? 'POST',
|
|
114
|
+
credentials: extraInit.credentials ?? options.credentials ?? 'include',
|
|
115
|
+
signal: controller.signal,
|
|
116
|
+
});
|
|
117
|
+
const body = await readJson(response);
|
|
118
|
+
if (response.ok) {
|
|
119
|
+
const success = (options.parseSuccessBody ?? parseDefaultRefreshSuccessBody)(body, response);
|
|
120
|
+
if (success != null) {
|
|
121
|
+
return success;
|
|
122
|
+
}
|
|
123
|
+
return failure('INVALID_RESPONSE', { status: response.status });
|
|
124
|
+
}
|
|
125
|
+
const parsedFailure = (options.parseFailureBody ?? parseDefaultRefreshFailureBody)(body, response);
|
|
126
|
+
if (parsedFailure != null) {
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
failure: parsedFailure,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return failure('INVALID_RESPONSE', {
|
|
133
|
+
retryAfterMs: parseRetryAfterMs(response),
|
|
134
|
+
status: response.status,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
let reason = 'NETWORK_ERROR';
|
|
139
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
140
|
+
reason = 'TIMEOUT';
|
|
141
|
+
}
|
|
142
|
+
return failure(reason);
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
clearTimeout(timeout);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaFRva2VuQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlZnJlc2hUb2tlbkNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3Q0EsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDO0FBS2pELFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNwRCxDQUFDO0FBS0QsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQWtCO0lBQ2xELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDekMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sT0FBTyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUtELE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsSUFBYTtJQUViLElBQUksQ0FB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dHlwZSB7XG4gIEF1dGhSZWZyZXNoRmFpbHVyZSxcbiAgQXV0aFJlZnJlc2hGYWlsdXJlUmVhc29uLFxufSBmcm9tICcuL2F1dGhSZWZyZXNoU3RhdGUuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlbkNsaWVudFN1Y2Nlc3Mge1xuICBvazogdHJ1ZTtcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0F0TXM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuQ2xpZW50RmFpbHVyZSB7XG4gIG9rOiBmYWxzZTtcbiAgZmFpbHVyZTogQXV0aFJlZnJlc2hGYWlsdXJlO1xufVxuXG5leHBvcnQgdHlwZSBSZWZyZXNoVG9rZW5DbGllbnRSZXN1bHQgPVxuICB8IFJlZnJlc2hUb2tlbkNsaWVudFN1Y2Nlc3NcbiAgfCBSZWZyZXNoVG9rZW5DbGllbnRGYWlsdXJlO1xuXG5leHBvcnQgdHlwZSBSZWZyZXNoVG9rZW5TdWNjZXNzUGFyc2VyID0gKFxuICBib2R5OiB1bmtub3duLFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4pID0+IFJlZnJlc2hUb2tlbkNsaWVudFN1Y2Nlc3MgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBSZWZyZXNoVG9rZW5GYWlsdXJlUGFyc2VyID0gKFxuICBib2R5OiB1bmtub3duLFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4pID0+IEF1dGhSZWZyZXNoRmFpbHVyZSB8IG51bGw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuQ2xpZW50T3B0aW9ucyB7XG4gIGVuZHBvaW50OiBzdHJpbmcgfCBVUkw7XG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgY3JlZGVudGlhbHM/OiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG4gIGZldGNoSW1wbD86IHR5cGVvZiBmZXRjaDtcbiAgcmVxdWVzdEluaXQ/OiBSZXF1ZXN0SW5pdCB8ICgoKSA9PiBSZXF1ZXN0SW5pdCB8IFByb21pc2U8UmVxdWVzdEluaXQ+KTtcbiAgcGFyc2VTdWNjZXNzQm9keT86IFJlZnJlc2hUb2tlblN1Y2Nlc3NQYXJzZXI7XG4gIHBhcnNlRmFpbHVyZUJvZHk/OiBSZWZyZXNoVG9rZW5GYWlsdXJlUGFyc2VyO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUZSRVNIX1RJTUVPVVRfTVMgPSAxMF8wMDA7XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gaXNSZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlck1zKHJlc3BvbnNlOiBSZXNwb25zZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1JldHJ5LUFmdGVyJyk7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3Qgc2Vjb25kcyA9IE51bWJlcih2YWx1ZSk7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoc2Vjb25kcykgJiYgc2Vjb25kcyA+PSAwKSB7XG4gICAgcmV0dXJuIHNlY29uZHMgKiAxMDAwO1xuICB9XG5cbiAgY29uc3QgZGF0ZU1zID0gRGF0ZS5wYXJzZSh2YWx1ZSk7XG4gIGlmIChOdW1iZXIuaXNGaW5pdGUoZGF0ZU1zKSkge1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBkYXRlTXMgLSBEYXRlLm5vdygpKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGVmYXVsdFJlZnJlc2hTdWNjZXNzQm9keShcbiAgYm9keTogdW5rbm93bixcbik6IFJlZnJlc2hUb2tlbkNsaWVudFN1Y2Nlc3MgfCBudWxsIHtcbiAgaWYgKCFpc1JlY29yZChib2R5KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKFxuICAgIGJvZHkuc3RhdHVzID09PSAnU1VDQ0VTUycgJiZcbiAgICB0eXBlb2YgYm9keS5hY2Nlc3NfdG9rZW4gPT09ICdzdHJpbmcnICYmXG4gICAgYm9keS5hY2Nlc3NfdG9rZW4gIT09ICcnXG4gICkge1xuICAgIGxldCBleHBpcmVzQXRNczogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBib2R5LmV4cGlyZXNfYXRfbXMgPT09ICdudW1iZXInICYmXG4gICAgICBOdW1iZXIuaXNGaW5pdGUoYm9keS5leHBpcmVzX2F0X21zKVxuICAgICkge1xuICAgICAgZXhwaXJlc0F0TXMgPSBib2R5LmV4cGlyZXNfYXRfbXM7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIGFjY2Vzc1Rva2VuOiBib2R5LmFjY2Vzc190b2tlbixcbiAgICAgIGV4cGlyZXNBdE1zLFxuICAgIH07XG4gIH1cblxuICBpZiAodHlwZW9mIGJvZHkuYWNjZXNzX3Rva2VuID09PSAnc3RyaW5nJyAmJiBib2R5LmFjY2Vzc190b2tlbiAhPT0gJycpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2s6IHRydWUsXG4gICAgICBhY2Nlc3NUb2tlbjogYm9keS5hY2Nlc3NfdG9rZW4sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURlZmF1bHRSZWZyZXNoRmFpbHVyZUJvZHkoXG4gIGJvZHk6IHVua25vd24sXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbik6IEF1dGhSZWZyZXNoRmFpbHVyZSB8IG51bGwge1xuICBpZiAoXG4gICAgaXNSZWNvcmQoYm9keSkgJiZcbiAgICBib2R5LnN0YXR1cyA9PT0gJ0VSUk9SJyAmJlxuICAgIHR5cGVvZiBib2R5LnJlYXNvbiA9PT0gJ3N0cmluZycgJiZcbiAgICB0eXBlb2YgYm9keS5yZXRyeWFibGUgPT09ICdib29sZWFuJyAmJlxuICAgIHR5cGVvZiBib2R5LmNsZWFyX3Nlc3Npb24gPT09ICdib29sZWFuJ1xuICApIHtcbiAgICBsZXQgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2YgYm9keS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgbWVzc2FnZSA9IGJvZHkubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYXNvbjogYm9keS5yZWFzb24sXG4gICAgICByZXRyeWFibGU6IGJvZHkucmV0cnlhYmxlLFxuICAgICAgY2xlYXJTZXNzaW9uOiBib2R5LmNsZWFyX3Nlc3Npb24sXG4gICAgICByZXRyeUFmdGVyTXM6IHBhcnNlUmV0cnlBZnRlck1zKHJlc3BvbnNlKSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYXNvbjogJ0NSRURFTlRJQUxTX1JFSkVDVEVEJyxcbiAgICAgIHJldHJ5YWJsZTogZmFsc2UsXG4gICAgICBjbGVhclNlc3Npb246IHRydWUsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICpcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEpzb24ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIHJldHVybiByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4ge1xuICAgIHJldHVybiBudWxsO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBmYWlsdXJlKFxuICByZWFzb246IEF1dGhSZWZyZXNoRmFpbHVyZVJlYXNvbixcbiAgb3B0aW9uczogUGFydGlhbDxBdXRoUmVmcmVzaEZhaWx1cmU+ID0ge30sXG4pOiBSZWZyZXNoVG9rZW5DbGllbnRGYWlsdXJlIHtcbiAgcmV0dXJuIHtcbiAgICBvazogZmFsc2UsXG4gICAgZmFpbHVyZToge1xuICAgICAgcmVhc29uLFxuICAgICAgcmV0cnlhYmxlOiBvcHRpb25zLnJldHJ5YWJsZSA/PyB0cnVlLFxuICAgICAgY2xlYXJTZXNzaW9uOiBvcHRpb25zLmNsZWFyU2Vzc2lvbiA/PyBmYWxzZSxcbiAgICAgIHJldHJ5QWZ0ZXJNczogb3B0aW9ucy5yZXRyeUFmdGVyTXMsXG4gICAgICBzdGF0dXM6IG9wdGlvbnMuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogb3B0aW9ucy5tZXNzYWdlLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVJlcXVlc3RJbml0KFxuICB2YWx1ZTogUmVmcmVzaFRva2VuQ2xpZW50T3B0aW9uc1sncmVxdWVzdEluaXQnXSxcbik6IFByb21pc2U8UmVxdWVzdEluaXQ+IHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZSgpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdFNob3J0QWNjZXNzVG9rZW4oXG4gIG9wdGlvbnM6IFJlZnJlc2hUb2tlbkNsaWVudE9wdGlvbnMsXG4pOiBQcm9taXNlPFJlZnJlc2hUb2tlbkNsaWVudFJlc3VsdD4ge1xuICBjb25zdCBmZXRjaEltcGwgPSBvcHRpb25zLmZldGNoSW1wbCA/PyBnbG9iYWxUaGlzLmZldGNoO1xuICBjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zLnRpbWVvdXRNcyA/PyBERUZBVUxUX1JFRlJFU0hfVElNRU9VVF9NUztcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfSwgdGltZW91dE1zKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4dHJhSW5pdCA9IGF3YWl0IHJlc29sdmVSZXF1ZXN0SW5pdChvcHRpb25zLnJlcXVlc3RJbml0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoSW1wbChvcHRpb25zLmVuZHBvaW50LCB7XG4gICAgICAuLi5leHRyYUluaXQsXG4gICAgICBtZXRob2Q6IGV4dHJhSW5pdC5tZXRob2QgPz8gJ1BPU1QnLFxuICAgICAgY3JlZGVudGlhbHM6IGV4dHJhSW5pdC5jcmVkZW50aWFscyA/PyBvcHRpb25zLmNyZWRlbnRpYWxzID8/ICdpbmNsdWRlJyxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRKc29uKHJlc3BvbnNlKTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IChcbiAgICAgICAgb3B0aW9ucy5wYXJzZVN1Y2Nlc3NCb2R5ID8/IHBhcnNlRGVmYXVsdFJlZnJlc2hTdWNjZXNzQm9keVxuICAgICAgKShib2R5LCByZXNwb25zZSk7XG4gICAgICBpZiAoc3VjY2VzcyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhaWx1cmUoJ0lOVkFMSURfUkVTUE9OU0UnLCB7IHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZEZhaWx1cmUgPSAoXG4gICAgICBvcHRpb25zLnBhcnNlRmFpbHVyZUJvZHkgPz8gcGFyc2VEZWZhdWx0UmVmcmVzaEZhaWx1cmVCb2R5XG4gICAgKShib2R5LCByZXNwb25zZSk7XG4gICAgaWYgKHBhcnNlZEZhaWx1cmUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICBmYWlsdXJlOiBwYXJzZWRGYWlsdXJlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFpbHVyZSgnSU5WQUxJRF9SRVNQT05TRScsIHtcbiAgICAgIHJldHJ5QWZ0ZXJNczogcGFyc2VSZXRyeUFmdGVyTXMocmVzcG9uc2UpLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbGV0IHJlYXNvbjogQXV0aFJlZnJlc2hGYWlsdXJlUmVhc29uID0gJ05FVFdPUktfRVJST1InO1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgcmVhc29uID0gJ1RJTUVPVVQnO1xuICAgIH1cbiAgICByZXR1cm4gZmFpbHVyZShyZWFzb24pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ShortAccessTokenAuthConfig } from './shortAccessToken.js';
|
|
2
|
+
export interface RelayReconnectOptions {
|
|
3
|
+
reason?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface RelayEnvironmentConfiguration {
|
|
6
|
+
httpUrl?: string;
|
|
7
|
+
wsUrl?: string;
|
|
8
|
+
getDataId?: (fieldValue: unknown, typeName: string) => string | null;
|
|
9
|
+
getAuthHeaders?: () => Record<string, string> | Promise<Record<string, string>>;
|
|
10
|
+
}
|
|
11
|
+
export interface ConfigureShortAccessTokenRelayEnvironmentInput {
|
|
12
|
+
httpUrl: string;
|
|
13
|
+
wsUrl: string;
|
|
14
|
+
refreshEndpoint: string | URL;
|
|
15
|
+
auth?: Omit<ShortAccessTokenAuthConfig, 'refreshEndpoint'>;
|
|
16
|
+
getDataId?: (fieldValue: unknown, typeName: string) => string | null;
|
|
17
|
+
configureRelayEnvironment: (options: RelayEnvironmentConfiguration) => void;
|
|
18
|
+
reconnectRelayWebSocket: (options?: RelayReconnectOptions) => void;
|
|
19
|
+
}
|
|
20
|
+
export interface ShortAccessTokenRelayEnvironment {
|
|
21
|
+
resetRelayTransport: () => void;
|
|
22
|
+
dispose: () => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function configureShortAccessTokenRelayEnvironment(input: ConfigureShortAccessTokenRelayEnvironmentInput): ShortAccessTokenRelayEnvironment;
|
|
25
|
+
//# sourceMappingURL=relay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,0BAA0B,EAChC,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrE,cAAc,CAAC,EAAE,MACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,8CAA8C;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrE,yBAAyB,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,IAAI,CAAC;IAC5E,uBAAuB,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,gCAAgC;IAC/C,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAKD,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,8CAA8C,GACpD,gCAAgC,CAmClC"}
|
package/lib/esm/relay.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { addShortAccessTokenListener, configureShortAccessTokenAuth, getShortAccessTokenAuthHeaders, installShortAccessTokenGraphqlRetry, } from './shortAccessToken.js';
|
|
2
|
+
const AUTH_REFRESHED_RECONNECT_REASON = 'auth_refreshed';
|
|
3
|
+
export function configureShortAccessTokenRelayEnvironment(input) {
|
|
4
|
+
const { httpUrl, wsUrl, refreshEndpoint, auth, getDataId, configureRelayEnvironment, reconnectRelayWebSocket, } = input;
|
|
5
|
+
configureShortAccessTokenAuth({
|
|
6
|
+
...auth,
|
|
7
|
+
refreshEndpoint,
|
|
8
|
+
});
|
|
9
|
+
installShortAccessTokenGraphqlRetry(httpUrl);
|
|
10
|
+
configureRelayEnvironment({
|
|
11
|
+
httpUrl,
|
|
12
|
+
wsUrl,
|
|
13
|
+
getDataId,
|
|
14
|
+
getAuthHeaders: getShortAccessTokenAuthHeaders,
|
|
15
|
+
});
|
|
16
|
+
const resetRelayTransport = () => {
|
|
17
|
+
reconnectRelayWebSocket({ reason: AUTH_REFRESHED_RECONNECT_REASON });
|
|
18
|
+
};
|
|
19
|
+
const unsubscribe = addShortAccessTokenListener(() => {
|
|
20
|
+
resetRelayTransport();
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
resetRelayTransport,
|
|
24
|
+
dispose: unsubscribe,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDJCQUEyQixFQUMzQiw2QkFBNkIsRUFDN0IsOEJBQThCLEVBQzlCLG1DQUFtQyxHQUVwQyxNQUFNLHVCQUF1QixDQUFDO0FBRS9CLE1BQU0sK0JBQStCLEdBQUcsZ0JBQWdCLENBQUM7QUFpQ3pELE1BQU0sVUFBVSx5Q0FBeUMsQ0FDdkQsS0FBcUQ7SUFFckQsTUFBTSxFQUNKLE9BQU8sRUFDUCxLQUFLLEVBQ0wsZUFBZSxFQUNmLElBQUksRUFDSixTQUFTLEVBQ1QseUJBQXlCLEVBQ3pCLHVCQUF1QixHQUN4QixHQUFHLEtBQUssQ0FBQztJQUVWLDZCQUE2QixDQUFDO1FBQzVCLEdBQUcsSUFBSTtRQUNQLGVBQWU7S0FDaEIsQ0FBQyxDQUFDO0lBQ0gsbUNBQW1DLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0MseUJBQXlCLENBQUM7UUFDeEIsT0FBTztRQUNQLEtBQUs7UUFDTCxTQUFTO1FBQ1QsY0FBYyxFQUFFLDhCQUE4QjtLQUMvQyxDQUFDLENBQUM7SUFFSCxNQUFNLG1CQUFtQixHQUFHLEdBQVMsRUFBRTtRQUNyQyx1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSwrQkFBK0IsRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsMkJBQTJCLENBQUMsR0FBRyxFQUFFO1FBQ25ELG1CQUFtQixFQUFFLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsbUJBQW1CO1FBQ25CLE9BQU8sRUFBRSxXQUFXO0tBQ3JCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYWRkU2hvcnRBY2Nlc3NUb2tlbkxpc3RlbmVyLFxuICBjb25maWd1cmVTaG9ydEFjY2Vzc1Rva2VuQXV0aCxcbiAgZ2V0U2hvcnRBY2Nlc3NUb2tlbkF1dGhIZWFkZXJzLFxuICBpbnN0YWxsU2hvcnRBY2Nlc3NUb2tlbkdyYXBocWxSZXRyeSxcbiAgdHlwZSBTaG9ydEFjY2Vzc1Rva2VuQXV0aENvbmZpZyxcbn0gZnJvbSAnLi9zaG9ydEFjY2Vzc1Rva2VuLmpzJztcblxuY29uc3QgQVVUSF9SRUZSRVNIRURfUkVDT05ORUNUX1JFQVNPTiA9ICdhdXRoX3JlZnJlc2hlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVsYXlSZWNvbm5lY3RPcHRpb25zIHtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbGF5RW52aXJvbm1lbnRDb25maWd1cmF0aW9uIHtcbiAgaHR0cFVybD86IHN0cmluZztcbiAgd3NVcmw/OiBzdHJpbmc7XG4gIGdldERhdGFJZD86IChmaWVsZFZhbHVlOiB1bmtub3duLCB0eXBlTmFtZTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsO1xuICBnZXRBdXRoSGVhZGVycz86ICgpID0+XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgfCBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ3VyZVNob3J0QWNjZXNzVG9rZW5SZWxheUVudmlyb25tZW50SW5wdXQge1xuICBodHRwVXJsOiBzdHJpbmc7XG4gIHdzVXJsOiBzdHJpbmc7XG4gIHJlZnJlc2hFbmRwb2ludDogc3RyaW5nIHwgVVJMO1xuICBhdXRoPzogT21pdDxTaG9ydEFjY2Vzc1Rva2VuQXV0aENvbmZpZywgJ3JlZnJlc2hFbmRwb2ludCc+O1xuICBnZXREYXRhSWQ/OiAoZmllbGRWYWx1ZTogdW5rbm93biwgdHlwZU5hbWU6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgY29uZmlndXJlUmVsYXlFbnZpcm9ubWVudDogKG9wdGlvbnM6IFJlbGF5RW52aXJvbm1lbnRDb25maWd1cmF0aW9uKSA9PiB2b2lkO1xuICByZWNvbm5lY3RSZWxheVdlYlNvY2tldDogKG9wdGlvbnM/OiBSZWxheVJlY29ubmVjdE9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hvcnRBY2Nlc3NUb2tlblJlbGF5RW52aXJvbm1lbnQge1xuICByZXNldFJlbGF5VHJhbnNwb3J0OiAoKSA9PiB2b2lkO1xuICBkaXNwb3NlOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVTaG9ydEFjY2Vzc1Rva2VuUmVsYXlFbnZpcm9ubWVudChcbiAgaW5wdXQ6IENvbmZpZ3VyZVNob3J0QWNjZXNzVG9rZW5SZWxheUVudmlyb25tZW50SW5wdXQsXG4pOiBTaG9ydEFjY2Vzc1Rva2VuUmVsYXlFbnZpcm9ubWVudCB7XG4gIGNvbnN0IHtcbiAgICBodHRwVXJsLFxuICAgIHdzVXJsLFxuICAgIHJlZnJlc2hFbmRwb2ludCxcbiAgICBhdXRoLFxuICAgIGdldERhdGFJZCxcbiAgICBjb25maWd1cmVSZWxheUVudmlyb25tZW50LFxuICAgIHJlY29ubmVjdFJlbGF5V2ViU29ja2V0LFxuICB9ID0gaW5wdXQ7XG5cbiAgY29uZmlndXJlU2hvcnRBY2Nlc3NUb2tlbkF1dGgoe1xuICAgIC4uLmF1dGgsXG4gICAgcmVmcmVzaEVuZHBvaW50LFxuICB9KTtcbiAgaW5zdGFsbFNob3J0QWNjZXNzVG9rZW5HcmFwaHFsUmV0cnkoaHR0cFVybCk7XG4gIGNvbmZpZ3VyZVJlbGF5RW52aXJvbm1lbnQoe1xuICAgIGh0dHBVcmwsXG4gICAgd3NVcmwsXG4gICAgZ2V0RGF0YUlkLFxuICAgIGdldEF1dGhIZWFkZXJzOiBnZXRTaG9ydEFjY2Vzc1Rva2VuQXV0aEhlYWRlcnMsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc2V0UmVsYXlUcmFuc3BvcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgcmVjb25uZWN0UmVsYXlXZWJTb2NrZXQoeyByZWFzb246IEFVVEhfUkVGUkVTSEVEX1JFQ09OTkVDVF9SRUFTT04gfSk7XG4gIH07XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBhZGRTaG9ydEFjY2Vzc1Rva2VuTGlzdGVuZXIoKCkgPT4ge1xuICAgIHJlc2V0UmVsYXlUcmFuc3BvcnQoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICByZXNldFJlbGF5VHJhbnNwb3J0LFxuICAgIGRpc3Bvc2U6IHVuc3Vic2NyaWJlLFxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type AuthRefreshFailureReason, type AuthRefreshState } from './authRefreshState.js';
|
|
2
|
+
import { type RefreshTokenFailureParser, type RefreshTokenSuccessParser } from './refreshTokenClient.js';
|
|
3
|
+
interface CachedAccessToken {
|
|
4
|
+
token: string;
|
|
5
|
+
expiresAtMs: number;
|
|
6
|
+
}
|
|
7
|
+
export type ShortAccessTokenEvent = 'refreshed' | 'cleared';
|
|
8
|
+
export type ShortAccessTokenListener = (event: ShortAccessTokenEvent) => void;
|
|
9
|
+
export type AuthRefreshStateListener = (state: AuthRefreshState) => void;
|
|
10
|
+
export type LogoutResponseMatcher = (payload: unknown, response: Response) => boolean;
|
|
11
|
+
export interface ShortAccessTokenAuthConfig {
|
|
12
|
+
refreshEndpoint: string | URL;
|
|
13
|
+
refreshTimeoutMs?: number;
|
|
14
|
+
refreshCredentials?: RequestCredentials;
|
|
15
|
+
refreshFetch?: typeof fetch;
|
|
16
|
+
refreshRequestInit?: RequestInit | (() => RequestInit | Promise<RequestInit>);
|
|
17
|
+
parseRefreshSuccessBody?: RefreshTokenSuccessParser;
|
|
18
|
+
parseRefreshFailureBody?: RefreshTokenFailureParser;
|
|
19
|
+
refreshSkewMs?: number;
|
|
20
|
+
maxBackoffDelayMs?: number;
|
|
21
|
+
logoutResponseMatcher?: LogoutResponseMatcher;
|
|
22
|
+
}
|
|
23
|
+
export declare function readJwtExpiresAtMs(token: string): number | null;
|
|
24
|
+
declare function isTokenUsable(token: CachedAccessToken, nowMs?: number): boolean;
|
|
25
|
+
export declare function configureShortAccessTokenAuth(nextConfig: ShortAccessTokenAuthConfig): void;
|
|
26
|
+
export declare function clearShortAccessToken(): void;
|
|
27
|
+
export declare function addShortAccessTokenListener(listener: ShortAccessTokenListener): () => void;
|
|
28
|
+
export declare function addAuthRefreshStateListener(listener: AuthRefreshStateListener): () => void;
|
|
29
|
+
export declare function getAuthRefreshState(): AuthRefreshState;
|
|
30
|
+
export declare function refreshShortAccessToken(): Promise<string>;
|
|
31
|
+
export declare function getShortAccessToken(): Promise<string>;
|
|
32
|
+
export declare function getShortAccessTokenAuthHeaders(): Promise<Record<string, string>>;
|
|
33
|
+
export declare function installShortAccessTokenGraphqlRetry(graphqlPath?: string): void;
|
|
34
|
+
export type { AuthRefreshFailureReason, AuthRefreshState };
|
|
35
|
+
export declare const __test: {
|
|
36
|
+
isTokenUsable: typeof isTokenUsable;
|
|
37
|
+
resetForTests(): void;
|
|
38
|
+
resetGraphqlRetryForTests(): void;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=shortAccessToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortAccessToken.d.ts","sourceRoot":"","sources":["../../src/shortAccessToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC/B,MAAM,yBAAyB,CAAC;AAEjC,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAC9E,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEzE,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,KACf,OAAO,CAAC;AAEb,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,KAAK,CAAC;IAC5B,kBAAkB,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9E,uBAAuB,CAAC,EAAE,yBAAyB,CAAC;IACpD,uBAAuB,CAAC,EAAE,yBAAyB,CAAC;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AAmCD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe/D;AAmBD,iBAAS,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,SAAa,GAAG,OAAO,CAE5E;AAkDD,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,0BAA0B,GACrC,IAAI,CAIN;AAKD,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C;AAqLD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,wBAAwB,GACjC,MAAM,IAAI,CAKZ;AAKD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,wBAAwB,GACjC,MAAM,IAAI,CAKZ;AAKD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAKD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAM/D;AAKD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE3D;AAKD,wBAAsB,8BAA8B,IAAI,OAAO,CAC7D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB,CASA;AAgFD,wBAAgB,mCAAmC,CACjD,WAAW,SAAiB,GAC3B,IAAI,CA0CN;AAED,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,CAAC;AAE3D,eAAO,MAAM,MAAM;;qBAEA,IAAI;iCAYQ,IAAI;CAMlC,CAAC"}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { AuthRefreshError, } from './authRefreshState.js';
|
|
2
|
+
import { requestShortAccessToken, } from './refreshTokenClient.js';
|
|
3
|
+
const DEFAULT_REFRESH_ENDPOINT = '/auth/refresh';
|
|
4
|
+
const DEFAULT_REFRESH_SKEW_MS = 60_000;
|
|
5
|
+
const DEFAULT_MAX_BACKOFF_DELAY_MS = 60_000;
|
|
6
|
+
let config = {
|
|
7
|
+
refreshEndpoint: DEFAULT_REFRESH_ENDPOINT,
|
|
8
|
+
};
|
|
9
|
+
let cachedAccessToken = null;
|
|
10
|
+
let refreshPromise = null;
|
|
11
|
+
let refreshTimer = null;
|
|
12
|
+
let installedFetchWrapper = null;
|
|
13
|
+
let failureCount = 0;
|
|
14
|
+
let retryAtMs = 0;
|
|
15
|
+
let authRefreshState = { status: 'anonymous' };
|
|
16
|
+
const listeners = new Set();
|
|
17
|
+
const stateListeners = new Set();
|
|
18
|
+
function decodeBase64Url(value) {
|
|
19
|
+
const normalized = value.replace(/-/g, '+').replace(/_/g, '/');
|
|
20
|
+
const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=');
|
|
21
|
+
return globalThis.atob(padded);
|
|
22
|
+
}
|
|
23
|
+
export function readJwtExpiresAtMs(token) {
|
|
24
|
+
const [, payload] = token.split('.');
|
|
25
|
+
if (payload == null || payload === '') {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
const decoded = JSON.parse(decodeBase64Url(payload));
|
|
30
|
+
if (typeof decoded.exp !== 'number' || !Number.isFinite(decoded.exp)) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return decoded.exp * 1000;
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function getRefreshSkewMs() {
|
|
40
|
+
return config.refreshSkewMs ?? DEFAULT_REFRESH_SKEW_MS;
|
|
41
|
+
}
|
|
42
|
+
function getMaxBackoffDelayMs() {
|
|
43
|
+
return config.maxBackoffDelayMs ?? DEFAULT_MAX_BACKOFF_DELAY_MS;
|
|
44
|
+
}
|
|
45
|
+
function isTokenUsable(token, nowMs = Date.now()) {
|
|
46
|
+
return token.expiresAtMs - getRefreshSkewMs() > nowMs;
|
|
47
|
+
}
|
|
48
|
+
function emit(event) {
|
|
49
|
+
listeners.forEach((listener) => {
|
|
50
|
+
listener(event);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function emitState(state) {
|
|
54
|
+
authRefreshState = state;
|
|
55
|
+
stateListeners.forEach((listener) => {
|
|
56
|
+
listener(state);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function clearRefreshTimer() {
|
|
60
|
+
if (refreshTimer != null) {
|
|
61
|
+
clearTimeout(refreshTimer);
|
|
62
|
+
refreshTimer = null;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function clearCachedToken() {
|
|
66
|
+
cachedAccessToken = null;
|
|
67
|
+
clearRefreshTimer();
|
|
68
|
+
}
|
|
69
|
+
function resetFailureBackoff() {
|
|
70
|
+
failureCount = 0;
|
|
71
|
+
retryAtMs = 0;
|
|
72
|
+
}
|
|
73
|
+
export function configureShortAccessTokenAuth(nextConfig) {
|
|
74
|
+
config = {
|
|
75
|
+
...nextConfig,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export function clearShortAccessToken() {
|
|
79
|
+
clearCachedToken();
|
|
80
|
+
resetFailureBackoff();
|
|
81
|
+
emitState({ status: 'anonymous' });
|
|
82
|
+
emit('cleared');
|
|
83
|
+
}
|
|
84
|
+
function scheduleRefresh(token) {
|
|
85
|
+
clearRefreshTimer();
|
|
86
|
+
const delayMs = Math.max(0, token.expiresAtMs - getRefreshSkewMs() - Date.now());
|
|
87
|
+
refreshTimer = setTimeout(() => {
|
|
88
|
+
refreshShortAccessTokenInternal({ force: true }).catch(() => {
|
|
89
|
+
});
|
|
90
|
+
}, delayMs);
|
|
91
|
+
}
|
|
92
|
+
function nextBackoffDelayMs(failure) {
|
|
93
|
+
if (failure.retryAfterMs != null) {
|
|
94
|
+
return failure.retryAfterMs;
|
|
95
|
+
}
|
|
96
|
+
if (failureCount <= 0) {
|
|
97
|
+
return 2_000;
|
|
98
|
+
}
|
|
99
|
+
if (failureCount === 1) {
|
|
100
|
+
return 5_000;
|
|
101
|
+
}
|
|
102
|
+
if (failureCount === 2) {
|
|
103
|
+
return 15_000;
|
|
104
|
+
}
|
|
105
|
+
if (failureCount === 3) {
|
|
106
|
+
return 30_000;
|
|
107
|
+
}
|
|
108
|
+
return getMaxBackoffDelayMs();
|
|
109
|
+
}
|
|
110
|
+
function applyRefreshFailure(failure) {
|
|
111
|
+
if (failure.clearSession) {
|
|
112
|
+
clearCachedToken();
|
|
113
|
+
retryAtMs = Number.POSITIVE_INFINITY;
|
|
114
|
+
emitState({
|
|
115
|
+
status: 'session_expired',
|
|
116
|
+
reason: failure.reason,
|
|
117
|
+
});
|
|
118
|
+
emit('cleared');
|
|
119
|
+
throw new AuthRefreshError(failure);
|
|
120
|
+
}
|
|
121
|
+
let retryAtMsForState;
|
|
122
|
+
if (failure.retryable) {
|
|
123
|
+
retryAtMs = Date.now() + nextBackoffDelayMs(failure);
|
|
124
|
+
retryAtMsForState = retryAtMs;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
retryAtMs = Number.POSITIVE_INFINITY;
|
|
128
|
+
}
|
|
129
|
+
failureCount += 1;
|
|
130
|
+
emitState({
|
|
131
|
+
status: 'temporarily_unavailable',
|
|
132
|
+
reason: failure.reason,
|
|
133
|
+
retryAtMs: retryAtMsForState,
|
|
134
|
+
previousExpiresAtMs: cachedAccessToken?.expiresAtMs,
|
|
135
|
+
});
|
|
136
|
+
throw new AuthRefreshError(failure);
|
|
137
|
+
}
|
|
138
|
+
function getRefreshClientOptions() {
|
|
139
|
+
return {
|
|
140
|
+
endpoint: config.refreshEndpoint,
|
|
141
|
+
timeoutMs: config.refreshTimeoutMs,
|
|
142
|
+
credentials: config.refreshCredentials,
|
|
143
|
+
fetchImpl: config.refreshFetch,
|
|
144
|
+
requestInit: config.refreshRequestInit,
|
|
145
|
+
parseSuccessBody: config.parseRefreshSuccessBody,
|
|
146
|
+
parseFailureBody: config.parseRefreshFailureBody,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
async function requestAccessToken() {
|
|
150
|
+
const result = await requestShortAccessToken(getRefreshClientOptions());
|
|
151
|
+
if (!result.ok) {
|
|
152
|
+
return applyRefreshFailure(result.failure);
|
|
153
|
+
}
|
|
154
|
+
const expiresAtMs = result.expiresAtMs ?? readJwtExpiresAtMs(result.accessToken);
|
|
155
|
+
if (expiresAtMs == null) {
|
|
156
|
+
return applyRefreshFailure({
|
|
157
|
+
reason: 'INVALID_ACCESS_TOKEN',
|
|
158
|
+
retryable: true,
|
|
159
|
+
clearSession: false,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
resetFailureBackoff();
|
|
163
|
+
return {
|
|
164
|
+
token: result.accessToken,
|
|
165
|
+
expiresAtMs,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function assertRefreshAllowed() {
|
|
169
|
+
if (authRefreshState.status === 'session_expired') {
|
|
170
|
+
throw new AuthRefreshError({
|
|
171
|
+
reason: 'SESSION_EXPIRED',
|
|
172
|
+
retryable: false,
|
|
173
|
+
clearSession: true,
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
if (Date.now() < retryAtMs) {
|
|
177
|
+
throw new AuthRefreshError({
|
|
178
|
+
reason: 'REFRESH_IN_COOLDOWN',
|
|
179
|
+
retryable: true,
|
|
180
|
+
clearSession: false,
|
|
181
|
+
retryAfterMs: retryAtMs - Date.now(),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
async function refreshShortAccessTokenInternal(options) {
|
|
186
|
+
if (options?.force !== true &&
|
|
187
|
+
cachedAccessToken != null &&
|
|
188
|
+
isTokenUsable(cachedAccessToken)) {
|
|
189
|
+
return cachedAccessToken.token;
|
|
190
|
+
}
|
|
191
|
+
assertRefreshAllowed();
|
|
192
|
+
if (refreshPromise != null) {
|
|
193
|
+
return (await refreshPromise).token;
|
|
194
|
+
}
|
|
195
|
+
emitState({
|
|
196
|
+
status: 'refreshing',
|
|
197
|
+
previousExpiresAtMs: cachedAccessToken?.expiresAtMs,
|
|
198
|
+
});
|
|
199
|
+
refreshPromise = requestAccessToken();
|
|
200
|
+
try {
|
|
201
|
+
cachedAccessToken = await refreshPromise;
|
|
202
|
+
scheduleRefresh(cachedAccessToken);
|
|
203
|
+
emitState({
|
|
204
|
+
status: 'authenticated',
|
|
205
|
+
expiresAtMs: cachedAccessToken.expiresAtMs,
|
|
206
|
+
});
|
|
207
|
+
emit('refreshed');
|
|
208
|
+
return cachedAccessToken.token;
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
refreshPromise = null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
export function addShortAccessTokenListener(listener) {
|
|
215
|
+
listeners.add(listener);
|
|
216
|
+
return () => {
|
|
217
|
+
listeners.delete(listener);
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
export function addAuthRefreshStateListener(listener) {
|
|
221
|
+
stateListeners.add(listener);
|
|
222
|
+
return () => {
|
|
223
|
+
stateListeners.delete(listener);
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
export function getAuthRefreshState() {
|
|
227
|
+
return authRefreshState;
|
|
228
|
+
}
|
|
229
|
+
export async function refreshShortAccessToken() {
|
|
230
|
+
if (authRefreshState.status === 'session_expired') {
|
|
231
|
+
resetFailureBackoff();
|
|
232
|
+
emitState({ status: 'anonymous' });
|
|
233
|
+
}
|
|
234
|
+
return refreshShortAccessTokenInternal({ force: true });
|
|
235
|
+
}
|
|
236
|
+
export async function getShortAccessToken() {
|
|
237
|
+
return refreshShortAccessTokenInternal();
|
|
238
|
+
}
|
|
239
|
+
export async function getShortAccessTokenAuthHeaders() {
|
|
240
|
+
try {
|
|
241
|
+
const token = await getShortAccessToken();
|
|
242
|
+
return {
|
|
243
|
+
Authorization: `Bearer ${token}`,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return {};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function isGraphqlRequest(input, graphqlPath) {
|
|
251
|
+
let url;
|
|
252
|
+
if (typeof input === 'string') {
|
|
253
|
+
url = input;
|
|
254
|
+
}
|
|
255
|
+
else if (input instanceof URL) {
|
|
256
|
+
url = input.toString();
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
url = input.url;
|
|
260
|
+
}
|
|
261
|
+
if (url === graphqlPath) {
|
|
262
|
+
return true;
|
|
263
|
+
}
|
|
264
|
+
try {
|
|
265
|
+
return new URL(url, globalThis.location.origin).pathname === graphqlPath;
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
function asRecord(value) {
|
|
272
|
+
if (value != null && typeof value === 'object') {
|
|
273
|
+
return value;
|
|
274
|
+
}
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
function defaultLogoutResponseMatcher(payload) {
|
|
278
|
+
const data = asRecord(asRecord(payload)?.data);
|
|
279
|
+
const logout = asRecord(data?.logout);
|
|
280
|
+
const logoutPayload = asRecord(logout?.payload);
|
|
281
|
+
return (logout?.loggedOut === true ||
|
|
282
|
+
logoutPayload?.loggedOut === true ||
|
|
283
|
+
logout?.status === 'SUCCESS');
|
|
284
|
+
}
|
|
285
|
+
async function clearAfterLogoutResponse(response, input, graphqlPath) {
|
|
286
|
+
if (!response.ok || !isGraphqlRequest(input, graphqlPath)) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
const payload = await response
|
|
290
|
+
.clone()
|
|
291
|
+
.json()
|
|
292
|
+
.catch(() => {
|
|
293
|
+
return null;
|
|
294
|
+
});
|
|
295
|
+
const matcher = config.logoutResponseMatcher ?? defaultLogoutResponseMatcher;
|
|
296
|
+
if (matcher(payload, response)) {
|
|
297
|
+
clearShortAccessToken();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
export function installShortAccessTokenGraphqlRetry(graphqlPath = '/api/graphql') {
|
|
301
|
+
if (typeof globalThis.fetch !== 'function') {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
if (installedFetchWrapper != null) {
|
|
305
|
+
installedFetchWrapper.graphqlPath = graphqlPath;
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
const originalFetch = globalThis.fetch.bind(globalThis);
|
|
309
|
+
installedFetchWrapper = {
|
|
310
|
+
graphqlPath,
|
|
311
|
+
originalFetch,
|
|
312
|
+
};
|
|
313
|
+
globalThis.fetch = async (input, init) => {
|
|
314
|
+
const activeWrapper = installedFetchWrapper;
|
|
315
|
+
const activeGraphqlPath = activeWrapper?.graphqlPath ?? graphqlPath;
|
|
316
|
+
const response = await originalFetch(input, init);
|
|
317
|
+
if (response.status !== 401 ||
|
|
318
|
+
!isGraphqlRequest(input, activeGraphqlPath)) {
|
|
319
|
+
await clearAfterLogoutResponse(response, input, activeGraphqlPath);
|
|
320
|
+
return response;
|
|
321
|
+
}
|
|
322
|
+
try {
|
|
323
|
+
const token = await refreshShortAccessTokenInternal({ force: true });
|
|
324
|
+
const headers = new Headers(init?.headers);
|
|
325
|
+
headers.set('Authorization', `Bearer ${token}`);
|
|
326
|
+
const retryResponse = await originalFetch(input, {
|
|
327
|
+
...init,
|
|
328
|
+
headers,
|
|
329
|
+
});
|
|
330
|
+
await clearAfterLogoutResponse(retryResponse, input, activeGraphqlPath);
|
|
331
|
+
return retryResponse;
|
|
332
|
+
}
|
|
333
|
+
catch {
|
|
334
|
+
return response;
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
export const __test = {
|
|
339
|
+
isTokenUsable,
|
|
340
|
+
resetForTests() {
|
|
341
|
+
clearCachedToken();
|
|
342
|
+
resetFailureBackoff();
|
|
343
|
+
authRefreshState = { status: 'anonymous' };
|
|
344
|
+
config = {
|
|
345
|
+
refreshEndpoint: DEFAULT_REFRESH_ENDPOINT,
|
|
346
|
+
};
|
|
347
|
+
if (installedFetchWrapper != null) {
|
|
348
|
+
globalThis.fetch = installedFetchWrapper.originalFetch;
|
|
349
|
+
installedFetchWrapper = null;
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
resetGraphqlRetryForTests() {
|
|
353
|
+
if (installedFetchWrapper != null) {
|
|
354
|
+
globalThis.fetch = installedFetchWrapper.originalFetch;
|
|
355
|
+
installedFetchWrapper = null;
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
};
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRBY2Nlc3NUb2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaG9ydEFjY2Vzc1Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsR0FJakIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0wsdUJBQXVCLEdBSXhCLE1BQU0seUJBQXlCLENBQUM7QUE2QmpDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBQ2pELE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDO0FBRTVDLElBQUksTUFBTSxHQUErQjtJQUN2QyxlQUFlLEVBQUUsd0JBQXdCO0NBQzFDLENBQUM7QUFDRixJQUFJLGlCQUFpQixHQUE2QixJQUFJLENBQUM7QUFDdkQsSUFBSSxjQUFjLEdBQXNDLElBQUksQ0FBQztBQUM3RCxJQUFJLFlBQVksR0FBeUMsSUFBSSxDQUFDO0FBQzlELElBQUkscUJBQXFCLEdBR2QsSUFBSSxDQUFDO0FBQ2hCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUNyQixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxnQkFBZ0IsR0FBcUIsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFFakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7QUFDdEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7QUFLM0QsU0FBUyxlQUFlLENBQUMsS0FBYTtJQUNwQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMs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WUFDbEMsVUFBVSxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxhQUFhLENBQUM7WUFDdkQscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF1dGhSZWZyZXNoRXJyb3IsXG4gIHR5cGUgQXV0aFJlZnJlc2hGYWlsdXJlLFxuICB0eXBlIEF1dGhSZWZyZXNoRmFpbHVyZVJlYXNvbixcbiAgdHlwZSBBdXRoUmVmcmVzaFN0YXRlLFxufSBmcm9tICcuL2F1dGhSZWZyZXNoU3RhdGUuanMnO1xuaW1wb3J0IHtcbiAgcmVxdWVzdFNob3J0QWNjZXNzVG9rZW4sXG4gIHR5cGUgUmVmcmVzaFRva2VuQ2xpZW50T3B0aW9ucyxcbiAgdHlwZSBSZWZyZXNoVG9rZW5GYWlsdXJlUGFyc2VyLFxuICB0eXBlIFJlZnJlc2hUb2tlblN1Y2Nlc3NQYXJzZXIsXG59IGZyb20gJy4vcmVmcmVzaFRva2VuQ2xpZW50LmpzJztcblxuaW50ZXJmYWNlIENhY2hlZEFjY2Vzc1Rva2VuIHtcbiAgdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0F0TXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU2hvcnRBY2Nlc3NUb2tlbkV2ZW50ID0gJ3JlZnJlc2hlZCcgfCAnY2xlYXJlZCc7XG5leHBvcnQgdHlwZSBTaG9ydEFjY2Vzc1Rva2VuTGlzdGVuZXIgPSAoZXZlbnQ6IFNob3J0QWNjZXNzVG9rZW5FdmVudCkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEF1dGhSZWZyZXNoU3RhdGVMaXN0ZW5lciA9IChzdGF0ZTogQXV0aFJlZnJlc2hTdGF0ZSkgPT4gdm9pZDtcblxuZXhwb3J0IHR5cGUgTG9nb3V0UmVzcG9uc2VNYXRjaGVyID0gKFxuICBwYXlsb2FkOiB1bmtub3duLFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4pID0+IGJvb2xlYW47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hvcnRBY2Nlc3NUb2tlbkF1dGhDb25maWcge1xuICByZWZyZXNoRW5kcG9pbnQ6IHN0cmluZyB8IFVSTDtcbiAgcmVmcmVzaFRpbWVvdXRNcz86IG51bWJlcjtcbiAgcmVmcmVzaENyZWRlbnRpYWxzPzogUmVxdWVzdENyZWRlbnRpYWxzO1xuICByZWZyZXNoRmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XG4gIHJlZnJlc2hSZXF1ZXN0SW5pdD86IFJlcXVlc3RJbml0IHwgKCgpID0+IFJlcXVlc3RJbml0IHwgUHJvbWlzZTxSZXF1ZXN0SW5pdD4pO1xuICBwYXJzZVJlZnJlc2hTdWNjZXNzQm9keT86IFJlZnJlc2hUb2tlblN1Y2Nlc3NQYXJzZXI7XG4gIHBhcnNlUmVmcmVzaEZhaWx1cmVCb2R5PzogUmVmcmVzaFRva2VuRmFpbHVyZVBhcnNlcjtcbiAgcmVmcmVzaFNrZXdNcz86IG51bWJlcjtcbiAgbWF4QmFja29mZkRlbGF5TXM/OiBudW1iZXI7XG4gIGxvZ291dFJlc3BvbnNlTWF0Y2hlcj86IExvZ291dFJlc3BvbnNlTWF0Y2hlcjtcbn1cblxuY29uc3QgREVGQVVMVF9SRUZSRVNIX0VORFBPSU5UID0gJy9hdXRoL3JlZnJlc2gnO1xuY29uc3QgREVGQVVMVF9SRUZSRVNIX1NLRVdfTVMgPSA2MF8wMDA7XG5jb25zdCBERUZBVUxUX01BWF9CQUNLT0ZGX0RFTEFZX01TID0gNjBfMDAwO1xuXG5sZXQgY29uZmlnOiBTaG9ydEFjY2Vzc1Rva2VuQXV0aENvbmZpZyA9IHtcbiAgcmVmcmVzaEVuZHBvaW50OiBERUZBVUxUX1JFRlJFU0hfRU5EUE9JTlQsXG59O1xubGV0IGNhY2hlZEFjY2Vzc1Rva2VuOiBDYWNoZWRBY2Nlc3NUb2tlbiB8IG51bGwgPSBudWxsO1xubGV0IHJlZnJlc2hQcm9taXNlOiBQcm9taXNlPENhY2hlZEFjY2Vzc1Rva2VuPiB8IG51bGwgPSBudWxsO1xubGV0IHJlZnJlc2hUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbmxldCBpbnN0YWxsZWRGZXRjaFdyYXBwZXI6IHtcbiAgZ3JhcGhxbFBhdGg6IHN0cmluZztcbiAgb3JpZ2luYWxGZXRjaDogdHlwZW9mIGZldGNoO1xufSB8IG51bGwgPSBudWxsO1xubGV0IGZhaWx1cmVDb3VudCA9IDA7XG5sZXQgcmV0cnlBdE1zID0gMDtcbmxldCBhdXRoUmVmcmVzaFN0YXRlOiBBdXRoUmVmcmVzaFN0YXRlID0geyBzdGF0dXM6ICdhbm9ueW1vdXMnIH07XG5cbmNvbnN0IGxpc3RlbmVycyA9IG5ldyBTZXQ8U2hvcnRBY2Nlc3NUb2tlbkxpc3RlbmVyPigpO1xuY29uc3Qgc3RhdGVMaXN0ZW5lcnMgPSBuZXcgU2V0PEF1dGhSZWZyZXNoU3RhdGVMaXN0ZW5lcj4oKTtcblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBkZWNvZGVCYXNlNjRVcmwodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpO1xuICBjb25zdCBwYWRkZWQgPSBub3JtYWxpemVkLnBhZEVuZChNYXRoLmNlaWwobm9ybWFsaXplZC5sZW5ndGggLyA0KSAqIDQsICc9Jyk7XG4gIHJldHVybiBnbG9iYWxUaGlzLmF0b2IocGFkZGVkKTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZEp3dEV4cGlyZXNBdE1zKHRva2VuOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgWywgcGF5bG9hZF0gPSB0b2tlbi5zcGxpdCgnLicpO1xuICBpZiAocGF5bG9hZCA9PSBudWxsIHx8IHBheWxvYWQgPT09ICcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKGRlY29kZUJhc2U2NFVybChwYXlsb2FkKSkgYXMgeyBleHA/OiB1bmtub3duIH07XG4gICAgaWYgKHR5cGVvZiBkZWNvZGVkLmV4cCAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShkZWNvZGVkLmV4cCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZGVjb2RlZC5leHAgKiAxMDAwO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGdldFJlZnJlc2hTa2V3TXMoKTogbnVtYmVyIHtcbiAgcmV0dXJuIGNvbmZpZy5yZWZyZXNoU2tld01zID8/IERFRkFVTFRfUkVGUkVTSF9TS0VXX01TO1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGdldE1heEJhY2tvZmZEZWxheU1zKCk6IG51bWJlciB7XG4gIHJldHVybiBjb25maWcubWF4QmFja29mZkRlbGF5TXMgPz8gREVGQVVMVF9NQVhfQkFDS09GRl9ERUxBWV9NUztcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBpc1Rva2VuVXNhYmxlKHRva2VuOiBDYWNoZWRBY2Nlc3NUb2tlbiwgbm93TXMgPSBEYXRlLm5vdygpKTogYm9vbGVhbiB7XG4gIHJldHVybiB0b2tlbi5leHBpcmVzQXRNcyAtIGdldFJlZnJlc2hTa2V3TXMoKSA+IG5vd01zO1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGVtaXQoZXZlbnQ6IFNob3J0QWNjZXNzVG9rZW5FdmVudCk6IHZvaWQge1xuICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IHtcbiAgICBsaXN0ZW5lcihldmVudCk7XG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGVtaXRTdGF0ZShzdGF0ZTogQXV0aFJlZnJlc2hTdGF0ZSk6IHZvaWQge1xuICBhdXRoUmVmcmVzaFN0YXRlID0gc3RhdGU7XG4gIHN0YXRlTGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiB7XG4gICAgbGlzdGVuZXIoc3RhdGUpO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBjbGVhclJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgaWYgKHJlZnJlc2hUaW1lciAhPSBudWxsKSB7XG4gICAgY2xlYXJUaW1lb3V0KHJlZnJlc2hUaW1lcik7XG4gICAgcmVmcmVzaFRpbWVyID0gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGNsZWFyQ2FjaGVkVG9rZW4oKTogdm9pZCB7XG4gIGNhY2hlZEFjY2Vzc1Rva2VuID0gbnVsbDtcbiAgY2xlYXJSZWZyZXNoVGltZXIoKTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiByZXNldEZhaWx1cmVCYWNrb2ZmKCk6IHZvaWQge1xuICBmYWlsdXJlQ291bnQgPSAwO1xuICByZXRyeUF0TXMgPSAwO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVTaG9ydEFjY2Vzc1Rva2VuQXV0aChcbiAgbmV4dENvbmZpZzogU2hvcnRBY2Nlc3NUb2tlbkF1dGhDb25maWcsXG4pOiB2b2lkIHtcbiAgY29uZmlnID0ge1xuICAgIC4uLm5leHRDb25maWcsXG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU2hvcnRBY2Nlc3NUb2tlbigpOiB2b2lkIHtcbiAgY2xlYXJDYWNoZWRUb2tlbigpO1xuICByZXNldEZhaWx1cmVCYWNrb2ZmKCk7XG4gIGVtaXRTdGF0ZSh7IHN0YXR1czogJ2Fub255bW91cycgfSk7XG4gIGVtaXQoJ2NsZWFyZWQnKTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBzY2hlZHVsZVJlZnJlc2godG9rZW46IENhY2hlZEFjY2Vzc1Rva2VuKTogdm9pZCB7XG4gIGNsZWFyUmVmcmVzaFRpbWVyKCk7XG4gIGNvbnN0IGRlbGF5TXMgPSBNYXRoLm1heChcbiAgICAwLFxuICAgIHRva2VuLmV4cGlyZXNBdE1zIC0gZ2V0UmVmcmVzaFNrZXdNcygpIC0gRGF0ZS5ub3coKSxcbiAgKTtcbiAgcmVmcmVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAtLSBEZWZlcnJlZCB0aW1lciBjYWxsYmFjay5cbiAgICByZWZyZXNoU2hvcnRBY2Nlc3NUb2tlbkludGVybmFsKHsgZm9yY2U6IHRydWUgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgLy8gVGhlIHN0YXRlIG1hY2hpbmUgcmVjb3JkcyBzY2hlZHVsZWQgcmVmcmVzaCBmYWlsdXJlcy5cbiAgICB9KTtcbiAgfSwgZGVsYXlNcyk7XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gbmV4dEJhY2tvZmZEZWxheU1zKGZhaWx1cmU6IEF1dGhSZWZyZXNoRmFpbHVyZSk6IG51bWJlciB7XG4gIGlmIChmYWlsdXJlLnJldHJ5QWZ0ZXJNcyAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGZhaWx1cmUucmV0cnlBZnRlck1zO1xuICB9XG5cbiAgaWYgKGZhaWx1cmVDb3VudCA8PSAwKSB7XG4gICAgcmV0dXJuIDJfMDAwO1xuICB9XG4gIGlmIChmYWlsdXJlQ291bnQgPT09IDEpIHtcbiAgICByZXR1cm4gNV8wMDA7XG4gIH1cbiAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMikge1xuICAgIHJldHVybiAxNV8wMDA7XG4gIH1cbiAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMykge1xuICAgIHJldHVybiAzMF8wMDA7XG4gIH1cbiAgcmV0dXJuIGdldE1heEJhY2tvZmZEZWxheU1zKCk7XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gYXBwbHlSZWZyZXNoRmFpbHVyZShmYWlsdXJlOiBBdXRoUmVmcmVzaEZhaWx1cmUpOiBuZXZlciB7XG4gIGlmIChmYWlsdXJlLmNsZWFyU2Vzc2lvbikge1xuICAgIGNsZWFyQ2FjaGVkVG9rZW4oKTtcbiAgICByZXRyeUF0TXMgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgZW1pdFN0YXRlKHtcbiAgICAgIHN0YXR1czogJ3Nlc3Npb25fZXhwaXJlZCcsXG4gICAgICByZWFzb246IGZhaWx1cmUucmVhc29uLFxuICAgIH0pO1xuICAgIGVtaXQoJ2NsZWFyZWQnKTtcbiAgICB0aHJvdyBuZXcgQXV0aFJlZnJlc2hFcnJvcihmYWlsdXJlKTtcbiAgfVxuXG4gIGxldCByZXRyeUF0TXNGb3JTdGF0ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBpZiAoZmFpbHVyZS5yZXRyeWFibGUpIHtcbiAgICByZXRyeUF0TXMgPSBEYXRlLm5vdygpICsgbmV4dEJhY2tvZmZEZWxheU1zKGZhaWx1cmUpO1xuICAgIHJldHJ5QXRNc0ZvclN0YXRlID0gcmV0cnlBdE1zO1xuICB9IGVsc2Uge1xuICAgIHJldHJ5QXRNcyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgfVxuICBmYWlsdXJlQ291bnQgKz0gMTtcbiAgZW1pdFN0YXRlKHtcbiAgICBzdGF0dXM6ICd0ZW1wb3JhcmlseV91bmF2YWlsYWJsZScsXG4gICAgcmVhc29uOiBmYWlsdXJlLnJlYXNvbixcbiAgICByZXRyeUF0TXM6IHJldHJ5QXRNc0ZvclN0YXRlLFxuICAgIHByZXZpb3VzRXhwaXJlc0F0TXM6IGNhY2hlZEFjY2Vzc1Rva2VuPy5leHBpcmVzQXRNcyxcbiAgfSk7XG5cbiAgdGhyb3cgbmV3IEF1dGhSZWZyZXNoRXJyb3IoZmFpbHVyZSk7XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gZ2V0UmVmcmVzaENsaWVudE9wdGlvbnMoKTogUmVmcmVzaFRva2VuQ2xpZW50T3B0aW9ucyB7XG4gIHJldHVybiB7XG4gICAgZW5kcG9pbnQ6IGNvbmZpZy5yZWZyZXNoRW5kcG9pbnQsXG4gICAgdGltZW91dE1zOiBjb25maWcucmVmcmVzaFRpbWVvdXRNcyxcbiAgICBjcmVkZW50aWFsczogY29uZmlnLnJlZnJlc2hDcmVkZW50aWFscyxcbiAgICBmZXRjaEltcGw6IGNvbmZpZy5yZWZyZXNoRmV0Y2gsXG4gICAgcmVxdWVzdEluaXQ6IGNvbmZpZy5yZWZyZXNoUmVxdWVzdEluaXQsXG4gICAgcGFyc2VTdWNjZXNzQm9keTogY29uZmlnLnBhcnNlUmVmcmVzaFN1Y2Nlc3NCb2R5LFxuICAgIHBhcnNlRmFpbHVyZUJvZHk6IGNvbmZpZy5wYXJzZVJlZnJlc2hGYWlsdXJlQm9keSxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0QWNjZXNzVG9rZW4oKTogUHJvbWlzZTxDYWNoZWRBY2Nlc3NUb2tlbj4ge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0U2hvcnRBY2Nlc3NUb2tlbihnZXRSZWZyZXNoQ2xpZW50T3B0aW9ucygpKTtcbiAgaWYgKCFyZXN1bHQub2spIHtcbiAgICByZXR1cm4gYXBwbHlSZWZyZXNoRmFpbHVyZShyZXN1bHQuZmFpbHVyZSk7XG4gIH1cblxuICBjb25zdCBleHBpcmVzQXRNcyA9XG4gICAgcmVzdWx0LmV4cGlyZXNBdE1zID8/IHJlYWRKd3RFeHBpcmVzQXRNcyhyZXN1bHQuYWNjZXNzVG9rZW4pO1xuICBpZiAoZXhwaXJlc0F0TXMgPT0gbnVsbCkge1xuICAgIHJldHVybiBhcHBseVJlZnJlc2hGYWlsdXJlKHtcbiAgICAgIHJlYXNvbjogJ0lOVkFMSURfQUNDRVNTX1RPS0VOJyxcbiAgICAgIHJldHJ5YWJsZTogdHJ1ZSxcbiAgICAgIGNsZWFyU2Vzc2lvbjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICByZXNldEZhaWx1cmVCYWNrb2ZmKCk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHJlc3VsdC5hY2Nlc3NUb2tlbixcbiAgICBleHBpcmVzQXRNcyxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBhc3NlcnRSZWZyZXNoQWxsb3dlZCgpOiB2b2lkIHtcbiAgaWYgKGF1dGhSZWZyZXNoU3RhdGUuc3RhdHVzID09PSAnc2Vzc2lvbl9leHBpcmVkJykge1xuICAgIHRocm93IG5ldyBBdXRoUmVmcmVzaEVycm9yKHtcbiAgICAgIHJlYXNvbjogJ1NFU1NJT05fRVhQSVJFRCcsXG4gICAgICByZXRyeWFibGU6IGZhbHNlLFxuICAgICAgY2xlYXJTZXNzaW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKERhdGUubm93KCkgPCByZXRyeUF0TXMpIHtcbiAgICB0aHJvdyBuZXcgQXV0aFJlZnJlc2hFcnJvcih7XG4gICAgICByZWFzb246ICdSRUZSRVNIX0lOX0NPT0xET1dOJyxcbiAgICAgIHJldHJ5YWJsZTogdHJ1ZSxcbiAgICAgIGNsZWFyU2Vzc2lvbjogZmFsc2UsXG4gICAgICByZXRyeUFmdGVyTXM6IHJldHJ5QXRNcyAtIERhdGUubm93KCksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICovXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoU2hvcnRBY2Nlc3NUb2tlbkludGVybmFsKG9wdGlvbnM/OiB7XG4gIGZvcmNlPzogYm9vbGVhbjtcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoXG4gICAgb3B0aW9ucz8uZm9yY2UgIT09IHRydWUgJiZcbiAgICBjYWNoZWRBY2Nlc3NUb2tlbiAhPSBudWxsICYmXG4gICAgaXNUb2tlblVzYWJsZShjYWNoZWRBY2Nlc3NUb2tlbilcbiAgKSB7XG4gICAgcmV0dXJuIGNhY2hlZEFjY2Vzc1Rva2VuLnRva2VuO1xuICB9XG5cbiAgYXNzZXJ0UmVmcmVzaEFsbG93ZWQoKTtcblxuICBpZiAocmVmcmVzaFByb21pc2UgIT0gbnVsbCkge1xuICAgIHJldHVybiAoYXdhaXQgcmVmcmVzaFByb21pc2UpLnRva2VuO1xuICB9XG5cbiAgZW1pdFN0YXRlKHtcbiAgICBzdGF0dXM6ICdyZWZyZXNoaW5nJyxcbiAgICBwcmV2aW91c0V4cGlyZXNBdE1zOiBjYWNoZWRBY2Nlc3NUb2tlbj8uZXhwaXJlc0F0TXMsXG4gIH0pO1xuXG4gIHJlZnJlc2hQcm9taXNlID0gcmVxdWVzdEFjY2Vzc1Rva2VuKCk7XG4gIHRyeSB7XG4gICAgY2FjaGVkQWNjZXNzVG9rZW4gPSBhd2FpdCByZWZyZXNoUHJvbWlzZTtcbiAgICBzY2hlZHVsZVJlZnJlc2goY2FjaGVkQWNjZXNzVG9rZW4pO1xuICAgIGVtaXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6ICdhdXRoZW50aWNhdGVkJyxcbiAgICAgIGV4cGlyZXNBdE1zOiBjYWNoZWRBY2Nlc3NUb2tlbi5leHBpcmVzQXRNcyxcbiAgICB9KTtcbiAgICBlbWl0KCdyZWZyZXNoZWQnKTtcbiAgICByZXR1cm4gY2FjaGVkQWNjZXNzVG9rZW4udG9rZW47XG4gIH0gZmluYWxseSB7XG4gICAgcmVmcmVzaFByb21pc2UgPSBudWxsO1xuICB9XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFNob3J0QWNjZXNzVG9rZW5MaXN0ZW5lcihcbiAgbGlzdGVuZXI6IFNob3J0QWNjZXNzVG9rZW5MaXN0ZW5lcixcbik6ICgpID0+IHZvaWQge1xuICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQXV0aFJlZnJlc2hTdGF0ZUxpc3RlbmVyKFxuICBsaXN0ZW5lcjogQXV0aFJlZnJlc2hTdGF0ZUxpc3RlbmVyLFxuKTogKCkgPT4gdm9pZCB7XG4gIHN0YXRlTGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgc3RhdGVMaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aFJlZnJlc2hTdGF0ZSgpOiBBdXRoUmVmcmVzaFN0YXRlIHtcbiAgcmV0dXJuIGF1dGhSZWZyZXNoU3RhdGU7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hTaG9ydEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChhdXRoUmVmcmVzaFN0YXRlLnN0YXR1cyA9PT0gJ3Nlc3Npb25fZXhwaXJlZCcpIHtcbiAgICByZXNldEZhaWx1cmVCYWNrb2ZmKCk7XG4gICAgZW1pdFN0YXRlKHsgc3RhdHVzOiAnYW5vbnltb3VzJyB9KTtcbiAgfVxuICByZXR1cm4gcmVmcmVzaFNob3J0QWNjZXNzVG9rZW5JbnRlcm5hbCh7IGZvcmNlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTaG9ydEFjY2Vzc1Rva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZWZyZXNoU2hvcnRBY2Nlc3NUb2tlbkludGVybmFsKCk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFNob3J0QWNjZXNzVG9rZW5BdXRoSGVhZGVycygpOiBQcm9taXNlPFxuICBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldFNob3J0QWNjZXNzVG9rZW4oKTtcbiAgICByZXR1cm4ge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gaXNHcmFwaHFsUmVxdWVzdChcbiAgaW5wdXQ6IFJlcXVlc3RJbmZvIHwgVVJMLFxuICBncmFwaHFsUGF0aDogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIGxldCB1cmw6IHN0cmluZztcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmwgPSBpbnB1dDtcbiAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIFVSTCkge1xuICAgIHVybCA9IGlucHV0LnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdXJsID0gaW5wdXQudXJsO1xuICB9XG4gIGlmICh1cmwgPT09IGdyYXBocWxQYXRoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFVSTCh1cmwsIGdsb2JhbFRoaXMubG9jYXRpb24ub3JpZ2luKS5wYXRobmFtZSA9PT0gZ3JhcGhxbFBhdGg7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIGFzUmVjb3JkKHZhbHVlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgaWYgKHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBkZWZhdWx0TG9nb3V0UmVzcG9uc2VNYXRjaGVyKHBheWxvYWQ6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgZGF0YSA9IGFzUmVjb3JkKGFzUmVjb3JkKHBheWxvYWQpPy5kYXRhKTtcbiAgY29uc3QgbG9nb3V0ID0gYXNSZWNvcmQoZGF0YT8ubG9nb3V0KTtcbiAgY29uc3QgbG9nb3V0UGF5bG9hZCA9IGFzUmVjb3JkKGxvZ291dD8ucGF5bG9hZCk7XG5cbiAgcmV0dXJuIChcbiAgICBsb2dvdXQ/LmxvZ2dlZE91dCA9PT0gdHJ1ZSB8fFxuICAgIGxvZ291dFBheWxvYWQ/LmxvZ2dlZE91dCA9PT0gdHJ1ZSB8fFxuICAgIGxvZ291dD8uc3RhdHVzID09PSAnU1VDQ0VTUydcbiAgKTtcbn1cblxuLyoqXG4gKlxuICovXG5hc3luYyBmdW5jdGlvbiBjbGVhckFmdGVyTG9nb3V0UmVzcG9uc2UoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgaW5wdXQ6IFJlcXVlc3RJbmZvIHwgVVJMLFxuICBncmFwaHFsUGF0aDogc3RyaW5nLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghcmVzcG9uc2Uub2sgfHwgIWlzR3JhcGhxbFJlcXVlc3QoaW5wdXQsIGdyYXBocWxQYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBheWxvYWQgPSBhd2FpdCByZXNwb25zZVxuICAgIC5jbG9uZSgpXG4gICAgLmpzb24oKVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgY29uc3QgbWF0Y2hlciA9IGNvbmZpZy5sb2dvdXRSZXNwb25zZU1hdGNoZXIgPz8gZGVmYXVsdExvZ291dFJlc3BvbnNlTWF0Y2hlcjtcblxuICBpZiAobWF0Y2hlcihwYXlsb2FkLCByZXNwb25zZSkpIHtcbiAgICBjbGVhclNob3J0QWNjZXNzVG9rZW4oKTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsU2hvcnRBY2Nlc3NUb2tlbkdyYXBocWxSZXRyeShcbiAgZ3JhcGhxbFBhdGggPSAnL2FwaS9ncmFwaHFsJyxcbik6IHZvaWQge1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMuZmV0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW5zdGFsbGVkRmV0Y2hXcmFwcGVyICE9IG51bGwpIHtcbiAgICBpbnN0YWxsZWRGZXRjaFdyYXBwZXIuZ3JhcGhxbFBhdGggPSBncmFwaHFsUGF0aDtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbEZldGNoID0gZ2xvYmFsVGhpcy5mZXRjaC5iaW5kKGdsb2JhbFRoaXMpO1xuICBpbnN0YWxsZWRGZXRjaFdyYXBwZXIgPSB7XG4gICAgZ3JhcGhxbFBhdGgsXG4gICAgb3JpZ2luYWxGZXRjaCxcbiAgfTtcblxuICBnbG9iYWxUaGlzLmZldGNoID0gYXN5bmMgKGlucHV0LCBpbml0KSA9PiB7XG4gICAgY29uc3QgYWN0aXZlV3JhcHBlciA9IGluc3RhbGxlZEZldGNoV3JhcHBlcjtcbiAgICBjb25zdCBhY3RpdmVHcmFwaHFsUGF0aCA9IGFjdGl2ZVdyYXBwZXI/LmdyYXBocWxQYXRoID8/IGdyYXBocWxQYXRoO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3JpZ2luYWxGZXRjaChpbnB1dCwgaW5pdCk7XG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSA0MDEgfHxcbiAgICAgICFpc0dyYXBocWxSZXF1ZXN0KGlucHV0LCBhY3RpdmVHcmFwaHFsUGF0aClcbiAgICApIHtcbiAgICAgIGF3YWl0IGNsZWFyQWZ0ZXJMb2dvdXRSZXNwb25zZShyZXNwb25zZSwgaW5wdXQsIGFjdGl2ZUdyYXBocWxQYXRoKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCByZWZyZXNoU2hvcnRBY2Nlc3NUb2tlbkludGVybmFsKHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoaW5pdD8uaGVhZGVycyk7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICAgIGNvbnN0IHJldHJ5UmVzcG9uc2UgPSBhd2FpdCBvcmlnaW5hbEZldGNoKGlucHV0LCB7XG4gICAgICAgIC4uLmluaXQsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGNsZWFyQWZ0ZXJMb2dvdXRSZXNwb25zZShyZXRyeVJlc3BvbnNlLCBpbnB1dCwgYWN0aXZlR3JhcGhxbFBhdGgpO1xuICAgICAgcmV0dXJuIHJldHJ5UmVzcG9uc2U7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgdHlwZSB7IEF1dGhSZWZyZXNoRmFpbHVyZVJlYXNvbiwgQXV0aFJlZnJlc2hTdGF0ZSB9O1xuXG5leHBvcnQgY29uc3QgX190ZXN0ID0ge1xuICBpc1Rva2VuVXNhYmxlLFxuICByZXNldEZvclRlc3RzKCk6IHZvaWQge1xuICAgIGNsZWFyQ2FjaGVkVG9rZW4oKTtcbiAgICByZXNldEZhaWx1cmVCYWNrb2ZmKCk7XG4gICAgYXV0aFJlZnJlc2hTdGF0ZSA9IHsgc3RhdHVzOiAnYW5vbnltb3VzJyB9O1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIHJlZnJlc2hFbmRwb2ludDogREVGQVVMVF9SRUZSRVNIX0VORFBPSU5ULFxuICAgIH07XG4gICAgaWYgKGluc3RhbGxlZEZldGNoV3JhcHBlciAhPSBudWxsKSB7XG4gICAgICBnbG9iYWxUaGlzLmZldGNoID0gaW5zdGFsbGVkRmV0Y2hXcmFwcGVyLm9yaWdpbmFsRmV0Y2g7XG4gICAgICBpbnN0YWxsZWRGZXRjaFdyYXBwZXIgPSBudWxsO1xuICAgIH1cbiAgfSxcbiAgcmVzZXRHcmFwaHFsUmV0cnlGb3JUZXN0cygpOiB2b2lkIHtcbiAgICBpZiAoaW5zdGFsbGVkRmV0Y2hXcmFwcGVyICE9IG51bGwpIHtcbiAgICAgIGdsb2JhbFRoaXMuZmV0Y2ggPSBpbnN0YWxsZWRGZXRjaFdyYXBwZXIub3JpZ2luYWxGZXRjaDtcbiAgICAgIGluc3RhbGxlZEZldGNoV3JhcHBlciA9IG51bGw7XG4gICAgfVxuICB9LFxufTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/typescript/lib/lib.es2025.d.ts","../../../node_modules/typescript/lib/lib.esnext.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/typescript/lib/lib.es2025.collection.d.ts","../../../node_modules/typescript/lib/lib.es2025.float16.d.ts","../../../node_modules/typescript/lib/lib.es2025.intl.d.ts","../../../node_modules/typescript/lib/lib.es2025.iterator.d.ts","../../../node_modules/typescript/lib/lib.es2025.promise.d.ts","../../../node_modules/typescript/lib/lib.es2025.regexp.d.ts","../../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../../node_modules/typescript/lib/lib.esnext.date.d.ts","../../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../../node_modules/typescript/lib/lib.esnext.error.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.esnext.temporal.d.ts","../../../node_modules/typescript/lib/lib.esnext.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/typescript/lib/lib.esnext.full.d.ts","../../../node_modules/tslib/tslib.d.ts","../../../node_modules/tslib/modules/index.d.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@types/react/jsx-runtime.d.ts","../src/authRefreshState.ts","../src/refreshTokenClient.ts","../src/shortAccessToken.ts","../src/relay.ts","../src/index.ts"],"fileIdsList":[[96,97],[98],[94],[95,99],[95,99,100,101,102,103],[95,99,100],[95,99,102],[95,99,100,101]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"8a15b4607d9a499e2dbeed9ec0d3c0d7372c850b2d5f1fb259e8f6d41d468a84","impliedFormat":1},{"version":"26e0fe14baee4e127f4365d1ae0b276f400562e45e19e35fd2d4c296684715e6","impliedFormat":1},{"version":"1e9332c23e9a907175e0ffc6a49e236f97b48838cc8aec9ce7e4cec21e544b65","impliedFormat":1},{"version":"3753fbc1113dc511214802a2342280a8b284ab9094f6420e7aa171e868679f91","impliedFormat":1},{"version":"999ca32883495a866aa5737fe1babc764a469e4cde6ee6b136a4b9ae68853e4b","impliedFormat":1},{"version":"17f13ecb98cbc39243f2eee1f16d45cd8ec4706b03ee314f1915f1a8b42f6984","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"2a2de5b9459b3fc44decd9ce6100b72f1b002ef523126c1d3d8b2a4a63d74d78","affectsGlobalScope":true,"impliedFormat":1},{"version":"f13f4b465c99041e912db5c44129a94588e1aafee35a50eab51044833f50b4ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"db9709688f82c9e5f65a119c64d835f906efe5f559d08b11642d56eb85b79357","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b25b8c874acd1a4cf8444c3617e037d444d19080ac9f634b405583fd10ce1f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"37be57d7c90cf1f8112ee2636a068d8fd181289f82b744160ec56a7dc158a9f5","affectsGlobalScope":true,"impliedFormat":1},{"version":"a917a49ac94cd26b754ab84e113369a75d1a47a710661d7cd25e961cc797065f","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d3261badeb7843d157ef3e6f5d1427d0eeb0af0cf9df84a62cfd29fd47ac86e","affectsGlobalScope":true,"impliedFormat":1},{"version":"195daca651dde22f2167ac0d0a05e215308119a3100f5e6268e8317d05a92526","affectsGlobalScope":true,"impliedFormat":1},{"version":"8b11e4285cd2bb164a4dc09248bdec69e9842517db4ca47c1ba913011e44ff2f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0508571a52475e245b02bc50fa1394065a0a3d05277fbf5120c3784b85651799","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f9af488f510c3015af3cc8c267a9e9d96c4dd38a1fdff0e11dc5a544711415b","affectsGlobalScope":true,"impliedFormat":1},{"version":"fc611fea8d30ea72c6bbfb599c9b4d393ce22e2f5bfef2172534781e7d138104","affectsGlobalScope":true,"impliedFormat":1},{"version":"0bd714129fca875f7d4c477a1a392200b0bcd13fb2e80928cd334b63830ea047","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2c9037ae6cd2c52d80ceef0b3c5ffdb488627d71529cf4f63776daf11161c9a","affectsGlobalScope":true,"impliedFormat":1},{"version":"135d5cf4d345f59f1a9caadfafcd858d3d9cc68290db616cc85797224448cccc","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc238c3f81c2984751932b6aab223cd5b830e0ac6cad76389e5e9d2ffc03287d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4a07f9b76d361f572620927e5735b77d6d2101c23cdd94383eb5b706e7b36357","affectsGlobalScope":true,"impliedFormat":1},{"version":"7c4e8dc6ab834cc6baa0227e030606d29e3e8449a9f67cdf5605ea5493c4db29","affectsGlobalScope":true,"impliedFormat":1},{"version":"de7ba0fd02e06cd9a5bd4ab441ed0e122735786e67dde1e849cced1cd8b46b78","affectsGlobalScope":true,"impliedFormat":1},{"version":"6148e4e88d720a06855071c3db02069434142a8332cf9c182cda551adedf3156","affectsGlobalScope":true,"impliedFormat":1},{"version":"d63dba625b108316a40c95a4425f8d4294e0deeccfd6c7e59d819efa19e23409","affectsGlobalScope":true,"impliedFormat":1},{"version":"0568d6befee03dd435bed4fc25c4e46865b24bdcb8c563fdc21f580a2c301904","affectsGlobalScope":true,"impliedFormat":1},{"version":"30d62269b05b584741f19a5369852d5d34895aa2ac4fd948956f886d15f9cc0d","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"ffbe6d7b295306b2ba88030f65b74c107d8d99bdcf596ea99c62a02f606108b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"996fb27b15277369c68a4ba46ed138b4e9e839a02fb4ec756f7997629242fd9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"79b712591b270d4778c89706ca2cfc56ddb8c3f895840e477388f1710dc5eda9","affectsGlobalScope":true,"impliedFormat":1},{"version":"20884846cef428b992b9bd032e70a4ef88e349263f63aeddf04dda837a7dba26","affectsGlobalScope":true,"impliedFormat":1},{"version":"5fcab789c73a97cd43828ee3cc94a61264cf24d4c44472ce64ced0e0f148bdb2","affectsGlobalScope":true,"impliedFormat":1},{"version":"db59a81f070c1880ad645b2c0275022baa6a0c4f0acdc58d29d349c6efcf0903","affectsGlobalScope":true,"impliedFormat":1},{"version":"673294292640f5722b700e7d814e17aaf7d93f83a48a2c9b38f33cbc940ad8b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d786b48f934cbca483b3c6d0a798cb43bbb4ada283e76fb22c28e53ae05b9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"142efd4ce210576f777dc34df121777be89eda476942d6d6663b03dcb53be3ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"379bc41580c2d774f82e828c70308f24a005b490c25ba34d679d84bcf05c3d9d","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed484fb2aa8a1a23d0277056ec3336e0a0b52f9b8d6a961f338a642faf43235d","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ffedae1d1c2d53fdbca1c96d3c7dda544281f7d262f99b6880634f8fd8d9820","affectsGlobalScope":true,"impliedFormat":1},{"version":"83a730b125d477dd264df8ba479afab27a3dae7152b005c214ab94dc7ee44fd3","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"ef4a897cd2a3f91000c10264e400b3667c7e51e1b7365f03b62e8081dc53bde6","impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"363fc57a10ffae190ae00febe8fe532098dd58d2d90a9a4af3c739036452dd0c","signature":"710d8c74e3096b17c6dd5198c2ce67ce15eafabd5bd13d24a8f6da81e503ea58"},{"version":"23f034eff989c2b3758561a027f2f11c902d6525b6fb7f6b99beae2071033f75","signature":"7ce7be6676ec4219faab53f38d81df0276e1f52ceb931200e816986e269f137f"},{"version":"a01c43aca0f6a2a21808ebd9849bfa59f1326737612bbf2af9ca24a320e9f069","signature":"f1c70d00706549382ce8fd757324e05bbe6a6eba4c137df423cedf99e4e1544a"},{"version":"ea4b96e59ba87d45f5dc1760b142649c24dc1487a5b49e4248a7005a66ca2eef","signature":"8a120423e615390c75770c9d4c55424791defde175f9f933596d994d5cd6e120"},"1f34aed68105919823c4f64b8cc5627f6c8cdbf52722e5662246a1e9e58e8008"],"root":[[100,104]],"options":{"allowJs":true,"composite":true,"declaration":true,"declarationMap":true,"importHelpers":true,"inlineSourceMap":true,"inlineSources":true,"jsx":4,"module":99,"noEmitHelpers":true,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./esm","removeComments":true,"rootDir":"../src","skipLibCheck":true,"strict":true,"strictNullChecks":true,"target":99},"referencedMap":[[98,1],[99,2],[95,3],[100,4],[104,5],[101,6],[103,7],[102,8]],"latestChangedDtsFile":"./esm/index.d.ts","version":"6.0.3"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type BuiltInAuthRefreshFailureReason = 'NETWORK_ERROR' | 'TIMEOUT' | 'INVALID_RESPONSE' | 'INVALID_ACCESS_TOKEN' | 'REFRESH_IN_COOLDOWN' | 'SESSION_EXPIRED' | 'CREDENTIALS_REJECTED';
|
|
2
|
+
export type AuthRefreshFailureReason = BuiltInAuthRefreshFailureReason | (string & {});
|
|
3
|
+
export type AuthRefreshState = {
|
|
4
|
+
status: 'anonymous';
|
|
5
|
+
} | {
|
|
6
|
+
status: 'refreshing';
|
|
7
|
+
previousExpiresAtMs?: number;
|
|
8
|
+
} | {
|
|
9
|
+
status: 'authenticated';
|
|
10
|
+
expiresAtMs: number;
|
|
11
|
+
} | {
|
|
12
|
+
status: 'temporarily_unavailable';
|
|
13
|
+
reason: AuthRefreshFailureReason;
|
|
14
|
+
retryAtMs?: number;
|
|
15
|
+
previousExpiresAtMs?: number;
|
|
16
|
+
} | {
|
|
17
|
+
status: 'session_expired';
|
|
18
|
+
reason: AuthRefreshFailureReason;
|
|
19
|
+
};
|
|
20
|
+
export interface AuthRefreshFailure {
|
|
21
|
+
reason: AuthRefreshFailureReason;
|
|
22
|
+
retryable: boolean;
|
|
23
|
+
clearSession: boolean;
|
|
24
|
+
retryAfterMs?: number;
|
|
25
|
+
status?: number;
|
|
26
|
+
message?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare class AuthRefreshError extends Error {
|
|
29
|
+
readonly failure: AuthRefreshFailure;
|
|
30
|
+
constructor(failure: AuthRefreshFailure);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=authRefreshState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authRefreshState.d.ts","sourceRoot":"","sources":["../../src/authRefreshState.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,+BAA+B,GACvC,eAAe,GACf,SAAS,GACT,kBAAkB,GAClB,sBAAsB,GACtB,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,wBAAwB,GAChC,+BAA+B,GAC/B,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,gBAAgB,GACxB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAChD;IACE,MAAM,EAAE,yBAAyB,CAAC;IAClC,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,GACD;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,OAAO,EAAE,kBAAkB,CAAC;gBAEzB,OAAO,EAAE,kBAAkB;CAK/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { AuthRefreshFailure } from './authRefreshState.js';
|
|
2
|
+
export interface RefreshTokenClientSuccess {
|
|
3
|
+
ok: true;
|
|
4
|
+
accessToken: string;
|
|
5
|
+
expiresAtMs?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RefreshTokenClientFailure {
|
|
8
|
+
ok: false;
|
|
9
|
+
failure: AuthRefreshFailure;
|
|
10
|
+
}
|
|
11
|
+
export type RefreshTokenClientResult = RefreshTokenClientSuccess | RefreshTokenClientFailure;
|
|
12
|
+
export type RefreshTokenSuccessParser = (body: unknown, response: Response) => RefreshTokenClientSuccess | null;
|
|
13
|
+
export type RefreshTokenFailureParser = (body: unknown, response: Response) => AuthRefreshFailure | null;
|
|
14
|
+
export interface RefreshTokenClientOptions {
|
|
15
|
+
endpoint: string | URL;
|
|
16
|
+
timeoutMs?: number;
|
|
17
|
+
credentials?: RequestCredentials;
|
|
18
|
+
fetchImpl?: typeof fetch;
|
|
19
|
+
requestInit?: RequestInit | (() => RequestInit | Promise<RequestInit>);
|
|
20
|
+
parseSuccessBody?: RefreshTokenSuccessParser;
|
|
21
|
+
parseFailureBody?: RefreshTokenFailureParser;
|
|
22
|
+
}
|
|
23
|
+
export declare const DEFAULT_REFRESH_TIMEOUT_MS = 10000;
|
|
24
|
+
export declare function parseRetryAfterMs(response: Response): number | undefined;
|
|
25
|
+
export declare function parseDefaultRefreshSuccessBody(body: unknown): RefreshTokenClientSuccess | null;
|
|
26
|
+
export declare function parseDefaultRefreshFailureBody(body: unknown, response: Response): AuthRefreshFailure | null;
|
|
27
|
+
export declare function requestShortAccessToken(options: RefreshTokenClientOptions): Promise<RefreshTokenClientResult>;
|
|
28
|
+
//# sourceMappingURL=refreshTokenClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refreshTokenClient.d.ts","sourceRoot":"","sources":["../../src/refreshTokenClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,IAAI,CAAC;IACT,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,MAAM,wBAAwB,GAChC,yBAAyB,GACzB,yBAAyB,CAAC;AAE9B,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,QAAQ,KACf,yBAAyB,GAAG,IAAI,CAAC;AAEtC,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,QAAQ,KACf,kBAAkB,GAAG,IAAI,CAAC;AAE/B,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACvE,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;CAC9C;AAED,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAYjD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAiBxE;AAKD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,OAAO,GACZ,yBAAyB,GAAG,IAAI,CAgClC;AAKD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,QAAQ,GACjB,kBAAkB,GAAG,IAAI,CAgC3B;AAiDD,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAmDnC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ShortAccessTokenAuthConfig } from './shortAccessToken.js';
|
|
2
|
+
export interface RelayReconnectOptions {
|
|
3
|
+
reason?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface RelayEnvironmentConfiguration {
|
|
6
|
+
httpUrl?: string;
|
|
7
|
+
wsUrl?: string;
|
|
8
|
+
getDataId?: (fieldValue: unknown, typeName: string) => string | null;
|
|
9
|
+
getAuthHeaders?: () => Record<string, string> | Promise<Record<string, string>>;
|
|
10
|
+
}
|
|
11
|
+
export interface ConfigureShortAccessTokenRelayEnvironmentInput {
|
|
12
|
+
httpUrl: string;
|
|
13
|
+
wsUrl: string;
|
|
14
|
+
refreshEndpoint: string | URL;
|
|
15
|
+
auth?: Omit<ShortAccessTokenAuthConfig, 'refreshEndpoint'>;
|
|
16
|
+
getDataId?: (fieldValue: unknown, typeName: string) => string | null;
|
|
17
|
+
configureRelayEnvironment: (options: RelayEnvironmentConfiguration) => void;
|
|
18
|
+
reconnectRelayWebSocket: (options?: RelayReconnectOptions) => void;
|
|
19
|
+
}
|
|
20
|
+
export interface ShortAccessTokenRelayEnvironment {
|
|
21
|
+
resetRelayTransport: () => void;
|
|
22
|
+
dispose: () => void;
|
|
23
|
+
}
|
|
24
|
+
export declare function configureShortAccessTokenRelayEnvironment(input: ConfigureShortAccessTokenRelayEnvironmentInput): ShortAccessTokenRelayEnvironment;
|
|
25
|
+
//# sourceMappingURL=relay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,0BAA0B,EAChC,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrE,cAAc,CAAC,EAAE,MACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,8CAA8C;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACrE,yBAAyB,EAAE,CAAC,OAAO,EAAE,6BAA6B,KAAK,IAAI,CAAC;IAC5E,uBAAuB,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,gCAAgC;IAC/C,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAKD,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,8CAA8C,GACpD,gCAAgC,CAmClC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type AuthRefreshFailureReason, type AuthRefreshState } from './authRefreshState.js';
|
|
2
|
+
import { type RefreshTokenFailureParser, type RefreshTokenSuccessParser } from './refreshTokenClient.js';
|
|
3
|
+
interface CachedAccessToken {
|
|
4
|
+
token: string;
|
|
5
|
+
expiresAtMs: number;
|
|
6
|
+
}
|
|
7
|
+
export type ShortAccessTokenEvent = 'refreshed' | 'cleared';
|
|
8
|
+
export type ShortAccessTokenListener = (event: ShortAccessTokenEvent) => void;
|
|
9
|
+
export type AuthRefreshStateListener = (state: AuthRefreshState) => void;
|
|
10
|
+
export type LogoutResponseMatcher = (payload: unknown, response: Response) => boolean;
|
|
11
|
+
export interface ShortAccessTokenAuthConfig {
|
|
12
|
+
refreshEndpoint: string | URL;
|
|
13
|
+
refreshTimeoutMs?: number;
|
|
14
|
+
refreshCredentials?: RequestCredentials;
|
|
15
|
+
refreshFetch?: typeof fetch;
|
|
16
|
+
refreshRequestInit?: RequestInit | (() => RequestInit | Promise<RequestInit>);
|
|
17
|
+
parseRefreshSuccessBody?: RefreshTokenSuccessParser;
|
|
18
|
+
parseRefreshFailureBody?: RefreshTokenFailureParser;
|
|
19
|
+
refreshSkewMs?: number;
|
|
20
|
+
maxBackoffDelayMs?: number;
|
|
21
|
+
logoutResponseMatcher?: LogoutResponseMatcher;
|
|
22
|
+
}
|
|
23
|
+
export declare function readJwtExpiresAtMs(token: string): number | null;
|
|
24
|
+
declare function isTokenUsable(token: CachedAccessToken, nowMs?: number): boolean;
|
|
25
|
+
export declare function configureShortAccessTokenAuth(nextConfig: ShortAccessTokenAuthConfig): void;
|
|
26
|
+
export declare function clearShortAccessToken(): void;
|
|
27
|
+
export declare function addShortAccessTokenListener(listener: ShortAccessTokenListener): () => void;
|
|
28
|
+
export declare function addAuthRefreshStateListener(listener: AuthRefreshStateListener): () => void;
|
|
29
|
+
export declare function getAuthRefreshState(): AuthRefreshState;
|
|
30
|
+
export declare function refreshShortAccessToken(): Promise<string>;
|
|
31
|
+
export declare function getShortAccessToken(): Promise<string>;
|
|
32
|
+
export declare function getShortAccessTokenAuthHeaders(): Promise<Record<string, string>>;
|
|
33
|
+
export declare function installShortAccessTokenGraphqlRetry(graphqlPath?: string): void;
|
|
34
|
+
export type { AuthRefreshFailureReason, AuthRefreshState };
|
|
35
|
+
export declare const __test: {
|
|
36
|
+
isTokenUsable: typeof isTokenUsable;
|
|
37
|
+
resetForTests(): void;
|
|
38
|
+
resetGraphqlRetryForTests(): void;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=shortAccessToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortAccessToken.d.ts","sourceRoot":"","sources":["../../src/shortAccessToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,EAC/B,MAAM,yBAAyB,CAAC;AAEjC,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;AAC9E,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAEzE,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,KACf,OAAO,CAAC;AAEb,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,MAAM,GAAG,GAAG,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,KAAK,CAAC;IAC5B,kBAAkB,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9E,uBAAuB,CAAC,EAAE,yBAAyB,CAAC;IACpD,uBAAuB,CAAC,EAAE,yBAAyB,CAAC;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C;AAmCD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe/D;AAmBD,iBAAS,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,SAAa,GAAG,OAAO,CAE5E;AAkDD,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,0BAA0B,GACrC,IAAI,CAIN;AAKD,wBAAgB,qBAAqB,IAAI,IAAI,CAK5C;AAqLD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,wBAAwB,GACjC,MAAM,IAAI,CAKZ;AAKD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,wBAAwB,GACjC,MAAM,IAAI,CAKZ;AAKD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD;AAKD,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,CAM/D;AAKD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAE3D;AAKD,wBAAsB,8BAA8B,IAAI,OAAO,CAC7D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACvB,CASA;AAgFD,wBAAgB,mCAAmC,CACjD,WAAW,SAAiB,GAC3B,IAAI,CA0CN;AAED,YAAY,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,CAAC;AAE3D,eAAO,MAAM,MAAM;;qBAEA,IAAI;iCAYQ,IAAI;CAMlC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@plumile/auth",
|
|
3
|
+
"version": "0.1.106",
|
|
4
|
+
"description": "Short-lived access token helpers for Plumile applications",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"main": "lib/esm/index.js",
|
|
8
|
+
"module": "lib/esm/index.js",
|
|
9
|
+
"types": "lib/types/index.d.ts",
|
|
10
|
+
"typings": "lib/types/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./lib/types/index.d.ts",
|
|
14
|
+
"import": "./lib/esm/index.js",
|
|
15
|
+
"default": "./lib/esm/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./authRefreshState.js": {
|
|
18
|
+
"types": "./lib/types/authRefreshState.d.ts",
|
|
19
|
+
"import": "./lib/esm/authRefreshState.js",
|
|
20
|
+
"default": "./lib/esm/authRefreshState.js"
|
|
21
|
+
},
|
|
22
|
+
"./refreshTokenClient.js": {
|
|
23
|
+
"types": "./lib/types/refreshTokenClient.d.ts",
|
|
24
|
+
"import": "./lib/esm/refreshTokenClient.js",
|
|
25
|
+
"default": "./lib/esm/refreshTokenClient.js"
|
|
26
|
+
},
|
|
27
|
+
"./shortAccessToken.js": {
|
|
28
|
+
"types": "./lib/types/shortAccessToken.d.ts",
|
|
29
|
+
"import": "./lib/esm/shortAccessToken.js",
|
|
30
|
+
"default": "./lib/esm/shortAccessToken.js"
|
|
31
|
+
},
|
|
32
|
+
"./relay.js": {
|
|
33
|
+
"types": "./lib/types/relay.d.ts",
|
|
34
|
+
"import": "./lib/esm/relay.js",
|
|
35
|
+
"default": "./lib/esm/relay.js"
|
|
36
|
+
},
|
|
37
|
+
"./package.json": "./package.json"
|
|
38
|
+
},
|
|
39
|
+
"sideEffects": false,
|
|
40
|
+
"author": "Olivier Hardy <olivier@plumile.com>",
|
|
41
|
+
"homepage": "https://gitlab.com/plumile/js/-/tree/main/packages/auth",
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build:package": "./tools/build-package.sh",
|
|
44
|
+
"build:package:esm": "tsc --build tsconfig.esm.json",
|
|
45
|
+
"build:package:types": "tsc --build tsconfig.types.json",
|
|
46
|
+
"check:build-package": "tsc --noEmit",
|
|
47
|
+
"clean": "rimraf lib && rimraf *.tsbuildinfo",
|
|
48
|
+
"test:build-package": "./tools/test-build-package.sh"
|
|
49
|
+
},
|
|
50
|
+
"repository": {
|
|
51
|
+
"type": "git",
|
|
52
|
+
"url": "https://gitlab.com/plumile/js",
|
|
53
|
+
"directory": "packages/auth"
|
|
54
|
+
},
|
|
55
|
+
"bugs": {
|
|
56
|
+
"url": "https://gitlab.com/plumile/js/-/issues"
|
|
57
|
+
},
|
|
58
|
+
"keywords": [
|
|
59
|
+
"auth",
|
|
60
|
+
"jwt",
|
|
61
|
+
"relay",
|
|
62
|
+
"typescript"
|
|
63
|
+
],
|
|
64
|
+
"engines": {
|
|
65
|
+
"node": ">=21.0.0",
|
|
66
|
+
"npm": ">=8.0.0"
|
|
67
|
+
},
|
|
68
|
+
"dependencies": {
|
|
69
|
+
"tslib": "^2.8.1"
|
|
70
|
+
},
|
|
71
|
+
"devDependencies": {
|
|
72
|
+
"rimraf": "6.1.3",
|
|
73
|
+
"typescript": "6.0.3"
|
|
74
|
+
},
|
|
75
|
+
"files": [
|
|
76
|
+
"lib",
|
|
77
|
+
"README.md"
|
|
78
|
+
],
|
|
79
|
+
"publishConfig": {
|
|
80
|
+
"access": "public"
|
|
81
|
+
}
|
|
82
|
+
}
|