@openstax/ts-utils 1.16.0 → 1.16.2
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/dist/cjs/middleware/apiSlowResponseMiddleware.js +1 -2
- package/dist/cjs/services/authProvider/browser.js +1 -1
- package/dist/cjs/services/authProvider/decryption.d.ts +4 -4
- package/dist/cjs/services/authProvider/decryption.js +6 -5
- package/dist/cjs/services/documentStore/unversioned/file-system.js +1 -1
- package/dist/cjs/services/launchParams/signer.d.ts +1 -1
- package/dist/cjs/services/launchParams/verifier.d.ts +2 -1
- package/dist/cjs/services/launchParams/verifier.js +14 -2
- package/dist/cjs/tsconfig.without-specs.cjs.tsbuildinfo +1 -1
- package/dist/esm/middleware/apiSlowResponseMiddleware.js +1 -2
- package/dist/esm/services/authProvider/browser.js +1 -1
- package/dist/esm/services/authProvider/decryption.d.ts +4 -4
- package/dist/esm/services/authProvider/decryption.js +6 -5
- package/dist/esm/services/documentStore/unversioned/file-system.js +1 -1
- package/dist/esm/services/launchParams/signer.d.ts +1 -1
- package/dist/esm/services/launchParams/verifier.d.ts +2 -1
- package/dist/esm/services/launchParams/verifier.js +14 -2
- package/dist/esm/tsconfig.without-specs.esm.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -32,7 +32,7 @@ export const createSlowResponseMiddleware = (config) => {
|
|
|
32
32
|
});
|
|
33
33
|
resolve(apiTextResponse(504, '504 Gateway Timeout'));
|
|
34
34
|
}, timeoutAfter));
|
|
35
|
-
const requestPromise = response.
|
|
35
|
+
const requestPromise = response.finally(() => {
|
|
36
36
|
const time = Date.now() - start;
|
|
37
37
|
if (timeout !== undefined) {
|
|
38
38
|
clearTimeout(timeout);
|
|
@@ -43,7 +43,6 @@ export const createSlowResponseMiddleware = (config) => {
|
|
|
43
43
|
time,
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
|
-
return response;
|
|
47
46
|
});
|
|
48
47
|
return timeoutPromise ? Promise.race([timeoutPromise, requestPromise]) : requestPromise;
|
|
49
48
|
});
|
|
@@ -8,12 +8,12 @@ declare type Config = {
|
|
|
8
8
|
interface Initializer<C> {
|
|
9
9
|
configSpace?: C;
|
|
10
10
|
}
|
|
11
|
-
export declare type DecryptionAuthProvider =
|
|
12
|
-
getTokenExpiration: () => Promise<number | undefined>;
|
|
13
|
-
}
|
|
11
|
+
export declare type DecryptionAuthProvider = AuthProvider & {
|
|
12
|
+
getTokenExpiration: (tokenString?: string) => Promise<number | null | undefined>;
|
|
13
|
+
};
|
|
14
14
|
export declare const decryptionAuthProvider: <C extends string = "decryption">(initializer: Initializer<C>) => (configProvider: { [key in C]: {
|
|
15
15
|
cookieName: import("../../config").ConfigValueProvider<string>;
|
|
16
16
|
encryptionPrivateKey: import("../../config").ConfigValueProvider<string>;
|
|
17
17
|
signaturePublicKey: import("../../config").ConfigValueProvider<string>;
|
|
18
|
-
}; }) => DecryptionAuthProvider
|
|
18
|
+
}; }) => CookieAuthProvider<DecryptionAuthProvider>;
|
|
19
19
|
export {};
|
|
@@ -18,8 +18,8 @@ export const decryptionAuthProvider = (initializer) => (configProvider) => {
|
|
|
18
18
|
}
|
|
19
19
|
return { headers };
|
|
20
20
|
};
|
|
21
|
-
const getPayload = async () => {
|
|
22
|
-
const
|
|
21
|
+
const getPayload = async (tokenString) => {
|
|
22
|
+
const token = tokenString !== null && tokenString !== void 0 ? tokenString : getAuthTokenOrCookie(request, await cookieName())[0];
|
|
23
23
|
if (!token) {
|
|
24
24
|
return undefined;
|
|
25
25
|
}
|
|
@@ -37,9 +37,10 @@ export const decryptionAuthProvider = (initializer) => (configProvider) => {
|
|
|
37
37
|
};
|
|
38
38
|
return {
|
|
39
39
|
getAuthorizedFetchConfig,
|
|
40
|
-
getTokenExpiration: async () => {
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
getTokenExpiration: async (tokenString) => {
|
|
41
|
+
var _a;
|
|
42
|
+
const payload = await getPayload(tokenString);
|
|
43
|
+
return payload ? ((_a = payload.exp) !== null && _a !== void 0 ? _a : null) : undefined;
|
|
43
44
|
},
|
|
44
45
|
getUser: async () => {
|
|
45
46
|
if (!user) {
|
|
@@ -51,7 +51,7 @@ export const fileSystemUnversionedDocumentStore = (initializer) => () => (config
|
|
|
51
51
|
await mkTableDir;
|
|
52
52
|
const data = await load(filename);
|
|
53
53
|
if (!data) {
|
|
54
|
-
throw new
|
|
54
|
+
throw new NotFoundError(`Item with ${hashKey.toString()} "${id}" does not exist`);
|
|
55
55
|
}
|
|
56
56
|
const newValue = typeof data[attribute] === 'number' ? data[attribute] + 1 : 1;
|
|
57
57
|
const newItem = { ...data, [hashKey]: id, [attribute]: newValue };
|
|
@@ -21,7 +21,7 @@ export declare const createLaunchSigner: <C extends string = "launch">({ configS
|
|
|
21
21
|
jwks: () => Promise<{
|
|
22
22
|
keys: JWK.RawKey[];
|
|
23
23
|
}>;
|
|
24
|
-
sign: (subject: string, maxExpiresIn?: string | number | undefined) => Promise<string>;
|
|
24
|
+
sign: (subject: string, maxExpiresIn?: string | number | null | undefined) => Promise<string>;
|
|
25
25
|
};
|
|
26
26
|
export declare type LaunchSigner = ReturnType<ReturnType<typeof createLaunchSigner>>;
|
|
27
27
|
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import jwt from 'jsonwebtoken';
|
|
1
2
|
import type { JWK } from 'node-jose';
|
|
2
3
|
import { ConfigProviderForConfig } from '../../config';
|
|
3
4
|
declare type Config = {
|
|
@@ -15,7 +16,7 @@ interface Initializer<C> {
|
|
|
15
16
|
export declare const createLaunchVerifier: <C extends string = "launch">({ configSpace, fetcher }: Initializer<C>) => (configProvider: { [key in C]: {
|
|
16
17
|
trustedDomain: import("../../config").ConfigValueProvider<string>;
|
|
17
18
|
}; }) => {
|
|
18
|
-
verify: (token: string) => Promise<
|
|
19
|
+
verify: <T = undefined>(...[token, validator]: T extends undefined ? [string] : [string, (input: any) => T]) => Promise<T extends undefined ? jwt.JwtPayload : T>;
|
|
19
20
|
};
|
|
20
21
|
export declare type LaunchVerifier = ReturnType<ReturnType<typeof createLaunchVerifier>>;
|
|
21
22
|
export {};
|
|
@@ -34,7 +34,7 @@ export const createLaunchVerifier = ({ configSpace, fetcher }) => (configProvide
|
|
|
34
34
|
callback(error);
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
-
const verify = (token) => new Promise((resolve, reject) => jwt.verify(token, getKey, {}, (err, payload) => {
|
|
37
|
+
const verify = (...[token, validator]) => new Promise((resolve, reject) => jwt.verify(token, getKey, {}, (err, payload) => {
|
|
38
38
|
if (err && err instanceof TokenExpiredError) {
|
|
39
39
|
reject(new SessionExpiredError());
|
|
40
40
|
}
|
|
@@ -48,7 +48,19 @@ export const createLaunchVerifier = ({ configSpace, fetcher }) => (configProvide
|
|
|
48
48
|
reject(new Error('JWT payload missing sub claim'));
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
51
|
-
|
|
51
|
+
// we are migrating away from json encoding all the parameters into the `sub` claim
|
|
52
|
+
// and into using separate claims for each parameter. in transition, we check if the sub
|
|
53
|
+
// is json and return it if it is. this is still a breaking change when using this
|
|
54
|
+
// utility because applications no longer need to independently json parse the result
|
|
55
|
+
// starting now.
|
|
56
|
+
const parsed = payload;
|
|
57
|
+
try {
|
|
58
|
+
const jsonSubContents = JSON.parse(payload.sub);
|
|
59
|
+
Object.assign(parsed, jsonSubContents);
|
|
60
|
+
}
|
|
61
|
+
catch (e) { } // eslint-disable-line no-empty
|
|
62
|
+
// conditional return types are annoying
|
|
63
|
+
resolve((validator ? validator(parsed) : parsed));
|
|
52
64
|
}
|
|
53
65
|
}));
|
|
54
66
|
return { verify };
|