@tstdl/base 0.92.167 → 0.92.168
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/application/application.d.ts +12 -18
- package/application/application.js +48 -69
- package/application/index.d.ts +1 -5
- package/application/index.js +1 -5
- package/application/providers.d.ts +10 -0
- package/application/providers.js +54 -0
- package/authentication/client/authentication.service.d.ts +1 -3
- package/authentication/client/authentication.service.js +4 -5
- package/browser/browser-context-controller.d.ts +2 -4
- package/browser/browser-context-controller.js +5 -6
- package/browser/browser-controller.d.ts +2 -4
- package/browser/browser-controller.js +3 -4
- package/browser/browser.service.d.ts +1 -3
- package/browser/browser.service.js +1 -2
- package/browser/page-controller.d.ts +2 -4
- package/browser/page-controller.js +7 -8
- package/browser/utils.js +3 -3
- package/cancellation/token.d.ts +104 -41
- package/cancellation/token.js +125 -54
- package/core.d.ts +1 -13
- package/core.js +1 -46
- package/disposable/disposable.d.ts +0 -8
- package/disposable/disposable.js +1 -3
- package/disposable/index.d.ts +0 -6
- package/disposable/index.js +0 -6
- package/disposable/using.d.ts +0 -1
- package/disposable/using.js +2 -3
- package/distributed-loop/distributed-loop.js +2 -2
- package/errors/utils.js +4 -1
- package/examples/api/authentication.js +11 -5
- package/examples/api/basic-overview.js +17 -12
- package/examples/api/custom-authentication.js +13 -7
- package/examples/api/streaming.js +15 -12
- package/examples/browser/basic.js +6 -3
- package/examples/document-management/main.js +6 -3
- package/examples/http/client.js +7 -3
- package/examples/mail/basic.js +9 -7
- package/examples/pdf/basic.js +8 -6
- package/examples/template/basic.js +7 -5
- package/http/client/http-client-request.d.ts +1 -2
- package/http/client/http-client-request.js +1 -2
- package/http/server/http-server.d.ts +1 -3
- package/http/server/http-server.js +0 -1
- package/http/server/node/node-http-server.d.ts +1 -2
- package/http/server/node/node-http-server.js +1 -2
- package/import.js +1 -1
- package/injector/injector.d.ts +1 -1
- package/injector/types.d.ts +3 -4
- package/lock/lock.d.ts +40 -21
- package/lock/lock.js +74 -1
- package/lock/postgres/drizzle/0000_busy_tattoo.sql +7 -0
- package/lock/postgres/drizzle/meta/0000_snapshot.json +65 -0
- package/lock/postgres/drizzle/meta/_journal.json +13 -0
- package/lock/postgres/drizzle.config.js +11 -0
- package/lock/postgres/index.d.ts +2 -0
- package/lock/postgres/index.js +2 -0
- package/lock/postgres/lock.d.ts +14 -0
- package/lock/postgres/lock.js +127 -0
- package/lock/postgres/models/index.d.ts +2 -0
- package/lock/postgres/models/index.js +2 -0
- package/lock/postgres/models/lock.model.d.ts +7 -0
- package/{examples/orm/user.model.js → lock/postgres/models/lock.model.js} +22 -30
- package/lock/postgres/models/schemas.d.ts +3 -0
- package/lock/postgres/models/schemas.js +4 -0
- package/lock/postgres/module.d.ts +6 -0
- package/lock/postgres/module.js +26 -0
- package/lock/postgres/provider.d.ts +6 -0
- package/lock/postgres/provider.js +29 -0
- package/lock/provider.d.ts +12 -2
- package/lock/provider.js +24 -1
- package/lock/web/web-lock.d.ts +4 -3
- package/lock/web/web-lock.js +49 -42
- package/lock/web/web-lock.provider.d.ts +0 -3
- package/lock/web/web-lock.provider.js +5 -22
- package/logger/formatter.d.ts +13 -0
- package/logger/formatter.js +3 -0
- package/logger/formatters/index.d.ts +2 -0
- package/logger/formatters/index.js +2 -0
- package/logger/formatters/json.d.ts +5 -0
- package/logger/formatters/json.js +33 -0
- package/logger/formatters/pretty-print.d.ts +5 -0
- package/logger/formatters/pretty-print.js +55 -0
- package/logger/index.d.ts +5 -2
- package/logger/index.js +5 -2
- package/logger/level.d.ts +10 -8
- package/logger/level.js +9 -9
- package/logger/logger.d.ts +21 -30
- package/logger/logger.js +98 -26
- package/logger/manager.d.ts +20 -0
- package/logger/manager.js +77 -0
- package/logger/tokens.d.ts +1 -1
- package/logger/tokens.js +1 -1
- package/logger/transport.d.ts +14 -0
- package/logger/transport.js +16 -0
- package/logger/transports/console.d.ts +14 -0
- package/logger/transports/console.js +36 -0
- package/logger/transports/index.d.ts +1 -0
- package/logger/transports/index.js +1 -0
- package/mail/clients/nodemailer.mail-client.d.ts +0 -1
- package/mail/clients/nodemailer.mail-client.js +9 -7
- package/message-bus/local/local-message-bus.js +2 -2
- package/message-bus/message-bus-base.d.ts +2 -3
- package/message-bus/message-bus-base.js +5 -6
- package/message-bus/message-bus.d.ts +1 -2
- package/message-bus/message-bus.js +1 -2
- package/module/index.d.ts +0 -2
- package/module/index.js +0 -2
- package/module/module.d.ts +17 -18
- package/module/module.js +47 -12
- package/module/modules/function.module.d.ts +6 -6
- package/module/modules/function.module.js +25 -9
- package/module/modules/web-server.module.d.ts +2 -10
- package/module/modules/web-server.module.js +3 -11
- package/openid-connect/index.d.ts +0 -2
- package/openid-connect/index.js +0 -2
- package/openid-connect/oidc-state.model.d.ts +4 -5
- package/openid-connect/oidc-state.model.js +51 -1
- package/openid-connect/oidc.service-model.d.ts +1 -1
- package/openid-connect/oidc.service.d.ts +2 -6
- package/openid-connect/oidc.service.js +24 -37
- package/orm/decorators.d.ts +10 -1
- package/orm/decorators.js +8 -0
- package/orm/server/repository.d.ts +3 -1
- package/orm/server/repository.js +32 -3
- package/package.json +17 -28
- package/pdf/pdf.service.js +9 -9
- package/pool/pool.d.ts +1 -3
- package/pool/pool.js +3 -4
- package/queue/postgres/job.model.d.ts +1 -2
- package/queue/postgres/job.model.js +1 -2
- package/queue/postgres/module.js +1 -1
- package/threading/thread-pool.d.ts +1 -3
- package/threading/thread-pool.js +7 -8
- package/utils/format-error.d.ts +7 -0
- package/utils/format-error.js +59 -17
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/object/dereference.d.ts +51 -19
- package/utils/object/dereference.js +52 -43
- package/utils/timing.js +2 -2
- package/utils/try-chain.d.ts +22 -0
- package/utils/try-chain.js +46 -0
- package/database/entity-repository.d.ts +0 -50
- package/database/entity-repository.js +0 -3
- package/database/entity.d.ts +0 -7
- package/database/entity.js +0 -1
- package/database/id.d.ts +0 -1
- package/database/id.js +0 -9
- package/database/index.d.ts +0 -11
- package/database/index.js +0 -11
- package/database/module.d.ts +0 -8
- package/database/module.js +0 -11
- package/database/mongo/classes.d.ts +0 -21
- package/database/mongo/classes.js +0 -26
- package/database/mongo/index.d.ts +0 -15
- package/database/mongo/index.js +0 -15
- package/database/mongo/model/document.d.ts +0 -29
- package/database/mongo/model/document.js +0 -63
- package/database/mongo/model/index.d.ts +0 -1
- package/database/mongo/model/index.js +0 -1
- package/database/mongo/module.d.ts +0 -8
- package/database/mongo/module.js +0 -68
- package/database/mongo/mongo-base.repository.d.ts +0 -103
- package/database/mongo/mongo-base.repository.js +0 -263
- package/database/mongo/mongo-bulk.d.ts +0 -35
- package/database/mongo/mongo-bulk.js +0 -90
- package/database/mongo/mongo-entity-repository.d.ts +0 -98
- package/database/mongo/mongo-entity-repository.js +0 -278
- package/database/mongo/operations.d.ts +0 -10
- package/database/mongo/operations.js +0 -54
- package/database/mongo/query-converter.d.ts +0 -6
- package/database/mongo/query-converter.js +0 -83
- package/database/mongo/simple-entity-repository.d.ts +0 -7
- package/database/mongo/simple-entity-repository.js +0 -6
- package/database/mongo/types.d.ts +0 -50
- package/database/mongo/types.js +0 -3
- package/database/query.d.ts +0 -121
- package/database/query.js +0 -7
- package/database/utils.d.ts +0 -2
- package/database/utils.js +0 -3
- package/disposable/async-disposer.d.ts +0 -35
- package/disposable/async-disposer.js +0 -125
- package/examples/orm/drizzle.config.js +0 -6
- package/examples/orm/schemas.d.ts +0 -3
- package/examples/orm/schemas.js +0 -4
- package/examples/orm/test.d.ts +0 -1
- package/examples/orm/test.js +0 -11
- package/examples/orm/user.model.d.ts +0 -13
- package/key-value-store/mongo/index.d.ts +0 -6
- package/key-value-store/mongo/index.js +0 -6
- package/key-value-store/mongo/module.d.ts +0 -8
- package/key-value-store/mongo/module.js +0 -18
- package/key-value-store/mongo/mongo-key-value-store.provider.d.ts +0 -8
- package/key-value-store/mongo/mongo-key-value-store.provider.js +0 -26
- package/key-value-store/mongo/mongo-key-value.model.d.ts +0 -7
- package/key-value-store/mongo/mongo-key-value.model.js +0 -1
- package/key-value-store/mongo/mongo-key-value.repository.d.ts +0 -10
- package/key-value-store/mongo/mongo-key-value.repository.js +0 -31
- package/key-value-store/mongo/mongo-key-value.store.d.ts +0 -15
- package/key-value-store/mongo/mongo-key-value.store.js +0 -82
- package/key-value-store/mongo/tokens.d.ts +0 -3
- package/key-value-store/mongo/tokens.js +0 -2
- package/lock/mongo/index.d.ts +0 -5
- package/lock/mongo/index.js +0 -5
- package/lock/mongo/lock.d.ts +0 -14
- package/lock/mongo/lock.js +0 -125
- package/lock/mongo/model.d.ts +0 -6
- package/lock/mongo/model.js +0 -1
- package/lock/mongo/module.d.ts +0 -12
- package/lock/mongo/module.js +0 -20
- package/lock/mongo/mongo-lock-repository.d.ts +0 -14
- package/lock/mongo/mongo-lock-repository.js +0 -67
- package/lock/mongo/provider.d.ts +0 -8
- package/lock/mongo/provider.js +0 -36
- package/logger/console/index.d.ts +0 -1
- package/logger/console/index.js +0 -1
- package/logger/console/logger.d.ts +0 -11
- package/logger/console/logger.js +0 -64
- package/logger/noop/index.d.ts +0 -1
- package/logger/noop/index.js +0 -1
- package/logger/noop/logger.d.ts +0 -9
- package/logger/noop/logger.js +0 -21
- package/migration/index.d.ts +0 -9
- package/migration/index.js +0 -9
- package/migration/migration-state-repository.d.ts +0 -4
- package/migration/migration-state-repository.js +0 -3
- package/migration/migration-state.d.ts +0 -6
- package/migration/migration-state.js +0 -1
- package/migration/migrator.d.ts +0 -23
- package/migration/migrator.js +0 -76
- package/migration/mongo/index.d.ts +0 -2
- package/migration/mongo/index.js +0 -2
- package/migration/mongo/migration-state-repository.d.ts +0 -11
- package/migration/mongo/migration-state-repository.js +0 -32
- package/migration/mongo/module.d.ts +0 -12
- package/migration/mongo/module.js +0 -17
- package/module/module-base.d.ts +0 -18
- package/module/module-base.js +0 -40
- package/module/module-metric-reporter.d.ts +0 -29
- package/module/module-metric-reporter.js +0 -62
- package/openid-connect/mongo-oidc-state.repository.d.ts +0 -21
- package/openid-connect/mongo-oidc-state.repository.js +0 -52
- package/openid-connect/oidc-state.repository.d.ts +0 -4
- package/openid-connect/oidc-state.repository.js +0 -3
- package/process-shutdown.d.ts +0 -9
- package/process-shutdown.js +0 -65
- package/queue/mongo/index.d.ts +0 -4
- package/queue/mongo/index.js +0 -4
- package/queue/mongo/job.d.ts +0 -12
- package/queue/mongo/job.js +0 -1
- package/queue/mongo/mongo-job.repository.d.ts +0 -13
- package/queue/mongo/mongo-job.repository.js +0 -54
- package/queue/mongo/queue.d.ts +0 -38
- package/queue/mongo/queue.js +0 -266
- package/queue/mongo/queue.provider.d.ts +0 -18
- package/queue/mongo/queue.provider.js +0 -38
- package/search-index/elastic/config.d.ts +0 -8
- package/search-index/elastic/config.js +0 -26
- package/search-index/elastic/index.d.ts +0 -8
- package/search-index/elastic/index.js +0 -8
- package/search-index/elastic/keyword-rewriter.d.ts +0 -8
- package/search-index/elastic/keyword-rewriter.js +0 -18
- package/search-index/elastic/model/elastic-query.d.ts +0 -16
- package/search-index/elastic/model/elastic-query.js +0 -1
- package/search-index/elastic/model/index-mapping.d.ts +0 -26
- package/search-index/elastic/model/index-mapping.js +0 -4
- package/search-index/elastic/model/index.d.ts +0 -3
- package/search-index/elastic/model/index.js +0 -3
- package/search-index/elastic/model/sort.d.ts +0 -8
- package/search-index/elastic/model/sort.js +0 -1
- package/search-index/elastic/module.d.ts +0 -10
- package/search-index/elastic/module.js +0 -49
- package/search-index/elastic/query-builder/boolean-query-builder.d.ts +0 -11
- package/search-index/elastic/query-builder/boolean-query-builder.js +0 -52
- package/search-index/elastic/query-builder/index.d.ts +0 -1
- package/search-index/elastic/query-builder/index.js +0 -1
- package/search-index/elastic/query-converter.d.ts +0 -9
- package/search-index/elastic/query-converter.js +0 -183
- package/search-index/elastic/search-index.d.ts +0 -30
- package/search-index/elastic/search-index.js +0 -144
- package/search-index/elastic/sort-converter.d.ts +0 -4
- package/search-index/elastic/sort-converter.js +0 -14
- package/search-index/elastic/types.d.ts +0 -5
- package/search-index/elastic/types.js +0 -1
- package/search-index/error.d.ts +0 -10
- package/search-index/error.js +0 -14
- package/search-index/index.d.ts +0 -3
- package/search-index/index.js +0 -3
- package/search-index/memory/index.d.ts +0 -1
- package/search-index/memory/index.js +0 -1
- package/search-index/memory/memory-search-index.d.ts +0 -19
- package/search-index/memory/memory-search-index.js +0 -144
- package/search-index/search-index.d.ts +0 -46
- package/search-index/search-index.js +0 -31
- package/search-index/search-result.d.ts +0 -12
- package/search-index/search-result.js +0 -1
- package/theme/adapters/css-adapter.d.ts +0 -5
- package/theme/adapters/css-adapter.js +0 -29
- package/theme/adapters/index.d.ts +0 -2
- package/theme/adapters/index.js +0 -2
- package/theme/adapters/tailwind-adapter.d.ts +0 -18
- package/theme/adapters/tailwind-adapter.js +0 -32
- package/theme/index.d.ts +0 -1
- package/theme/index.js +0 -1
- package/theme/theme-service.d.ts +0 -43
- package/theme/theme-service.js +0 -128
- /package/{examples/orm → lock/postgres}/drizzle.config.d.ts +0 -0
|
@@ -1 +1,51 @@
|
|
|
1
|
-
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { ExpiresAt as Expires } from '../orm/decorators.js';
|
|
11
|
+
import { EntityWithoutMetadata, Json, Unique } from '../orm/index.js';
|
|
12
|
+
import { any, NumberProperty, StringProperty } from '../schema/index.js';
|
|
13
|
+
export class OidcState extends EntityWithoutMetadata {
|
|
14
|
+
value;
|
|
15
|
+
codeVerifier;
|
|
16
|
+
endpoint;
|
|
17
|
+
clientId;
|
|
18
|
+
clientSecret;
|
|
19
|
+
expiration;
|
|
20
|
+
data;
|
|
21
|
+
}
|
|
22
|
+
__decorate([
|
|
23
|
+
Unique(),
|
|
24
|
+
StringProperty(),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], OidcState.prototype, "value", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
StringProperty(),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], OidcState.prototype, "codeVerifier", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
StringProperty(),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], OidcState.prototype, "endpoint", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
StringProperty(),
|
|
37
|
+
__metadata("design:type", String)
|
|
38
|
+
], OidcState.prototype, "clientId", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
StringProperty(),
|
|
41
|
+
__metadata("design:type", String)
|
|
42
|
+
], OidcState.prototype, "clientSecret", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
Expires(),
|
|
45
|
+
NumberProperty(),
|
|
46
|
+
__metadata("design:type", Number)
|
|
47
|
+
], OidcState.prototype, "expiration", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
Json({ schema: any() }),
|
|
50
|
+
__metadata("design:type", Object)
|
|
51
|
+
], OidcState.prototype, "data", void 0);
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
-
import { HttpClient } from '../http/client/index.js';
|
|
2
1
|
import type { Record } from '../types/index.js';
|
|
3
|
-
import {
|
|
4
|
-
import type { OidcState } from './oidc-state.model.js';
|
|
5
|
-
import { OidcStateRepository } from './oidc-state.repository.js';
|
|
2
|
+
import { OidcState } from './oidc-state.model.js';
|
|
6
3
|
import type { OidcGetTokenParameters, OidcInitParameters, OidcInitResult, OidcRefreshTokenParameters, OidcToken } from './oidc.service-model.js';
|
|
7
|
-
export declare class OidcService<Data
|
|
4
|
+
export declare class OidcService<Data> {
|
|
8
5
|
private readonly oidcConfigurationService;
|
|
9
6
|
private readonly maybeOidcStateRepository;
|
|
10
7
|
private readonly httpClient;
|
|
11
8
|
private get oidcStateRepository();
|
|
12
|
-
constructor(oidcConfigurationService: OidcConfigurationService, oidcStateRepository: OidcStateRepository | undefined, httpClient: HttpClient);
|
|
13
9
|
initAuthorization({ endpoint, clientId, clientSecret, scope, expiration, data }: OidcInitParameters<Data>): Promise<OidcInitResult>;
|
|
14
10
|
getState(state: string): Promise<OidcState<Data>>;
|
|
15
11
|
deleteState(state: string): Promise<void>;
|
|
@@ -4,57 +4,46 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
-
};
|
|
13
7
|
import { ForbiddenError } from '../errors/forbidden.error.js';
|
|
14
8
|
import { NotImplementedError } from '../errors/not-implemented.error.js';
|
|
15
9
|
import { HttpClient } from '../http/client/index.js';
|
|
16
10
|
import { HttpHeaders } from '../http/http-headers.js';
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
11
|
+
import { inject, Singleton } from '../injector/index.js';
|
|
12
|
+
import { injectRepository } from '../orm/server/repository.js';
|
|
13
|
+
import { object, optional, Schema, string } from '../schema/index.js';
|
|
19
14
|
import { Alphabet } from '../utils/alphabet.js';
|
|
20
15
|
import { digest } from '../utils/cryptography.js';
|
|
21
16
|
import { currentTimestamp } from '../utils/date-time.js';
|
|
22
17
|
import { getRandomString } from '../utils/random.js';
|
|
23
18
|
import { assertDefinedPass, isUndefined } from '../utils/type-guards.js';
|
|
24
19
|
import { OidcConfigurationService } from './oidc-configuration.service.js';
|
|
25
|
-
import {
|
|
20
|
+
import { OidcState } from './oidc-state.model.js';
|
|
26
21
|
const tokenResponseSchema = object({
|
|
27
22
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
28
23
|
access_token: string(),
|
|
29
24
|
id_token: optional(string()),
|
|
30
25
|
token_type: string(),
|
|
31
|
-
refresh_token: optional(string())
|
|
26
|
+
refresh_token: optional(string()),
|
|
32
27
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
33
28
|
});
|
|
34
29
|
let OidcService = class OidcService {
|
|
35
|
-
oidcConfigurationService;
|
|
36
|
-
maybeOidcStateRepository;
|
|
37
|
-
httpClient;
|
|
30
|
+
oidcConfigurationService = inject(OidcConfigurationService);
|
|
31
|
+
maybeOidcStateRepository = injectRepository(OidcState);
|
|
32
|
+
httpClient = inject(HttpClient);
|
|
38
33
|
get oidcStateRepository() {
|
|
39
34
|
return assertDefinedPass(this.maybeOidcStateRepository, 'OidcStateRepository is not provided but required.');
|
|
40
35
|
}
|
|
41
|
-
constructor(oidcConfigurationService, oidcStateRepository, httpClient) {
|
|
42
|
-
this.oidcConfigurationService = oidcConfigurationService;
|
|
43
|
-
this.maybeOidcStateRepository = oidcStateRepository;
|
|
44
|
-
this.httpClient = httpClient;
|
|
45
|
-
}
|
|
46
36
|
async initAuthorization({ endpoint, clientId, clientSecret, scope, expiration, data }) {
|
|
47
37
|
const oidcConfiguration = await this.oidcConfigurationService.getConfiguration(endpoint);
|
|
48
|
-
const state = {
|
|
38
|
+
const state = await this.oidcStateRepository.insert({
|
|
49
39
|
value: getRandomString(64, Alphabet.LowerUpperCaseNumbers),
|
|
50
40
|
codeVerifier: getRandomString(64, Alphabet.LowerUpperCaseNumbers),
|
|
51
41
|
endpoint,
|
|
52
42
|
clientId,
|
|
53
43
|
clientSecret,
|
|
54
44
|
expiration: currentTimestamp() + expiration,
|
|
55
|
-
data
|
|
56
|
-
};
|
|
57
|
-
await this.oidcStateRepository.insert(state);
|
|
45
|
+
data,
|
|
46
|
+
});
|
|
58
47
|
const codeChallenge = await digest('SHA-256', state.codeVerifier).toBase64Url();
|
|
59
48
|
const result = {
|
|
60
49
|
authorizationEndpoint: oidcConfiguration.authorizationEndpoint,
|
|
@@ -62,21 +51,22 @@ let OidcService = class OidcService {
|
|
|
62
51
|
clientId,
|
|
63
52
|
scope,
|
|
64
53
|
codeChallenge,
|
|
65
|
-
codeChallengeMethod: 'S256'
|
|
54
|
+
codeChallengeMethod: 'S256',
|
|
66
55
|
};
|
|
67
56
|
return result;
|
|
68
57
|
}
|
|
69
58
|
async getState(state) {
|
|
70
|
-
return this.oidcStateRepository.
|
|
59
|
+
return await this.oidcStateRepository.loadByQuery({ value: state });
|
|
71
60
|
}
|
|
72
61
|
async deleteState(state) {
|
|
73
|
-
await this.oidcStateRepository.
|
|
62
|
+
await this.oidcStateRepository.deleteByQuery({ value: state });
|
|
74
63
|
}
|
|
75
64
|
async validateState(state) {
|
|
76
|
-
const oidcState = await this.oidcStateRepository.
|
|
65
|
+
const oidcState = await this.oidcStateRepository.tryLoadByQuery({ value: state });
|
|
77
66
|
if (isUndefined(oidcState)) {
|
|
78
|
-
throw new ForbiddenError('
|
|
67
|
+
throw new ForbiddenError('Invalid state code.');
|
|
79
68
|
}
|
|
69
|
+
await this.oidcStateRepository.deleteByQuery({ value: state });
|
|
80
70
|
return oidcState;
|
|
81
71
|
}
|
|
82
72
|
async getToken(parameters, additionalData) {
|
|
@@ -96,7 +86,7 @@ let OidcService = class OidcService {
|
|
|
96
86
|
code: parameters.code,
|
|
97
87
|
code_verifier: parameters.codeVerifier,
|
|
98
88
|
redirect_uri: parameters.redirectUri,
|
|
99
|
-
...additionalData
|
|
89
|
+
...additionalData,
|
|
100
90
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
101
91
|
};
|
|
102
92
|
break;
|
|
@@ -105,7 +95,7 @@ let OidcService = class OidcService {
|
|
|
105
95
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
106
96
|
grant_type: 'client_credentials',
|
|
107
97
|
scope: parameters.scope,
|
|
108
|
-
...additionalData
|
|
98
|
+
...additionalData,
|
|
109
99
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
110
100
|
};
|
|
111
101
|
break;
|
|
@@ -122,8 +112,8 @@ let OidcService = class OidcService {
|
|
|
122
112
|
authorization = {
|
|
123
113
|
basic: {
|
|
124
114
|
username: parameters.clientId,
|
|
125
|
-
password: parameters.clientSecret
|
|
126
|
-
}
|
|
115
|
+
password: parameters.clientSecret,
|
|
116
|
+
},
|
|
127
117
|
};
|
|
128
118
|
break;
|
|
129
119
|
default:
|
|
@@ -139,7 +129,7 @@ let OidcService = class OidcService {
|
|
|
139
129
|
client_id: clientId,
|
|
140
130
|
client_secret: clientSecret,
|
|
141
131
|
grant_type: 'refresh_token',
|
|
142
|
-
refresh_token: refreshToken
|
|
132
|
+
refresh_token: refreshToken,
|
|
143
133
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
144
134
|
};
|
|
145
135
|
const tokenResponse = await this.httpClient.postJson(oidcConfiguration.tokenEndpoint, { headers: { authorization: `Bearer ${refreshToken}` }, body: { form: formData } });
|
|
@@ -155,10 +145,7 @@ let OidcService = class OidcService {
|
|
|
155
145
|
}
|
|
156
146
|
};
|
|
157
147
|
OidcService = __decorate([
|
|
158
|
-
Singleton()
|
|
159
|
-
__param(1, Inject(OidcStateRepository)),
|
|
160
|
-
__param(1, Optional()),
|
|
161
|
-
__metadata("design:paramtypes", [OidcConfigurationService, Object, HttpClient])
|
|
148
|
+
Singleton()
|
|
162
149
|
], OidcService);
|
|
163
150
|
export { OidcService };
|
|
164
151
|
function parseTokenResponse(response) {
|
|
@@ -168,7 +155,7 @@ function parseTokenResponse(response) {
|
|
|
168
155
|
accessToken: access_token,
|
|
169
156
|
idToken: id_token,
|
|
170
157
|
refreshToken: refresh_token,
|
|
171
|
-
raw: response
|
|
158
|
+
raw: response,
|
|
172
159
|
};
|
|
173
160
|
return token;
|
|
174
161
|
}
|
package/orm/decorators.d.ts
CHANGED
|
@@ -57,6 +57,9 @@ export type OrmColumnReflectionData = {
|
|
|
57
57
|
targetColumn?: TargetColumnPaths<any>;
|
|
58
58
|
}[];
|
|
59
59
|
encrypted?: boolean;
|
|
60
|
+
expirationField?: {
|
|
61
|
+
mode: 'soft' | 'hard';
|
|
62
|
+
};
|
|
60
63
|
};
|
|
61
64
|
/**
|
|
62
65
|
* Reflection data for unique constraints.
|
|
@@ -121,7 +124,7 @@ export declare function createColumnDecorator(data?: OrmColumnReflectionData): P
|
|
|
121
124
|
* @param data - The ORM reflection data to add.
|
|
122
125
|
* @returns A class or property decorator.
|
|
123
126
|
*/
|
|
124
|
-
export declare function createTableAndColumnDecorator(data?: OrmColumnReflectionData):
|
|
127
|
+
export declare function createTableAndColumnDecorator(data?: OrmColumnReflectionData): PropertyDecorator & ClassDecorator;
|
|
125
128
|
/**
|
|
126
129
|
* Decorator to specify ORM column options.
|
|
127
130
|
* @param options - Column configuration options.
|
|
@@ -217,4 +220,10 @@ export declare function Index<T extends Entity | EntityWithoutMetadata = any>(op
|
|
|
217
220
|
* @returns A class decorator.
|
|
218
221
|
*/
|
|
219
222
|
export declare function Index<T extends Entity | EntityWithoutMetadata = any>(columns: Columns<T>, options?: IndexReflectionData<T>['options']): ClassDecorator;
|
|
223
|
+
/**
|
|
224
|
+
* Decorator to mark a column as an expiration field. This will be used to automatically delete records when expired.
|
|
225
|
+
* @param mode - Whether to delete soft or hard.
|
|
226
|
+
* @returns A property decorator.
|
|
227
|
+
*/
|
|
228
|
+
export declare function ExpiresAt(mode?: 'soft' | 'hard'): PropertyDecorator;
|
|
220
229
|
export {};
|
package/orm/decorators.js
CHANGED
|
@@ -145,3 +145,11 @@ export function Index(columnsOrOptions, options) {
|
|
|
145
145
|
}
|
|
146
146
|
return createColumnDecorator({ index: { options: columnsOrOptions } });
|
|
147
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* Decorator to mark a column as an expiration field. This will be used to automatically delete records when expired.
|
|
150
|
+
* @param mode - Whether to delete soft or hard.
|
|
151
|
+
* @returns A property decorator.
|
|
152
|
+
*/
|
|
153
|
+
export function ExpiresAt(mode = 'soft') {
|
|
154
|
+
return createColumnDecorator({ expirationField: { mode } });
|
|
155
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SQL } from 'drizzle-orm';
|
|
2
2
|
import type { PgColumn, PgInsertValue, PgUpdateSetSource } from 'drizzle-orm/pg-core';
|
|
3
|
-
import { type Resolvable, resolveArgumentType } from '../../injector/interfaces.js';
|
|
3
|
+
import { afterResolve, type Resolvable, resolveArgumentType } from '../../injector/interfaces.js';
|
|
4
4
|
import type { DeepPartial, OneOrMany, Paths, Type, UntaggedDeep } from '../../types/index.js';
|
|
5
5
|
import { Entity, type EntityMetadataAttributes, type EntityType, type EntityWithoutMetadata } from '../entity.js';
|
|
6
6
|
import type { Query } from '../query.js';
|
|
@@ -37,6 +37,8 @@ export declare class EntityRepository<T extends Entity | EntityWithoutMetadata =
|
|
|
37
37
|
*/
|
|
38
38
|
get table(): PgTableFromType<EntityType<T>>;
|
|
39
39
|
readonly [resolveArgumentType]: EntityType<T>;
|
|
40
|
+
[afterResolve](): void;
|
|
41
|
+
private expirationLoop;
|
|
40
42
|
protected getTransactionalContextData(): EntityRepositoryContext;
|
|
41
43
|
/**
|
|
42
44
|
* Loads a single entity by its ID.
|
package/orm/server/repository.js
CHANGED
|
@@ -4,20 +4,24 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { and, asc, count, desc, eq, inArray, isNull, isSQLWrapper, SQL, sql } from 'drizzle-orm';
|
|
7
|
+
import { and, asc, count, desc, eq, inArray, isNull, isSQLWrapper, lte, or, SQL, sql } from 'drizzle-orm';
|
|
8
8
|
import { match } from 'ts-pattern';
|
|
9
|
+
import { CancellationSignal } from '../../cancellation/token.js';
|
|
9
10
|
import { NotFoundError } from '../../errors/not-found.error.js';
|
|
10
11
|
import { Singleton } from '../../injector/decorators.js';
|
|
11
12
|
import { inject, injectArgument } from '../../injector/inject.js';
|
|
12
|
-
import { resolveArgumentType } from '../../injector/interfaces.js';
|
|
13
|
+
import { afterResolve, resolveArgumentType } from '../../injector/interfaces.js';
|
|
13
14
|
import { Schema } from '../../schema/schema.js';
|
|
14
15
|
import { distinct, toArray } from '../../utils/array/array.js';
|
|
15
16
|
import { mapAsync } from '../../utils/async-iterable-helpers/map.js';
|
|
16
17
|
import { toArrayAsync } from '../../utils/async-iterable-helpers/to-array.js';
|
|
17
18
|
import { importSymmetricKey } from '../../utils/cryptography.js';
|
|
18
19
|
import { fromDeepObjectEntries, fromEntries, objectEntries } from '../../utils/object/object.js';
|
|
19
|
-
import {
|
|
20
|
+
import { cancelableTimeout } from '../../utils/timing.js';
|
|
21
|
+
import { tryIgnoreAsync } from '../../utils/try-ignore.js';
|
|
22
|
+
import { assertDefined, assertDefinedPass, isArray, isDefined, isString, isUndefined } from '../../utils/type-guards.js';
|
|
20
23
|
import { typeExtends } from '../../utils/type/index.js';
|
|
24
|
+
import { millisecondsPerSecond } from '../../utils/units.js';
|
|
21
25
|
import { Entity } from '../entity.js';
|
|
22
26
|
import { TRANSACTION_TIMESTAMP } from '../sqls.js';
|
|
23
27
|
import { getColumnDefinitions, getColumnDefinitionsMap, getDrizzleTableFromType } from './drizzle/schema-converter.js';
|
|
@@ -37,6 +41,7 @@ const entityTypeToken = Symbol('EntityType');
|
|
|
37
41
|
let EntityRepository = class EntityRepository extends Transactional {
|
|
38
42
|
#context = isInTransactionalContext() ? getTransactionalContextData(this) : {};
|
|
39
43
|
#encryptionSecret = isInTransactionalContext() ? this.#context.encryptionSecret : inject(ENCRYPTION_SECRET, undefined, { optional: true });
|
|
44
|
+
#cancellationSignal = isInTransactionalContext() ? undefined : inject(CancellationSignal);
|
|
40
45
|
#transformContext = this.#context.transformContext;
|
|
41
46
|
type = this.#context.type ?? injectArgument(this, { optional: true }) ?? assertDefinedPass(this.constructor[entityTypeToken], 'Missing entity type.');
|
|
42
47
|
typeName = this.type.entityName ?? this.type.name;
|
|
@@ -51,6 +56,30 @@ let EntityRepository = class EntityRepository extends Transactional {
|
|
|
51
56
|
get table() {
|
|
52
57
|
return this.#table;
|
|
53
58
|
}
|
|
59
|
+
[afterResolve]() {
|
|
60
|
+
if (!this.isInTransaction) {
|
|
61
|
+
void this.expirationLoop();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async expirationLoop() {
|
|
65
|
+
const softExpirationColumns = this.#columnDefinitions.filter((column) => column.reflectionData?.expirationField?.mode == 'soft');
|
|
66
|
+
const hardExpirationColumns = this.#columnDefinitions.filter((column) => column.reflectionData?.expirationField?.mode == 'hard');
|
|
67
|
+
if ((softExpirationColumns.length + hardExpirationColumns.length) == 0) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const softDeletionQuery = or(...softExpirationColumns.map((column) => lte(this.getColumn(column), TRANSACTION_TIMESTAMP)));
|
|
71
|
+
const hardDeletionQuery = or(...hardExpirationColumns.map((column) => lte(this.getColumn(column), TRANSACTION_TIMESTAMP)));
|
|
72
|
+
assertDefined(this.#cancellationSignal);
|
|
73
|
+
while (this.#cancellationSignal.isUnset) {
|
|
74
|
+
if (isDefined(softDeletionQuery)) {
|
|
75
|
+
await tryIgnoreAsync(async () => await this.deleteManyByQuery(softDeletionQuery));
|
|
76
|
+
}
|
|
77
|
+
if (isDefined(hardDeletionQuery)) {
|
|
78
|
+
await tryIgnoreAsync(async () => await this.hardDeleteManyByQuery(hardDeletionQuery));
|
|
79
|
+
}
|
|
80
|
+
await cancelableTimeout(30 * millisecondsPerSecond, this.#cancellationSignal);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
54
83
|
getTransactionalContextData() {
|
|
55
84
|
const context = {
|
|
56
85
|
type: this.type,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tstdl/base",
|
|
3
|
-
"version": "0.92.
|
|
3
|
+
"version": "0.92.168",
|
|
4
4
|
"author": "Patrick Hein",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -11,27 +11,31 @@
|
|
|
11
11
|
"build:watch": "concurrently --raw --kill-others npm:tsc:watch npm:tsc-alias:watch",
|
|
12
12
|
"build:production": "rm -rf dist && npm run build && npm run build:production:copy-files",
|
|
13
13
|
"build:production:copy-files": "cp package.json eslint.config.js tsconfig.server.json dist/ && cp tsconfig.base.json dist/tsconfig.json && npm run copy:orm",
|
|
14
|
-
"build:dts": "tsc -p tsconfig.dts.json",
|
|
14
|
+
"build:dts": "rm -rf dist && tsc -p tsconfig.dts.json",
|
|
15
15
|
"build:docs": "typedoc",
|
|
16
16
|
"build:docs:watch": "typedoc --watch",
|
|
17
17
|
"lint": "eslint --cache source/",
|
|
18
|
-
"pub": "npm run build:production &&
|
|
18
|
+
"pub": "npm run build:production && npm run cleanup:dist && npm publish dist/",
|
|
19
19
|
"tsc:watch": "tsc --watch",
|
|
20
20
|
"tsc-alias:watch": "tsc-alias --watch",
|
|
21
|
-
"
|
|
21
|
+
"cleanup:dist": "rm -vf dist/test* && rm -vrf dist/tools/",
|
|
22
|
+
"generate:migration": "npm run generate:migration:document-management && npm run generate:migration:authentication && npm run generate:migration:mail && npm run generate:migration:queue && npm run generate:migration:key-value-store && npm run generate:migration:lock",
|
|
22
23
|
"generate:migration:document-management": "drizzle-kit generate --config dist/document-management/server/drizzle.config.js",
|
|
23
24
|
"generate:migration:authentication": "drizzle-kit generate --config dist/authentication/server/drizzle.config.js",
|
|
24
25
|
"generate:migration:mail": "drizzle-kit generate --config dist/mail/drizzle.config.js",
|
|
25
26
|
"generate:migration:queue": "drizzle-kit generate --config dist/queue/postgres/drizzle.config.js",
|
|
26
27
|
"generate:migration:key-value-store": "drizzle-kit generate --config dist/key-value-store/postgres/drizzle.config.js",
|
|
27
|
-
"generate:
|
|
28
|
+
"generate:migration:lock": "drizzle-kit generate --config dist/lock/postgres/drizzle.config.js",
|
|
29
|
+
"generate:readmes": "deno run --allow-run=code2prompt --allow-read --allow-write=source --allow-net=generativelanguage.googleapis.com --allow-env=GEMINI_API_KEY generate-readmes.ts",
|
|
28
30
|
"generate:readmes:new-only": "npm run generate:readmes -- --skip-existing",
|
|
29
|
-
"
|
|
31
|
+
"generate:context7-docs": "npm run build:dts && npm run cleanup:dist && ./scripts/generate-context7-docs.sh",
|
|
32
|
+
"copy:orm": "npm run copy:orm:document-management && npm run copy:orm:authentication && npm run copy:orm:mail && npm run copy:orm:queue && npm run copy:orm:key-value-store && npm run copy:orm:lock",
|
|
30
33
|
"copy:orm:document-management": "rm -rf ./dist/document-management/server/drizzle && cp -r ./source/document-management/server/drizzle ./dist/document-management/server/",
|
|
31
34
|
"copy:orm:authentication": "rm -rf ./dist/authentication/server/drizzle && cp -r ./source/authentication/server/drizzle ./dist/authentication/server/",
|
|
32
35
|
"copy:orm:mail": "rm -rf ./dist/mail/drizzle && cp -r ./source/mail/drizzle ./dist/mail/",
|
|
33
36
|
"copy:orm:queue": "rm -rf ./dist/queue/postgres/drizzle && cp -r ./source/queue/postgres/drizzle ./dist/queue/postgres/",
|
|
34
|
-
"copy:orm:key-value-store": "rm -rf ./dist/key-value-store/postgres/drizzle && cp -r ./source/key-value-store/postgres/drizzle ./dist/key-value-store/postgres/"
|
|
37
|
+
"copy:orm:key-value-store": "rm -rf ./dist/key-value-store/postgres/drizzle && cp -r ./source/key-value-store/postgres/drizzle ./dist/key-value-store/postgres/",
|
|
38
|
+
"copy:orm:lock": "rm -rf ./dist/lock/postgres/drizzle && cp -r ./source/lock/postgres/drizzle ./dist/lock/postgres/"
|
|
35
39
|
},
|
|
36
40
|
"exports": {
|
|
37
41
|
"./tsconfig.json": "./tsconfig.json",
|
|
@@ -40,7 +44,6 @@
|
|
|
40
44
|
"./environment": "./environment.js",
|
|
41
45
|
"./interfaces": "./interfaces.js",
|
|
42
46
|
"./polyfills": "./polyfills.js",
|
|
43
|
-
"./process-shutdown": "./process-shutdown.js",
|
|
44
47
|
"./supports": "./supports.js",
|
|
45
48
|
"./tokens": "./tokens.js",
|
|
46
49
|
"./ai": "./ai/index.js",
|
|
@@ -55,8 +58,6 @@
|
|
|
55
58
|
"./cookie": "./cookie/index.js",
|
|
56
59
|
"./css": "./css/index.js",
|
|
57
60
|
"./data-structures": "./data-structures/index.js",
|
|
58
|
-
"./database": "./database/index.js",
|
|
59
|
-
"./database/mongo": "./database/mongo/index.js",
|
|
60
61
|
"./decorators": "./decorators/index.js",
|
|
61
62
|
"./disposable": "./disposable/index.js",
|
|
62
63
|
"./distributed-loop": "./distributed-loop/index.js",
|
|
@@ -79,10 +80,9 @@
|
|
|
79
80
|
"./json-path": "./json-path/index.js",
|
|
80
81
|
"./jsx": "./jsx/index.js",
|
|
81
82
|
"./key-value-store": "./key-value-store/index.js",
|
|
82
|
-
"./key-value-store/mongo": "./key-value-store/mongo/index.js",
|
|
83
83
|
"./key-value-store/postgres": "./key-value-store/postgres/index.js",
|
|
84
84
|
"./lock": "./lock/index.js",
|
|
85
|
-
"./lock/
|
|
85
|
+
"./lock/postgres": "./lock/postgres/index.js",
|
|
86
86
|
"./lock/web": "./lock/web/index.js",
|
|
87
87
|
"./logger": "./logger/index.js",
|
|
88
88
|
"./mail": "./mail/index.js",
|
|
@@ -100,7 +100,6 @@
|
|
|
100
100
|
"./process": "./process/index.js",
|
|
101
101
|
"./promise": "./promise/index.js",
|
|
102
102
|
"./queue": "./queue/index.js",
|
|
103
|
-
"./queue/mongo": "./queue/mongo/index.js",
|
|
104
103
|
"./queue/postgres": "./queue/postgres/index.js",
|
|
105
104
|
"./random": "./random/index.js",
|
|
106
105
|
"./reflection": "./reflection/index.js",
|
|
@@ -109,9 +108,6 @@
|
|
|
109
108
|
"./rxjs-utils": "./rxjs-utils/index.js",
|
|
110
109
|
"./schema": "./schema/index.js",
|
|
111
110
|
"./schema/converters": "./schema/converters/index.js",
|
|
112
|
-
"./search-index": "./search-index/index.js",
|
|
113
|
-
"./search-index/elastic": "./search-index/elastic/index.js",
|
|
114
|
-
"./search-index/memory": "./search-index/memory/index.js",
|
|
115
111
|
"./serializer": "./serializer/index.js",
|
|
116
112
|
"./serializer/handlers": "./serializer/handlers/index.js",
|
|
117
113
|
"./signals": "./signals/index.js",
|
|
@@ -123,8 +119,6 @@
|
|
|
123
119
|
"./templates/resolvers": "./templates/resolvers/index.js",
|
|
124
120
|
"./templates/types": "./templates/types/index.js",
|
|
125
121
|
"./text": "./text/index.js",
|
|
126
|
-
"./theme": "./theme/index.js",
|
|
127
|
-
"./theme/adapters": "./theme/adapters/index.js",
|
|
128
122
|
"./threading": "./threading/index.js",
|
|
129
123
|
"./types": "./types/index.js",
|
|
130
124
|
"./utils": "./utils/index.js",
|
|
@@ -148,28 +142,25 @@
|
|
|
148
142
|
"type-fest": "4.37"
|
|
149
143
|
},
|
|
150
144
|
"peerDependencies": {
|
|
151
|
-
"@elastic/elasticsearch": "^9.1",
|
|
152
145
|
"@google-cloud/storage": "^7.17",
|
|
153
|
-
"@google/genai": "^1.
|
|
146
|
+
"@google/genai": "^1.17",
|
|
154
147
|
"@tstdl/angular": "^0.92",
|
|
155
148
|
"@zxcvbn-ts/core": "^3.0",
|
|
156
149
|
"@zxcvbn-ts/language-common": "^3.0",
|
|
157
150
|
"@zxcvbn-ts/language-de": "^3.0",
|
|
158
151
|
"@zxcvbn-ts/language-en": "^3.0",
|
|
159
|
-
"chroma-js": "^2.6",
|
|
160
152
|
"drizzle-orm": "^0.44",
|
|
161
153
|
"file-type": "^21.0",
|
|
162
154
|
"handlebars": "^4.7",
|
|
163
155
|
"minio": "^8.0",
|
|
164
156
|
"mjml": "^4.15",
|
|
165
|
-
"mongodb": "^6.18",
|
|
166
157
|
"nodemailer": "^7.0",
|
|
167
158
|
"pg": "^8.16",
|
|
168
159
|
"playwright": "^1.55",
|
|
169
160
|
"preact": "^10.27",
|
|
170
161
|
"preact-render-to-string": "^6.6",
|
|
171
162
|
"sharp": "^0.34",
|
|
172
|
-
"undici": "^7.
|
|
163
|
+
"undici": "^7.15",
|
|
173
164
|
"urlpattern-polyfill": "^10.1"
|
|
174
165
|
},
|
|
175
166
|
"peerDependenciesMeta": {
|
|
@@ -178,8 +169,7 @@
|
|
|
178
169
|
}
|
|
179
170
|
},
|
|
180
171
|
"devDependencies": {
|
|
181
|
-
"@stylistic/eslint-plugin": "5.
|
|
182
|
-
"@types/chroma-js": "2.4",
|
|
172
|
+
"@stylistic/eslint-plugin": "5.3",
|
|
183
173
|
"@types/koa__router": "12.0",
|
|
184
174
|
"@types/luxon": "3.7",
|
|
185
175
|
"@types/minio": "7.1",
|
|
@@ -189,15 +179,14 @@
|
|
|
189
179
|
"@types/pg": "8.15",
|
|
190
180
|
"concurrently": "9.2",
|
|
191
181
|
"drizzle-kit": "0.31",
|
|
192
|
-
"eslint": "9.
|
|
182
|
+
"eslint": "9.34",
|
|
193
183
|
"globals": "16.3",
|
|
194
|
-
"repomix": "1.3",
|
|
195
184
|
"tsc-alias": "1.8",
|
|
196
185
|
"typedoc-github-wiki-theme": "2.1",
|
|
197
186
|
"typedoc-plugin-markdown": "4.8",
|
|
198
187
|
"typedoc-plugin-missing-exports": "4.1",
|
|
199
188
|
"typescript": "5.9",
|
|
200
|
-
"typescript-eslint": "8.
|
|
189
|
+
"typescript-eslint": "8.42"
|
|
201
190
|
},
|
|
202
191
|
"overrides": {
|
|
203
192
|
"drizzle-kit": {
|
package/pdf/pdf.service.js
CHANGED
|
@@ -24,7 +24,7 @@ import { finalizeStream } from '../utils/stream/finalize-stream.js';
|
|
|
24
24
|
import { readableStreamFromPromise } from '../utils/stream/from-promise.js';
|
|
25
25
|
import { readBinaryStream } from '../utils/stream/stream-reader.js';
|
|
26
26
|
import { timeout } from '../utils/timing.js';
|
|
27
|
-
import { isDefined } from '../utils/type-guards.js';
|
|
27
|
+
import { isDefined, isNumber } from '../utils/type-guards.js';
|
|
28
28
|
export class PdfServiceRenderOptions extends PdfRenderOptions {
|
|
29
29
|
browserContext;
|
|
30
30
|
locale;
|
|
@@ -81,7 +81,7 @@ let PdfService = class PdfService {
|
|
|
81
81
|
* @returns pdf stream
|
|
82
82
|
*/
|
|
83
83
|
renderHtmlStream(html, options) {
|
|
84
|
-
return this.renderStream(async (page) => page.setContent(html), options);
|
|
84
|
+
return this.renderStream(async (page) => await page.setContent(html), options);
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
87
87
|
* Renders HTML to pdf
|
|
@@ -91,7 +91,7 @@ let PdfService = class PdfService {
|
|
|
91
91
|
*/
|
|
92
92
|
async renderHtml(html, options) {
|
|
93
93
|
const stream = this.renderHtmlStream(html, options);
|
|
94
|
-
return readBinaryStream(stream);
|
|
94
|
+
return await readBinaryStream(stream);
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
97
|
* Renders an url to pdf stream
|
|
@@ -112,7 +112,7 @@ let PdfService = class PdfService {
|
|
|
112
112
|
*/
|
|
113
113
|
async renderUrl(url, options) {
|
|
114
114
|
const stream = this.renderUrlStream(url, options);
|
|
115
|
-
return readBinaryStream(stream);
|
|
115
|
+
return await readBinaryStream(stream);
|
|
116
116
|
}
|
|
117
117
|
/**
|
|
118
118
|
* Renders a template to pdf
|
|
@@ -137,15 +137,15 @@ let PdfService = class PdfService {
|
|
|
137
137
|
*/
|
|
138
138
|
async renderTemplate(keyOrTemplate, templateContext, options) {
|
|
139
139
|
const stream = this.renderTemplateStream(keyOrTemplate, templateContext, options);
|
|
140
|
-
return readBinaryStream(stream);
|
|
140
|
+
return await readBinaryStream(stream);
|
|
141
141
|
}
|
|
142
142
|
renderStream(handler, options = {}) {
|
|
143
143
|
return readableStreamFromPromise(async () => {
|
|
144
144
|
const context = options.browserContext ?? await this.browserController.newContext({ locale: options.locale ?? this.defaultLocale });
|
|
145
145
|
const page = await context.newPage();
|
|
146
146
|
if (isDefined(options.log) && (options.log != false)) {
|
|
147
|
-
const level = (options.log
|
|
148
|
-
const logger = this.logger.fork({ level
|
|
147
|
+
const level = isNumber(options.log) ? options.log : LogLevel.Trace;
|
|
148
|
+
const logger = this.logger.fork('PAGE', { level });
|
|
149
149
|
page.attachLogger(logger);
|
|
150
150
|
}
|
|
151
151
|
const optionsFromHandler = await handler(page);
|
|
@@ -165,7 +165,7 @@ let PdfService = class PdfService {
|
|
|
165
165
|
return finalizeStream(pdfStream, {
|
|
166
166
|
beforeDone: close,
|
|
167
167
|
beforeCancel: close,
|
|
168
|
-
error: close
|
|
168
|
+
error: close,
|
|
169
169
|
});
|
|
170
170
|
});
|
|
171
171
|
}
|
|
@@ -178,6 +178,6 @@ export function pdfTemplate(name, fields, options) {
|
|
|
178
178
|
return {
|
|
179
179
|
name,
|
|
180
180
|
fields,
|
|
181
|
-
options
|
|
181
|
+
options,
|
|
182
182
|
};
|
|
183
183
|
}
|
package/pool/pool.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import type { AsyncDisposable } from '../disposable/disposable.js';
|
|
2
|
-
import { disposeAsync } from '../disposable/disposable.js';
|
|
3
1
|
import type { Logger } from '../logger/index.js';
|
|
4
2
|
export type PoolOptions = {
|
|
5
3
|
/**
|
|
@@ -45,5 +43,5 @@ export declare class Pool<T extends object> implements AsyncDisposable {
|
|
|
45
43
|
use<R>(handler: (instance: T) => R | Promise<R>, options?: PoolUseOptions): Promise<R>;
|
|
46
44
|
disposeInstance(instance: T): Promise<void>;
|
|
47
45
|
dispose(): Promise<void>;
|
|
48
|
-
[
|
|
46
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
49
47
|
}
|
package/pool/pool.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ArrayList } from '../data-structures/array-list.js';
|
|
2
2
|
import { SetCollection } from '../data-structures/set-collection.js';
|
|
3
|
-
import { disposeAsync } from '../disposable/disposable.js';
|
|
4
3
|
import { hardwareConcurrency } from '../environment.js';
|
|
5
4
|
import { isDefined } from '../utils/type-guards.js';
|
|
6
5
|
export class Pool {
|
|
@@ -57,7 +56,7 @@ export class Pool {
|
|
|
57
56
|
while (!this.freeInstances.hasItems) {
|
|
58
57
|
await this.freeInstances.$onItems;
|
|
59
58
|
}
|
|
60
|
-
return this.get();
|
|
59
|
+
return await this.get();
|
|
61
60
|
}
|
|
62
61
|
async release(instance) {
|
|
63
62
|
if (this.freeInstances.includes(instance)) {
|
|
@@ -110,9 +109,9 @@ export class Pool {
|
|
|
110
109
|
await this.disposer(instance);
|
|
111
110
|
}
|
|
112
111
|
async dispose() {
|
|
113
|
-
|
|
112
|
+
await this[Symbol.asyncDispose]();
|
|
114
113
|
}
|
|
115
|
-
async [
|
|
114
|
+
async [Symbol.asyncDispose]() {
|
|
116
115
|
this.disposed = true;
|
|
117
116
|
if (this.length == 0) {
|
|
118
117
|
return;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { EntityWithoutMetadata } from '../../orm/
|
|
2
|
-
import { Integer, Json, Timestamp } from '../../orm/index.js';
|
|
1
|
+
import { EntityWithoutMetadata, Integer, Json, Timestamp } from '../../orm/index.js';
|
|
3
2
|
import type { ObjectLiteral } from '../../types/index.js';
|
|
4
3
|
import type { Job } from '../queue.js';
|
|
5
4
|
export declare class PostgresJob<T extends ObjectLiteral = ObjectLiteral> extends EntityWithoutMetadata implements Job<T> {
|