@tstdl/base 0.90.23 → 0.90.25

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/.eslintrc.json CHANGED
@@ -35,6 +35,7 @@
35
35
  "@typescript-eslint/init-declarations": "off",
36
36
  "@typescript-eslint/lines-around-comment": "off",
37
37
  "@typescript-eslint/lines-between-class-members": ["warn", "always", { "exceptAfterSingleLine": true }],
38
+ "@typescript-eslint/max-params": "off",
38
39
  "@typescript-eslint/method-signature-style": "off",
39
40
  "@typescript-eslint/no-confusing-void-expression": ["error", { "ignoreArrowShorthand": true, "ignoreVoidOperator": true }],
40
41
  "@typescript-eslint/no-empty-interface": ["warn", { "allowSingleExtends": true }],
@@ -6,9 +6,9 @@ import type { TokenPayload } from './index.js';
6
6
  import { SecretCheckResult } from './models/secret-check-result.model.js';
7
7
  import { TokenPayloadBase } from './models/token-payload-base.model.js';
8
8
  export declare const dontWaitForValidToken: unique symbol;
9
- type GetAuthenticationApiEndpointsDefinition<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void> = typeof getAuthenticationApiEndpointsDefinition<AdditionalTokenPayload, AuthenticationData>;
10
- type AuthenticationApiEndpointsDefinition<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void> = ReturnType<GetAuthenticationApiEndpointsDefinition<AdditionalTokenPayload, AuthenticationData>>;
11
- export type AuthenticationApiDefinition<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void> = ApiDefinition<string, AuthenticationApiEndpointsDefinition<AdditionalTokenPayload, AuthenticationData>>;
9
+ type GetAuthenticationApiEndpointsDefinition<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void, AdditionalInitSecretResetData extends Record = Record<never>> = typeof getAuthenticationApiEndpointsDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>;
10
+ type AuthenticationApiEndpointsDefinition<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void, AdditionalInitSecretResetData extends Record = Record<never>> = ReturnType<GetAuthenticationApiEndpointsDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>>;
11
+ export type AuthenticationApiDefinition<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void, AdditionalInitSecretResetData extends Record = Record<never>> = ApiDefinition<string, AuthenticationApiEndpointsDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>>;
12
12
  export declare const authenticationApiDefinition: {
13
13
  resource: string;
14
14
  endpoints: {
@@ -47,11 +47,12 @@ export declare const authenticationApiDefinition: {
47
47
  [dontWaitForValidToken]: boolean;
48
48
  };
49
49
  };
50
- initResetSecret: {
50
+ initSecretReset: {
51
51
  resource: string;
52
52
  method: "POST";
53
53
  parameters: ObjectSchema<{
54
54
  subject: string;
55
+ data: {};
55
56
  }>;
56
57
  result: import("../schema/types/types.js").ValueSchema<"ok">;
57
58
  };
@@ -78,7 +79,7 @@ export declare const authenticationApiDefinition: {
78
79
  };
79
80
  };
80
81
  };
81
- export declare function getAuthenticationApiDefinition<AdditionalTokenPayload extends Record, AuthenticationData, AdditionalEndpoints>(additionalTokenPayloadSchema: ObjectSchemaOrType<AdditionalTokenPayload>, authenticationDataSchema: SchemaTestable<AuthenticationData>, resource?: string, additionalEndpoints?: AdditionalEndpoints): {
82
+ export declare function getAuthenticationApiDefinition<AdditionalTokenPayload extends Record, AuthenticationData, AdditionalInitSecretResetData, AdditionalEndpoints>(additionalTokenPayloadSchema: ObjectSchemaOrType<AdditionalTokenPayload>, authenticationDataSchema: SchemaTestable<AuthenticationData>, initSecretResetDataSchema: ObjectSchemaOrType<AdditionalInitSecretResetData>, resource?: string, additionalEndpoints?: AdditionalEndpoints): {
82
83
  resource: string;
83
84
  endpoints: {
84
85
  token: {
@@ -116,11 +117,12 @@ export declare function getAuthenticationApiDefinition<AdditionalTokenPayload ex
116
117
  [dontWaitForValidToken]: boolean;
117
118
  };
118
119
  };
119
- initResetSecret: {
120
+ initSecretReset: {
120
121
  resource: string;
121
122
  method: "POST";
122
123
  parameters: ObjectSchema<{
123
124
  subject: string;
125
+ data: AdditionalInitSecretResetData;
124
126
  }>;
125
127
  result: import("../schema/types/types.js").ValueSchema<"ok">;
126
128
  };
@@ -147,7 +149,7 @@ export declare function getAuthenticationApiDefinition<AdditionalTokenPayload ex
147
149
  };
148
150
  };
149
151
  };
