@digitaldefiance/node-express-suite 3.14.5 → 3.16.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/package.json +1 -1
- package/src/__tests__/helpers/application.mock.d.ts +3 -3
- package/src/__tests__/helpers/application.mock.d.ts.map +1 -1
- package/src/__tests__/helpers/application.mock.js +8 -0
- package/src/__tests__/helpers/application.mock.js.map +1 -1
- package/src/__tests__/helpers/setup-test-env.js.map +1 -1
- package/src/application-base.d.ts +12 -2
- package/src/application-base.d.ts.map +1 -1
- package/src/application-base.js +25 -8
- package/src/application-base.js.map +1 -1
- package/src/application.d.ts +2 -2
- package/src/application.d.ts.map +1 -1
- package/src/application.js.map +1 -1
- package/src/controllers/base.d.ts +14 -4
- package/src/controllers/base.d.ts.map +1 -1
- package/src/controllers/base.js +61 -9
- package/src/controllers/base.js.map +1 -1
- package/src/controllers/openapi.d.ts +3 -3
- package/src/controllers/openapi.d.ts.map +1 -1
- package/src/controllers/openapi.js.map +1 -1
- package/src/controllers/user.d.ts +3 -3
- package/src/controllers/user.d.ts.map +1 -1
- package/src/controllers/user.js.map +1 -1
- package/src/decorators/base-controller.d.ts +3 -2
- package/src/decorators/base-controller.d.ts.map +1 -1
- package/src/decorators/base-controller.js +1 -0
- package/src/decorators/base-controller.js.map +1 -1
- package/src/environment.d.ts +10 -1
- package/src/environment.d.ts.map +1 -1
- package/src/environment.js +17 -8
- package/src/environment.js.map +1 -1
- package/src/interfaces/application.d.ts +21 -13
- package/src/interfaces/application.d.ts.map +1 -1
- package/src/interfaces/application.js +3 -2
- package/src/interfaces/application.js.map +1 -1
- package/src/interfaces/authentication-provider.d.ts +76 -0
- package/src/interfaces/authentication-provider.d.ts.map +1 -0
- package/src/interfaces/authentication-provider.js +10 -0
- package/src/interfaces/authentication-provider.js.map +1 -0
- package/src/interfaces/environment-mongo.d.ts +3 -2
- package/src/interfaces/environment-mongo.d.ts.map +1 -1
- package/src/interfaces/environment.d.ts +3 -2
- package/src/interfaces/environment.d.ts.map +1 -1
- package/src/interfaces/index.d.ts +2 -0
- package/src/interfaces/index.d.ts.map +1 -1
- package/src/interfaces/index.js +2 -0
- package/src/interfaces/index.js.map +1 -1
- package/src/interfaces/mongo-application.d.ts +35 -0
- package/src/interfaces/mongo-application.d.ts.map +1 -0
- package/src/interfaces/mongo-application.js +10 -0
- package/src/interfaces/mongo-application.js.map +1 -0
- package/src/middlewares/authenticate-crypto.d.ts +7 -1
- package/src/middlewares/authenticate-crypto.d.ts.map +1 -1
- package/src/middlewares/authenticate-crypto.js +62 -50
- package/src/middlewares/authenticate-crypto.js.map +1 -1
- package/src/middlewares/authenticate-token.d.ts +8 -7
- package/src/middlewares/authenticate-token.d.ts.map +1 -1
- package/src/middlewares/authenticate-token.js +42 -41
- package/src/middlewares/authenticate-token.js.map +1 -1
- package/src/routers/api.d.ts +2 -2
- package/src/routers/api.d.ts.map +1 -1
- package/src/services/backup-code.d.ts +2 -2
- package/src/services/backup-code.d.ts.map +1 -1
- package/src/services/base.d.ts +17 -2
- package/src/services/base.d.ts.map +1 -1
- package/src/services/base.js +36 -3
- package/src/services/base.js.map +1 -1
- package/src/services/database-initialization.d.ts +5 -5
- package/src/services/database-initialization.d.ts.map +1 -1
- package/src/services/database-initialization.js.map +1 -1
- package/src/services/direct-login-token.d.ts +2 -2
- package/src/services/direct-login-token.d.ts.map +1 -1
- package/src/services/direct-login-token.js.map +1 -1
- package/src/services/index.d.ts +2 -0
- package/src/services/index.d.ts.map +1 -1
- package/src/services/index.js +2 -0
- package/src/services/index.js.map +1 -1
- package/src/services/jwt.d.ts +2 -2
- package/src/services/jwt.d.ts.map +1 -1
- package/src/services/mongo-authentication-provider.d.ts +27 -0
- package/src/services/mongo-authentication-provider.d.ts.map +1 -0
- package/src/services/mongo-authentication-provider.js +84 -0
- package/src/services/mongo-authentication-provider.js.map +1 -0
- package/src/services/mongo-base.d.ts +24 -0
- package/src/services/mongo-base.d.ts.map +1 -0
- package/src/services/mongo-base.js +28 -0
- package/src/services/mongo-base.js.map +1 -0
- package/src/services/mongoose-document-store.js +1 -1
- package/src/services/mongoose-document-store.js.map +1 -1
- package/src/services/role.d.ts +2 -2
- package/src/services/role.d.ts.map +1 -1
- package/src/services/role.js.map +1 -1
- package/src/services/user.d.ts +2 -2
- package/src/services/user.d.ts.map +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Storage-agnostic authentication provider interface.
|
|
3
|
+
* Abstracts user lookup, role fetching, and credential verification
|
|
4
|
+
* so that authentication middlewares work with any storage backend
|
|
5
|
+
* (Mongoose, BrightChainDb, etc.).
|
|
6
|
+
* @module interfaces/authentication-provider
|
|
7
|
+
*/
|
|
8
|
+
import type { SecureString } from '@digitaldefiance/ecies-lib';
|
|
9
|
+
import type { Member as BackendMember } from '@digitaldefiance/node-ecies-lib';
|
|
10
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
11
|
+
import type { IRequestUserDTO, ITokenUser } from '@digitaldefiance/suite-core-lib';
|
|
12
|
+
/**
|
|
13
|
+
* Minimal user record returned by the authentication provider.
|
|
14
|
+
* Contains only the fields needed by the authentication middlewares.
|
|
15
|
+
*/
|
|
16
|
+
export interface IAuthenticatedUser<TLanguage extends string = string> {
|
|
17
|
+
/** Stringified user ID */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Account status (e.g. 'Active', 'Suspended') */
|
|
20
|
+
accountStatus: string;
|
|
21
|
+
/** User's email address */
|
|
22
|
+
email: string;
|
|
23
|
+
/** User's site language preference */
|
|
24
|
+
siteLanguage?: TLanguage;
|
|
25
|
+
/** User's timezone */
|
|
26
|
+
timezone: string;
|
|
27
|
+
/** Last login timestamp (ISO string or undefined) */
|
|
28
|
+
lastLogin?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Result of a crypto-authentication (mnemonic or password login).
|
|
32
|
+
*/
|
|
33
|
+
export interface ICryptoAuthResult<TID extends PlatformID = Buffer> {
|
|
34
|
+
/** The authenticated user's ID as a string */
|
|
35
|
+
userId: string;
|
|
36
|
+
/** The authenticated BackendMember with private key loaded */
|
|
37
|
+
userMember: BackendMember<TID>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Storage-agnostic authentication provider.
|
|
41
|
+
*
|
|
42
|
+
* Implementations supply user lookup, role resolution, and credential
|
|
43
|
+
* verification. The express-suite authentication middlewares delegate to
|
|
44
|
+
* this interface instead of calling Mongoose directly.
|
|
45
|
+
*
|
|
46
|
+
* @template TID Platform-specific ID type (Buffer, ObjectId, etc.)
|
|
47
|
+
* @template TLanguage Site language string literal type
|
|
48
|
+
*/
|
|
49
|
+
export interface IAuthenticationProvider<TID extends PlatformID = Buffer, TLanguage extends string = string> {
|
|
50
|
+
/**
|
|
51
|
+
* Look up a user by their ID and return a minimal user record.
|
|
52
|
+
* Returns null if the user does not exist.
|
|
53
|
+
*/
|
|
54
|
+
findUserById(userId: string): Promise<IAuthenticatedUser<TLanguage> | null>;
|
|
55
|
+
/**
|
|
56
|
+
* Build an IRequestUserDTO for the given user.
|
|
57
|
+
* Includes role resolution and privilege calculation.
|
|
58
|
+
*/
|
|
59
|
+
buildRequestUserDTO(userId: string): Promise<IRequestUserDTO | null>;
|
|
60
|
+
/**
|
|
61
|
+
* Verify a JWT token and return the decoded token user.
|
|
62
|
+
* Returns null if the token is invalid.
|
|
63
|
+
*/
|
|
64
|
+
verifyToken<TTokenUser extends ITokenUser = ITokenUser>(token: string): Promise<TTokenUser | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Authenticate with a mnemonic and return the crypto result.
|
|
67
|
+
* Throws on invalid credentials.
|
|
68
|
+
*/
|
|
69
|
+
authenticateWithMnemonic?(email: string, mnemonic: SecureString): Promise<ICryptoAuthResult<TID>>;
|
|
70
|
+
/**
|
|
71
|
+
* Authenticate with a password and return the crypto result.
|
|
72
|
+
* Throws on invalid credentials.
|
|
73
|
+
*/
|
|
74
|
+
authenticateWithPassword?(email: string, password: string): Promise<ICryptoAuthResult<TID>>;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=authentication-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentication-provider.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/authentication-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACX,MAAM,iCAAiC,CAAC;AAEzC;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IACnE,0BAA0B;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,GAAG,SAAS,UAAU,GAAG,MAAM;IAChE,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;CAChC;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,uBAAuB,CACtC,GAAG,SAAS,UAAU,GAAG,MAAM,EAC/B,SAAS,SAAS,MAAM,GAAG,MAAM;IAEjC;;;OAGG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;IAE5E;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAErE;;;OAGG;IACH,WAAW,CAAC,UAAU,SAAS,UAAU,GAAG,UAAU,EACpD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAE9B;;;OAGG;IACH,wBAAwB,CAAC,CACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnC;;;OAGG;IACH,wBAAwB,CAAC,CACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;CACpC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Storage-agnostic authentication provider interface.
|
|
4
|
+
* Abstracts user lookup, role fetching, and credential verification
|
|
5
|
+
* so that authentication middlewares work with any storage backend
|
|
6
|
+
* (Mongoose, BrightChainDb, etc.).
|
|
7
|
+
* @module interfaces/authentication-provider
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=authentication-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authentication-provider.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/authentication-provider.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
|
|
@@ -10,9 +10,10 @@ import { ReadConcernLike, WriteConcern } from 'mongodb';
|
|
|
10
10
|
*/
|
|
11
11
|
export interface IMongoEnvironment {
|
|
12
12
|
/**
|
|
13
|
-
* The URI of the MongoDB database
|
|
13
|
+
* The URI of the MongoDB database.
|
|
14
|
+
* Optional — omit when using a non-MongoDB database (e.g. BrightChainDb).
|
|
14
15
|
*/
|
|
15
|
-
uri
|
|
16
|
+
uri?: string;
|
|
16
17
|
/**
|
|
17
18
|
* The name of the MongoDB database
|
|
18
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-mongo.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/environment-mongo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC
|
|
1
|
+
{"version":3,"file":"environment-mongo.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/environment-mongo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,wBAAwB,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,WAAW,EAAE,eAAe,CAAC;IAC7B;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC;IAC3B;;OAEG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,wCAAwC,EAAE,OAAO,CAAC;IAClD;;OAEG;IACH,+CAA+C,EAAE,OAAO,CAAC;IACzD;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,6BAA6B,EAAE,MAAM,CAAC;IACtC;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,yBAAyB,EAAE,MAAM,CAAC;CACnC"}
|
|
@@ -72,9 +72,10 @@ export interface IEnvironment<TID extends PlatformID = Buffer> {
|
|
|
72
72
|
*/
|
|
73
73
|
disableEmailSend: boolean;
|
|
74
74
|
/**
|
|
75
|
-
* MongoDB configuration
|
|
75
|
+
* MongoDB configuration.
|
|
76
|
+
* Optional — omit when using a non-MongoDB database (e.g. BrightChainDb).
|
|
76
77
|
*/
|
|
77
|
-
mongo
|
|
78
|
+
mongo?: IMongoEnvironment;
|
|
78
79
|
/**
|
|
79
80
|
* Mnemonic for the admin user
|
|
80
81
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/environment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,GAAG,SAAS,UAAU,GAAG,MAAM;IAC3D;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ export * from './api-message-response';
|
|
|
6
6
|
export * from './api-mongo-validation-error-response';
|
|
7
7
|
export * from './api-responses';
|
|
8
8
|
export * from './application';
|
|
9
|
+
export * from './authentication-provider';
|
|
10
|
+
export * from './mongo-application';
|
|
9
11
|
export * from './backend-objects';
|
|
10
12
|
export * from './checksum-config';
|
|
11
13
|
export * from './checksum-consts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yCAAyC,CAAC;AACxD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAE1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yCAAyC,CAAC;AACxD,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC"}
|
package/src/interfaces/index.js
CHANGED
|
@@ -9,6 +9,8 @@ tslib_1.__exportStar(require("./api-message-response"), exports);
|
|
|
9
9
|
tslib_1.__exportStar(require("./api-mongo-validation-error-response"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./api-responses"), exports);
|
|
11
11
|
tslib_1.__exportStar(require("./application"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./authentication-provider"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./mongo-application"), exports);
|
|
12
14
|
tslib_1.__exportStar(require("./backend-objects"), exports);
|
|
13
15
|
tslib_1.__exportStar(require("./checksum-config"), exports);
|
|
14
16
|
tslib_1.__exportStar(require("./checksum-consts"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/index.ts"],"names":[],"mappings":";;;AAAA,2DAAiC;AACjC,oDAA0B;AAE1B,+DAAqC;AACrC,kFAAwD;AACxD,iEAAuC;AACvC,gFAAsD;AACtD,0DAAgC;AAChC,wDAA8B;AAC9B,4DAAkC;AAClC,4DAAkC;AAClC,4DAAkC;AAClC,sDAA4B;AAC5B,8DAAoC;AACpC,+DAAqC;AACrC,uDAA6B;AAC7B,2DAAiC;AACjC,2DAAiC;AACjC,sEAA4C;AAC5C,0DAAgC;AAChC,wDAA8B;AAC9B,8DAAoC;AACpC,4DAAkC;AAClC,uDAA6B;AAC7B,yDAA+B;AAC/B,qEAA2C;AAC3C,uDAA6B;AAC7B,8DAAoC;AACpC,gEAAsC;AACtC,mDAAyB;AACzB,yDAA+B;AAC/B,oDAA0B;AAC1B,oDAA0B;AAC1B,yDAA+B;AAC/B,iEAAuC;AACvC,mDAAyB;AACzB,+DAAqC;AACrC,iEAAuC;AACvC,yEAA+C;AAC/C,2DAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/index.ts"],"names":[],"mappings":";;;AAAA,2DAAiC;AACjC,oDAA0B;AAE1B,+DAAqC;AACrC,kFAAwD;AACxD,iEAAuC;AACvC,gFAAsD;AACtD,0DAAgC;AAChC,wDAA8B;AAC9B,oEAA0C;AAC1C,8DAAoC;AACpC,4DAAkC;AAClC,4DAAkC;AAClC,4DAAkC;AAClC,sDAA4B;AAC5B,8DAAoC;AACpC,+DAAqC;AACrC,uDAA6B;AAC7B,2DAAiC;AACjC,2DAAiC;AACjC,sEAA4C;AAC5C,0DAAgC;AAChC,wDAA8B;AAC9B,8DAAoC;AACpC,4DAAkC;AAClC,uDAA6B;AAC7B,yDAA+B;AAC/B,qEAA2C;AAC3C,uDAA6B;AAC7B,8DAAoC;AACpC,gEAAsC;AACtC,mDAAyB;AACzB,yDAA+B;AAC/B,oDAA0B;AAC1B,oDAA0B;AAC1B,yDAA+B;AAC/B,iEAAuC;AACvC,mDAAyB;AACzB,+DAAqC;AACrC,iEAAuC;AACvC,yEAA+C;AAC/C,2DAAiC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Mongoose/MongoDB-specific application interface.
|
|
3
|
+
* Extends the base IApplication with MongoDB-specific capabilities.
|
|
4
|
+
* Use this interface in controllers, services, and middlewares that require
|
|
5
|
+
* direct access to the Mongoose connection or MongoDB configuration.
|
|
6
|
+
* @module interfaces/mongo-application
|
|
7
|
+
*/
|
|
8
|
+
import mongoose from '@digitaldefiance/mongoose-types';
|
|
9
|
+
import type { Model } from '@digitaldefiance/mongoose-types';
|
|
10
|
+
import type { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
11
|
+
import type { IBaseDocument } from '../documents';
|
|
12
|
+
import type { IApplication } from './application';
|
|
13
|
+
/**
|
|
14
|
+
* MongoDB/Mongoose-specific application interface.
|
|
15
|
+
* Extends IApplication with the Mongoose connection and MongoDB configuration.
|
|
16
|
+
*
|
|
17
|
+
* Use this interface when your code needs:
|
|
18
|
+
* - `application.db` (the Mongoose connection)
|
|
19
|
+
* - `application.environment.mongo` (MongoDB config with a guaranteed URI)
|
|
20
|
+
* - `application.getModel<T>(name)` (Mongoose model lookup)
|
|
21
|
+
*
|
|
22
|
+
* Non-Mongo applications (e.g. BrightChainDb) should use the base IApplication.
|
|
23
|
+
*/
|
|
24
|
+
export interface IMongoApplication<TID extends PlatformID = Buffer> extends IApplication<TID> {
|
|
25
|
+
/** Mongoose database connection. */
|
|
26
|
+
get db(): typeof mongoose;
|
|
27
|
+
/**
|
|
28
|
+
* Gets a Mongoose model by name.
|
|
29
|
+
* @template U Document type extending IBaseDocument
|
|
30
|
+
* @param modelName Name of the model to retrieve
|
|
31
|
+
* @returns Mongoose model instance
|
|
32
|
+
*/
|
|
33
|
+
getModel<U extends IBaseDocument<any, TID>>(modelName: string): Model<U>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=mongo-application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo-application.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/mongo-application.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,QAAQ,MAAM,iCAAiC,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB,CAChC,GAAG,SAAS,UAAU,GAAG,MAAM,CAC/B,SAAQ,YAAY,CAAC,GAAG,CAAC;IACzB,oCAAoC;IACpC,IAAI,EAAE,IAAI,OAAO,QAAQ,CAAC;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,CAAC,SAAS,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;CAC1E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Mongoose/MongoDB-specific application interface.
|
|
4
|
+
* Extends the base IApplication with MongoDB-specific capabilities.
|
|
5
|
+
* Use this interface in controllers, services, and middlewares that require
|
|
6
|
+
* direct access to the Mongoose connection or MongoDB configuration.
|
|
7
|
+
* @module interfaces/mongo-application
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
//# sourceMappingURL=mongo-application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo-application.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/interfaces/mongo-application.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview Cryptographic authentication middleware for operations requiring private keys.
|
|
3
3
|
* Validates mnemonic or password to unlock user's private key for sensitive operations.
|
|
4
|
+
* Storage-agnostic — delegates credential verification to IAuthenticationProvider.
|
|
4
5
|
* @module middlewares/authenticate-crypto
|
|
5
6
|
*/
|
|
6
7
|
import { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
@@ -12,9 +13,14 @@ import { IApplication } from '../interfaces/application';
|
|
|
12
13
|
* Requires mnemonic or password in request body to unlock user's private key.
|
|
13
14
|
* Attaches authenticated BackendMember with private key to req.eciesUser.
|
|
14
15
|
* Used for operations requiring cryptographic signing or decryption.
|
|
16
|
+
*
|
|
17
|
+
* Delegates to `application.authProvider` for storage-agnostic credential
|
|
18
|
+
* verification. The application must have an authProvider configured with
|
|
19
|
+
* authenticateWithMnemonic and/or authenticateWithPassword.
|
|
20
|
+
*
|
|
15
21
|
* @template TID - Platform ID type (defaults to Buffer)
|
|
16
22
|
* @template TAccountStatus - Account status type (defaults to AccountStatus)
|
|
17
|
-
* @param {IApplication<TID>} application - Application instance
|
|
23
|
+
* @param {IApplication<TID>} application - Application instance with authProvider
|
|
18
24
|
* @param {Request} req - Express request object
|
|
19
25
|
* @param {Response} res - Express response object
|
|
20
26
|
* @param {NextFunction} next - Express next function
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate-crypto.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/middlewares/authenticate-crypto.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"authenticate-crypto.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/middlewares/authenticate-crypto.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EACL,aAAa,EAId,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,SAAS,UAAU,GAAG,MAAM,EAC/B,cAAc,SAAS,MAAM,GAAG,aAAa,EAE7C,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,EAC9B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,EAClB,iBAAiB,GAAE,cAAuD,GACzE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CA6K1B"}
|
|
@@ -2,24 +2,27 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* @fileoverview Cryptographic authentication middleware for operations requiring private keys.
|
|
4
4
|
* Validates mnemonic or password to unlock user's private key for sensitive operations.
|
|
5
|
+
* Storage-agnostic — delegates credential verification to IAuthenticationProvider.
|
|
5
6
|
* @module middlewares/authenticate-crypto
|
|
6
7
|
*/
|
|
7
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
9
|
exports.authenticateCrypto = authenticateCrypto;
|
|
9
10
|
const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
|
|
10
11
|
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
11
|
-
const container_1 = require("../container");
|
|
12
|
-
const enumerations_1 = require("../enumerations");
|
|
13
12
|
const errors_1 = require("../errors");
|
|
14
|
-
const utils_1 = require("../utils");
|
|
15
13
|
/**
|
|
16
14
|
* Express middleware for cryptographic authentication.
|
|
17
15
|
* Requires mnemonic or password in request body to unlock user's private key.
|
|
18
16
|
* Attaches authenticated BackendMember with private key to req.eciesUser.
|
|
19
17
|
* Used for operations requiring cryptographic signing or decryption.
|
|
18
|
+
*
|
|
19
|
+
* Delegates to `application.authProvider` for storage-agnostic credential
|
|
20
|
+
* verification. The application must have an authProvider configured with
|
|
21
|
+
* authenticateWithMnemonic and/or authenticateWithPassword.
|
|
22
|
+
*
|
|
20
23
|
* @template TID - Platform ID type (defaults to Buffer)
|
|
21
24
|
* @template TAccountStatus - Account status type (defaults to AccountStatus)
|
|
22
|
-
* @param {IApplication<TID>} application - Application instance
|
|
25
|
+
* @param {IApplication<TID>} application - Application instance with authProvider
|
|
23
26
|
* @param {Request} req - Express request object
|
|
24
27
|
* @param {Response} res - Express response object
|
|
25
28
|
* @param {NextFunction} next - Express next function
|
|
@@ -29,6 +32,10 @@ const utils_1 = require("../utils");
|
|
|
29
32
|
* @throws {InvalidPasswordError} When password is incorrect
|
|
30
33
|
*/
|
|
31
34
|
async function authenticateCrypto(application, req, res, next, activeStatusValue = suite_core_lib_1.AccountStatus.Active) {
|
|
35
|
+
const authProvider = application.authProvider;
|
|
36
|
+
if (!authProvider) {
|
|
37
|
+
return res.status(500).send('Authentication provider not configured');
|
|
38
|
+
}
|
|
32
39
|
if (!req.user) {
|
|
33
40
|
return res.status(401).send(
|
|
34
41
|
// amazonq-ignore-next-line false positive, hardcoded string
|
|
@@ -60,61 +67,66 @@ async function authenticateCrypto(application, req, res, next, activeStatusValue
|
|
|
60
67
|
message: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_MnemonicOrPasswordRequired),
|
|
61
68
|
});
|
|
62
69
|
}
|
|
63
|
-
const UserModel = application.getModel(enumerations_1.BaseModelName.User);
|
|
64
|
-
const userService = application.services.get(container_1.ServiceKeys.USER);
|
|
65
70
|
try {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
71
|
+
// Verify the user exists and is active
|
|
72
|
+
const authenticatedUser = await authProvider.findUserById(req.user.id);
|
|
73
|
+
if (!authenticatedUser ||
|
|
74
|
+
authenticatedUser.accountStatus !== activeStatusValue) {
|
|
75
|
+
return res.status(403).send(
|
|
76
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
77
|
+
(0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_UserNotFound));
|
|
78
|
+
}
|
|
79
|
+
// Ensure we're only authenticating the currently logged-in user
|
|
80
|
+
if (authenticatedUser.id !== req.user.id) {
|
|
81
|
+
return res.status(403).send(
|
|
82
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
83
|
+
(0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
84
|
+
}
|
|
85
|
+
if (mnemonic) {
|
|
86
|
+
if (!authProvider.authenticateWithMnemonic) {
|
|
87
|
+
return res.status(501).send({
|
|
88
|
+
message: 'Mnemonic authentication not supported by this provider',
|
|
89
|
+
});
|
|
80
90
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
userMnemonic.dispose();
|
|
91
|
+
const userMnemonic = new ecies_lib_1.SecureString(mnemonic);
|
|
92
|
+
try {
|
|
93
|
+
const result = await authProvider.authenticateWithMnemonic(authenticatedUser.email, userMnemonic);
|
|
94
|
+
// Double-check authenticated user matches logged-in user
|
|
95
|
+
if (result.userId !== req.user.id) {
|
|
96
|
+
return res
|
|
97
|
+
.status(403)
|
|
98
|
+
.send((0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
90
99
|
}
|
|
100
|
+
req.eciesUser = result.userMember;
|
|
91
101
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
loginResult = await userService.loginWithPassword(userDoc.email, password, sess);
|
|
102
|
+
finally {
|
|
103
|
+
userMnemonic.dispose();
|
|
95
104
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
message:
|
|
105
|
+
}
|
|
106
|
+
else if (password) {
|
|
107
|
+
if (!authProvider.authenticateWithPassword) {
|
|
108
|
+
return res.status(501).send({
|
|
109
|
+
message: 'Password authentication not supported by this provider',
|
|
101
110
|
});
|
|
102
111
|
}
|
|
112
|
+
const result = await authProvider.authenticateWithPassword(authenticatedUser.email, password);
|
|
103
113
|
// Double-check authenticated user matches logged-in user
|
|
104
|
-
if (
|
|
105
|
-
return res
|
|
106
|
-
|
|
107
|
-
|
|
114
|
+
if (result.userId !== req.user.id) {
|
|
115
|
+
return res
|
|
116
|
+
.status(403)
|
|
117
|
+
.send((0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
108
118
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
//
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
119
|
+
req.eciesUser = result.userMember;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
// Should not happen due to earlier guard; keeps TypeScript happy
|
|
123
|
+
return res.status(400).send({
|
|
124
|
+
// amazonq-ignore-next-line false positive, hardcoded string
|
|
125
|
+
message: (0, suite_core_lib_1.getSuiteCoreTranslation)(suite_core_lib_1.SuiteCoreStringKey.Validation_MnemonicOrPasswordRequired),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
next();
|
|
129
|
+
return;
|
|
118
130
|
}
|
|
119
131
|
catch (err) {
|
|
120
132
|
if (err instanceof suite_core_lib_1.InvalidCredentialsError ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate-crypto.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/middlewares/authenticate-crypto.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"authenticate-crypto.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/middlewares/authenticate-crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview JWT token authentication middleware.
|
|
3
3
|
* Validates bearer tokens, loads user data, and sets up request context.
|
|
4
|
+
* Storage-agnostic — delegates user lookup and role resolution to
|
|
5
|
+
* IAuthenticationProvider on the application.
|
|
4
6
|
* @module middlewares/authenticate-token
|
|
5
7
|
*/
|
|
6
|
-
import { ITokenRole, ITokenUser } from '@digitaldefiance/suite-core-lib';
|
|
7
8
|
import { NextFunction, Request, Response } from 'express';
|
|
8
9
|
import { IncomingHttpHeaders } from 'http';
|
|
9
10
|
import { IApplication } from '../interfaces/application';
|
|
@@ -18,17 +19,17 @@ export declare function findAuthToken(headers: IncomingHttpHeaders): string | nu
|
|
|
18
19
|
* Express middleware for JWT token authentication.
|
|
19
20
|
* Validates token, loads user from database, checks account status,
|
|
20
21
|
* and populates req.user with authenticated user data.
|
|
22
|
+
*
|
|
23
|
+
* Delegates to `application.authProvider` for storage-agnostic user lookup
|
|
24
|
+
* and role resolution. The application must have an authProvider configured.
|
|
25
|
+
*
|
|
21
26
|
* @template TID - Platform ID type (defaults to Buffer)
|
|
22
|
-
* @
|
|
23
|
-
* @template TTokenRole - Token role interface type
|
|
24
|
-
* @template TTokenUser - Token user interface type
|
|
25
|
-
* @template TApplication - Application interface type
|
|
26
|
-
* @param {TApplication} application - Application instance
|
|
27
|
+
* @param {IApplication<TID>} application - Application instance with authProvider
|
|
27
28
|
* @param {Request} req - Express request object
|
|
28
29
|
* @param {Response} res - Express response object
|
|
29
30
|
* @param {NextFunction} next - Express next function
|
|
30
31
|
* @returns {Promise<Response>} Response object
|
|
31
32
|
* @throws {TokenExpiredError} When token has expired
|
|
32
33
|
*/
|
|
33
|
-
export declare function authenticateToken<TID extends PlatformID = Buffer
|
|
34
|
+
export declare function authenticateToken<TID extends PlatformID = Buffer>(application: IApplication<TID>, req: Request, res: Response, next: NextFunction): Promise<Response>;
|
|
34
35
|
//# sourceMappingURL=authenticate-token.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authenticate-token.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/middlewares/authenticate-token.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"authenticate-token.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-express-suite/src/middlewares/authenticate-token.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAalE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,GAAG,IAAI,CASzE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,SAAS,UAAU,GAAG,MAAM,EACrE,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,EAC9B,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,QAAQ,CAAC,CAiFnB"}
|