@webiny/api-sync-system 0.0.0-unstable.a4f3e4ea8b → 0.0.0-unstable.a85ef555b2

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.
Files changed (52) hide show
  1. package/index.d.ts +11 -3
  2. package/index.js +8 -3
  3. package/package.json +17 -15
  4. package/resolver/SyncResolverConfig.d.ts +17 -0
  5. package/resolver/SyncResolverConfig.js +5 -0
  6. package/resolver/SyncResolverConfig.js.map +1 -0
  7. package/resolver/SyncResolverLambdaHandler.d.ts +14 -0
  8. package/resolver/SyncResolverLambdaHandler.js +159 -0
  9. package/resolver/SyncResolverLambdaHandler.js.map +1 -0
  10. package/sync/ApiGatewaySyncDecorator.d.ts +14 -0
  11. package/sync/ApiGatewaySyncDecorator.js +49 -0
  12. package/sync/ApiGatewaySyncDecorator.js.map +1 -0
  13. package/sync/SyncSystemConfig.d.ts +11 -0
  14. package/sync/SyncSystemConfig.js +5 -0
  15. package/sync/SyncSystemConfig.js.map +1 -0
  16. package/sync/filter/createDefaultFilterOutRecordPlugins.js +0 -1
  17. package/sync/filter/createDefaultFilterOutRecordPlugins.js.map +1 -1
  18. package/types.d.ts +0 -2
  19. package/types.js.map +1 -1
  20. package/worker/SyncWorkerConfig.d.ts +9 -0
  21. package/worker/SyncWorkerConfig.js +5 -0
  22. package/worker/SyncWorkerConfig.js.map +1 -0
  23. package/worker/SyncWorkerEventHandler.d.ts +14 -0
  24. package/worker/SyncWorkerEventHandler.js +5 -0
  25. package/worker/SyncWorkerEventHandler.js.map +1 -0
  26. package/worker/SyncWorkerEventType.d.ts +10 -0
  27. package/worker/SyncWorkerEventType.js +24 -0
  28. package/worker/SyncWorkerEventType.js.map +1 -0
  29. package/worker/SyncWorkerLambdaHandler.d.ts +13 -0
  30. package/worker/SyncWorkerLambdaHandler.js +61 -0
  31. package/worker/SyncWorkerLambdaHandler.js.map +1 -0
  32. package/resolver/createEventHandlerPlugin.d.ts +0 -11
  33. package/resolver/createEventHandlerPlugin.js +0 -91
  34. package/resolver/createEventHandlerPlugin.js.map +0 -1
  35. package/resolver/createResolverHandler.d.ts +0 -21
  36. package/resolver/createResolverHandler.js +0 -64
  37. package/resolver/createResolverHandler.js.map +0 -1
  38. package/sync/createSendDataToEventBridgeOnRequestEnd.d.ts +0 -2
  39. package/sync/createSendDataToEventBridgeOnRequestEnd.js +0 -39
  40. package/sync/createSendDataToEventBridgeOnRequestEnd.js.map +0 -1
  41. package/sync/createSyncSystem.d.ts +0 -16
  42. package/sync/createSyncSystem.js +0 -33
  43. package/sync/createSyncSystem.js.map +0 -1
  44. package/sync/requestPlugin.d.ts +0 -9
  45. package/sync/requestPlugin.js +0 -43
  46. package/sync/requestPlugin.js.map +0 -1
  47. package/worker/createWorkerHandler.d.ts +0 -11
  48. package/worker/createWorkerHandler.js +0 -35
  49. package/worker/createWorkerHandler.js.map +0 -1
  50. package/worker/handler/eventHandler.d.ts +0 -1
  51. package/worker/handler/eventHandler.js +0 -22
  52. package/worker/handler/eventHandler.js.map +0 -1
package/index.d.ts CHANGED
@@ -1,3 +1,11 @@
1
- export * from "./worker/createWorkerHandler.js";
2
- export * from "./sync/createSyncSystem.js";
3
- export * from "./resolver/createResolverHandler.js";
1
+ export { SyncResolverConfig } from "./resolver/SyncResolverConfig.js";
2
+ export type { ISyncResolverConfig } from "./resolver/SyncResolverConfig.js";
3
+ export { SyncResolverLambdaHandler } from "./resolver/SyncResolverLambdaHandler.js";
4
+ export { SyncWorkerConfig } from "./worker/SyncWorkerConfig.js";
5
+ export type { ISyncWorkerConfig } from "./worker/SyncWorkerConfig.js";
6
+ export { SyncWorkerEventType } from "./worker/SyncWorkerEventType.js";
7
+ export { SyncWorkerEventHandler } from "./worker/SyncWorkerEventHandler.js";
8
+ export { SyncWorkerLambdaHandler } from "./worker/SyncWorkerLambdaHandler.js";
9
+ export { SyncSystemConfig } from "./sync/SyncSystemConfig.js";
10
+ export type { ISyncSystemConfig } from "./sync/SyncSystemConfig.js";
11
+ export { ApiGatewaySyncDecorator } from "./sync/ApiGatewaySyncDecorator.js";
package/index.js CHANGED
@@ -1,3 +1,8 @@
1
- export * from "./worker/createWorkerHandler.js";
2
- export * from "./sync/createSyncSystem.js";
3
- export * from "./resolver/createResolverHandler.js";
1
+ export { SyncResolverConfig } from "./resolver/SyncResolverConfig.js";
2
+ export { SyncResolverLambdaHandler } from "./resolver/SyncResolverLambdaHandler.js";
3
+ export { SyncWorkerConfig } from "./worker/SyncWorkerConfig.js";
4
+ export { SyncWorkerEventType } from "./worker/SyncWorkerEventType.js";
5
+ export { SyncWorkerEventHandler } from "./worker/SyncWorkerEventHandler.js";
6
+ export { SyncWorkerLambdaHandler } from "./worker/SyncWorkerLambdaHandler.js";
7
+ export { SyncSystemConfig } from "./sync/SyncSystemConfig.js";
8
+ export { ApiGatewaySyncDecorator } from "./sync/ApiGatewaySyncDecorator.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-sync-system",
3
- "version": "0.0.0-unstable.a4f3e4ea8b",
3
+ "version": "0.0.0-unstable.a85ef555b2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -14,30 +14,32 @@
14
14
  "author": "Webiny LTD",
15
15
  "license": "MIT",
16
16
  "dependencies": {
17
- "@webiny/api": "0.0.0-unstable.a4f3e4ea8b",
18
- "@webiny/api-core": "0.0.0-unstable.a4f3e4ea8b",
19
- "@webiny/aws-sdk": "0.0.0-unstable.a4f3e4ea8b",
20
- "@webiny/error": "0.0.0-unstable.a4f3e4ea8b",
21
- "@webiny/handler": "0.0.0-unstable.a4f3e4ea8b",
22
- "@webiny/handler-aws": "0.0.0-unstable.a4f3e4ea8b",
23
- "@webiny/plugins": "0.0.0-unstable.a4f3e4ea8b",
24
- "@webiny/utils": "0.0.0-unstable.a4f3e4ea8b",
17
+ "@webiny/api": "0.0.0-unstable.a85ef555b2",
18
+ "@webiny/api-core": "0.0.0-unstable.a85ef555b2",
19
+ "@webiny/aws-sdk": "0.0.0-unstable.a85ef555b2",
20
+ "@webiny/error": "0.0.0-unstable.a85ef555b2",
21
+ "@webiny/event-handler-aws": "0.0.0-unstable.a85ef555b2",
22
+ "@webiny/event-handler-core": "0.0.0-unstable.a85ef555b2",
23
+ "@webiny/feature": "0.0.0-unstable.a85ef555b2",
24
+ "@webiny/handler": "0.0.0-unstable.a85ef555b2",
25
+ "@webiny/plugins": "0.0.0-unstable.a85ef555b2",
26
+ "@webiny/utils": "0.0.0-unstable.a85ef555b2",
25
27
  "bytes": "3.1.2",
26
28
  "lodash": "4.18.1",
27
29
  "semver": "7.8.5",
28
30
  "zod": "4.4.3"
29
31
  },
30
32
  "devDependencies": {
31
- "@faker-js/faker": "10.5.0",
32
- "@types/lodash": "4.17.24",
33
- "@webiny/api-core-ddb": "0.0.0-unstable.a4f3e4ea8b",
34
- "@webiny/build-tools": "0.0.0-unstable.a4f3e4ea8b",
35
- "@webiny/project-utils": "0.0.0-unstable.a4f3e4ea8b",
33
+ "@faker-js/faker": "10.6.0",
34
+ "@types/lodash": "4.17.25",
35
+ "@webiny/api-core-ddb": "0.0.0-unstable.a85ef555b2",
36
+ "@webiny/build-tools": "0.0.0-unstable.a85ef555b2",
37
+ "@webiny/db-dynamodb": "0.0.0-unstable.a85ef555b2",
36
38
  "aws-sdk-client-mock": "4.1.0",
37
39
  "jest-dynalite": "3.6.1",
38
40
  "rimraf": "6.1.3",
39
41
  "typescript": "7.0.2",
40
- "vitest": "4.1.10"
42
+ "vitest": "4.1.11"
41
43
  },
