@contember/engine-actions 2.1.0-alpha.3 → 2.1.0-alpha.30
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 -5
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +10 -5
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/ActionsExecutionContainerHookFactory.cjs +3 -3
- package/dist/development/src/ActionsExecutionContainerHookFactory.cjs.map +1 -1
- package/dist/development/src/ActionsExecutionContainerHookFactory.js +3 -3
- package/dist/development/src/ActionsExecutionContainerHookFactory.js.map +1 -1
- package/dist/development/src/authorization/ActionsAuthorizationActions.cjs +2 -0
- package/dist/development/src/authorization/ActionsAuthorizationActions.cjs.map +1 -1
- package/dist/development/src/authorization/ActionsAuthorizationActions.js +2 -0
- package/dist/development/src/authorization/ActionsAuthorizationActions.js.map +1 -1
- package/dist/development/src/dispatch/EventsRepository.cjs +17 -4
- package/dist/development/src/dispatch/EventsRepository.cjs.map +1 -1
- package/dist/development/src/dispatch/EventsRepository.js +17 -4
- package/dist/development/src/dispatch/EventsRepository.js.map +1 -1
- package/dist/development/src/dispatch/ProjectDispatcher.cjs +2 -2
- package/dist/development/src/dispatch/ProjectDispatcher.cjs.map +1 -1
- package/dist/development/src/dispatch/ProjectDispatcher.js +1 -1
- package/dist/development/src/dispatch/ProjectDispatcher.js.map +1 -1
- package/dist/development/src/dispatch/WebhookTargetHandler.cjs +3 -0
- package/dist/development/src/dispatch/WebhookTargetHandler.cjs.map +1 -1
- package/dist/development/src/dispatch/WebhookTargetHandler.js +3 -0
- package/dist/development/src/dispatch/WebhookTargetHandler.js.map +1 -1
- package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs +1 -0
- package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +1 -1
- package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js +1 -0
- package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -1
- package/dist/development/src/graphql/resolvers/ResolversFactory.cjs +7 -2
- package/dist/development/src/graphql/resolvers/ResolversFactory.cjs.map +1 -1
- package/dist/development/src/graphql/resolvers/ResolversFactory.js +7 -2
- package/dist/development/src/graphql/resolvers/ResolversFactory.js.map +1 -1
- package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs +21 -0
- package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs.map +1 -0
- package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.js +21 -0
- package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.js.map +1 -0
- package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs +19 -0
- package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs.map +1 -0
- package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.js +19 -0
- package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.js.map +1 -0
- package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs +14 -1
- package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +1 -1
- package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js +14 -1
- package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -1
- package/dist/development/src/graphql/schema/actions.graphql.cjs +18 -4
- package/dist/development/src/graphql/schema/actions.graphql.cjs.map +1 -1
- package/dist/development/src/graphql/schema/actions.graphql.js +18 -4
- package/dist/development/src/graphql/schema/actions.graphql.js.map +1 -1
- package/dist/development/src/migrations/2025-05-28-160000-action-event-user.cjs +16 -0
- package/dist/development/src/migrations/2025-05-28-160000-action-event-user.cjs.map +1 -0
- package/dist/development/src/migrations/2025-05-28-160000-action-event-user.js +17 -0
- package/dist/development/src/migrations/2025-05-28-160000-action-event-user.js.map +1 -0
- package/dist/development/src/migrations/index.cjs +3 -1
- package/dist/development/src/migrations/index.cjs.map +1 -1
- package/dist/development/src/migrations/index.js +3 -1
- package/dist/development/src/migrations/index.js.map +1 -1
- package/dist/development/src/migrations/snapshot.cjs +5 -2
- package/dist/development/src/migrations/snapshot.cjs.map +1 -1
- package/dist/development/src/migrations/snapshot.js +5 -2
- package/dist/development/src/migrations/snapshot.js.map +1 -1
- package/dist/development/src/model/EventByIdQuery.cjs +17 -0
- package/dist/development/src/model/EventByIdQuery.cjs.map +1 -0
- package/dist/development/src/model/EventByIdQuery.js +17 -0
- package/dist/development/src/model/EventByIdQuery.js.map +1 -0
- package/dist/development/src/triggers/TriggerHandler.cjs +12 -11
- package/dist/development/src/triggers/TriggerHandler.cjs.map +1 -1
- package/dist/development/src/triggers/TriggerHandler.js +12 -11
- package/dist/development/src/triggers/TriggerHandler.js.map +1 -1
- package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs +44 -2
- package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs.map +1 -1
- package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js +44 -2
- package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -1
- package/dist/development/src/triggers/TriggerListenersStore.cjs.map +1 -1
- package/dist/development/src/triggers/TriggerListenersStore.js.map +1 -1
- package/dist/development/src/triggers/TriggerPayloadBuilder.cjs +20 -5
- package/dist/development/src/triggers/TriggerPayloadBuilder.cjs.map +1 -1
- package/dist/development/src/triggers/TriggerPayloadBuilder.js +20 -5
- package/dist/development/src/triggers/TriggerPayloadBuilder.js.map +1 -1
- package/dist/development/src/triggers/TriggerPayloadManager.cjs.map +1 -1
- package/dist/development/src/triggers/TriggerPayloadManager.js.map +1 -1
- package/dist/development/src/triggers/TriggerPayloadPersister.cjs +9 -5
- package/dist/development/src/triggers/TriggerPayloadPersister.cjs.map +1 -1
- package/dist/development/src/triggers/TriggerPayloadPersister.js +9 -5
- package/dist/development/src/triggers/TriggerPayloadPersister.js.map +1 -1
- package/dist/development/src/utils/notifyChannel.cjs +9 -0
- package/dist/development/src/utils/notifyChannel.cjs.map +1 -0
- package/dist/development/src/utils/notifyChannel.js +9 -0
- package/dist/development/src/utils/notifyChannel.js.map +1 -0
- package/dist/production/index.cjs +10 -5
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +10 -5
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/ActionsExecutionContainerHookFactory.cjs +3 -3
- package/dist/production/src/ActionsExecutionContainerHookFactory.cjs.map +1 -1
- package/dist/production/src/ActionsExecutionContainerHookFactory.js +3 -3
- package/dist/production/src/ActionsExecutionContainerHookFactory.js.map +1 -1
- package/dist/production/src/authorization/ActionsAuthorizationActions.cjs +2 -0
- package/dist/production/src/authorization/ActionsAuthorizationActions.cjs.map +1 -1
- package/dist/production/src/authorization/ActionsAuthorizationActions.js +2 -0
- package/dist/production/src/authorization/ActionsAuthorizationActions.js.map +1 -1
- package/dist/production/src/dispatch/EventsRepository.cjs +17 -4
- package/dist/production/src/dispatch/EventsRepository.cjs.map +1 -1
- package/dist/production/src/dispatch/EventsRepository.js +17 -4
- package/dist/production/src/dispatch/EventsRepository.js.map +1 -1
- package/dist/production/src/dispatch/ProjectDispatcher.cjs +2 -2
- package/dist/production/src/dispatch/ProjectDispatcher.cjs.map +1 -1
- package/dist/production/src/dispatch/ProjectDispatcher.js +1 -1
- package/dist/production/src/dispatch/ProjectDispatcher.js.map +1 -1
- package/dist/production/src/dispatch/WebhookTargetHandler.cjs +3 -0
- package/dist/production/src/dispatch/WebhookTargetHandler.cjs.map +1 -1
- package/dist/production/src/dispatch/WebhookTargetHandler.js +3 -0
- package/dist/production/src/dispatch/WebhookTargetHandler.js.map +1 -1
- package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs +1 -0
- package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +1 -1
- package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js +1 -0
- package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -1
- package/dist/production/src/graphql/resolvers/ResolversFactory.cjs +7 -2
- package/dist/production/src/graphql/resolvers/ResolversFactory.cjs.map +1 -1
- package/dist/production/src/graphql/resolvers/ResolversFactory.js +7 -2
- package/dist/production/src/graphql/resolvers/ResolversFactory.js.map +1 -1
- package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs +21 -0
- package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs.map +1 -0
- package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.js +21 -0
- package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.js.map +1 -0
- package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs +19 -0
- package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs.map +1 -0
- package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.js +19 -0
- package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.js.map +1 -0
- package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs +14 -1
- package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +1 -1
- package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js +14 -1
- package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -1
- package/dist/production/src/graphql/schema/actions.graphql.cjs +18 -4
- package/dist/production/src/graphql/schema/actions.graphql.cjs.map +1 -1
- package/dist/production/src/graphql/schema/actions.graphql.js +18 -4
- package/dist/production/src/graphql/schema/actions.graphql.js.map +1 -1
- package/dist/production/src/migrations/2025-05-28-160000-action-event-user.cjs +16 -0
- package/dist/production/src/migrations/2025-05-28-160000-action-event-user.cjs.map +1 -0
- package/dist/production/src/migrations/2025-05-28-160000-action-event-user.js +17 -0
- package/dist/production/src/migrations/2025-05-28-160000-action-event-user.js.map +1 -0
- package/dist/production/src/migrations/index.cjs +3 -1
- package/dist/production/src/migrations/index.cjs.map +1 -1
- package/dist/production/src/migrations/index.js +3 -1
- package/dist/production/src/migrations/index.js.map +1 -1
- package/dist/production/src/migrations/snapshot.cjs +5 -2
- package/dist/production/src/migrations/snapshot.cjs.map +1 -1
- package/dist/production/src/migrations/snapshot.js +5 -2
- package/dist/production/src/migrations/snapshot.js.map +1 -1
- package/dist/production/src/model/EventByIdQuery.cjs +17 -0
- package/dist/production/src/model/EventByIdQuery.cjs.map +1 -0
- package/dist/production/src/model/EventByIdQuery.js +17 -0
- package/dist/production/src/model/EventByIdQuery.js.map +1 -0
- package/dist/production/src/triggers/TriggerHandler.cjs +12 -11
- package/dist/production/src/triggers/TriggerHandler.cjs.map +1 -1
- package/dist/production/src/triggers/TriggerHandler.js +12 -11
- package/dist/production/src/triggers/TriggerHandler.js.map +1 -1
- package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs +44 -2
- package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs.map +1 -1
- package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js +44 -2
- package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -1
- package/dist/production/src/triggers/TriggerListenersStore.cjs.map +1 -1
- package/dist/production/src/triggers/TriggerListenersStore.js.map +1 -1
- package/dist/production/src/triggers/TriggerPayloadBuilder.cjs +20 -5
- package/dist/production/src/triggers/TriggerPayloadBuilder.cjs.map +1 -1
- package/dist/production/src/triggers/TriggerPayloadBuilder.js +20 -5
- package/dist/production/src/triggers/TriggerPayloadBuilder.js.map +1 -1
- package/dist/production/src/triggers/TriggerPayloadManager.cjs.map +1 -1
- package/dist/production/src/triggers/TriggerPayloadManager.js.map +1 -1
- package/dist/production/src/triggers/TriggerPayloadPersister.cjs +9 -5
- package/dist/production/src/triggers/TriggerPayloadPersister.cjs.map +1 -1
- package/dist/production/src/triggers/TriggerPayloadPersister.js +9 -5
- package/dist/production/src/triggers/TriggerPayloadPersister.js.map +1 -1
- package/dist/production/src/utils/notifyChannel.cjs +9 -0
- package/dist/production/src/utils/notifyChannel.cjs.map +1 -0
- package/dist/production/src/utils/notifyChannel.js +9 -0
- package/dist/production/src/utils/notifyChannel.js.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/authorization/ActionsAuthorizationActions.d.ts +10 -0
- package/dist/types/authorization/ActionsAuthorizationActions.d.ts.map +1 -1
- package/dist/types/dispatch/EventsRepository.d.ts +2 -1
- package/dist/types/dispatch/EventsRepository.d.ts.map +1 -1
- package/dist/types/dispatch/WebhookTargetHandler.d.ts.map +1 -1
- package/dist/types/graphql/http/ActionsApiMiddlewareFactory.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/ActionsContext.d.ts +3 -0
- package/dist/types/graphql/resolvers/ActionsContext.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/ResolversFactory.d.ts +4 -2
- package/dist/types/graphql/resolvers/ResolversFactory.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/mutation/RetryEventMutationResolver.d.ts +11 -0
- package/dist/types/graphql/resolvers/mutation/RetryEventMutationResolver.d.ts.map +1 -0
- package/dist/types/graphql/resolvers/mutation/StopEventMutationResolver.d.ts +11 -0
- package/dist/types/graphql/resolvers/mutation/StopEventMutationResolver.d.ts.map +1 -0
- package/dist/types/graphql/resolvers/mutation/index.d.ts +2 -0
- package/dist/types/graphql/resolvers/mutation/index.d.ts.map +1 -1
- package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts +3 -0
- package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts.map +1 -1
- package/dist/types/graphql/schema/actions.graphql.d.ts.map +1 -1
- package/dist/types/graphql/schema/index.d.ts +45 -2
- package/dist/types/graphql/schema/index.d.ts.map +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/migrations/2025-05-28-160000-action-event-user.d.ts +3 -0
- package/dist/types/migrations/2025-05-28-160000-action-event-user.d.ts.map +1 -0
- package/dist/types/migrations/index.d.ts.map +1 -1
- package/dist/types/migrations/snapshot.d.ts.map +1 -1
- package/dist/types/model/EventByIdQuery.d.ts +8 -0
- package/dist/types/model/EventByIdQuery.d.ts.map +1 -0
- package/dist/types/model/types.d.ts +3 -0
- package/dist/types/model/types.d.ts.map +1 -1
- package/dist/types/triggers/TriggerHandler.d.ts.map +1 -1
- package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts +11 -3
- package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts.map +1 -1
- package/dist/types/triggers/TriggerListenersStore.d.ts +2 -2
- package/dist/types/triggers/TriggerListenersStore.d.ts.map +1 -1
- package/dist/types/triggers/TriggerPayloadBuilder.d.ts.map +1 -1
- package/dist/types/triggers/TriggerPayloadManager.d.ts +2 -1
- package/dist/types/triggers/TriggerPayloadManager.d.ts.map +1 -1
- package/dist/types/triggers/TriggerPayloadPersister.d.ts +7 -3
- package/dist/types/triggers/TriggerPayloadPersister.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/utils/notifyChannel.d.ts +4 -0
- package/dist/types/utils/notifyChannel.d.ts.map +1 -0
- package/graphql.codegen.yml +2 -2
- package/package.json +15 -15
- package/src/ActionsExecutionContainerHookFactory.ts +3 -3
- package/src/authorization/ActionsAuthorizationActions.ts +2 -0
- package/src/dispatch/EventsRepository.ts +24 -5
- package/src/dispatch/ProjectDispatcher.ts +1 -1
- package/src/dispatch/WebhookTargetHandler.ts +3 -0
- package/src/graphql/http/ActionsApiMiddlewareFactory.ts +1 -0
- package/src/graphql/resolvers/ActionsContext.ts +1 -0
- package/src/graphql/resolvers/ResolversFactory.ts +6 -1
- package/src/graphql/resolvers/mutation/RetryEventMutationResolver.ts +22 -0
- package/src/graphql/resolvers/mutation/StopEventMutationResolver.ts +19 -0
- package/src/graphql/resolvers/mutation/index.ts +2 -0
- package/src/graphql/resolvers/query/EventsQueryResolver.ts +14 -0
- package/src/graphql/schema/actions.graphql.ts +18 -4
- package/src/graphql/schema/index.ts +54 -1
- package/src/index.ts +9 -5
- package/src/migrations/2025-05-28-160000-action-event-user.ts +16 -0
- package/src/migrations/index.ts +2 -0
- package/src/migrations/snapshot.ts +5 -2
- package/src/model/EventByIdQuery.ts +21 -0
- package/src/model/types.ts +3 -0
- package/src/triggers/TriggerHandler.ts +12 -11
- package/src/triggers/TriggerIndirectChangesFetcher.ts +62 -3
- package/src/triggers/TriggerListenersStore.ts +2 -2
- package/src/triggers/TriggerPayloadBuilder.ts +18 -1
- package/src/triggers/TriggerPayloadManager.ts +2 -1
- package/src/triggers/TriggerPayloadPersister.ts +9 -3
- package/src/utils/notifyChannel.ts +6 -0
- package/tests/cases/unit/generator.test.ts +1 -1
- package/tests/cases/unit/webhookHandler.test.ts +9 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifyChannel.d.ts","sourceRoot":"","sources":["../../../src/utils/notifyChannel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,eAAO,MAAM,mBAAmB,kBAAkB,CAAA;AAClD,eAAO,MAAM,MAAM,GAAU,IAAI,MAAM,EAAE,aAAa,MAAM,kBAE3D,CAAA"}
|
package/graphql.codegen.yml
CHANGED
|
@@ -10,7 +10,7 @@ generates:
|
|
|
10
10
|
enumsAsTypes: "1"
|
|
11
11
|
scalars:
|
|
12
12
|
DateTime: Date
|
|
13
|
-
Uuid:
|
|
13
|
+
Uuid: string
|
|
14
14
|
Json: any
|
|
15
15
|
plugins:
|
|
16
16
|
- "typescript"
|
|
@@ -18,4 +18,4 @@ generates:
|
|
|
18
18
|
- "typescript-resolvers"
|
|
19
19
|
hooks:
|
|
20
20
|
afterAllFileWrite:
|
|
21
|
-
-
|
|
21
|
+
- bun run eslint --fix
|
package/package.json
CHANGED
|
@@ -22,20 +22,20 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@contember/authorization": "2.1.0-alpha.
|
|
26
|
-
"@contember/database": "2.1.0-alpha.
|
|
27
|
-
"@contember/database-migrations": "2.1.0-alpha.
|
|
28
|
-
"@contember/engine-common": "2.1.0-alpha.
|
|
29
|
-
"@contember/engine-content-api": "2.1.0-alpha.
|
|
30
|
-
"@contember/engine-http": "2.1.0-alpha.
|
|
31
|
-
"@contember/engine-plugins": "2.1.0-alpha.
|
|
32
|
-
"@contember/engine-system-api": "2.1.0-alpha.
|
|
33
|
-
"@contember/engine-tenant-api": "2.1.0-alpha.
|
|
34
|
-
"@contember/graphql-utils": "2.1.0-alpha.
|
|
35
|
-
"@contember/logger": "2.1.0-alpha.
|
|
36
|
-
"@contember/schema": "2.1.0-alpha.
|
|
37
|
-
"@contember/schema-utils": "2.1.0-alpha.
|
|
38
|
-
"@contember/typesafe": "2.1.0-alpha.
|
|
25
|
+
"@contember/authorization": "2.1.0-alpha.30",
|
|
26
|
+
"@contember/database": "2.1.0-alpha.30",
|
|
27
|
+
"@contember/database-migrations": "2.1.0-alpha.30",
|
|
28
|
+
"@contember/engine-common": "2.1.0-alpha.30",
|
|
29
|
+
"@contember/engine-content-api": "2.1.0-alpha.30",
|
|
30
|
+
"@contember/engine-http": "2.1.0-alpha.30",
|
|
31
|
+
"@contember/engine-plugins": "2.1.0-alpha.30",
|
|
32
|
+
"@contember/engine-system-api": "2.1.0-alpha.30",
|
|
33
|
+
"@contember/engine-tenant-api": "2.1.0-alpha.30",
|
|
34
|
+
"@contember/graphql-utils": "2.1.0-alpha.30",
|
|
35
|
+
"@contember/logger": "2.1.0-alpha.30",
|
|
36
|
+
"@contember/schema": "2.1.0-alpha.30",
|
|
37
|
+
"@contember/schema-utils": "2.1.0-alpha.30",
|
|
38
|
+
"@contember/typesafe": "2.1.0-alpha.30",
|
|
39
39
|
"@graphql-tools/schema": "^10.0.7",
|
|
40
40
|
"graphql-tag": "^2.12.6"
|
|
41
41
|
},
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"pg": "^8.5.0"
|
|
50
50
|
},
|
|
51
51
|
"type": "module",
|
|
52
|
-
"version": "2.1.0-alpha.
|
|
52
|
+
"version": "2.1.0-alpha.30"
|
|
53
53
|
}
|
|
@@ -12,12 +12,12 @@ export class ActionsExecutionContainerHookFactory {
|
|
|
12
12
|
|
|
13
13
|
create(): ExecutionContainerHook {
|
|
14
14
|
return builder => {
|
|
15
|
-
return builder.setupService('mapperFactory', (mapperFactory, { whereBuilder, schema, pathFactory, systemSchema, providers, stage, project, schemaMeta }) => {
|
|
15
|
+
return builder.setupService('mapperFactory', (mapperFactory, { whereBuilder, schema, pathFactory, systemSchema, providers, stage, project, schemaMeta, joinBuilder, userInfo }) => {
|
|
16
16
|
mapperFactory.hooks.push(mapper => {
|
|
17
|
-
const triggerPayloadPersister = new TriggerPayloadPersister(mapper, mapper.db.forSchema(systemSchema), providers, project.slug, stage.id, schemaMeta.id)
|
|
17
|
+
const triggerPayloadPersister = new TriggerPayloadPersister(mapper, mapper.db.forSchema(systemSchema), providers, project.slug, stage.id, schemaMeta.id, mapper.identityId, userInfo)
|
|
18
18
|
const triggerPayloadBuilder = new TriggerPayloadBuilder(mapper)
|
|
19
19
|
const payloadManager = new TriggerPayloadManager(triggerPayloadBuilder, triggerPayloadPersister)
|
|
20
|
-
const changesFetcher = new TriggerIndirectChangesFetcher(mapper, whereBuilder, pathFactory)
|
|
20
|
+
const changesFetcher = new TriggerIndirectChangesFetcher(schema.model, mapper, whereBuilder, joinBuilder, pathFactory)
|
|
21
21
|
const listenersStore = this.listenerStoreProvider.getListenerStore(schema)
|
|
22
22
|
const triggerHandler = new TriggerHandler(payloadManager, listenersStore, changesFetcher)
|
|
23
23
|
triggerHandler.attach(mapper.eventManager)
|
|
@@ -11,4 +11,6 @@ export namespace ActionsAuthorizationActions {
|
|
|
11
11
|
|
|
12
12
|
export const EVENTS_VIEW = Authorizator.createAction(Resources.events, 'view')
|
|
13
13
|
export const EVENTS_PROCESS = Authorizator.createAction(Resources.events, 'process')
|
|
14
|
+
export const EVENTS_RETRY = Authorizator.createAction(Resources.events, 'retry')
|
|
15
|
+
export const EVENTS_STOP = Authorizator.createAction(Resources.events, 'stop')
|
|
14
16
|
}
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
import { EventRow, HandledEvent } from './types'
|
|
12
12
|
import { Actions } from '@contember/schema'
|
|
13
13
|
import { eventsToProcessSpecification, eventsToProcessStateSpecification } from '../model/EventsToProcessSpecification'
|
|
14
|
+
import { notify } from '../utils/notifyChannel'
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
const ACK_TIMEOUT_MS = 1_000 * 60 * 10 // 10 minutes
|
|
@@ -87,15 +88,33 @@ export class EventsRepository {
|
|
|
87
88
|
})
|
|
88
89
|
}
|
|
89
90
|
|
|
90
|
-
public async requeue(db: Client, events:
|
|
91
|
+
public async requeue(db: Client, events: string[]): Promise<void> {
|
|
91
92
|
await UpdateBuilder.create()
|
|
92
93
|
.table('actions_event')
|
|
93
94
|
.values<EventRow>({
|
|
94
|
-
state: it => it.raw(
|
|
95
|
+
state: it => it.raw(`
|
|
96
|
+
CASE
|
|
97
|
+
WHEN num_retries = 0 THEN
|
|
98
|
+
?::__SCHEMA__.actions_trigger_state
|
|
99
|
+
ELSE
|
|
100
|
+
?::__SCHEMA__.actions_trigger_state END
|
|
101
|
+
`, 'created', 'retrying'),
|
|
95
102
|
last_state_change: new Date(),
|
|
96
103
|
visible_at: new Date(),
|
|
97
104
|
})
|
|
98
|
-
.where(it => it.in('id', events
|
|
105
|
+
.where(it => it.in('id', events))
|
|
106
|
+
.execute(db)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
public async markStopped(db: Client, events: string[]): Promise<void> {
|
|
110
|
+
await UpdateBuilder.create()
|
|
111
|
+
.table('actions_event')
|
|
112
|
+
.values<EventRow>({
|
|
113
|
+
state: 'stopped',
|
|
114
|
+
last_state_change: new Date(),
|
|
115
|
+
resolved_at: new Date(),
|
|
116
|
+
})
|
|
117
|
+
.where(it => it.in('id', events))
|
|
99
118
|
.execute(db)
|
|
100
119
|
}
|
|
101
120
|
|
|
@@ -114,7 +133,7 @@ export class EventsRepository {
|
|
|
114
133
|
}
|
|
115
134
|
|
|
116
135
|
private async markFailed(db: Client, event: HandledEvent): Promise<void> {
|
|
117
|
-
const numRetries = event.row.num_retries
|
|
136
|
+
const numRetries = event.row.num_retries + 1
|
|
118
137
|
const now = new Date()
|
|
119
138
|
const nextAttempt = new Date()
|
|
120
139
|
nextAttempt.setTime(nextAttempt.getTime() + (event.target?.initialRepeatIntervalMs ?? DEFAULT_REPEAT_INTERVAL_MS) * Math.pow(2, event.row.num_retries))
|
|
@@ -122,7 +141,7 @@ export class EventsRepository {
|
|
|
122
141
|
.table('actions_event')
|
|
123
142
|
.values<EventRow>({
|
|
124
143
|
last_state_change: now,
|
|
125
|
-
num_retries:
|
|
144
|
+
num_retries: numRetries,
|
|
126
145
|
log: JSON.stringify([...event.row.log, event.result]) as any,
|
|
127
146
|
...(numRetries < (event.target?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS) ? {
|
|
128
147
|
state: 'retrying',
|
|
@@ -3,7 +3,7 @@ import { EventDispatcher } from './EventDispatcher'
|
|
|
3
3
|
import { ContentSchemaResolver } from '@contember/engine-http'
|
|
4
4
|
import { Runnable, RunnableArgs, Running } from '@contember/engine-common'
|
|
5
5
|
import { Listener } from '@contember/database'
|
|
6
|
-
import { NOTIFY_CHANNEL_NAME } from '../
|
|
6
|
+
import { NOTIFY_CHANNEL_NAME } from '../utils/notifyChannel'
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
export class ProjectDispatcherFactory {
|
|
@@ -174,6 +174,9 @@ export class WebhookTargetHandler implements InvokeHandler<Actions.WebhookTarget
|
|
|
174
174
|
meta: {
|
|
175
175
|
eventId: it.id,
|
|
176
176
|
transactionId: it.transaction_id,
|
|
177
|
+
identityId: it.identity_id ?? null,
|
|
178
|
+
ipAddress: it.ip_address ?? null,
|
|
179
|
+
userAgent: it.user_agent ?? null,
|
|
177
180
|
createdAt: it.created_at.toISOString(),
|
|
178
181
|
lastStateChange: it.last_state_change.toISOString(),
|
|
179
182
|
numRetries: it.num_retries,
|
|
@@ -25,6 +25,7 @@ export class ActionsApiMiddlewareFactory {
|
|
|
25
25
|
const graphqlContext: ActionsContext = {
|
|
26
26
|
db: systemDatabase,
|
|
27
27
|
logger,
|
|
28
|
+
project: projectContainer.project,
|
|
28
29
|
contentSchemaResolver: projectContainer.contentSchemaResolver,
|
|
29
30
|
requireAccess: async (action, message) => {
|
|
30
31
|
if (!(await this.authorizator.isAllowed(identity, new AuthorizationScope.Global(), action))) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DateTimeType, JSONType, UuidType } from '@contember/graphql-utils'
|
|
2
2
|
import { Resolvers } from '../schema'
|
|
3
3
|
import { EventsQueryResolver } from './query'
|
|
4
|
-
import { ProcessBatchMutationResolver, SetVariablesMutationResolver } from './mutation'
|
|
4
|
+
import { ProcessBatchMutationResolver, RetryEventMutationResolver, SetVariablesMutationResolver, StopEventMutationResolver } from './mutation'
|
|
5
5
|
import { ActionsContext } from './ActionsContext'
|
|
6
6
|
import { VariablesQueryResolver } from './query/VariablesQueryResolver'
|
|
7
7
|
|
|
@@ -11,6 +11,8 @@ export class ResolversFactory {
|
|
|
11
11
|
private readonly processBatchMutationResolver: ProcessBatchMutationResolver,
|
|
12
12
|
private readonly variablesQueryResolver: VariablesQueryResolver,
|
|
13
13
|
private readonly setVariablesMutationResolver: SetVariablesMutationResolver,
|
|
14
|
+
private readonly retryEventMutationResolver: RetryEventMutationResolver,
|
|
15
|
+
private readonly stopEventMutationResolver: StopEventMutationResolver,
|
|
14
16
|
) {
|
|
15
17
|
}
|
|
16
18
|
|
|
@@ -22,11 +24,14 @@ export class ResolversFactory {
|
|
|
22
24
|
Mutation: {
|
|
23
25
|
processBatch: this.processBatchMutationResolver.processBatch.bind(this.processBatchMutationResolver),
|
|
24
26
|
setVariables: this.setVariablesMutationResolver.setVariables.bind(this.setVariablesMutationResolver),
|
|
27
|
+
retryEvent: this.retryEventMutationResolver.retryEvent.bind(this.retryEventMutationResolver),
|
|
28
|
+
stopEvent: this.stopEventMutationResolver.stopEvent.bind(this.stopEventMutationResolver),
|
|
25
29
|
},
|
|
26
30
|
Query: {
|
|
27
31
|
eventsInProcessing: this.eventsQueryResolver.eventsInProcessing.bind(this.eventsQueryResolver),
|
|
28
32
|
eventsToProcess: this.eventsQueryResolver.eventsToProcess.bind(this.eventsQueryResolver),
|
|
29
33
|
failedEvents: this.eventsQueryResolver.failedEvents.bind(this.eventsQueryResolver),
|
|
34
|
+
event: this.eventsQueryResolver.event.bind(this.eventsQueryResolver),
|
|
30
35
|
variables: this.variablesQueryResolver.variables.bind(this.variablesQueryResolver),
|
|
31
36
|
},
|
|
32
37
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MutationResolvers, MutationRetryEventArgs } from '../../schema'
|
|
2
|
+
import { ActionsContext } from '../ActionsContext'
|
|
3
|
+
import { ActionsAuthorizationActions } from '../../../authorization'
|
|
4
|
+
import { EventsRepository } from '../../../dispatch/EventsRepository'
|
|
5
|
+
import { notify } from '../../../utils/notifyChannel'
|
|
6
|
+
|
|
7
|
+
export class RetryEventMutationResolver implements MutationResolvers<ActionsContext> {
|
|
8
|
+
constructor(
|
|
9
|
+
private readonly eventsRepository: EventsRepository,
|
|
10
|
+
) {
|
|
11
|
+
}
|
|
12
|
+
async retryEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {
|
|
13
|
+
await ctx.requireAccess(ActionsAuthorizationActions.EVENTS_RETRY)
|
|
14
|
+
|
|
15
|
+
await this.eventsRepository.requeue(ctx.db.client, [args.id])
|
|
16
|
+
await notify(ctx.db.client, ctx.project.slug)
|
|
17
|
+
|
|
18
|
+
return {
|
|
19
|
+
ok: true,
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { MutationResolvers, MutationRetryEventArgs } from '../../schema'
|
|
2
|
+
import { ActionsContext } from '../ActionsContext'
|
|
3
|
+
import { ActionsAuthorizationActions } from '../../../authorization'
|
|
4
|
+
import { EventsRepository } from '../../../dispatch/EventsRepository'
|
|
5
|
+
|
|
6
|
+
export class StopEventMutationResolver implements MutationResolvers<ActionsContext> {
|
|
7
|
+
constructor(
|
|
8
|
+
private readonly eventsRepository: EventsRepository,
|
|
9
|
+
) {
|
|
10
|
+
}
|
|
11
|
+
async stopEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {
|
|
12
|
+
await ctx.requireAccess(ActionsAuthorizationActions.EVENTS_STOP)
|
|
13
|
+
|
|
14
|
+
await this.eventsRepository.markStopped(ctx.db.client, [args.id])
|
|
15
|
+
return {
|
|
16
|
+
ok: true,
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -13,6 +13,7 @@ import { Client, DatabaseQuery } from '@contember/database'
|
|
|
13
13
|
import { EventsInProcessingQuery } from '../../../model/EventsInProcessingQuery'
|
|
14
14
|
import { FailedEventsQuery } from '../../../model/FailedEventsQuery'
|
|
15
15
|
import { ActionsAuthorizationActions } from '../../../authorization'
|
|
16
|
+
import { EventByIdQuery } from '../../../model/EventByIdQuery'
|
|
16
17
|
|
|
17
18
|
export class EventsQueryResolver implements QueryResolvers<ActionsContext> {
|
|
18
19
|
async eventsInProcessing(parent: unknown, { args }: QueryEventsInProcessingArgs, ctx: ActionsContext) {
|
|
@@ -33,6 +34,16 @@ export class EventsQueryResolver implements QueryResolvers<ActionsContext> {
|
|
|
33
34
|
return await this.fetchEvents(ctx.db, new FailedEventsQuery(args ?? {}))
|
|
34
35
|
}
|
|
35
36
|
|
|
37
|
+
async event(parent: unknown, { id }: { id: string }, ctx: ActionsContext): Promise<Event | null> {
|
|
38
|
+
await ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)
|
|
39
|
+
const stages = await this.fetchStagesMap(ctx.db)
|
|
40
|
+
const result = await ctx.db.queryHandler.fetch(new EventByIdQuery(id))
|
|
41
|
+
if (!result) {
|
|
42
|
+
return null
|
|
43
|
+
}
|
|
44
|
+
return this.mapEventRows([result], stages)[0]
|
|
45
|
+
}
|
|
46
|
+
|
|
36
47
|
private async fetchEvents(db: DatabaseContext, query: DatabaseQuery<EventRow[]>) {
|
|
37
48
|
const stages = await this.fetchStagesMap(db)
|
|
38
49
|
return this.mapEventRows(await db.queryHandler.fetch(query), stages)
|
|
@@ -57,6 +68,9 @@ export class EventsQueryResolver implements QueryResolvers<ActionsContext> {
|
|
|
57
68
|
state: row.state,
|
|
58
69
|
target: row.target,
|
|
59
70
|
transactionId: row.transaction_id,
|
|
71
|
+
identityId: row.identity_id ?? undefined,
|
|
72
|
+
ipAddress: row.ip_address ?? undefined,
|
|
73
|
+
userAgent: row.user_agent ?? undefined,
|
|
60
74
|
}))
|
|
61
75
|
}
|
|
62
76
|
}
|
|
@@ -15,11 +15,14 @@ export const schema: DocumentNode = gql`
|
|
|
15
15
|
failedEvents(args: EventArgs): [Event!]!
|
|
16
16
|
eventsToProcess(args: EventArgs): [Event!]!
|
|
17
17
|
eventsInProcessing(args: EventArgs): [Event!]!
|
|
18
|
+
event(id: Uuid!): Event
|
|
18
19
|
variables: [Variable!]!
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
type Mutation {
|
|
22
23
|
processBatch: ProcessBatchResponse!
|
|
24
|
+
retryEvent(id: Uuid!): RetryEventResponse!
|
|
25
|
+
stopEvent(id: Uuid!): StopEventResponse!
|
|
23
26
|
setVariables(args: SetVariablesArgs!): SetVariablesResponse!
|
|
24
27
|
}
|
|
25
28
|
|
|
@@ -32,6 +35,9 @@ export const schema: DocumentNode = gql`
|
|
|
32
35
|
type Event {
|
|
33
36
|
id: Uuid!
|
|
34
37
|
transactionId: Uuid!
|
|
38
|
+
identityId: Uuid
|
|
39
|
+
ipAddress: String
|
|
40
|
+
userAgent: String
|
|
35
41
|
createdAt: DateTime!
|
|
36
42
|
lastStateChange: DateTime!
|
|
37
43
|
resolvedAt: DateTime
|
|
@@ -57,16 +63,24 @@ export const schema: DocumentNode = gql`
|
|
|
57
63
|
ok: Boolean!
|
|
58
64
|
}
|
|
59
65
|
|
|
66
|
+
type RetryEventResponse {
|
|
67
|
+
ok: Boolean!
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
type StopEventResponse {
|
|
71
|
+
ok: Boolean!
|
|
72
|
+
}
|
|
73
|
+
|
|
60
74
|
input SetVariablesArgs {
|
|
61
75
|
variables: [VariableInput!]!
|
|
62
76
|
mode: SetVariablesMode
|
|
63
77
|
}
|
|
64
|
-
|
|
78
|
+
|
|
65
79
|
"""
|
|
66
|
-
Defines how it handles original variables.
|
|
80
|
+
Defines how it handles original variables.
|
|
67
81
|
- MERGE merges with new values (default behaviour)
|
|
68
82
|
- SET replaces all variables
|
|
69
|
-
- APPEND_ONLY_MISSING appends values if not already exist
|
|
83
|
+
- APPEND_ONLY_MISSING appends values if not already exist
|
|
70
84
|
"""
|
|
71
85
|
enum SetVariablesMode {
|
|
72
86
|
MERGE
|
|
@@ -78,7 +92,7 @@ export const schema: DocumentNode = gql`
|
|
|
78
92
|
name: String!
|
|
79
93
|
value: String!
|
|
80
94
|
}
|
|
81
|
-
|
|
95
|
+
|
|
82
96
|
type SetVariablesResponse {
|
|
83
97
|
ok: Boolean!
|
|
84
98
|
}
|
|
@@ -16,13 +16,15 @@ export type Scalars = {
|
|
|
16
16
|
Float: { input: number; output: number }
|
|
17
17
|
DateTime: { input: Date; output: Date }
|
|
18
18
|
Json: { input: any; output: any }
|
|
19
|
-
Uuid: { input:
|
|
19
|
+
Uuid: { input: string; output: string }
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export type Event = {
|
|
23
23
|
readonly __typename?: 'Event'
|
|
24
24
|
readonly createdAt: Scalars['DateTime']['output']
|
|
25
25
|
readonly id: Scalars['Uuid']['output']
|
|
26
|
+
readonly identityId?: Maybe<Scalars['Uuid']['output']>
|
|
27
|
+
readonly ipAddress?: Maybe<Scalars['String']['output']>
|
|
26
28
|
readonly lastStateChange: Scalars['DateTime']['output']
|
|
27
29
|
readonly log: Scalars['Json']['output']
|
|
28
30
|
readonly numRetries: Scalars['Int']['output']
|
|
@@ -32,6 +34,7 @@ export type Event = {
|
|
|
32
34
|
readonly state: EventState
|
|
33
35
|
readonly target: Scalars['String']['output']
|
|
34
36
|
readonly transactionId: Scalars['Uuid']['output']
|
|
37
|
+
readonly userAgent?: Maybe<Scalars['String']['output']>
|
|
35
38
|
readonly visibleAt?: Maybe<Scalars['DateTime']['output']>
|
|
36
39
|
}
|
|
37
40
|
|
|
@@ -52,7 +55,14 @@ export type EventState =
|
|
|
52
55
|
export type Mutation = {
|
|
53
56
|
readonly __typename?: 'Mutation'
|
|
54
57
|
readonly processBatch: ProcessBatchResponse
|
|
58
|
+
readonly retryEvent: RetryEventResponse
|
|
55
59
|
readonly setVariables: SetVariablesResponse
|
|
60
|
+
readonly stopEvent: StopEventResponse
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
export type MutationRetryEventArgs = {
|
|
65
|
+
id: Scalars['Uuid']['input']
|
|
56
66
|
}
|
|
57
67
|
|
|
58
68
|
|
|
@@ -60,6 +70,11 @@ export type MutationSetVariablesArgs = {
|
|
|
60
70
|
args: SetVariablesArgs
|
|
61
71
|
}
|
|
62
72
|
|
|
73
|
+
|
|
74
|
+
export type MutationStopEventArgs = {
|
|
75
|
+
id: Scalars['Uuid']['input']
|
|
76
|
+
}
|
|
77
|
+
|
|
63
78
|
export type ProcessBatchResponse = {
|
|
64
79
|
readonly __typename?: 'ProcessBatchResponse'
|
|
65
80
|
readonly ok: Scalars['Boolean']['output']
|
|
@@ -67,6 +82,7 @@ export type ProcessBatchResponse = {
|
|
|
67
82
|
|
|
68
83
|
export type Query = {
|
|
69
84
|
readonly __typename?: 'Query'
|
|
85
|
+
readonly event?: Maybe<Event>
|
|
70
86
|
readonly eventsInProcessing: ReadonlyArray<Event>
|
|
71
87
|
readonly eventsToProcess: ReadonlyArray<Event>
|
|
72
88
|
readonly failedEvents: ReadonlyArray<Event>
|
|
@@ -74,6 +90,11 @@ export type Query = {
|
|
|
74
90
|
}
|
|
75
91
|
|
|
76
92
|
|
|
93
|
+
export type QueryEventArgs = {
|
|
94
|
+
id: Scalars['Uuid']['input']
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
77
98
|
export type QueryEventsInProcessingArgs = {
|
|
78
99
|
args?: InputMaybe<EventArgs>
|
|
79
100
|
}
|
|
@@ -88,6 +109,11 @@ export type QueryFailedEventsArgs = {
|
|
|
88
109
|
args?: InputMaybe<EventArgs>
|
|
89
110
|
}
|
|
90
111
|
|
|
112
|
+
export type RetryEventResponse = {
|
|
113
|
+
readonly __typename?: 'RetryEventResponse'
|
|
114
|
+
readonly ok: Scalars['Boolean']['output']
|
|
115
|
+
}
|
|
116
|
+
|
|
91
117
|
export type SetVariablesArgs = {
|
|
92
118
|
readonly mode?: InputMaybe<SetVariablesMode>
|
|
93
119
|
readonly variables: ReadonlyArray<VariableInput>
|
|
@@ -109,6 +135,11 @@ export type SetVariablesResponse = {
|
|
|
109
135
|
readonly ok: Scalars['Boolean']['output']
|
|
110
136
|
}
|
|
111
137
|
|
|
138
|
+
export type StopEventResponse = {
|
|
139
|
+
readonly __typename?: 'StopEventResponse'
|
|
140
|
+
readonly ok: Scalars['Boolean']['output']
|
|
141
|
+
}
|
|
142
|
+
|
|
112
143
|
export type Variable = {
|
|
113
144
|
readonly __typename?: 'Variable'
|
|
114
145
|
readonly name: Scalars['String']['output']
|
|
@@ -201,9 +232,11 @@ export type ResolversTypes = {
|
|
|
201
232
|
Mutation: ResolverTypeWrapper<{}>
|
|
202
233
|
ProcessBatchResponse: ResolverTypeWrapper<ProcessBatchResponse>
|
|
203
234
|
Query: ResolverTypeWrapper<{}>
|
|
235
|
+
RetryEventResponse: ResolverTypeWrapper<RetryEventResponse>
|
|
204
236
|
SetVariablesArgs: SetVariablesArgs
|
|
205
237
|
SetVariablesMode: SetVariablesMode
|
|
206
238
|
SetVariablesResponse: ResolverTypeWrapper<SetVariablesResponse>
|
|
239
|
+
StopEventResponse: ResolverTypeWrapper<StopEventResponse>
|
|
207
240
|
String: ResolverTypeWrapper<Scalars['String']['output']>
|
|
208
241
|
Uuid: ResolverTypeWrapper<Scalars['Uuid']['output']>
|
|
209
242
|
Variable: ResolverTypeWrapper<Variable>
|
|
@@ -221,8 +254,10 @@ export type ResolversParentTypes = {
|
|
|
221
254
|
Mutation: {}
|
|
222
255
|
ProcessBatchResponse: ProcessBatchResponse
|
|
223
256
|
Query: {}
|
|
257
|
+
RetryEventResponse: RetryEventResponse
|
|
224
258
|
SetVariablesArgs: SetVariablesArgs
|
|
225
259
|
SetVariablesResponse: SetVariablesResponse
|
|
260
|
+
StopEventResponse: StopEventResponse
|
|
226
261
|
String: Scalars['String']['output']
|
|
227
262
|
Uuid: Scalars['Uuid']['output']
|
|
228
263
|
Variable: Variable
|
|
@@ -236,6 +271,8 @@ export interface DateTimeScalarConfig extends GraphQLScalarTypeConfig<ResolversT
|
|
|
236
271
|
export type EventResolvers<ContextType = any, ParentType extends ResolversParentTypes['Event'] = ResolversParentTypes['Event']> = {
|
|
237
272
|
createdAt?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>
|
|
238
273
|
id?: Resolver<ResolversTypes['Uuid'], ParentType, ContextType>
|
|
274
|
+
identityId?: Resolver<Maybe<ResolversTypes['Uuid']>, ParentType, ContextType>
|
|
275
|
+
ipAddress?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>
|
|
239
276
|
lastStateChange?: Resolver<ResolversTypes['DateTime'], ParentType, ContextType>
|
|
240
277
|
log?: Resolver<ResolversTypes['Json'], ParentType, ContextType>
|
|
241
278
|
numRetries?: Resolver<ResolversTypes['Int'], ParentType, ContextType>
|
|
@@ -245,6 +282,7 @@ export type EventResolvers<ContextType = any, ParentType extends ResolversParent
|
|
|
245
282
|
state?: Resolver<ResolversTypes['EventState'], ParentType, ContextType>
|
|
246
283
|
target?: Resolver<ResolversTypes['String'], ParentType, ContextType>
|
|
247
284
|
transactionId?: Resolver<ResolversTypes['Uuid'], ParentType, ContextType>
|
|
285
|
+
userAgent?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>
|
|
248
286
|
visibleAt?: Resolver<Maybe<ResolversTypes['DateTime']>, ParentType, ContextType>
|
|
249
287
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
|
|
250
288
|
}
|
|
@@ -255,7 +293,9 @@ export interface JsonScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes
|
|
|
255
293
|
|
|
256
294
|
export type MutationResolvers<ContextType = any, ParentType extends ResolversParentTypes['Mutation'] = ResolversParentTypes['Mutation']> = {
|
|
257
295
|
processBatch?: Resolver<ResolversTypes['ProcessBatchResponse'], ParentType, ContextType>
|
|
296
|
+
retryEvent?: Resolver<ResolversTypes['RetryEventResponse'], ParentType, ContextType, RequireFields<MutationRetryEventArgs, 'id'>>
|
|
258
297
|
setVariables?: Resolver<ResolversTypes['SetVariablesResponse'], ParentType, ContextType, RequireFields<MutationSetVariablesArgs, 'args'>>
|
|
298
|
+
stopEvent?: Resolver<ResolversTypes['StopEventResponse'], ParentType, ContextType, RequireFields<MutationStopEventArgs, 'id'>>
|
|
259
299
|
}
|
|
260
300
|
|
|
261
301
|
export type ProcessBatchResponseResolvers<ContextType = any, ParentType extends ResolversParentTypes['ProcessBatchResponse'] = ResolversParentTypes['ProcessBatchResponse']> = {
|
|
@@ -264,17 +304,28 @@ export type ProcessBatchResponseResolvers<ContextType = any, ParentType extends
|
|
|
264
304
|
}
|
|
265
305
|
|
|
266
306
|
export type QueryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {
|
|
307
|
+
event?: Resolver<Maybe<ResolversTypes['Event']>, ParentType, ContextType, RequireFields<QueryEventArgs, 'id'>>
|
|
267
308
|
eventsInProcessing?: Resolver<ReadonlyArray<ResolversTypes['Event']>, ParentType, ContextType, Partial<QueryEventsInProcessingArgs>>
|
|
268
309
|
eventsToProcess?: Resolver<ReadonlyArray<ResolversTypes['Event']>, ParentType, ContextType, Partial<QueryEventsToProcessArgs>>
|
|
269
310
|
failedEvents?: Resolver<ReadonlyArray<ResolversTypes['Event']>, ParentType, ContextType, Partial<QueryFailedEventsArgs>>
|
|
270
311
|
variables?: Resolver<ReadonlyArray<ResolversTypes['Variable']>, ParentType, ContextType>
|
|
271
312
|
}
|
|
272
313
|
|
|
314
|
+
export type RetryEventResponseResolvers<ContextType = any, ParentType extends ResolversParentTypes['RetryEventResponse'] = ResolversParentTypes['RetryEventResponse']> = {
|
|
315
|
+
ok?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>
|
|
316
|
+
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
|
|
317
|
+
}
|
|
318
|
+
|
|
273
319
|
export type SetVariablesResponseResolvers<ContextType = any, ParentType extends ResolversParentTypes['SetVariablesResponse'] = ResolversParentTypes['SetVariablesResponse']> = {
|
|
274
320
|
ok?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>
|
|
275
321
|
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
|
|
276
322
|
}
|
|
277
323
|
|
|
324
|
+
export type StopEventResponseResolvers<ContextType = any, ParentType extends ResolversParentTypes['StopEventResponse'] = ResolversParentTypes['StopEventResponse']> = {
|
|
325
|
+
ok?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>
|
|
326
|
+
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>
|
|
327
|
+
}
|
|
328
|
+
|
|
278
329
|
export interface UuidScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['Uuid'], any> {
|
|
279
330
|
name: 'Uuid'
|
|
280
331
|
}
|
|
@@ -292,7 +343,9 @@ export type Resolvers<ContextType = any> = {
|
|
|
292
343
|
Mutation?: MutationResolvers<ContextType>
|
|
293
344
|
ProcessBatchResponse?: ProcessBatchResponseResolvers<ContextType>
|
|
294
345
|
Query?: QueryResolvers<ContextType>
|
|
346
|
+
RetryEventResponse?: RetryEventResponseResolvers<ContextType>
|
|
295
347
|
SetVariablesResponse?: SetVariablesResponseResolvers<ContextType>
|
|
348
|
+
StopEventResponse?: StopEventResponseResolvers<ContextType>
|
|
296
349
|
Uuid?: GraphQLScalarType
|
|
297
350
|
Variable?: VariableResolvers<ContextType>
|
|
298
351
|
}
|
package/src/index.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { MasterContainerBuilder, MasterContainerHook } from '@contember/engine-h
|
|
|
7
7
|
import { ActionsApiMiddlewareFactory } from './graphql/http/ActionsApiMiddlewareFactory'
|
|
8
8
|
import { ActionsGraphQLHandlerFactory } from './graphql/http/ActionsGraphQLHandlerFactory'
|
|
9
9
|
import { ResolversFactory } from './graphql/resolvers/ResolversFactory'
|
|
10
|
-
import { EventsQueryResolver, ProcessBatchMutationResolver, SetVariablesMutationResolver } from './graphql/resolvers'
|
|
10
|
+
import { EventsQueryResolver, ProcessBatchMutationResolver, RetryEventMutationResolver, SetVariablesMutationResolver, StopEventMutationResolver } from './graphql/resolvers'
|
|
11
11
|
import { EventDispatcher } from './dispatch/EventDispatcher'
|
|
12
12
|
import { EventsRepository } from './dispatch/EventsRepository'
|
|
13
13
|
import { TargetHandlerResolver } from './dispatch/TargetHandlerResolver'
|
|
@@ -50,11 +50,13 @@ export default class ActionsPlugin implements Plugin {
|
|
|
50
50
|
.addService('actions_variableManager', () => {
|
|
51
51
|
return new VariablesManager()
|
|
52
52
|
})
|
|
53
|
-
.addService('
|
|
54
|
-
|
|
53
|
+
.addService('actions_eventRepository', () => {
|
|
54
|
+
return new EventsRepository()
|
|
55
|
+
})
|
|
56
|
+
.addService('actions_eventDispatcher', ({ actions_eventRepository, actions_variableManager }) => {
|
|
55
57
|
const webhookTargetHandler = new WebhookTargetHandler(new WebhookFetcherNative())
|
|
56
58
|
const targetHandlerResolver = new TargetHandlerResolver(webhookTargetHandler)
|
|
57
|
-
return new EventDispatcher(
|
|
59
|
+
return new EventDispatcher(actions_eventRepository, actions_variableManager, targetHandlerResolver)
|
|
58
60
|
})
|
|
59
61
|
.addService('actions_dispatchWorkerSupervisorFactory', ({ actions_eventDispatcher }) => {
|
|
60
62
|
const projectDispatcherFactory = new ProjectDispatcherFactory(actions_eventDispatcher)
|
|
@@ -63,7 +65,7 @@ export default class ActionsPlugin implements Plugin {
|
|
|
63
65
|
.addService('actions_authorizator', () => {
|
|
64
66
|
return new Authorizator.Default(new AccessEvaluator.PermissionEvaluator(new ActionsPermissionsFactory().create()))
|
|
65
67
|
})
|
|
66
|
-
.setupService('application', (it, { projectContextResolver, debugMode, actions_eventDispatcher, actions_dispatchWorkerSupervisorFactory, actions_variableManager, actions_authorizator }) => {
|
|
68
|
+
.setupService('application', (it, { projectContextResolver, debugMode, actions_eventRepository, actions_eventDispatcher, actions_dispatchWorkerSupervisorFactory, actions_variableManager, actions_authorizator }) => {
|
|
67
69
|
const handlerFactory = new ActionsGraphQLHandlerFactory()
|
|
68
70
|
const eventsQueryResolver = new EventsQueryResolver()
|
|
69
71
|
const processBatchMutationResolver = new ProcessBatchMutationResolver(actions_eventDispatcher)
|
|
@@ -74,6 +76,8 @@ export default class ActionsPlugin implements Plugin {
|
|
|
74
76
|
processBatchMutationResolver,
|
|
75
77
|
variablesQueryResolver,
|
|
76
78
|
setVariablesMutationResolver,
|
|
79
|
+
new RetryEventMutationResolver(actions_eventRepository),
|
|
80
|
+
new StopEventMutationResolver(actions_eventRepository),
|
|
77
81
|
)
|
|
78
82
|
|
|
79
83
|
const actionsContextResolver = new ActionsContextResolver(debugMode, projectContextResolver)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
|
|
3
|
+
const sql = `
|
|
4
|
+
ALTER TABLE actions_event
|
|
5
|
+
ADD COLUMN IF NOT EXISTS identity_id UUID DEFAULT NULL;
|
|
6
|
+
|
|
7
|
+
ALTER TABLE actions_event
|
|
8
|
+
ADD COLUMN IF NOT EXISTS ip_address INET DEFAULT NULL;
|
|
9
|
+
|
|
10
|
+
ALTER TABLE actions_event
|
|
11
|
+
ADD COLUMN IF NOT EXISTS user_agent TEXT DEFAULT NULL;
|
|
12
|
+
`
|
|
13
|
+
|
|
14
|
+
export default async function (builder: MigrationBuilder) {
|
|
15
|
+
builder.sql(sql)
|
|
16
|
+
}
|
package/src/migrations/index.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import snapshot from './snapshot'
|
|
2
2
|
import { MigrationGroup } from '@contember/database-migrations'
|
|
3
3
|
import _20230310145000actionsvariables from './2023-03-10-145000-actions-variables'
|
|
4
|
+
import _20250528160000actioneventuser from './2025-05-28-160000-action-event-user'
|
|
4
5
|
|
|
5
6
|
export const migrationsGroup = new MigrationGroup(snapshot, {
|
|
6
7
|
'2023-03-10-145000-actions-variables': _20230310145000actionsvariables,
|
|
8
|
+
'2025-05-28-160000-action-event-user': _20250528160000actioneventuser,
|
|
7
9
|
})
|
|
@@ -30,11 +30,14 @@ export default async function (builder: MigrationBuilder) {
|
|
|
30
30
|
trigger TEXT NOT NULL,
|
|
31
31
|
priority INT NOT NULL DEFAULT 0,
|
|
32
32
|
payload JSONB NOT NULL,
|
|
33
|
-
log JSONB NOT NULL DEFAULT '[]'
|
|
33
|
+
log JSONB NOT NULL DEFAULT '[]',
|
|
34
|
+
identity_id UUID DEFAULT NULL,
|
|
35
|
+
ip_address INET DEFAULT NULL,
|
|
36
|
+
user_agent TEXT DEFAULT NULL
|
|
34
37
|
);
|
|
35
38
|
|
|
36
39
|
CREATE INDEX ON actions_event (priority DESC, visible_at) WHERE state IN ('created', 'retrying', 'processing');
|
|
37
|
-
|
|
40
|
+
|
|
38
41
|
CREATE TABLE actions_variable
|
|
39
42
|
(
|
|
40
43
|
id UUID PRIMARY KEY NOT NULL,
|