@digicatapult/tsoa-oauth-express 0.1.109 → 1.0.0
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/build/index.d.ts +38 -3
- package/build/index.js +104 -44
- package/package.json +8 -10
- package/build/index.d.mts +0 -5
- package/build/index.js.map +0 -1
- package/build/index.mjs +0 -4
- package/build/index.mjs.map +0 -1
package/build/index.d.ts
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import type express from 'express';
|
|
2
2
|
import jwt from 'jsonwebtoken';
|
|
3
|
-
export type ErrorReason = 'INVALID_SECURITY_TYPE' | 'NO_TOKEN' | 'MISSING_SCOPES' | 'INVALID_TOKEN';
|
|
3
|
+
export type ErrorReason = 'INVALID_SECURITY_TYPE' | 'NO_TOKEN' | 'MISSING_SCOPES' | 'INVALID_TOKEN' | 'INTERNAL_ERROR';
|
|
4
|
+
/**
|
|
5
|
+
* Error which represents and authentication failure
|
|
6
|
+
*/
|
|
4
7
|
export declare class OauthError extends Error {
|
|
5
8
|
reason: ErrorReason;
|
|
6
9
|
constructor(reason: ErrorReason);
|
|
7
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Error which represents multiple authentication failures when using `mergeAcceptAny`
|
|
13
|
+
*/
|
|
14
|
+
export declare class AggregateOAuthError extends Error {
|
|
15
|
+
errors: OauthError[];
|
|
16
|
+
constructor(errors: OauthError[]);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Options to be used when creating an authenticator.
|
|
20
|
+
*/
|
|
8
21
|
export interface AuthOptions {
|
|
9
22
|
securityName?: string;
|
|
10
23
|
verifyOptions?: jwt.VerifyOptions & {
|
|
@@ -13,7 +26,29 @@ export interface AuthOptions {
|
|
|
13
26
|
jwksUri: () => Promise<string>;
|
|
14
27
|
getAccessToken: (req: express.Request) => Promise<string | undefined>;
|
|
15
28
|
getScopesFromToken: (decoded: string | jwt.JwtPayload) => Promise<string[]>;
|
|
16
|
-
tryRefreshTokens?: (req: express.Request) => Promise<
|
|
29
|
+
tryRefreshTokens?: (req: express.Request) => Promise<string | false>;
|
|
17
30
|
}
|
|
18
|
-
|
|
31
|
+
/**
|
|
32
|
+
* User type populated onto `express` when authentication is successful
|
|
33
|
+
*/
|
|
34
|
+
export type TsoaExpressUser = {
|
|
35
|
+
securityName: string;
|
|
36
|
+
jwt: jwt.JwtPayload | string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Tsoa authentication function
|
|
40
|
+
*/
|
|
41
|
+
export type TsoaExpressAuthenticator = (request: express.Request, securityName: string, scopes?: string[]) => Promise<TsoaExpressUser>;
|
|
42
|
+
/**
|
|
43
|
+
* Builds an authenticator for using with `tsoa`
|
|
44
|
+
* @param options
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
19
47
|
export default function mkExpressAuthentication(options: AuthOptions): TsoaExpressAuthenticator;
|
|
48
|
+
/**
|
|
49
|
+
* Takes an array of TsoaExpressAuthenticator's producing a new TsoaExpressAuthenticator that will try each authenticator in turn. If any authenticator
|
|
50
|
+
* succeeds authentication will pass with the reuslt of that authenticator . If all fail the first failure reason is thrown. At least one TsoaExpressAuthenticator must be provided
|
|
51
|
+
* @param authenticators The array of TsoaExpressAuthenticator to evaluate a request against
|
|
52
|
+
* @returns A TsoaExpressAuthenticator which aggregates the provided authenticators
|
|
53
|
+
*/
|
|
54
|
+
export declare function mergeAcceptAny(authenticators: [TsoaExpressAuthenticator, ...TsoaExpressAuthenticator[]]): TsoaExpressAuthenticator;
|
package/build/index.js
CHANGED
|
@@ -1,33 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const jwks_rsa_1 = __importDefault(require("jwks-rsa"));
|
|
10
|
-
class OauthError extends Error {
|
|
11
|
-
constructor(reason) {
|
|
12
|
-
super(`Auth failed for reason: ${reason}`);
|
|
13
|
-
this.reason = reason;
|
|
1
|
+
import jwt from 'jsonwebtoken';
|
|
2
|
+
import jwksClient from 'jwks-rsa';
|
|
3
|
+
/**
|
|
4
|
+
* Error which represents and authentication failure
|
|
5
|
+
*/ export class OauthError extends Error {
|
|
6
|
+
reason;
|
|
7
|
+
constructor(reason){
|
|
8
|
+
super(`Auth failed for reason: ${reason}`), this.reason = reason;
|
|
14
9
|
}
|
|
15
10
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
throw new OauthError('INVALID_TOKEN');
|
|
23
|
-
}
|
|
24
|
-
const refresh = options.tryRefreshTokens;
|
|
25
|
-
if (!refresh) {
|
|
26
|
-
throw new OauthError('INVALID_TOKEN');
|
|
27
|
-
}
|
|
28
|
-
const refreshSucceeded = await refresh(request);
|
|
29
|
-
if (!refreshSucceeded) {
|
|
30
|
-
throw new OauthError('INVALID_TOKEN');
|
|
11
|
+
/**
|
|
12
|
+
* Error which represents multiple authentication failures when using `mergeAcceptAny`
|
|
13
|
+
*/ export class AggregateOAuthError extends Error {
|
|
14
|
+
errors;
|
|
15
|
+
constructor(errors){
|
|
16
|
+
super(`Auth failed with multiple errors: [${errors.map((e)=>e.reason).join(', ')}]`), this.errors = errors;
|
|
31
17
|
}
|
|
32
18
|
}
|
|
33
19
|
async function checkScopes(token, requiredScopes, options) {
|
|
@@ -38,27 +24,31 @@ async function checkScopes(token, requiredScopes, options) {
|
|
|
38
24
|
throw new OauthError('MISSING_SCOPES');
|
|
39
25
|
}
|
|
40
26
|
const tokenScopes = new Set(await options.getScopesFromToken(token));
|
|
41
|
-
for (const requiredScope of requiredScopes)
|
|
27
|
+
for (const requiredScope of requiredScopes){
|
|
42
28
|
if (!tokenScopes.has(requiredScope)) {
|
|
43
29
|
throw new OauthError('MISSING_SCOPES');
|
|
44
30
|
}
|
|
45
31
|
}
|
|
46
32
|
}
|
|
47
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Builds an authenticator for using with `tsoa`
|
|
35
|
+
* @param options
|
|
36
|
+
* @returns
|
|
37
|
+
*/ export default function mkExpressAuthentication(options) {
|
|
48
38
|
let client;
|
|
49
39
|
let requiredSecurityName = options.securityName ?? 'oauth2';
|
|
50
|
-
const assertClient = async ()
|
|
40
|
+
const assertClient = async ()=>{
|
|
51
41
|
if (!client) {
|
|
52
|
-
client = (
|
|
42
|
+
client = jwksClient({
|
|
53
43
|
jwksUri: await options.jwksUri(),
|
|
54
|
-
requestHeaders: {},
|
|
55
|
-
timeout: 30000
|
|
44
|
+
requestHeaders: {},
|
|
45
|
+
timeout: 30000
|
|
56
46
|
});
|
|
57
47
|
}
|
|
58
48
|
return client;
|
|
59
49
|
};
|
|
60
|
-
const getKey = (header, callback)
|
|
61
|
-
client.getSigningKey(header.kid, function
|
|
50
|
+
const getKey = (header, callback)=>{
|
|
51
|
+
client.getSigningKey(header.kid, function(err, key) {
|
|
62
52
|
if (err || !key) {
|
|
63
53
|
callback(err || new Error('Error getting jwks key'));
|
|
64
54
|
return;
|
|
@@ -66,6 +56,49 @@ function mkExpressAuthentication(options) {
|
|
|
66
56
|
callback(null, key.getPublicKey());
|
|
67
57
|
});
|
|
68
58
|
};
|
|
59
|
+
const verifyToken = async (accessToken)=>{
|
|
60
|
+
return new Promise((resolve, reject)=>{
|
|
61
|
+
jwt.verify(accessToken, getKey, options.verifyOptions, function(err, decoded) {
|
|
62
|
+
if (err) {
|
|
63
|
+
resolve({
|
|
64
|
+
type: 'error',
|
|
65
|
+
err
|
|
66
|
+
});
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (!decoded) {
|
|
70
|
+
reject(new OauthError('INTERNAL_ERROR'));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
resolve({
|
|
74
|
+
type: 'success',
|
|
75
|
+
result: decoded
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
async function handleErrorAndRefresh(verifyResult, request) {
|
|
81
|
+
if (verifyResult.type === 'success') {
|
|
82
|
+
return verifyResult.result;
|
|
83
|
+
}
|
|
84
|
+
const err = verifyResult.err;
|
|
85
|
+
if (!(err instanceof jwt.TokenExpiredError)) {
|
|
86
|
+
throw new OauthError('INVALID_TOKEN');
|
|
87
|
+
}
|
|
88
|
+
const refresh = options.tryRefreshTokens;
|
|
89
|
+
if (!refresh) {
|
|
90
|
+
throw new OauthError('INVALID_TOKEN');
|
|
91
|
+
}
|
|
92
|
+
const accessToken = await refresh(request);
|
|
93
|
+
if (!accessToken) {
|
|
94
|
+
throw new OauthError('INVALID_TOKEN');
|
|
95
|
+
}
|
|
96
|
+
const refreshVerify = await verifyToken(accessToken);
|
|
97
|
+
if (refreshVerify.type === 'error') {
|
|
98
|
+
throw new OauthError('INVALID_TOKEN');
|
|
99
|
+
}
|
|
100
|
+
return refreshVerify.result;
|
|
101
|
+
}
|
|
69
102
|
return async function expressAuthentication(request, securityName, scopes) {
|
|
70
103
|
await assertClient();
|
|
71
104
|
if (securityName !== requiredSecurityName) {
|
|
@@ -75,13 +108,40 @@ function mkExpressAuthentication(options) {
|
|
|
75
108
|
if (!accessToken) {
|
|
76
109
|
throw new OauthError('NO_TOKEN');
|
|
77
110
|
}
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
111
|
+
const verifyResult = await verifyToken(accessToken);
|
|
112
|
+
const jwt = await handleErrorAndRefresh(verifyResult, request);
|
|
113
|
+
await checkScopes(jwt, scopes, options);
|
|
114
|
+
if (!jwt) {
|
|
115
|
+
throw new OauthError('INTERNAL_ERROR');
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
securityName,
|
|
119
|
+
jwt
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Takes an array of TsoaExpressAuthenticator's producing a new TsoaExpressAuthenticator that will try each authenticator in turn. If any authenticator
|
|
125
|
+
* succeeds authentication will pass with the reuslt of that authenticator . If all fail the first failure reason is thrown. At least one TsoaExpressAuthenticator must be provided
|
|
126
|
+
* @param authenticators The array of TsoaExpressAuthenticator to evaluate a request against
|
|
127
|
+
* @returns A TsoaExpressAuthenticator which aggregates the provided authenticators
|
|
128
|
+
*/ export function mergeAcceptAny(authenticators) {
|
|
129
|
+
return async function expressAuthenticationMerged(request, securityName, scopes) {
|
|
130
|
+
let errors = [];
|
|
131
|
+
for (const authenticator of authenticators){
|
|
132
|
+
try {
|
|
133
|
+
const result = await authenticator(request, securityName, scopes);
|
|
134
|
+
return result;
|
|
135
|
+
} catch (err) {
|
|
136
|
+
if (err instanceof OauthError) {
|
|
137
|
+
errors.push(err);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
throw err;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
throw new AggregateOAuthError(errors);
|
|
85
144
|
};
|
|
86
145
|
}
|
|
87
|
-
|
|
146
|
+
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBleHByZXNzIGZyb20gJ2V4cHJlc3MnXG5cbmltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJ1xuaW1wb3J0IGp3a3NDbGllbnQsIHsgdHlwZSBKd2tzQ2xpZW50IH0gZnJvbSAnandrcy1yc2EnXG5cbmV4cG9ydCB0eXBlIEVycm9yUmVhc29uID0gJ0lOVkFMSURfU0VDVVJJVFlfVFlQRScgfCAnTk9fVE9LRU4nIHwgJ01JU1NJTkdfU0NPUEVTJyB8ICdJTlZBTElEX1RPS0VOJyB8ICdJTlRFUk5BTF9FUlJPUidcblxuLyoqXG4gKiBFcnJvciB3aGljaCByZXByZXNlbnRzIGFuZCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlXG4gKi9cbmV4cG9ydCBjbGFzcyBPYXV0aEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhc29uOiBFcnJvclJlYXNvbikge1xuICAgIHN1cGVyKGBBdXRoIGZhaWxlZCBmb3IgcmVhc29uOiAke3JlYXNvbn1gKVxuICB9XG59XG5cbi8qKlxuICogRXJyb3Igd2hpY2ggcmVwcmVzZW50cyBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcyB3aGVuIHVzaW5nIGBtZXJnZUFjY2VwdEFueWBcbiAqL1xuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0ZU9BdXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlcnJvcnM6IE9hdXRoRXJyb3JbXSkge1xuICAgIHN1cGVyKGBBdXRoIGZhaWxlZCB3aXRoIG11bHRpcGxlIGVycm9yczogWyR7ZXJyb3JzLm1hcCgoZSkgPT4gZS5yZWFzb24pLmpvaW4oJywgJyl9XWApXG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhbiBhdXRoZW50aWNhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhPcHRpb25zIHtcbiAgc2VjdXJpdHlOYW1lPzogc3RyaW5nXG4gIHZlcmlmeU9wdGlvbnM/OiBqd3QuVmVyaWZ5T3B0aW9ucyAmIHsgY29tcGxldGU/OiBmYWxzZSB9XG4gIGp3a3NVcmk6ICgpID0+IFByb21pc2U8c3RyaW5nPlxuICBnZXRBY2Nlc3NUb2tlbjogKHJlcTogZXhwcmVzcy5SZXF1ZXN0KSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD5cbiAgZ2V0U2NvcGVzRnJvbVRva2VuOiAoZGVjb2RlZDogc3RyaW5nIHwgand0Lkp3dFBheWxvYWQpID0+IFByb21pc2U8c3RyaW5nW10+XG4gIHRyeVJlZnJlc2hUb2tlbnM/OiAocmVxOiBleHByZXNzLlJlcXVlc3QpID0+IFByb21pc2U8c3RyaW5nIHwgZmFsc2U+XG59XG5cbnR5cGUgVmVyaWZ5UmVzb2x2ZSA9IHsgdHlwZTogJ2Vycm9yJzsgZXJyOiBqd3QuVmVyaWZ5RXJyb3JzIH0gfCB7IHR5cGU6ICdzdWNjZXNzJzsgcmVzdWx0OiBqd3QuSnd0UGF5bG9hZCB8IHN0cmluZyB9XG5cbi8qKlxuICogVXNlciB0eXBlIHBvcHVsYXRlZCBvbnRvIGBleHByZXNzYCB3aGVuIGF1dGhlbnRpY2F0aW9uIGlzIHN1Y2Nlc3NmdWxcbiAqL1xuZXhwb3J0IHR5cGUgVHNvYUV4cHJlc3NVc2VyID0ge1xuICBzZWN1cml0eU5hbWU6IHN0cmluZ1xuICBqd3Q6IGp3dC5Kd3RQYXlsb2FkIHwgc3RyaW5nXG59XG5cbi8qKlxuICogVHNvYSBhdXRoZW50aWNhdGlvbiBmdW5jdGlvblxuICovXG5leHBvcnQgdHlwZSBUc29hRXhwcmVzc0F1dGhlbnRpY2F0b3IgPSAoXG4gIHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCxcbiAgc2VjdXJpdHlOYW1lOiBzdHJpbmcsXG4gIHNjb3Blcz86IHN0cmluZ1tdXG4pID0+IFByb21pc2U8VHNvYUV4cHJlc3NVc2VyPlxuXG5hc3luYyBmdW5jdGlvbiBjaGVja1Njb3BlcyhcbiAgdG9rZW46IHN0cmluZyB8IGp3dC5Kd3RQYXlsb2FkIHwgdW5kZWZpbmVkLFxuICByZXF1aXJlZFNjb3Blczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IEF1dGhPcHRpb25zXG4pIHtcbiAgaWYgKCFyZXF1aXJlZFNjb3BlcyB8fCByZXF1aXJlZFNjb3Blcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgT2F1dGhFcnJvcignTUlTU0lOR19TQ09QRVMnKVxuICB9XG5cbiAgY29uc3QgdG9rZW5TY29wZXMgPSBuZXcgU2V0KGF3YWl0IG9wdGlvbnMuZ2V0U2NvcGVzRnJvbVRva2VuKHRva2VuKSlcblxuICBmb3IgKGNvbnN0IHJlcXVpcmVkU2NvcGUgb2YgcmVxdWlyZWRTY29wZXMpIHtcbiAgICBpZiAoIXRva2VuU2NvcGVzLmhhcyhyZXF1aXJlZFNjb3BlKSkge1xuICAgICAgdGhyb3cgbmV3IE9hdXRoRXJyb3IoJ01JU1NJTkdfU0NPUEVTJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYW4gYXV0aGVudGljYXRvciBmb3IgdXNpbmcgd2l0aCBgdHNvYWBcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBta0V4cHJlc3NBdXRoZW50aWNhdGlvbihvcHRpb25zOiBBdXRoT3B0aW9ucyk6IFRzb2FFeHByZXNzQXV0aGVudGljYXRvciB7XG4gIGxldCBjbGllbnQ6IEp3a3NDbGllbnRcbiAgbGV0IHJlcXVpcmVkU2VjdXJpdHlOYW1lID0gb3B0aW9ucy5zZWN1cml0eU5hbWUgPz8gJ29hdXRoMidcblxuICBjb25zdCBhc3NlcnRDbGllbnQgPSBhc3luYyAoKTogUHJvbWlzZTxKd2tzQ2xpZW50PiA9PiB7XG4gICAgaWYgKCFjbGllbnQpIHtcbiAgICAgIGNsaWVudCA9IGp3a3NDbGllbnQoe1xuICAgICAgICBqd2tzVXJpOiBhd2FpdCBvcHRpb25zLmp3a3NVcmkoKSxcbiAgICAgICAgcmVxdWVzdEhlYWRlcnM6IHt9LCAvLyBPcHRpb25hbFxuICAgICAgICB0aW1lb3V0OiAzMDAwMCwgLy8gRGVmYXVsdHMgdG8gMzBzXG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY2xpZW50XG4gIH1cblxuICBjb25zdCBnZXRLZXk6IGp3dC5HZXRQdWJsaWNLZXlPclNlY3JldCA9IChoZWFkZXIsIGNhbGxiYWNrKSA9PiB7XG4gICAgY2xpZW50LmdldFNpZ25pbmdLZXkoaGVhZGVyLmtpZCwgZnVuY3Rpb24gKGVyciwga2V5KSB7XG4gICAgICBpZiAoZXJyIHx8ICFrZXkpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyIHx8IG5ldyBFcnJvcignRXJyb3IgZ2V0dGluZyBqd2tzIGtleScpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGtleS5nZXRQdWJsaWNLZXkoKSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgdmVyaWZ5VG9rZW4gPSBhc3luYyAoYWNjZXNzVG9rZW46IHN0cmluZyk6IFByb21pc2U8VmVyaWZ5UmVzb2x2ZT4gPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxWZXJpZnlSZXNvbHZlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBqd3QudmVyaWZ5KGFjY2Vzc1Rva2VuLCBnZXRLZXksIG9wdGlvbnMudmVyaWZ5T3B0aW9ucywgZnVuY3Rpb24gKGVyciwgZGVjb2RlZCkge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgZXJyLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRlY29kZWQpIHtcbiAgICAgICAgICByZWplY3QobmV3IE9hdXRoRXJyb3IoJ0lOVEVSTkFMX0VSUk9SJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHsgdHlwZTogJ3N1Y2Nlc3MnLCByZXN1bHQ6IGRlY29kZWQgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUVycm9yQW5kUmVmcmVzaCh2ZXJpZnlSZXN1bHQ6IFZlcmlmeVJlc29sdmUsIHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCkge1xuICAgIGlmICh2ZXJpZnlSZXN1bHQudHlwZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICByZXR1cm4gdmVyaWZ5UmVzdWx0LnJlc3VsdFxuICAgIH1cblxuICAgIGNvbnN0IGVyciA9IHZlcmlmeVJlc3VsdC5lcnJcbiAgICBpZiAoIShlcnIgaW5zdGFuY2VvZiBqd3QuVG9rZW5FeHBpcmVkRXJyb3IpKSB7XG4gICAgICB0aHJvdyBuZXcgT2F1dGhFcnJvcignSU5WQUxJRF9UT0tFTicpXG4gICAgfVxuXG4gICAgY29uc3QgcmVmcmVzaCA9IG9wdGlvbnMudHJ5UmVmcmVzaFRva2Vuc1xuICAgIGlmICghcmVmcmVzaCkge1xuICAgICAgdGhyb3cgbmV3IE9hdXRoRXJyb3IoJ0lOVkFMSURfVE9LRU4nKVxuICAgIH1cblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgcmVmcmVzaChyZXF1ZXN0KVxuXG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IE9hdXRoRXJyb3IoJ0lOVkFMSURfVE9LRU4nKVxuICAgIH1cblxuICAgIGNvbnN0IHJlZnJlc2hWZXJpZnkgPSBhd2FpdCB2ZXJpZnlUb2tlbihhY2Nlc3NUb2tlbilcbiAgICBpZiAocmVmcmVzaFZlcmlmeS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICB0aHJvdyBuZXcgT2F1dGhFcnJvcignSU5WQUxJRF9UT0tFTicpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZnJlc2hWZXJpZnkucmVzdWx0XG4gIH1cblxuICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gZXhwcmVzc0F1dGhlbnRpY2F0aW9uKHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCwgc2VjdXJpdHlOYW1lOiBzdHJpbmcsIHNjb3Blcz86IHN0cmluZ1tdKSB7XG4gICAgYXdhaXQgYXNzZXJ0Q2xpZW50KClcblxuICAgIGlmIChzZWN1cml0eU5hbWUgIT09IHJlcXVpcmVkU2VjdXJpdHlOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgT2F1dGhFcnJvcignSU5WQUxJRF9TRUNVUklUWV9UWVBFJylcbiAgICB9XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IG9wdGlvbnMuZ2V0QWNjZXNzVG9rZW4ocmVxdWVzdClcblxuICAgIGlmICghYWNjZXNzVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBPYXV0aEVycm9yKCdOT19UT0tFTicpXG4gICAgfVxuXG4gICAgY29uc3QgdmVyaWZ5UmVzdWx0ID0gYXdhaXQgdmVyaWZ5VG9rZW4oYWNjZXNzVG9rZW4pXG4gICAgY29uc3Qgand0ID0gYXdhaXQgaGFuZGxlRXJyb3JBbmRSZWZyZXNoKHZlcmlmeVJlc3VsdCwgcmVxdWVzdClcbiAgICBhd2FpdCBjaGVja1Njb3Blcyhqd3QsIHNjb3Blcywgb3B0aW9ucylcblxuICAgIGlmICghand0KSB7XG4gICAgICB0aHJvdyBuZXcgT2F1dGhFcnJvcignSU5URVJOQUxfRVJST1InKVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzZWN1cml0eU5hbWUsXG4gICAgICBqd3QsXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYW4gYXJyYXkgb2YgVHNvYUV4cHJlc3NBdXRoZW50aWNhdG9yJ3MgcHJvZHVjaW5nIGEgbmV3IFRzb2FFeHByZXNzQXV0aGVudGljYXRvciB0aGF0IHdpbGwgdHJ5IGVhY2ggYXV0aGVudGljYXRvciBpbiB0dXJuLiBJZiBhbnkgYXV0aGVudGljYXRvclxuICogc3VjY2VlZHMgYXV0aGVudGljYXRpb24gd2lsbCBwYXNzIHdpdGggdGhlIHJldXNsdCBvZiB0aGF0IGF1dGhlbnRpY2F0b3IgLiBJZiBhbGwgZmFpbCB0aGUgZmlyc3QgZmFpbHVyZSByZWFzb24gaXMgdGhyb3duLiBBdCBsZWFzdCBvbmUgVHNvYUV4cHJlc3NBdXRoZW50aWNhdG9yIG11c3QgYmUgcHJvdmlkZWRcbiAqIEBwYXJhbSBhdXRoZW50aWNhdG9ycyBUaGUgYXJyYXkgb2YgVHNvYUV4cHJlc3NBdXRoZW50aWNhdG9yIHRvIGV2YWx1YXRlIGEgcmVxdWVzdCBhZ2FpbnN0XG4gKiBAcmV0dXJucyBBIFRzb2FFeHByZXNzQXV0aGVudGljYXRvciB3aGljaCBhZ2dyZWdhdGVzIHRoZSBwcm92aWRlZCBhdXRoZW50aWNhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBY2NlcHRBbnkoXG4gIGF1dGhlbnRpY2F0b3JzOiBbVHNvYUV4cHJlc3NBdXRoZW50aWNhdG9yLCAuLi5Uc29hRXhwcmVzc0F1dGhlbnRpY2F0b3JbXV1cbik6IFRzb2FFeHByZXNzQXV0aGVudGljYXRvciB7XG4gIHJldHVybiBhc3luYyBmdW5jdGlvbiBleHByZXNzQXV0aGVudGljYXRpb25NZXJnZWQocmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0LCBzZWN1cml0eU5hbWU6IHN0cmluZywgc2NvcGVzPzogc3RyaW5nW10pIHtcbiAgICBsZXQgZXJyb3JzOiBPYXV0aEVycm9yW10gPSBbXVxuICAgIGZvciAoY29uc3QgYXV0aGVudGljYXRvciBvZiBhdXRoZW50aWNhdG9ycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aGVudGljYXRvcihyZXF1ZXN0LCBzZWN1cml0eU5hbWUsIHNjb3BlcylcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBPYXV0aEVycm9yKSB7XG4gICAgICAgICAgZXJyb3JzLnB1c2goZXJyKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBBZ2dyZWdhdGVPQXV0aEVycm9yKGVycm9ycylcbiAgfVxufVxuIl0sIm5hbWVzIjpbImp3dCIsImp3a3NDbGllbnQiLCJPYXV0aEVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsInJlYXNvbiIsIkFnZ3JlZ2F0ZU9BdXRoRXJyb3IiLCJlcnJvcnMiLCJtYXAiLCJlIiwiam9pbiIsImNoZWNrU2NvcGVzIiwidG9rZW4iLCJyZXF1aXJlZFNjb3BlcyIsIm9wdGlvbnMiLCJsZW5ndGgiLCJ0b2tlblNjb3BlcyIsIlNldCIsImdldFNjb3Blc0Zyb21Ub2tlbiIsInJlcXVpcmVkU2NvcGUiLCJoYXMiLCJta0V4cHJlc3NBdXRoZW50aWNhdGlvbiIsImNsaWVudCIsInJlcXVpcmVkU2VjdXJpdHlOYW1lIiwic2VjdXJpdHlOYW1lIiwiYXNzZXJ0Q2xpZW50Iiwiandrc1VyaSIsInJlcXVlc3RIZWFkZXJzIiwidGltZW91dCIsImdldEtleSIsImhlYWRlciIsImNhbGxiYWNrIiwiZ2V0U2lnbmluZ0tleSIsImtpZCIsImVyciIsImtleSIsImdldFB1YmxpY0tleSIsInZlcmlmeVRva2VuIiwiYWNjZXNzVG9rZW4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInZlcmlmeSIsInZlcmlmeU9wdGlvbnMiLCJkZWNvZGVkIiwidHlwZSIsInJlc3VsdCIsImhhbmRsZUVycm9yQW5kUmVmcmVzaCIsInZlcmlmeVJlc3VsdCIsInJlcXVlc3QiLCJUb2tlbkV4cGlyZWRFcnJvciIsInJlZnJlc2giLCJ0cnlSZWZyZXNoVG9rZW5zIiwicmVmcmVzaFZlcmlmeSIsImV4cHJlc3NBdXRoZW50aWNhdGlvbiIsInNjb3BlcyIsImdldEFjY2Vzc1Rva2VuIiwibWVyZ2VBY2NlcHRBbnkiLCJhdXRoZW50aWNhdG9ycyIsImV4cHJlc3NBdXRoZW50aWNhdGlvbk1lcmdlZCIsImF1dGhlbnRpY2F0b3IiLCJwdXNoIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPQSxTQUFTLGVBQWM7QUFDOUIsT0FBT0MsZ0JB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
|
package/package.json
CHANGED
|
@@ -1,25 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digicatapult/tsoa-oauth-express",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Authentication handler for TSOA using OAuth2 JWT tokens",
|
|
5
5
|
"main": "build/index.js",
|
|
6
|
-
"type": "
|
|
7
|
-
"
|
|
8
|
-
"import": "./build/index.mjs",
|
|
9
|
-
"require": "./build/index.js"
|
|
10
|
-
},
|
|
6
|
+
"type": "module",
|
|
7
|
+
"types": "build/index.d.ts",
|
|
11
8
|
"files": [
|
|
12
9
|
"build"
|
|
13
10
|
],
|
|
14
11
|
"scripts": {
|
|
15
|
-
"build": "tsc",
|
|
16
|
-
"check": "npm run example:build && tsc
|
|
12
|
+
"build": "swc ./src -d ./build --strip-leading-paths --copy-files && tsc -p ./tsconfig.build.json",
|
|
13
|
+
"check": "npm run example:build && tsc",
|
|
17
14
|
"test": "NODE_ENV=test ./node_modules/.bin/mocha --config ./mocharc.json ./src/**/*.test.ts",
|
|
18
15
|
"depcheck": "depcheck",
|
|
19
16
|
"lint": "prettier -c ./src",
|
|
20
17
|
"lint:fix": "npm run lint -- -w",
|
|
21
18
|
"example:build": "tsoa spec-and-routes -c ./example/tsoa.json",
|
|
22
|
-
"example": "npm run example:build && node --import
|
|
19
|
+
"example": "SWCRC=true npm run example:build && SWCRC=true node --import @swc-node/register/esm-register ./example/index.ts"
|
|
23
20
|
},
|
|
24
21
|
"author": "Digital Catapult",
|
|
25
22
|
"license": "Apache-2.0",
|
|
@@ -27,6 +24,8 @@
|
|
|
27
24
|
"express": "^4.21.2"
|
|
28
25
|
},
|
|
29
26
|
"devDependencies": {
|
|
27
|
+
"@swc-node/register": "^1.10.9",
|
|
28
|
+
"@swc/cli": "^0.6.0",
|
|
30
29
|
"@types/chai": "^5.2.0",
|
|
31
30
|
"@types/express": "^4.17.21",
|
|
32
31
|
"@types/mocha": "^10.0.10",
|
|
@@ -37,7 +36,6 @@
|
|
|
37
36
|
"mock-jwks": "^3.3.4",
|
|
38
37
|
"prettier": "^3.5.3",
|
|
39
38
|
"prettier-plugin-organize-imports": "^4.1.0",
|
|
40
|
-
"@digicatapult/tsimp": "^2.0.12",
|
|
41
39
|
"tsoa": "^6.6.0",
|
|
42
40
|
"typescript": "^5.8.2"
|
|
43
41
|
},
|
package/build/index.d.mts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import mkExpressAuthentication from './index.js';
|
|
2
|
-
export type { AuthOptions, ErrorReason, TsoaExpressAuthenticator } from './index.js';
|
|
3
|
-
export { OauthError } from './index.js';
|
|
4
|
-
declare const _default: typeof mkExpressAuthentication.default;
|
|
5
|
-
export default _default;
|
package/build/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/index.mjs
DELETED
package/build/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.mts"],"names":[],"mappings":"AAAA,OAAO,uBAAuB,MAAM,YAAY,CAAA;AAIhD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,eAAe,uBAAuB,CAAC,OAAO,CAAA"}
|