150
- export declare function getAuthenticationApiEndpointsDefinition<AdditionalTokenPayload extends Record, AuthenticationData>(additionalTokenPayloadSchema: ObjectSchemaOrType<AdditionalTokenPayload>, authenticationDataSchema: SchemaTestable<AuthenticationData>): {
152
+ export declare function getAuthenticationApiEndpointsDefinition<AdditionalTokenPayload extends Record, AuthenticationData, AdditionalInitSecretResetData>(additionalTokenPayloadSchema: ObjectSchemaOrType<AdditionalTokenPayload>, authenticationDataSchema: SchemaTestable<AuthenticationData>, additionalInitSecretResetDataSchema: ObjectSchemaOrType<AdditionalInitSecretResetData>): {
151
153
  token: {
152
154
  resource: string;
153
155
  method: "POST";
@@ -183,11 +185,12 @@ export declare function getAuthenticationApiEndpointsDefinition<AdditionalTokenP
183
185
  [dontWaitForValidToken]: boolean;
184
186
  };
185
187
  };
186
- initResetSecret: {
188
+ initSecretReset: {
187
189
  resource: string;
188
190
  method: "POST";
189
191
  parameters: ObjectSchema<{
190
192
  subject: string;
193
+ data: AdditionalInitSecretResetData;
191
194
  }>;
192
195
  result: import("../schema/types/types.js").ValueSchema<"ok">;
193
196
  };
@@ -8,19 +8,19 @@ import { unknown } from '../schema/schemas/unknown.js';
8
8
  import { SecretCheckResult } from './models/secret-check-result.model.js';
9
9
  import { TokenPayloadBase } from './models/token-payload-base.model.js';
10
10
  export const dontWaitForValidToken = Symbol('dontWaitForValidToken');
11
- export const authenticationApiDefinition = getAuthenticationApiDefinition(emptyObjectSchema, unknown());
11
+ export const authenticationApiDefinition = getAuthenticationApiDefinition(emptyObjectSchema, unknown(), emptyObjectSchema);
12
12
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
13
- export function getAuthenticationApiDefinition(additionalTokenPayloadSchema, authenticationDataSchema, resource, additionalEndpoints) {
13
+ export function getAuthenticationApiDefinition(additionalTokenPayloadSchema, authenticationDataSchema, initSecretResetDataSchema, resource, additionalEndpoints) {
14
14
  return defineApi({
15
15
  resource: resource ?? 'auth',
16
16
  endpoints: {
17
- ...getAuthenticationApiEndpointsDefinition(additionalTokenPayloadSchema, authenticationDataSchema),
17
+ ...getAuthenticationApiEndpointsDefinition(additionalTokenPayloadSchema, authenticationDataSchema, initSecretResetDataSchema),
18
18
  ...additionalEndpoints
19
19
  }
20
20
  });
21
21
  }
22
22
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
23
- export function getAuthenticationApiEndpointsDefinition(additionalTokenPayloadSchema, authenticationDataSchema) {
23
+ export function getAuthenticationApiEndpointsDefinition(additionalTokenPayloadSchema, authenticationDataSchema, additionalInitSecretResetDataSchema) {
24
24
  const tokenResultSchema = assign(TokenPayloadBase, additionalTokenPayloadSchema);
25
25
  return {
26
26
  token: {
@@ -58,11 +58,12 @@ export function getAuthenticationApiEndpointsDefinition(additionalTokenPayloadSc
58
58
  [dontWaitForValidToken]: true
59
59
  }
60
60
  },
61
- initResetSecret: {
61
+ initSecretReset: {
62
62
  resource: 'secret/init-reset',
63
63
  method: 'POST',
64
- parameters: object({
65
- subject: string()
64
+ parameters: explicitObject({
65
+ subject: string(),
66
+ data: additionalInitSecretResetDataSchema
66
67
  }),
67
68
  result: literal('ok')
68
69
  },
@@ -3,8 +3,8 @@ import type { SchemaTestable } from '../../schema/schema.js';
3
3
  import type { ObjectSchemaOrType } from '../../schema/types/types.js';
4
4
  import type { Record } from '../../types.js';
5
5
  import type { AuthenticationApiDefinition } from '../authentication.api.js';
6
- export declare function getAuthenticationApiClient<AdditionalTokenPayload extends Record, AuthenticationData>(additionalTokenPayloadSchema: ObjectSchemaOrType<AdditionalTokenPayload>, authenticationDataSchema: SchemaTestable<AuthenticationData>): ApiClient<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>>;
7
- declare const defaultAuthenticationApiClient: ApiClient<AuthenticationApiDefinition<{}, unknown>>;
6
+ export declare function getAuthenticationApiClient<AdditionalTokenPayload extends Record, AuthenticationData, AdditionalInitSecretResetData extends Record>(additionalTokenPayloadSchema: ObjectSchemaOrType<AdditionalTokenPayload>, authenticationDataSchema: SchemaTestable<AuthenticationData>, additionalInitSecretResetData: ObjectSchemaOrType<AdditionalInitSecretResetData>): ApiClient<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>>;
7
+ declare const defaultAuthenticationApiClient: ApiClient<AuthenticationApiDefinition<{}, unknown, {}>>;
8
8
  export declare class AuthenticationApiClient extends defaultAuthenticationApiClient {
9
9
  }
10
10
  export {};
@@ -13,8 +13,8 @@ import { ReplaceClass, Singleton } from '../../injector/index.js';
13
13
  import { emptyObjectSchema } from '../../schema/schemas/object.js';
14
14
  import { unknown } from '../../schema/schemas/unknown.js';
15
15
  import { getAuthenticationApiDefinition } from '../authentication.api.js';
16
- export function getAuthenticationApiClient(additionalTokenPayloadSchema, authenticationDataSchema) {
17
- const definition = getAuthenticationApiDefinition(additionalTokenPayloadSchema, authenticationDataSchema);
16
+ export function getAuthenticationApiClient(additionalTokenPayloadSchema, authenticationDataSchema, additionalInitSecretResetData) {
17
+ const definition = getAuthenticationApiDefinition(additionalTokenPayloadSchema, authenticationDataSchema, additionalInitSecretResetData);
18
18
  let AuthenticationApiClient = class AuthenticationApiClient extends compileClient(definition) {
19
19
  constructor(httpClient) {
20
20
  super(httpClient);
@@ -26,7 +26,7 @@ export function getAuthenticationApiClient(additionalTokenPayloadSchema, authent
26
26
  ], AuthenticationApiClient);
27
27
  return AuthenticationApiClient;
28
28
  }
29
- const defaultAuthenticationApiClient = getAuthenticationApiClient(emptyObjectSchema, unknown());
29
+ const defaultAuthenticationApiClient = getAuthenticationApiClient(emptyObjectSchema, unknown(), emptyObjectSchema);
30
30
  let AuthenticationApiClient = class AuthenticationApiClient extends defaultAuthenticationApiClient {
31
31
  };
32
32
  AuthenticationApiClient = __decorate([
@@ -4,7 +4,7 @@ import type { AfterResolve } from '../../injector/index.js';
4
4
  import { afterResolve } from '../../injector/index.js';
5
5
  import type { Record } from '../../types.js';
6
6
  import type { SecretCheckResult, TokenPayload } from '../models/index.js';
7
- export declare class AuthenticationClientService<AdditionalTokenPayload extends Record = Record, AuthenticationData = any> implements AfterResolve, AsyncDisposable {
7
+ export declare class AuthenticationClientService<AdditionalTokenPayload extends Record = Record, AuthenticationData = any, AdditionalInitSecretResetData extends Record = Record> implements AfterResolve, AsyncDisposable {
8
8
  private readonly client;
9
9
  private readonly errorSubject;
10
10
  private readonly tokenUpdateBus;
@@ -43,7 +43,7 @@ export declare class AuthenticationClientService<AdditionalTokenPayload extends
43
43
  logout(): Promise<void>;
44
44
  requestRefresh(data?: AuthenticationData): void;
45
45
  refresh(data?: AuthenticationData): Promise<void>;
46
- initResetSecret(subject: string): Promise<void>;
46
+ initResetSecret(subject: string, data: AdditionalInitSecretResetData): Promise<void>;
47
47
  resetSecret(token: string, newSecret: string): Promise<void>;
48
48
  checkSecret(secret: string): Promise<SecretCheckResult>;
49
49
  private saveToken;
@@ -144,8 +144,8 @@ let AuthenticationClientService = class AuthenticationClientService {
144
144
  throw error;
145
145
  }
146
146
  }
147
- async initResetSecret(subject) {
148
- await this.client.initResetSecret({ subject });
147
+ async initResetSecret(subject, data) {
148
+ await this.client.initSecretReset({ subject, data });
149
149
  }
150
150
  async resetSecret(token, newSecret) {
151
151
  await this.client.resetSecret({ token, newSecret });
@@ -3,7 +3,7 @@ import { Injector } from '../../injector/injector.js';
3
3
  import type { Type } from '../../types.js';
4
4
  import type { AuthenticationApiDefinition } from '../authentication.api.js';
5
5
  export type AuthenticationClientModuleConfig = {
6
- authenticationApiClient?: Type<ApiClientImplementation<AuthenticationApiDefinition<any, any>>>;
6
+ authenticationApiClient?: Type<ApiClientImplementation<AuthenticationApiDefinition<any, any, any>>>;
7
7
  initialAuthenticationData?: unknown;
8
8
  registerMiddleware?: boolean;
9
9
  };
@@ -1,4 +1,4 @@
1
1
  import type { ApiClientImplementation } from '../../api/index.js';
2
2
  import type { AuthenticationApiDefinition } from '../authentication.api.js';
3
- export declare const AUTHENTICATION_API_CLIENT: import("../../injector/token.js").InjectionToken<ApiClientImplementation<AuthenticationApiDefinition<any, any>>, never>;
3
+ export declare const AUTHENTICATION_API_CLIENT: import("../../injector/token.js").InjectionToken<ApiClientImplementation<AuthenticationApiDefinition<any, any, any>>, never>;
4
4
  export declare const INITIAL_AUTHENTICATION_DATA: import("../../injector/token.js").InjectionToken<unknown, never>;
@@ -1,5 +1,5 @@
1
1
  export declare class InitSecretResetData {
2
- /** Subject is not checked for existence may not existence. */
2
+ /** Subject is not checked for existence. */
3
3
  subject: string;
4
4
  token: string;
5
5
  }
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import { Property } from '../../schema/decorators/property.js';
11
11
  export class InitSecretResetData {
12
- /** Subject is not checked for existence may not existence. */
12
+ /** Subject is not checked for existence. */
13
13
  subject;
14
14
  token;
15
15
  }
@@ -1,4 +1,4 @@
1
1
  import type { InitSecretResetData } from '../models/init-secret-reset-data.model.js';
2
- export declare abstract class AuthenticationSecretResetHandler {
3
- abstract handleInitSecretReset(data: InitSecretResetData): void | Promise<void>;
2
+ export declare abstract class AuthenticationSecretResetHandler<AdditionalInitSecretResetData> {
3
+ abstract handleInitSecretReset(data: InitSecretResetData & AdditionalInitSecretResetData): void | Promise<void>;
4
4
  }
@@ -1,16 +1,21 @@
1
1
  import type { ApiController, ApiRequestContext, ApiServerResult } from '../../api/types.js';
2
- import type { Record } from '../../types.js';
2
+ import { HttpServerResponse } from '../../http/server/index.js';
3
+ import type { ObjectSchemaOrType, SchemaTestable } from '../../schema/index.js';
4
+ import type { Record, Type } from '../../types.js';
3
5
  import type { AuthenticationApiDefinition } from '../authentication.api.js';
6
+ import type { TokenResult } from './authentication.service.js';
4
7
  import { AuthenticationService } from './authentication.service.js';
5
- export declare class AuthenticationApiController<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void> implements ApiController<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>> {
6
- readonly authenticationService: AuthenticationService<AdditionalTokenPayload, AuthenticationData>;
7
- constructor(authenticationService: AuthenticationService<AdditionalTokenPayload, AuthenticationData>);
8
- token({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'token'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'token'>>;
9
- refresh({ request, parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'refresh'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'refresh'>>;
10
- endSession({ request }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'endSession'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'endSession'>>;
11
- initResetSecret({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'initResetSecret'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'initResetSecret'>>;
12
- resetSecret({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'resetSecret'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'resetSecret'>>;
13
- checkSecret({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'checkSecret'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'checkSecret'>>;
14
- timestamp(): ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData>, 'timestamp'>;
15
- private getTokenResponse;
8
+ export declare class AuthenticationApiController<AdditionalTokenPayload extends Record, AuthenticationData, AdditionalInitSecretResetData extends Record> implements ApiController<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>> {
9
+ readonly authenticationService: AuthenticationService<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>;
10
+ constructor(authenticationService: AuthenticationService<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>);
11
+ token({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'token'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'token'>>;
12
+ refresh({ request, parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'refresh'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'refresh'>>;
13
+ endSession({ request }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'endSession'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'endSession'>>;
14
+ initSecretReset({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'initSecretReset'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'initSecretReset'>>;
15
+ resetSecret({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'resetSecret'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'resetSecret'>>;
16
+ checkSecret({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'checkSecret'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'checkSecret'>>;
17
+ timestamp(): ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'timestamp'>;
18
+ protected getTokenResponse({ token, jsonToken, refreshToken }: TokenResult<AdditionalTokenPayload>): HttpServerResponse;
16
19
  }
20
+ export declare function getAuthenticationApiController<AdditionalTokenPayload extends Record, AuthenticationData, AdditionalInitSecretResetData extends Record>(// eslint-disable-line @typescript-eslint/explicit-function-return-type
21
+ additionalTokenPayloadSchema: ObjectSchemaOrType<AdditionalTokenPayload>, authenticationDataSchema: SchemaTestable<AuthenticationData>, additionalInitSecretResetData: ObjectSchemaOrType<AdditionalInitSecretResetData>): Type<AuthenticationApiController<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>>;
@@ -11,7 +11,7 @@ import { apiController } from '../../api/server/index.js';
11
11
  import { InvalidCredentialsError } from '../../errors/invalid-credentials.error.js';
12
12
  import { HttpServerResponse } from '../../http/server/index.js';
13
13
  import { currentTimestamp } from '../../utils/date-time.js';
14
- import { authenticationApiDefinition } from '../authentication.api.js';
14
+ import { authenticationApiDefinition, getAuthenticationApiDefinition } from '../authentication.api.js';
15
15
  import { AuthenticationService } from './authentication.service.js';
16
16
  import { tryGetAuthorizationTokenStringFromRequest } from './helper.js';
17
17
  const cookieBaseOptions = { path: '/', httpOnly: true, secure: true, sameSite: 'strict' };
@@ -62,8 +62,8 @@ let AuthenticationApiController = class AuthenticationApiController {
62
62
  }
63
63
  });
64
64
  }
65
- async initResetSecret({ parameters }) {
66
- await this.authenticationService.initResetSecret(parameters.subject);
65
+ async initSecretReset({ parameters }) {
66
+ await this.authenticationService.initSecretReset(parameters.subject, parameters.data);
67
67
  return 'ok';
68
68
  }
69
69
  async resetSecret({ parameters }) {
@@ -94,3 +94,13 @@ AuthenticationApiController = __decorate([
94
94
  __metadata("design:paramtypes", [AuthenticationService])
95
95
  ], AuthenticationApiController);
96
96
  export { AuthenticationApiController };
97
+ export function getAuthenticationApiController(// eslint-disable-line @typescript-eslint/explicit-function-return-type
98
+ additionalTokenPayloadSchema, authenticationDataSchema, additionalInitSecretResetData) {
99
+ const apiDefinition = getAuthenticationApiDefinition(additionalTokenPayloadSchema, authenticationDataSchema, additionalInitSecretResetData);
100
+ let KfinAuthenticationApi = class KfinAuthenticationApi extends AuthenticationApiController {
101
+ };
102
+ KfinAuthenticationApi = __decorate([
103
+ apiController(apiDefinition)
104
+ ], KfinAuthenticationApi);
105
+ return KfinAuthenticationApi;
106
+ }
@@ -46,7 +46,7 @@ export type AuthenticationResult = {
46
46
  success: false;
47
47
  subject?: undefined;
48
48
  };
49
- export type TokenResult<AdditionalTokenPayload extends Record = Record<never>> = {
49
+ export type TokenResult<AdditionalTokenPayload extends Record> = {
50
50
  token: string;
51
51
  jsonToken: Token<AdditionalTokenPayload>;
52
52
  refreshToken: string;
@@ -65,7 +65,7 @@ type CreateRefreshTokenResult = {
65
65
  salt: Uint8Array;
66
66
  hash: Uint8Array;
67
67
  };
68
- export declare class AuthenticationService<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void> implements AfterResolve {
68
+ export declare class AuthenticationService<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void, AdditionalInitSecretResetData extends Record = Record<never>> implements AfterResolve {
69
69
  private readonly credentialsRepository;
70
70
  private readonly sessionRepository;
71
71
  private readonly authenticationSecretRequirementsValidator;
@@ -81,7 +81,7 @@ export declare class AuthenticationService<AdditionalTokenPayload extends Record
81
81
  private derivedTokenSigningSecret;
82
82
  private derivedRefreshTokenSigningSecret;
83
83
  private derivedSecretResetTokenSigningSecret;
84
- constructor(credentialsRepository: AuthenticationCredentialsRepository, sessionRepository: AuthenticationSessionRepository, authenticationSecretRequirementsValidator: AuthenticationSecretRequirementsValidator, subjectResolver: AuthenticationSubjectResolver | undefined, tokenPayloadProvider: AuthenticationTokenPayloadProvider<AdditionalTokenPayload, AuthenticationData> | undefined, authenticationResetSecretHandler: AuthenticationSecretResetHandler | undefined, options: AuthenticationServiceOptions);
84
+ constructor(credentialsRepository: AuthenticationCredentialsRepository, sessionRepository: AuthenticationSessionRepository, authenticationSecretRequirementsValidator: AuthenticationSecretRequirementsValidator, subjectResolver: AuthenticationSubjectResolver | undefined, tokenPayloadProvider: AuthenticationTokenPayloadProvider<AdditionalTokenPayload, AuthenticationData> | undefined, authenticationResetSecretHandler: AuthenticationSecretResetHandler<AdditionalInitSecretResetData> | undefined, options: AuthenticationServiceOptions);
85
85
  [afterResolve](): Promise<void>;
86
86
  initialize(): Promise<void>;
87
87
  setCredentials(subject: string, secret: string, options?: SetCredentialsOptions): Promise<void>;
@@ -89,7 +89,7 @@ export declare class AuthenticationService<AdditionalTokenPayload extends Record
89
89
  getToken(subject: string, authenticationData: AuthenticationData): Promise<TokenResult<AdditionalTokenPayload>>;
90
90
  endSession(sessionId: string): Promise<void>;
91
91
  refresh(refreshToken: string, authenticationData: AuthenticationData): Promise<TokenResult<AdditionalTokenPayload>>;
92
- initResetSecret(subject: string): Promise<void>;
92
+ initSecretReset(subject: string, data: AdditionalInitSecretResetData): Promise<void>;
93
93
  resetSecret(tokenString: string, newSecret: string): Promise<void>;
94
94
  checkSecret(secret: string): Promise<SecretCheckResult>;
95
95
  testSecret(secret: string): Promise<SecretTestResult>;
@@ -165,7 +165,7 @@ let AuthenticationService = class AuthenticationService {
165
165
  });
166
166
  return { token, jsonToken, refreshToken: newRefreshToken.token };
167
167
  }
168
- async initResetSecret(subject) {
168
+ async initSecretReset(subject, data) {
169
169
  if (isUndefined(this.authenticationResetSecretHandler)) {
170
170
  throw new NotImplementedError();
171
171
  }
@@ -173,7 +173,8 @@ let AuthenticationService = class AuthenticationService {
173
173
  const secretResetToken = await this.createSecretResetToken(actualSubject, currentTimestamp() + this.secretResetTokenTimeToLive);
174
174
  const initSecretResetData = {
175
175
  subject: actualSubject,
176
- token: secretResetToken.token
176
+ token: secretResetToken.token,
177
+ ...data
177
178
  };
178
179
  await this.authenticationResetSecretHandler.handleInitSecretReset(initSecretResetData);
179
180
  }
@@ -10,7 +10,7 @@ export type AuthenticationModuleConfig = {
10
10
  credentialsRepository: InjectionToken<AuthenticationCredentialsRepository>;
11
11
  sessionRepository: InjectionToken<AuthenticationSessionRepository>;
12
12
  /** override default AuthenticationService */
13
- authenticationService?: InjectionToken<AuthenticationService<any, any>>;
13
+ authenticationService?: InjectionToken<AuthenticationService<any, any, any>>;
14
14
  tokenPayloadProvider?: InjectionToken<AuthenticationTokenPayloadProvider<any, any>>;
15
15
  subjectResolver?: InjectionToken<AuthenticationSubjectResolver>;
16
16
  };
@@ -9,6 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  /* eslint-disable max-classes-per-file */
11
11
  import '../../polyfills.js';
12
+ import { Agent } from 'undici';
12
13
  import { configureApiServer } from '../../api/server/index.js';
13
14
  import { Application } from '../../application/application.js';
14
15
  import { AuthenticationClientService, configureAuthenticationClient, getAuthenticationApiClient } from '../../authentication/client/index.js';
@@ -25,12 +26,11 @@ import { Singleton } from '../../injector/decorators.js';
25
26
  import { inject, injectAsync } from '../../injector/inject.js';
26
27
  import { configureLocalMessageBus } from '../../message-bus/local/module.js';
27
28
  import { WebServerModule } from '../../module/modules/index.js';
28
- import { Property } from '../../schema/index.js';
29
+ import { Property, emptyObjectSchema } from '../../schema/index.js';
29
30
  import { configureDefaultSignalsImplementation } from '../../signals/implementation/configure.js';
30
31
  import { first } from '../../utils/iterable-helpers/first.js';
31
32
  import { skip } from '../../utils/iterable-helpers/skip.js';
32
33
  import { timeout } from '../../utils/timing.js';
33
- import { Agent } from 'undici';
34
34
  class LocalStoragePolyfill {
35
35
  #storage = new Map();
36
36
  get length() {
@@ -67,7 +67,7 @@ __decorate([
67
67
  Property(),
68
68
  __metadata("design:type", String)
69
69
  ], AuthenticationData.prototype, "deviceId", void 0);
70
- const CustomAuthenticationApiClient = getAuthenticationApiClient(CustomTokenPaylod, AuthenticationData);
70
+ const CustomAuthenticationApiClient = getAuthenticationApiClient(CustomTokenPaylod, AuthenticationData, emptyObjectSchema);
71
71
  let CustomTokenPayloadProvider = class CustomTokenPayloadProvider extends AuthenticationTokenPayloadProvider {
72
72
  getTokenPayload(_subject, authenticationData) {
73
73
  return { deviceRegistrationId: `registration:${authenticationData.deviceId}` };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tstdl/base",
3
- "version": "0.90.23",
3
+ "version": "0.90.25",
4
4
  "author": "Patrick Hein",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -120,11 +120,11 @@
120
120
  "@types/mjml": "4.7",
121
121
  "@types/node": "20",
122
122
  "@types/nodemailer": "6.4",
123
- "@typescript-eslint/eslint-plugin": "6.9",
124
- "@typescript-eslint/parser": "6.9",
123
+ "@typescript-eslint/eslint-plugin": "6.10",
124
+ "@typescript-eslint/parser": "6.10",
125
125
  "concurrently": "8.2",
126
126
  "esbuild": "0.19",
127
- "eslint": "8.52",
127
+ "eslint": "8.53",
128
128
  "eslint-import-resolver-typescript": "3.6",
129
129
  "eslint-plugin-import": "2.29",
130
130
  "tsc-alias": "1.8",
package/signals/api.js CHANGED
@@ -8,13 +8,7 @@ export let toSignal = throwSignalsNotConfigured;
8
8
  export let toObservable = throwSignalsNotConfigured;
9
9
  /* eslint-enable import/no-mutable-exports */
10
10
  export function configureSignals(configuration) {
11
- signal = configuration.signal;
12
- computed = configuration.computed;
13
- effect = configuration.effect;
14
- untracked = configuration.untracked;
15
- isSignal = configuration.isSignal;
16
- toSignal = configuration.toSignal;
17
- toObservable = configuration.toObservable;
11
+ ({ signal, computed, effect, untracked, isSignal, toSignal, toObservable } = configuration);
18
12
  }
19
13
  function throwSignalsNotConfigured() {
20
14
  throw new Error('Signals are not configured. Use configureDefaultSignalsImplementation() for default implementation or configureSignals() for custom implementation.');