@digicatapult/tsoa-oauth-express 0.1.110 → 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 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<boolean>;
29
+ tryRefreshTokens?: (req: express.Request) => Promise<string | false>;
17
30
  }
18
- export type TsoaExpressAuthenticator = (request: express.Request, securityName: string, scopes?: string[]) => Promise<void>;
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
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.OauthError = void 0;
7
- exports.default = mkExpressAuthentication;
8
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
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
- exports.OauthError = OauthError;
17
- async function handleError(err, request, options) {
18
- if (!err) {
19
- return;
20
- }
21
- if (!(err instanceof jsonwebtoken_1.default.TokenExpiredError)) {
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
- function mkExpressAuthentication(options) {
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 = (0, jwks_rsa_1.default)({
42
+ client = jwksClient({
53
43
  jwksUri: await options.jwksUri(),
54
- requestHeaders: {}, // Optional
55
- timeout: 30000, // Defaults to 30s
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 (err, key) {
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 [err, result] = await new Promise((resolve) => {
79
- jsonwebtoken_1.default.verify(accessToken, getKey, options.verifyOptions, function (err, decoded) {
80
- resolve([err, decoded]);
81
- });
82
- });
83
- await handleError(err, request, options);
84
- await checkScopes(result, scopes, options);
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
- //# sourceMappingURL=index.js.map
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.1.110",
3
+ "version": "1.0.0",
4
4
  "description": "Authentication handler for TSOA using OAuth2 JWT tokens",
5
5
  "main": "build/index.js",
6
- "type": "commonjs",
7
- "exports": {
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 -p ./tsconfig.check.json",
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=@digicatapult/tsimp/import ./example/index.ts"
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;
@@ -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
@@ -1,4 +0,0 @@
1
- import mkExpressAuthentication from './index.js';
2
- export { OauthError } from './index.js';
3
- export default mkExpressAuthentication.default;
4
- //# sourceMappingURL=index.mjs.map
@@ -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"}