@webiny/api-sync-system 6.0.0-alpha.5 → 6.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -108
- package/constants.js +1 -7
- package/constants.js.map +1 -1
- package/index.js +3 -38
- package/index.js.map +1 -1
- package/package.json +20 -23
- package/resolver/app/RecordHandler.d.ts +6 -6
- package/resolver/app/RecordHandler.js +7 -15
- package/resolver/app/RecordHandler.js.map +1 -1
- package/resolver/app/RecordsValidation.js +6 -14
- package/resolver/app/RecordsValidation.js.map +1 -1
- package/resolver/app/ResolverApplication.d.ts +1 -1
- package/resolver/app/ResolverApplication.js +10 -18
- package/resolver/app/ResolverApplication.js.map +1 -1
- package/resolver/app/abstractions/RecordHandler.d.ts +1 -1
- package/resolver/app/abstractions/RecordHandler.js +1 -5
- package/resolver/app/abstractions/RecordsValidation.d.ts +2 -2
- package/resolver/app/abstractions/RecordsValidation.js +1 -5
- package/resolver/app/abstractions/RecordsValidation.js.map +1 -1
- package/resolver/app/abstractions/ResolverApplication.js +1 -5
- package/resolver/app/abstractions/ResolverRecord.d.ts +1 -1
- package/resolver/app/abstractions/ResolverRecord.js +1 -5
- package/resolver/app/abstractions/ResolverRecord.js.map +1 -1
- package/resolver/app/bundler/BaseBundle.d.ts +6 -6
- package/resolver/app/bundler/BaseBundle.js +1 -8
- package/resolver/app/bundler/BaseBundle.js.map +1 -1
- package/resolver/app/bundler/Bundler.d.ts +1 -1
- package/resolver/app/bundler/Bundler.js +2 -10
- package/resolver/app/bundler/Bundler.js.map +1 -1
- package/resolver/app/bundler/Bundles.d.ts +2 -2
- package/resolver/app/bundler/Bundles.js +2 -10
- package/resolver/app/bundler/Bundles.js.map +1 -1
- package/resolver/app/bundler/CommandBundle.d.ts +1 -1
- package/resolver/app/bundler/CommandBundle.js +3 -11
- package/resolver/app/bundler/CommandBundle.js.map +1 -1
- package/resolver/app/bundler/TableBundle.d.ts +1 -1
- package/resolver/app/bundler/TableBundle.js +3 -11
- package/resolver/app/bundler/TableBundle.js.map +1 -1
- package/resolver/app/bundler/types.d.ts +2 -2
- package/resolver/app/bundler/types.js +1 -5
- package/resolver/app/commandHandler/DeleteCommandHandler.d.ts +3 -3
- package/resolver/app/commandHandler/DeleteCommandHandler.js +1 -8
- package/resolver/app/commandHandler/DeleteCommandHandler.js.map +1 -1
- package/resolver/app/commandHandler/PutCommandHandler.d.ts +4 -4
- package/resolver/app/commandHandler/PutCommandHandler.js +1 -8
- package/resolver/app/commandHandler/PutCommandHandler.js.map +1 -1
- package/resolver/app/commandHandler/delete.d.ts +1 -1
- package/resolver/app/commandHandler/delete.js +6 -13
- package/resolver/app/commandHandler/delete.js.map +1 -1
- package/resolver/app/commandHandler/put.d.ts +1 -1
- package/resolver/app/commandHandler/put.js +6 -13
- package/resolver/app/commandHandler/put.js.map +1 -1
- package/resolver/app/data/SourceDataContainer.d.ts +3 -3
- package/resolver/app/data/SourceDataContainer.js +1 -8
- package/resolver/app/data/SourceDataContainer.js.map +1 -1
- package/resolver/app/data/types.d.ts +2 -2
- package/resolver/app/data/types.js +1 -5
- package/resolver/app/fetcher/Fetcher.d.ts +3 -3
- package/resolver/app/fetcher/Fetcher.js +13 -22
- package/resolver/app/fetcher/Fetcher.js.map +1 -1
- package/resolver/app/fetcher/types.d.ts +2 -2
- package/resolver/app/fetcher/types.js +1 -5
- package/resolver/app/ingestor/Ingestor.d.ts +1 -1
- package/resolver/app/ingestor/Ingestor.js +2 -10
- package/resolver/app/ingestor/Ingestor.js.map +1 -1
- package/resolver/app/ingestor/IngestorResult.js +3 -11
- package/resolver/app/ingestor/IngestorResult.js.map +1 -1
- package/resolver/app/ingestor/types.d.ts +2 -2
- package/resolver/app/ingestor/types.js +1 -5
- package/resolver/app/storer/Storer.d.ts +3 -3
- package/resolver/app/storer/Storer.js +12 -20
- package/resolver/app/storer/Storer.js.map +1 -1
- package/resolver/app/storer/types.d.ts +2 -2
- package/resolver/app/storer/types.js +1 -5
- package/resolver/app/storer/types.js.map +1 -1
- package/resolver/app/transform/TransformHandler.d.ts +4 -4
- package/resolver/app/transform/TransformHandler.js +5 -12
- package/resolver/app/transform/TransformHandler.js.map +1 -1
- package/resolver/app/transform/middleware.d.ts +1 -1
- package/resolver/app/transform/middleware.js +1 -7
- package/resolver/app/transform/middleware.js.map +1 -1
- package/resolver/app/utils/Retry.js +4 -12
- package/resolver/app/utils/Retry.js.map +1 -1
- package/resolver/app/utils/sleep.js +1 -8
- package/resolver/app/utils/sleep.js.map +1 -1
- package/resolver/app/validation/body.d.ts +6 -6
- package/resolver/app/validation/body.js +22 -30
- package/resolver/app/validation/body.js.map +1 -1
- package/resolver/app/validation/createJsonTransform.js +6 -14
- package/resolver/app/validation/createJsonTransform.js.map +1 -1
- package/resolver/app/validation/detail.d.ts +6 -6
- package/resolver/app/validation/detail.js +16 -24
- package/resolver/app/validation/detail.js.map +1 -1
- package/resolver/app/validation/event.d.ts +6 -6
- package/resolver/app/validation/event.js +19 -27
- package/resolver/app/validation/event.js.map +1 -1
- package/resolver/app/validation/numericString.js +5 -13
- package/resolver/app/validation/numericString.js.map +1 -1
- package/resolver/app/validation/system.js +8 -16
- package/resolver/app/validation/system.js.map +1 -1
- package/resolver/createEventHandlerPlugin.d.ts +2 -1
- package/resolver/createEventHandlerPlugin.js +35 -42
- package/resolver/createEventHandlerPlugin.js.map +1 -1
- package/resolver/createResolverHandler.d.ts +1 -1
- package/resolver/createResolverHandler.js +24 -31
- package/resolver/createResolverHandler.js.map +1 -1
- package/resolver/deployment/Deployment.d.ts +2 -3
- package/resolver/deployment/Deployment.js +6 -14
- package/resolver/deployment/Deployment.js.map +1 -1
- package/resolver/deployment/Deployments.js +2 -10
- package/resolver/deployment/Deployments.js.map +1 -1
- package/resolver/deployment/DeploymentsFetcher.js +33 -42
- package/resolver/deployment/DeploymentsFetcher.js.map +1 -1
- package/resolver/deployment/types.d.ts +4 -4
- package/resolver/deployment/types.js +1 -5
- package/resolver/deployment/types.js.map +1 -1
- package/resolver/lambda/LambdaTrigger.js +5 -12
- package/resolver/lambda/LambdaTrigger.js.map +1 -1
- package/resolver/plugins/CommandHandlerPlugin.d.ts +3 -3
- package/resolver/plugins/CommandHandlerPlugin.js +3 -11
- package/resolver/plugins/CommandHandlerPlugin.js.map +1 -1
- package/resolver/plugins/StorerAfterEachPlugin.d.ts +2 -2
- package/resolver/plugins/StorerAfterEachPlugin.js +4 -13
- package/resolver/plugins/StorerAfterEachPlugin.js.map +1 -1
- package/resolver/plugins/TransformRecordPlugin.d.ts +3 -3
- package/resolver/plugins/TransformRecordPlugin.js +3 -11
- package/resolver/plugins/TransformRecordPlugin.js.map +1 -1
- package/resolver/recordTypes/fileManager/CopyFile.js +4 -11
- package/resolver/recordTypes/fileManager/CopyFile.js.map +1 -1
- package/resolver/recordTypes/fileManager/DeleteFile.d.ts +1 -1
- package/resolver/recordTypes/fileManager/DeleteFile.js +3 -10
- package/resolver/recordTypes/fileManager/DeleteFile.js.map +1 -1
- package/resolver/recordTypes/fileManager/fileManager.d.ts +1 -1
- package/resolver/recordTypes/fileManager/fileManager.js +4 -11
- package/resolver/recordTypes/fileManager/fileManager.js.map +1 -1
- package/resolver/recordTypes/fileManager/fileManagerOnDelete.d.ts +1 -1
- package/resolver/recordTypes/fileManager/fileManagerOnDelete.js +7 -14
- package/resolver/recordTypes/fileManager/fileManagerOnDelete.js.map +1 -1
- package/resolver/recordTypes/fileManager/fileManagerOnPut.d.ts +1 -1
- package/resolver/recordTypes/fileManager/fileManagerOnPut.js +7 -14
- package/resolver/recordTypes/fileManager/fileManagerOnPut.js.map +1 -1
- package/resolver/recordTypes/fileManager/shouldBeHandled.d.ts +1 -1
- package/resolver/recordTypes/fileManager/shouldBeHandled.js +1 -8
- package/resolver/recordTypes/fileManager/shouldBeHandled.js.map +1 -1
- package/resolver/recordTypes/fileManager/types.d.ts +2 -2
- package/resolver/recordTypes/fileManager/types.js +1 -5
- package/resolver/recordTypes/users/CopyUser.d.ts +2 -2
- package/resolver/recordTypes/users/CopyUser.js +3 -10
- package/resolver/recordTypes/users/CopyUser.js.map +1 -1
- package/resolver/recordTypes/users/DeleteUser.d.ts +2 -2
- package/resolver/recordTypes/users/DeleteUser.js +3 -10
- package/resolver/recordTypes/users/DeleteUser.js.map +1 -1
- package/resolver/recordTypes/users/shouldBeHandled.d.ts +1 -1
- package/resolver/recordTypes/users/shouldBeHandled.js +1 -8
- package/resolver/recordTypes/users/shouldBeHandled.js.map +1 -1
- package/resolver/recordTypes/users/types.d.ts +1 -1
- package/resolver/recordTypes/users/types.js +1 -5
- package/resolver/recordTypes/users/types.js.map +1 -1
- package/resolver/recordTypes/users/users.js +4 -11
- package/resolver/recordTypes/users/users.js.map +1 -1
- package/resolver/recordTypes/users/usersOnDelete.d.ts +2 -2
- package/resolver/recordTypes/users/usersOnDelete.js +7 -14
- package/resolver/recordTypes/users/usersOnDelete.js.map +1 -1
- package/resolver/recordTypes/users/usersOnPut.d.ts +2 -2
- package/resolver/recordTypes/users/usersOnPut.js +7 -14
- package/resolver/recordTypes/users/usersOnPut.js.map +1 -1
- package/sync/FilterOutRecord.d.ts +2 -2
- package/sync/FilterOutRecord.js +2 -10
- package/sync/FilterOutRecord.js.map +1 -1
- package/sync/attachToDynamoDbDocument.d.ts +1 -1
- package/sync/attachToDynamoDbDocument.js +9 -17
- package/sync/attachToDynamoDbDocument.js.map +1 -1
- package/sync/createHandler.js +27 -34
- package/sync/createHandler.js.map +1 -1
- package/sync/createSendDataToEventBridgeOnRequestEnd.js +6 -13
- package/sync/createSendDataToEventBridgeOnRequestEnd.js.map +1 -1
- package/sync/createSyncSystem.d.ts +1 -1
- package/sync/createSyncSystem.js +6 -13
- package/sync/createSyncSystem.js.map +1 -1
- package/sync/filter/createDefaultFilterOutRecordPlugins.d.ts +1 -1
- package/sync/filter/createDefaultFilterOutRecordPlugins.js +9 -19
- package/sync/filter/createDefaultFilterOutRecordPlugins.js.map +1 -1
- package/sync/handler/Handler.d.ts +2 -2
- package/sync/handler/Handler.js +9 -17
- package/sync/handler/Handler.js.map +1 -1
- package/sync/handler/HandlerConverter.js +2 -10
- package/sync/handler/HandlerConverter.js.map +1 -1
- package/sync/handler/converter/BatchGetCommandConverter.js +6 -14
- package/sync/handler/converter/BatchGetCommandConverter.js.map +1 -1
- package/sync/handler/converter/BatchWriteCommandConverter.js +6 -14
- package/sync/handler/converter/BatchWriteCommandConverter.js.map +1 -1
- package/sync/handler/converter/DeleteCommandConverter.js +6 -14
- package/sync/handler/converter/DeleteCommandConverter.js.map +1 -1
- package/sync/handler/converter/GetCommandConverter.js +6 -14
- package/sync/handler/converter/GetCommandConverter.js.map +1 -1
- package/sync/handler/converter/PutCommandConverter.js +6 -14
- package/sync/handler/converter/PutCommandConverter.js.map +1 -1
- package/sync/handler/converter/QueryCommandConverter.js +6 -14
- package/sync/handler/converter/QueryCommandConverter.js.map +1 -1
- package/sync/handler/converter/ScanCommandConverter.js +6 -14
- package/sync/handler/converter/ScanCommandConverter.js.map +1 -1
- package/sync/handler/converter/UpdateCommandConverter.js +6 -14
- package/sync/handler/converter/UpdateCommandConverter.js.map +1 -1
- package/sync/handler/converter/commands/BatchWriteCommandValue.d.ts +2 -2
- package/sync/handler/converter/commands/BatchWriteCommandValue.js +4 -11
- package/sync/handler/converter/commands/BatchWriteCommandValue.js.map +1 -1
- package/sync/handler/converter/commands/DeleteCommandValue.d.ts +2 -2
- package/sync/handler/converter/commands/DeleteCommandValue.js +3 -10
- package/sync/handler/converter/commands/DeleteCommandValue.js.map +1 -1
- package/sync/handler/converter/commands/NullCommandValue.d.ts +1 -1
- package/sync/handler/converter/commands/NullCommandValue.js +1 -8
- package/sync/handler/converter/commands/NullCommandValue.js.map +1 -1
- package/sync/handler/converter/commands/PutCommandValue.d.ts +2 -2
- package/sync/handler/converter/commands/PutCommandValue.js +3 -10
- package/sync/handler/converter/commands/PutCommandValue.js.map +1 -1
- package/sync/handler/converter/commands/UpdateCommandValue.d.ts +2 -2
- package/sync/handler/converter/commands/UpdateCommandValue.js +3 -10
- package/sync/handler/converter/commands/UpdateCommandValue.js.map +1 -1
- package/sync/handler/types.d.ts +3 -3
- package/sync/handler/types.js +1 -5
- package/sync/handler/types.js.map +1 -1
- package/sync/plugins/FilterOutRecordPlugin.d.ts +1 -1
- package/sync/plugins/FilterOutRecordPlugin.js +3 -11
- package/sync/plugins/FilterOutRecordPlugin.js.map +1 -1
- package/sync/requestPlugin.d.ts +1 -1
- package/sync/requestPlugin.js +19 -20
- package/sync/requestPlugin.js.map +1 -1
- package/sync/types.js +1 -5
- package/sync/utils/getTableType.js +7 -14
- package/sync/utils/getTableType.js.map +1 -1
- package/sync/utils/manifest.d.ts +1 -1
- package/sync/utils/manifest.js +12 -20
- package/sync/utils/manifest.js.map +1 -1
- package/sync/utils/validateSystemInput.d.ts +1 -1
- package/sync/utils/validateSystemInput.js +3 -10
- package/sync/utils/validateSystemInput.js.map +1 -1
- package/types.d.ts +3 -4
- package/types.js +2 -8
- package/types.js.map +1 -1
- package/utils/createSystemName.js +1 -8
- package/utils/createSystemName.js.map +1 -1
- package/worker/actions/copyFile/CopyFile.js +13 -21
- package/worker/actions/copyFile/CopyFile.js.map +1 -1
- package/worker/actions/copyFile/copyFileAction.d.ts +1 -1
- package/worker/actions/copyFile/copyFileAction.js +9 -16
- package/worker/actions/copyFile/copyFileAction.js.map +1 -1
- package/worker/actions/copyFile/copyFileSchema.js +8 -16
- package/worker/actions/copyFile/copyFileSchema.js.map +1 -1
- package/worker/actions/copyFile/types.js +1 -5
- package/worker/actions/createUser/CreateUser.d.ts +1 -1
- package/worker/actions/createUser/CreateUser.js +9 -16
- package/worker/actions/createUser/CreateUser.js.map +1 -1
- package/worker/actions/createUser/createUserAction.d.ts +2 -2
- package/worker/actions/createUser/createUserAction.js +9 -16
- package/worker/actions/createUser/createUserAction.js.map +1 -1
- package/worker/actions/createUser/createUserSchema.js +8 -16
- package/worker/actions/createUser/createUserSchema.js.map +1 -1
- package/worker/actions/createUser/types.js +1 -5
- package/worker/actions/deleteFile/DeleteFile.js +4 -11
- package/worker/actions/deleteFile/DeleteFile.js.map +1 -1
- package/worker/actions/deleteFile/deleteFileAction.d.ts +1 -1
- package/worker/actions/deleteFile/deleteFileAction.js +9 -16
- package/worker/actions/deleteFile/deleteFileAction.js.map +1 -1
- package/worker/actions/deleteFile/deleteFileSchema.js +8 -16
- package/worker/actions/deleteFile/deleteFileSchema.js.map +1 -1
- package/worker/actions/deleteFile/types.js +1 -5
- package/worker/actions/deleteUser/DeleteUser.d.ts +2 -2
- package/worker/actions/deleteUser/DeleteUser.js +7 -14
- package/worker/actions/deleteUser/DeleteUser.js.map +1 -1
- package/worker/actions/deleteUser/deleteUserAction.d.ts +1 -1
- package/worker/actions/deleteUser/deleteUserAction.js +9 -16
- package/worker/actions/deleteUser/deleteUserAction.js.map +1 -1
- package/worker/actions/deleteUser/deleteUserSchema.js +8 -16
- package/worker/actions/deleteUser/deleteUserSchema.js.map +1 -1
- package/worker/actions/deleteUser/types.js +1 -5
- package/worker/actions/logValidationError.js +4 -11
- package/worker/actions/logValidationError.js.map +1 -1
- package/worker/actions/removeCognitoUserAttributes.js +1 -8
- package/worker/actions/removeCognitoUserAttributes.js.map +1 -1
- package/worker/actions/updateUser/UpdateUser.d.ts +1 -1
- package/worker/actions/updateUser/UpdateUser.js +9 -16
- package/worker/actions/updateUser/UpdateUser.js.map +1 -1
- package/worker/actions/updateUser/types.js +1 -5
- package/worker/actions/updateUser/updateUserAction.d.ts +2 -2
- package/worker/actions/updateUser/updateUserAction.js +9 -16
- package/worker/actions/updateUser/updateUserAction.js.map +1 -1
- package/worker/actions/updateUser/updateUserSchema.js +8 -16
- package/worker/actions/updateUser/updateUserSchema.js.map +1 -1
- package/worker/createWorkerHandler.js +17 -24
- package/worker/createWorkerHandler.js.map +1 -1
- package/worker/handler/WorkerActionHandler.d.ts +2 -2
- package/worker/handler/WorkerActionHandler.js +3 -10
- package/worker/handler/WorkerActionHandler.js.map +1 -1
- package/worker/handler/eventHandler.js +9 -16
- package/worker/handler/eventHandler.js.map +1 -1
- package/worker/plugins/WorkerActionPlugin.d.ts +1 -1
- package/worker/plugins/WorkerActionPlugin.js +3 -11
- package/worker/plugins/WorkerActionPlugin.js.map +1 -1
- package/worker/types.js +1 -5
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createFilterOutRecordPlugin = exports.FilterOutRecordPlugin = void 0;
|
|
7
|
-
var _Plugin = require("@webiny/plugins/Plugin.js");
|
|
8
|
-
class FilterOutRecordPlugin extends _Plugin.Plugin {
|
|
1
|
+
import { Plugin } from "@webiny/plugins/Plugin.js";
|
|
2
|
+
export class FilterOutRecordPlugin extends Plugin {
|
|
9
3
|
static type = "sync.filterOut.record";
|
|
10
4
|
constructor(params) {
|
|
11
5
|
super();
|
|
@@ -22,10 +16,8 @@ class FilterOutRecordPlugin extends _Plugin.Plugin {
|
|
|
22
16
|
return `${FilterOutRecordPlugin.type}.${name}`;
|
|
23
17
|
}
|
|
24
18
|
}
|
|
25
|
-
|
|
26
|
-
const createFilterOutRecordPlugin = params => {
|
|
19
|
+
export const createFilterOutRecordPlugin = params => {
|
|
27
20
|
return new FilterOutRecordPlugin(params);
|
|
28
21
|
};
|
|
29
|
-
exports.createFilterOutRecordPlugin = createFilterOutRecordPlugin;
|
|
30
22
|
|
|
31
23
|
//# sourceMappingURL=FilterOutRecordPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["Plugin","FilterOutRecordPlugin","type","constructor","params","name","cb","filterOut","execute","item","createName","createFilterOutRecordPlugin"],"sources":["FilterOutRecordPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins/Plugin.js\";\nimport type { ICommandValueItemExtended } from \"~/sync/types.js\";\n\nexport interface IFilterOutRecordPluginCallable {\n (record: ICommandValueItemExtended): boolean;\n}\n\nexport interface IFilterOutRecordPluginParams {\n /**\n * Filter out returns true if the record should be filtered out.\n */\n filterOut: IFilterOutRecordPluginCallable;\n name: string;\n}\n\nexport class FilterOutRecordPlugin extends Plugin {\n public static override readonly type: string = \"sync.filterOut.record\";\n\n private readonly cb: IFilterOutRecordPluginCallable;\n\n public constructor(params: IFilterOutRecordPluginParams) {\n super();\n this.name = params.name;\n this.cb = params.filterOut;\n }\n /**\n * If method returns `true`, the record will be filtered out.\n */\n public execute(item: ICommandValueItemExtended): boolean {\n return this.cb(item);\n }\n\n public static createName(name: string): string {\n return `${FilterOutRecordPlugin.type}.${name}`;\n }\n}\n\nexport const createFilterOutRecordPlugin = (\n params: IFilterOutRecordPluginParams\n): FilterOutRecordPlugin => {\n return new FilterOutRecordPlugin(params);\n};\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,2BAA2B;AAelD,OAAO,MAAMC,qBAAqB,SAASD,MAAM,CAAC;EAC9C,OAAgCE,IAAI,GAAW,uBAAuB;EAI/DC,WAAWA,CAACC,MAAoC,EAAE;IACrD,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,IAAI,GAAGD,MAAM,CAACC,IAAI;IACvB,IAAI,CAACC,EAAE,GAAGF,MAAM,CAACG,SAAS;EAC9B;EACA;AACJ;AACA;EACWC,OAAOA,CAACC,IAA+B,EAAW;IACrD,OAAO,IAAI,CAACH,EAAE,CAACG,IAAI,CAAC;EACxB;EAEA,OAAcC,UAAUA,CAACL,IAAY,EAAU;IAC3C,OAAO,GAAGJ,qBAAqB,CAACC,IAAI,IAAIG,IAAI,EAAE;EAClD;AACJ;AAEA,OAAO,MAAMM,2BAA2B,GACpCP,MAAoC,IACZ;EACxB,OAAO,IAAIH,qBAAqB,CAACG,MAAM,CAAC;AAC5C,CAAC","ignoreList":[]}
|
package/sync/requestPlugin.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DynamoDBDocument } from "@webiny/aws-sdk/client-dynamodb/index.js";
|
|
2
|
-
import type { ICommandConverter, IGetEventBridgeCallable, ISystem } from "
|
|
2
|
+
import type { ICommandConverter, IGetEventBridgeCallable, ISystem } from "../sync/types.js";
|
|
3
3
|
export interface ICreateSyncSystemHandlerOnRequestPluginParams {
|
|
4
4
|
getDocumentClient(): Pick<DynamoDBDocument, "send">;
|
|
5
5
|
getEventBridgeClient: IGetEventBridgeCallable;
|
package/sync/requestPlugin.js
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var _attachToDynamoDbDocument = require("./attachToDynamoDbDocument.js");
|
|
10
|
-
var _createSendDataToEventBridgeOnRequestEnd = require("./createSendDataToEventBridgeOnRequestEnd.js");
|
|
11
|
-
var _createHandler = require("./createHandler.js");
|
|
12
|
-
var _exception = require("@webiny/utils/exception.js");
|
|
13
|
-
const createSyncSystemHandlerOnRequestPlugin = params => {
|
|
14
|
-
return (0, _handler.createHandlerOnRequest)(async (_, __, context) => {
|
|
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
|
+
export const createSyncSystemHandlerOnRequestPlugin = params => {
|
|
8
|
+
return createHandlerOnRequest(async (_, __, context) => {
|
|
15
9
|
const {
|
|
16
10
|
data: manifest,
|
|
17
11
|
error
|
|
18
|
-
} = await
|
|
12
|
+
} = await getManifest(params);
|
|
19
13
|
if (error) {
|
|
14
|
+
if (process.env.DEBUG !== "true") {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
20
17
|
console.error("Error happened when fetching manifest.");
|
|
21
18
|
console.log(JSON.stringify({
|
|
22
|
-
error:
|
|
19
|
+
error: convertException(error)
|
|
23
20
|
}));
|
|
24
21
|
return;
|
|
25
22
|
} else if (!manifest?.sync?.region) {
|
|
23
|
+
if (process.env.DEBUG !== "true") {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
26
|
console.error("There is no manifest.");
|
|
27
27
|
console.log(JSON.stringify({
|
|
28
28
|
manifest
|
|
@@ -31,7 +31,7 @@ const createSyncSystemHandlerOnRequestPlugin = params => {
|
|
|
31
31
|
}
|
|
32
32
|
const {
|
|
33
33
|
handler
|
|
34
|
-
} =
|
|
34
|
+
} = createHandler({
|
|
35
35
|
getEventBridgeClient: () => {
|
|
36
36
|
return params.getEventBridgeClient({
|
|
37
37
|
region: manifest.sync.region
|
|
@@ -44,16 +44,15 @@ const createSyncSystemHandlerOnRequestPlugin = params => {
|
|
|
44
44
|
return context.plugins;
|
|
45
45
|
}
|
|
46
46
|
});
|
|
47
|
-
|
|
47
|
+
attachToDynamoDbDocument({
|
|
48
48
|
handler
|
|
49
49
|
});
|
|
50
50
|
context.plugins.register([
|
|
51
51
|
/**
|
|
52
52
|
* When request ends, send the data to the EventBridge.
|
|
53
53
|
*/
|
|
54
|
-
|
|
54
|
+
createSendDataToEventBridgeOnRequestEnd(handler)]);
|
|
55
55
|
});
|
|
56
56
|
};
|
|
57
|
-
exports.createSyncSystemHandlerOnRequestPlugin = createSyncSystemHandlerOnRequestPlugin;
|
|
58
57
|
|
|
59
58
|
//# sourceMappingURL=requestPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["createHandlerOnRequest","getManifest","attachToDynamoDbDocument","createSendDataToEventBridgeOnRequestEnd","createHandler","convertException","createSyncSystemHandlerOnRequestPlugin","params","_","__","context","data","manifest","error","process","env","DEBUG","console","log","JSON","stringify","sync","region","handler","getEventBridgeClient","system","commandConverters","getPlugins","plugins","register"],"sources":["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(params);\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"],"mappings":"AAEA,SAASA,sBAAsB,QAAQ,iBAAiB;AACxD,SAASC,WAAW;AACpB,SAASC,wBAAwB;AACjC,SAASC,uCAAuC;AAChD,SAASC,aAAa;AACtB,SAASC,gBAAgB,QAAQ,4BAA4B;AAS7D,OAAO,MAAMC,sCAAsC,GAC/CC,MAAqD,IACpD;EACD,OAAOP,sBAAsB,CAAC,OAAOQ,CAAC,EAAEC,EAAE,EAAEC,OAAO,KAAK;IACpD,MAAM;MAAEC,IAAI,EAAEC,QAAQ;MAAEC;IAAM,CAAC,GAAG,MAAMZ,WAAW,CAACM,MAAM,CAAC;IAC3D,IAAIM,KAAK,EAAE;MACP,IAAIC,OAAO,CAACC,GAAG,CAACC,KAAK,KAAK,MAAM,EAAE;QAC9B;MACJ;MACAC,OAAO,CAACJ,KAAK,CAAC,wCAAwC,CAAC;MACvDI,OAAO,CAACC,GAAG,CACPC,IAAI,CAACC,SAAS,CAAC;QACXP,KAAK,EAAER,gBAAgB,CAACQ,KAAK;MACjC,CAAC,CACL,CAAC;MACD;IACJ,CAAC,MAAM,IAAI,CAACD,QAAQ,EAAES,IAAI,EAAEC,MAAM,EAAE;MAChC,IAAIR,OAAO,CAACC,GAAG,CAACC,KAAK,KAAK,MAAM,EAAE;QAC9B;MACJ;MACAC,OAAO,CAACJ,KAAK,CAAC,uBAAuB,CAAC;MACtCI,OAAO,CAACC,GAAG,CACPC,IAAI,CAACC,SAAS,CAAC;QACXR;MACJ,CAAC,CACL,CAAC;MACD;IACJ;IAEA,MAAM;MAAEW;IAAQ,CAAC,GAAGnB,aAAa,CAAC;MAC9BoB,oBAAoB,EAAEA,CAAA,KAAM;QACxB,OAAOjB,MAAM,CAACiB,oBAAoB,CAAC;UAC/BF,MAAM,EAAEV,QAAQ,CAACS,IAAI,CAACC;QAC1B,CAAC,CAAC;MACN,CAAC;MACDG,MAAM,EAAElB,MAAM,CAACkB,MAAM;MACrBb,QAAQ;MACRc,iBAAiB,EAAEnB,MAAM,CAACmB,iBAAiB;MAC3CC,UAAU,EAAEA,CAAA,KAAM;QACd,OAAOjB,OAAO,CAACkB,OAAO;MAC1B;IACJ,CAAC,CAAC;IAEF1B,wBAAwB,CAAC;MACrBqB;IACJ,CAAC,CAAC;IACFb,OAAO,CAACkB,OAAO,CAACC,QAAQ,CAAC;IACrB;AACZ;AACA;IACY1B,uCAAuC,CAACoB,OAAO,CAAC,CACnD,CAAC;EACN,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
|
package/sync/types.js
CHANGED
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.getTableType = void 0;
|
|
7
|
-
var _types = require("../../types.js");
|
|
8
|
-
const getTableType = tableName => {
|
|
1
|
+
import { DynamoDBTableType } from "../../types.js";
|
|
2
|
+
export const getTableType = tableName => {
|
|
9
3
|
switch (tableName) {
|
|
10
4
|
case process.env.DB_TABLE:
|
|
11
|
-
return
|
|
12
|
-
case process.env.
|
|
13
|
-
return
|
|
5
|
+
return DynamoDBTableType.REGULAR;
|
|
6
|
+
case process.env.DB_TABLE_OPENSEARCH:
|
|
7
|
+
return DynamoDBTableType.OPENSEARCH;
|
|
14
8
|
case process.env.DB_TABLE_LOG:
|
|
15
|
-
return
|
|
9
|
+
return DynamoDBTableType.LOG;
|
|
16
10
|
default:
|
|
17
|
-
return
|
|
11
|
+
return DynamoDBTableType.UNKNOWN;
|
|
18
12
|
}
|
|
19
13
|
};
|
|
20
|
-
exports.getTableType = getTableType;
|
|
21
14
|
|
|
22
15
|
//# sourceMappingURL=getTableType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["DynamoDBTableType","getTableType","tableName","process","env","DB_TABLE","REGULAR","DB_TABLE_OPENSEARCH","OPENSEARCH","DB_TABLE_LOG","LOG","UNKNOWN"],"sources":["getTableType.ts"],"sourcesContent":["import { DynamoDBTableType } from \"~/types.js\";\n\nexport const getTableType = (tableName: string): DynamoDBTableType => {\n switch (tableName) {\n case process.env.DB_TABLE:\n return DynamoDBTableType.REGULAR;\n case process.env.DB_TABLE_OPENSEARCH:\n return DynamoDBTableType.OPENSEARCH;\n case process.env.DB_TABLE_LOG:\n return DynamoDBTableType.LOG;\n default:\n return DynamoDBTableType.UNKNOWN;\n }\n};\n"],"mappings":"AAAA,SAASA,iBAAiB;AAE1B,OAAO,MAAMC,YAAY,GAAIC,SAAiB,IAAwB;EAClE,QAAQA,SAAS;IACb,KAAKC,OAAO,CAACC,GAAG,CAACC,QAAQ;MACrB,OAAOL,iBAAiB,CAACM,OAAO;IACpC,KAAKH,OAAO,CAACC,GAAG,CAACG,mBAAmB;MAChC,OAAOP,iBAAiB,CAACQ,UAAU;IACvC,KAAKL,OAAO,CAACC,GAAG,CAACK,YAAY;MACzB,OAAOT,iBAAiB,CAACU,GAAG;IAChC;MACI,OAAOV,iBAAiB,CAACW,OAAO;EACxC;AACJ,CAAC","ignoreList":[]}
|
package/sync/utils/manifest.d.ts
CHANGED
package/sync/utils/manifest.js
CHANGED
|
@@ -1,25 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var _zod = _interopRequireDefault(require("zod"));
|
|
10
|
-
var _utils = require("@webiny/utils");
|
|
11
|
-
const validateManifest = _zod.default.object({
|
|
12
|
-
sync: _zod.default.object({
|
|
13
|
-
eventBusArn: _zod.default.string(),
|
|
14
|
-
eventBusName: _zod.default.string(),
|
|
15
|
-
region: _zod.default.string()
|
|
1
|
+
import { ServiceDiscovery } from "@webiny/api";
|
|
2
|
+
import zod from "zod";
|
|
3
|
+
import { createZodError } from "@webiny/utils";
|
|
4
|
+
const validateManifest = zod.object({
|
|
5
|
+
sync: zod.object({
|
|
6
|
+
eventBusArn: zod.string(),
|
|
7
|
+
eventBusName: zod.string(),
|
|
8
|
+
region: zod.string()
|
|
16
9
|
})
|
|
17
10
|
});
|
|
18
|
-
const getManifest = async params => {
|
|
11
|
+
export const getManifest = async params => {
|
|
19
12
|
const documentClient = params.getDocumentClient();
|
|
20
13
|
try {
|
|
21
|
-
|
|
22
|
-
const manifest = await
|
|
14
|
+
ServiceDiscovery.setDocumentClient(documentClient);
|
|
15
|
+
const manifest = await ServiceDiscovery.load();
|
|
23
16
|
if (!manifest?.sync) {
|
|
24
17
|
return {
|
|
25
18
|
/**
|
|
@@ -33,7 +26,7 @@ const getManifest = async params => {
|
|
|
33
26
|
error
|
|
34
27
|
} = validateManifest.safeParse(manifest);
|
|
35
28
|
if (error) {
|
|
36
|
-
const err =
|
|
29
|
+
const err = createZodError(error);
|
|
37
30
|
return {
|
|
38
31
|
error: err
|
|
39
32
|
};
|
|
@@ -47,6 +40,5 @@ const getManifest = async params => {
|
|
|
47
40
|
};
|
|
48
41
|
}
|
|
49
42
|
};
|
|
50
|
-
exports.getManifest = getManifest;
|
|
51
43
|
|
|
52
44
|
//# sourceMappingURL=manifest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["ServiceDiscovery","zod","createZodError","validateManifest","object","sync","eventBusArn","string","eventBusName","region","getManifest","params","documentClient","getDocumentClient","setDocumentClient","manifest","load","error","Error","data","safeParse","err","ex"],"sources":["manifest.ts"],"sourcesContent":["import { ServiceDiscovery } from \"@webiny/api\";\nimport zod from \"zod\";\nimport { createZodError } from \"@webiny/utils\";\nimport type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\n\nconst validateManifest = zod.object({\n sync: zod.object({\n eventBusArn: zod.string(),\n eventBusName: zod.string(),\n region: zod.string()\n })\n});\n\nexport interface IGetManifestParams {\n getDocumentClient(): Pick<DynamoDBDocument, \"send\">;\n}\n\nexport const getManifest = async (params: IGetManifestParams) => {\n const documentClient = params.getDocumentClient();\n try {\n ServiceDiscovery.setDocumentClient(documentClient);\n const manifest = await ServiceDiscovery.load();\n if (!manifest?.sync) {\n return {\n /**\n * This error will be silent. We do not want to log or throw at this point.\n */\n error: new Error(\n \"Sync System Manifest not found. Probably Sync System is not turned on.\"\n )\n };\n }\n const { data, error } = validateManifest.safeParse(manifest);\n if (error) {\n const err = createZodError(error);\n return {\n error: err\n };\n }\n return {\n data\n };\n } catch (ex) {\n return {\n error: ex\n };\n }\n};\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,aAAa;AAC9C,OAAOC,GAAG,MAAM,KAAK;AACrB,SAASC,cAAc,QAAQ,eAAe;AAG9C,MAAMC,gBAAgB,GAAGF,GAAG,CAACG,MAAM,CAAC;EAChCC,IAAI,EAAEJ,GAAG,CAACG,MAAM,CAAC;IACbE,WAAW,EAAEL,GAAG,CAACM,MAAM,CAAC,CAAC;IACzBC,YAAY,EAAEP,GAAG,CAACM,MAAM,CAAC,CAAC;IAC1BE,MAAM,EAAER,GAAG,CAACM,MAAM,CAAC;EACvB,CAAC;AACL,CAAC,CAAC;AAMF,OAAO,MAAMG,WAAW,GAAG,MAAOC,MAA0B,IAAK;EAC7D,MAAMC,cAAc,GAAGD,MAAM,CAACE,iBAAiB,CAAC,CAAC;EACjD,IAAI;IACAb,gBAAgB,CAACc,iBAAiB,CAACF,cAAc,CAAC;IAClD,MAAMG,QAAQ,GAAG,MAAMf,gBAAgB,CAACgB,IAAI,CAAC,CAAC;IAC9C,IAAI,CAACD,QAAQ,EAAEV,IAAI,EAAE;MACjB,OAAO;QACH;AAChB;AACA;QACgBY,KAAK,EAAE,IAAIC,KAAK,CACZ,wEACJ;MACJ,CAAC;IACL;IACA,MAAM;MAAEC,IAAI;MAAEF;IAAM,CAAC,GAAGd,gBAAgB,CAACiB,SAAS,CAACL,QAAQ,CAAC;IAC5D,IAAIE,KAAK,EAAE;MACP,MAAMI,GAAG,GAAGnB,cAAc,CAACe,KAAK,CAAC;MACjC,OAAO;QACHA,KAAK,EAAEI;MACX,CAAC;IACL;IACA,OAAO;MACHF;IACJ,CAAC;EACL,CAAC,CAAC,OAAOG,EAAE,EAAE;IACT,OAAO;MACHL,KAAK,EAAEK;IACX,CAAC;EACL;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.validateSystemInput = void 0;
|
|
7
|
-
var _createSystemName = require("../../utils/createSystemName.js");
|
|
8
|
-
const validateSystemInput = input => {
|
|
1
|
+
import { createSystemName } from "../../utils/createSystemName.js";
|
|
2
|
+
export const validateSystemInput = input => {
|
|
9
3
|
const {
|
|
10
4
|
env,
|
|
11
5
|
region,
|
|
@@ -25,7 +19,7 @@ const validateSystemInput = input => {
|
|
|
25
19
|
error: "Sync System: No version variable provided. Sync System will not be attached."
|
|
26
20
|
};
|
|
27
21
|
}
|
|
28
|
-
const name =
|
|
22
|
+
const name = createSystemName({
|
|
29
23
|
env,
|
|
30
24
|
variant
|
|
31
25
|
});
|
|
@@ -39,6 +33,5 @@ const validateSystemInput = input => {
|
|
|
39
33
|
}
|
|
40
34
|
};
|
|
41
35
|
};
|
|
42
|
-
exports.validateSystemInput = validateSystemInput;
|
|
43
36
|
|
|
44
37
|
//# sourceMappingURL=validateSystemInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["createSystemName","validateSystemInput","input","env","region","variant","version","error","name","system"],"sources":["validateSystemInput.ts"],"sourcesContent":["import type { ISystem } from \"~/sync/types.js\";\nimport { createSystemName } from \"~/utils/createSystemName.js\";\n\nexport interface IValidResponse {\n system: ISystem;\n error?: never;\n}\n\nexport interface IErrorResponse {\n error: string;\n system?: never;\n}\n\nexport type ValidateSystemInputResponse = IValidResponse | IErrorResponse;\n\nexport const validateSystemInput = (input: Partial<ISystem>): ValidateSystemInputResponse => {\n const { env, region, variant, version } = input;\n if (!env) {\n return {\n error: \"Sync System: No environment variable provided. Sync System will not be attached.\"\n };\n } else if (!region) {\n return {\n error: \"Sync System: No region variable provided. Sync System will not be attached.\"\n };\n } else if (!version) {\n return {\n error: \"Sync System: No version variable provided. Sync System will not be attached.\"\n };\n }\n const name = createSystemName({\n env,\n variant\n });\n\n return {\n system: {\n env,\n name,\n region,\n variant,\n version\n }\n };\n};\n"],"mappings":"AACA,SAASA,gBAAgB;AAczB,OAAO,MAAMC,mBAAmB,GAAIC,KAAuB,IAAkC;EACzF,MAAM;IAAEC,GAAG;IAAEC,MAAM;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GAAGJ,KAAK;EAC/C,IAAI,CAACC,GAAG,EAAE;IACN,OAAO;MACHI,KAAK,EAAE;IACX,CAAC;EACL,CAAC,MAAM,IAAI,CAACH,MAAM,EAAE;IAChB,OAAO;MACHG,KAAK,EAAE;IACX,CAAC;EACL,CAAC,MAAM,IAAI,CAACD,OAAO,EAAE;IACjB,OAAO;MACHC,KAAK,EAAE;IACX,CAAC;EACL;EACA,MAAMC,IAAI,GAAGR,gBAAgB,CAAC;IAC1BG,GAAG;IACHE;EACJ,CAAC,CAAC;EAEF,OAAO;IACHI,MAAM,EAAE;MACJN,GAAG;MACHK,IAAI;MACJJ,MAAM;MACNC,OAAO;MACPC;IACJ;EACJ,CAAC;AACL,CAAC","ignoreList":[]}
|
package/types.d.ts
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import type { Context as BaseContext } from "@webiny/handler-aws/types";
|
|
1
|
+
import type { Context as BaseContext } from "@webiny/handler-aws/types.js";
|
|
2
2
|
export type CommandType = "put" | "delete";
|
|
3
3
|
export type ExtendedCommandType = "put" | "delete" | "update";
|
|
4
4
|
export type AllCommandType = ExtendedCommandType | "batchWrite" | "null";
|
|
5
5
|
export declare enum DynamoDBTableType {
|
|
6
6
|
REGULAR = "regular",
|
|
7
|
-
|
|
7
|
+
OPENSEARCH = "opensearch",
|
|
8
8
|
LOG = "log",
|
|
9
9
|
UNKNOWN = "unknown"
|
|
10
10
|
}
|
|
11
|
-
export
|
|
12
|
-
}
|
|
11
|
+
export type Context = BaseContext;
|
|
13
12
|
export interface IFileLambdaPayloadInfo {
|
|
14
13
|
bucket: string;
|
|
15
14
|
region: string;
|
package/types.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.DynamoDBTableType = void 0;
|
|
7
|
-
let DynamoDBTableType = exports.DynamoDBTableType = /*#__PURE__*/function (DynamoDBTableType) {
|
|
1
|
+
export let DynamoDBTableType = /*#__PURE__*/function (DynamoDBTableType) {
|
|
8
2
|
DynamoDBTableType["REGULAR"] = "regular";
|
|
9
|
-
DynamoDBTableType["
|
|
3
|
+
DynamoDBTableType["OPENSEARCH"] = "opensearch";
|
|
10
4
|
DynamoDBTableType["LOG"] = "log";
|
|
11
5
|
DynamoDBTableType["UNKNOWN"] = "unknown";
|
|
12
6
|
return DynamoDBTableType;
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DynamoDBTableType"
|
|
1
|
+
{"version":3,"names":["DynamoDBTableType"],"sources":["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 LOG = \"log\",\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"],"mappings":"AAMA,WAAYA,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA","ignoreList":[]}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createSystemName = void 0;
|
|
7
|
-
const createSystemName = params => {
|
|
1
|
+
export const createSystemName = params => {
|
|
8
2
|
return [params.env, params.variant].filter(Boolean).join("#");
|
|
9
3
|
};
|
|
10
|
-
exports.createSystemName = createSystemName;
|
|
11
4
|
|
|
12
5
|
//# sourceMappingURL=createSystemName.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createSystemName","params","env","variant","filter","Boolean","join"
|
|
1
|
+
{"version":3,"names":["createSystemName","params","env","variant","filter","Boolean","join"],"sources":["createSystemName.ts"],"sourcesContent":["export interface ICreateSystemNameParams {\n env: string;\n variant: string | undefined;\n}\n\nexport const createSystemName = (params: ICreateSystemNameParams): string => {\n return [params.env, params.variant].filter(Boolean).join(\"#\");\n};\n"],"mappings":"AAKA,OAAO,MAAMA,gBAAgB,GAAIC,MAA+B,IAAa;EACzE,OAAO,CAACA,MAAM,CAACC,GAAG,EAAED,MAAM,CAACE,OAAO,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC;AACjE,CAAC","ignoreList":[]}
|
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.CopyFile = void 0;
|
|
8
|
-
var _index = require("@webiny/aws-sdk/client-s3/index.js");
|
|
9
|
-
var _bytes = _interopRequireDefault(require("bytes"));
|
|
10
|
-
var _utils = require("@webiny/utils");
|
|
11
|
-
class CopyFile {
|
|
1
|
+
import { AbortMultipartUploadCommand, CompleteMultipartUploadCommand, CopyObjectCommand, CreateMultipartUploadCommand, HeadObjectCommand, UploadPartCopyCommand } from "@webiny/aws-sdk/client-s3/index.js";
|
|
2
|
+
import bytes from "bytes";
|
|
3
|
+
import { convertException } from "@webiny/utils";
|
|
4
|
+
export class CopyFile {
|
|
12
5
|
constructor(params) {
|
|
13
6
|
const {
|
|
14
7
|
createS3Client,
|
|
@@ -121,14 +114,14 @@ class CopyFile {
|
|
|
121
114
|
});
|
|
122
115
|
} catch (ex) {
|
|
123
116
|
console.error(`Failed to copy metadata for ${key} from ${sourceBucket} to ${targetBucket}.`);
|
|
124
|
-
console.log(
|
|
117
|
+
console.log(convertException(ex));
|
|
125
118
|
}
|
|
126
119
|
}
|
|
127
120
|
parseByteSize(value) {
|
|
128
121
|
if (typeof value === "number") {
|
|
129
122
|
return value;
|
|
130
123
|
}
|
|
131
|
-
const parsed =
|
|
124
|
+
const parsed = bytes.parse(value);
|
|
132
125
|
if (typeof parsed === "number") {
|
|
133
126
|
return parsed;
|
|
134
127
|
}
|
|
@@ -145,7 +138,7 @@ class CopyFile {
|
|
|
145
138
|
Bucket: bucket,
|
|
146
139
|
Key: key
|
|
147
140
|
};
|
|
148
|
-
const command = new
|
|
141
|
+
const command = new HeadObjectCommand(input);
|
|
149
142
|
try {
|
|
150
143
|
const result = await client.send(command);
|
|
151
144
|
if (result.$metadata?.httpStatusCode === 200) {
|
|
@@ -156,7 +149,7 @@ class CopyFile {
|
|
|
156
149
|
return null;
|
|
157
150
|
}
|
|
158
151
|
console.error(`Failed to head object ${key} in bucket ${bucket}.`);
|
|
159
|
-
console.log(
|
|
152
|
+
console.log(convertException(ex));
|
|
160
153
|
}
|
|
161
154
|
return null;
|
|
162
155
|
}
|
|
@@ -169,7 +162,7 @@ class CopyFile {
|
|
|
169
162
|
Bucket: targetBucket,
|
|
170
163
|
Key: targetKey
|
|
171
164
|
};
|
|
172
|
-
const command = new
|
|
165
|
+
const command = new CreateMultipartUploadCommand(input);
|
|
173
166
|
const response = await this.targetClient.send(command);
|
|
174
167
|
if (!response.UploadId) {
|
|
175
168
|
throw new Error("Failed to create multipart upload.");
|
|
@@ -196,7 +189,7 @@ class CopyFile {
|
|
|
196
189
|
CopySource: encodeURIComponent(`${sourceBucket}/${sourceKey}`),
|
|
197
190
|
CopySourceRange: `bytes=${start}-${end}`
|
|
198
191
|
};
|
|
199
|
-
const command = new
|
|
192
|
+
const command = new UploadPartCopyCommand(input);
|
|
200
193
|
const response = await this.targetClient.send(command);
|
|
201
194
|
if (!response.CopyPartResult?.ETag) {
|
|
202
195
|
throw new Error(`UploadPartCopy failed for part ${partNumber}`);
|
|
@@ -224,7 +217,7 @@ class CopyFile {
|
|
|
224
217
|
Parts: sortedParts
|
|
225
218
|
}
|
|
226
219
|
};
|
|
227
|
-
const command = new
|
|
220
|
+
const command = new CompleteMultipartUploadCommand(input);
|
|
228
221
|
return await this.targetClient.send(command);
|
|
229
222
|
}
|
|
230
223
|
async abortMultipartUpload(params) {
|
|
@@ -238,7 +231,7 @@ class CopyFile {
|
|
|
238
231
|
Key: targetKey,
|
|
239
232
|
UploadId: uploadId
|
|
240
233
|
};
|
|
241
|
-
const command = new
|
|
234
|
+
const command = new AbortMultipartUploadCommand(input);
|
|
242
235
|
await this.targetClient.send(command);
|
|
243
236
|
}
|
|
244
237
|
async copyMetadata(params) {
|
|
@@ -274,10 +267,9 @@ class CopyFile {
|
|
|
274
267
|
Key: metadataKey,
|
|
275
268
|
CopySource: encodeURIComponent(`${sourceBucket}/${metadataKey}`)
|
|
276
269
|
};
|
|
277
|
-
const command = new
|
|
270
|
+
const command = new CopyObjectCommand(input);
|
|
278
271
|
return await this.targetClient.send(command);
|
|
279
272
|
}
|
|
280
273
|
}
|
|
281
|
-
exports.CopyFile = CopyFile;
|
|
282
274
|
|
|
283
275
|
//# sourceMappingURL=CopyFile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_index","require","_bytes","_interopRequireDefault","_utils","CopyFile","constructor","params","createS3Client","sourceRegion","targetRegion","maxConcurrency","minPartSize","maxPartSize","sourceClient","region","targetClient","minPartSizeBytes","parseByteSize","maxPartSizeBytes","Error","copy","key","sourceBucket","targetBucket","sourceHead","headObject","client","bucket","ContentLength","ETag","targetHead","totalSize","partSize","Math","max","min","ceil","uploadId","createMultipartUpload","targetKey","completedParts","partNumber","start","promises","active","end","copyPromise","uploadPartCopy","sourceKey","push","Promise","race","all","completeMultipartUpload","ex","abortMultipartUpload","copyMetadata","console","error","log","convertException","value","parsed","bytes","parse","typeOfValue","input","Bucket","Key","command","HeadObjectCommand","result","send","$metadata","httpStatusCode","name","CreateMultipartUploadCommand","response","UploadId","PartNumber","CopySource","encodeURIComponent","CopySourceRange","UploadPartCopyCommand","CopyPartResult","sortedParts","sort","a","b","MultipartUpload","Parts","CompleteMultipartUploadCommand","AbortMultipartUploadCommand","metadataKey","sourceMetadata","targetMetadata","catch","CopyObjectCommand","exports"],"sources":["CopyFile.ts"],"sourcesContent":["import type {\n AbortMultipartUploadCommandInput,\n CompletedPart,\n CompleteMultipartUploadCommandInput,\n CopyObjectCommandInput,\n CopyObjectCommandOutput,\n CreateMultipartUploadCommandInput,\n HeadObjectCommandInput,\n S3Client,\n S3ClientConfig,\n UploadPartCopyCommandInput\n} from \"@webiny/aws-sdk/client-s3/index.js\";\nimport {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n CopyObjectCommand,\n CreateMultipartUploadCommand,\n HeadObjectCommand,\n UploadPartCopyCommand\n} from \"@webiny/aws-sdk/client-s3/index.js\";\nimport bytes from \"bytes\";\nimport { convertException } from \"@webiny/utils\";\n\ntype ByteSize = number | `${number}B` | `${number}KB` | `${number}MB` | `${number}GB`;\n\nexport interface ICopyFileParams {\n createS3Client: (config: Partial<S3ClientConfig>) => Pick<S3Client, \"send\">;\n sourceRegion: string;\n targetRegion: string;\n maxConcurrency?: number;\n minPartSize?: ByteSize;\n maxPartSize?: ByteSize;\n}\n\nexport interface ICopyParams {\n key: string;\n sourceBucket: string;\n targetBucket: string;\n}\n\nexport interface IHeadObjectParams {\n client: Pick<S3Client, \"send\">;\n bucket: string;\n key: string;\n}\n\nexport interface ICreateMultipartUploadParams {\n targetBucket: string;\n targetKey: string;\n}\n\nexport interface IUploadPartCopyParams {\n sourceBucket: string;\n sourceKey: string;\n targetBucket: string;\n targetKey: string;\n uploadId: string;\n partNumber: number;\n start: number;\n end: number;\n completedParts: CompletedPart[];\n}\n\nexport interface ICompleteMultipartUploadParams {\n targetBucket: string;\n targetKey: string;\n uploadId: string;\n completedParts: CompletedPart[];\n}\n\nexport interface IAbortMultipartUploadParams {\n targetBucket: string;\n targetKey: string;\n uploadId: string;\n}\n\ninterface ICopyMetadataParams {\n sourceBucket: string;\n targetBucket: string;\n key: string;\n}\n\nexport class CopyFile {\n private readonly sourceClient: Pick<S3Client, \"send\">;\n private readonly targetClient: Pick<S3Client, \"send\">;\n private readonly maxConcurrency: number;\n private readonly minPartSizeBytes: number;\n private readonly maxPartSizeBytes: number;\n\n public constructor(params: ICopyFileParams) {\n const {\n createS3Client,\n sourceRegion,\n targetRegion,\n maxConcurrency = 100,\n minPartSize = \"5MB\",\n maxPartSize = \"1GB\"\n } = params;\n\n this.sourceClient = createS3Client({\n region: sourceRegion\n });\n this.targetClient = createS3Client({\n region: targetRegion\n });\n this.maxConcurrency = maxConcurrency;\n\n this.minPartSizeBytes = this.parseByteSize(minPartSize);\n this.maxPartSizeBytes = this.parseByteSize(maxPartSize);\n\n if (this.minPartSizeBytes < 5 * 1024 * 1024) {\n throw new Error(\"minPartSize must be at least 5MB.\");\n }\n }\n\n public async copy(params: ICopyParams): Promise<void> {\n const { key, sourceBucket, targetBucket } = params;\n\n const sourceHead = await this.headObject({\n client: this.sourceClient,\n bucket: sourceBucket,\n key\n });\n\n if (!sourceHead?.ContentLength || !sourceHead.ETag) {\n throw new Error(\"Source object metadata is invalid or missing.\");\n }\n /**\n * If the target object already exists, we can skip the copy operation.\n */\n const targetHead = await this.headObject({\n client: this.targetClient,\n bucket: targetBucket,\n key\n });\n\n if (targetHead) {\n return;\n }\n\n const totalSize = sourceHead.ContentLength;\n let partSize = Math.max(\n this.minPartSizeBytes,\n Math.min(this.maxPartSizeBytes, Math.ceil(totalSize / this.maxConcurrency))\n );\n partSize = Math.min(partSize, totalSize);\n\n const uploadId = await this.createMultipartUpload({\n targetBucket,\n targetKey: key\n });\n const completedParts: CompletedPart[] = [];\n\n try {\n let partNumber = 1;\n let start = 0;\n const promises: Promise<void>[] = [];\n let active = 0;\n\n while (start < totalSize) {\n const end = Math.min(start + partSize - 1, totalSize - 1);\n\n const copyPromise = this.uploadPartCopy({\n sourceBucket,\n sourceKey: key,\n targetBucket,\n targetKey: key,\n uploadId,\n partNumber,\n start,\n end,\n completedParts\n });\n\n promises.push(copyPromise);\n active++;\n\n if (active >= this.maxConcurrency) {\n await Promise.race(promises);\n active--;\n }\n\n partNumber++;\n start += partSize;\n }\n\n await Promise.all(promises);\n /**\n * Complete the multipart upload with all the completed parts.\n */\n await this.completeMultipartUpload({\n targetBucket,\n targetKey: key,\n uploadId,\n completedParts\n });\n } catch (ex) {\n await this.abortMultipartUpload({ targetBucket, targetKey: key, uploadId });\n throw ex;\n }\n /**\n * And then copy the metadata file.\n */\n\n try {\n await this.copyMetadata({\n sourceBucket,\n targetBucket,\n key\n });\n } catch (ex) {\n console.error(\n `Failed to copy metadata for ${key} from ${sourceBucket} to ${targetBucket}.`\n );\n console.log(convertException(ex));\n }\n }\n\n private parseByteSize(value: ByteSize): number {\n if (typeof value === \"number\") {\n return value;\n }\n const parsed = bytes.parse(value);\n if (typeof parsed === \"number\") {\n return parsed;\n }\n const typeOfValue = typeof value;\n throw new Error(`Invalid byte size value type \"${typeOfValue}\".`);\n }\n\n private async headObject(params: IHeadObjectParams) {\n const { client, bucket, key } = params;\n const input: HeadObjectCommandInput = {\n Bucket: bucket,\n Key: key\n };\n const command = new HeadObjectCommand(input);\n try {\n const result = await client.send(command);\n if (result.$metadata?.httpStatusCode === 200) {\n return result;\n }\n } catch (ex) {\n if (ex.name === \"NotFound\" || ex.$metadata?.httpStatusCode === 404) {\n return null;\n }\n console.error(`Failed to head object ${key} in bucket ${bucket}.`);\n console.log(convertException(ex));\n }\n return null;\n }\n\n private async createMultipartUpload(params: ICreateMultipartUploadParams): Promise<string> {\n const { targetBucket, targetKey } = params;\n const input: CreateMultipartUploadCommandInput = {\n Bucket: targetBucket,\n Key: targetKey\n };\n const command = new CreateMultipartUploadCommand(input);\n const response = await this.targetClient.send(command);\n if (!response.UploadId) {\n throw new Error(\"Failed to create multipart upload.\");\n }\n return response.UploadId;\n }\n\n private async uploadPartCopy(params: IUploadPartCopyParams): Promise<void> {\n const {\n sourceBucket,\n sourceKey,\n targetBucket,\n targetKey,\n uploadId,\n partNumber,\n start,\n end,\n completedParts\n } = params;\n\n const input: UploadPartCopyCommandInput = {\n Bucket: targetBucket,\n Key: targetKey,\n UploadId: uploadId,\n PartNumber: partNumber,\n CopySource: encodeURIComponent(`${sourceBucket}/${sourceKey}`),\n CopySourceRange: `bytes=${start}-${end}`\n };\n\n const command = new UploadPartCopyCommand(input);\n const response = await this.targetClient.send(command);\n\n if (!response.CopyPartResult?.ETag) {\n throw new Error(`UploadPartCopy failed for part ${partNumber}`);\n }\n\n completedParts.push({\n ETag: response.CopyPartResult.ETag,\n PartNumber: partNumber\n });\n }\n\n private async completeMultipartUpload(params: ICompleteMultipartUploadParams) {\n const { targetBucket, targetKey, uploadId, completedParts } = params;\n\n const sortedParts = [...completedParts].sort((a, b) => {\n return a.PartNumber! - b.PartNumber!;\n });\n\n const input: CompleteMultipartUploadCommandInput = {\n Bucket: targetBucket,\n Key: targetKey,\n UploadId: uploadId,\n MultipartUpload: { Parts: sortedParts }\n };\n\n const command = new CompleteMultipartUploadCommand(input);\n return await this.targetClient.send(command);\n }\n\n private async abortMultipartUpload(params: IAbortMultipartUploadParams) {\n const { targetBucket, targetKey, uploadId } = params;\n\n const input: AbortMultipartUploadCommandInput = {\n Bucket: targetBucket,\n Key: targetKey,\n UploadId: uploadId\n };\n const command = new AbortMultipartUploadCommand(input);\n await this.targetClient.send(command);\n }\n\n private async copyMetadata(\n params: ICopyMetadataParams\n ): Promise<CopyObjectCommandOutput | null> {\n const { sourceBucket, targetBucket, key } = params;\n\n const metadataKey = `${key}.metadata`;\n\n const [sourceMetadata, targetMetadata] = await Promise.all([\n this.headObject({\n client: this.sourceClient,\n bucket: sourceBucket,\n key: metadataKey\n }).catch(() => null),\n this.headObject({\n client: this.targetClient,\n bucket: targetBucket,\n key: metadataKey\n }).catch(() => null)\n ]);\n /**\n * If the source metadata does not exist, we cannot copy it.\n */\n if (!sourceMetadata?.ETag) {\n return null;\n }\n /**\n * If the target metadata already exists, we can skip copying it.\n */\n if (targetMetadata) {\n return null;\n }\n\n const input: CopyObjectCommandInput = {\n Bucket: targetBucket,\n Key: metadataKey,\n CopySource: encodeURIComponent(`${sourceBucket}/${metadataKey}`)\n };\n\n const command = new CopyObjectCommand(input);\n\n return await this.targetClient.send(command);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["AbortMultipartUploadCommand","CompleteMultipartUploadCommand","CopyObjectCommand","CreateMultipartUploadCommand","HeadObjectCommand","UploadPartCopyCommand","bytes","convertException","CopyFile","constructor","params","createS3Client","sourceRegion","targetRegion","maxConcurrency","minPartSize","maxPartSize","sourceClient","region","targetClient","minPartSizeBytes","parseByteSize","maxPartSizeBytes","Error","copy","key","sourceBucket","targetBucket","sourceHead","headObject","client","bucket","ContentLength","ETag","targetHead","totalSize","partSize","Math","max","min","ceil","uploadId","createMultipartUpload","targetKey","completedParts","partNumber","start","promises","active","end","copyPromise","uploadPartCopy","sourceKey","push","Promise","race","all","completeMultipartUpload","ex","abortMultipartUpload","copyMetadata","console","error","log","value","parsed","parse","typeOfValue","input","Bucket","Key","command","result","send","$metadata","httpStatusCode","name","response","UploadId","PartNumber","CopySource","encodeURIComponent","CopySourceRange","CopyPartResult","sortedParts","sort","a","b","MultipartUpload","Parts","metadataKey","sourceMetadata","targetMetadata","catch"],"sources":["CopyFile.ts"],"sourcesContent":["import type {\n AbortMultipartUploadCommandInput,\n CompletedPart,\n CompleteMultipartUploadCommandInput,\n CopyObjectCommandInput,\n CopyObjectCommandOutput,\n CreateMultipartUploadCommandInput,\n HeadObjectCommandInput,\n S3Client,\n S3ClientConfig,\n UploadPartCopyCommandInput\n} from \"@webiny/aws-sdk/client-s3/index.js\";\nimport {\n AbortMultipartUploadCommand,\n CompleteMultipartUploadCommand,\n CopyObjectCommand,\n CreateMultipartUploadCommand,\n HeadObjectCommand,\n UploadPartCopyCommand\n} from \"@webiny/aws-sdk/client-s3/index.js\";\nimport bytes from \"bytes\";\nimport { convertException } from \"@webiny/utils\";\n\ntype ByteSize = number | `${number}B` | `${number}KB` | `${number}MB` | `${number}GB`;\n\nexport interface ICopyFileParams {\n createS3Client: (config: Partial<S3ClientConfig>) => Pick<S3Client, \"send\">;\n sourceRegion: string;\n targetRegion: string;\n maxConcurrency?: number;\n minPartSize?: ByteSize;\n maxPartSize?: ByteSize;\n}\n\nexport interface ICopyParams {\n key: string;\n sourceBucket: string;\n targetBucket: string;\n}\n\nexport interface IHeadObjectParams {\n client: Pick<S3Client, \"send\">;\n bucket: string;\n key: string;\n}\n\nexport interface ICreateMultipartUploadParams {\n targetBucket: string;\n targetKey: string;\n}\n\nexport interface IUploadPartCopyParams {\n sourceBucket: string;\n sourceKey: string;\n targetBucket: string;\n targetKey: string;\n uploadId: string;\n partNumber: number;\n start: number;\n end: number;\n completedParts: CompletedPart[];\n}\n\nexport interface ICompleteMultipartUploadParams {\n targetBucket: string;\n targetKey: string;\n uploadId: string;\n completedParts: CompletedPart[];\n}\n\nexport interface IAbortMultipartUploadParams {\n targetBucket: string;\n targetKey: string;\n uploadId: string;\n}\n\ninterface ICopyMetadataParams {\n sourceBucket: string;\n targetBucket: string;\n key: string;\n}\n\nexport class CopyFile {\n private readonly sourceClient: Pick<S3Client, \"send\">;\n private readonly targetClient: Pick<S3Client, \"send\">;\n private readonly maxConcurrency: number;\n private readonly minPartSizeBytes: number;\n private readonly maxPartSizeBytes: number;\n\n public constructor(params: ICopyFileParams) {\n const {\n createS3Client,\n sourceRegion,\n targetRegion,\n maxConcurrency = 100,\n minPartSize = \"5MB\",\n maxPartSize = \"1GB\"\n } = params;\n\n this.sourceClient = createS3Client({\n region: sourceRegion\n });\n this.targetClient = createS3Client({\n region: targetRegion\n });\n this.maxConcurrency = maxConcurrency;\n\n this.minPartSizeBytes = this.parseByteSize(minPartSize);\n this.maxPartSizeBytes = this.parseByteSize(maxPartSize);\n\n if (this.minPartSizeBytes < 5 * 1024 * 1024) {\n throw new Error(\"minPartSize must be at least 5MB.\");\n }\n }\n\n public async copy(params: ICopyParams): Promise<void> {\n const { key, sourceBucket, targetBucket } = params;\n\n const sourceHead = await this.headObject({\n client: this.sourceClient,\n bucket: sourceBucket,\n key\n });\n\n if (!sourceHead?.ContentLength || !sourceHead.ETag) {\n throw new Error(\"Source object metadata is invalid or missing.\");\n }\n /**\n * If the target object already exists, we can skip the copy operation.\n */\n const targetHead = await this.headObject({\n client: this.targetClient,\n bucket: targetBucket,\n key\n });\n\n if (targetHead) {\n return;\n }\n\n const totalSize = sourceHead.ContentLength;\n let partSize = Math.max(\n this.minPartSizeBytes,\n Math.min(this.maxPartSizeBytes, Math.ceil(totalSize / this.maxConcurrency))\n );\n partSize = Math.min(partSize, totalSize);\n\n const uploadId = await this.createMultipartUpload({\n targetBucket,\n targetKey: key\n });\n const completedParts: CompletedPart[] = [];\n\n try {\n let partNumber = 1;\n let start = 0;\n const promises: Promise<void>[] = [];\n let active = 0;\n\n while (start < totalSize) {\n const end = Math.min(start + partSize - 1, totalSize - 1);\n\n const copyPromise = this.uploadPartCopy({\n sourceBucket,\n sourceKey: key,\n targetBucket,\n targetKey: key,\n uploadId,\n partNumber,\n start,\n end,\n completedParts\n });\n\n promises.push(copyPromise);\n active++;\n\n if (active >= this.maxConcurrency) {\n await Promise.race(promises);\n active--;\n }\n\n partNumber++;\n start += partSize;\n }\n\n await Promise.all(promises);\n /**\n * Complete the multipart upload with all the completed parts.\n */\n await this.completeMultipartUpload({\n targetBucket,\n targetKey: key,\n uploadId,\n completedParts\n });\n } catch (ex) {\n await this.abortMultipartUpload({ targetBucket, targetKey: key, uploadId });\n throw ex;\n }\n /**\n * And then copy the metadata file.\n */\n\n try {\n await this.copyMetadata({\n sourceBucket,\n targetBucket,\n key\n });\n } catch (ex) {\n console.error(\n `Failed to copy metadata for ${key} from ${sourceBucket} to ${targetBucket}.`\n );\n console.log(convertException(ex));\n }\n }\n\n private parseByteSize(value: ByteSize): number {\n if (typeof value === \"number\") {\n return value;\n }\n const parsed = bytes.parse(value);\n if (typeof parsed === \"number\") {\n return parsed;\n }\n const typeOfValue = typeof value;\n throw new Error(`Invalid byte size value type \"${typeOfValue}\".`);\n }\n\n private async headObject(params: IHeadObjectParams) {\n const { client, bucket, key } = params;\n const input: HeadObjectCommandInput = {\n Bucket: bucket,\n Key: key\n };\n const command = new HeadObjectCommand(input);\n try {\n const result = await client.send(command);\n if (result.$metadata?.httpStatusCode === 200) {\n return result;\n }\n } catch (ex) {\n if (ex.name === \"NotFound\" || ex.$metadata?.httpStatusCode === 404) {\n return null;\n }\n console.error(`Failed to head object ${key} in bucket ${bucket}.`);\n console.log(convertException(ex));\n }\n return null;\n }\n\n private async createMultipartUpload(params: ICreateMultipartUploadParams): Promise<string> {\n const { targetBucket, targetKey } = params;\n const input: CreateMultipartUploadCommandInput = {\n Bucket: targetBucket,\n Key: targetKey\n };\n const command = new CreateMultipartUploadCommand(input);\n const response = await this.targetClient.send(command);\n if (!response.UploadId) {\n throw new Error(\"Failed to create multipart upload.\");\n }\n return response.UploadId;\n }\n\n private async uploadPartCopy(params: IUploadPartCopyParams): Promise<void> {\n const {\n sourceBucket,\n sourceKey,\n targetBucket,\n targetKey,\n uploadId,\n partNumber,\n start,\n end,\n completedParts\n } = params;\n\n const input: UploadPartCopyCommandInput = {\n Bucket: targetBucket,\n Key: targetKey,\n UploadId: uploadId,\n PartNumber: partNumber,\n CopySource: encodeURIComponent(`${sourceBucket}/${sourceKey}`),\n CopySourceRange: `bytes=${start}-${end}`\n };\n\n const command = new UploadPartCopyCommand(input);\n const response = await this.targetClient.send(command);\n\n if (!response.CopyPartResult?.ETag) {\n throw new Error(`UploadPartCopy failed for part ${partNumber}`);\n }\n\n completedParts.push({\n ETag: response.CopyPartResult.ETag,\n PartNumber: partNumber\n });\n }\n\n private async completeMultipartUpload(params: ICompleteMultipartUploadParams) {\n const { targetBucket, targetKey, uploadId, completedParts } = params;\n\n const sortedParts = [...completedParts].sort((a, b) => {\n return a.PartNumber! - b.PartNumber!;\n });\n\n const input: CompleteMultipartUploadCommandInput = {\n Bucket: targetBucket,\n Key: targetKey,\n UploadId: uploadId,\n MultipartUpload: { Parts: sortedParts }\n };\n\n const command = new CompleteMultipartUploadCommand(input);\n return await this.targetClient.send(command);\n }\n\n private async abortMultipartUpload(params: IAbortMultipartUploadParams) {\n const { targetBucket, targetKey, uploadId } = params;\n\n const input: AbortMultipartUploadCommandInput = {\n Bucket: targetBucket,\n Key: targetKey,\n UploadId: uploadId\n };\n const command = new AbortMultipartUploadCommand(input);\n await this.targetClient.send(command);\n }\n\n private async copyMetadata(\n params: ICopyMetadataParams\n ): Promise<CopyObjectCommandOutput | null> {\n const { sourceBucket, targetBucket, key } = params;\n\n const metadataKey = `${key}.metadata`;\n\n const [sourceMetadata, targetMetadata] = await Promise.all([\n this.headObject({\n client: this.sourceClient,\n bucket: sourceBucket,\n key: metadataKey\n }).catch(() => null),\n this.headObject({\n client: this.targetClient,\n bucket: targetBucket,\n key: metadataKey\n }).catch(() => null)\n ]);\n /**\n * If the source metadata does not exist, we cannot copy it.\n */\n if (!sourceMetadata?.ETag) {\n return null;\n }\n /**\n * If the target metadata already exists, we can skip copying it.\n */\n if (targetMetadata) {\n return null;\n }\n\n const input: CopyObjectCommandInput = {\n Bucket: targetBucket,\n Key: metadataKey,\n CopySource: encodeURIComponent(`${sourceBucket}/${metadataKey}`)\n };\n\n const command = new CopyObjectCommand(input);\n\n return await this.targetClient.send(command);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,4 +3,4 @@ import type { ICopyFileActionEvent } from "./types.js";
|
|
|
3
3
|
export interface ICreateCopyFileActionParams {
|
|
4
4
|
createS3Client: (config: Partial<S3ClientConfig>) => Pick<S3Client, "send">;
|
|
5
5
|
}
|
|
6
|
-
export declare const createCopyFileAction: ({ createS3Client }: ICreateCopyFileActionParams) => import("
|
|
6
|
+
export declare const createCopyFileAction: ({ createS3Client }: ICreateCopyFileActionParams) => import("~/worker/plugins/WorkerActionPlugin.js").WorkerActionPlugin<ICopyFileActionEvent>;
|