42
44
  "publishConfig": {
43
45
  "access": "public"
@@ -0,0 +1,17 @@
1
+ import type { DynamoDBClientConfig, DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
2
+ import type { LambdaClient, LambdaClientConfig } from "@webiny/aws-sdk/client-lambda/index.js";
3
+ import type { S3Client, S3ClientConfig } from "@webiny/aws-sdk/client-s3/index.js";
4
+ import type { CognitoIdentityProvider, CognitoIdentityProviderClientConfig } from "@webiny/aws-sdk/client-cognito-identity-provider/index.js";
5
+ import type { TransformRecordPlugin } from "./plugins/TransformRecordPlugin.js";
6
+ import type { CommandHandlerPlugin } from "./plugins/CommandHandlerPlugin.js";
7
+ export type AllowedResolverPlugins = TransformRecordPlugin | CommandHandlerPlugin;
8
+ export interface ISyncResolverConfig {
9
+ tableName?: string;
10
+ awsWorkerLambdaArn?: string;
11
+ createDocumentClient(params: Partial<DynamoDBClientConfig>): Pick<DynamoDBDocument, "send">;
12
+ createLambdaClient?(config: Partial<LambdaClientConfig>): Pick<LambdaClient, "send">;
13
+ createS3Client?(config: S3ClientConfig): Pick<S3Client, "send">;
14
+ createCognitoIdentityProviderClient?(config: Partial<CognitoIdentityProviderClientConfig>): Pick<CognitoIdentityProvider, "send">;
15
+ plugins?: AllowedResolverPlugins[];
16
+ }
17
+ export declare const SyncResolverConfig: import("@webiny/di").Abstraction<ISyncResolverConfig>;
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const SyncResolverConfig = createAbstraction("SyncResolverConfig");
3
+ export { SyncResolverConfig };
4
+
5
+ //# sourceMappingURL=SyncResolverConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver/SyncResolverConfig.js","sources":["../../src/resolver/SyncResolverConfig.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type {\n DynamoDBClientConfig,\n DynamoDBDocument\n} from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport type { LambdaClient, LambdaClientConfig } from \"@webiny/aws-sdk/client-lambda/index.js\";\nimport type { S3Client, S3ClientConfig } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type {\n CognitoIdentityProvider,\n CognitoIdentityProviderClientConfig\n} from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport type { TransformRecordPlugin } from \"./plugins/TransformRecordPlugin.js\";\nimport type { CommandHandlerPlugin } from \"./plugins/CommandHandlerPlugin.js\";\n\nexport type AllowedResolverPlugins = TransformRecordPlugin | CommandHandlerPlugin;\n\nexport interface ISyncResolverConfig {\n tableName?: string;\n awsWorkerLambdaArn?: string;\n createDocumentClient(params: Partial<DynamoDBClientConfig>): Pick<DynamoDBDocument, \"send\">;\n createLambdaClient?(config: Partial<LambdaClientConfig>): Pick<LambdaClient, \"send\">;\n createS3Client?(config: S3ClientConfig): Pick<S3Client, \"send\">;\n createCognitoIdentityProviderClient?(\n config: Partial<CognitoIdentityProviderClientConfig>\n ): Pick<CognitoIdentityProvider, \"send\">;\n plugins?: AllowedResolverPlugins[];\n}\n\nexport const SyncResolverConfig = createAbstraction<ISyncResolverConfig>(\"SyncResolverConfig\");\n"],"names":["SyncResolverConfig","createAbstraction"],"mappings":";AA4BO,MAAMA,qBAAqBC,kBAAuC"}
@@ -0,0 +1,14 @@
1
+ import { SqsEventHandler } from "@webiny/event-handler-aws/abstractions/handlers/SqsEventHandler.js";
2
+ import type { SqsResult } from "@webiny/event-handler-aws/abstractions/handlers/SqsEventHandler.js";
3
+ import type { EventContext, NextFunction } from "@webiny/event-handler-core";
4
+ import type { SQSEvent } from "@webiny/aws-sdk/types/index.js";
5
+ import type { ISyncResolverConfig } from "./SyncResolverConfig.js";
6
+ declare class SyncResolverLambdaHandlerImpl implements SqsEventHandler.Interface {
7
+ private config;
8
+ constructor(config: ISyncResolverConfig);
9
+ execute(eventCtx: EventContext<SQSEvent>, _next: NextFunction): Promise<SqsResult>;
10
+ }
11
+ export declare const SyncResolverLambdaHandler: typeof SyncResolverLambdaHandlerImpl & {
12
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/event-handler-aws/abstractions/handlers/SqsEventHandler.js").ISqsEventHandler>;
13
+ };
14
+ export {};
@@ -0,0 +1,159 @@
1
+ import { SqsEventHandler } from "@webiny/event-handler-aws/abstractions/handlers/SqsEventHandler.js";
2
+ import { PluginsContainer } from "@webiny/plugins";
3
+ import { WebinyError } from "@webiny/error";
4
+ import { convertException } from "@webiny/utils";
5
+ import { SyncResolverConfig } from "./SyncResolverConfig.js";
6
+ import { createFetcher } from "./app/fetcher/Fetcher.js";
7
+ import { createDeploymentsFetcher } from "./deployment/DeploymentsFetcher.js";
8
+ import { createStorer } from "./app/storer/Storer.js";
9
+ import { TransformHandler } from "./app/transform/TransformHandler.js";
10
+ import { createRecordHandler } from "./app/RecordHandler.js";
11
+ import { createResolverApp } from "./app/ResolverApplication.js";
12
+ import { createBundler } from "./app/bundler/Bundler.js";
13
+ import { createBundles } from "./app/bundler/Bundles.js";
14
+ import { createCommandBundle } from "./app/bundler/CommandBundle.js";
15
+ import { createTableBundle } from "./app/bundler/TableBundle.js";
16
+ import { SourceDataContainer } from "./app/data/SourceDataContainer.js";
17
+ import { StorerAfterEachPlugin } from "./plugins/StorerAfterEachPlugin.js";
18
+ import { createFileManagerPlugins } from "./recordTypes/fileManager/fileManager.js";
19
+ import { LambdaTrigger } from "./lambda/LambdaTrigger.js";
20
+ import { CopyFile } from "./recordTypes/fileManager/CopyFile.js";
21
+ import { DeleteFile } from "./recordTypes/fileManager/DeleteFile.js";
22
+ import { createUsersPlugins } from "./recordTypes/users/users.js";
23
+ import { CopyUser } from "./recordTypes/users/CopyUser.js";
24
+ import { DeleteUser } from "./recordTypes/users/DeleteUser.js";
25
+ import { createPutCommandHandlerPlugin } from "./app/commandHandler/put.js";
26
+ import { createDeleteCommandHandlerPlugin } from "./app/commandHandler/delete.js";
27
+ async function processResolverEvent(records, config, plugins) {
28
+ const tableName = config.tableName || process.env.DB_TABLE;
29
+ if (!tableName) throw new WebinyError({
30
+ message: "Table name variable is not set."
31
+ });
32
+ const fetcher = createFetcher({
33
+ maxRetries: 10,
34
+ retryDelay: 1000,
35
+ createDocumentClient: (deployment)=>config.createDocumentClient({
36
+ region: deployment.region
37
+ })
38
+ });
39
+ const deploymentsFetcher = createDeploymentsFetcher({
40
+ client: config.createDocumentClient({
41
+ region: process.env.AWS_REGION
42
+ }),
43
+ table: tableName
44
+ });
45
+ const deployments = await deploymentsFetcher.fetch();
46
+ const storerAfterEachPlugins = plugins.byType(StorerAfterEachPlugin.type);
47
+ const storer = createStorer({
48
+ createDocumentClient: (deployment)=>config.createDocumentClient({
49
+ region: deployment.region
50
+ }),
51
+ afterEach: async (params)=>{
52
+ for (const plugin of storerAfterEachPlugins)if (plugin.canHandle(params)) await plugin.handle(params);
53
+ }
54
+ });
55
+ const transformHandler = new TransformHandler({
56
+ plugins
57
+ });
58
+ const recordHandler = createRecordHandler({
59
+ plugins,
60
+ fetcher,
61
+ storer,
62
+ deployments,
63
+ transformHandler,
64
+ commandBundler: createBundler({
65
+ createBundles: ()=>createBundles({
66
+ createBundle: createCommandBundle
67
+ })
68
+ }),
69
+ tableBundler: createBundler({
70
+ createBundles: ()=>createBundles({
71
+ createBundle: createTableBundle
72
+ })
73
+ }),
74
+ createSourceDataContainer: ()=>SourceDataContainer.create()
75
+ });
76
+ const app = createResolverApp({
77
+ recordHandler,
78
+ deployments
79
+ });
80
+ await app.resolve({
81
+ records
82
+ });
83
+ }
84
+ class SyncResolverLambdaHandlerImpl {
85
+ constructor(config){
86
+ this.config = config;
87
+ }
88
+ async execute(eventCtx, _next) {
89
+ const { createLambdaClient, createS3Client, createCognitoIdentityProviderClient } = this.config;
90
+ const awsWorkerLambdaArn = this.config.awsWorkerLambdaArn || process.env.AWS_SYNC_WORKER_LAMBDA_ARN;
91
+ const copyFileTrigger = createLambdaClient && awsWorkerLambdaArn ? new LambdaTrigger({
92
+ arn: awsWorkerLambdaArn,
93
+ createLambdaClient
94
+ }) : void 0;
95
+ const deleteFileTrigger = createLambdaClient && awsWorkerLambdaArn ? new LambdaTrigger({
96
+ arn: awsWorkerLambdaArn,
97
+ createLambdaClient
98
+ }) : void 0;
99
+ const copyUserTrigger = createLambdaClient && awsWorkerLambdaArn ? new LambdaTrigger({
100
+ arn: awsWorkerLambdaArn,
101
+ createLambdaClient
102
+ }) : void 0;
103
+ const deleteUserTrigger = createLambdaClient && awsWorkerLambdaArn ? new LambdaTrigger({
104
+ arn: awsWorkerLambdaArn,
105
+ createLambdaClient
106
+ }) : void 0;
107
+ const copyFile = createS3Client && copyFileTrigger ? new CopyFile({
108
+ createS3Client,
109
+ getLambdaTrigger: ()=>copyFileTrigger
110
+ }) : void 0;
111
+ const deleteFile = createS3Client && deleteFileTrigger ? new DeleteFile({
112
+ createS3Client,
113
+ getLambdaTrigger: ()=>deleteFileTrigger
114
+ }) : void 0;
115
+ const copyUser = createCognitoIdentityProviderClient && copyUserTrigger ? new CopyUser({
116
+ createCognitoIdentityProviderClient,
117
+ getLambdaTrigger: ()=>copyUserTrigger
118
+ }) : void 0;
119
+ const deleteUser = createCognitoIdentityProviderClient && deleteUserTrigger ? new DeleteUser({
120
+ createCognitoIdentityProviderClient,
121
+ getLambdaTrigger: ()=>deleteUserTrigger
122
+ }) : void 0;
123
+ const plugins = new PluginsContainer([
124
+ ...copyFile && deleteFile ? createFileManagerPlugins({
125
+ copyFile,
126
+ deleteFile
127
+ }) : [],
128
+ ...copyUser && deleteUser ? createUsersPlugins({
129
+ copyUser,
130
+ deleteUser
131
+ }) : [],
132
+ createPutCommandHandlerPlugin(),
133
+ createDeleteCommandHandlerPlugin(),
134
+ ...this.config.plugins || []
135
+ ]);
136
+ try {
137
+ await processResolverEvent(eventCtx.event.Records, this.config, plugins);
138
+ return {
139
+ success: true
140
+ };
141
+ } catch (ex) {
142
+ const error = convertException(ex);
143
+ console.error(error);
144
+ return {
145
+ success: false,
146
+ message: error.message
147
+ };
148
+ }
149
+ }
150
+ }
151
+ const SyncResolverLambdaHandler = SqsEventHandler.createImplementation({
152
+ implementation: SyncResolverLambdaHandlerImpl,
153
+ dependencies: [
154
+ SyncResolverConfig
155
+ ]
156
+ });
157
+ export { SyncResolverLambdaHandler };
158
+
159
+ //# sourceMappingURL=SyncResolverLambdaHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver/SyncResolverLambdaHandler.js","sources":["../../src/resolver/SyncResolverLambdaHandler.ts"],"sourcesContent":["import { SqsEventHandler } from \"@webiny/event-handler-aws/abstractions/handlers/SqsEventHandler.js\";\nimport type { SqsResult } from \"@webiny/event-handler-aws/abstractions/handlers/SqsEventHandler.js\";\nimport type { EventContext, NextFunction } from \"@webiny/event-handler-core\";\nimport type { SQSEvent } from \"@webiny/aws-sdk/types/index.js\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { WebinyError } from \"@webiny/error\";\nimport { convertException } from \"@webiny/utils\";\nimport { SyncResolverConfig } from \"./SyncResolverConfig.js\";\nimport type { ISyncResolverConfig } from \"./SyncResolverConfig.js\";\nimport { createFetcher } from \"~/resolver/app/fetcher/Fetcher.js\";\nimport { createDeploymentsFetcher } from \"~/resolver/deployment/DeploymentsFetcher.js\";\nimport { createStorer } from \"~/resolver/app/storer/Storer.js\";\nimport { TransformHandler } from \"~/resolver/app/transform/TransformHandler.js\";\nimport { createRecordHandler } from \"~/resolver/app/RecordHandler.js\";\nimport { createResolverApp } from \"~/resolver/app/ResolverApplication.js\";\nimport { createBundler } from \"~/resolver/app/bundler/Bundler.js\";\nimport { createBundles } from \"~/resolver/app/bundler/Bundles.js\";\nimport { createCommandBundle } from \"~/resolver/app/bundler/CommandBundle.js\";\nimport { createTableBundle } from \"~/resolver/app/bundler/TableBundle.js\";\nimport { SourceDataContainer } from \"~/resolver/app/data/SourceDataContainer.js\";\nimport { StorerAfterEachPlugin } from \"~/resolver/plugins/StorerAfterEachPlugin.js\";\nimport { createFileManagerPlugins } from \"~/resolver/recordTypes/fileManager/fileManager.js\";\nimport { LambdaTrigger } from \"~/resolver/lambda/LambdaTrigger.js\";\nimport { CopyFile } from \"~/resolver/recordTypes/fileManager/CopyFile.js\";\nimport { DeleteFile } from \"~/resolver/recordTypes/fileManager/DeleteFile.js\";\nimport { createUsersPlugins } from \"~/resolver/recordTypes/users/users.js\";\nimport { CopyUser } from \"~/resolver/recordTypes/users/CopyUser.js\";\nimport { DeleteUser } from \"~/resolver/recordTypes/users/DeleteUser.js\";\nimport { createPutCommandHandlerPlugin } from \"~/resolver/app/commandHandler/put.js\";\nimport { createDeleteCommandHandlerPlugin } from \"~/resolver/app/commandHandler/delete.js\";\nimport type {\n ICopyFileLambdaPayload,\n IDeleteFileLambdaPayload,\n ICopyUserLambdaPayload,\n IDeleteUserLambdaPayload\n} from \"~/types.js\";\n\nasync function processResolverEvent(\n records: SQSEvent[\"Records\"],\n config: ISyncResolverConfig,\n plugins: PluginsContainer\n): Promise<void> {\n const tableName = config.tableName || process.env.DB_TABLE;\n if (!tableName) {\n throw new WebinyError({ message: \"Table name variable is not set.\" });\n }\n\n const fetcher = createFetcher({\n maxRetries: 10,\n retryDelay: 1000,\n createDocumentClient: deployment =>\n config.createDocumentClient({ region: deployment.region })\n });\n\n const deploymentsFetcher = createDeploymentsFetcher({\n client: config.createDocumentClient({ region: process.env.AWS_REGION }),\n table: tableName\n });\n\n const deployments = await deploymentsFetcher.fetch();\n\n const storerAfterEachPlugins = plugins.byType<StorerAfterEachPlugin>(\n StorerAfterEachPlugin.type\n );\n\n const storer = createStorer({\n createDocumentClient: deployment =>\n config.createDocumentClient({ region: deployment.region }),\n afterEach: async params => {\n for (const plugin of storerAfterEachPlugins) {\n if (!plugin.canHandle(params)) {\n continue;\n }\n await plugin.handle(params);\n }\n }\n });\n\n const transformHandler = new TransformHandler({ plugins });\n const recordHandler = createRecordHandler({\n plugins,\n fetcher,\n storer,\n deployments,\n transformHandler,\n commandBundler: createBundler({\n createBundles: () => createBundles({ createBundle: createCommandBundle })\n }),\n tableBundler: createBundler({\n createBundles: () => createBundles({ createBundle: createTableBundle })\n }),\n createSourceDataContainer: () => SourceDataContainer.create()\n });\n\n const app = createResolverApp({ recordHandler, deployments });\n await app.resolve({ records });\n}\n\nclass SyncResolverLambdaHandlerImpl implements SqsEventHandler.Interface {\n constructor(private config: ISyncResolverConfig) {}\n\n async execute(eventCtx: EventContext<SQSEvent>, _next: NextFunction): Promise<SqsResult> {\n const { createLambdaClient, createS3Client, createCognitoIdentityProviderClient } =\n this.config;\n\n const awsWorkerLambdaArn =\n this.config.awsWorkerLambdaArn || process.env.AWS_SYNC_WORKER_LAMBDA_ARN;\n\n const copyFileTrigger =\n createLambdaClient && awsWorkerLambdaArn\n ? new LambdaTrigger<ICopyFileLambdaPayload>({\n arn: awsWorkerLambdaArn,\n createLambdaClient\n })\n : undefined;\n\n const deleteFileTrigger =\n createLambdaClient && awsWorkerLambdaArn\n ? new LambdaTrigger<IDeleteFileLambdaPayload>({\n arn: awsWorkerLambdaArn,\n createLambdaClient\n })\n : undefined;\n\n const copyUserTrigger =\n createLambdaClient && awsWorkerLambdaArn\n ? new LambdaTrigger<ICopyUserLambdaPayload>({\n arn: awsWorkerLambdaArn,\n createLambdaClient\n })\n : undefined;\n\n const deleteUserTrigger =\n createLambdaClient && awsWorkerLambdaArn\n ? new LambdaTrigger<IDeleteUserLambdaPayload>({\n arn: awsWorkerLambdaArn,\n createLambdaClient\n })\n : undefined;\n\n const copyFile =\n createS3Client && copyFileTrigger\n ? new CopyFile({\n createS3Client,\n getLambdaTrigger: () => copyFileTrigger\n })\n : undefined;\n\n const deleteFile =\n createS3Client && deleteFileTrigger\n ? new DeleteFile({\n createS3Client,\n getLambdaTrigger: () => deleteFileTrigger\n })\n : undefined;\n\n const copyUser =\n createCognitoIdentityProviderClient && copyUserTrigger\n ? new CopyUser({\n createCognitoIdentityProviderClient,\n getLambdaTrigger: () => copyUserTrigger\n })\n : undefined;\n\n const deleteUser =\n createCognitoIdentityProviderClient && deleteUserTrigger\n ? new DeleteUser({\n createCognitoIdentityProviderClient,\n getLambdaTrigger: () => deleteUserTrigger\n })\n : undefined;\n\n const plugins = new PluginsContainer([\n ...(copyFile && deleteFile ? createFileManagerPlugins({ copyFile, deleteFile }) : []),\n ...(copyUser && deleteUser ? createUsersPlugins({ copyUser, deleteUser }) : []),\n createPutCommandHandlerPlugin(),\n createDeleteCommandHandlerPlugin(),\n ...(this.config.plugins || [])\n ]);\n\n try {\n await processResolverEvent(eventCtx.event.Records, this.config, plugins);\n return { success: true };\n } catch (ex) {\n const error = convertException(ex);\n console.error(error);\n return { success: false, message: error.message };\n }\n }\n}\n\nexport const SyncResolverLambdaHandler = SqsEventHandler.createImplementation({\n implementation: SyncResolverLambdaHandlerImpl,\n dependencies: [SyncResolverConfig]\n});\n"],"names":["processResolverEvent","records","config","plugins","tableName","process","WebinyError","fetcher","createFetcher","deployment","deploymentsFetcher","createDeploymentsFetcher","deployments","storerAfterEachPlugins","StorerAfterEachPlugin","storer","createStorer","params","plugin","transformHandler","TransformHandler","recordHandler","createRecordHandler","createBundler","createBundles","createCommandBundle","createTableBundle","SourceDataContainer","app","createResolverApp","SyncResolverLambdaHandlerImpl","eventCtx","_next","createLambdaClient","createS3Client","createCognitoIdentityProviderClient","awsWorkerLambdaArn","copyFileTrigger","LambdaTrigger","undefined","deleteFileTrigger","copyUserTrigger","deleteUserTrigger","copyFile","CopyFile","deleteFile","DeleteFile","copyUser","CopyUser","deleteUser","DeleteUser","PluginsContainer","createFileManagerPlugins","createUsersPlugins","createPutCommandHandlerPlugin","createDeleteCommandHandlerPlugin","ex","error","convertException","console","SyncResolverLambdaHandler","SqsEventHandler","SyncResolverConfig"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,eAAeA,qBACXC,OAA4B,EAC5BC,MAA2B,EAC3BC,OAAyB;IAEzB,MAAMC,YAAYF,OAAO,SAAS,IAAIG,QAAQ,GAAG,CAAC,QAAQ;IAC1D,IAAI,CAACD,WACD,MAAM,IAAIE,YAAY;QAAE,SAAS;IAAkC;IAGvE,MAAMC,UAAUC,cAAc;QAC1B,YAAY;QACZ,YAAY;QACZ,sBAAsBC,CAAAA,aAClBP,OAAO,oBAAoB,CAAC;gBAAE,QAAQO,WAAW,MAAM;YAAC;IAChE;IAEA,MAAMC,qBAAqBC,yBAAyB;QAChD,QAAQT,OAAO,oBAAoB,CAAC;YAAE,QAAQG,QAAQ,GAAG,CAAC,UAAU;QAAC;QACrE,OAAOD;IACX;IAEA,MAAMQ,cAAc,MAAMF,mBAAmB,KAAK;IAElD,MAAMG,yBAAyBV,QAAQ,MAAM,CACzCW,sBAAsB,IAAI;IAG9B,MAAMC,SAASC,aAAa;QACxB,sBAAsBP,CAAAA,aAClBP,OAAO,oBAAoB,CAAC;gBAAE,QAAQO,WAAW,MAAM;YAAC;QAC5D,WAAW,OAAMQ;YACb,KAAK,MAAMC,UAAUL,uBACjB,IAAKK,OAAO,SAAS,CAACD,SAGtB,MAAMC,OAAO,MAAM,CAACD;QAE5B;IACJ;IAEA,MAAME,mBAAmB,IAAIC,iBAAiB;QAAEjB;IAAQ;IACxD,MAAMkB,gBAAgBC,oBAAoB;QACtCnB;QACAI;QACAQ;QACAH;QACAO;QACA,gBAAgBI,cAAc;YAC1B,eAAe,IAAMC,cAAc;oBAAE,cAAcC;gBAAoB;QAC3E;QACA,cAAcF,cAAc;YACxB,eAAe,IAAMC,cAAc;oBAAE,cAAcE;gBAAkB;QACzE;QACA,2BAA2B,IAAMC,oBAAoB,MAAM;IAC/D;IAEA,MAAMC,MAAMC,kBAAkB;QAAER;QAAeT;IAAY;IAC3D,MAAMgB,IAAI,OAAO,CAAC;QAAE3B;IAAQ;AAChC;AAEA,MAAM6B;IACF,YAAoB5B,MAA2B,CAAE;aAA7BA,MAAM,GAANA;IAA8B;IAElD,MAAM,QAAQ6B,QAAgC,EAAEC,KAAmB,EAAsB;QACrF,MAAM,EAAEC,kBAAkB,EAAEC,cAAc,EAAEC,mCAAmC,EAAE,GAC7E,IAAI,CAAC,MAAM;QAEf,MAAMC,qBACF,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI/B,QAAQ,GAAG,CAAC,0BAA0B;QAE5E,MAAMgC,kBACFJ,sBAAsBG,qBAChB,IAAIE,cAAsC;YACtC,KAAKF;YACLH;QACJ,KACAM;QAEV,MAAMC,oBACFP,sBAAsBG,qBAChB,IAAIE,cAAwC;YACxC,KAAKF;YACLH;QACJ,KACAM;QAEV,MAAME,kBACFR,sBAAsBG,qBAChB,IAAIE,cAAsC;YACtC,KAAKF;YACLH;QACJ,KACAM;QAEV,MAAMG,oBACFT,sBAAsBG,qBAChB,IAAIE,cAAwC;YACxC,KAAKF;YACLH;QACJ,KACAM;QAEV,MAAMI,WACFT,kBAAkBG,kBACZ,IAAIO,SAAS;YACTV;YACA,kBAAkB,IAAMG;QAC5B,KACAE;QAEV,MAAMM,aACFX,kBAAkBM,oBACZ,IAAIM,WAAW;YACXZ;YACA,kBAAkB,IAAMM;QAC5B,KACAD;QAEV,MAAMQ,WACFZ,uCAAuCM,kBACjC,IAAIO,SAAS;YACTb;YACA,kBAAkB,IAAMM;QAC5B,KACAF;QAEV,MAAMU,aACFd,uCAAuCO,oBACjC,IAAIQ,WAAW;YACXf;YACA,kBAAkB,IAAMO;QAC5B,KACAH;QAEV,MAAMpC,UAAU,IAAIgD,iBAAiB;eAC7BR,YAAYE,aAAaO,yBAAyB;gBAAET;gBAAUE;YAAW,KAAK,EAAE;eAChFE,YAAYE,aAAaI,mBAAmB;gBAAEN;gBAAUE;YAAW,KAAK,EAAE;YAC9EK;YACAC;eACI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;SAChC;QAED,IAAI;YACA,MAAMvD,qBAAqB+B,SAAS,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE5B;YAChE,OAAO;gBAAE,SAAS;YAAK;QAC3B,EAAE,OAAOqD,IAAI;YACT,MAAMC,QAAQC,iBAAiBF;YAC/BG,QAAQ,KAAK,CAACF;YACd,OAAO;gBAAE,SAAS;gBAAO,SAASA,MAAM,OAAO;YAAC;QACpD;IACJ;AACJ;AAEO,MAAMG,4BAA4BC,gBAAgB,oBAAoB,CAAC;IAC1E,gBAAgB/B;IAChB,cAAc;QAACgC;KAAmB;AACtC"}
@@ -0,0 +1,14 @@
1
+ import type { APIGatewayProxyEvent } from "@webiny/aws-sdk/types/index.js";
2
+ import { ApiGatewayEventHandler } from "@webiny/event-handler-aws/abstractions/handlers/ApiGatewayEventHandler.js";
3
+ import type { EventContext, NextFunction } from "@webiny/event-handler-core";
4
+ import type { ISyncSystemConfig } from "./SyncSystemConfig.js";
5
+ declare class ApiGatewaySyncDecoratorImpl implements ApiGatewayEventHandler.Interface {
6
+ private config;
7
+ private inner;
8
+ constructor(config: ISyncSystemConfig, inner: ApiGatewayEventHandler.Interface);
9
+ execute(ctx: EventContext<APIGatewayProxyEvent>, next: NextFunction): Promise<any>;
10
+ }
11
+ export declare const ApiGatewaySyncDecorator: typeof ApiGatewaySyncDecoratorImpl & {
12
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/event-handler-aws/abstractions/handlers/ApiGatewayEventHandler.js").IApiGatewayEventHandler>;
13
+ };
14
+ export {};
@@ -0,0 +1,49 @@
1
+ import { ApiGatewayEventHandler } from "@webiny/event-handler-aws/abstractions/handlers/ApiGatewayEventHandler.js";
2
+ import { PluginsContainer } from "@webiny/plugins";
3
+ import { SyncSystemConfig } from "./SyncSystemConfig.js";
4
+ import { createHandler } from "./createHandler.js";
5
+ import { getManifest } from "./utils/manifest.js";
6
+ import { decorateClientWithHandler } from "./attachToDynamoDbDocument.js";
7
+ import { createDefaultFilterOutRecordPlugins } from "./filter/createDefaultFilterOutRecordPlugins.js";
8
+ class ApiGatewaySyncDecoratorImpl {
9
+ constructor(config, inner){
10
+ this.config = config;
11
+ this.inner = inner;
12
+ }
13
+ async execute(ctx, next) {
14
+ const { data: manifest, error } = await getManifest();
15
+ if (error || !manifest?.sync?.region) {
16
+ if ("true" === process.env.DEBUG) console.warn("[ApiGatewaySyncDecorator] Manifest not available — sync disabled.");
17
+ return this.inner.execute(ctx, next);
18
+ }
19
+ const filterPlugins = [
20
+ ...createDefaultFilterOutRecordPlugins(),
21
+ ...this.config.plugins || []
22
+ ];
23
+ const { handler } = createHandler({
24
+ getEventBridgeClient: this.config.getEventBridgeClient,
25
+ system: this.config.system,
26
+ manifest,
27
+ getPlugins: ()=>new PluginsContainer(filterPlugins)
28
+ });
29
+ const documentClient = this.config.getDocumentClient();
30
+ decorateClientWithHandler({
31
+ handler,
32
+ client: documentClient
33
+ });
34
+ try {
35
+ return await this.inner.execute(ctx, next);
36
+ } finally{
37
+ await handler.flush();
38
+ }
39
+ }
40
+ }
41
+ const ApiGatewaySyncDecorator = ApiGatewayEventHandler.createDecorator({
42
+ decorator: ApiGatewaySyncDecoratorImpl,
43
+ dependencies: [
44
+ SyncSystemConfig
45
+ ]
46
+ });
47
+ export { ApiGatewaySyncDecorator };
48
+
49
+ //# sourceMappingURL=ApiGatewaySyncDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync/ApiGatewaySyncDecorator.js","sources":["../../src/sync/ApiGatewaySyncDecorator.ts"],"sourcesContent":["import type { APIGatewayProxyEvent } from \"@webiny/aws-sdk/types/index.js\";\nimport { ApiGatewayEventHandler } from \"@webiny/event-handler-aws/abstractions/handlers/ApiGatewayEventHandler.js\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport type { EventContext, NextFunction } from \"@webiny/event-handler-core\";\nimport { SyncSystemConfig } from \"./SyncSystemConfig.js\";\nimport type { ISyncSystemConfig } from \"./SyncSystemConfig.js\";\nimport { createHandler } from \"~/sync/createHandler.js\";\nimport { getManifest } from \"~/sync/utils/manifest.js\";\nimport { decorateClientWithHandler } from \"~/sync/attachToDynamoDbDocument.js\";\nimport { createDefaultFilterOutRecordPlugins } from \"~/sync/filter/createDefaultFilterOutRecordPlugins.js\";\n\nclass ApiGatewaySyncDecoratorImpl implements ApiGatewayEventHandler.Interface {\n constructor(\n private config: ISyncSystemConfig,\n private inner: ApiGatewayEventHandler.Interface\n ) {}\n\n async execute(ctx: EventContext<APIGatewayProxyEvent>, next: NextFunction): Promise<any> {\n const { data: manifest, error } = await getManifest();\n if (error || !manifest?.sync?.region) {\n if (process.env.DEBUG === \"true\") {\n console.warn(\"[ApiGatewaySyncDecorator] Manifest not available — sync disabled.\");\n }\n return this.inner.execute(ctx, next);\n }\n\n const filterPlugins = [\n ...createDefaultFilterOutRecordPlugins(),\n ...(this.config.plugins || [])\n ];\n\n const { handler } = createHandler({\n getEventBridgeClient: this.config.getEventBridgeClient,\n system: this.config.system,\n manifest,\n getPlugins: () => new PluginsContainer(filterPlugins)\n });\n\n const documentClient = this.config.getDocumentClient();\n decorateClientWithHandler({ handler, client: documentClient as any });\n\n try {\n return await this.inner.execute(ctx, next);\n } finally {\n await handler.flush();\n }\n }\n}\n\nexport const ApiGatewaySyncDecorator = ApiGatewayEventHandler.createDecorator({\n decorator: ApiGatewaySyncDecoratorImpl,\n dependencies: [SyncSystemConfig]\n});\n"],"names":["ApiGatewaySyncDecoratorImpl","config","inner","ctx","next","manifest","error","getManifest","process","console","filterPlugins","createDefaultFilterOutRecordPlugins","handler","createHandler","PluginsContainer","documentClient","decorateClientWithHandler","ApiGatewaySyncDecorator","ApiGatewayEventHandler","SyncSystemConfig"],"mappings":";;;;;;;AAWA,MAAMA;IACF,YACYC,MAAyB,EACzBC,KAAuC,CACjD;aAFUD,MAAM,GAANA;aACAC,KAAK,GAALA;IACT;IAEH,MAAM,QAAQC,GAAuC,EAAEC,IAAkB,EAAgB;QACrF,MAAM,EAAE,MAAMC,QAAQ,EAAEC,KAAK,EAAE,GAAG,MAAMC;QACxC,IAAID,SAAS,CAACD,UAAU,MAAM,QAAQ;YAClC,IAAIG,AAAsB,WAAtBA,QAAQ,GAAG,CAAC,KAAK,EACjBC,QAAQ,IAAI,CAAC;YAEjB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAACN,KAAKC;QACnC;QAEA,MAAMM,gBAAgB;eACfC;eACC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;SAChC;QAED,MAAM,EAAEC,OAAO,EAAE,GAAGC,cAAc;YAC9B,sBAAsB,IAAI,CAAC,MAAM,CAAC,oBAAoB;YACtD,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1BR;YACA,YAAY,IAAM,IAAIS,iBAAiBJ;QAC3C;QAEA,MAAMK,iBAAiB,IAAI,CAAC,MAAM,CAAC,iBAAiB;QACpDC,0BAA0B;YAAEJ;YAAS,QAAQG;QAAsB;QAEnE,IAAI;YACA,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAACZ,KAAKC;QACzC,SAAU;YACN,MAAMQ,QAAQ,KAAK;QACvB;IACJ;AACJ;AAEO,MAAMK,0BAA0BC,uBAAuB,eAAe,CAAC;IAC1E,WAAWlB;IACX,cAAc;QAACmB;KAAiB;AACpC"}
@@ -0,0 +1,11 @@
1
+ import type { EventBridgeClient } from "@webiny/aws-sdk/client-eventbridge/index.js";
2
+ import type { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
3
+ import type { ISystem } from "./types.js";
4
+ import type { FilterOutRecordPlugin } from "./plugins/FilterOutRecordPlugin.js";
5
+ export interface ISyncSystemConfig {
6
+ getDocumentClient(): Pick<DynamoDBDocument, "send">;
7
+ getEventBridgeClient(): Pick<EventBridgeClient, "send">;
8
+ system: ISystem;
9
+ plugins?: FilterOutRecordPlugin[];
10
+ }
11
+ export declare const SyncSystemConfig: import("@webiny/di").Abstraction<ISyncSystemConfig>;
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const SyncSystemConfig = createAbstraction("SyncSystemConfig");
3
+ export { SyncSystemConfig };
4
+
5
+ //# sourceMappingURL=SyncSystemConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync/SyncSystemConfig.js","sources":["../../src/sync/SyncSystemConfig.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { EventBridgeClient } from \"@webiny/aws-sdk/client-eventbridge/index.js\";\nimport type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport type { ISystem } from \"./types.js\";\nimport type { FilterOutRecordPlugin } from \"./plugins/FilterOutRecordPlugin.js\";\n\nexport interface ISyncSystemConfig {\n getDocumentClient(): Pick<DynamoDBDocument, \"send\">;\n getEventBridgeClient(): Pick<EventBridgeClient, \"send\">;\n system: ISystem;\n plugins?: FilterOutRecordPlugin[];\n}\n\nexport const SyncSystemConfig = createAbstraction<ISyncSystemConfig>(\"SyncSystemConfig\");\n"],"names":["SyncSystemConfig","createAbstraction"],"mappings":";AAaO,MAAMA,mBAAmBC,kBAAqC"}
@@ -3,7 +3,6 @@ const equalKeys = [
3
3
  "LOG",
4
4
  "PS#SETTINGS",
5
5
  "WS#CONNECTIONS",
6
- "APW#SETTINGS",
7
6
  "DEPLOYMENTS",
8
7
  "ADMIN#SETTINGS"
9
8
  ].map((key)=>key.toLowerCase());
@@ -1 +1 @@
1
- {"version":3,"file":"sync/filter/createDefaultFilterOutRecordPlugins.js","sources":["../../../src/sync/filter/createDefaultFilterOutRecordPlugins.ts"],"sourcesContent":["import {\n createFilterOutRecordPlugin,\n FilterOutRecordPlugin\n} from \"~/sync/plugins/FilterOutRecordPlugin.js\";\n\n/**\n * Order keys by what is most like to be filtered out - most inserts/updates/deletes.\n * This is out of my head, so it might not be the best order.\n */\nexport const equalKeys: string[] = [\n // Logging - every request\n \"LOG\",\n // P\n \"PS#SETTINGS\",\n // Websockets - on every user login\n \"WS#CONNECTIONS\",\n /**\n * packages/db-dynamodb/src/DynamoDbDriver.ts\n */\n //`W#INTERNAL`,\n /**\n * APW settings\n */\n \"APW#SETTINGS\",\n // Deployments - on every deployment\n \"DEPLOYMENTS\",\n // Admin\n \"ADMIN#SETTINGS\"\n].map(key => {\n return key.toLowerCase();\n});\n\nexport const startsWithKeys: string[] = [\n // Websockets - on every user login\n \"WS#\",\n // Migrations - on every deployment\n \"MIGRATION_RUN#\",\n \"MIGRATION#\",\n // Service Manifest - on deployment if something was changed in the service manifest\n \"SERVICE_MANIFEST#\",\n // Deployments - on every deployment\n \"DEPLOYMENT#\"\n].map(key => {\n return key.toLowerCase();\n});\n/**\n * TODO figure out a way to skip these models.\n * When deleting a record, we do not have a modelId in the values.\n */\nexport const skipModels: string[] = [\n // RECORD LOCKING\n \"wbyRecordLock\",\n // TASKS\n \"wbyTaskLog\",\n \"wbyTask\"\n].map(key => {\n return key.toLowerCase();\n});\n\nexport const createDefaultFilterOutRecordPlugins = (): FilterOutRecordPlugin[] => {\n return [\n createFilterOutRecordPlugin({\n name: FilterOutRecordPlugin.createName(\"default\"),\n filterOut: record => {\n const pk = record.PK.toLowerCase();\n if (equalKeys.includes(pk)) {\n return true;\n }\n for (const key of startsWithKeys) {\n if (pk.startsWith(key)) {\n return true;\n }\n }\n /**\n * TODO figure out a way to skip models without using expect-error.\n */\n // @ts-expect-error\n const modelId = record.input?.input?.Item?.modelId?.toLowerCase();\n if (!modelId) {\n return false;\n } else if (skipModels.includes(modelId)) {\n return true;\n }\n return false;\n }\n })\n ];\n};\n"],"names":["equalKeys","key","startsWithKeys","skipModels","createDefaultFilterOutRecordPlugins","createFilterOutRecordPlugin","FilterOutRecordPlugin","record","pk","modelId"],"mappings":";AASO,MAAMA,YAAsB;IAE/B;IAEA;IAEA;IAQA;IAEA;IAEA;CACH,CAAC,GAAG,CAACC,CAAAA,MACKA,IAAI,WAAW;AAGnB,MAAMC,iBAA2B;IAEpC;IAEA;IACA;IAEA;IAEA;CACH,CAAC,GAAG,CAACD,CAAAA,MACKA,IAAI,WAAW;AAMnB,MAAME,aAAuB;IAEhC;IAEA;IACA;CACH,CAAC,GAAG,CAACF,CAAAA,MACKA,IAAI,WAAW;AAGnB,MAAMG,sCAAsC,IACxC;QACHC,4BAA4B;YACxB,MAAMC,sBAAsB,UAAU,CAAC;YACvC,WAAWC,CAAAA;gBACP,MAAMC,KAAKD,OAAO,EAAE,CAAC,WAAW;gBAChC,IAAIP,UAAU,QAAQ,CAACQ,KACnB,OAAO;gBAEX,KAAK,MAAMP,OAAOC,eACd,IAAIM,GAAG,UAAU,CAACP,MACd,OAAO;gBAOf,MAAMQ,UAAUF,OAAO,KAAK,EAAE,OAAO,MAAM,SAAS;gBACpD,IAAKE,SAEE;oBAAA,IAAIN,WAAW,QAAQ,CAACM,UAC3B,OAAO;gBACX;gBACA,OAAO;YACX;QACJ;KACH"}
1
+ {"version":3,"file":"sync/filter/createDefaultFilterOutRecordPlugins.js","sources":["../../../src/sync/filter/createDefaultFilterOutRecordPlugins.ts"],"sourcesContent":["import {\n createFilterOutRecordPlugin,\n FilterOutRecordPlugin\n} from \"~/sync/plugins/FilterOutRecordPlugin.js\";\n\n/**\n * Order keys by what is most like to be filtered out - most inserts/updates/deletes.\n * This is out of my head, so it might not be the best order.\n */\nexport const equalKeys: string[] = [\n // Logging - every request\n \"LOG\",\n // P\n \"PS#SETTINGS\",\n // Websockets - on every user login\n \"WS#CONNECTIONS\",\n /**\n * packages/db-dynamodb/src/DynamoDbDriver.ts\n */\n //`W#INTERNAL`,\n // Deployments - on every deployment\n \"DEPLOYMENTS\",\n // Admin\n \"ADMIN#SETTINGS\"\n].map(key => {\n return key.toLowerCase();\n});\n\nexport const startsWithKeys: string[] = [\n // Websockets - on every user login\n \"WS#\",\n // Migrations - on every deployment\n \"MIGRATION_RUN#\",\n \"MIGRATION#\",\n // Service Manifest - on deployment if something was changed in the service manifest\n \"SERVICE_MANIFEST#\",\n // Deployments - on every deployment\n \"DEPLOYMENT#\"\n].map(key => {\n return key.toLowerCase();\n});\n/**\n * TODO figure out a way to skip these models.\n * When deleting a record, we do not have a modelId in the values.\n */\nexport const skipModels: string[] = [\n // RECORD LOCKING\n \"wbyRecordLock\",\n // TASKS\n \"wbyTaskLog\",\n \"wbyTask\"\n].map(key => {\n return key.toLowerCase();\n});\n\nexport const createDefaultFilterOutRecordPlugins = (): FilterOutRecordPlugin[] => {\n return [\n createFilterOutRecordPlugin({\n name: FilterOutRecordPlugin.createName(\"default\"),\n filterOut: record => {\n const pk = record.PK.toLowerCase();\n if (equalKeys.includes(pk)) {\n return true;\n }\n for (const key of startsWithKeys) {\n if (pk.startsWith(key)) {\n return true;\n }\n }\n /**\n * TODO figure out a way to skip models without using expect-error.\n */\n // @ts-expect-error\n const modelId = record.input?.input?.Item?.modelId?.toLowerCase();\n if (!modelId) {\n return false;\n } else if (skipModels.includes(modelId)) {\n return true;\n }\n return false;\n }\n })\n ];\n};\n"],"names":["equalKeys","key","startsWithKeys","skipModels","createDefaultFilterOutRecordPlugins","createFilterOutRecordPlugin","FilterOutRecordPlugin","record","pk","modelId"],"mappings":";AASO,MAAMA,YAAsB;IAE/B;IAEA;IAEA;IAMA;IAEA;CACH,CAAC,GAAG,CAACC,CAAAA,MACKA,IAAI,WAAW;AAGnB,MAAMC,iBAA2B;IAEpC;IAEA;IACA;IAEA;IAEA;CACH,CAAC,GAAG,CAACD,CAAAA,MACKA,IAAI,WAAW;AAMnB,MAAME,aAAuB;IAEhC;IAEA;IACA;CACH,CAAC,GAAG,CAACF,CAAAA,MACKA,IAAI,WAAW;AAGnB,MAAMG,sCAAsC,IACxC;QACHC,4BAA4B;YACxB,MAAMC,sBAAsB,UAAU,CAAC;YACvC,WAAWC,CAAAA;gBACP,MAAMC,KAAKD,OAAO,EAAE,CAAC,WAAW;gBAChC,IAAIP,UAAU,QAAQ,CAACQ,KACnB,OAAO;gBAEX,KAAK,MAAMP,OAAOC,eACd,IAAIM,GAAG,UAAU,CAACP,MACd,OAAO;gBAOf,MAAMQ,UAAUF,OAAO,KAAK,EAAE,OAAO,MAAM,SAAS;gBACpD,IAAKE,SAEE;oBAAA,IAAIN,WAAW,QAAQ,CAACM,UAC3B,OAAO;gBACX;gBACA,OAAO;YACX;QACJ;KACH"}
package/types.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { Context as BaseContext } from "@webiny/handler-aws/types.js";
2
1
  export type CommandType = "put" | "delete";
3
2
  export type ExtendedCommandType = "put" | "delete" | "update";
4
3
  export type AllCommandType = ExtendedCommandType | "batchWrite" | "null";
@@ -7,7 +6,6 @@ export declare enum DynamoDBTableType {
7
6
  OPENSEARCH = "opensearch",
8
7
  UNKNOWN = "unknown"
9
8
  }
10
- export type Context = BaseContext;
11
9
  export interface IFileLambdaPayloadInfo {
12
10
  bucket: string;
13
11
  region: string;
package/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["import type { Context as BaseContext } from \"@webiny/handler-aws/types.js\";\n\nexport type CommandType = \"put\" | \"delete\";\nexport type ExtendedCommandType = \"put\" | \"delete\" | \"update\";\nexport type AllCommandType = ExtendedCommandType | \"batchWrite\" | \"null\";\n\nexport enum DynamoDBTableType {\n REGULAR = \"regular\",\n OPENSEARCH = \"opensearch\",\n UNKNOWN = \"unknown\"\n}\n\nexport type Context = BaseContext;\n\nexport interface IFileLambdaPayloadInfo {\n bucket: string;\n region: string;\n}\n\nexport interface ICopyFileLambdaPayload {\n action: \"copyFile\";\n key: string;\n source: IFileLambdaPayloadInfo;\n target: IFileLambdaPayloadInfo;\n}\n\nexport interface IDeleteFileLambdaPayload {\n action: \"deleteFile\";\n key: string;\n target: IFileLambdaPayloadInfo;\n}\n\nexport interface IUserLambdaPayloadInfo {\n region: string;\n userPoolId: string;\n}\n\nexport interface IDeleteUserLambdaPayload {\n action: \"deleteUser\";\n username: string;\n target: IUserLambdaPayloadInfo;\n}\n\nexport interface ICopyUserLambdaPayload {\n action: \"createUser\" | \"updateUser\";\n username: string;\n source: IUserLambdaPayloadInfo;\n target: IUserLambdaPayloadInfo;\n}\n"],"names":["DynamoDBTableType"],"mappings":"AAMO,IAAKA,0BAAiBA,WAAAA,GAAAA,SAAjBA,iBAAiB;;;;WAAjBA"}
1
+ {"version":3,"file":"types.js","sources":["../src/types.ts"],"sourcesContent":["export type CommandType = \"put\" | \"delete\";\nexport type ExtendedCommandType = \"put\" | \"delete\" | \"update\";\nexport type AllCommandType = ExtendedCommandType | \"batchWrite\" | \"null\";\n\nexport enum DynamoDBTableType {\n REGULAR = \"regular\",\n OPENSEARCH = \"opensearch\",\n UNKNOWN = \"unknown\"\n}\n\nexport interface IFileLambdaPayloadInfo {\n bucket: string;\n region: string;\n}\n\nexport interface ICopyFileLambdaPayload {\n action: \"copyFile\";\n key: string;\n source: IFileLambdaPayloadInfo;\n target: IFileLambdaPayloadInfo;\n}\n\nexport interface IDeleteFileLambdaPayload {\n action: \"deleteFile\";\n key: string;\n target: IFileLambdaPayloadInfo;\n}\n\nexport interface IUserLambdaPayloadInfo {\n region: string;\n userPoolId: string;\n}\n\nexport interface IDeleteUserLambdaPayload {\n action: \"deleteUser\";\n username: string;\n target: IUserLambdaPayloadInfo;\n}\n\nexport interface ICopyUserLambdaPayload {\n action: \"createUser\" | \"updateUser\";\n username: string;\n source: IUserLambdaPayloadInfo;\n target: IUserLambdaPayloadInfo;\n}\n"],"names":["DynamoDBTableType"],"mappings":"AAIO,IAAKA,0BAAiBA,WAAAA,GAAAA,SAAjBA,iBAAiB;;;;WAAjBA"}
@@ -0,0 +1,9 @@
1
+ import type { S3Client, S3ClientConfig } from "@webiny/aws-sdk/client-s3/index.js";
2
+ import type { CognitoIdentityProvider, CognitoIdentityProviderClientConfig } from "@webiny/aws-sdk/client-cognito-identity-provider/index.js";
3
+ import type { Plugin } from "@webiny/plugins/types.js";
4
+ export interface ISyncWorkerConfig {
5
+ createS3Client(config: S3ClientConfig): Pick<S3Client, "send">;
6
+ createCognitoIdentityProviderClient(config: CognitoIdentityProviderClientConfig): Pick<CognitoIdentityProvider, "send">;
7
+ plugins?: Plugin[];
8
+ }
9
+ export declare const SyncWorkerConfig: import("@webiny/di").Abstraction<ISyncWorkerConfig>;
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const SyncWorkerConfig = createAbstraction("SyncWorkerConfig");
3
+ export { SyncWorkerConfig };
4
+
5
+ //# sourceMappingURL=SyncWorkerConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker/SyncWorkerConfig.js","sources":["../../src/worker/SyncWorkerConfig.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { S3Client, S3ClientConfig } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type {\n CognitoIdentityProvider,\n CognitoIdentityProviderClientConfig\n} from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport type { Plugin } from \"@webiny/plugins/types.js\";\n\nexport interface ISyncWorkerConfig {\n createS3Client(config: S3ClientConfig): Pick<S3Client, \"send\">;\n createCognitoIdentityProviderClient(\n config: CognitoIdentityProviderClientConfig\n ): Pick<CognitoIdentityProvider, \"send\">;\n plugins?: Plugin[];\n}\n\nexport const SyncWorkerConfig = createAbstraction<ISyncWorkerConfig>(\"SyncWorkerConfig\");\n"],"names":["SyncWorkerConfig","createAbstraction"],"mappings":";AAgBO,MAAMA,mBAAmBC,kBAAqC"}
@@ -0,0 +1,14 @@
1
+ import type { IEventHandler } from "@webiny/event-handler-core";
2
+ export interface ISyncWorkerEvent {
3
+ action: string;
4
+ [key: string]: unknown;
5
+ }
6
+ export interface ISyncWorkerResult {
7
+ success: boolean;
8
+ }
9
+ export interface ISyncWorkerEventHandler extends IEventHandler<ISyncWorkerEvent, ISyncWorkerResult> {
10
+ }
11
+ export declare const SyncWorkerEventHandler: import("@webiny/di").Abstraction<ISyncWorkerEventHandler>;
12
+ export declare namespace SyncWorkerEventHandler {
13
+ type Interface = ISyncWorkerEventHandler;
14
+ }
@@ -0,0 +1,5 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+ const SyncWorkerEventHandler = createAbstraction("SyncWorkerEventHandler");
3
+ export { SyncWorkerEventHandler };
4
+
5
+ //# sourceMappingURL=SyncWorkerEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker/SyncWorkerEventHandler.js","sources":["../../src/worker/SyncWorkerEventHandler.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type { IEventHandler } from \"@webiny/event-handler-core\";\n\nexport interface ISyncWorkerEvent {\n action: string;\n [key: string]: unknown;\n}\n\nexport interface ISyncWorkerResult {\n success: boolean;\n}\n\nexport interface ISyncWorkerEventHandler extends IEventHandler<\n ISyncWorkerEvent,\n ISyncWorkerResult\n> {}\n\nexport const SyncWorkerEventHandler =\n createAbstraction<ISyncWorkerEventHandler>(\"SyncWorkerEventHandler\");\n\nexport namespace SyncWorkerEventHandler {\n export type Interface = ISyncWorkerEventHandler;\n}\n"],"names":["SyncWorkerEventHandler","createAbstraction"],"mappings":";AAiBO,MAAMA,yBACTC,kBAA2C"}
@@ -0,0 +1,10 @@
1
+ import type { IEventType } from "@webiny/event-handler-core";
2
+ import type { ISyncWorkerEvent } from "./SyncWorkerEventHandler.js";
3
+ declare class SyncWorkerEventTypeImpl implements IEventType<ISyncWorkerEvent> {
4
+ canHandle(event: any): event is ISyncWorkerEvent;
5
+ getHandlerAbstraction(): import("@webiny/di").Abstraction<import("./SyncWorkerEventHandler.js").ISyncWorkerEventHandler>;
6
+ }
7
+ export declare const SyncWorkerEventType: typeof SyncWorkerEventTypeImpl & {
8
+ __abstraction: import("@webiny/di").Abstraction<IEventType<any>>;
9
+ };
10
+ export {};
@@ -0,0 +1,24 @@
1
+ import { EventType } from "@webiny/event-handler-core";
2
+ import { SyncWorkerEventHandler } from "./SyncWorkerEventHandler.js";
3
+ const SYNC_WORKER_ACTIONS = [
4
+ "copyFile",
5
+ "deleteFile",
6
+ "createUser",
7
+ "updateUser",
8
+ "deleteUser"
9
+ ];
10
+ class SyncWorkerEventTypeImpl {
11
+ canHandle(event) {
12
+ return "string" == typeof event?.action && SYNC_WORKER_ACTIONS.includes(event.action);
13
+ }
14
+ getHandlerAbstraction() {
15
+ return SyncWorkerEventHandler;
16
+ }
17
+ }
18
+ const SyncWorkerEventType = EventType.createImplementation({
19
+ implementation: SyncWorkerEventTypeImpl,
20
+ dependencies: []
21
+ });
22
+ export { SyncWorkerEventType };
23
+
24
+ //# sourceMappingURL=SyncWorkerEventType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker/SyncWorkerEventType.js","sources":["../../src/worker/SyncWorkerEventType.ts"],"sourcesContent":["import { EventType } from \"@webiny/event-handler-core\";\nimport type { IEventType } from \"@webiny/event-handler-core\";\nimport { SyncWorkerEventHandler } from \"./SyncWorkerEventHandler.js\";\nimport type { ISyncWorkerEvent } from \"./SyncWorkerEventHandler.js\";\n\nconst SYNC_WORKER_ACTIONS = [\n \"copyFile\",\n \"deleteFile\",\n \"createUser\",\n \"updateUser\",\n \"deleteUser\"\n] as const;\n\nclass SyncWorkerEventTypeImpl implements IEventType<ISyncWorkerEvent> {\n canHandle(event: any): event is ISyncWorkerEvent {\n return (\n typeof event?.action === \"string\" &&\n SYNC_WORKER_ACTIONS.includes(event.action as (typeof SYNC_WORKER_ACTIONS)[number])\n );\n }\n\n getHandlerAbstraction() {\n return SyncWorkerEventHandler;\n }\n}\n\nexport const SyncWorkerEventType = EventType.createImplementation({\n implementation: SyncWorkerEventTypeImpl,\n dependencies: []\n});\n"],"names":["SYNC_WORKER_ACTIONS","SyncWorkerEventTypeImpl","event","SyncWorkerEventHandler","SyncWorkerEventType","EventType"],"mappings":";;AAKA,MAAMA,sBAAsB;IACxB;IACA;IACA;IACA;IACA;CACH;AAED,MAAMC;IACF,UAAUC,KAAU,EAA6B;QAC7C,OACI,AAAyB,YAAzB,OAAOA,OAAO,UACdF,oBAAoB,QAAQ,CAACE,MAAM,MAAM;IAEjD;IAEA,wBAAwB;QACpB,OAAOC;IACX;AACJ;AAEO,MAAMC,sBAAsBC,UAAU,oBAAoB,CAAC;IAC9D,gBAAgBJ;IAChB,cAAc,EAAE;AACpB"}
@@ -0,0 +1,13 @@
1
+ import type { EventContext, NextFunction } from "@webiny/event-handler-core";
2
+ import { SyncWorkerEventHandler } from "./SyncWorkerEventHandler.js";
3
+ import type { ISyncWorkerEvent, ISyncWorkerResult } from "./SyncWorkerEventHandler.js";
4
+ import type { ISyncWorkerConfig } from "./SyncWorkerConfig.js";
5
+ declare class SyncWorkerLambdaHandlerImpl implements SyncWorkerEventHandler.Interface {
6
+ private config;
7
+ constructor(config: ISyncWorkerConfig);
8
+ execute(eventCtx: EventContext<ISyncWorkerEvent>, _next: NextFunction): Promise<ISyncWorkerResult>;
9
+ }
10
+ export declare const SyncWorkerLambdaHandler: typeof SyncWorkerLambdaHandlerImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("./SyncWorkerEventHandler.js").ISyncWorkerEventHandler>;
12
+ };
13
+ export {};
@@ -0,0 +1,61 @@
1
+ import { convertException } from "@webiny/utils";
2
+ import { PluginsContainer } from "@webiny/plugins";
3
+ import { SyncWorkerEventHandler } from "./SyncWorkerEventHandler.js";
4
+ import { SyncWorkerConfig } from "./SyncWorkerConfig.js";
5
+ import { WorkerActionHandler } from "./handler/WorkerActionHandler.js";
6
+ import { WorkerActionPlugin } from "./plugins/WorkerActionPlugin.js";
7
+ import { createCopyFileAction } from "./actions/copyFile/copyFileAction.js";
8
+ import { createDeleteFileAction } from "./actions/deleteFile/deleteFileAction.js";
9
+ import { createCreateUserAction } from "./actions/createUser/createUserAction.js";
10
+ import { createUpdateUserAction } from "./actions/updateUser/updateUserAction.js";
11
+ import { createDeleteUserAction } from "./actions/deleteUser/deleteUserAction.js";
12
+ class SyncWorkerLambdaHandlerImpl {
13
+ constructor(config){
14
+ this.config = config;
15
+ }
16
+ async execute(eventCtx, _next) {
17
+ const { createS3Client, createCognitoIdentityProviderClient } = this.config;
18
+ const plugins = new PluginsContainer([
19
+ createCopyFileAction({
20
+ createS3Client
21
+ }),
22
+ createDeleteFileAction({
23
+ createS3Client
24
+ }),
25
+ createCreateUserAction({
26
+ createCognitoProvider: createCognitoIdentityProviderClient
27
+ }),
28
+ createUpdateUserAction({
29
+ createCognitoProvider: createCognitoIdentityProviderClient
30
+ }),
31
+ createDeleteUserAction({
32
+ createCognitoProvider: createCognitoIdentityProviderClient
33
+ }),
34
+ ...this.config.plugins || []
35
+ ]);
36
+ const handler = new WorkerActionHandler({
37
+ plugins: plugins.byType(WorkerActionPlugin.type)
38
+ });
39
+ try {
40
+ await handler.handle(eventCtx.event);
41
+ return {
42
+ success: true
43
+ };
44
+ } catch (ex) {
45
+ console.error("Error while handling sync worker action.");
46
+ console.log(convertException(ex));
47
+ return {
48
+ success: false
49
+ };
50
+ }
51
+ }
52
+ }
53
+ const SyncWorkerLambdaHandler = SyncWorkerEventHandler.createImplementation({
54
+ implementation: SyncWorkerLambdaHandlerImpl,
55
+ dependencies: [
56
+ SyncWorkerConfig
57
+ ]
58
+ });
59
+ export { SyncWorkerLambdaHandler };
60
+
61
+ //# sourceMappingURL=SyncWorkerLambdaHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker/SyncWorkerLambdaHandler.js","sources":["../../src/worker/SyncWorkerLambdaHandler.ts"],"sourcesContent":["import { convertException } from \"@webiny/utils\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport type { EventContext, NextFunction } from \"@webiny/event-handler-core\";\nimport { SyncWorkerEventHandler } from \"./SyncWorkerEventHandler.js\";\nimport type { ISyncWorkerEvent, ISyncWorkerResult } from \"./SyncWorkerEventHandler.js\";\nimport { SyncWorkerConfig } from \"./SyncWorkerConfig.js\";\nimport type { ISyncWorkerConfig } from \"./SyncWorkerConfig.js\";\nimport { WorkerActionHandler } from \"~/worker/handler/WorkerActionHandler.js\";\nimport { WorkerActionPlugin } from \"~/worker/plugins/WorkerActionPlugin.js\";\nimport { createCopyFileAction } from \"~/worker/actions/copyFile/copyFileAction.js\";\nimport { createDeleteFileAction } from \"~/worker/actions/deleteFile/deleteFileAction.js\";\nimport { createCreateUserAction } from \"~/worker/actions/createUser/createUserAction.js\";\nimport { createUpdateUserAction } from \"~/worker/actions/updateUser/updateUserAction.js\";\nimport { createDeleteUserAction } from \"~/worker/actions/deleteUser/deleteUserAction.js\";\n\nclass SyncWorkerLambdaHandlerImpl implements SyncWorkerEventHandler.Interface {\n constructor(private config: ISyncWorkerConfig) {}\n\n async execute(\n eventCtx: EventContext<ISyncWorkerEvent>,\n _next: NextFunction\n ): Promise<ISyncWorkerResult> {\n const { createS3Client, createCognitoIdentityProviderClient } = this.config;\n\n const plugins = new PluginsContainer([\n createCopyFileAction({ createS3Client }),\n createDeleteFileAction({ createS3Client }),\n createCreateUserAction({ createCognitoProvider: createCognitoIdentityProviderClient }),\n createUpdateUserAction({ createCognitoProvider: createCognitoIdentityProviderClient }),\n createDeleteUserAction({ createCognitoProvider: createCognitoIdentityProviderClient }),\n ...(this.config.plugins || [])\n ]);\n\n const handler = new WorkerActionHandler({\n plugins: plugins.byType<WorkerActionPlugin>(WorkerActionPlugin.type)\n });\n\n try {\n await handler.handle(eventCtx.event);\n return { success: true };\n } catch (ex) {\n console.error(\"Error while handling sync worker action.\");\n console.log(convertException(ex));\n return { success: false };\n }\n }\n}\n\nexport const SyncWorkerLambdaHandler = SyncWorkerEventHandler.createImplementation({\n implementation: SyncWorkerLambdaHandlerImpl,\n dependencies: [SyncWorkerConfig]\n});\n"],"names":["SyncWorkerLambdaHandlerImpl","config","eventCtx","_next","createS3Client","createCognitoIdentityProviderClient","plugins","PluginsContainer","createCopyFileAction","createDeleteFileAction","createCreateUserAction","createUpdateUserAction","createDeleteUserAction","handler","WorkerActionHandler","WorkerActionPlugin","ex","console","convertException","SyncWorkerLambdaHandler","SyncWorkerEventHandler","SyncWorkerConfig"],"mappings":";;;;;;;;;;;AAeA,MAAMA;IACF,YAAoBC,MAAyB,CAAE;aAA3BA,MAAM,GAANA;IAA4B;IAEhD,MAAM,QACFC,QAAwC,EACxCC,KAAmB,EACO;QAC1B,MAAM,EAAEC,cAAc,EAAEC,mCAAmC,EAAE,GAAG,IAAI,CAAC,MAAM;QAE3E,MAAMC,UAAU,IAAIC,iBAAiB;YACjCC,qBAAqB;gBAAEJ;YAAe;YACtCK,uBAAuB;gBAAEL;YAAe;YACxCM,uBAAuB;gBAAE,uBAAuBL;YAAoC;YACpFM,uBAAuB;gBAAE,uBAAuBN;YAAoC;YACpFO,uBAAuB;gBAAE,uBAAuBP;YAAoC;eAChF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;SAChC;QAED,MAAMQ,UAAU,IAAIC,oBAAoB;YACpC,SAASR,QAAQ,MAAM,CAAqBS,mBAAmB,IAAI;QACvE;QAEA,IAAI;YACA,MAAMF,QAAQ,MAAM,CAACX,SAAS,KAAK;YACnC,OAAO;gBAAE,SAAS;YAAK;QAC3B,EAAE,OAAOc,IAAI;YACTC,QAAQ,KAAK,CAAC;YACdA,QAAQ,GAAG,CAACC,iBAAiBF;YAC7B,OAAO;gBAAE,SAAS;YAAM;QAC5B;IACJ;AACJ;AAEO,MAAMG,0BAA0BC,uBAAuB,oBAAoB,CAAC;IAC/E,gBAAgBpB;IAChB,cAAc;QAACqB;KAAiB;AACpC"}
@@ -1,11 +0,0 @@
1
- import type { DynamoDBClientConfig, DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
2
- import type { Reply as FastifyReply } from "@webiny/handler/types.js";
3
- import { SQSEventHandler } from "@webiny/handler-aws/sqs/plugins/SQSEventHandler.js";
4
- export interface ICreateEventHandlerPluginParams {
5
- tableName: string | undefined;
6
- createDocumentClient: (params: DynamoDBClientConfig) => Pick<DynamoDBDocument, "send">;
7
- }
8
- /**
9
- * TODO maybe add logger?
10
- */
11
- export declare const createEventHandlerPlugin: (params: ICreateEventHandlerPluginParams) => SQSEventHandler<FastifyReply>;
@@ -1,91 +0,0 @@
1
- import { createEventHandler } from "@webiny/handler-aws/sqs/index.js";
2
- import { createResolverApp } from "./app/ResolverApplication.js";
3
- import { convertException } from "@webiny/utils";
4
- import { createRecordHandler } from "./app/RecordHandler.js";
5
- import { createFetcher } from "./app/fetcher/Fetcher.js";
6
- import { createDeploymentsFetcher } from "./deployment/DeploymentsFetcher.js";
7
- import { WebinyError } from "@webiny/error";
8
- import { createBundler } from "./app/bundler/Bundler.js";
9
- import { createBundles } from "./app/bundler/Bundles.js";
10
- import { createCommandBundle } from "./app/bundler/CommandBundle.js";
11
- import { createTableBundle } from "./app/bundler/TableBundle.js";
12
- import { TransformHandler } from "./app/transform/TransformHandler.js";
13
- import { SQSEventHandler } from "@webiny/handler-aws/sqs/plugins/SQSEventHandler.js";
14
- import { createStorer } from "./app/storer/Storer.js";
15
- import { StorerAfterEachPlugin } from "./plugins/StorerAfterEachPlugin.js";
16
- import { SourceDataContainer } from "./app/data/SourceDataContainer.js";
17
- const createEventHandlerPlugin = (params)=>{
18
- const { createDocumentClient, tableName } = params;
19
- const plugin = createEventHandler(async ({ event, context, reply })=>{
20
- if (!tableName) throw new WebinyError({
21
- message: "Table name variable is not set."
22
- });
23
- try {
24
- const fetcher = createFetcher({
25
- maxRetries: 10,
26
- retryDelay: 1000,
27
- createDocumentClient: (deployment)=>createDocumentClient({
28
- region: deployment.region
29
- })
30
- });
31
- const deploymentsFetcher = createDeploymentsFetcher({
32
- client: createDocumentClient({
33
- region: process.env.AWS_REGION
34
- }),
35
- table: tableName
36
- });
37
- const deployments = await deploymentsFetcher.fetch();
38
- const storerAfterEachPlugins = context.plugins.byType(StorerAfterEachPlugin.type);
39
- const storer = createStorer({
40
- createDocumentClient: (deployment)=>createDocumentClient({
41
- region: deployment.region
42
- }),
43
- afterEach: async (params)=>{
44
- for (const plugin of storerAfterEachPlugins)if (plugin.canHandle(params)) await plugin.handle(params);
45
- }
46
- });
47
- const transformHandler = new TransformHandler({
48
- plugins: context.plugins
49
- });
50
- const recordHandler = createRecordHandler({
51
- plugins: context.plugins,
52
- fetcher,
53
- storer,
54
- deployments,
55
- transformHandler,
56
- commandBundler: createBundler({
57
- createBundles: ()=>createBundles({
58
- createBundle: createCommandBundle
59
- })
60
- }),
61
- tableBundler: createBundler({
62
- createBundles: ()=>createBundles({
63
- createBundle: createTableBundle
64
- })
65
- }),
66
- createSourceDataContainer: ()=>SourceDataContainer.create()
67
- });
68
- const app = createResolverApp({
69
- recordHandler,
70
- deployments
71
- });
72
- await app.resolve({
73
- records: event.Records
74
- });
75
- return reply.send({
76
- ok: true
77
- });
78
- } catch (ex) {
79
- const error = convertException(ex);
80
- console.error(error);
81
- return reply.send({
82
- error
83
- });
84
- }
85
- });
86
- plugin.name = `${SQSEventHandler.type}.syncResolver`;
87
- return plugin;
88
- };
89
- export { createEventHandlerPlugin };
90
-
91
- //# sourceMappingURL=createEventHandlerPlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolver/createEventHandlerPlugin.js","sources":["../../src/resolver/createEventHandlerPlugin.ts"],"sourcesContent":["import { createEventHandler as createSQSEventHandler } from \"@webiny/handler-aws/sqs/index.js\";\nimport { createResolverApp } from \"./app/ResolverApplication.js\";\nimport { convertException } from \"@webiny/utils\";\nimport { createRecordHandler } from \"./app/RecordHandler.js\";\nimport { createFetcher } from \"~/resolver/app/fetcher/Fetcher.js\";\nimport { createDeploymentsFetcher } from \"~/resolver/deployment/DeploymentsFetcher.js\";\nimport { WebinyError } from \"@webiny/error\";\nimport type {\n DynamoDBClientConfig,\n DynamoDBDocument\n} from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport { createBundler } from \"~/resolver/app/bundler/Bundler.js\";\nimport { createBundles } from \"~/resolver/app/bundler/Bundles.js\";\nimport { createCommandBundle } from \"~/resolver/app/bundler/CommandBundle.js\";\nimport { createTableBundle } from \"~/resolver/app/bundler/TableBundle.js\";\nimport { TransformHandler } from \"~/resolver/app/transform/TransformHandler.js\";\nimport type { Reply as FastifyReply } from \"@webiny/handler/types.js\";\nimport { SQSEventHandler } from \"@webiny/handler-aws/sqs/plugins/SQSEventHandler.js\";\nimport { createStorer } from \"./app/storer/Storer.js\";\nimport { StorerAfterEachPlugin } from \"./plugins/StorerAfterEachPlugin.js\";\nimport { SourceDataContainer } from \"~/resolver/app/data/SourceDataContainer.js\";\n\nexport interface ICreateEventHandlerPluginParams {\n tableName: string | undefined;\n createDocumentClient: (params: DynamoDBClientConfig) => Pick<DynamoDBDocument, \"send\">;\n}\n/**\n * TODO maybe add logger?\n */\nexport const createEventHandlerPlugin = (params: ICreateEventHandlerPluginParams) => {\n const { createDocumentClient, tableName } = params;\n\n const plugin = createSQSEventHandler(\n async ({ event, context, reply }): Promise<FastifyReply> => {\n if (!tableName) {\n throw new WebinyError({\n message: \"Table name variable is not set.\"\n });\n }\n try {\n const fetcher = createFetcher({\n maxRetries: 10,\n retryDelay: 1000,\n createDocumentClient: deployment => {\n return createDocumentClient({\n region: deployment.region\n });\n }\n });\n\n const deploymentsFetcher = createDeploymentsFetcher({\n client: createDocumentClient({\n region: process.env.AWS_REGION\n }),\n table: tableName\n });\n /**\n * Fetch all possible deployments, out of which we will filter out the deployment that the records came from.\n */\n const deployments = await deploymentsFetcher.fetch();\n\n const storerAfterEachPlugins = context.plugins.byType<StorerAfterEachPlugin>(\n StorerAfterEachPlugin.type\n );\n\n const storer = createStorer({\n createDocumentClient: deployment => {\n return createDocumentClient({\n region: deployment.region\n });\n },\n afterEach: async params => {\n for (const plugin of storerAfterEachPlugins) {\n if (!plugin.canHandle(params)) {\n continue;\n }\n await plugin.handle(params);\n }\n }\n });\n\n const transformHandler = new TransformHandler({\n plugins: context.plugins\n });\n\n const recordHandler = createRecordHandler({\n plugins: context.plugins,\n fetcher,\n storer,\n deployments,\n transformHandler,\n commandBundler: createBundler({\n createBundles: () => {\n return createBundles({\n createBundle: createCommandBundle\n });\n }\n }),\n tableBundler: createBundler({\n createBundles: () => {\n return createBundles({\n createBundle: createTableBundle\n });\n }\n }),\n createSourceDataContainer: () => {\n return SourceDataContainer.create();\n }\n });\n const app = createResolverApp({\n recordHandler,\n deployments\n });\n\n await app.resolve({\n records: event.Records\n });\n return reply.send({\n ok: true\n });\n } catch (ex) {\n const error = convertException(ex);\n console.error(error);\n return reply.send({\n error\n });\n }\n }\n );\n\n plugin.name = `${SQSEventHandler.type}.syncResolver`;\n\n return plugin;\n};\n"],"names":["createEventHandlerPlugin","params","createDocumentClient","tableName","plugin","createSQSEventHandler","event","context","reply","WebinyError","fetcher","createFetcher","deployment","deploymentsFetcher","createDeploymentsFetcher","process","deployments","storerAfterEachPlugins","StorerAfterEachPlugin","storer","createStorer","transformHandler","TransformHandler","recordHandler","createRecordHandler","createBundler","createBundles","createCommandBundle","createTableBundle","SourceDataContainer","app","createResolverApp","ex","error","convertException","console","SQSEventHandler"],"mappings":";;;;;;;;;;;;;;;;AA6BO,MAAMA,2BAA2B,CAACC;IACrC,MAAM,EAAEC,oBAAoB,EAAEC,SAAS,EAAE,GAAGF;IAE5C,MAAMG,SAASC,mBACX,OAAO,EAAEC,KAAK,EAAEC,OAAO,EAAEC,KAAK,EAAE;QAC5B,IAAI,CAACL,WACD,MAAM,IAAIM,YAAY;YAClB,SAAS;QACb;QAEJ,IAAI;YACA,MAAMC,UAAUC,cAAc;gBAC1B,YAAY;gBACZ,YAAY;gBACZ,sBAAsBC,CAAAA,aACXV,qBAAqB;wBACxB,QAAQU,WAAW,MAAM;oBAC7B;YAER;YAEA,MAAMC,qBAAqBC,yBAAyB;gBAChD,QAAQZ,qBAAqB;oBACzB,QAAQa,QAAQ,GAAG,CAAC,UAAU;gBAClC;gBACA,OAAOZ;YACX;YAIA,MAAMa,cAAc,MAAMH,mBAAmB,KAAK;YAElD,MAAMI,yBAAyBV,QAAQ,OAAO,CAAC,MAAM,CACjDW,sBAAsB,IAAI;YAG9B,MAAMC,SAASC,aAAa;gBACxB,sBAAsBR,CAAAA,aACXV,qBAAqB;wBACxB,QAAQU,WAAW,MAAM;oBAC7B;gBAEJ,WAAW,OAAMX;oBACb,KAAK,MAAMG,UAAUa,uBACjB,IAAKb,OAAO,SAAS,CAACH,SAGtB,MAAMG,OAAO,MAAM,CAACH;gBAE5B;YACJ;YAEA,MAAMoB,mBAAmB,IAAIC,iBAAiB;gBAC1C,SAASf,QAAQ,OAAO;YAC5B;YAEA,MAAMgB,gBAAgBC,oBAAoB;gBACtC,SAASjB,QAAQ,OAAO;gBACxBG;gBACAS;gBACAH;gBACAK;gBACA,gBAAgBI,cAAc;oBAC1B,eAAe,IACJC,cAAc;4BACjB,cAAcC;wBAClB;gBAER;gBACA,cAAcF,cAAc;oBACxB,eAAe,IACJC,cAAc;4BACjB,cAAcE;wBAClB;gBAER;gBACA,2BAA2B,IAChBC,oBAAoB,MAAM;YAEzC;YACA,MAAMC,MAAMC,kBAAkB;gBAC1BR;gBACAP;YACJ;YAEA,MAAMc,IAAI,OAAO,CAAC;gBACd,SAASxB,MAAM,OAAO;YAC1B;YACA,OAAOE,MAAM,IAAI,CAAC;gBACd,IAAI;YACR;QACJ,EAAE,OAAOwB,IAAI;YACT,MAAMC,QAAQC,iBAAiBF;YAC/BG,QAAQ,KAAK,CAACF;YACd,OAAOzB,MAAM,IAAI,CAAC;gBACdyB;YACJ;QACJ;IACJ;IAGJ7B,OAAO,IAAI,GAAG,GAAGgC,gBAAgB,IAAI,CAAC,aAAa,CAAC;IAEpD,OAAOhC;AACX"}
@@ -1,21 +0,0 @@
1
- import type { HandlerCallable, HandlerParams } from "@webiny/handler-aws/sqs/index.js";
2
- import type { TransformRecordPlugin } from "./plugins/TransformRecordPlugin.js";
3
- import type { CommandHandlerPlugin } from "./plugins/CommandHandlerPlugin.js";
4
- import type { DynamoDBClientConfig, DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
5
- import type { LambdaClient, LambdaClientConfig } from "@webiny/aws-sdk/client-lambda/index.js";
6
- import type { S3Client, S3ClientConfig } from "@webiny/aws-sdk/client-s3/index.js";
7
- import type { CognitoIdentityProviderClient, CognitoIdentityProviderClientConfig } from "@webiny/aws-sdk/client-cognito-identity-provider/index.js";
8
- export type AllowedResolverPlugins = TransformRecordPlugin | CommandHandlerPlugin;
9
- export interface ICreateResolverHandlerParams extends HandlerParams {
10
- plugins: AllowedResolverPlugins[];
11
- createS3Client: (params: S3ClientConfig) => Pick<S3Client, "send">;
12
- createLambdaClient: (config: Partial<LambdaClientConfig>) => Pick<LambdaClient, "send">;
13
- createDocumentClient: (params: Partial<DynamoDBClientConfig>) => Pick<DynamoDBDocument, "send">;
14
- createCognitoIdentityProviderClient: (config: Partial<CognitoIdentityProviderClientConfig>) => Pick<CognitoIdentityProviderClient, "send">;
15
- tableName?: string;
16
- awsWorkerLambdaArn?: string;
17
- }
18
- /**
19
- * Handler for the Sync System Resolver - based on SQS handler.
20
- */
21
- export declare const createResolverHandler: (params: ICreateResolverHandlerParams) => HandlerCallable;
@@ -1,64 +0,0 @@
1
- import { createHandler } from "@webiny/handler-aws/sqs/index.js";
2
- import { PluginsContainer } from "@webiny/plugins";
3
- import { createEventHandlerPlugin } from "./createEventHandlerPlugin.js";
4
- import { createPutCommandHandlerPlugin } from "./app/commandHandler/put.js";
5
- import { createDeleteCommandHandlerPlugin } from "./app/commandHandler/delete.js";
6
- import { createFileManagerPlugins } from "./recordTypes/fileManager/fileManager.js";
7
- import { LambdaTrigger } from "./lambda/LambdaTrigger.js";
8
- import { CopyFile } from "./recordTypes/fileManager/CopyFile.js";
9
- import { DeleteFile } from "./recordTypes/fileManager/DeleteFile.js";
10
- import { createUsersPlugins } from "./recordTypes/users/users.js";
11
- import { CopyUser } from "./recordTypes/users/CopyUser.js";
12
- import { DeleteUser } from "./recordTypes/users/DeleteUser.js";
13
- const createResolverHandler = (params)=>{
14
- const awsWorkerLambdaArn = params.awsWorkerLambdaArn || process.env.AWS_SYNC_WORKER_LAMBDA_ARN;
15
- if (!awsWorkerLambdaArn) {
16
- const message = 'Missing "process.env.AWS_SYNC_WORKER_LAMBDA_ARN".';
17
- console.error(message);
18
- throw new Error(message);
19
- }
20
- const lambdaTrigger = new LambdaTrigger({
21
- arn: awsWorkerLambdaArn,
22
- createLambdaClient: params.createLambdaClient
23
- });
24
- const copyFile = new CopyFile({
25
- createS3Client: params.createS3Client,
26
- getLambdaTrigger: ()=>lambdaTrigger
27
- });
28
- const deleteFile = new DeleteFile({
29
- createS3Client: params.createS3Client,
30
- getLambdaTrigger: ()=>lambdaTrigger
31
- });
32
- const copyUser = new CopyUser({
33
- createCognitoIdentityProviderClient: params.createCognitoIdentityProviderClient,
34
- getLambdaTrigger: ()=>lambdaTrigger
35
- });
36
- const deleteUser = new DeleteUser({
37
- createCognitoIdentityProviderClient: params.createCognitoIdentityProviderClient,
38
- getLambdaTrigger: ()=>lambdaTrigger
39
- });
40
- const plugins = new PluginsContainer([
41
- createFileManagerPlugins({
42
- copyFile,
43
- deleteFile
44
- }),
45
- createUsersPlugins({
46
- copyUser,
47
- deleteUser
48
- }),
49
- createEventHandlerPlugin({
50
- createDocumentClient: params.createDocumentClient,
51
- tableName: params.tableName || process.env.DB_TABLE
52
- }),
53
- createPutCommandHandlerPlugin(),
54
- createDeleteCommandHandlerPlugin()
55
- ]);
56
- plugins.register(params.plugins);
57
- return createHandler({
58
- ...params,
59
- plugins
60
- });
61
- };
62
- export { createResolverHandler };
63
-
64
- //# sourceMappingURL=createResolverHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolver/createResolverHandler.js","sources":["../../src/resolver/createResolverHandler.ts"],"sourcesContent":["import type { HandlerCallable, HandlerParams } from \"@webiny/handler-aws/sqs/index.js\";\nimport { createHandler as createSQSHandler } from \"@webiny/handler-aws/sqs/index.js\";\nimport { PluginsContainer } from \"@webiny/plugins\";\nimport { createEventHandlerPlugin } from \"./createEventHandlerPlugin.js\";\nimport type { TransformRecordPlugin } from \"./plugins/TransformRecordPlugin.js\";\nimport type { CommandHandlerPlugin } from \"./plugins/CommandHandlerPlugin.js\";\nimport { createPutCommandHandlerPlugin } from \"./app/commandHandler/put.js\";\nimport { createDeleteCommandHandlerPlugin } from \"./app/commandHandler/delete.js\";\nimport type {\n DynamoDBClientConfig,\n DynamoDBDocument\n} from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport { createFileManagerPlugins } from \"./recordTypes/fileManager/fileManager.js\";\nimport { LambdaTrigger } from \"./lambda/LambdaTrigger.js\";\nimport type { LambdaClient, LambdaClientConfig } from \"@webiny/aws-sdk/client-lambda/index.js\";\nimport type { S3Client, S3ClientConfig } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { CopyFile } from \"~/resolver/recordTypes/fileManager/CopyFile.js\";\nimport { DeleteFile } from \"./recordTypes/fileManager/DeleteFile.js\";\nimport { createUsersPlugins } from \"~/resolver/recordTypes/users/users.js\";\nimport { CopyUser } from \"./recordTypes/users/CopyUser.js\";\nimport type {\n CognitoIdentityProviderClient,\n CognitoIdentityProviderClientConfig\n} from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport { DeleteUser } from \"./recordTypes/users/DeleteUser.js\";\n\nexport type AllowedResolverPlugins = TransformRecordPlugin | CommandHandlerPlugin;\n\nexport interface ICreateResolverHandlerParams extends HandlerParams {\n plugins: AllowedResolverPlugins[];\n createS3Client: (params: S3ClientConfig) => Pick<S3Client, \"send\">;\n createLambdaClient: (config: Partial<LambdaClientConfig>) => Pick<LambdaClient, \"send\">;\n createDocumentClient: (params: Partial<DynamoDBClientConfig>) => Pick<DynamoDBDocument, \"send\">;\n createCognitoIdentityProviderClient: (\n config: Partial<CognitoIdentityProviderClientConfig>\n ) => Pick<CognitoIdentityProviderClient, \"send\">;\n tableName?: string;\n awsWorkerLambdaArn?: string;\n}\n/**\n * Handler for the Sync System Resolver - based on SQS handler.\n */\nexport const createResolverHandler = (params: ICreateResolverHandlerParams): HandlerCallable => {\n const awsWorkerLambdaArn = params.awsWorkerLambdaArn || process.env.AWS_SYNC_WORKER_LAMBDA_ARN;\n if (!awsWorkerLambdaArn) {\n const message = `Missing \"process.env.AWS_SYNC_WORKER_LAMBDA_ARN\".`;\n console.error(message);\n throw new Error(message);\n }\n\n const lambdaTrigger = new LambdaTrigger({\n arn: awsWorkerLambdaArn,\n createLambdaClient: params.createLambdaClient\n });\n\n const copyFile = new CopyFile({\n createS3Client: params.createS3Client,\n getLambdaTrigger: () => {\n return lambdaTrigger;\n }\n });\n const deleteFile = new DeleteFile({\n createS3Client: params.createS3Client,\n getLambdaTrigger: () => {\n return lambdaTrigger;\n }\n });\n\n const copyUser = new CopyUser({\n createCognitoIdentityProviderClient: params.createCognitoIdentityProviderClient,\n getLambdaTrigger: () => {\n return lambdaTrigger;\n }\n });\n const deleteUser = new DeleteUser({\n createCognitoIdentityProviderClient: params.createCognitoIdentityProviderClient,\n getLambdaTrigger: () => {\n return lambdaTrigger;\n }\n });\n\n const plugins = new PluginsContainer([\n // TODO move into related packages\n createFileManagerPlugins({\n copyFile,\n deleteFile\n }),\n createUsersPlugins({\n copyUser,\n deleteUser\n }),\n // leave here\n createEventHandlerPlugin({\n createDocumentClient: params.createDocumentClient,\n tableName: params.tableName || process.env.DB_TABLE\n }),\n createPutCommandHandlerPlugin(),\n createDeleteCommandHandlerPlugin()\n ]);\n\n plugins.register(params.plugins);\n\n return createSQSHandler({\n ...params,\n plugins\n });\n};\n"],"names":["createResolverHandler","params","awsWorkerLambdaArn","process","message","console","Error","lambdaTrigger","LambdaTrigger","copyFile","CopyFile","deleteFile","DeleteFile","copyUser","CopyUser","deleteUser","DeleteUser","plugins","PluginsContainer","createFileManagerPlugins","createUsersPlugins","createEventHandlerPlugin","createPutCommandHandlerPlugin","createDeleteCommandHandlerPlugin","createSQSHandler"],"mappings":";;;;;;;;;;;;AA0CO,MAAMA,wBAAwB,CAACC;IAClC,MAAMC,qBAAqBD,OAAO,kBAAkB,IAAIE,QAAQ,GAAG,CAAC,0BAA0B;IAC9F,IAAI,CAACD,oBAAoB;QACrB,MAAME,UAAU;QAChBC,QAAQ,KAAK,CAACD;QACd,MAAM,IAAIE,MAAMF;IACpB;IAEA,MAAMG,gBAAgB,IAAIC,cAAc;QACpC,KAAKN;QACL,oBAAoBD,OAAO,kBAAkB;IACjD;IAEA,MAAMQ,WAAW,IAAIC,SAAS;QAC1B,gBAAgBT,OAAO,cAAc;QACrC,kBAAkB,IACPM;IAEf;IACA,MAAMI,aAAa,IAAIC,WAAW;QAC9B,gBAAgBX,OAAO,cAAc;QACrC,kBAAkB,IACPM;IAEf;IAEA,MAAMM,WAAW,IAAIC,SAAS;QAC1B,qCAAqCb,OAAO,mCAAmC;QAC/E,kBAAkB,IACPM;IAEf;IACA,MAAMQ,aAAa,IAAIC,WAAW;QAC9B,qCAAqCf,OAAO,mCAAmC;QAC/E,kBAAkB,IACPM;IAEf;IAEA,MAAMU,UAAU,IAAIC,iBAAiB;QAEjCC,yBAAyB;YACrBV;YACAE;QACJ;QACAS,mBAAmB;YACfP;YACAE;QACJ;QAEAM,yBAAyB;YACrB,sBAAsBpB,OAAO,oBAAoB;YACjD,WAAWA,OAAO,SAAS,IAAIE,QAAQ,GAAG,CAAC,QAAQ;QACvD;QACAmB;QACAC;KACH;IAEDN,QAAQ,QAAQ,CAAChB,OAAO,OAAO;IAE/B,OAAOuB,cAAiB;QACpB,GAAGvB,MAAM;QACTgB;IACJ;AACJ"}
@@ -1,2 +0,0 @@
1
- import type { IHandler } from "./types.js";
2
- export declare const createSendDataToEventBridgeOnRequestEnd: (handler: IHandler) => (import("@webiny/handler").OnRequestResponseSendPlugin | import("@webiny/handler").OnRequestTimeoutPlugin)[];
@@ -1,39 +0,0 @@
1
- import { createOnRequestResponseSend, createOnRequestTimeout } from "@webiny/handler";
2
- import { convertException } from "@webiny/utils/exception.js";
3
- const execute = async (handler)=>{
4
- try {
5
- return await handler.flush();
6
- } catch (ex) {
7
- const error = convertException(ex);
8
- console.error({
9
- flushError: error
10
- });
11
- return {
12
- error
13
- };
14
- }
15
- };
16
- const isOptionsRequest = (request)=>{
17
- if (!request?.method) return false;
18
- return "OPTIONS" === request.method.toUpperCase();
19
- };
20
- const createSendDataToEventBridgeOnRequestEnd = (handler)=>{
21
- const onRequestResponseSend = createOnRequestResponseSend(async (request, _, payload)=>{
22
- if (isOptionsRequest(request)) return payload;
23
- await execute(handler);
24
- return payload;
25
- });
26
- onRequestResponseSend.name = "sync.onRequestResponseSend";
27
- const onRequestTimeout = createOnRequestTimeout(async (request)=>{
28
- if (isOptionsRequest(request)) return;
29
- return await execute(handler);
30
- });
31
- onRequestTimeout.name = "sync.onRequestTimeout";
32
- return [
33
- onRequestResponseSend,
34
- onRequestTimeout
35
- ];
36
- };
37
- export { createSendDataToEventBridgeOnRequestEnd };
38
-
39
- //# sourceMappingURL=createSendDataToEventBridgeOnRequestEnd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync/createSendDataToEventBridgeOnRequestEnd.js","sources":["../../src/sync/createSendDataToEventBridgeOnRequestEnd.ts"],"sourcesContent":["import type { IHandler } from \"./types.js\";\nimport { createOnRequestResponseSend, createOnRequestTimeout } from \"@webiny/handler\";\nimport type { Request as FastifyRequest } from \"@webiny/handler/types.js\";\nimport { convertException } from \"@webiny/utils/exception.js\";\n\nconst execute = async (handler: IHandler) => {\n try {\n return await handler.flush();\n } catch (ex) {\n const error = convertException(ex);\n console.error({\n flushError: error\n });\n return {\n error\n };\n /**\n * We do not want to throw an error here, because we are in the request end.\n */\n }\n};\n\nconst isOptionsRequest = (request: FastifyRequest): boolean => {\n if (!request?.method) {\n return false;\n }\n return request.method.toUpperCase() === \"OPTIONS\";\n};\n\nexport const createSendDataToEventBridgeOnRequestEnd = (handler: IHandler) => {\n const onRequestResponseSend = createOnRequestResponseSend(async (request, _, payload) => {\n if (isOptionsRequest(request)) {\n return payload;\n }\n await execute(handler);\n return payload;\n });\n onRequestResponseSend.name = \"sync.onRequestResponseSend\";\n\n const onRequestTimeout = createOnRequestTimeout(async request => {\n if (isOptionsRequest(request)) {\n return;\n }\n return await execute(handler);\n });\n onRequestTimeout.name = \"sync.onRequestTimeout\";\n\n return [onRequestResponseSend, onRequestTimeout];\n};\n"],"names":["execute","handler","ex","error","convertException","console","isOptionsRequest","request","createSendDataToEventBridgeOnRequestEnd","onRequestResponseSend","createOnRequestResponseSend","_","payload","onRequestTimeout","createOnRequestTimeout"],"mappings":";;AAKA,MAAMA,UAAU,OAAOC;IACnB,IAAI;QACA,OAAO,MAAMA,QAAQ,KAAK;IAC9B,EAAE,OAAOC,IAAI;QACT,MAAMC,QAAQC,iBAAiBF;QAC/BG,QAAQ,KAAK,CAAC;YACV,YAAYF;QAChB;QACA,OAAO;YACHA;QACJ;IAIJ;AACJ;AAEA,MAAMG,mBAAmB,CAACC;IACtB,IAAI,CAACA,SAAS,QACV,OAAO;IAEX,OAAOA,AAAiC,cAAjCA,QAAQ,MAAM,CAAC,WAAW;AACrC;AAEO,MAAMC,0CAA0C,CAACP;IACpD,MAAMQ,wBAAwBC,4BAA4B,OAAOH,SAASI,GAAGC;QACzE,IAAIN,iBAAiBC,UACjB,OAAOK;QAEX,MAAMZ,QAAQC;QACd,OAAOW;IACX;IACAH,sBAAsB,IAAI,GAAG;IAE7B,MAAMI,mBAAmBC,uBAAuB,OAAMP;QAClD,IAAID,iBAAiBC,UACjB;QAEJ,OAAO,MAAMP,QAAQC;IACzB;IACAY,iBAAiB,IAAI,GAAG;IAExB,OAAO;QAACJ;QAAuBI;KAAiB;AACpD"}
@@ -1,16 +0,0 @@
1
- import type { Plugin } from "@webiny/plugins/types.js";
2
- import type { IGetEventBridgeCallable, ISystem } from "./types.js";
3
- import type { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
4
- import type { PossiblyUndefinedProperties } from "@webiny/api/types.js";
5
- import type { FilterOutRecordPlugin } from "./plugins/FilterOutRecordPlugin.js";
6
- export type IAllowedPlugins = FilterOutRecordPlugin;
7
- export interface ICreateSyncSystemParams {
8
- getDocumentClient(): Pick<DynamoDBDocument, "send">;
9
- getEventBridgeClient: IGetEventBridgeCallable;
10
- system: PossiblyUndefinedProperties<Omit<ISystem, "name">>;
11
- plugins?: IAllowedPlugins[];
12
- }
13
- export interface ICreateSyncSystemResponse {
14
- plugins(): Plugin[];
15
- }
16
- export declare const createSyncSystem: (params: ICreateSyncSystemParams) => ICreateSyncSystemResponse;
@@ -1,33 +0,0 @@
1
- import { validateSystemInput } from "./utils/validateSystemInput.js";
2
- import { createSyncSystemHandlerOnRequestPlugin } from "./requestPlugin.js";
3
- import { createDefaultFilterOutRecordPlugins } from "./filter/createDefaultFilterOutRecordPlugins.js";
4
- const emptyResponse = {
5
- plugins () {
6
- return [];
7
- }
8
- };
9
- const createSyncSystem = (params)=>{
10
- const { system, error } = validateSystemInput(params.system);
11
- if (error) {
12
- console.error(error);
13
- return emptyResponse;
14
- }
15
- if (!system) {
16
- console.error("Sync System: No system provided. Sync System will not be attached.");
17
- return emptyResponse;
18
- }
19
- return {
20
- plugins: ()=>[
21
- ...params.plugins || [],
22
- ...createDefaultFilterOutRecordPlugins(),
23
- createSyncSystemHandlerOnRequestPlugin({
24
- getDocumentClient: params.getDocumentClient,
25
- getEventBridgeClient: params.getEventBridgeClient,
26
- system
27
- })
28
- ]
29
- };
30
- };
31
- export { createSyncSystem };
32
-
33
- //# sourceMappingURL=createSyncSystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync/createSyncSystem.js","sources":["../../src/sync/createSyncSystem.ts"],"sourcesContent":["import type { Plugin } from \"@webiny/plugins/types.js\";\nimport type { IGetEventBridgeCallable, ISystem } from \"./types.js\";\nimport { validateSystemInput } from \"./utils/validateSystemInput.js\";\nimport type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport type { PossiblyUndefinedProperties } from \"@webiny/api/types.js\";\nimport { createSyncSystemHandlerOnRequestPlugin } from \"./requestPlugin.js\";\nimport type { FilterOutRecordPlugin } from \"./plugins/FilterOutRecordPlugin.js\";\nimport { createDefaultFilterOutRecordPlugins } from \"./filter/createDefaultFilterOutRecordPlugins.js\";\n\nexport type IAllowedPlugins = FilterOutRecordPlugin;\n\nexport interface ICreateSyncSystemParams {\n getDocumentClient(): Pick<DynamoDBDocument, \"send\">;\n getEventBridgeClient: IGetEventBridgeCallable;\n system: PossiblyUndefinedProperties<Omit<ISystem, \"name\">>;\n plugins?: IAllowedPlugins[];\n}\n\nexport interface ICreateSyncSystemResponse {\n plugins(): Plugin[];\n}\n\nconst emptyResponse: ICreateSyncSystemResponse = {\n plugins(): Plugin[] {\n return [];\n }\n};\n\nexport const createSyncSystem = (params: ICreateSyncSystemParams): ICreateSyncSystemResponse => {\n const { system, error } = validateSystemInput(params.system);\n /**\n * We do not want to throw any errors. We will log them and just return a function which returns empty array as plugins.\n */\n if (error) {\n console.error(error);\n return emptyResponse;\n } else if (!system) {\n console.error(\"Sync System: No system provided. Sync System will not be attached.\");\n return emptyResponse;\n }\n\n return {\n plugins: () => {\n return [\n ...(params.plugins || []),\n ...createDefaultFilterOutRecordPlugins(),\n createSyncSystemHandlerOnRequestPlugin({\n getDocumentClient: params.getDocumentClient,\n getEventBridgeClient: params.getEventBridgeClient,\n system\n })\n ];\n }\n };\n};\n"],"names":["emptyResponse","createSyncSystem","params","system","error","validateSystemInput","console","createDefaultFilterOutRecordPlugins","createSyncSystemHandlerOnRequestPlugin"],"mappings":";;;AAsBA,MAAMA,gBAA2C;IAC7C;QACI,OAAO,EAAE;IACb;AACJ;AAEO,MAAMC,mBAAmB,CAACC;IAC7B,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAGC,oBAAoBH,OAAO,MAAM;IAI3D,IAAIE,OAAO;QACPE,QAAQ,KAAK,CAACF;QACd,OAAOJ;IACX;IAAO,IAAI,CAACG,QAAQ;QAChBG,QAAQ,KAAK,CAAC;QACd,OAAON;IACX;IAEA,OAAO;QACH,SAAS,IACE;mBACCE,OAAO,OAAO,IAAI,EAAE;mBACrBK;gBACHC,uCAAuC;oBACnC,mBAAmBN,OAAO,iBAAiB;oBAC3C,sBAAsBA,OAAO,oBAAoB;oBACjDC;gBACJ;aACH;IAET;AACJ"}
@@ -1,9 +0,0 @@
1
- import type { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
2
- import type { ICommandConverter, IGetEventBridgeCallable, ISystem } from "../sync/types.js";
3
- export interface ICreateSyncSystemHandlerOnRequestPluginParams {
4
- getDocumentClient(): Pick<DynamoDBDocument, "send">;
5
- getEventBridgeClient: IGetEventBridgeCallable;
6
- system: ISystem;
7
- commandConverters?: ICommandConverter[];
8
- }
9
- export declare const createSyncSystemHandlerOnRequestPlugin: (params: ICreateSyncSystemHandlerOnRequestPluginParams) => import("@webiny/handler").HandlerOnRequestPlugin<import("@webiny/handler/types.js").Context>;
@@ -1,43 +0,0 @@
1
- import { createHandlerOnRequest } from "@webiny/handler";
2
- import { getManifest } from "./utils/manifest.js";
3
- import { attachToDynamoDbDocument } from "./attachToDynamoDbDocument.js";
4
- import { createSendDataToEventBridgeOnRequestEnd } from "./createSendDataToEventBridgeOnRequestEnd.js";
5
- import { createHandler } from "./createHandler.js";
6
- import { convertException } from "@webiny/utils/exception.js";
7
- const createSyncSystemHandlerOnRequestPlugin = (params)=>createHandlerOnRequest(async (_, __, context)=>{
8
- const { data: manifest, error } = await getManifest();
9
- if (error) {
10
- if ("true" !== process.env.DEBUG) return;
11
- console.error("Error happened when fetching manifest.");
12
- console.log(JSON.stringify({
13
- error: convertException(error)
14
- }));
15
- return;
16
- }
17
- if (!manifest?.sync?.region) {
18
- if ("true" !== process.env.DEBUG) return;
19
- console.error("There is no manifest.");
20
- console.log(JSON.stringify({
21
- manifest
22
- }));
23
- return;
24
- }
25
- const { handler } = createHandler({
26
- getEventBridgeClient: ()=>params.getEventBridgeClient({
27
- region: manifest.sync.region
28
- }),
29
- system: params.system,
30
- manifest,
31
- commandConverters: params.commandConverters,
32
- getPlugins: ()=>context.plugins
33
- });
34
- attachToDynamoDbDocument({
35
- handler
36
- });
37
- context.plugins.register([
38
- createSendDataToEventBridgeOnRequestEnd(handler)
39
- ]);
40
- });
41
- export { createSyncSystemHandlerOnRequestPlugin };
42
-
43
- //# sourceMappingURL=requestPlugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync/requestPlugin.js","sources":["../../src/sync/requestPlugin.ts"],"sourcesContent":["import type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport type { ICommandConverter, IGetEventBridgeCallable, ISystem } from \"~/sync/types.js\";\nimport { createHandlerOnRequest } from \"@webiny/handler\";\nimport { getManifest } from \"~/sync/utils/manifest.js\";\nimport { attachToDynamoDbDocument } from \"~/sync/attachToDynamoDbDocument.js\";\nimport { createSendDataToEventBridgeOnRequestEnd } from \"~/sync/createSendDataToEventBridgeOnRequestEnd.js\";\nimport { createHandler } from \"./createHandler.js\";\nimport { convertException } from \"@webiny/utils/exception.js\";\n\nexport interface ICreateSyncSystemHandlerOnRequestPluginParams {\n getDocumentClient(): Pick<DynamoDBDocument, \"send\">;\n getEventBridgeClient: IGetEventBridgeCallable;\n system: ISystem;\n commandConverters?: ICommandConverter[];\n}\n\nexport const createSyncSystemHandlerOnRequestPlugin = (\n params: ICreateSyncSystemHandlerOnRequestPluginParams\n) => {\n return createHandlerOnRequest(async (_, __, context) => {\n const { data: manifest, error } = await getManifest();\n if (error) {\n if (process.env.DEBUG !== \"true\") {\n return;\n }\n console.error(\"Error happened when fetching manifest.\");\n console.log(\n JSON.stringify({\n error: convertException(error)\n })\n );\n return;\n } else if (!manifest?.sync?.region) {\n if (process.env.DEBUG !== \"true\") {\n return;\n }\n console.error(\"There is no manifest.\");\n console.log(\n JSON.stringify({\n manifest\n })\n );\n return;\n }\n\n const { handler } = createHandler({\n getEventBridgeClient: () => {\n return params.getEventBridgeClient({\n region: manifest.sync.region\n });\n },\n system: params.system,\n manifest,\n commandConverters: params.commandConverters,\n getPlugins: () => {\n return context.plugins;\n }\n });\n\n attachToDynamoDbDocument({\n handler\n });\n context.plugins.register([\n /**\n * When request ends, send the data to the EventBridge.\n */\n createSendDataToEventBridgeOnRequestEnd(handler)\n ]);\n });\n};\n"],"names":["createSyncSystemHandlerOnRequestPlugin","params","createHandlerOnRequest","_","__","context","manifest","error","getManifest","process","console","JSON","convertException","handler","createHandler","attachToDynamoDbDocument","createSendDataToEventBridgeOnRequestEnd"],"mappings":";;;;;;AAgBO,MAAMA,yCAAyC,CAClDC,SAEOC,uBAAuB,OAAOC,GAAGC,IAAIC;QACxC,MAAM,EAAE,MAAMC,QAAQ,EAAEC,KAAK,EAAE,GAAG,MAAMC;QACxC,IAAID,OAAO;YACP,IAAIE,AAAsB,WAAtBA,QAAQ,GAAG,CAAC,KAAK,EACjB;YAEJC,QAAQ,KAAK,CAAC;YACdA,QAAQ,GAAG,CACPC,KAAK,SAAS,CAAC;gBACX,OAAOC,iBAAiBL;YAC5B;YAEJ;QACJ;QAAO,IAAI,CAACD,UAAU,MAAM,QAAQ;YAChC,IAAIG,AAAsB,WAAtBA,QAAQ,GAAG,CAAC,KAAK,EACjB;YAEJC,QAAQ,KAAK,CAAC;YACdA,QAAQ,GAAG,CACPC,KAAK,SAAS,CAAC;gBACXL;YACJ;YAEJ;QACJ;QAEA,MAAM,EAAEO,OAAO,EAAE,GAAGC,cAAc;YAC9B,sBAAsB,IACXb,OAAO,oBAAoB,CAAC;oBAC/B,QAAQK,SAAS,IAAI,CAAC,MAAM;gBAChC;YAEJ,QAAQL,OAAO,MAAM;YACrBK;YACA,mBAAmBL,OAAO,iBAAiB;YAC3C,YAAY,IACDI,QAAQ,OAAO;QAE9B;QAEAU,yBAAyB;YACrBF;QACJ;QACAR,QAAQ,OAAO,CAAC,QAAQ,CAAC;YAIrBW,wCAAwCH;SAC3C;IACL"}
@@ -1,11 +0,0 @@
1
- import type { CreateHandlerParams } from "@webiny/handler-aws/raw/index.js";
2
- import type { Plugin } from "@webiny/plugins/types.js";
3
- import type { S3Client, S3ClientConfig } from "@webiny/aws-sdk/client-s3/index.js";
4
- import { type CognitoIdentityProvider, type CognitoIdentityProviderClientConfig } from "@webiny/aws-sdk/client-cognito-identity-provider/index.js";
5
- export type IAllowedWorkerHandlerPlugins = Plugin[];
6
- export interface IWorkerHandlerParams extends Omit<CreateHandlerParams, "plugins"> {
7
- plugins?: IAllowedWorkerHandlerPlugins[];
8
- createS3Client: (params: S3ClientConfig) => Pick<S3Client, "send">;
9
- createCognitoIdentityProviderClient(input: CognitoIdentityProviderClientConfig): Pick<CognitoIdentityProvider, "send">;
10
- }
11
- export declare const createWorkerHandler: (params: IWorkerHandlerParams) => import("@webiny/handler-aws/raw/index.js").HandlerCallable<any, import("aws-lambda").APIGatewayProxyResult>;
@@ -1,35 +0,0 @@
1
- import { createHandler } from "@webiny/handler-aws/raw/index.js";
2
- import { createEventHandlerPlugin } from "./handler/eventHandler.js";
3
- import { PluginsContainer } from "@webiny/plugins/PluginsContainer.js";
4
- import { createCopyFileAction } from "./actions/copyFile/copyFileAction.js";
5
- import { createDeleteFileAction } from "./actions/deleteFile/deleteFileAction.js";
6
- import { createCreateUserAction } from "./actions/createUser/createUserAction.js";
7
- import { createUpdateUserAction } from "./actions/updateUser/updateUserAction.js";
8
- import { createDeleteUserAction } from "./actions/deleteUser/deleteUserAction.js";
9
- const createWorkerHandler = (params)=>{
10
- const { createS3Client, createCognitoIdentityProviderClient } = params;
11
- const plugins = new PluginsContainer(params.plugins || []);
12
- plugins.register(createCopyFileAction({
13
- createS3Client
14
- }));
15
- plugins.register(createDeleteFileAction({
16
- createS3Client
17
- }));
18
- plugins.register(createCreateUserAction({
19
- createCognitoProvider: createCognitoIdentityProviderClient
20
- }));
21
- plugins.register(createUpdateUserAction({
22
- createCognitoProvider: createCognitoIdentityProviderClient
23
- }));
24
- plugins.register(createDeleteUserAction({
25
- createCognitoProvider: createCognitoIdentityProviderClient
26
- }));
27
- plugins.register(createEventHandlerPlugin());
28
- return createHandler({
29
- ...params,
30
- plugins
31
- });
32
- };
33
- export { createWorkerHandler };
34
-
35
- //# sourceMappingURL=createWorkerHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker/createWorkerHandler.js","sources":["../../src/worker/createWorkerHandler.ts"],"sourcesContent":["import type { CreateHandlerParams } from \"@webiny/handler-aws/raw/index.js\";\nimport { createHandler } from \"@webiny/handler-aws/raw/index.js\";\nimport { createEventHandlerPlugin } from \"./handler/eventHandler.js\";\nimport { PluginsContainer } from \"@webiny/plugins/PluginsContainer.js\";\nimport type { Plugin } from \"@webiny/plugins/types.js\";\nimport { createCopyFileAction } from \"~/worker/actions/copyFile/copyFileAction.js\";\nimport { createDeleteFileAction } from \"~/worker/actions/deleteFile/deleteFileAction.js\";\nimport type { S3Client, S3ClientConfig } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { createCreateUserAction } from \"~/worker/actions/createUser/createUserAction.js\";\nimport { createUpdateUserAction } from \"~/worker/actions/updateUser/updateUserAction.js\";\nimport {\n type CognitoIdentityProvider,\n type CognitoIdentityProviderClientConfig\n} from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport { createDeleteUserAction } from \"~/worker/actions/deleteUser/deleteUserAction.js\";\n\nexport type IAllowedWorkerHandlerPlugins = Plugin[];\n\nexport interface IWorkerHandlerParams extends Omit<CreateHandlerParams, \"plugins\"> {\n plugins?: IAllowedWorkerHandlerPlugins[];\n createS3Client: (params: S3ClientConfig) => Pick<S3Client, \"send\">;\n createCognitoIdentityProviderClient(\n input: CognitoIdentityProviderClientConfig\n ): Pick<CognitoIdentityProvider, \"send\">;\n}\n\nexport const createWorkerHandler = (params: IWorkerHandlerParams) => {\n const { createS3Client, createCognitoIdentityProviderClient } = params;\n const plugins = new PluginsContainer(params.plugins || []);\n\n /**\n * Default action plugins are registered here.\n */\n plugins.register(\n createCopyFileAction({\n createS3Client\n })\n );\n plugins.register(\n createDeleteFileAction({\n createS3Client\n })\n );\n plugins.register(\n createCreateUserAction({\n createCognitoProvider: createCognitoIdentityProviderClient\n })\n );\n plugins.register(\n createUpdateUserAction({\n createCognitoProvider: createCognitoIdentityProviderClient\n })\n );\n plugins.register(\n createDeleteUserAction({\n createCognitoProvider: createCognitoIdentityProviderClient\n })\n );\n\n plugins.register(createEventHandlerPlugin());\n return createHandler({\n ...params,\n plugins\n });\n};\n"],"names":["createWorkerHandler","params","createS3Client","createCognitoIdentityProviderClient","plugins","PluginsContainer","createCopyFileAction","createDeleteFileAction","createCreateUserAction","createUpdateUserAction","createDeleteUserAction","createEventHandlerPlugin","createHandler"],"mappings":";;;;;;;;AA0BO,MAAMA,sBAAsB,CAACC;IAChC,MAAM,EAAEC,cAAc,EAAEC,mCAAmC,EAAE,GAAGF;IAChE,MAAMG,UAAU,IAAIC,iBAAiBJ,OAAO,OAAO,IAAI,EAAE;IAKzDG,QAAQ,QAAQ,CACZE,qBAAqB;QACjBJ;IACJ;IAEJE,QAAQ,QAAQ,CACZG,uBAAuB;QACnBL;IACJ;IAEJE,QAAQ,QAAQ,CACZI,uBAAuB;QACnB,uBAAuBL;IAC3B;IAEJC,QAAQ,QAAQ,CACZK,uBAAuB;QACnB,uBAAuBN;IAC3B;IAEJC,QAAQ,QAAQ,CACZM,uBAAuB;QACnB,uBAAuBP;IAC3B;IAGJC,QAAQ,QAAQ,CAACO;IACjB,OAAOC,cAAc;QACjB,GAAGX,MAAM;QACTG;IACJ;AACJ"}
@@ -1 +0,0 @@
1
- export declare const createEventHandlerPlugin: () => import("@webiny/handler-aws/raw/index.js").RawEventHandler<unknown, import("@webiny/handler/types.js").Context, any>;
@@ -1,22 +0,0 @@
1
- import { convertException } from "@webiny/utils";
2
- import { WorkerActionHandler } from "./WorkerActionHandler.js";
3
- import { createEventHandler } from "@webiny/handler-aws/raw/index.js";
4
- import { WorkerActionPlugin } from "../plugins/WorkerActionPlugin.js";
5
- const createEventHandlerPlugin = ()=>{
6
- const plugin = createEventHandler(async ({ payload, context })=>{
7
- const handler = new WorkerActionHandler({
8
- plugins: context.plugins.byType(WorkerActionPlugin.type)
9
- });
10
- try {
11
- await handler.handle(payload);
12
- } catch (ex) {
13
- console.error("Error while handling action.");
14
- console.log(convertException(ex));
15
- }
16
- });
17
- plugin.name = "sync.worker.eventHandler";
18
- return plugin;
19
- };
20
- export { createEventHandlerPlugin };
21
-
22
- //# sourceMappingURL=eventHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker/handler/eventHandler.js","sources":["../../../src/worker/handler/eventHandler.ts"],"sourcesContent":["import { convertException } from \"@webiny/utils\";\nimport { WorkerActionHandler } from \"./WorkerActionHandler.js\";\nimport { createEventHandler } from \"@webiny/handler-aws/raw/index.js\";\nimport { WorkerActionPlugin } from \"../plugins/WorkerActionPlugin.js\";\n\nexport const createEventHandlerPlugin = () => {\n const plugin = createEventHandler<unknown>(async ({ payload, context }) => {\n const handler = new WorkerActionHandler({\n plugins: context.plugins.byType<WorkerActionPlugin>(WorkerActionPlugin.type)\n });\n\n try {\n await handler.handle(payload);\n } catch (ex) {\n console.error(\"Error while handling action.\");\n console.log(convertException(ex));\n }\n });\n\n plugin.name = `sync.worker.eventHandler`;\n\n return plugin;\n};\n"],"names":["createEventHandlerPlugin","plugin","createEventHandler","payload","context","handler","WorkerActionHandler","WorkerActionPlugin","ex","console","convertException"],"mappings":";;;;AAKO,MAAMA,2BAA2B;IACpC,MAAMC,SAASC,mBAA4B,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE;QAClE,MAAMC,UAAU,IAAIC,oBAAoB;YACpC,SAASF,QAAQ,OAAO,CAAC,MAAM,CAAqBG,mBAAmB,IAAI;QAC/E;QAEA,IAAI;YACA,MAAMF,QAAQ,MAAM,CAACF;QACzB,EAAE,OAAOK,IAAI;YACTC,QAAQ,KAAK,CAAC;YACdA,QAAQ,GAAG,CAACC,iBAAiBF;QACjC;IACJ;IAEAP,OAAO,IAAI,GAAG;IAEd,OAAOA;AACX"}