@contember/engine-actions 2.1.0-beta.1 → 2.1.0-beta.2
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/development/index.cjs +10 -4
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +10 -4
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/ActionsExecutionContainerHookFactory.cjs +3 -2
- package/dist/development/src/ActionsExecutionContainerHookFactory.cjs.map +1 -1
- package/dist/development/src/ActionsExecutionContainerHookFactory.js +3 -2
- package/dist/development/src/ActionsExecutionContainerHookFactory.js.map +1 -1
- package/dist/development/src/dispatch/LazyDispatchWorker.cjs +67 -0
- package/dist/development/src/dispatch/LazyDispatchWorker.cjs.map +1 -0
- package/dist/development/src/dispatch/LazyDispatchWorker.js +67 -0
- package/dist/development/src/dispatch/LazyDispatchWorker.js.map +1 -0
- package/dist/development/src/triggers/TriggerPayloadPersister.cjs +32 -20
- package/dist/development/src/triggers/TriggerPayloadPersister.cjs.map +1 -1
- package/dist/development/src/triggers/TriggerPayloadPersister.js +32 -20
- package/dist/development/src/triggers/TriggerPayloadPersister.js.map +1 -1
- package/dist/production/index.cjs +10 -4
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +10 -4
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/ActionsExecutionContainerHookFactory.cjs +3 -2
- package/dist/production/src/ActionsExecutionContainerHookFactory.cjs.map +1 -1
- package/dist/production/src/ActionsExecutionContainerHookFactory.js +3 -2
- package/dist/production/src/ActionsExecutionContainerHookFactory.js.map +1 -1
- package/dist/production/src/dispatch/LazyDispatchWorker.cjs +67 -0
- package/dist/production/src/dispatch/LazyDispatchWorker.cjs.map +1 -0
- package/dist/production/src/dispatch/LazyDispatchWorker.js +67 -0
- package/dist/production/src/dispatch/LazyDispatchWorker.js.map +1 -0
- package/dist/production/src/triggers/TriggerPayloadPersister.cjs +32 -20
- package/dist/production/src/triggers/TriggerPayloadPersister.cjs.map +1 -1
- package/dist/production/src/triggers/TriggerPayloadPersister.js +32 -20
- package/dist/production/src/triggers/TriggerPayloadPersister.js.map +1 -1
- package/dist/tests/cases/unit/lazyDispatchWorker.test.d.ts +2 -0
- package/dist/tests/cases/unit/lazyDispatchWorker.test.d.ts.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/ActionsExecutionContainerHookFactory.d.ts.map +1 -1
- package/dist/types/dispatch/LazyDispatchWorker.d.ts +11 -0
- package/dist/types/dispatch/LazyDispatchWorker.d.ts.map +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/triggers/TriggerPayloadPersister.d.ts +3 -2
- package/dist/types/triggers/TriggerPayloadPersister.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/ActionsExecutionContainerHookFactory.ts +5 -1
- package/src/dispatch/LazyDispatchWorker.ts +72 -0
- package/src/index.ts +11 -5
- package/src/triggers/TriggerPayloadPersister.ts +20 -7
- package/tests/cases/unit/lazyDispatchWorker.test.ts +226 -0
- package/vitest.config.ts +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../packages/engine-actions/src/index.ts"],"sourcesContent":["import { Plugin } from '@contember/engine-plugins'\nimport { migrationsGroup } from './migrations'\nimport { ActionsExecutionContainerHookFactory } from './ActionsExecutionContainerHookFactory'\nimport { ListenerStoreProvider } from './ListenerStoreProvider'\nimport { MigrationGroup } from '@contember/database-migrations'\nimport { MasterContainerBuilder, MasterContainerHook } from '@contember/engine-http'\nimport { ActionsApiMiddlewareFactory } from './graphql/http/ActionsApiMiddlewareFactory'\nimport { ActionsGraphQLHandlerFactory } from './graphql/http/ActionsGraphQLHandlerFactory'\nimport { ResolversFactory } from './graphql/resolvers/ResolversFactory'\nimport {\n\tEventsQueryResolver,\n\tProcessBatchMutationResolver,\n\tRetryEventMutationResolver,\n\tSetVariablesMutationResolver,\n\tStopEventMutationResolver,\n} from './graphql/resolvers'\nimport { EventDispatcher } from './dispatch/EventDispatcher'\nimport { EventsRepository } from './dispatch/EventsRepository'\nimport { TargetHandlerResolver } from './dispatch/TargetHandlerResolver'\nimport { WebhookTargetHandler } from './dispatch/WebhookTargetHandler'\nimport { ActionsContextResolver } from './graphql/http/ActionsContextResolver'\nimport { ActionsWebsocketControllerFactory } from './graphql/http/ActionsWebsocketControllerFactory'\nimport { DispatchWorkerSupervisorFactory } from './dispatch/DispatchWorkerSupervisor'\nimport { ProjectDispatcherFactory } from './dispatch/ProjectDispatcher'\nimport { VariablesQueryResolver } from './graphql/resolvers/query/VariablesQueryResolver'\nimport { VariablesManager } from './model/VariablesManager'\nimport { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { ActionsPermissionsFactory } from './authorization'\nimport { WebhookFetcherNative } from './dispatch/WebhookFetcher'\n\nexport { TriggerHandler, TriggerIndirectChangesFetcher, TriggerListenersFactory, TriggerListenersStore, TriggerPayloadManager } from './triggers'\nexport { ActionsExecutionContainerHookFactory } from './ActionsExecutionContainerHookFactory'\nexport { ListenerStoreProvider } from './ListenerStoreProvider'\n\nexport default class ActionsPlugin implements Plugin {\n\tname = 'contember/actions'\n\n\tgetSystemMigrations(): MigrationGroup {\n\t\treturn migrationsGroup\n\t}\n\n\tgetExecutionContainerHook() {\n\t\tconst hookFactory = new ActionsExecutionContainerHookFactory(new ListenerStoreProvider())\n\t\treturn hookFactory.create()\n\t}\n\n\tgetMasterContainerHook() {\n\t\tconst hook: MasterContainerHook = (builder: MasterContainerBuilder) => {\n\t\t\treturn builder\n\t\t\t\t.addService('actions_variableManager', () => {\n\t\t\t\t\treturn new VariablesManager()\n\t\t\t\t})\n\t\t\t\t.addService('actions_eventRepository', () => {\n\t\t\t\t\treturn new EventsRepository()\n\t\t\t\t})\n\t\t\t\t.addService('actions_eventDispatcher', ({ actions_eventRepository, actions_variableManager }) => {\n\t\t\t\t\tconst webhookTargetHandler = new WebhookTargetHandler(new WebhookFetcherNative())\n\t\t\t\t\tconst targetHandlerResolver = new TargetHandlerResolver(webhookTargetHandler)\n\t\t\t\t\treturn new EventDispatcher(actions_eventRepository, actions_variableManager, targetHandlerResolver)\n\t\t\t\t})\n\t\t\t\t.addService('actions_dispatchWorkerSupervisorFactory', ({ actions_eventDispatcher }) => {\n\t\t\t\t\tconst projectDispatcherFactory = new ProjectDispatcherFactory(actions_eventDispatcher)\n\t\t\t\t\treturn new DispatchWorkerSupervisorFactory(projectDispatcherFactory)\n\t\t\t\t})\n\t\t\t\t.addService('actions_authorizator', () => {\n\t\t\t\t\treturn new Authorizator.Default(new AccessEvaluator.PermissionEvaluator(new ActionsPermissionsFactory().create()))\n\t\t\t\t})\n\t\t\t\t.setupService(\n\t\t\t\t\t'application',\n\t\t\t\t\t(\n\t\t\t\t\t\tit,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprojectContextResolver,\n\t\t\t\t\t\t\tdebugMode,\n\t\t\t\t\t\t\tactions_eventRepository,\n\t\t\t\t\t\t\tactions_eventDispatcher,\n\t\t\t\t\t\t\tactions_dispatchWorkerSupervisorFactory,\n\t\t\t\t\t\t\tactions_variableManager,\n\t\t\t\t\t\t\tactions_authorizator,\n\t\t\t\t\t\t},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst handlerFactory = new ActionsGraphQLHandlerFactory()\n\t\t\t\t\t\tconst eventsQueryResolver = new EventsQueryResolver()\n\t\t\t\t\t\tconst processBatchMutationResolver = new ProcessBatchMutationResolver(actions_eventDispatcher)\n\t\t\t\t\t\tconst variablesQueryResolver = new VariablesQueryResolver(actions_variableManager)\n\t\t\t\t\t\tconst setVariablesMutationResolver = new SetVariablesMutationResolver(actions_variableManager)\n\t\t\t\t\t\tconst resolversFactory = new ResolversFactory(\n\t\t\t\t\t\t\teventsQueryResolver,\n\t\t\t\t\t\t\tprocessBatchMutationResolver,\n\t\t\t\t\t\t\tvariablesQueryResolver,\n\t\t\t\t\t\t\tsetVariablesMutationResolver,\n\t\t\t\t\t\t\tnew RetryEventMutationResolver(actions_eventRepository),\n\t\t\t\t\t\t\tnew StopEventMutationResolver(actions_eventRepository),\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tconst actionsContextResolver = new ActionsContextResolver(debugMode, projectContextResolver)\n\t\t\t\t\t\tconst actionsMiddlewareFactory = new ActionsApiMiddlewareFactory(\n\t\t\t\t\t\t\tactionsContextResolver,\n\t\t\t\t\t\t\thandlerFactory.create(resolversFactory),\n\t\t\t\t\t\t\tactions_authorizator,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst actionsWebsocketMiddlewareFactory = new ActionsWebsocketControllerFactory(\n\t\t\t\t\t\t\tdebugMode,\n\t\t\t\t\t\t\tactionsContextResolver,\n\t\t\t\t\t\t\tactions_dispatchWorkerSupervisorFactory,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tit.addRoute('actions', '/actions/:projectSlug', actionsMiddlewareFactory.create())\n\t\t\t\t\t\tit.addWebsocketRoute('actions', '/actions/_worker', actionsWebsocketMiddlewareFactory.create())\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\t.setupService('applicationWorkers'
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../packages/engine-actions/src/index.ts"],"sourcesContent":["import { Plugin } from '@contember/engine-plugins'\nimport { migrationsGroup } from './migrations'\nimport { ActionsExecutionContainerHookFactory } from './ActionsExecutionContainerHookFactory'\nimport { ListenerStoreProvider } from './ListenerStoreProvider'\nimport { MigrationGroup } from '@contember/database-migrations'\nimport { MasterContainerBuilder, MasterContainerHook } from '@contember/engine-http'\nimport { ActionsApiMiddlewareFactory } from './graphql/http/ActionsApiMiddlewareFactory'\nimport { ActionsGraphQLHandlerFactory } from './graphql/http/ActionsGraphQLHandlerFactory'\nimport { ResolversFactory } from './graphql/resolvers/ResolversFactory'\nimport {\n\tEventsQueryResolver,\n\tProcessBatchMutationResolver,\n\tRetryEventMutationResolver,\n\tSetVariablesMutationResolver,\n\tStopEventMutationResolver,\n} from './graphql/resolvers'\nimport { EventDispatcher } from './dispatch/EventDispatcher'\nimport { EventsRepository } from './dispatch/EventsRepository'\nimport { TargetHandlerResolver } from './dispatch/TargetHandlerResolver'\nimport { WebhookTargetHandler } from './dispatch/WebhookTargetHandler'\nimport { ActionsContextResolver } from './graphql/http/ActionsContextResolver'\nimport { ActionsWebsocketControllerFactory } from './graphql/http/ActionsWebsocketControllerFactory'\nimport { DispatchWorkerSupervisorFactory } from './dispatch/DispatchWorkerSupervisor'\nimport { LazyDispatchWorker } from './dispatch/LazyDispatchWorker'\nimport { ProjectDispatcherFactory } from './dispatch/ProjectDispatcher'\nimport { VariablesQueryResolver } from './graphql/resolvers/query/VariablesQueryResolver'\nimport { VariablesManager } from './model/VariablesManager'\nimport { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { ActionsPermissionsFactory } from './authorization'\nimport { WebhookFetcherNative } from './dispatch/WebhookFetcher'\n\nexport { TriggerHandler, TriggerIndirectChangesFetcher, TriggerListenersFactory, TriggerListenersStore, TriggerPayloadManager } from './triggers'\nexport { ActionsExecutionContainerHookFactory } from './ActionsExecutionContainerHookFactory'\nexport { ListenerStoreProvider } from './ListenerStoreProvider'\n\nexport default class ActionsPlugin implements Plugin {\n\tname = 'contember/actions'\n\n\tgetSystemMigrations(): MigrationGroup {\n\t\treturn migrationsGroup\n\t}\n\n\tgetExecutionContainerHook() {\n\t\tconst hookFactory = new ActionsExecutionContainerHookFactory(new ListenerStoreProvider())\n\t\treturn hookFactory.create()\n\t}\n\n\tgetMasterContainerHook() {\n\t\tconst hook: MasterContainerHook = (builder: MasterContainerBuilder) => {\n\t\t\treturn builder\n\t\t\t\t.addService('actions_variableManager', () => {\n\t\t\t\t\treturn new VariablesManager()\n\t\t\t\t})\n\t\t\t\t.addService('actions_eventRepository', () => {\n\t\t\t\t\treturn new EventsRepository()\n\t\t\t\t})\n\t\t\t\t.addService('actions_eventDispatcher', ({ actions_eventRepository, actions_variableManager }) => {\n\t\t\t\t\tconst webhookTargetHandler = new WebhookTargetHandler(new WebhookFetcherNative())\n\t\t\t\t\tconst targetHandlerResolver = new TargetHandlerResolver(webhookTargetHandler)\n\t\t\t\t\treturn new EventDispatcher(actions_eventRepository, actions_variableManager, targetHandlerResolver)\n\t\t\t\t})\n\t\t\t\t.addService('actions_dispatchWorkerSupervisorFactory', ({ actions_eventDispatcher }) => {\n\t\t\t\t\tconst projectDispatcherFactory = new ProjectDispatcherFactory(actions_eventDispatcher)\n\t\t\t\t\treturn new DispatchWorkerSupervisorFactory(projectDispatcherFactory)\n\t\t\t\t})\n\t\t\t\t.addService('actions_authorizator', () => {\n\t\t\t\t\treturn new Authorizator.Default(new AccessEvaluator.PermissionEvaluator(new ActionsPermissionsFactory().create()))\n\t\t\t\t})\n\t\t\t\t.setupService(\n\t\t\t\t\t'application',\n\t\t\t\t\t(\n\t\t\t\t\t\tit,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprojectContextResolver,\n\t\t\t\t\t\t\tdebugMode,\n\t\t\t\t\t\t\tactions_eventRepository,\n\t\t\t\t\t\t\tactions_eventDispatcher,\n\t\t\t\t\t\t\tactions_dispatchWorkerSupervisorFactory,\n\t\t\t\t\t\t\tactions_variableManager,\n\t\t\t\t\t\t\tactions_authorizator,\n\t\t\t\t\t\t},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst handlerFactory = new ActionsGraphQLHandlerFactory()\n\t\t\t\t\t\tconst eventsQueryResolver = new EventsQueryResolver()\n\t\t\t\t\t\tconst processBatchMutationResolver = new ProcessBatchMutationResolver(actions_eventDispatcher)\n\t\t\t\t\t\tconst variablesQueryResolver = new VariablesQueryResolver(actions_variableManager)\n\t\t\t\t\t\tconst setVariablesMutationResolver = new SetVariablesMutationResolver(actions_variableManager)\n\t\t\t\t\t\tconst resolversFactory = new ResolversFactory(\n\t\t\t\t\t\t\teventsQueryResolver,\n\t\t\t\t\t\t\tprocessBatchMutationResolver,\n\t\t\t\t\t\t\tvariablesQueryResolver,\n\t\t\t\t\t\t\tsetVariablesMutationResolver,\n\t\t\t\t\t\t\tnew RetryEventMutationResolver(actions_eventRepository),\n\t\t\t\t\t\t\tnew StopEventMutationResolver(actions_eventRepository),\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tconst actionsContextResolver = new ActionsContextResolver(debugMode, projectContextResolver)\n\t\t\t\t\t\tconst actionsMiddlewareFactory = new ActionsApiMiddlewareFactory(\n\t\t\t\t\t\t\tactionsContextResolver,\n\t\t\t\t\t\t\thandlerFactory.create(resolversFactory),\n\t\t\t\t\t\t\tactions_authorizator,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst actionsWebsocketMiddlewareFactory = new ActionsWebsocketControllerFactory(\n\t\t\t\t\t\t\tdebugMode,\n\t\t\t\t\t\t\tactionsContextResolver,\n\t\t\t\t\t\t\tactions_dispatchWorkerSupervisorFactory,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tit.addRoute('actions', '/actions/:projectSlug', actionsMiddlewareFactory.create())\n\t\t\t\t\t\tit.addWebsocketRoute('actions', '/actions/_worker', actionsWebsocketMiddlewareFactory.create())\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\t.setupService(\n\t\t\t\t\t'applicationWorkers',\n\t\t\t\t\t(it, { actions_dispatchWorkerSupervisorFactory, projectGroupContainer, projectGroupContainerResolver, serverConfig }) => {\n\t\t\t\t\t\tif (!(serverConfig as any).projectGroup) {\n\t\t\t\t\t\t\tit.registerWorker(this.name, actions_dispatchWorkerSupervisorFactory.create(projectGroupContainer))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tit.registerWorker(this.name, new LazyDispatchWorker(projectGroupContainerResolver, actions_dispatchWorkerSupervisorFactory))\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t) as unknown as MasterContainerBuilder\n\t\t}\n\t\treturn hook\n\t}\n}\n"],"names":["migrationsGroup","ActionsExecutionContainerHookFactory","ListenerStoreProvider","VariablesManager","EventsRepository","WebhookTargetHandler","WebhookFetcherNative","TargetHandlerResolver","EventDispatcher","ProjectDispatcherFactory","DispatchWorkerSupervisorFactory","Authorizator","AccessEvaluator","ActionsPermissionsFactory","ActionsGraphQLHandlerFactory","EventsQueryResolver","ProcessBatchMutationResolver","VariablesQueryResolver","SetVariablesMutationResolver","ResolversFactory","RetryEventMutationResolver","StopEventMutationResolver","ActionsContextResolver","ActionsApiMiddlewareFactory","ActionsWebsocketControllerFactory","LazyDispatchWorker"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAqB,cAAgC;AAAA,EAArD,cAAA;AACC,kBAAA,MAAA,QAAO,mBAAA;AAAA,EAAA;AAAA,EAEP,sBAAsC;AACrC,WAAOA,MAAAA;AAAAA,EACR;AAAA,EAEA,4BAA4B;AAC3B,UAAM,cAAc,IAAIC,0EAAqC,IAAIC,sBAAAA,uBAAuB;AACxF,WAAO,YAAY,OAAA;AAAA,EACpB;AAAA,EAEA,yBAAyB;AACxB,UAAM,OAA4B,CAAC,YAAoC;AACtE,aAAO,QACL,WAAW,2BAA2B,MAAM;AAC5C,eAAO,IAAIC,iBAAAA,iBAAA;AAAA,MACZ,CAAC,EACA,WAAW,2BAA2B,MAAM;AAC5C,eAAO,IAAIC,iBAAAA,iBAAA;AAAA,MACZ,CAAC,EACA,WAAW,2BAA2B,CAAC,EAAE,yBAAyB,8BAA8B;AAChG,cAAM,uBAAuB,IAAIC,0CAAqB,IAAIC,eAAAA,sBAAsB;AAChF,cAAM,wBAAwB,IAAIC,sBAAAA,sBAAsB,oBAAoB;AAC5E,eAAO,IAAIC,gBAAAA,gBAAgB,yBAAyB,yBAAyB,qBAAqB;AAAA,MACnG,CAAC,EACA,WAAW,2CAA2C,CAAC,EAAE,8BAA8B;AACvF,cAAM,2BAA2B,IAAIC,kBAAAA,yBAAyB,uBAAuB;AACrF,eAAO,IAAIC,yBAAAA,gCAAgC,wBAAwB;AAAA,MACpE,CAAC,EACA,WAAW,wBAAwB,MAAM;AACzC,eAAO,IAAIC,cAAAA,aAAa,QAAQ,IAAIC,cAAAA,gBAAgB,oBAAoB,IAAIC,0BAAAA,0BAAA,EAA4B,OAAA,CAAQ,CAAC;AAAA,MAClH,CAAC,EACA;AAAA,QACA;AAAA,QACA,CACC,IACA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,MAEG;AACJ,gBAAM,iBAAiB,IAAIC,0DAAA;AAC3B,gBAAM,sBAAsB,IAAIC,wCAAA;AAChC,gBAAM,+BAA+B,IAAIC,6BAAAA,6BAA6B,uBAAuB;AAC7F,gBAAM,yBAAyB,IAAIC,uBAAAA,uBAAuB,uBAAuB;AACjF,gBAAM,+BAA+B,IAAIC,6BAAAA,6BAA6B,uBAAuB;AAC7F,gBAAM,mBAAmB,IAAIC,iBAAAA;AAAAA,YAC5B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAIC,2BAAAA,2BAA2B,uBAAuB;AAAA,YACtD,IAAIC,0BAAAA,0BAA0B,uBAAuB;AAAA,UAAA;AAGtD,gBAAM,yBAAyB,IAAIC,8CAAuB,WAAW,sBAAsB;AAC3F,gBAAM,2BAA2B,IAAIC,4BAAAA;AAAAA,YACpC;AAAA,YACA,eAAe,OAAO,gBAAgB;AAAA,YACtC;AAAA,UAAA;AAED,gBAAM,oCAAoC,IAAIC,kCAAAA;AAAAA,YAC7C;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAED,aAAG,SAAS,WAAW,yBAAyB,yBAAyB,QAAQ;AACjF,aAAG,kBAAkB,WAAW,oBAAoB,kCAAkC,QAAQ;AAAA,QAC/F;AAAA,MAAA,EAEA;AAAA,QACA;AAAA,QACA,CAAC,IAAI,EAAE,yCAAyC,uBAAuB,+BAA+B,mBAAmB;AACxH,cAAI,CAAE,aAAqB,cAAc;AACxC,eAAG,eAAe,KAAK,MAAM,wCAAwC,OAAO,qBAAqB,CAAC;AAAA,UACnG,OAAO;AACN,eAAG,eAAe,KAAK,MAAM,IAAIC,sCAAmB,+BAA+B,uCAAuC,CAAC;AAAA,UAC5H;AAAA,QACD;AAAA,MAAA;AAAA,IAEH;AACA,WAAO;AAAA,EACR;AACD;;;;;;;;;"}
|
package/dist/production/index.js
CHANGED
|
@@ -16,6 +16,7 @@ import { WebhookTargetHandler } from "./src/dispatch/WebhookTargetHandler.js";
|
|
|
16
16
|
import { ActionsContextResolver } from "./src/graphql/http/ActionsContextResolver.js";
|
|
17
17
|
import { ActionsWebsocketControllerFactory } from "./src/graphql/http/ActionsWebsocketControllerFactory.js";
|
|
18
18
|
import { DispatchWorkerSupervisorFactory } from "./src/dispatch/DispatchWorkerSupervisor.js";
|
|
19
|
+
import { LazyDispatchWorker } from "./src/dispatch/LazyDispatchWorker.js";
|
|
19
20
|
import { ProjectDispatcherFactory } from "./src/dispatch/ProjectDispatcher.js";
|
|
20
21
|
import { VariablesQueryResolver } from "./src/graphql/resolvers/query/VariablesQueryResolver.js";
|
|
21
22
|
import { VariablesManager } from "./src/model/VariablesManager.js";
|
|
@@ -96,11 +97,16 @@ class ActionsPlugin {
|
|
|
96
97
|
it.addRoute("actions", "/actions/:projectSlug", actionsMiddlewareFactory.create());
|
|
97
98
|
it.addWebsocketRoute("actions", "/actions/_worker", actionsWebsocketMiddlewareFactory.create());
|
|
98
99
|
}
|
|
99
|
-
).setupService(
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
).setupService(
|
|
101
|
+
"applicationWorkers",
|
|
102
|
+
(it, { actions_dispatchWorkerSupervisorFactory, projectGroupContainer, projectGroupContainerResolver, serverConfig }) => {
|
|
103
|
+
if (!serverConfig.projectGroup) {
|
|
104
|
+
it.registerWorker(this.name, actions_dispatchWorkerSupervisorFactory.create(projectGroupContainer));
|
|
105
|
+
} else {
|
|
106
|
+
it.registerWorker(this.name, new LazyDispatchWorker(projectGroupContainerResolver, actions_dispatchWorkerSupervisorFactory));
|
|
107
|
+
}
|
|
102
108
|
}
|
|
103
|
-
|
|
109
|
+
);
|
|
104
110
|
};
|
|
105
111
|
return hook;
|
|
106
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../packages/engine-actions/src/index.ts"],"sourcesContent":["import { Plugin } from '@contember/engine-plugins'\nimport { migrationsGroup } from './migrations'\nimport { ActionsExecutionContainerHookFactory } from './ActionsExecutionContainerHookFactory'\nimport { ListenerStoreProvider } from './ListenerStoreProvider'\nimport { MigrationGroup } from '@contember/database-migrations'\nimport { MasterContainerBuilder, MasterContainerHook } from '@contember/engine-http'\nimport { ActionsApiMiddlewareFactory } from './graphql/http/ActionsApiMiddlewareFactory'\nimport { ActionsGraphQLHandlerFactory } from './graphql/http/ActionsGraphQLHandlerFactory'\nimport { ResolversFactory } from './graphql/resolvers/ResolversFactory'\nimport {\n\tEventsQueryResolver,\n\tProcessBatchMutationResolver,\n\tRetryEventMutationResolver,\n\tSetVariablesMutationResolver,\n\tStopEventMutationResolver,\n} from './graphql/resolvers'\nimport { EventDispatcher } from './dispatch/EventDispatcher'\nimport { EventsRepository } from './dispatch/EventsRepository'\nimport { TargetHandlerResolver } from './dispatch/TargetHandlerResolver'\nimport { WebhookTargetHandler } from './dispatch/WebhookTargetHandler'\nimport { ActionsContextResolver } from './graphql/http/ActionsContextResolver'\nimport { ActionsWebsocketControllerFactory } from './graphql/http/ActionsWebsocketControllerFactory'\nimport { DispatchWorkerSupervisorFactory } from './dispatch/DispatchWorkerSupervisor'\nimport { ProjectDispatcherFactory } from './dispatch/ProjectDispatcher'\nimport { VariablesQueryResolver } from './graphql/resolvers/query/VariablesQueryResolver'\nimport { VariablesManager } from './model/VariablesManager'\nimport { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { ActionsPermissionsFactory } from './authorization'\nimport { WebhookFetcherNative } from './dispatch/WebhookFetcher'\n\nexport { TriggerHandler, TriggerIndirectChangesFetcher, TriggerListenersFactory, TriggerListenersStore, TriggerPayloadManager } from './triggers'\nexport { ActionsExecutionContainerHookFactory } from './ActionsExecutionContainerHookFactory'\nexport { ListenerStoreProvider } from './ListenerStoreProvider'\n\nexport default class ActionsPlugin implements Plugin {\n\tname = 'contember/actions'\n\n\tgetSystemMigrations(): MigrationGroup {\n\t\treturn migrationsGroup\n\t}\n\n\tgetExecutionContainerHook() {\n\t\tconst hookFactory = new ActionsExecutionContainerHookFactory(new ListenerStoreProvider())\n\t\treturn hookFactory.create()\n\t}\n\n\tgetMasterContainerHook() {\n\t\tconst hook: MasterContainerHook = (builder: MasterContainerBuilder) => {\n\t\t\treturn builder\n\t\t\t\t.addService('actions_variableManager', () => {\n\t\t\t\t\treturn new VariablesManager()\n\t\t\t\t})\n\t\t\t\t.addService('actions_eventRepository', () => {\n\t\t\t\t\treturn new EventsRepository()\n\t\t\t\t})\n\t\t\t\t.addService('actions_eventDispatcher', ({ actions_eventRepository, actions_variableManager }) => {\n\t\t\t\t\tconst webhookTargetHandler = new WebhookTargetHandler(new WebhookFetcherNative())\n\t\t\t\t\tconst targetHandlerResolver = new TargetHandlerResolver(webhookTargetHandler)\n\t\t\t\t\treturn new EventDispatcher(actions_eventRepository, actions_variableManager, targetHandlerResolver)\n\t\t\t\t})\n\t\t\t\t.addService('actions_dispatchWorkerSupervisorFactory', ({ actions_eventDispatcher }) => {\n\t\t\t\t\tconst projectDispatcherFactory = new ProjectDispatcherFactory(actions_eventDispatcher)\n\t\t\t\t\treturn new DispatchWorkerSupervisorFactory(projectDispatcherFactory)\n\t\t\t\t})\n\t\t\t\t.addService('actions_authorizator', () => {\n\t\t\t\t\treturn new Authorizator.Default(new AccessEvaluator.PermissionEvaluator(new ActionsPermissionsFactory().create()))\n\t\t\t\t})\n\t\t\t\t.setupService(\n\t\t\t\t\t'application',\n\t\t\t\t\t(\n\t\t\t\t\t\tit,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprojectContextResolver,\n\t\t\t\t\t\t\tdebugMode,\n\t\t\t\t\t\t\tactions_eventRepository,\n\t\t\t\t\t\t\tactions_eventDispatcher,\n\t\t\t\t\t\t\tactions_dispatchWorkerSupervisorFactory,\n\t\t\t\t\t\t\tactions_variableManager,\n\t\t\t\t\t\t\tactions_authorizator,\n\t\t\t\t\t\t},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst handlerFactory = new ActionsGraphQLHandlerFactory()\n\t\t\t\t\t\tconst eventsQueryResolver = new EventsQueryResolver()\n\t\t\t\t\t\tconst processBatchMutationResolver = new ProcessBatchMutationResolver(actions_eventDispatcher)\n\t\t\t\t\t\tconst variablesQueryResolver = new VariablesQueryResolver(actions_variableManager)\n\t\t\t\t\t\tconst setVariablesMutationResolver = new SetVariablesMutationResolver(actions_variableManager)\n\t\t\t\t\t\tconst resolversFactory = new ResolversFactory(\n\t\t\t\t\t\t\teventsQueryResolver,\n\t\t\t\t\t\t\tprocessBatchMutationResolver,\n\t\t\t\t\t\t\tvariablesQueryResolver,\n\t\t\t\t\t\t\tsetVariablesMutationResolver,\n\t\t\t\t\t\t\tnew RetryEventMutationResolver(actions_eventRepository),\n\t\t\t\t\t\t\tnew StopEventMutationResolver(actions_eventRepository),\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tconst actionsContextResolver = new ActionsContextResolver(debugMode, projectContextResolver)\n\t\t\t\t\t\tconst actionsMiddlewareFactory = new ActionsApiMiddlewareFactory(\n\t\t\t\t\t\t\tactionsContextResolver,\n\t\t\t\t\t\t\thandlerFactory.create(resolversFactory),\n\t\t\t\t\t\t\tactions_authorizator,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst actionsWebsocketMiddlewareFactory = new ActionsWebsocketControllerFactory(\n\t\t\t\t\t\t\tdebugMode,\n\t\t\t\t\t\t\tactionsContextResolver,\n\t\t\t\t\t\t\tactions_dispatchWorkerSupervisorFactory,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tit.addRoute('actions', '/actions/:projectSlug', actionsMiddlewareFactory.create())\n\t\t\t\t\t\tit.addWebsocketRoute('actions', '/actions/_worker', actionsWebsocketMiddlewareFactory.create())\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\t.setupService('applicationWorkers'
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../packages/engine-actions/src/index.ts"],"sourcesContent":["import { Plugin } from '@contember/engine-plugins'\nimport { migrationsGroup } from './migrations'\nimport { ActionsExecutionContainerHookFactory } from './ActionsExecutionContainerHookFactory'\nimport { ListenerStoreProvider } from './ListenerStoreProvider'\nimport { MigrationGroup } from '@contember/database-migrations'\nimport { MasterContainerBuilder, MasterContainerHook } from '@contember/engine-http'\nimport { ActionsApiMiddlewareFactory } from './graphql/http/ActionsApiMiddlewareFactory'\nimport { ActionsGraphQLHandlerFactory } from './graphql/http/ActionsGraphQLHandlerFactory'\nimport { ResolversFactory } from './graphql/resolvers/ResolversFactory'\nimport {\n\tEventsQueryResolver,\n\tProcessBatchMutationResolver,\n\tRetryEventMutationResolver,\n\tSetVariablesMutationResolver,\n\tStopEventMutationResolver,\n} from './graphql/resolvers'\nimport { EventDispatcher } from './dispatch/EventDispatcher'\nimport { EventsRepository } from './dispatch/EventsRepository'\nimport { TargetHandlerResolver } from './dispatch/TargetHandlerResolver'\nimport { WebhookTargetHandler } from './dispatch/WebhookTargetHandler'\nimport { ActionsContextResolver } from './graphql/http/ActionsContextResolver'\nimport { ActionsWebsocketControllerFactory } from './graphql/http/ActionsWebsocketControllerFactory'\nimport { DispatchWorkerSupervisorFactory } from './dispatch/DispatchWorkerSupervisor'\nimport { LazyDispatchWorker } from './dispatch/LazyDispatchWorker'\nimport { ProjectDispatcherFactory } from './dispatch/ProjectDispatcher'\nimport { VariablesQueryResolver } from './graphql/resolvers/query/VariablesQueryResolver'\nimport { VariablesManager } from './model/VariablesManager'\nimport { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { ActionsPermissionsFactory } from './authorization'\nimport { WebhookFetcherNative } from './dispatch/WebhookFetcher'\n\nexport { TriggerHandler, TriggerIndirectChangesFetcher, TriggerListenersFactory, TriggerListenersStore, TriggerPayloadManager } from './triggers'\nexport { ActionsExecutionContainerHookFactory } from './ActionsExecutionContainerHookFactory'\nexport { ListenerStoreProvider } from './ListenerStoreProvider'\n\nexport default class ActionsPlugin implements Plugin {\n\tname = 'contember/actions'\n\n\tgetSystemMigrations(): MigrationGroup {\n\t\treturn migrationsGroup\n\t}\n\n\tgetExecutionContainerHook() {\n\t\tconst hookFactory = new ActionsExecutionContainerHookFactory(new ListenerStoreProvider())\n\t\treturn hookFactory.create()\n\t}\n\n\tgetMasterContainerHook() {\n\t\tconst hook: MasterContainerHook = (builder: MasterContainerBuilder) => {\n\t\t\treturn builder\n\t\t\t\t.addService('actions_variableManager', () => {\n\t\t\t\t\treturn new VariablesManager()\n\t\t\t\t})\n\t\t\t\t.addService('actions_eventRepository', () => {\n\t\t\t\t\treturn new EventsRepository()\n\t\t\t\t})\n\t\t\t\t.addService('actions_eventDispatcher', ({ actions_eventRepository, actions_variableManager }) => {\n\t\t\t\t\tconst webhookTargetHandler = new WebhookTargetHandler(new WebhookFetcherNative())\n\t\t\t\t\tconst targetHandlerResolver = new TargetHandlerResolver(webhookTargetHandler)\n\t\t\t\t\treturn new EventDispatcher(actions_eventRepository, actions_variableManager, targetHandlerResolver)\n\t\t\t\t})\n\t\t\t\t.addService('actions_dispatchWorkerSupervisorFactory', ({ actions_eventDispatcher }) => {\n\t\t\t\t\tconst projectDispatcherFactory = new ProjectDispatcherFactory(actions_eventDispatcher)\n\t\t\t\t\treturn new DispatchWorkerSupervisorFactory(projectDispatcherFactory)\n\t\t\t\t})\n\t\t\t\t.addService('actions_authorizator', () => {\n\t\t\t\t\treturn new Authorizator.Default(new AccessEvaluator.PermissionEvaluator(new ActionsPermissionsFactory().create()))\n\t\t\t\t})\n\t\t\t\t.setupService(\n\t\t\t\t\t'application',\n\t\t\t\t\t(\n\t\t\t\t\t\tit,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprojectContextResolver,\n\t\t\t\t\t\t\tdebugMode,\n\t\t\t\t\t\t\tactions_eventRepository,\n\t\t\t\t\t\t\tactions_eventDispatcher,\n\t\t\t\t\t\t\tactions_dispatchWorkerSupervisorFactory,\n\t\t\t\t\t\t\tactions_variableManager,\n\t\t\t\t\t\t\tactions_authorizator,\n\t\t\t\t\t\t},\n\t\t\t\t\t) => {\n\t\t\t\t\t\tconst handlerFactory = new ActionsGraphQLHandlerFactory()\n\t\t\t\t\t\tconst eventsQueryResolver = new EventsQueryResolver()\n\t\t\t\t\t\tconst processBatchMutationResolver = new ProcessBatchMutationResolver(actions_eventDispatcher)\n\t\t\t\t\t\tconst variablesQueryResolver = new VariablesQueryResolver(actions_variableManager)\n\t\t\t\t\t\tconst setVariablesMutationResolver = new SetVariablesMutationResolver(actions_variableManager)\n\t\t\t\t\t\tconst resolversFactory = new ResolversFactory(\n\t\t\t\t\t\t\teventsQueryResolver,\n\t\t\t\t\t\t\tprocessBatchMutationResolver,\n\t\t\t\t\t\t\tvariablesQueryResolver,\n\t\t\t\t\t\t\tsetVariablesMutationResolver,\n\t\t\t\t\t\t\tnew RetryEventMutationResolver(actions_eventRepository),\n\t\t\t\t\t\t\tnew StopEventMutationResolver(actions_eventRepository),\n\t\t\t\t\t\t)\n\n\t\t\t\t\t\tconst actionsContextResolver = new ActionsContextResolver(debugMode, projectContextResolver)\n\t\t\t\t\t\tconst actionsMiddlewareFactory = new ActionsApiMiddlewareFactory(\n\t\t\t\t\t\t\tactionsContextResolver,\n\t\t\t\t\t\t\thandlerFactory.create(resolversFactory),\n\t\t\t\t\t\t\tactions_authorizator,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst actionsWebsocketMiddlewareFactory = new ActionsWebsocketControllerFactory(\n\t\t\t\t\t\t\tdebugMode,\n\t\t\t\t\t\t\tactionsContextResolver,\n\t\t\t\t\t\t\tactions_dispatchWorkerSupervisorFactory,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tit.addRoute('actions', '/actions/:projectSlug', actionsMiddlewareFactory.create())\n\t\t\t\t\t\tit.addWebsocketRoute('actions', '/actions/_worker', actionsWebsocketMiddlewareFactory.create())\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\t.setupService(\n\t\t\t\t\t'applicationWorkers',\n\t\t\t\t\t(it, { actions_dispatchWorkerSupervisorFactory, projectGroupContainer, projectGroupContainerResolver, serverConfig }) => {\n\t\t\t\t\t\tif (!(serverConfig as any).projectGroup) {\n\t\t\t\t\t\t\tit.registerWorker(this.name, actions_dispatchWorkerSupervisorFactory.create(projectGroupContainer))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tit.registerWorker(this.name, new LazyDispatchWorker(projectGroupContainerResolver, actions_dispatchWorkerSupervisorFactory))\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t) as unknown as MasterContainerBuilder\n\t\t}\n\t\treturn hook\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAqB,cAAgC;AAAA,EAArD,cAAA;AACC,kBAAA,MAAA,QAAO,mBAAA;AAAA,EAAA;AAAA,EAEP,sBAAsC;AACrC,WAAO;AAAA,EACR;AAAA,EAEA,4BAA4B;AAC3B,UAAM,cAAc,IAAI,qCAAqC,IAAI,uBAAuB;AACxF,WAAO,YAAY,OAAA;AAAA,EACpB;AAAA,EAEA,yBAAyB;AACxB,UAAM,OAA4B,CAAC,YAAoC;AACtE,aAAO,QACL,WAAW,2BAA2B,MAAM;AAC5C,eAAO,IAAI,iBAAA;AAAA,MACZ,CAAC,EACA,WAAW,2BAA2B,MAAM;AAC5C,eAAO,IAAI,iBAAA;AAAA,MACZ,CAAC,EACA,WAAW,2BAA2B,CAAC,EAAE,yBAAyB,8BAA8B;AAChG,cAAM,uBAAuB,IAAI,qBAAqB,IAAI,sBAAsB;AAChF,cAAM,wBAAwB,IAAI,sBAAsB,oBAAoB;AAC5E,eAAO,IAAI,gBAAgB,yBAAyB,yBAAyB,qBAAqB;AAAA,MACnG,CAAC,EACA,WAAW,2CAA2C,CAAC,EAAE,8BAA8B;AACvF,cAAM,2BAA2B,IAAI,yBAAyB,uBAAuB;AACrF,eAAO,IAAI,gCAAgC,wBAAwB;AAAA,MACpE,CAAC,EACA,WAAW,wBAAwB,MAAM;AACzC,eAAO,IAAI,aAAa,QAAQ,IAAI,gBAAgB,oBAAoB,IAAI,0BAAA,EAA4B,OAAA,CAAQ,CAAC;AAAA,MAClH,CAAC,EACA;AAAA,QACA;AAAA,QACA,CACC,IACA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,MAEG;AACJ,gBAAM,iBAAiB,IAAI,6BAAA;AAC3B,gBAAM,sBAAsB,IAAI,oBAAA;AAChC,gBAAM,+BAA+B,IAAI,6BAA6B,uBAAuB;AAC7F,gBAAM,yBAAyB,IAAI,uBAAuB,uBAAuB;AACjF,gBAAM,+BAA+B,IAAI,6BAA6B,uBAAuB;AAC7F,gBAAM,mBAAmB,IAAI;AAAA,YAC5B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,IAAI,2BAA2B,uBAAuB;AAAA,YACtD,IAAI,0BAA0B,uBAAuB;AAAA,UAAA;AAGtD,gBAAM,yBAAyB,IAAI,uBAAuB,WAAW,sBAAsB;AAC3F,gBAAM,2BAA2B,IAAI;AAAA,YACpC;AAAA,YACA,eAAe,OAAO,gBAAgB;AAAA,YACtC;AAAA,UAAA;AAED,gBAAM,oCAAoC,IAAI;AAAA,YAC7C;AAAA,YACA;AAAA,YACA;AAAA,UAAA;AAED,aAAG,SAAS,WAAW,yBAAyB,yBAAyB,QAAQ;AACjF,aAAG,kBAAkB,WAAW,oBAAoB,kCAAkC,QAAQ;AAAA,QAC/F;AAAA,MAAA,EAEA;AAAA,QACA;AAAA,QACA,CAAC,IAAI,EAAE,yCAAyC,uBAAuB,+BAA+B,mBAAmB;AACxH,cAAI,CAAE,aAAqB,cAAc;AACxC,eAAG,eAAe,KAAK,MAAM,wCAAwC,OAAO,qBAAqB,CAAC;AAAA,UACnG,OAAO;AACN,eAAG,eAAe,KAAK,MAAM,IAAI,mBAAmB,+BAA+B,uCAAuC,CAAC;AAAA,UAC5H;AAAA,QACD;AAAA,MAAA;AAAA,IAEH;AACA,WAAO;AAAA,EACR;AACD;"}
|
|
@@ -14,7 +14,7 @@ class ActionsExecutionContainerHookFactory {
|
|
|
14
14
|
return (builder) => {
|
|
15
15
|
return builder.setupService(
|
|
16
16
|
"mapperFactory",
|
|
17
|
-
(mapperFactory, { whereBuilder, schema, pathFactory, systemSchema, providers, stage, project, schemaMeta, joinBuilder, userInfo }) => {
|
|
17
|
+
(mapperFactory, { whereBuilder, schema, pathFactory, systemSchema, providers, stage, project, schemaMeta, joinBuilder, userInfo, triggeredActionsCollector }) => {
|
|
18
18
|
mapperFactory.hooks.push((mapper) => {
|
|
19
19
|
const triggerPayloadPersister = new TriggerPayloadPersister.TriggerPayloadPersister(
|
|
20
20
|
mapper,
|
|
@@ -24,7 +24,8 @@ class ActionsExecutionContainerHookFactory {
|
|
|
24
24
|
stage.id,
|
|
25
25
|
schemaMeta.id,
|
|
26
26
|
mapper.identityId,
|
|
27
|
-
userInfo
|
|
27
|
+
userInfo,
|
|
28
|
+
triggeredActionsCollector
|
|
28
29
|
);
|
|
29
30
|
const triggerPayloadBuilder = new TriggerPayloadBuilder.TriggerPayloadBuilder(mapper);
|
|
30
31
|
const payloadManager = new TriggerPayloadManager.TriggerPayloadManager(triggerPayloadBuilder, triggerPayloadPersister);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionsExecutionContainerHookFactory.cjs","sources":["../../../../packages/engine-actions/src/ActionsExecutionContainerHookFactory.ts"],"sourcesContent":["import { TriggerHandler, TriggerIndirectChangesFetcher, TriggerPayloadManager } from './triggers'\nimport { ListenerStoreProvider } from './ListenerStoreProvider'\nimport { TriggerPayloadBuilder } from './triggers/TriggerPayloadBuilder'\nimport { TriggerPayloadPersister } from './triggers/TriggerPayloadPersister'\nimport { ExecutionContainerHook } from '@contember/engine-content-api'\n\nexport class ActionsExecutionContainerHookFactory {\n\tconstructor(\n\t\tprivate readonly listenerStoreProvider: ListenerStoreProvider,\n\t) {\n\t}\n\n\tcreate(): ExecutionContainerHook {\n\t\treturn builder => {\n\t\t\treturn builder.setupService(\n\t\t\t\t'mapperFactory',\n\t\t\t\t(
|
|
1
|
+
{"version":3,"file":"ActionsExecutionContainerHookFactory.cjs","sources":["../../../../packages/engine-actions/src/ActionsExecutionContainerHookFactory.ts"],"sourcesContent":["import { TriggerHandler, TriggerIndirectChangesFetcher, TriggerPayloadManager } from './triggers'\nimport { ListenerStoreProvider } from './ListenerStoreProvider'\nimport { TriggerPayloadBuilder } from './triggers/TriggerPayloadBuilder'\nimport { TriggerPayloadPersister } from './triggers/TriggerPayloadPersister'\nimport { ExecutionContainerHook } from '@contember/engine-content-api'\n\nexport class ActionsExecutionContainerHookFactory {\n\tconstructor(\n\t\tprivate readonly listenerStoreProvider: ListenerStoreProvider,\n\t) {\n\t}\n\n\tcreate(): ExecutionContainerHook {\n\t\treturn builder => {\n\t\t\treturn builder.setupService(\n\t\t\t\t'mapperFactory',\n\t\t\t\t(\n\t\t\t\t\tmapperFactory,\n\t\t\t\t\t{ whereBuilder, schema, pathFactory, systemSchema, providers, stage, project, schemaMeta, joinBuilder, userInfo, triggeredActionsCollector },\n\t\t\t\t) => {\n\t\t\t\t\tmapperFactory.hooks.push(mapper => {\n\t\t\t\t\t\tconst triggerPayloadPersister = new TriggerPayloadPersister(\n\t\t\t\t\t\t\tmapper,\n\t\t\t\t\t\t\tmapper.db.forSchema(systemSchema),\n\t\t\t\t\t\t\tproviders,\n\t\t\t\t\t\t\tproject.slug,\n\t\t\t\t\t\t\tstage.id,\n\t\t\t\t\t\t\tschemaMeta.id,\n\t\t\t\t\t\t\tmapper.identityId,\n\t\t\t\t\t\t\tuserInfo,\n\t\t\t\t\t\t\ttriggeredActionsCollector,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst triggerPayloadBuilder = new TriggerPayloadBuilder(mapper)\n\t\t\t\t\t\tconst payloadManager = new TriggerPayloadManager(triggerPayloadBuilder, triggerPayloadPersister)\n\t\t\t\t\t\tconst changesFetcher = new TriggerIndirectChangesFetcher(schema.model, mapper, whereBuilder, joinBuilder, pathFactory)\n\t\t\t\t\t\tconst listenersStore = this.listenerStoreProvider.getListenerStore(schema)\n\t\t\t\t\t\tconst triggerHandler = new TriggerHandler(payloadManager, listenersStore, changesFetcher)\n\t\t\t\t\t\ttriggerHandler.attach(mapper.eventManager)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n}\n"],"names":["TriggerPayloadPersister","TriggerPayloadBuilder","TriggerPayloadManager","TriggerIndirectChangesFetcher","TriggerHandler"],"mappings":";;;;;;;;AAMO,MAAM,qCAAqC;AAAA,EACjD,YACkB,uBAChB;AADgB,SAAA,wBAAA;AAAA,EAElB;AAAA,EAEA,SAAiC;AAChC,WAAO,CAAA,YAAW;AACjB,aAAO,QAAQ;AAAA,QACd;AAAA,QACA,CACC,eACA,EAAE,cAAc,QAAQ,aAAa,cAAc,WAAW,OAAO,SAAS,YAAY,aAAa,UAAU,gCAC7G;AACJ,wBAAc,MAAM,KAAK,CAAA,WAAU;AAClC,kBAAM,0BAA0B,IAAIA,wBAAAA;AAAAA,cACnC;AAAA,cACA,OAAO,GAAG,UAAU,YAAY;AAAA,cAChC;AAAA,cACA,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP;AAAA,cACA;AAAA,YAAA;AAED,kBAAM,wBAAwB,IAAIC,sBAAAA,sBAAsB,MAAM;AAC9D,kBAAM,iBAAiB,IAAIC,4CAAsB,uBAAuB,uBAAuB;AAC/F,kBAAM,iBAAiB,IAAIC,8BAAAA,8BAA8B,OAAO,OAAO,QAAQ,cAAc,aAAa,WAAW;AACrH,kBAAM,iBAAiB,KAAK,sBAAsB,iBAAiB,MAAM;AACzE,kBAAM,iBAAiB,IAAIC,eAAAA,eAAe,gBAAgB,gBAAgB,cAAc;AACxF,2BAAe,OAAO,OAAO,YAAY;AAAA,UAC1C,CAAC;AAAA,QACF;AAAA,MAAA;AAAA,IAEF;AAAA,EACD;AACD;;"}
|
|
@@ -12,7 +12,7 @@ class ActionsExecutionContainerHookFactory {
|
|
|
12
12
|
return (builder) => {
|
|
13
13
|
return builder.setupService(
|
|
14
14
|
"mapperFactory",
|
|
15
|
-
(mapperFactory, { whereBuilder, schema, pathFactory, systemSchema, providers, stage, project, schemaMeta, joinBuilder, userInfo }) => {
|
|
15
|
+
(mapperFactory, { whereBuilder, schema, pathFactory, systemSchema, providers, stage, project, schemaMeta, joinBuilder, userInfo, triggeredActionsCollector }) => {
|
|
16
16
|
mapperFactory.hooks.push((mapper) => {
|
|
17
17
|
const triggerPayloadPersister = new TriggerPayloadPersister(
|
|
18
18
|
mapper,
|
|
@@ -22,7 +22,8 @@ class ActionsExecutionContainerHookFactory {
|
|
|
22
22
|
stage.id,
|
|
23
23
|
schemaMeta.id,
|
|
24
24
|
mapper.identityId,
|
|
25
|
-
userInfo
|
|
25
|
+
userInfo,
|
|
26
|
+
triggeredActionsCollector
|
|
26
27
|
);
|
|
27
28
|
const triggerPayloadBuilder = new TriggerPayloadBuilder(mapper);
|
|
28
29
|
const payloadManager = new TriggerPayloadManager(triggerPayloadBuilder, triggerPayloadPersister);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionsExecutionContainerHookFactory.js","sources":["../../../../packages/engine-actions/src/ActionsExecutionContainerHookFactory.ts"],"sourcesContent":["import { TriggerHandler, TriggerIndirectChangesFetcher, TriggerPayloadManager } from './triggers'\nimport { ListenerStoreProvider } from './ListenerStoreProvider'\nimport { TriggerPayloadBuilder } from './triggers/TriggerPayloadBuilder'\nimport { TriggerPayloadPersister } from './triggers/TriggerPayloadPersister'\nimport { ExecutionContainerHook } from '@contember/engine-content-api'\n\nexport class ActionsExecutionContainerHookFactory {\n\tconstructor(\n\t\tprivate readonly listenerStoreProvider: ListenerStoreProvider,\n\t) {\n\t}\n\n\tcreate(): ExecutionContainerHook {\n\t\treturn builder => {\n\t\t\treturn builder.setupService(\n\t\t\t\t'mapperFactory',\n\t\t\t\t(
|
|
1
|
+
{"version":3,"file":"ActionsExecutionContainerHookFactory.js","sources":["../../../../packages/engine-actions/src/ActionsExecutionContainerHookFactory.ts"],"sourcesContent":["import { TriggerHandler, TriggerIndirectChangesFetcher, TriggerPayloadManager } from './triggers'\nimport { ListenerStoreProvider } from './ListenerStoreProvider'\nimport { TriggerPayloadBuilder } from './triggers/TriggerPayloadBuilder'\nimport { TriggerPayloadPersister } from './triggers/TriggerPayloadPersister'\nimport { ExecutionContainerHook } from '@contember/engine-content-api'\n\nexport class ActionsExecutionContainerHookFactory {\n\tconstructor(\n\t\tprivate readonly listenerStoreProvider: ListenerStoreProvider,\n\t) {\n\t}\n\n\tcreate(): ExecutionContainerHook {\n\t\treturn builder => {\n\t\t\treturn builder.setupService(\n\t\t\t\t'mapperFactory',\n\t\t\t\t(\n\t\t\t\t\tmapperFactory,\n\t\t\t\t\t{ whereBuilder, schema, pathFactory, systemSchema, providers, stage, project, schemaMeta, joinBuilder, userInfo, triggeredActionsCollector },\n\t\t\t\t) => {\n\t\t\t\t\tmapperFactory.hooks.push(mapper => {\n\t\t\t\t\t\tconst triggerPayloadPersister = new TriggerPayloadPersister(\n\t\t\t\t\t\t\tmapper,\n\t\t\t\t\t\t\tmapper.db.forSchema(systemSchema),\n\t\t\t\t\t\t\tproviders,\n\t\t\t\t\t\t\tproject.slug,\n\t\t\t\t\t\t\tstage.id,\n\t\t\t\t\t\t\tschemaMeta.id,\n\t\t\t\t\t\t\tmapper.identityId,\n\t\t\t\t\t\t\tuserInfo,\n\t\t\t\t\t\t\ttriggeredActionsCollector,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst triggerPayloadBuilder = new TriggerPayloadBuilder(mapper)\n\t\t\t\t\t\tconst payloadManager = new TriggerPayloadManager(triggerPayloadBuilder, triggerPayloadPersister)\n\t\t\t\t\t\tconst changesFetcher = new TriggerIndirectChangesFetcher(schema.model, mapper, whereBuilder, joinBuilder, pathFactory)\n\t\t\t\t\t\tconst listenersStore = this.listenerStoreProvider.getListenerStore(schema)\n\t\t\t\t\t\tconst triggerHandler = new TriggerHandler(payloadManager, listenersStore, changesFetcher)\n\t\t\t\t\t\ttriggerHandler.attach(mapper.eventManager)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t)\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;;;AAMO,MAAM,qCAAqC;AAAA,EACjD,YACkB,uBAChB;AADgB,SAAA,wBAAA;AAAA,EAElB;AAAA,EAEA,SAAiC;AAChC,WAAO,CAAA,YAAW;AACjB,aAAO,QAAQ;AAAA,QACd;AAAA,QACA,CACC,eACA,EAAE,cAAc,QAAQ,aAAa,cAAc,WAAW,OAAO,SAAS,YAAY,aAAa,UAAU,gCAC7G;AACJ,wBAAc,MAAM,KAAK,CAAA,WAAU;AAClC,kBAAM,0BAA0B,IAAI;AAAA,cACnC;AAAA,cACA,OAAO,GAAG,UAAU,YAAY;AAAA,cAChC;AAAA,cACA,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,WAAW;AAAA,cACX,OAAO;AAAA,cACP;AAAA,cACA;AAAA,YAAA;AAED,kBAAM,wBAAwB,IAAI,sBAAsB,MAAM;AAC9D,kBAAM,iBAAiB,IAAI,sBAAsB,uBAAuB,uBAAuB;AAC/F,kBAAM,iBAAiB,IAAI,8BAA8B,OAAO,OAAO,QAAQ,cAAc,aAAa,WAAW;AACrH,kBAAM,iBAAiB,KAAK,sBAAsB,iBAAiB,MAAM;AACzE,kBAAM,iBAAiB,IAAI,eAAe,gBAAgB,gBAAgB,cAAc;AACxF,2BAAe,OAAO,OAAO,YAAY;AAAA,UAC1C,CAAC;AAAA,QACF;AAAA,MAAA;AAAA,IAEF;AAAA,EACD;AACD;"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const engineCommon = require("@contember/engine-common");
|
|
4
|
+
class LazyDispatchWorker {
|
|
5
|
+
constructor(projectGroupContainerResolver, supervisorFactory, supervisorOptions = { startupMax: 10 }) {
|
|
6
|
+
this.projectGroupContainerResolver = projectGroupContainerResolver;
|
|
7
|
+
this.supervisorFactory = supervisorFactory;
|
|
8
|
+
this.supervisorOptions = supervisorOptions;
|
|
9
|
+
}
|
|
10
|
+
async run({ logger, onError }) {
|
|
11
|
+
const running = /* @__PURE__ */ new Map();
|
|
12
|
+
let aborted = false;
|
|
13
|
+
const unlisten = this.projectGroupContainerResolver.on("create", ({ container, slug }) => {
|
|
14
|
+
const groupLabel = slug ?? "<default>";
|
|
15
|
+
const childLogger = logger.child({ projectGroup: groupLabel });
|
|
16
|
+
childLogger.debug(`Starting dispatch worker for project group ${groupLabel}`);
|
|
17
|
+
const supervised = new engineCommon.Supervisor(
|
|
18
|
+
this.supervisorFactory.create(container),
|
|
19
|
+
this.supervisorOptions
|
|
20
|
+
);
|
|
21
|
+
const runningPromise = supervised.run({
|
|
22
|
+
logger: childLogger,
|
|
23
|
+
onError: (e) => {
|
|
24
|
+
if (aborted) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
childLogger.error(e, { message: `Dispatch worker for project group ${groupLabel} crashed` });
|
|
28
|
+
onError(e);
|
|
29
|
+
}
|
|
30
|
+
}).catch((e) => {
|
|
31
|
+
if (!aborted) {
|
|
32
|
+
childLogger.error(e, { message: `Failed to start dispatch worker for project group ${groupLabel}` });
|
|
33
|
+
onError(e);
|
|
34
|
+
}
|
|
35
|
+
return void 0;
|
|
36
|
+
});
|
|
37
|
+
running.set(slug, runningPromise);
|
|
38
|
+
return () => {
|
|
39
|
+
running.delete(slug);
|
|
40
|
+
(async () => {
|
|
41
|
+
try {
|
|
42
|
+
const r = await runningPromise;
|
|
43
|
+
await r?.end();
|
|
44
|
+
} catch {
|
|
45
|
+
}
|
|
46
|
+
})();
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
end: async () => {
|
|
51
|
+
aborted = true;
|
|
52
|
+
unlisten();
|
|
53
|
+
const all = [...running.values()];
|
|
54
|
+
running.clear();
|
|
55
|
+
await Promise.allSettled(all.map(async (p) => {
|
|
56
|
+
try {
|
|
57
|
+
const r = await p;
|
|
58
|
+
await r?.end();
|
|
59
|
+
} catch {
|
|
60
|
+
}
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.LazyDispatchWorker = LazyDispatchWorker;
|
|
67
|
+
//# sourceMappingURL=LazyDispatchWorker.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LazyDispatchWorker.cjs","sources":["../../../../../packages/engine-actions/src/dispatch/LazyDispatchWorker.ts"],"sourcesContent":["import { Runnable, RunnableArgs, Running, Supervisor, SupervisorOptions } from '@contember/engine-common'\nimport { ProjectGroupContainerResolver } from '@contember/engine-http'\nimport { DispatchWorkerSupervisorFactory } from './DispatchWorkerSupervisor'\n\nexport class LazyDispatchWorker implements Runnable {\n\tconstructor(\n\t\tprivate readonly projectGroupContainerResolver: ProjectGroupContainerResolver,\n\t\tprivate readonly supervisorFactory: DispatchWorkerSupervisorFactory,\n\t\tprivate readonly supervisorOptions: SupervisorOptions = { startupMax: 10 },\n\t) {\n\t}\n\n\tpublic async run({ logger, onError }: RunnableArgs): Promise<Running> {\n\t\tconst running = new Map<string | undefined, Promise<Running | undefined>>()\n\t\tlet aborted = false\n\n\t\tconst unlisten = this.projectGroupContainerResolver.on('create', ({ container, slug }) => {\n\t\t\tconst groupLabel = slug ?? '<default>'\n\t\t\tconst childLogger = logger.child({ projectGroup: groupLabel })\n\t\t\tchildLogger.debug(`Starting dispatch worker for project group ${groupLabel}`)\n\n\t\t\tconst supervised = new Supervisor(\n\t\t\t\tthis.supervisorFactory.create(container),\n\t\t\t\tthis.supervisorOptions,\n\t\t\t)\n\t\t\tconst runningPromise: Promise<Running | undefined> = supervised.run({\n\t\t\t\tlogger: childLogger,\n\t\t\t\tonError: e => {\n\t\t\t\t\tif (aborted) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tchildLogger.error(e, { message: `Dispatch worker for project group ${groupLabel} crashed` })\n\t\t\t\t\tonError(e)\n\t\t\t\t},\n\t\t\t}).catch(e => {\n\t\t\t\tif (!aborted) {\n\t\t\t\t\tchildLogger.error(e, { message: `Failed to start dispatch worker for project group ${groupLabel}` })\n\t\t\t\t\tonError(e)\n\t\t\t\t}\n\t\t\t\treturn undefined\n\t\t\t})\n\t\t\trunning.set(slug, runningPromise)\n\n\t\t\treturn () => {\n\t\t\t\trunning.delete(slug)\n\t\t\t\t;(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst r = await runningPromise\n\t\t\t\t\t\tawait r?.end()\n\t\t\t\t\t} catch {\n\t\t\t\t\t}\n\t\t\t\t})()\n\t\t\t}\n\t\t})\n\n\t\treturn {\n\t\t\tend: async () => {\n\t\t\t\taborted = true\n\t\t\t\tunlisten()\n\t\t\t\tconst all = [...running.values()]\n\t\t\t\trunning.clear()\n\t\t\t\tawait Promise.allSettled(all.map(async p => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst r = await p\n\t\t\t\t\t\tawait r?.end()\n\t\t\t\t\t} catch {\n\t\t\t\t\t}\n\t\t\t\t}))\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["Supervisor"],"mappings":";;;AAIO,MAAM,mBAAuC;AAAA,EACnD,YACkB,+BACA,mBACA,oBAAuC,EAAE,YAAY,MACrE;AAHgB,SAAA,gCAAA;AACA,SAAA,oBAAA;AACA,SAAA,oBAAA;AAAA,EAElB;AAAA,EAEA,MAAa,IAAI,EAAE,QAAQ,WAA2C;AACrE,UAAM,8BAAc,IAAA;AACpB,QAAI,UAAU;AAEd,UAAM,WAAW,KAAK,8BAA8B,GAAG,UAAU,CAAC,EAAE,WAAW,WAAW;AACzF,YAAM,aAAa,QAAQ;AAC3B,YAAM,cAAc,OAAO,MAAM,EAAE,cAAc,YAAY;AAC7D,kBAAY,MAAM,8CAA8C,UAAU,EAAE;AAE5E,YAAM,aAAa,IAAIA,aAAAA;AAAAA,QACtB,KAAK,kBAAkB,OAAO,SAAS;AAAA,QACvC,KAAK;AAAA,MAAA;AAEN,YAAM,iBAA+C,WAAW,IAAI;AAAA,QACnE,QAAQ;AAAA,QACR,SAAS,CAAA,MAAK;AACb,cAAI,SAAS;AACZ;AAAA,UACD;AACA,sBAAY,MAAM,GAAG,EAAE,SAAS,qCAAqC,UAAU,YAAY;AAC3F,kBAAQ,CAAC;AAAA,QACV;AAAA,MAAA,CACA,EAAE,MAAM,CAAA,MAAK;AACb,YAAI,CAAC,SAAS;AACb,sBAAY,MAAM,GAAG,EAAE,SAAS,qDAAqD,UAAU,IAAI;AACnG,kBAAQ,CAAC;AAAA,QACV;AACA,eAAO;AAAA,MACR,CAAC;AACD,cAAQ,IAAI,MAAM,cAAc;AAEhC,aAAO,MAAM;AACZ,gBAAQ,OAAO,IAAI;AAClB,SAAC,YAAY;AACb,cAAI;AACH,kBAAM,IAAI,MAAM;AAChB,kBAAM,GAAG,IAAA;AAAA,UACV,QAAQ;AAAA,UACR;AAAA,QACD,GAAA;AAAA,MACD;AAAA,IACD,CAAC;AAED,WAAO;AAAA,MACN,KAAK,YAAY;AAChB,kBAAU;AACV,iBAAA;AACA,cAAM,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAChC,gBAAQ,MAAA;AACR,cAAM,QAAQ,WAAW,IAAI,IAAI,OAAM,MAAK;AAC3C,cAAI;AACH,kBAAM,IAAI,MAAM;AAChB,kBAAM,GAAG,IAAA;AAAA,UACV,QAAQ;AAAA,UACR;AAAA,QACD,CAAC,CAAC;AAAA,MACH;AAAA,IAAA;AAAA,EAEF;AACD;;"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Supervisor } from "@contember/engine-common";
|
|
2
|
+
class LazyDispatchWorker {
|
|
3
|
+
constructor(projectGroupContainerResolver, supervisorFactory, supervisorOptions = { startupMax: 10 }) {
|
|
4
|
+
this.projectGroupContainerResolver = projectGroupContainerResolver;
|
|
5
|
+
this.supervisorFactory = supervisorFactory;
|
|
6
|
+
this.supervisorOptions = supervisorOptions;
|
|
7
|
+
}
|
|
8
|
+
async run({ logger, onError }) {
|
|
9
|
+
const running = /* @__PURE__ */ new Map();
|
|
10
|
+
let aborted = false;
|
|
11
|
+
const unlisten = this.projectGroupContainerResolver.on("create", ({ container, slug }) => {
|
|
12
|
+
const groupLabel = slug ?? "<default>";
|
|
13
|
+
const childLogger = logger.child({ projectGroup: groupLabel });
|
|
14
|
+
childLogger.debug(`Starting dispatch worker for project group ${groupLabel}`);
|
|
15
|
+
const supervised = new Supervisor(
|
|
16
|
+
this.supervisorFactory.create(container),
|
|
17
|
+
this.supervisorOptions
|
|
18
|
+
);
|
|
19
|
+
const runningPromise = supervised.run({
|
|
20
|
+
logger: childLogger,
|
|
21
|
+
onError: (e) => {
|
|
22
|
+
if (aborted) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
childLogger.error(e, { message: `Dispatch worker for project group ${groupLabel} crashed` });
|
|
26
|
+
onError(e);
|
|
27
|
+
}
|
|
28
|
+
}).catch((e) => {
|
|
29
|
+
if (!aborted) {
|
|
30
|
+
childLogger.error(e, { message: `Failed to start dispatch worker for project group ${groupLabel}` });
|
|
31
|
+
onError(e);
|
|
32
|
+
}
|
|
33
|
+
return void 0;
|
|
34
|
+
});
|
|
35
|
+
running.set(slug, runningPromise);
|
|
36
|
+
return () => {
|
|
37
|
+
running.delete(slug);
|
|
38
|
+
(async () => {
|
|
39
|
+
try {
|
|
40
|
+
const r = await runningPromise;
|
|
41
|
+
await r?.end();
|
|
42
|
+
} catch {
|
|
43
|
+
}
|
|
44
|
+
})();
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
end: async () => {
|
|
49
|
+
aborted = true;
|
|
50
|
+
unlisten();
|
|
51
|
+
const all = [...running.values()];
|
|
52
|
+
running.clear();
|
|
53
|
+
await Promise.allSettled(all.map(async (p) => {
|
|
54
|
+
try {
|
|
55
|
+
const r = await p;
|
|
56
|
+
await r?.end();
|
|
57
|
+
} catch {
|
|
58
|
+
}
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
LazyDispatchWorker
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=LazyDispatchWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LazyDispatchWorker.js","sources":["../../../../../packages/engine-actions/src/dispatch/LazyDispatchWorker.ts"],"sourcesContent":["import { Runnable, RunnableArgs, Running, Supervisor, SupervisorOptions } from '@contember/engine-common'\nimport { ProjectGroupContainerResolver } from '@contember/engine-http'\nimport { DispatchWorkerSupervisorFactory } from './DispatchWorkerSupervisor'\n\nexport class LazyDispatchWorker implements Runnable {\n\tconstructor(\n\t\tprivate readonly projectGroupContainerResolver: ProjectGroupContainerResolver,\n\t\tprivate readonly supervisorFactory: DispatchWorkerSupervisorFactory,\n\t\tprivate readonly supervisorOptions: SupervisorOptions = { startupMax: 10 },\n\t) {\n\t}\n\n\tpublic async run({ logger, onError }: RunnableArgs): Promise<Running> {\n\t\tconst running = new Map<string | undefined, Promise<Running | undefined>>()\n\t\tlet aborted = false\n\n\t\tconst unlisten = this.projectGroupContainerResolver.on('create', ({ container, slug }) => {\n\t\t\tconst groupLabel = slug ?? '<default>'\n\t\t\tconst childLogger = logger.child({ projectGroup: groupLabel })\n\t\t\tchildLogger.debug(`Starting dispatch worker for project group ${groupLabel}`)\n\n\t\t\tconst supervised = new Supervisor(\n\t\t\t\tthis.supervisorFactory.create(container),\n\t\t\t\tthis.supervisorOptions,\n\t\t\t)\n\t\t\tconst runningPromise: Promise<Running | undefined> = supervised.run({\n\t\t\t\tlogger: childLogger,\n\t\t\t\tonError: e => {\n\t\t\t\t\tif (aborted) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tchildLogger.error(e, { message: `Dispatch worker for project group ${groupLabel} crashed` })\n\t\t\t\t\tonError(e)\n\t\t\t\t},\n\t\t\t}).catch(e => {\n\t\t\t\tif (!aborted) {\n\t\t\t\t\tchildLogger.error(e, { message: `Failed to start dispatch worker for project group ${groupLabel}` })\n\t\t\t\t\tonError(e)\n\t\t\t\t}\n\t\t\t\treturn undefined\n\t\t\t})\n\t\t\trunning.set(slug, runningPromise)\n\n\t\t\treturn () => {\n\t\t\t\trunning.delete(slug)\n\t\t\t\t;(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst r = await runningPromise\n\t\t\t\t\t\tawait r?.end()\n\t\t\t\t\t} catch {\n\t\t\t\t\t}\n\t\t\t\t})()\n\t\t\t}\n\t\t})\n\n\t\treturn {\n\t\t\tend: async () => {\n\t\t\t\taborted = true\n\t\t\t\tunlisten()\n\t\t\t\tconst all = [...running.values()]\n\t\t\t\trunning.clear()\n\t\t\t\tawait Promise.allSettled(all.map(async p => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst r = await p\n\t\t\t\t\t\tawait r?.end()\n\t\t\t\t\t} catch {\n\t\t\t\t\t}\n\t\t\t\t}))\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";AAIO,MAAM,mBAAuC;AAAA,EACnD,YACkB,+BACA,mBACA,oBAAuC,EAAE,YAAY,MACrE;AAHgB,SAAA,gCAAA;AACA,SAAA,oBAAA;AACA,SAAA,oBAAA;AAAA,EAElB;AAAA,EAEA,MAAa,IAAI,EAAE,QAAQ,WAA2C;AACrE,UAAM,8BAAc,IAAA;AACpB,QAAI,UAAU;AAEd,UAAM,WAAW,KAAK,8BAA8B,GAAG,UAAU,CAAC,EAAE,WAAW,WAAW;AACzF,YAAM,aAAa,QAAQ;AAC3B,YAAM,cAAc,OAAO,MAAM,EAAE,cAAc,YAAY;AAC7D,kBAAY,MAAM,8CAA8C,UAAU,EAAE;AAE5E,YAAM,aAAa,IAAI;AAAA,QACtB,KAAK,kBAAkB,OAAO,SAAS;AAAA,QACvC,KAAK;AAAA,MAAA;AAEN,YAAM,iBAA+C,WAAW,IAAI;AAAA,QACnE,QAAQ;AAAA,QACR,SAAS,CAAA,MAAK;AACb,cAAI,SAAS;AACZ;AAAA,UACD;AACA,sBAAY,MAAM,GAAG,EAAE,SAAS,qCAAqC,UAAU,YAAY;AAC3F,kBAAQ,CAAC;AAAA,QACV;AAAA,MAAA,CACA,EAAE,MAAM,CAAA,MAAK;AACb,YAAI,CAAC,SAAS;AACb,sBAAY,MAAM,GAAG,EAAE,SAAS,qDAAqD,UAAU,IAAI;AACnG,kBAAQ,CAAC;AAAA,QACV;AACA,eAAO;AAAA,MACR,CAAC;AACD,cAAQ,IAAI,MAAM,cAAc;AAEhC,aAAO,MAAM;AACZ,gBAAQ,OAAO,IAAI;AAClB,SAAC,YAAY;AACb,cAAI;AACH,kBAAM,IAAI,MAAM;AAChB,kBAAM,GAAG,IAAA;AAAA,UACV,QAAQ;AAAA,UACR;AAAA,QACD,GAAA;AAAA,MACD;AAAA,IACD,CAAC;AAED,WAAO;AAAA,MACN,KAAK,YAAY;AAChB,kBAAU;AACV,iBAAA;AACA,cAAM,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAChC,gBAAQ,MAAA;AACR,cAAM,QAAQ,WAAW,IAAI,IAAI,OAAM,MAAK;AAC3C,cAAI;AACH,kBAAM,IAAI,MAAM;AAChB,kBAAM,GAAG,IAAA;AAAA,UACV,QAAQ;AAAA,UACR;AAAA,QACD,CAAC,CAAC;AAAA,MACH;AAAA,IAAA;AAAA,EAEF;AACD;"}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const Database = require("@contember/database");
|
|
4
4
|
const notifyChannel = require("../utils/notifyChannel.cjs");
|
|
5
5
|
class TriggerPayloadPersister {
|
|
6
|
-
constructor(mapper, client, providers, projectSlug, stageId, schemaId, identityId, userInfo) {
|
|
6
|
+
constructor(mapper, client, providers, projectSlug, stageId, schemaId, identityId, userInfo, triggeredActionsCollector) {
|
|
7
7
|
this.mapper = mapper;
|
|
8
8
|
this.client = client;
|
|
9
9
|
this.providers = providers;
|
|
@@ -12,33 +12,45 @@ class TriggerPayloadPersister {
|
|
|
12
12
|
this.schemaId = schemaId;
|
|
13
13
|
this.identityId = identityId;
|
|
14
14
|
this.userInfo = userInfo;
|
|
15
|
+
this.triggeredActionsCollector = triggeredActionsCollector;
|
|
15
16
|
}
|
|
16
17
|
async persist(trigger, payloads) {
|
|
17
18
|
const chunkSize = 100;
|
|
18
19
|
if (!this.schemaId) {
|
|
19
20
|
throw new Error("Schema id is not set");
|
|
20
21
|
}
|
|
22
|
+
const collector = this.triggeredActionsCollector;
|
|
21
23
|
for (let i = 0; i < payloads.length; i += chunkSize) {
|
|
22
24
|
const chunk = payloads.slice(i, i + chunkSize);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
25
|
+
const collected = collector ? [] : void 0;
|
|
26
|
+
const rows = chunk.map((it) => {
|
|
27
|
+
const id = this.providers.uuid();
|
|
28
|
+
const transactionId = this.mapper.transactionId;
|
|
29
|
+
collected?.push({ id, trigger: trigger.name, target: trigger.target, transactionId });
|
|
30
|
+
return {
|
|
31
|
+
id,
|
|
32
|
+
transaction_id: transactionId,
|
|
33
|
+
created_at: "now",
|
|
34
|
+
visible_at: "now",
|
|
35
|
+
num_retries: 0,
|
|
36
|
+
state: "created",
|
|
37
|
+
stage_id: this.stageId,
|
|
38
|
+
schema_id: this.schemaId,
|
|
39
|
+
target: trigger.target,
|
|
40
|
+
trigger: trigger.name,
|
|
41
|
+
priority: trigger.priority ?? 0,
|
|
42
|
+
payload: it,
|
|
43
|
+
resolved_at: null,
|
|
44
|
+
last_state_change: "now",
|
|
45
|
+
identity_id: this.identityId,
|
|
46
|
+
ip_address: this.userInfo.ipAddress,
|
|
47
|
+
user_agent: this.userInfo.userAgent
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
await Database.InsertBuilder.create().into("actions_event").values(rows).execute(this.client);
|
|
51
|
+
if (collected && collected.length > 0) {
|
|
52
|
+
collector.add(collected);
|
|
53
|
+
}
|
|
42
54
|
}
|
|
43
55
|
await notifyChannel.notify(this.client, this.projectSlug);
|
|
44
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerPayloadPersister.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerPayloadPersister.ts"],"sourcesContent":["import { Client, InsertBuilder } from '@contember/database'\nimport { Mapper } from '@contember/engine-content-api'\nimport { Actions, ActionsPayload } from '@contember/schema'\nimport { EventRow } from '../model/types'\nimport { notify } from '../utils/notifyChannel'\n\ntype EventRowToInsert = Omit<EventRow, 'created_at' | 'visible_at' | 'last_state_change' | 'log'> & {\n\tcreated_at: string | Date\n\tvisible_at: string | Date\n\tlast_state_change: string | Date\n}\n\nexport class TriggerPayloadPersister {\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly client: Client,\n\t\tprivate readonly providers: { uuid: () => string },\n\t\tprivate readonly projectSlug: string,\n\t\tprivate readonly stageId: string,\n\t\tprivate readonly schemaId: number | undefined,\n\t\tprivate readonly identityId: string,\n\t\tprivate readonly userInfo: { ipAddress: string | null; userAgent: string | null },\n\t) {\n\t}\n\n\tpublic async persist(trigger: Actions.AnyTrigger, payloads: ActionsPayload.AnyEventPayload[]): Promise<void> {\n\t\tconst chunkSize = 100\n\t\tif (!this.schemaId) {\n\t\t\tthrow new Error('Schema id is not set')\n\t\t}\n\t\tfor (let i = 0; i < payloads.length; i += chunkSize) {\n\t\t\tconst chunk = payloads.slice(i, i + chunkSize)\n\t\t\
|
|
1
|
+
{"version":3,"file":"TriggerPayloadPersister.cjs","sources":["../../../../../packages/engine-actions/src/triggers/TriggerPayloadPersister.ts"],"sourcesContent":["import { Client, InsertBuilder } from '@contember/database'\nimport { Mapper, TriggeredActionEvent, TriggeredActionsCollector } from '@contember/engine-content-api'\nimport { Actions, ActionsPayload } from '@contember/schema'\nimport { EventRow } from '../model/types'\nimport { notify } from '../utils/notifyChannel'\n\ntype EventRowToInsert = Omit<EventRow, 'created_at' | 'visible_at' | 'last_state_change' | 'log'> & {\n\tcreated_at: string | Date\n\tvisible_at: string | Date\n\tlast_state_change: string | Date\n}\n\nexport class TriggerPayloadPersister {\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly client: Client,\n\t\tprivate readonly providers: { uuid: () => string },\n\t\tprivate readonly projectSlug: string,\n\t\tprivate readonly stageId: string,\n\t\tprivate readonly schemaId: number | undefined,\n\t\tprivate readonly identityId: string,\n\t\tprivate readonly userInfo: { ipAddress: string | null; userAgent: string | null },\n\t\tprivate readonly triggeredActionsCollector: TriggeredActionsCollector | undefined,\n\t) {\n\t}\n\n\tpublic async persist(trigger: Actions.AnyTrigger, payloads: ActionsPayload.AnyEventPayload[]): Promise<void> {\n\t\tconst chunkSize = 100\n\t\tif (!this.schemaId) {\n\t\t\tthrow new Error('Schema id is not set')\n\t\t}\n\t\tconst collector = this.triggeredActionsCollector\n\t\tfor (let i = 0; i < payloads.length; i += chunkSize) {\n\t\t\tconst chunk = payloads.slice(i, i + chunkSize)\n\t\t\tconst collected: TriggeredActionEvent[] | undefined = collector ? [] : undefined\n\t\t\tconst rows = chunk.map((it): EventRowToInsert => {\n\t\t\t\tconst id = this.providers.uuid()\n\t\t\t\tconst transactionId = this.mapper.transactionId\n\t\t\t\tcollected?.push({ id, trigger: trigger.name, target: trigger.target, transactionId })\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\ttransaction_id: transactionId,\n\t\t\t\t\tcreated_at: 'now',\n\t\t\t\t\tvisible_at: 'now',\n\t\t\t\t\tnum_retries: 0,\n\t\t\t\t\tstate: 'created',\n\t\t\t\t\tstage_id: this.stageId,\n\t\t\t\t\tschema_id: this.schemaId!,\n\t\t\t\t\ttarget: trigger.target,\n\t\t\t\t\ttrigger: trigger.name,\n\t\t\t\t\tpriority: trigger.priority ?? 0,\n\t\t\t\t\tpayload: it,\n\t\t\t\t\tresolved_at: null,\n\t\t\t\t\tlast_state_change: 'now',\n\t\t\t\t\tidentity_id: this.identityId,\n\t\t\t\t\tip_address: this.userInfo.ipAddress,\n\t\t\t\t\tuser_agent: this.userInfo.userAgent,\n\t\t\t\t}\n\t\t\t})\n\t\t\tawait InsertBuilder.create()\n\t\t\t\t.into('actions_event')\n\t\t\t\t.values(rows)\n\t\t\t\t.execute(this.client)\n\n\t\t\tif (collected && collected.length > 0) {\n\t\t\t\tcollector!.add(collected)\n\t\t\t}\n\t\t}\n\n\t\tawait notify(this.client, this.projectSlug)\n\t}\n}\n"],"names":["InsertBuilder","notify"],"mappings":";;;;AAYO,MAAM,wBAAwB;AAAA,EACpC,YACkB,QACA,QACA,WACA,aACA,SACA,UACA,YACA,UACA,2BAChB;AATgB,SAAA,SAAA;AACA,SAAA,SAAA;AACA,SAAA,YAAA;AACA,SAAA,cAAA;AACA,SAAA,UAAA;AACA,SAAA,WAAA;AACA,SAAA,aAAA;AACA,SAAA,WAAA;AACA,SAAA,4BAAA;AAAA,EAElB;AAAA,EAEA,MAAa,QAAQ,SAA6B,UAA2D;AAC5G,UAAM,YAAY;AAClB,QAAI,CAAC,KAAK,UAAU;AACnB,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACvC;AACA,UAAM,YAAY,KAAK;AACvB,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,WAAW;AACpD,YAAM,QAAQ,SAAS,MAAM,GAAG,IAAI,SAAS;AAC7C,YAAM,YAAgD,YAAY,CAAA,IAAK;AACvE,YAAM,OAAO,MAAM,IAAI,CAAC,OAAyB;AAChD,cAAM,KAAK,KAAK,UAAU,KAAA;AAC1B,cAAM,gBAAgB,KAAK,OAAO;AAClC,mBAAW,KAAK,EAAE,IAAI,SAAS,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,cAAA,CAAe;AACpF,eAAO;AAAA,UACN;AAAA,UACA,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,OAAO;AAAA,UACP,UAAU,KAAK;AAAA,UACf,WAAW,KAAK;AAAA,UAChB,QAAQ,QAAQ;AAAA,UAChB,SAAS,QAAQ;AAAA,UACjB,UAAU,QAAQ,YAAY;AAAA,UAC9B,SAAS;AAAA,UACT,aAAa;AAAA,UACb,mBAAmB;AAAA,UACnB,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK,SAAS;AAAA,UAC1B,YAAY,KAAK,SAAS;AAAA,QAAA;AAAA,MAE5B,CAAC;AACD,YAAMA,uBAAc,SAClB,KAAK,eAAe,EACpB,OAAO,IAAI,EACX,QAAQ,KAAK,MAAM;AAErB,UAAI,aAAa,UAAU,SAAS,GAAG;AACtC,kBAAW,IAAI,SAAS;AAAA,MACzB;AAAA,IACD;AAEA,UAAMC,cAAAA,OAAO,KAAK,QAAQ,KAAK,WAAW;AAAA,EAC3C;AACD;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { InsertBuilder as InsertBuilder$1 } from "@contember/database";
|
|
2
2
|
import { notify } from "../utils/notifyChannel.js";
|
|
3
3
|
class TriggerPayloadPersister {
|
|
4
|
-
constructor(mapper, client, providers, projectSlug, stageId, schemaId, identityId, userInfo) {
|
|
4
|
+
constructor(mapper, client, providers, projectSlug, stageId, schemaId, identityId, userInfo, triggeredActionsCollector) {
|
|
5
5
|
this.mapper = mapper;
|
|
6
6
|
this.client = client;
|
|
7
7
|
this.providers = providers;
|
|
@@ -10,33 +10,45 @@ class TriggerPayloadPersister {
|
|
|
10
10
|
this.schemaId = schemaId;
|
|
11
11
|
this.identityId = identityId;
|
|
12
12
|
this.userInfo = userInfo;
|
|
13
|
+
this.triggeredActionsCollector = triggeredActionsCollector;
|
|
13
14
|
}
|
|
14
15
|
async persist(trigger, payloads) {
|
|
15
16
|
const chunkSize = 100;
|
|
16
17
|
if (!this.schemaId) {
|
|
17
18
|
throw new Error("Schema id is not set");
|
|
18
19
|
}
|
|
20
|
+
const collector = this.triggeredActionsCollector;
|
|
19
21
|
for (let i = 0; i < payloads.length; i += chunkSize) {
|
|
20
22
|
const chunk = payloads.slice(i, i + chunkSize);
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
23
|
+
const collected = collector ? [] : void 0;
|
|
24
|
+
const rows = chunk.map((it) => {
|
|
25
|
+
const id = this.providers.uuid();
|
|
26
|
+
const transactionId = this.mapper.transactionId;
|
|
27
|
+
collected?.push({ id, trigger: trigger.name, target: trigger.target, transactionId });
|
|
28
|
+
return {
|
|
29
|
+
id,
|
|
30
|
+
transaction_id: transactionId,
|
|
31
|
+
created_at: "now",
|
|
32
|
+
visible_at: "now",
|
|
33
|
+
num_retries: 0,
|
|
34
|
+
state: "created",
|
|
35
|
+
stage_id: this.stageId,
|
|
36
|
+
schema_id: this.schemaId,
|
|
37
|
+
target: trigger.target,
|
|
38
|
+
trigger: trigger.name,
|
|
39
|
+
priority: trigger.priority ?? 0,
|
|
40
|
+
payload: it,
|
|
41
|
+
resolved_at: null,
|
|
42
|
+
last_state_change: "now",
|
|
43
|
+
identity_id: this.identityId,
|
|
44
|
+
ip_address: this.userInfo.ipAddress,
|
|
45
|
+
user_agent: this.userInfo.userAgent
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
await InsertBuilder$1.create().into("actions_event").values(rows).execute(this.client);
|
|
49
|
+
if (collected && collected.length > 0) {
|
|
50
|
+
collector.add(collected);
|
|
51
|
+
}
|
|
40
52
|
}
|
|
41
53
|
await notify(this.client, this.projectSlug);
|
|
42
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerPayloadPersister.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerPayloadPersister.ts"],"sourcesContent":["import { Client, InsertBuilder } from '@contember/database'\nimport { Mapper } from '@contember/engine-content-api'\nimport { Actions, ActionsPayload } from '@contember/schema'\nimport { EventRow } from '../model/types'\nimport { notify } from '../utils/notifyChannel'\n\ntype EventRowToInsert = Omit<EventRow, 'created_at' | 'visible_at' | 'last_state_change' | 'log'> & {\n\tcreated_at: string | Date\n\tvisible_at: string | Date\n\tlast_state_change: string | Date\n}\n\nexport class TriggerPayloadPersister {\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly client: Client,\n\t\tprivate readonly providers: { uuid: () => string },\n\t\tprivate readonly projectSlug: string,\n\t\tprivate readonly stageId: string,\n\t\tprivate readonly schemaId: number | undefined,\n\t\tprivate readonly identityId: string,\n\t\tprivate readonly userInfo: { ipAddress: string | null; userAgent: string | null },\n\t) {\n\t}\n\n\tpublic async persist(trigger: Actions.AnyTrigger, payloads: ActionsPayload.AnyEventPayload[]): Promise<void> {\n\t\tconst chunkSize = 100\n\t\tif (!this.schemaId) {\n\t\t\tthrow new Error('Schema id is not set')\n\t\t}\n\t\tfor (let i = 0; i < payloads.length; i += chunkSize) {\n\t\t\tconst chunk = payloads.slice(i, i + chunkSize)\n\t\t\
|
|
1
|
+
{"version":3,"file":"TriggerPayloadPersister.js","sources":["../../../../../packages/engine-actions/src/triggers/TriggerPayloadPersister.ts"],"sourcesContent":["import { Client, InsertBuilder } from '@contember/database'\nimport { Mapper, TriggeredActionEvent, TriggeredActionsCollector } from '@contember/engine-content-api'\nimport { Actions, ActionsPayload } from '@contember/schema'\nimport { EventRow } from '../model/types'\nimport { notify } from '../utils/notifyChannel'\n\ntype EventRowToInsert = Omit<EventRow, 'created_at' | 'visible_at' | 'last_state_change' | 'log'> & {\n\tcreated_at: string | Date\n\tvisible_at: string | Date\n\tlast_state_change: string | Date\n}\n\nexport class TriggerPayloadPersister {\n\tconstructor(\n\t\tprivate readonly mapper: Mapper,\n\t\tprivate readonly client: Client,\n\t\tprivate readonly providers: { uuid: () => string },\n\t\tprivate readonly projectSlug: string,\n\t\tprivate readonly stageId: string,\n\t\tprivate readonly schemaId: number | undefined,\n\t\tprivate readonly identityId: string,\n\t\tprivate readonly userInfo: { ipAddress: string | null; userAgent: string | null },\n\t\tprivate readonly triggeredActionsCollector: TriggeredActionsCollector | undefined,\n\t) {\n\t}\n\n\tpublic async persist(trigger: Actions.AnyTrigger, payloads: ActionsPayload.AnyEventPayload[]): Promise<void> {\n\t\tconst chunkSize = 100\n\t\tif (!this.schemaId) {\n\t\t\tthrow new Error('Schema id is not set')\n\t\t}\n\t\tconst collector = this.triggeredActionsCollector\n\t\tfor (let i = 0; i < payloads.length; i += chunkSize) {\n\t\t\tconst chunk = payloads.slice(i, i + chunkSize)\n\t\t\tconst collected: TriggeredActionEvent[] | undefined = collector ? [] : undefined\n\t\t\tconst rows = chunk.map((it): EventRowToInsert => {\n\t\t\t\tconst id = this.providers.uuid()\n\t\t\t\tconst transactionId = this.mapper.transactionId\n\t\t\t\tcollected?.push({ id, trigger: trigger.name, target: trigger.target, transactionId })\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\ttransaction_id: transactionId,\n\t\t\t\t\tcreated_at: 'now',\n\t\t\t\t\tvisible_at: 'now',\n\t\t\t\t\tnum_retries: 0,\n\t\t\t\t\tstate: 'created',\n\t\t\t\t\tstage_id: this.stageId,\n\t\t\t\t\tschema_id: this.schemaId!,\n\t\t\t\t\ttarget: trigger.target,\n\t\t\t\t\ttrigger: trigger.name,\n\t\t\t\t\tpriority: trigger.priority ?? 0,\n\t\t\t\t\tpayload: it,\n\t\t\t\t\tresolved_at: null,\n\t\t\t\t\tlast_state_change: 'now',\n\t\t\t\t\tidentity_id: this.identityId,\n\t\t\t\t\tip_address: this.userInfo.ipAddress,\n\t\t\t\t\tuser_agent: this.userInfo.userAgent,\n\t\t\t\t}\n\t\t\t})\n\t\t\tawait InsertBuilder.create()\n\t\t\t\t.into('actions_event')\n\t\t\t\t.values(rows)\n\t\t\t\t.execute(this.client)\n\n\t\t\tif (collected && collected.length > 0) {\n\t\t\t\tcollector!.add(collected)\n\t\t\t}\n\t\t}\n\n\t\tawait notify(this.client, this.projectSlug)\n\t}\n}\n"],"names":["InsertBuilder"],"mappings":";;AAYO,MAAM,wBAAwB;AAAA,EACpC,YACkB,QACA,QACA,WACA,aACA,SACA,UACA,YACA,UACA,2BAChB;AATgB,SAAA,SAAA;AACA,SAAA,SAAA;AACA,SAAA,YAAA;AACA,SAAA,cAAA;AACA,SAAA,UAAA;AACA,SAAA,WAAA;AACA,SAAA,aAAA;AACA,SAAA,WAAA;AACA,SAAA,4BAAA;AAAA,EAElB;AAAA,EAEA,MAAa,QAAQ,SAA6B,UAA2D;AAC5G,UAAM,YAAY;AAClB,QAAI,CAAC,KAAK,UAAU;AACnB,YAAM,IAAI,MAAM,sBAAsB;AAAA,IACvC;AACA,UAAM,YAAY,KAAK;AACvB,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK,WAAW;AACpD,YAAM,QAAQ,SAAS,MAAM,GAAG,IAAI,SAAS;AAC7C,YAAM,YAAgD,YAAY,CAAA,IAAK;AACvE,YAAM,OAAO,MAAM,IAAI,CAAC,OAAyB;AAChD,cAAM,KAAK,KAAK,UAAU,KAAA;AAC1B,cAAM,gBAAgB,KAAK,OAAO;AAClC,mBAAW,KAAK,EAAE,IAAI,SAAS,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,cAAA,CAAe;AACpF,eAAO;AAAA,UACN;AAAA,UACA,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,aAAa;AAAA,UACb,OAAO;AAAA,UACP,UAAU,KAAK;AAAA,UACf,WAAW,KAAK;AAAA,UAChB,QAAQ,QAAQ;AAAA,UAChB,SAAS,QAAQ;AAAA,UACjB,UAAU,QAAQ,YAAY;AAAA,UAC9B,SAAS;AAAA,UACT,aAAa;AAAA,UACb,mBAAmB;AAAA,UACnB,aAAa,KAAK;AAAA,UAClB,YAAY,KAAK,SAAS;AAAA,UAC1B,YAAY,KAAK,SAAS;AAAA,QAAA;AAAA,MAE5B,CAAC;AACD,YAAMA,gBAAc,SAClB,KAAK,eAAe,EACpB,OAAO,IAAI,EACX,QAAQ,KAAK,MAAM;AAErB,UAAI,aAAa,UAAU,SAAS,GAAG;AACtC,kBAAW,IAAI,SAAS;AAAA,MACzB;AAAA,IACD;AAEA,UAAM,OAAO,KAAK,QAAQ,KAAK,WAAW;AAAA,EAC3C;AACD;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazyDispatchWorker.test.d.ts","sourceRoot":"","sources":["../../../../tests/cases/unit/lazyDispatchWorker.test.ts"],"names":[],"mappings":""}
|