@magek/core 0.0.6 → 0.0.7
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/dist/authorizer.js +1 -1
- package/dist/command-dispatcher.js +47 -41
- package/dist/core-concepts/data-migration/entities/data-migration-entity.js +5 -2
- package/dist/core-concepts/data-migration/events/data-migration-finished.js +3 -1
- package/dist/core-concepts/data-migration/events/data-migration-started.js +3 -1
- package/dist/core-concepts/data-migration/events/entity-migrated.js +4 -0
- package/dist/core-concepts/touch-entity/events/entity-touched.js +2 -0
- package/dist/data-migrations.js +59 -54
- package/dist/decorators/command.d.ts +4 -11
- package/dist/decorators/command.js +10 -18
- package/dist/decorators/data-migration.d.ts +4 -1
- package/dist/decorators/data-migration.js +3 -1
- package/dist/decorators/decorator-types.d.ts +50 -0
- package/dist/decorators/decorator-types.js +11 -0
- package/dist/decorators/decorator-utils.d.ts +1 -0
- package/dist/decorators/decorator-utils.js +2 -0
- package/dist/decorators/entity.d.ts +7 -15
- package/dist/decorators/entity.js +27 -37
- package/dist/decorators/event-handler.d.ts +11 -1
- package/dist/decorators/event-handler.js +13 -1
- package/dist/decorators/event.d.ts +4 -1
- package/dist/decorators/event.js +3 -2
- package/dist/decorators/field-metadata-reader.d.ts +8 -3
- package/dist/decorators/field-metadata-reader.js +50 -62
- package/dist/decorators/field.d.ts +23 -0
- package/dist/decorators/field.js +41 -0
- package/dist/decorators/global-error-handler.d.ts +10 -1
- package/dist/decorators/global-error-handler.js +9 -1
- package/dist/decorators/global-event-handler.d.ts +10 -1
- package/dist/decorators/global-event-handler.js +9 -1
- package/dist/decorators/health-sensor.d.ts +4 -1
- package/dist/decorators/health-sensor.js +3 -2
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.js +2 -0
- package/dist/decorators/metadata.d.ts +17 -1
- package/dist/decorators/metadata.js +22 -22
- package/dist/decorators/non-exposed.d.ts +13 -2
- package/dist/decorators/non-exposed.js +22 -20
- package/dist/decorators/notification.d.ts +6 -18
- package/dist/decorators/notification.js +10 -50
- package/dist/decorators/projects.d.ts +5 -18
- package/dist/decorators/projects.js +23 -54
- package/dist/decorators/query.d.ts +11 -1
- package/dist/decorators/query.js +18 -4
- package/dist/decorators/read-model.d.ts +13 -27
- package/dist/decorators/read-model.js +45 -77
- package/dist/decorators/role.d.ts +9 -3
- package/dist/decorators/role.js +8 -3
- package/dist/decorators/scheduled-command.d.ts +4 -1
- package/dist/decorators/scheduled-command.js +3 -1
- package/dist/decorators/schema-migration.d.ts +11 -27
- package/dist/decorators/schema-migration.js +32 -77
- package/dist/decorators/sequenced-by.d.ts +7 -25
- package/dist/decorators/sequenced-by.js +11 -71
- package/dist/event-dispatcher.js +29 -24
- package/dist/event-processor.js +106 -103
- package/dist/event-stream-consumer.js +25 -20
- package/dist/event-stream-producer.js +22 -17
- package/dist/events-reader.js +1 -0
- package/dist/global-error-dispatcher.js +3 -2
- package/dist/graphql-dispatcher.js +161 -156
- package/dist/index.js +4 -0
- package/dist/instrumentation/decorator/trace.d.ts +11 -3
- package/dist/instrumentation/decorator/trace.js +17 -71
- package/dist/magek.js +2 -2
- package/dist/query-dispatcher.js +2 -0
- package/dist/read-model-schema-migrator.js +71 -68
- package/dist/read-models-reader.js +178 -180
- package/dist/register-handler.js +3 -3
- package/dist/scheduled-command-dispatcher.js +48 -42
- package/dist/schema-migrator.js +63 -59
- package/dist/sensor/health/health-service.js +2 -1
- package/dist/services/event-store.js +221 -224
- package/dist/services/graphql/graphql-generator.js +11 -8
- package/dist/services/graphql/graphql-mutation-generator.js +4 -0
- package/dist/services/graphql/graphql-query-generator.js +14 -0
- package/dist/services/graphql/graphql-subcriptions-generator.js +7 -0
- package/dist/services/graphql/graphql-type-informer.js +4 -3
- package/dist/services/graphql/query-generators/graphql-query-by-keys-generator.js +4 -0
- package/dist/services/graphql/query-generators/graphql-query-events-generator.js +3 -0
- package/dist/services/graphql/query-generators/graphql-query-filters-generator.js +6 -0
- package/dist/services/graphql/query-generators/graphql-query-generator.js +4 -0
- package/dist/services/graphql/query-generators/graphql-query-listed-generator.js +7 -0
- package/dist/services/graphql/query-helpers/graphql-handled-fields-generator.js +5 -2
- package/dist/services/graphql/query-helpers/graphql-query-filter-arguments-builder.js +3 -0
- package/dist/services/graphql/query-helpers/graphql-query-filter-fields-builder.js +4 -0
- package/dist/services/graphql/query-helpers/graphql-query-sort-builder.js +4 -2
- package/dist/services/graphql/websocket-protocol/graphql-websocket-protocol.js +5 -3
- package/dist/services/pub-sub/read-model-pub-sub.js +1 -0
- package/dist/services/raw-events-parser.js +1 -1
- package/dist/services/read-model-store.js +16 -17
- package/dist/services/token-verifiers/jwks-uri-token-verifier.js +8 -4
- package/dist/services/token-verifiers/public-key-token-verifier.js +4 -2
- package/dist/services/token-verifiers/role-based-token-verifier.js +2 -1
- package/dist/services/token-verifiers/utilities.js +1 -1
- package/dist/subscribers-notifier.js +98 -92
- package/dist/token-verifier.js +2 -1
- package/package.json +4 -4
- package/dist/decorators/stage3-utils.d.ts +0 -6
- package/dist/decorators/stage3-utils.js +0 -25
|
@@ -6,49 +6,55 @@ const common_1 = require("@magek/common");
|
|
|
6
6
|
const register_handler_1 = require("./register-handler");
|
|
7
7
|
const global_error_dispatcher_1 = require("./global-error-dispatcher");
|
|
8
8
|
const instrumentation_1 = require("./instrumentation");
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (!commandMetadata) {
|
|
19
|
-
throw new common_1.NotFoundError(`Could not find a proper handler for ${commandEnvelope.typeName}`);
|
|
9
|
+
let MagekScheduledCommandDispatcher = (() => {
|
|
10
|
+
let _instanceExtraInitializers = [];
|
|
11
|
+
let _dispatchCommand_decorators;
|
|
12
|
+
return class MagekScheduledCommandDispatcher {
|
|
13
|
+
static {
|
|
14
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
15
|
+
_dispatchCommand_decorators = [(0, instrumentation_1.trace)(common_1.TraceActionTypes.SCHEDULED_COMMAND_HANDLER)];
|
|
16
|
+
tslib_1.__esDecorate(this, null, _dispatchCommand_decorators, { kind: "method", name: "dispatchCommand", static: false, private: false, access: { has: obj => "dispatchCommand" in obj, get: obj => obj.dispatchCommand }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
17
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
20
18
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
logger.debug('Calling "handle" method on command: ', command);
|
|
27
|
-
await command.handle(register);
|
|
19
|
+
config = tslib_1.__runInitializers(this, _instanceExtraInitializers);
|
|
20
|
+
globalErrorDispatcher;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.config = config;
|
|
23
|
+
this.globalErrorDispatcher = new global_error_dispatcher_1.MagekGlobalErrorDispatcher(config);
|
|
28
24
|
}
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
async dispatchCommand(commandEnvelope) {
|
|
26
|
+
const logger = (0, common_1.getLogger)(this.config, 'MagekScheduledCommandDispatcher#dispatchCommand');
|
|
27
|
+
logger.debug('Dispatching the following scheduled command envelope: ', commandEnvelope);
|
|
28
|
+
const commandMetadata = this.config.scheduledCommandHandlers[commandEnvelope.typeName];
|
|
29
|
+
if (!commandMetadata) {
|
|
30
|
+
throw new common_1.NotFoundError(`Could not find a proper handler for ${commandEnvelope.typeName}`);
|
|
31
|
+
}
|
|
32
|
+
const commandClass = commandMetadata.class;
|
|
33
|
+
logger.debug('Found the following command:', commandClass.name);
|
|
34
|
+
const command = commandClass;
|
|
35
|
+
const register = new common_1.Register(commandEnvelope.requestID, {}, register_handler_1.RegisterHandler.flush, undefined, commandEnvelope.context);
|
|
36
|
+
try {
|
|
37
|
+
logger.debug('Calling "handle" method on command: ', command);
|
|
38
|
+
await command.handle(register);
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
const error = await this.globalErrorDispatcher.dispatch(new common_1.ScheduleCommandGlobalError(commandEnvelope, commandMetadata, e));
|
|
42
|
+
if (error)
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
logger.debug('Command dispatched with register: ', register);
|
|
46
|
+
await register_handler_1.RegisterHandler.handle(this.config, register);
|
|
33
47
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
+
/**
|
|
49
|
+
* Entry point to dispatch scheduled commands.
|
|
50
|
+
* @param request The incoming request
|
|
51
|
+
*/
|
|
52
|
+
async dispatch(request) {
|
|
53
|
+
const logger = (0, common_1.getLogger)(this.config, 'MagekScheduledCommandDispatcher#dispatch');
|
|
54
|
+
const envelopeOrError = await this.config.runtime.scheduled.rawToEnvelope(this.config, request);
|
|
55
|
+
logger.debug('Received ScheduledCommand envelope...', envelopeOrError);
|
|
56
|
+
await this.dispatchCommand(envelopeOrError);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
})();
|
|
48
60
|
exports.MagekScheduledCommandDispatcher = MagekScheduledCommandDispatcher;
|
|
49
|
-
tslib_1.__decorate([
|
|
50
|
-
(0, instrumentation_1.Trace)(common_1.TraceActionTypes.SCHEDULED_COMMAND_HANDLER),
|
|
51
|
-
tslib_1.__metadata("design:type", Function),
|
|
52
|
-
tslib_1.__metadata("design:paramtypes", [Object]),
|
|
53
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
54
|
-
], MagekScheduledCommandDispatcher.prototype, "dispatchCommand", null);
|
package/dist/schema-migrator.js
CHANGED
|
@@ -1,71 +1,75 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.SchemaMigrator = void 0;
|
|
5
4
|
const tslib_1 = require("tslib");
|
|
6
5
|
const common_1 = require("@magek/common");
|
|
7
6
|
const instrumentation_1 = require("./instrumentation");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
let SchemaMigrator = (() => {
|
|
8
|
+
let _instanceExtraInitializers = [];
|
|
9
|
+
let _migrate_decorators;
|
|
10
|
+
return class SchemaMigrator {
|
|
11
|
+
static {
|
|
12
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
13
|
+
_migrate_decorators = [(0, instrumentation_1.trace)(common_1.TraceActionTypes.SCHEMA_MIGRATOR_MIGRATE)];
|
|
14
|
+
tslib_1.__esDecorate(this, null, _migrate_decorators, { kind: "method", name: "migrate", static: false, private: false, access: { has: obj => "migrate" in obj, get: obj => obj.migrate }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
15
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
if (conceptEnvelope.version < 1) {
|
|
21
|
-
throw new common_1.InvalidVersionError(`Received an invalid schema version value, ${conceptEnvelope.version}, for ${conceptEnvelope.typeName}. ` +
|
|
22
|
-
'Versions must be greater than 0');
|
|
17
|
+
config = tslib_1.__runInitializers(this, _instanceExtraInitializers);
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.config = config;
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
async migrate(conceptEnvelope) {
|
|
22
|
+
this.checkVersionRange(conceptEnvelope);
|
|
23
|
+
if (this.needsMigration(conceptEnvelope)) {
|
|
24
|
+
return await this.applyAllMigrations(conceptEnvelope);
|
|
25
|
+
}
|
|
26
|
+
return conceptEnvelope; // The current version is exactly the same as the version of the concept
|
|
28
27
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
logger.debug('Envelope before schema migration:\n', oldConceptEnvelope);
|
|
40
|
-
const migrations = this.config.schemaMigrations[oldConceptEnvelope.typeName];
|
|
41
|
-
let migratedConceptValue = oldConceptEnvelope.value;
|
|
42
|
-
for (let toVersion = oldVersion + 1; toVersion <= currentVersion; toVersion++) {
|
|
43
|
-
migratedConceptValue = await this.applyMigration(migratedConceptValue, migrations.get(toVersion));
|
|
28
|
+
checkVersionRange(conceptEnvelope) {
|
|
29
|
+
if (conceptEnvelope.version < 1) {
|
|
30
|
+
throw new common_1.InvalidVersionError(`Received an invalid schema version value, ${conceptEnvelope.version}, for ${conceptEnvelope.typeName}. ` +
|
|
31
|
+
'Versions must be greater than 0');
|
|
32
|
+
}
|
|
33
|
+
const currentVersion = this.config.currentVersionFor(conceptEnvelope.typeName);
|
|
34
|
+
if (currentVersion < conceptEnvelope.version) {
|
|
35
|
+
throw new common_1.InvalidVersionError(`Can not migrate schema an unknown version: The current schema version of ${conceptEnvelope.typeName} is ${currentVersion}, which is ` +
|
|
36
|
+
`lower than the received version ${conceptEnvelope.version}`);
|
|
37
|
+
}
|
|
44
38
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
version: currentVersion,
|
|
49
|
-
};
|
|
50
|
-
logger.debug('Envelope after migration:\n', newConceptEnvelope);
|
|
51
|
-
return newConceptEnvelope;
|
|
52
|
-
}
|
|
53
|
-
async applyMigration(oldValue, migration) {
|
|
54
|
-
const logger = (0, common_1.getLogger)(this.config, 'SchemaMigrator#applyMigration');
|
|
55
|
-
if (!migration) {
|
|
56
|
-
throw new common_1.InvalidVersionError('Received an undefined schema migration value. Are there "gaps" between the versions of the schema migrations?');
|
|
39
|
+
needsMigration(conceptEnvelope) {
|
|
40
|
+
const currentVersion = this.config.currentVersionFor(conceptEnvelope.typeName);
|
|
41
|
+
return currentVersion > conceptEnvelope.version;
|
|
57
42
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
43
|
+
async applyAllMigrations(oldConceptEnvelope) {
|
|
44
|
+
const logger = (0, common_1.getLogger)(this.config, 'SchemaMigrator#applyAllMigrations');
|
|
45
|
+
const currentVersion = this.config.currentVersionFor(oldConceptEnvelope.typeName);
|
|
46
|
+
const oldVersion = oldConceptEnvelope.version;
|
|
47
|
+
logger.info(`Migrating schema ${oldConceptEnvelope.typeName} from version ${oldVersion} to version ${currentVersion}`);
|
|
48
|
+
logger.debug('Envelope before schema migration:\n', oldConceptEnvelope);
|
|
49
|
+
const migrations = this.config.schemaMigrations[oldConceptEnvelope.typeName];
|
|
50
|
+
let migratedConceptValue = oldConceptEnvelope.value;
|
|
51
|
+
for (let toVersion = oldVersion + 1; toVersion <= currentVersion; toVersion++) {
|
|
52
|
+
migratedConceptValue = await this.applyMigration(migratedConceptValue, migrations.get(toVersion));
|
|
53
|
+
}
|
|
54
|
+
const newConceptEnvelope = {
|
|
55
|
+
...oldConceptEnvelope,
|
|
56
|
+
value: migratedConceptValue,
|
|
57
|
+
version: currentVersion,
|
|
58
|
+
};
|
|
59
|
+
logger.debug('Envelope after migration:\n', newConceptEnvelope);
|
|
60
|
+
return newConceptEnvelope;
|
|
61
|
+
}
|
|
62
|
+
async applyMigration(oldValue, migration) {
|
|
63
|
+
const logger = (0, common_1.getLogger)(this.config, 'SchemaMigrator#applyMigration');
|
|
64
|
+
if (!migration) {
|
|
65
|
+
throw new common_1.InvalidVersionError('Received an undefined schema migration value. Are there "gaps" between the versions of the schema migrations?');
|
|
66
|
+
}
|
|
67
|
+
const oldConcept = Object.assign(new migration.fromSchema(), oldValue);
|
|
68
|
+
const migrationMethod = new migration.migrationClass()[migration.methodName];
|
|
69
|
+
const newConcept = await migrationMethod(oldConcept);
|
|
70
|
+
logger.debug(`Partial migration finished. Migrated from oldValue=${oldConcept} to newValue=${newConcept}`);
|
|
71
|
+
return newConcept;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
})();
|
|
65
75
|
exports.SchemaMigrator = SchemaMigrator;
|
|
66
|
-
tslib_1.__decorate([
|
|
67
|
-
(0, instrumentation_1.Trace)(common_1.TraceActionTypes.SCHEMA_MIGRATOR_MIGRATE),
|
|
68
|
-
tslib_1.__metadata("design:type", Function),
|
|
69
|
-
tslib_1.__metadata("design:paramtypes", [typeof (_a = typeof TMigrableEnvelope !== "undefined" && TMigrableEnvelope) === "function" ? _a : Object]),
|
|
70
|
-
tslib_1.__metadata("design:returntype", Promise)
|
|
71
|
-
], SchemaMigrator.prototype, "migrate", null);
|
|
@@ -11,6 +11,7 @@ const authorizer_1 = require("../../authorizer");
|
|
|
11
11
|
* and dispatching the health checks to the corresponding health indicators
|
|
12
12
|
*/
|
|
13
13
|
class MagekHealthService {
|
|
14
|
+
config;
|
|
14
15
|
constructor(config) {
|
|
15
16
|
this.config = config;
|
|
16
17
|
}
|
|
@@ -52,7 +53,7 @@ class MagekHealthService {
|
|
|
52
53
|
: current.healthIndicatorConfiguration.name,
|
|
53
54
|
id: current.healthIndicatorConfiguration.id,
|
|
54
55
|
};
|
|
55
|
-
if (children &&
|
|
56
|
+
if (children && children?.length > 0) {
|
|
56
57
|
newResult.components = await this.healthProviderResolver(children, healthProviders);
|
|
57
58
|
}
|
|
58
59
|
result.push(newResult);
|