@tstdl/base 0.90.22 → 0.90.24
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 +1 -0
- package/authentication/authentication.api.d.ts +11 -8
- package/authentication/authentication.api.js +8 -7
- package/authentication/client/api.client.d.ts +2 -2
- package/authentication/client/api.client.js +3 -3
- package/authentication/client/authentication.service.d.ts +2 -2
- package/authentication/client/authentication.service.js +2 -2
- package/authentication/client/module.d.ts +1 -1
- package/authentication/client/tokens.d.ts +1 -1
- package/authentication/models/init-secret-reset-data.model.d.ts +1 -1
- package/authentication/models/init-secret-reset-data.model.js +1 -1
- package/authentication/server/authentication-secret-reset.handler.d.ts +2 -2
- package/authentication/server/authentication.api-controller.d.ts +10 -10
- package/authentication/server/authentication.api-controller.js +2 -2
- package/authentication/server/authentication.service.d.ts +4 -4
- package/authentication/server/authentication.service.js +3 -2
- package/authentication/server/module.d.ts +1 -1
- package/examples/api/custom-authentication.js +3 -3
- package/package.json +4 -4
- package/signals/api.js +1 -7
- package/templates/resolvers/jsx.template-resolver.d.ts +4 -0
- package/templates/resolvers/jsx.template-resolver.js +4 -1
- package/templates/template.model.d.ts +2 -2
- package/templates/template.model.js +3 -2
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
|
|
10
|
-
type AuthenticationApiEndpointsDefinition<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void
|
|
11
|
-
export type AuthenticationApiDefinition<AdditionalTokenPayload extends Record = Record<never>, AuthenticationData = void
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
61
|
+
initSecretReset: {
|
|
62
62
|
resource: 'secret/init-reset',
|
|
63
63
|
method: 'POST',
|
|
64
|
-
parameters:
|
|
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.
|
|
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>;
|
|
@@ -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
|
|
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
|
}
|
|
@@ -2,15 +2,15 @@ import type { ApiController, ApiRequestContext, ApiServerResult } from '../../ap
|
|
|
2
2
|
import type { Record } from '../../types.js';
|
|
3
3
|
import type { AuthenticationApiDefinition } from '../authentication.api.js';
|
|
4
4
|
import { AuthenticationService } from './authentication.service.js';
|
|
5
|
-
export declare class AuthenticationApiController<AdditionalTokenPayload extends Record
|
|
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
|
-
|
|
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'>;
|
|
5
|
+
export declare class AuthenticationApiController<AdditionalTokenPayload extends Record, AuthenticationData, AdditionalInitSecretResetData extends Record> implements ApiController<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>> {
|
|
6
|
+
readonly authenticationService: AuthenticationService<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>;
|
|
7
|
+
constructor(authenticationService: AuthenticationService<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>);
|
|
8
|
+
token({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'token'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'token'>>;
|
|
9
|
+
refresh({ request, parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'refresh'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'refresh'>>;
|
|
10
|
+
endSession({ request }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'endSession'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'endSession'>>;
|
|
11
|
+
initSecretReset({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'initSecretReset'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'initSecretReset'>>;
|
|
12
|
+
resetSecret({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'resetSecret'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'resetSecret'>>;
|
|
13
|
+
checkSecret({ parameters }: ApiRequestContext<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'checkSecret'>): Promise<ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'checkSecret'>>;
|
|
14
|
+
timestamp(): ApiServerResult<AuthenticationApiDefinition<AdditionalTokenPayload, AuthenticationData, AdditionalInitSecretResetData>, 'timestamp'>;
|
|
15
15
|
private getTokenResponse;
|
|
16
16
|
}
|
|
@@ -62,8 +62,8 @@ let AuthenticationApiController = class AuthenticationApiController {
|
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
|
-
async
|
|
66
|
-
await this.authenticationService.
|
|
65
|
+
async initSecretReset({ parameters }) {
|
|
66
|
+
await this.authenticationService.initSecretReset(parameters.subject, parameters.data);
|
|
67
67
|
return 'ok';
|
|
68
68
|
}
|
|
69
69
|
async resetSecret({ parameters }) {
|
|
@@ -46,7 +46,7 @@ export type AuthenticationResult = {
|
|
|
46
46
|
success: false;
|
|
47
47
|
subject?: undefined;
|
|
48
48
|
};
|
|
49
|
-
export type TokenResult<AdditionalTokenPayload extends Record =
|
|
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
|
|
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
|
-
|
|
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
|
|
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.
|
|
3
|
+
"version": "0.90.24",
|
|
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.
|
|
124
|
-
"@typescript-eslint/parser": "6.
|
|
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.
|
|
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
|
|
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.');
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { PartialProperty, Record, TypedOmit } from '../../types.js';
|
|
2
2
|
import type { ComponentClass, FunctionComponent } from 'preact';
|
|
3
|
+
import type { Template } from '../template.model.js';
|
|
3
4
|
import { TemplateField } from '../template.model.js';
|
|
4
5
|
import type { TemplateRenderer, TemplateRendererOptions, TemplateRendererString } from '../template.renderer.js';
|
|
5
6
|
import { TemplateResolver } from '../template.resolver.js';
|
|
@@ -13,3 +14,6 @@ export declare class JsxTemplateResolver extends TemplateResolver<JsxTemplateFie
|
|
|
13
14
|
resolve(field: JsxTemplateField): JsxTemplate;
|
|
14
15
|
}
|
|
15
16
|
export declare function jsxTemplateField<Renderer extends TemplateRenderer, Context extends Record = any>(field: PartialProperty<TypedOmit<JsxTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions], Context>, 'resolver'>, 'renderer'>): JsxTemplateField<Renderer[TemplateRendererString], Renderer[TemplateRendererOptions], Context>;
|
|
17
|
+
export declare function simpleJsxTemplate<Context extends Record = any>(name: string, template: JsxTemplate<Context>): Template<{
|
|
18
|
+
template: true;
|
|
19
|
+
}, undefined, Context>;
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import { Singleton } from '../../injector/decorators.js';
|
|
11
11
|
import { Property } from '../../schema/index.js';
|
|
12
|
-
import { TemplateField } from '../template.model.js';
|
|
12
|
+
import { TemplateField, simpleTemplate } from '../template.model.js';
|
|
13
13
|
import { TemplateResolver } from '../template.resolver.js';
|
|
14
14
|
export class JsxTemplateField extends TemplateField {
|
|
15
15
|
template;
|
|
@@ -37,3 +37,6 @@ export { JsxTemplateResolver };
|
|
|
37
37
|
export function jsxTemplateField(field) {
|
|
38
38
|
return { resolver: 'string', renderer: 'jsx', ...field };
|
|
39
39
|
}
|
|
40
|
+
export function simpleJsxTemplate(name, template) {
|
|
41
|
+
return simpleTemplate(name, jsxTemplateField({ template }));
|
|
42
|
+
}
|
|
@@ -19,7 +19,7 @@ export declare abstract class Template<Fields extends Record<string, boolean> =
|
|
|
19
19
|
fields: TemplateFields<Fields, string, string, any, Context>;
|
|
20
20
|
options?: TemplateOptions;
|
|
21
21
|
}
|
|
22
|
-
export declare function simpleTemplate(name: string, template: TemplateField): Template<{
|
|
22
|
+
export declare function simpleTemplate<Context extends Record = any, Options = any>(name: string, template: TemplateField<string, string, any, Context>, options?: Options): Template<{
|
|
23
23
|
template: true;
|
|
24
|
-
}>;
|
|
24
|
+
}, Options, Context>;
|
|
25
25
|
export {};
|
|
@@ -49,11 +49,12 @@ __decorate([
|
|
|
49
49
|
Optional(),
|
|
50
50
|
__metadata("design:type", Object)
|
|
51
51
|
], Template.prototype, "options", void 0);
|
|
52
|
-
export function simpleTemplate(name, template) {
|
|
52
|
+
export function simpleTemplate(name, template, options) {
|
|
53
53
|
return {
|
|
54
54
|
name,
|
|
55
55
|
fields: {
|
|
56
56
|
template
|
|
57
|
-
}
|
|
57
|
+
},
|
|
58
|
+
options
|
|
58
59
|
};
|
|
59
60
|
}
|