@bett3r-dev/pv3-types 1.0.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +305 -0
- package/build/adminPlugin.d.ts +24 -0
- package/build/adminPlugin.d.ts.map +1 -0
- package/build/{eventsourcing/utils.js → adminPlugin.js} +1 -1
- package/build/adminPlugin.js.map +1 -0
- package/build/aggregateSchema.d.ts +94 -0
- package/build/aggregateSchema.d.ts.map +1 -0
- package/build/aggregateSchema.js +287 -0
- package/build/aggregateSchema.js.map +1 -0
- package/build/authentication.d.ts +179 -78
- package/build/authentication.d.ts.map +1 -1
- package/build/authentication.js +62 -19
- package/build/authentication.js.map +1 -1
- package/build/cache.d.ts +50 -4
- package/build/cache.d.ts.map +1 -1
- package/build/clusterAdministration.d.ts +712 -225
- package/build/clusterAdministration.d.ts.map +1 -1
- package/build/clusterAdministration.js +175 -52
- package/build/clusterAdministration.js.map +1 -1
- package/build/configuration.d.ts +26 -5
- package/build/configuration.d.ts.map +1 -1
- package/build/database.d.ts +240 -56
- package/build/database.d.ts.map +1 -1
- package/build/database.js +102 -20
- package/build/database.js.map +1 -1
- package/build/endpoints.d.ts +141 -41
- package/build/endpoints.d.ts.map +1 -1
- package/build/endpoints.js +50 -26
- package/build/endpoints.js.map +1 -1
- package/build/errors.d.ts +166 -0
- package/build/errors.d.ts.map +1 -0
- package/build/errors.js +276 -0
- package/build/errors.js.map +1 -0
- package/build/evenstore.d.ts +47 -7
- package/build/evenstore.d.ts.map +1 -1
- package/build/eventsourcing/aggregateBuilder.d.ts +17 -8
- package/build/eventsourcing/aggregateBuilder.d.ts.map +1 -1
- package/build/eventsourcing/commandBuilder.d.ts +20 -13
- package/build/eventsourcing/commandBuilder.d.ts.map +1 -1
- package/build/eventsourcing/commandHandlers.d.ts +155 -33
- package/build/eventsourcing/commandHandlers.d.ts.map +1 -1
- package/build/eventsourcing/commandHandlers.js +62 -14
- package/build/eventsourcing/commandHandlers.js.map +1 -1
- package/build/eventsourcing/eventHandlers.d.ts +173 -44
- package/build/eventsourcing/eventHandlers.d.ts.map +1 -1
- package/build/eventsourcing/eventHandlers.js +29 -21
- package/build/eventsourcing/eventHandlers.js.map +1 -1
- package/build/eventsourcing/eventHandlersBuilder.d.ts +18 -12
- package/build/eventsourcing/eventHandlersBuilder.d.ts.map +1 -1
- package/build/eventsourcing/eventHandlersBuilder.js.map +1 -1
- package/build/eventsourcing/eventsourcing.types.d.ts +322 -0
- package/build/eventsourcing/eventsourcing.types.d.ts.map +1 -0
- package/build/eventsourcing/eventsourcing.types.js +26 -0
- package/build/eventsourcing/eventsourcing.types.js.map +1 -0
- package/build/eventsourcing/externalSystemBuilder.d.ts +8 -7
- package/build/eventsourcing/externalSystemBuilder.d.ts.map +1 -1
- package/build/eventsourcing/index.d.ts +2 -378
- package/build/eventsourcing/index.d.ts.map +1 -1
- package/build/eventsourcing/index.js +2 -23
- package/build/eventsourcing/index.js.map +1 -1
- package/build/eventsourcing/invariants.d.ts +34 -10
- package/build/eventsourcing/invariants.d.ts.map +1 -1
- package/build/eventsourcing/shapeChangeForSubscriber.d.ts +33 -0
- package/build/eventsourcing/shapeChangeForSubscriber.d.ts.map +1 -0
- package/build/eventsourcing/shapeChangeForSubscriber.js +47 -0
- package/build/eventsourcing/shapeChangeForSubscriber.js.map +1 -0
- package/build/index.d.ts +6 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +6 -1
- package/build/index.js.map +1 -1
- package/build/infrastructure.d.ts +9 -1
- package/build/infrastructure.d.ts.map +1 -1
- package/build/infrastructure.js +33 -1
- package/build/infrastructure.js.map +1 -1
- package/build/livenessWatchdog.d.ts +28 -0
- package/build/livenessWatchdog.d.ts.map +1 -0
- package/build/livenessWatchdog.js +43 -0
- package/build/livenessWatchdog.js.map +1 -0
- package/build/logger.d.ts +8 -9
- package/build/logger.d.ts.map +1 -1
- package/build/logger.js +18 -6
- package/build/logger.js.map +1 -1
- package/build/outboxManager.d.ts +858 -14
- package/build/outboxManager.d.ts.map +1 -1
- package/build/outboxManager.js +173 -15
- package/build/outboxManager.js.map +1 -1
- package/build/permissions.d.ts +47 -0
- package/build/permissions.d.ts.map +1 -0
- package/build/permissions.js +3 -0
- package/build/permissions.js.map +1 -0
- package/build/ports.d.ts +10 -10
- package/build/ports.d.ts.map +1 -1
- package/build/routesAuth.d.ts +17 -25
- package/build/routesAuth.d.ts.map +1 -1
- package/build/routesAuth.js +4 -14
- package/build/routesAuth.js.map +1 -1
- package/build/typedEventEmitter.d.ts +7 -13
- package/build/typedEventEmitter.d.ts.map +1 -1
- package/build/typedEventEmitter.js +2 -2
- package/build/typedEventEmitter.js.map +1 -1
- package/build/userSession.d.ts +8 -0
- package/build/userSession.d.ts.map +1 -0
- package/build/userSession.js +3 -0
- package/build/userSession.js.map +1 -0
- package/package.json +22 -7
- package/build/eventsourcing/utils.d.ts +0 -4
- package/build/eventsourcing/utils.d.ts.map +0 -1
- package/build/eventsourcing/utils.js.map +0 -1
- package/build/validation.d.ts +0 -64
- package/build/validation.d.ts.map +0 -1
- package/build/validation.js +0 -57
- package/build/validation.js.map +0 -1
- package/src/authentication.ts +0 -273
- package/src/cache.ts +0 -109
- package/src/clusterAdministration.ts +0 -216
- package/src/configuration.ts +0 -71
- package/src/database.ts +0 -157
- package/src/endpoints.ts +0 -198
- package/src/evenstore.ts +0 -27
- package/src/eventsourcing/aggregateBuilder.ts +0 -11
- package/src/eventsourcing/commandBuilder.ts +0 -64
- package/src/eventsourcing/commandHandlers.ts +0 -137
- package/src/eventsourcing/eventHandlers.ts +0 -118
- package/src/eventsourcing/eventHandlersBuilder.ts +0 -42
- package/src/eventsourcing/externalSystemBuilder.ts +0 -20
- package/src/eventsourcing/index.ts +0 -111
- package/src/eventsourcing/invariants.ts +0 -27
- package/src/eventsourcing/utils.ts +0 -4
- package/src/index.ts +0 -15
- package/src/infrastructure.ts +0 -41
- package/src/logger.ts +0 -45
- package/src/outboxManager.ts +0 -36
- package/src/ports.ts +0 -42
- package/src/routesAuth.ts +0 -58
- package/src/typedEventEmitter.ts +0 -73
- package/src/validation.ts +0 -89
- package/tsconfig.json +0 -15
|
@@ -1,44 +1,68 @@
|
|
|
1
1
|
import { ObjectSchema } from '@bett3r-dev/jsonschema-definer';
|
|
2
|
-
import {
|
|
2
|
+
import { Artifact } from '.';
|
|
3
3
|
import { Collection, CollectionQueryParams, DatabaseChange, DatabasePort, Document } from '../database';
|
|
4
4
|
import { EndpointActionParams, RequestObject, ResponseObject } from '../endpoints';
|
|
5
5
|
import { CommittedEvent, EventFactory, GetMessageType } from '../eventsourcing';
|
|
6
6
|
import { LoggerType } from '../logger';
|
|
7
|
-
import {
|
|
7
|
+
import { PermissionString } from '../permissions';
|
|
8
8
|
import { TypedEventEmitter } from '../typedEventEmitter';
|
|
9
|
-
|
|
9
|
+
import { AppError } from '../errors';
|
|
10
|
+
import { System } from './commandHandlers';
|
|
11
|
+
export declare const ReadmodelDefaultParamsSchema: ObjectSchema<{
|
|
10
12
|
id?: string | undefined;
|
|
11
13
|
}, true>;
|
|
12
|
-
export declare const
|
|
13
|
-
limit?:
|
|
14
|
-
after?: string | undefined;
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
export declare const ReadmodelDefaultQuerySchema: ObjectSchema<{
|
|
15
|
+
limit?: number | undefined;
|
|
16
|
+
after?: string | number | undefined;
|
|
17
|
+
byDistinctField?: string | undefined;
|
|
18
|
+
offset?: number | undefined;
|
|
19
|
+
sort?: {
|
|
20
|
+
field: string;
|
|
21
|
+
direction: "asc" | "desc";
|
|
22
|
+
}[] | undefined;
|
|
17
23
|
select?: string[] | undefined;
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
filter?: Partial<import("../database").CollectionFilterOR<any> & import("../database").CollectionFilterAND<any> & import("../database").CollectionFilterInstance<any>>[] | undefined;
|
|
25
|
+
aggregate?: {
|
|
26
|
+
groupBy: string[];
|
|
27
|
+
aggregates: {
|
|
28
|
+
fn: "avg" | "count" | "max" | "min" | "sum";
|
|
29
|
+
field?: string | undefined;
|
|
30
|
+
as: string;
|
|
31
|
+
}[];
|
|
32
|
+
filter?: Partial<import("../database").CollectionFilterOR<any> & import("../database").CollectionFilterAND<any> & import("../database").CollectionFilterInstance<any>>[] | undefined;
|
|
33
|
+
maxGroups?: number | undefined;
|
|
34
|
+
maxGroupSize?: number | undefined;
|
|
35
|
+
} | undefined;
|
|
20
36
|
}, true>;
|
|
21
|
-
export type
|
|
22
|
-
export type
|
|
23
|
-
export declare const defaultParamsSchemas: {
|
|
24
|
-
params: ObjectSchema<{
|
|
25
|
-
id?: string | undefined;
|
|
26
|
-
}, true>;
|
|
27
|
-
};
|
|
37
|
+
export type ReadmodelDefaultQuery = typeof ReadmodelDefaultQuerySchema.type;
|
|
38
|
+
export type ReadmodelDefaultParams = typeof ReadmodelDefaultParamsSchema.type;
|
|
28
39
|
export declare const defaultQuerySchemas: {
|
|
29
40
|
query: ObjectSchema<{
|
|
30
|
-
limit?:
|
|
31
|
-
after?: string | undefined;
|
|
32
|
-
|
|
33
|
-
|
|
41
|
+
limit?: number | undefined;
|
|
42
|
+
after?: string | number | undefined;
|
|
43
|
+
byDistinctField?: string | undefined;
|
|
44
|
+
offset?: number | undefined;
|
|
45
|
+
sort?: {
|
|
46
|
+
field: string;
|
|
47
|
+
direction: "asc" | "desc";
|
|
48
|
+
}[] | undefined;
|
|
34
49
|
select?: string[] | undefined;
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
filter?: Partial<import("../database").CollectionFilterOR<any> & import("../database").CollectionFilterAND<any> & import("../database").CollectionFilterInstance<any>>[] | undefined;
|
|
51
|
+
aggregate?: {
|
|
52
|
+
groupBy: string[];
|
|
53
|
+
aggregates: {
|
|
54
|
+
fn: "avg" | "count" | "max" | "min" | "sum";
|
|
55
|
+
field?: string | undefined;
|
|
56
|
+
as: string;
|
|
57
|
+
}[];
|
|
58
|
+
filter?: Partial<import("../database").CollectionFilterOR<any> & import("../database").CollectionFilterAND<any> & import("../database").CollectionFilterInstance<any>>[] | undefined;
|
|
59
|
+
maxGroups?: number | undefined;
|
|
60
|
+
maxGroupSize?: number | undefined;
|
|
61
|
+
} | undefined;
|
|
37
62
|
}, true>;
|
|
38
63
|
};
|
|
39
|
-
export type EventHandler<EVENTS extends Record<string, EventFactory> = any> = {
|
|
40
|
-
|
|
41
|
-
events: EVENTS;
|
|
64
|
+
export type EventHandler<EVENTS extends Record<string, EventFactory> = any> = Artifact & {
|
|
65
|
+
events?: EVENTS;
|
|
42
66
|
concurrency?: number;
|
|
43
67
|
errorHandlers?: {
|
|
44
68
|
[Name in keyof EVENTS]?: HandlerExecutionErrorType<CommittedEvent<GetMessageType<EVENTS[Name]>>>;
|
|
@@ -49,54 +73,159 @@ export type PolicyResponse = {
|
|
|
49
73
|
id?: string;
|
|
50
74
|
data?: any;
|
|
51
75
|
};
|
|
52
|
-
export type HandlerExecutionErrorType<EVENT extends CommittedEvent = CommittedEvent> = (error:
|
|
76
|
+
export type HandlerExecutionErrorType<EVENT extends CommittedEvent = CommittedEvent> = (error: AppError, event: EVENT) => Promise<unknown>;
|
|
53
77
|
export type Policy<CommandHandler extends System = any, Events extends Record<string, EventFactory> = any> = EventHandler<Events> & {
|
|
54
78
|
commandHandler?: CommandHandler;
|
|
79
|
+
linkedTo?: string[];
|
|
80
|
+
isStandalone?: boolean;
|
|
55
81
|
eventHandlers: {
|
|
56
82
|
[Name in keyof Events]: (event: CommittedEvent<GetMessageType<Events[Name]>>) => Promise<PolicyResponse | void>;
|
|
57
83
|
};
|
|
58
84
|
};
|
|
59
85
|
export type QueryParamsTranslator<Model extends Document, Params, Query> = (schema: ObjectSchema<Model>, params: Pick<EndpointActionParams<any, Query, Params>, 'params' | 'query'>) => CollectionQueryParams<Model>;
|
|
60
|
-
export type QueryHandler<MODEL extends Document = any, PARAMS = any, QUERY = any> = (repository: Collection<MODEL>, params: CollectionQueryParams<MODEL> & {
|
|
61
|
-
params: EndpointActionParams<any, QUERY, PARAMS>;
|
|
62
|
-
}) => Promise<
|
|
86
|
+
export type QueryHandler<USER = any, MODEL extends Document = any, PARAMS = any, QUERY = any, RETURN_TYPE extends Document = any> = (repository: Collection<MODEL>, params: CollectionQueryParams<MODEL> & {
|
|
87
|
+
params: EndpointActionParams<any, QUERY, PARAMS, USER>;
|
|
88
|
+
}, query: Query, readmodel: Readmodel, readmodelName: string) => Promise<RETURN_TYPE | null | undefined>;
|
|
63
89
|
export type QueryTransformer<MODEL extends Document = any, PARAMS = any, QUERY = any> = (projectionParams: CollectionQueryParams<MODEL>, params: EndpointActionParams<any, QUERY, PARAMS>) => Promise<CollectionQueryParams<MODEL>> | CollectionQueryParams<MODEL>;
|
|
64
|
-
|
|
65
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Reshapes a readmodel query's response for the caller being served.
|
|
92
|
+
*
|
|
93
|
+
* CONTRACT — a formatter MUST be a PURE, SYNCHRONOUS function of ( data, caller ).
|
|
94
|
+
*
|
|
95
|
+
* It is applied on two paths with one signature: once per request on the query path,
|
|
96
|
+
* and once per matching SUBSCRIBER on the realtime delta path. Because it runs per
|
|
97
|
+
* subscriber rather than per change, side effects or non-determinism change
|
|
98
|
+
* behaviour with subscriber count.
|
|
99
|
+
*
|
|
100
|
+
* Async is not supported: the query path does not await it and the realtime fan-out
|
|
101
|
+
* sends synchronously. Do heavy or asynchronous work in a `transformer`, which runs
|
|
102
|
+
* once per request and receives the full request params.
|
|
103
|
+
*
|
|
104
|
+
* `caller` on the query path is the live request. On the delta path it is the
|
|
105
|
+
* request that OPENED the subscription, captured once and never refreshed.
|
|
106
|
+
*
|
|
107
|
+
* ⚠ `caller` CAN BE `undefined` ON THE DELTA PATH. A subscription's `caller` is an
|
|
108
|
+
* optional field on the subscription record (`startSubscription`/`createSubscription`
|
|
109
|
+
* can be called without one). The delta fan-out ALWAYS routes through this formatter
|
|
110
|
+
* regardless — it never skips shaping just because a caller is unknown — so a
|
|
111
|
+
* formatter that makes authorization-sensitive decisions (e.g. redacting a field)
|
|
112
|
+
* MUST treat an undefined `caller` (or an undefined `caller.context.user`) as the
|
|
113
|
+
* least-privileged case and shape accordingly. Do not assume `caller` is always
|
|
114
|
+
* present; do not let its absence mean "return the data unshaped".
|
|
115
|
+
*
|
|
116
|
+
* ⚠ `data` DIFFERS IN SHAPE BETWEEN THE TWO PATHS. On the query path it is whatever
|
|
117
|
+
* the query handler returned — an ARRAY for a default list query, a single document
|
|
118
|
+
* for a by-id or synthetic single-document query. On the delta path it is ALWAYS a
|
|
119
|
+
* SINGLE document (one `insert`/`update`/`delete` row; `shapeChangeForSubscriber`
|
|
120
|
+
* applies the formatter to `data` and `previous` separately). One signature serves
|
|
121
|
+
* both, so a formatter that assumes one shape is silently wrong on the other:
|
|
122
|
+
* `.map()` on a delta throws, and reading a field off an array yields `undefined`.
|
|
123
|
+
* Branch on `Array.isArray( data )` unless the query provably returns one shape.
|
|
124
|
+
*/
|
|
125
|
+
export type QueryResponseFormatter<MODEL extends Document = any> = (data: MODEL | MODEL[], caller: EndpointActionParams | undefined) => MODEL | MODEL[];
|
|
126
|
+
export type ReadmodelSubscriptionCloseEmitterEvents = {
|
|
127
|
+
close: [id: string];
|
|
128
|
+
};
|
|
129
|
+
export type ReadmodelSubscriptionMessage<T = any> = {
|
|
130
|
+
type?: string;
|
|
131
|
+
ref?: string;
|
|
132
|
+
data: T;
|
|
66
133
|
};
|
|
67
|
-
export type ReadmodelSubscriptionManagerType<Model extends Document = any> = {
|
|
134
|
+
export type ReadmodelSubscriptionManagerType<Model extends Document = any, OUTPUT_TYPE extends Document = any> = {
|
|
68
135
|
type: string;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
136
|
+
accountIdField?: string;
|
|
137
|
+
startSubscription: (projectionParams: CollectionQueryParams<Model>, req: RequestObject, res: ResponseObject, user?: any, readmodelName?: string, caller?: EndpointActionParams) => string | void;
|
|
138
|
+
notifySubscriptions: (logger: LoggerType, collection: string, readmodelName: string, responseFormatter?: QueryResponseFormatter) => (change: DatabaseChange<OUTPUT_TYPE>) => void;
|
|
139
|
+
readModelSubscriptionCloseEmitter: TypedEventEmitter<ReadmodelSubscriptionCloseEmitterEvents>;
|
|
140
|
+
send: (id: string, message: ReadmodelSubscriptionMessage<OUTPUT_TYPE>) => void;
|
|
141
|
+
closeSubscription: (id: string) => void;
|
|
73
142
|
};
|
|
74
|
-
export type Query<MODEL extends Document = any, PARAMS extends Record<string, any> = any, QUERY extends Record<string, any> = any> = {
|
|
143
|
+
export type Query<USER = any, MODEL extends Document = any, PARAMS extends Record<string, any> = any, QUERY extends Record<string, any> = any, RETURN_TYPE extends Document = any, SUBSCRIPTION_OUTPUT_TYPE extends Document = any> = {
|
|
75
144
|
route?: string;
|
|
76
145
|
protocol?: 'http';
|
|
77
146
|
description?: string;
|
|
147
|
+
/** Required permissions for this query. If omitted, defaults to superAdmin-only access (secure by default). */
|
|
148
|
+
permissions?: PermissionString[];
|
|
149
|
+
/**
|
|
150
|
+
* HTTP exposure of this query's route, surfaced as `x-visibility` on the
|
|
151
|
+
* generated OpenAPI operation. Defaults to `'private'`
|
|
152
|
+
* ({@link registerEndpoint}), i.e. the caller must be authenticated.
|
|
153
|
+
*
|
|
154
|
+
* This is the query-side counterpart of `CommandBuilder.withVisibility`, and
|
|
155
|
+
* it exists because there was NO way to say it here. A readmodel query whose
|
|
156
|
+
* authority lives in its own `transformers` — a signed link token, a capability
|
|
157
|
+
* the handler checks itself — could not tell the gateway so, and the only
|
|
158
|
+
* lever anyone had was to drop the artifact's `subdomain`. That does NOT mean
|
|
159
|
+
* "public": a subdomain-less route is ADMIN-ONLY at the gateway, so the route
|
|
160
|
+
* 403s `Admin role required` for the very callers it was written for, and the
|
|
161
|
+
* handler's own check never runs. Set `visibility: 'public'` when the handler
|
|
162
|
+
* (or a transformer) is the authority.
|
|
163
|
+
*/
|
|
164
|
+
visibility?: 'public' | 'private' | 'internal';
|
|
78
165
|
schemas?: {
|
|
79
166
|
query?: ObjectSchema<QUERY>;
|
|
80
167
|
params?: ObjectSchema<PARAMS>;
|
|
168
|
+
response?: ObjectSchema<RETURN_TYPE>;
|
|
169
|
+
responseQuerySchemaRef?: string;
|
|
81
170
|
};
|
|
171
|
+
/**
|
|
172
|
+
* Translates the endpoint query params into database query params.
|
|
173
|
+
* @param schema - The schema of the model.
|
|
174
|
+
* @param params - The params.
|
|
175
|
+
* @returns The translated params.
|
|
176
|
+
*/
|
|
82
177
|
translator?: QueryParamsTranslator<MODEL, PARAMS, QUERY>;
|
|
83
|
-
subscriptions?: ReadmodelSubscriptionManagerType
|
|
178
|
+
subscriptions?: (ReadmodelSubscriptionManagerType<MODEL, MODEL> | {
|
|
179
|
+
notificationSchema?: ObjectSchema<SUBSCRIPTION_OUTPUT_TYPE>;
|
|
180
|
+
/**
|
|
181
|
+
* Override which collection the subscription watches for changes. Defaults
|
|
182
|
+
* to the readmodel's primary collection. Useful when a readmodel owns
|
|
183
|
+
* multiple collections (one projection feeds several query shapes) and
|
|
184
|
+
* each query needs its subscription wired to a different collection.
|
|
185
|
+
*/
|
|
186
|
+
collection?: string;
|
|
187
|
+
manager: ReadmodelSubscriptionManagerType<MODEL, SUBSCRIPTION_OUTPUT_TYPE>;
|
|
188
|
+
})[];
|
|
189
|
+
/**
|
|
190
|
+
* Transforms the query params before the query is executed. Here Row Level Security can be applied.
|
|
191
|
+
* @param projectionParams - The projection params.
|
|
192
|
+
* @param params - The params.
|
|
193
|
+
* @returns The transformed projection params.
|
|
194
|
+
*/
|
|
84
195
|
transformers?: QueryTransformer<MODEL, PARAMS, QUERY>[];
|
|
85
|
-
|
|
196
|
+
responseFormatter?: QueryResponseFormatter<MODEL>;
|
|
197
|
+
queryHandler?: QueryHandler<USER, MODEL, PARAMS, QUERY, RETURN_TYPE>;
|
|
86
198
|
};
|
|
87
199
|
export type EventProjectors<EVENTS extends Record<string, EventFactory> = any> = {
|
|
88
200
|
[Name in keyof EVENTS]: (event: CommittedEvent<GetMessageType<EVENTS[Name]>>) => Promise<any>;
|
|
89
201
|
};
|
|
90
|
-
export type
|
|
91
|
-
|
|
202
|
+
export type Readmodel<Model extends Document = any, EVENTS extends Record<string, EventFactory> = any, USER = any> = EventHandler<EVENTS> & {
|
|
203
|
+
isReadmodel: true;
|
|
204
|
+
idProperty: string & keyof Model;
|
|
92
205
|
schema: ObjectSchema<Model>;
|
|
93
|
-
queries: Query<Model>[];
|
|
206
|
+
queries: Query<USER, Model>[];
|
|
94
207
|
eventProjectors?: EventProjectors<EVENTS>;
|
|
95
208
|
database?: DatabasePort;
|
|
209
|
+
sessionDatabase?: DatabasePort;
|
|
96
210
|
collection?: string;
|
|
97
211
|
};
|
|
98
212
|
export type ReadmodelChange<Model extends Document> = {
|
|
99
|
-
type: 'insert'
|
|
213
|
+
type: 'insert';
|
|
100
214
|
data: Model;
|
|
215
|
+
} | {
|
|
216
|
+
type: 'update';
|
|
217
|
+
data: Model;
|
|
218
|
+
previous: Model;
|
|
219
|
+
} | {
|
|
220
|
+
type: 'delete';
|
|
221
|
+
previous: Model;
|
|
222
|
+
} | {
|
|
223
|
+
type: 'snapshot';
|
|
224
|
+
data: {
|
|
225
|
+
items: Model[];
|
|
226
|
+
count: number;
|
|
227
|
+
};
|
|
228
|
+
} | {
|
|
229
|
+
type: 'signal';
|
|
101
230
|
};
|
|
102
231
|
//# sourceMappingURL=eventHandlers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventHandlers.d.ts","sourceRoot":"","sources":["../../src/eventsourcing/eventHandlers.ts"],"names":[],"mappings":"AAAA,OAAU,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"eventHandlers.d.ts","sourceRoot":"","sources":["../../src/eventsourcing/eventHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,31 +3,39 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.defaultQuerySchemas = exports.
|
|
6
|
+
exports.defaultQuerySchemas = exports.ReadmodelDefaultQuerySchema = exports.ReadmodelDefaultParamsSchema = void 0;
|
|
7
7
|
const jsonschema_definer_1 = __importDefault(require("@bett3r-dev/jsonschema-definer"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
.pattern(/^([\w\d._]+),(eq|neq|lt|gt|lte|gte|in|nin|contains|notContains|some|every|exists|notExists),(.+?)$/);
|
|
12
|
-
exports.ReadModelDefaultParamsSchema = jsonschema_definer_1.default.shape({
|
|
8
|
+
const aggregateSchema_1 = require("../aggregateSchema");
|
|
9
|
+
const database_1 = require("../database");
|
|
10
|
+
exports.ReadmodelDefaultParamsSchema = jsonschema_definer_1.default.shape({
|
|
13
11
|
id: jsonschema_definer_1.default.string().optional()
|
|
14
12
|
});
|
|
15
|
-
exports.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
13
|
+
exports.ReadmodelDefaultQuerySchema = jsonschema_definer_1.default.shape({
|
|
14
|
+
limit: jsonschema_definer_1.default.number().optional(),
|
|
15
|
+
/**
|
|
16
|
+
* The keyset cursor, compiled by the adapters to `<idProperty> > $n`. Its domain is the
|
|
17
|
+
* KEY COLUMN's domain, which is `string | number` (`CollectionQueryParams['after']`) — a
|
|
18
|
+
* readmodel keyed on a uuid/text `id` produces a STRING cursor. Declaring it `S.number()`
|
|
19
|
+
* rejected every page-2 request on such a readmodel at the route, and did so silently:
|
|
20
|
+
* page 1 carries no cursor, so a result set below one page read as complete.
|
|
21
|
+
*/
|
|
22
|
+
after: jsonschema_definer_1.default.anyOf(jsonschema_definer_1.default.string(), jsonschema_definer_1.default.number()).optional(),
|
|
23
|
+
byDistinctField: jsonschema_definer_1.default.string().optional(),
|
|
24
|
+
offset: jsonschema_definer_1.default.number().optional(),
|
|
25
|
+
sort: jsonschema_definer_1.default.array().items(database_1.CollectionSortSchema)
|
|
26
|
+
.optional(),
|
|
27
|
+
select: jsonschema_definer_1.default.array().items(jsonschema_definer_1.default.string())
|
|
28
|
+
.optional(),
|
|
29
|
+
filter: jsonschema_definer_1.default.array().items(database_1.CollectionFilterSchema)
|
|
30
|
+
.optional(),
|
|
31
|
+
/**
|
|
32
|
+
* TV1-2342 slice 7 — the aggregation spec, rison-encoded in the query string exactly as
|
|
33
|
+
* `filter`/`sort`/`select` are. Declared here as the DECODED shape (as `filter` is), because the
|
|
34
|
+
* decoding happens in `decodeObjectQueryParams`/`formatAggregate` upstream of this schema's use.
|
|
35
|
+
*/
|
|
36
|
+
aggregate: aggregateSchema_1.AggregateSpecSchema.optional()
|
|
26
37
|
});
|
|
27
|
-
exports.defaultParamsSchemas = {
|
|
28
|
-
params: exports.ReadModelDefaultParamsSchema
|
|
29
|
-
};
|
|
30
38
|
exports.defaultQuerySchemas = {
|
|
31
|
-
query: exports.
|
|
39
|
+
query: exports.ReadmodelDefaultQuerySchema
|
|
32
40
|
};
|
|
33
41
|
//# sourceMappingURL=eventHandlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventHandlers.js","sourceRoot":"","sources":["../../src/eventsourcing/eventHandlers.ts"],"names":[],"mappings":";;;;;;AAAA,wFAAiE;
|
|
1
|
+
{"version":3,"file":"eventHandlers.js","sourceRoot":"","sources":["../../src/eventsourcing/eventHandlers.ts"],"names":[],"mappings":";;;;;;AAAA,wFAAiE;AAEjE,wDAAyD;AACzD,0CAAsJ;AASzI,QAAA,4BAA4B,GAAG,4BAAC,CAAC,KAAK,CAAC;IAClD,EAAE,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC1B,CAAC,CAAC;AAEU,QAAA,2BAA2B,GAAG,4BAAC,CAAC,KAAK,CAAC;IACjD,KAAK,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B;;;;;;OAMG;IACH,KAAK,EAAE,4BAAC,CAAC,KAAK,CAAE,4BAAC,CAAC,MAAM,EAAE,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAClD,eAAe,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,MAAM,EAAE,4BAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,4BAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAE,+BAAoB,CAAE;SAC1C,QAAQ,EAAE;IACb,MAAM,EAAE,4BAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAE,4BAAC,CAAC,MAAM,EAAE,CAAC;SACjC,QAAQ,EAAE;IACb,MAAM,EAAE,4BAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAE,iCAAsB,CAAE;SAC9C,QAAQ,EAAE;IACb;;;;OAIG;IACH,SAAS,EAAE,qCAAmB,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAMU,QAAA,mBAAmB,GAAG;IACjC,KAAK,EAAE,QAAA,2BAA2B;CACnC,CAAC"}
|
|
@@ -1,36 +1,42 @@
|
|
|
1
|
-
/// <reference types="ramda/node_modules/ts-toolbelt" />
|
|
2
1
|
import { ObjectSchema } from '@bett3r-dev/jsonschema-definer';
|
|
3
2
|
import { A, O } from 'ts-toolbelt';
|
|
4
|
-
import { Builder, CommittedEvent, EventFactory, EventHandler,
|
|
5
|
-
import {
|
|
3
|
+
import { Builder, CommittedEvent, EventFactory, EventHandler, EventMetadataBaseType, EventProjectors, GetBuilderType, GetMessageType, Message, Policy, PolicyResponse, Query, Readmodel, System } from '.';
|
|
4
|
+
import { AppError, DatabasePort, Document } from '..';
|
|
6
5
|
export type GetCommandType<SYSTEM extends System | EventHandler, Name extends A.Key> = SYSTEM extends System ? O.Path<SYSTEM, ['commands', Name]> extends (Builder<infer T extends Object>) ? O.Path<T, ['schema', 'type']> : O.Path<SYSTEM, ['commands', Name, 'schema', 'type']> : O.Path<SYSTEM, ['commandHandler', 'commands', Name]> extends (Builder<infer T extends Object>) ? O.Path<T, ['schema', 'type']> : O.Path<SYSTEM, ['commandHandler', 'commands', Name, 'schema', 'type']>;
|
|
7
6
|
export type CommandInstance<Payload = any> = Message<Payload> & {
|
|
8
7
|
name: string;
|
|
9
8
|
id?: string;
|
|
10
|
-
metadata?:
|
|
9
|
+
metadata?: EventMetadataBaseType;
|
|
11
10
|
};
|
|
12
|
-
export declare const createCommand: <Handler extends System | EventHandler>(handler: Handler) => <COMMAND extends keyof (Handler extends System ? Handler[
|
|
13
|
-
export type EventHandlerBuilderType<EVENTS extends Record<string, EventFactory>, T extends Policy |
|
|
11
|
+
export declare const createCommand: <Handler extends System | EventHandler>(handler: Handler) => <COMMAND extends keyof (Handler extends System ? Handler['commands'] : O.Path<GetBuilderType<Handler>, ['commandHandler', 'commands']>)>(command: COMMAND, id?: string, data?: GetCommandType<Handler, COMMAND>, metadata?: EventMetadataBaseType) => CommandInstance;
|
|
12
|
+
export type EventHandlerBuilderType<EVENTS extends Record<string, EventFactory>, T extends Policy | Readmodel> = Builder<EventHandler<EVENTS>> & {
|
|
14
13
|
eventHandler: EventHandler<EVENTS>;
|
|
15
14
|
withErrorHandlers: (errorHandlers: {
|
|
16
|
-
[Name in keyof EVENTS]?: (error:
|
|
15
|
+
[Name in keyof EVENTS]?: (error: AppError, event: CommittedEvent<GetMessageType<EVENTS[Name]>>) => Promise<unknown>;
|
|
17
16
|
}) => {
|
|
18
|
-
build: () => T extends Policy ? Policy<T['commandHandler'], EVENTS> : T extends
|
|
17
|
+
build: () => T extends Policy ? Policy<T['commandHandler'], EVENTS> : T extends Readmodel ? Readmodel<T['schema'] extends ObjectSchema<infer MODEL extends Document> ? MODEL : Document, EVENTS> : any;
|
|
19
18
|
};
|
|
20
19
|
};
|
|
20
|
+
export type PolicyBuilderFunction = <EVENTS extends Record<string, EventFactory>, CommandHandler extends System>(events: EVENTS, commandHandler?: CommandHandler, policy?: Policy) => PolicyBuilderType<CommandHandler, EVENTS>;
|
|
21
21
|
export type PolicyBuilderType<CommandHandler extends System, EVENTS extends Record<string, EventFactory>> = Builder<Policy<CommandHandler, EVENTS>> & EventHandlerBuilderType<EVENTS, Policy<CommandHandler, EVENTS>> & {
|
|
22
|
+
withSubdomain: (subdomain: string) => PolicyBuilderType<CommandHandler, EVENTS>;
|
|
23
|
+
linkedTo: (...aggregateNames: string[]) => PolicyBuilderType<CommandHandler, EVENTS>;
|
|
24
|
+
standalone: () => PolicyBuilderType<CommandHandler, EVENTS>;
|
|
22
25
|
withEventHandlers: (handlers: (params: {
|
|
23
26
|
createCommand: ReturnType<typeof createCommand<CommandHandler>>;
|
|
24
27
|
}) => {
|
|
25
28
|
[Name in keyof EVENTS]: (event: CommittedEvent<GetMessageType<EVENTS[Name]>>) => Promise<PolicyResponse | void>;
|
|
26
29
|
}) => Pick<PolicyBuilderType<CommandHandler, EVENTS>, 'build' | 'withErrorHandlers'>;
|
|
27
30
|
};
|
|
28
|
-
export type
|
|
29
|
-
|
|
31
|
+
export type ReadmodelBuilderFunction<USER = any> = <Model extends Document = any, EVENTS extends Record<string, EventFactory> = any>(schema: ObjectSchema<Model>, events?: EVENTS, readmodel?: Readmodel<Model, EVENTS, USER>) => ReadmodelBuilderType<USER, Model, EVENTS>;
|
|
32
|
+
export type ReadmodelBuilderType<USER = any, Model extends Document = any, EVENTS extends Record<string, EventFactory> = any> = Builder<Readmodel<Model, EVENTS, USER>> & EventHandlerBuilderType<EVENTS, Readmodel<Model, EVENTS, USER>> & {
|
|
33
|
+
withSubdomain: (subdomain: string) => ReadmodelBuilderType<USER, Model, EVENTS>;
|
|
34
|
+
withIdProperty: (idProperty: string & keyof Model) => ReadmodelBuilderType<USER, Model, EVENTS>;
|
|
35
|
+
withDatabase: (database: DatabasePort, collection?: string, sessionDatabase?: DatabasePort) => ReadmodelBuilderType<USER, Model, EVENTS>;
|
|
30
36
|
withProjector: (eventProjectors?: (params: {
|
|
31
37
|
database: DatabasePort;
|
|
32
38
|
collection: string;
|
|
33
|
-
}) => EventProjectors<EVENTS>) => ReadmodelBuilderType<Model, EVENTS>;
|
|
34
|
-
withQuery: <PARAMS extends Record<string, any>, QUERY extends Record<string, any>>(query?: Query<Model, PARAMS, QUERY>) => ReadmodelBuilderType<Model, EVENTS>;
|
|
39
|
+
}) => EventProjectors<EVENTS>) => ReadmodelBuilderType<USER, Model, EVENTS>;
|
|
40
|
+
withQuery: <PARAMS extends Record<string, any>, QUERY extends Record<string, any>>(query?: Query<USER, Model, PARAMS, QUERY>) => ReadmodelBuilderType<USER, Model, EVENTS>;
|
|
35
41
|
};
|
|
36
42
|
//# sourceMappingURL=eventHandlersBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventHandlersBuilder.d.ts","sourceRoot":"","sources":["../../src/eventsourcing/eventHandlersBuilder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eventHandlersBuilder.d.ts","sourceRoot":"","sources":["../../src/eventsourcing/eventHandlersBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventHandlersBuilder.js","sourceRoot":"","sources":["../../src/eventsourcing/eventHandlersBuilder.ts"],"names":[],"mappings":";;;AAeO,MAAM,aAAa,GAAG,CAA0C,OAAgB,EAAE,EAAE,CAAC,CAA0I,OAAgB,EAAE,EAAW,EAAE,IAAuC,EAAE,
|
|
1
|
+
{"version":3,"file":"eventHandlersBuilder.js","sourceRoot":"","sources":["../../src/eventsourcing/eventHandlersBuilder.ts"],"names":[],"mappings":";;;AAeO,MAAM,aAAa,GAAG,CAA0C,OAAgB,EAAE,EAAE,CAAC,CAA0I,OAAgB,EAAE,EAAW,EAAE,IAAuC,EAAE,QAAgC,EAAoB,EAAE;IAClW,OAAO;QACL,IAAI,EAAE,OAAiB;QACvB,GAAG,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtB,GAAG,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnC,CAAC;AACJ,CAAC,CAAC;AAPW,QAAA,aAAa,GAAb,aAAa,CAOxB"}
|