@webiny/api-sync-system 6.3.0 → 6.4.0-beta.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.
Files changed (239) hide show
  1. package/constants.js +2 -1
  2. package/constants.js.map +1 -1
  3. package/index.js +0 -2
  4. package/package.json +14 -14
  5. package/resolver/app/RecordHandler.js +83 -105
  6. package/resolver/app/RecordHandler.js.map +1 -1
  7. package/resolver/app/RecordsValidation.js +11 -14
  8. package/resolver/app/RecordsValidation.js.map +1 -1
  9. package/resolver/app/ResolverApplication.js +24 -31
  10. package/resolver/app/ResolverApplication.js.map +1 -1
  11. package/resolver/app/abstractions/RecordHandler.js +0 -3
  12. package/resolver/app/abstractions/RecordsValidation.js +0 -3
  13. package/resolver/app/abstractions/ResolverApplication.js +0 -3
  14. package/resolver/app/abstractions/ResolverRecord.js +0 -3
  15. package/resolver/app/bundler/BaseBundle.js +17 -16
  16. package/resolver/app/bundler/BaseBundle.js.map +1 -1
  17. package/resolver/app/bundler/Bundler.js +13 -18
  18. package/resolver/app/bundler/Bundler.js.map +1 -1
  19. package/resolver/app/bundler/Bundles.js +21 -26
  20. package/resolver/app/bundler/Bundles.js.map +1 -1
  21. package/resolver/app/bundler/CommandBundle.js +7 -16
  22. package/resolver/app/bundler/CommandBundle.js.map +1 -1
  23. package/resolver/app/bundler/TableBundle.js +6 -13
  24. package/resolver/app/bundler/TableBundle.js.map +1 -1
  25. package/resolver/app/bundler/types.js +0 -3
  26. package/resolver/app/commandHandler/DeleteCommandHandler.js +22 -29
  27. package/resolver/app/commandHandler/DeleteCommandHandler.js.map +1 -1
  28. package/resolver/app/commandHandler/PutCommandHandler.js +16 -22
  29. package/resolver/app/commandHandler/PutCommandHandler.js.map +1 -1
  30. package/resolver/app/commandHandler/delete.js +11 -12
  31. package/resolver/app/commandHandler/delete.js.map +1 -1
  32. package/resolver/app/commandHandler/put.js +11 -12
  33. package/resolver/app/commandHandler/put.js.map +1 -1
  34. package/resolver/app/data/SourceDataContainer.js +28 -30
  35. package/resolver/app/data/SourceDataContainer.js.map +1 -1
  36. package/resolver/app/data/types.js +0 -3
  37. package/resolver/app/fetcher/Fetcher.js +84 -109
  38. package/resolver/app/fetcher/Fetcher.js.map +1 -1
  39. package/resolver/app/fetcher/types.js +0 -3
  40. package/resolver/app/ingestor/Ingestor.js +27 -32
  41. package/resolver/app/ingestor/Ingestor.js.map +1 -1
  42. package/resolver/app/ingestor/IngestorResult.js +28 -32
  43. package/resolver/app/ingestor/IngestorResult.js.map +1 -1
  44. package/resolver/app/ingestor/types.js +0 -3
  45. package/resolver/app/storer/Storer.js +71 -85
  46. package/resolver/app/storer/Storer.js.map +1 -1
  47. package/resolver/app/storer/types.js +0 -3
  48. package/resolver/app/transform/TransformHandler.js +45 -56
  49. package/resolver/app/transform/TransformHandler.js.map +1 -1
  50. package/resolver/app/transform/middleware.js +13 -20
  51. package/resolver/app/transform/middleware.js.map +1 -1
  52. package/resolver/app/utils/Retry.js +21 -24
  53. package/resolver/app/utils/Retry.js.map +1 -1
  54. package/resolver/app/utils/sleep.js +4 -5
  55. package/resolver/app/utils/sleep.js.map +1 -1
  56. package/resolver/app/validation/body.js +26 -31
  57. package/resolver/app/validation/body.js.map +1 -1
  58. package/resolver/app/validation/createJsonTransform.js +12 -13
  59. package/resolver/app/validation/createJsonTransform.js.map +1 -1
  60. package/resolver/app/validation/detail.js +30 -35
  61. package/resolver/app/validation/detail.js.map +1 -1
  62. package/resolver/app/validation/event.js +17 -18
  63. package/resolver/app/validation/event.js.map +1 -1
  64. package/resolver/app/validation/numericString.js +8 -11
  65. package/resolver/app/validation/numericString.js.map +1 -1
  66. package/resolver/app/validation/system.js +8 -9
  67. package/resolver/app/validation/system.js.map +1 -1
  68. package/resolver/createEventHandlerPlugin.js +70 -99
  69. package/resolver/createEventHandlerPlugin.js.map +1 -1
  70. package/resolver/createResolverHandler.js +49 -57
  71. package/resolver/createResolverHandler.js.map +1 -1
  72. package/resolver/deployment/Deployment.js +28 -31
  73. package/resolver/deployment/Deployment.js.map +1 -1
  74. package/resolver/deployment/Deployments.js +20 -23
  75. package/resolver/deployment/Deployments.js.map +1 -1
  76. package/resolver/deployment/DeploymentsFetcher.js +75 -84
  77. package/resolver/deployment/DeploymentsFetcher.js.map +1 -1
  78. package/resolver/deployment/types.js +0 -3
  79. package/resolver/lambda/LambdaTrigger.js +24 -26
  80. package/resolver/lambda/LambdaTrigger.js.map +1 -1
  81. package/resolver/plugins/CommandHandlerPlugin.js +16 -15
  82. package/resolver/plugins/CommandHandlerPlugin.js.map +1 -1
  83. package/resolver/plugins/StorerAfterEachPlugin.js +20 -19
  84. package/resolver/plugins/StorerAfterEachPlugin.js.map +1 -1
  85. package/resolver/plugins/TransformRecordPlugin.js +19 -18
  86. package/resolver/plugins/TransformRecordPlugin.js.map +1 -1
  87. package/resolver/recordTypes/fileManager/CopyFile.js +44 -67
  88. package/resolver/recordTypes/fileManager/CopyFile.js.map +1 -1
  89. package/resolver/recordTypes/fileManager/DeleteFile.js +40 -58
  90. package/resolver/recordTypes/fileManager/DeleteFile.js.map +1 -1
  91. package/resolver/recordTypes/fileManager/fileManager.js +5 -3
  92. package/resolver/recordTypes/fileManager/fileManager.js.map +1 -1
  93. package/resolver/recordTypes/fileManager/fileManagerOnDelete.js +24 -35
  94. package/resolver/recordTypes/fileManager/fileManagerOnDelete.js.map +1 -1
  95. package/resolver/recordTypes/fileManager/fileManagerOnPut.js +24 -35
  96. package/resolver/recordTypes/fileManager/fileManagerOnPut.js.map +1 -1
  97. package/resolver/recordTypes/fileManager/shouldBeHandled.js +10 -27
  98. package/resolver/recordTypes/fileManager/shouldBeHandled.js.map +1 -1
  99. package/resolver/recordTypes/fileManager/types.js +0 -3
  100. package/resolver/recordTypes/users/CopyUser.js +44 -54
  101. package/resolver/recordTypes/users/CopyUser.js.map +1 -1
  102. package/resolver/recordTypes/users/DeleteUser.js +40 -51
  103. package/resolver/recordTypes/users/DeleteUser.js.map +1 -1
  104. package/resolver/recordTypes/users/shouldBeHandled.js +10 -26
  105. package/resolver/recordTypes/users/shouldBeHandled.js.map +1 -1
  106. package/resolver/recordTypes/users/types.js +0 -3
  107. package/resolver/recordTypes/users/users.js +5 -3
  108. package/resolver/recordTypes/users/users.js.map +1 -1
  109. package/resolver/recordTypes/users/usersOnDelete.js +23 -34
  110. package/resolver/recordTypes/users/usersOnDelete.js.map +1 -1
  111. package/resolver/recordTypes/users/usersOnPut.js +24 -35
  112. package/resolver/recordTypes/users/usersOnPut.js.map +1 -1
  113. package/sync/FilterOutRecord.js +9 -17
  114. package/sync/FilterOutRecord.js.map +1 -1
  115. package/sync/attachToDynamoDbDocument.js +46 -65
  116. package/sync/attachToDynamoDbDocument.js.map +1 -1
  117. package/sync/createHandler.js +31 -40
  118. package/sync/createHandler.js.map +1 -1
  119. package/sync/createSendDataToEventBridgeOnRequestEnd.js +32 -37
  120. package/sync/createSendDataToEventBridgeOnRequestEnd.js.map +1 -1
  121. package/sync/createSyncSystem.js +24 -26
  122. package/sync/createSyncSystem.js.map +1 -1
  123. package/sync/filter/createDefaultFilterOutRecordPlugins.js +37 -76
  124. package/sync/filter/createDefaultFilterOutRecordPlugins.js.map +1 -1
  125. package/sync/handler/Handler.js +64 -76
  126. package/sync/handler/Handler.js.map +1 -1
  127. package/sync/handler/HandlerConverter.js +21 -29
  128. package/sync/handler/HandlerConverter.js.map +1 -1
  129. package/sync/handler/converter/BatchGetCommandConverter.js +12 -11
  130. package/sync/handler/converter/BatchGetCommandConverter.js.map +1 -1
  131. package/sync/handler/converter/BatchWriteCommandConverter.js +12 -11
  132. package/sync/handler/converter/BatchWriteCommandConverter.js.map +1 -1
  133. package/sync/handler/converter/DeleteCommandConverter.js +12 -11
  134. package/sync/handler/converter/DeleteCommandConverter.js.map +1 -1
  135. package/sync/handler/converter/GetCommandConverter.js +12 -11
  136. package/sync/handler/converter/GetCommandConverter.js.map +1 -1
  137. package/sync/handler/converter/PutCommandConverter.js +12 -11
  138. package/sync/handler/converter/PutCommandConverter.js.map +1 -1
  139. package/sync/handler/converter/QueryCommandConverter.js +12 -11
  140. package/sync/handler/converter/QueryCommandConverter.js.map +1 -1
  141. package/sync/handler/converter/ScanCommandConverter.js +12 -11
  142. package/sync/handler/converter/ScanCommandConverter.js.map +1 -1
  143. package/sync/handler/converter/UpdateCommandConverter.js +12 -11
  144. package/sync/handler/converter/UpdateCommandConverter.js.map +1 -1
  145. package/sync/handler/converter/commands/BatchWriteCommandValue.js +34 -37
  146. package/sync/handler/converter/commands/BatchWriteCommandValue.js.map +1 -1
  147. package/sync/handler/converter/commands/DeleteCommandValue.js +19 -16
  148. package/sync/handler/converter/commands/DeleteCommandValue.js.map +1 -1
  149. package/sync/handler/converter/commands/NullCommandValue.js +8 -8
  150. package/sync/handler/converter/commands/NullCommandValue.js.map +1 -1
  151. package/sync/handler/converter/commands/PutCommandValue.js +19 -16
  152. package/sync/handler/converter/commands/PutCommandValue.js.map +1 -1
  153. package/sync/handler/converter/commands/UpdateCommandValue.js +19 -16
  154. package/sync/handler/converter/commands/UpdateCommandValue.js.map +1 -1
  155. package/sync/handler/types.js +0 -3
  156. package/sync/plugins/FilterOutRecordPlugin.js +17 -19
  157. package/sync/plugins/FilterOutRecordPlugin.js.map +1 -1
  158. package/sync/requestPlugin.js +33 -48
  159. package/sync/requestPlugin.js.map +1 -1
  160. package/sync/types.js +0 -3
  161. package/sync/utils/getTableType.js +10 -9
  162. package/sync/utils/getTableType.js.map +1 -1
  163. package/sync/utils/manifest.js +28 -35
  164. package/sync/utils/manifest.js.map +1 -1
  165. package/sync/utils/validateSystemInput.js +21 -29
  166. package/sync/utils/validateSystemInput.js.map +1 -1
  167. package/types.js +6 -5
  168. package/types.js.map +1 -1
  169. package/utils/createSystemName.js +5 -3
  170. package/utils/createSystemName.js.map +1 -1
  171. package/worker/actions/copyFile/CopyFile.js +183 -258
  172. package/worker/actions/copyFile/CopyFile.js.map +1 -1
  173. package/worker/actions/copyFile/copyFileAction.js +26 -34
  174. package/worker/actions/copyFile/copyFileAction.js.map +1 -1
  175. package/worker/actions/copyFile/copyFileSchema.js +13 -14
  176. package/worker/actions/copyFile/copyFileSchema.js.map +1 -1
  177. package/worker/actions/copyFile/types.js +0 -3
  178. package/worker/actions/createUser/CreateUser.js +51 -74
  179. package/worker/actions/createUser/CreateUser.js.map +1 -1
  180. package/worker/actions/createUser/createUserAction.js +24 -28
  181. package/worker/actions/createUser/createUserAction.js.map +1 -1
  182. package/worker/actions/createUser/createUserSchema.js +13 -14
  183. package/worker/actions/createUser/createUserSchema.js.map +1 -1
  184. package/worker/actions/createUser/types.js +0 -3
  185. package/worker/actions/deleteFile/DeleteFile.js +52 -67
  186. package/worker/actions/deleteFile/DeleteFile.js.map +1 -1
  187. package/worker/actions/deleteFile/deleteFileAction.js +21 -29
  188. package/worker/actions/deleteFile/deleteFileAction.js.map +1 -1
  189. package/worker/actions/deleteFile/deleteFileSchema.js +13 -14
  190. package/worker/actions/deleteFile/deleteFileSchema.js.map +1 -1
  191. package/worker/actions/deleteFile/types.js +0 -3
  192. package/worker/actions/deleteUser/DeleteUser.js +38 -52
  193. package/worker/actions/deleteUser/DeleteUser.js.map +1 -1
  194. package/worker/actions/deleteUser/deleteUserAction.js +22 -26
  195. package/worker/actions/deleteUser/deleteUserAction.js.map +1 -1
  196. package/worker/actions/deleteUser/deleteUserSchema.js +12 -13
  197. package/worker/actions/deleteUser/deleteUserSchema.js.map +1 -1
  198. package/worker/actions/deleteUser/types.js +0 -3
  199. package/worker/actions/logValidationError.js +5 -6
  200. package/worker/actions/logValidationError.js.map +1 -1
  201. package/worker/actions/removeCognitoUserAttributes.js +9 -15
  202. package/worker/actions/removeCognitoUserAttributes.js.map +1 -1
  203. package/worker/actions/updateUser/UpdateUser.js +48 -65
  204. package/worker/actions/updateUser/UpdateUser.js.map +1 -1
  205. package/worker/actions/updateUser/types.js +0 -3
  206. package/worker/actions/updateUser/updateUserAction.js +24 -28
  207. package/worker/actions/updateUser/updateUserAction.js.map +1 -1
  208. package/worker/actions/updateUser/updateUserSchema.js +13 -14
  209. package/worker/actions/updateUser/updateUserSchema.js.map +1 -1
  210. package/worker/createWorkerHandler.js +24 -30
  211. package/worker/createWorkerHandler.js.map +1 -1
  212. package/worker/handler/WorkerActionHandler.js +19 -21
  213. package/worker/handler/WorkerActionHandler.js.map +1 -1
  214. package/worker/handler/eventHandler.js +14 -16
  215. package/worker/handler/eventHandler.js.map +1 -1
  216. package/worker/plugins/WorkerActionPlugin.js +17 -16
  217. package/worker/plugins/WorkerActionPlugin.js.map +1 -1
  218. package/worker/types.js +0 -3
  219. package/index.js.map +0 -1
  220. package/resolver/app/abstractions/RecordHandler.js.map +0 -1
  221. package/resolver/app/abstractions/RecordsValidation.js.map +0 -1
  222. package/resolver/app/abstractions/ResolverApplication.js.map +0 -1
  223. package/resolver/app/abstractions/ResolverRecord.js.map +0 -1
  224. package/resolver/app/bundler/types.js.map +0 -1
  225. package/resolver/app/data/types.js.map +0 -1
  226. package/resolver/app/fetcher/types.js.map +0 -1
  227. package/resolver/app/ingestor/types.js.map +0 -1
  228. package/resolver/app/storer/types.js.map +0 -1
  229. package/resolver/deployment/types.js.map +0 -1
  230. package/resolver/recordTypes/fileManager/types.js.map +0 -1
  231. package/resolver/recordTypes/users/types.js.map +0 -1
  232. package/sync/handler/types.js.map +0 -1
  233. package/sync/types.js.map +0 -1
  234. package/worker/actions/copyFile/types.js.map +0 -1
  235. package/worker/actions/createUser/types.js.map +0 -1
  236. package/worker/actions/deleteFile/types.js.map +0 -1
  237. package/worker/actions/deleteUser/types.js.map +0 -1
  238. package/worker/actions/updateUser/types.js.map +0 -1
  239. package/worker/types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["HeadObjectCommand","CopyFile","constructor","params","createS3Client","getLambdaTrigger","handle","key","source","target","targetClient","region","exists","client","bucket","services","s3Id","invocationType","payload","action","input","Bucket","Key","cmd","result","send","$metadata","httpStatusCode","ETag"],"sources":["CopyFile.ts"],"sourcesContent":["import type { HeadObjectCommandInput, S3Client } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { HeadObjectCommand } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type {\n ICopyFile,\n ICopyFileHandleParams,\n ICreateS3ClientCb,\n IGetLambdaTriggerCb\n} from \"./types.js\";\nimport type { InvokeCommandOutput } from \"@webiny/aws-sdk/client-lambda/index.js\";\nimport type { ICopyFileLambdaPayload } from \"~/types.js\";\n\ninterface IExistsParams {\n client: Pick<S3Client, \"send\">;\n bucket: string;\n key: string;\n}\n\nexport interface ICopyFileParams {\n createS3Client: ICreateS3ClientCb;\n getLambdaTrigger: IGetLambdaTriggerCb<ICopyFileLambdaPayload>;\n}\n\nexport class CopyFile implements ICopyFile {\n private readonly createS3Client: ICreateS3ClientCb;\n private readonly getLambdaTrigger: IGetLambdaTriggerCb<ICopyFileLambdaPayload>;\n\n public constructor(params: ICopyFileParams) {\n this.createS3Client = params.createS3Client;\n this.getLambdaTrigger = params.getLambdaTrigger;\n }\n\n public async handle(params: ICopyFileHandleParams): Promise<InvokeCommandOutput | null> {\n const { key, source, target } = params;\n /**\n * We need to check on the target if the file already exists.\n */\n const targetClient = this.createS3Client({\n region: target.region\n });\n\n const exists = await this.exists({\n client: targetClient,\n bucket: target.services.s3Id,\n key\n });\n\n if (exists) {\n // If the file already exists, we can skip copying it.\n return null;\n }\n\n /**\n * Then we can safely trigger a Lambda function that will copy the file.\n */\n\n return await this.getLambdaTrigger().handle({\n invocationType: \"Event\",\n payload: {\n action: \"copyFile\",\n key,\n source: {\n region: source.region,\n bucket: source.services.s3Id\n },\n target: {\n region: target.region,\n bucket: target.services.s3Id\n }\n }\n });\n }\n\n private async exists(params: IExistsParams): Promise<boolean> {\n const { client, bucket, key } = params;\n const input: HeadObjectCommandInput = {\n Bucket: bucket,\n Key: key\n };\n const cmd = new HeadObjectCommand(input);\n try {\n const result = await client.send(cmd);\n return result.$metadata?.httpStatusCode === 200 && !!result.ETag;\n } catch {\n /**\n * TODO What happens if this fails? To we continue with the copy or end the process?\n * Do we log the error?\n * For now, we will assume that file does not exist.\n */\n return false;\n }\n }\n}\n"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,oCAAoC;AAqBtE,OAAO,MAAMC,QAAQ,CAAsB;EAIhCC,WAAWA,CAACC,MAAuB,EAAE;IACxC,IAAI,CAACC,cAAc,GAAGD,MAAM,CAACC,cAAc;IAC3C,IAAI,CAACC,gBAAgB,GAAGF,MAAM,CAACE,gBAAgB;EACnD;EAEA,MAAaC,MAAMA,CAACH,MAA6B,EAAuC;IACpF,MAAM;MAAEI,GAAG;MAAEC,MAAM;MAAEC;IAAO,CAAC,GAAGN,MAAM;IACtC;AACR;AACA;IACQ,MAAMO,YAAY,GAAG,IAAI,CAACN,cAAc,CAAC;MACrCO,MAAM,EAAEF,MAAM,CAACE;IACnB,CAAC,CAAC;IAEF,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACA,MAAM,CAAC;MAC7BC,MAAM,EAAEH,YAAY;MACpBI,MAAM,EAAEL,MAAM,CAACM,QAAQ,CAACC,IAAI;MAC5BT;IACJ,CAAC,CAAC;IAEF,IAAIK,MAAM,EAAE;MACR;MACA,OAAO,IAAI;IACf;;IAEA;AACR;AACA;;IAEQ,OAAO,MAAM,IAAI,CAACP,gBAAgB,CAAC,CAAC,CAACC,MAAM,CAAC;MACxCW,cAAc,EAAE,OAAO;MACvBC,OAAO,EAAE;QACLC,MAAM,EAAE,UAAU;QAClBZ,GAAG;QACHC,MAAM,EAAE;UACJG,MAAM,EAAEH,MAAM,CAACG,MAAM;UACrBG,MAAM,EAAEN,MAAM,CAACO,QAAQ,CAACC;QAC5B,CAAC;QACDP,MAAM,EAAE;UACJE,MAAM,EAAEF,MAAM,CAACE,MAAM;UACrBG,MAAM,EAAEL,MAAM,CAACM,QAAQ,CAACC;QAC5B;MACJ;IACJ,CAAC,CAAC;EACN;EAEA,MAAcJ,MAAMA,CAACT,MAAqB,EAAoB;IAC1D,MAAM;MAAEU,MAAM;MAAEC,MAAM;MAAEP;IAAI,CAAC,GAAGJ,MAAM;IACtC,MAAMiB,KAA6B,GAAG;MAClCC,MAAM,EAAEP,MAAM;MACdQ,GAAG,EAAEf;IACT,CAAC;IACD,MAAMgB,GAAG,GAAG,IAAIvB,iBAAiB,CAACoB,KAAK,CAAC;IACxC,IAAI;MACA,MAAMI,MAAM,GAAG,MAAMX,MAAM,CAACY,IAAI,CAACF,GAAG,CAAC;MACrC,OAAOC,MAAM,CAACE,SAAS,EAAEC,cAAc,KAAK,GAAG,IAAI,CAAC,CAACH,MAAM,CAACI,IAAI;IACpE,CAAC,CAAC,MAAM;MACJ;AACZ;AACA;AACA;AACA;MACY,OAAO,KAAK;IAChB;EACJ;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"resolver/recordTypes/fileManager/CopyFile.js","sources":["../../../../src/resolver/recordTypes/fileManager/CopyFile.ts"],"sourcesContent":["import type { HeadObjectCommandInput, S3Client } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { HeadObjectCommand } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type {\n ICopyFile,\n ICopyFileHandleParams,\n ICreateS3ClientCb,\n IGetLambdaTriggerCb\n} from \"./types.js\";\nimport type { InvokeCommandOutput } from \"@webiny/aws-sdk/client-lambda/index.js\";\nimport type { ICopyFileLambdaPayload } from \"~/types.js\";\n\ninterface IExistsParams {\n client: Pick<S3Client, \"send\">;\n bucket: string;\n key: string;\n}\n\nexport interface ICopyFileParams {\n createS3Client: ICreateS3ClientCb;\n getLambdaTrigger: IGetLambdaTriggerCb<ICopyFileLambdaPayload>;\n}\n\nexport class CopyFile implements ICopyFile {\n private readonly createS3Client: ICreateS3ClientCb;\n private readonly getLambdaTrigger: IGetLambdaTriggerCb<ICopyFileLambdaPayload>;\n\n public constructor(params: ICopyFileParams) {\n this.createS3Client = params.createS3Client;\n this.getLambdaTrigger = params.getLambdaTrigger;\n }\n\n public async handle(params: ICopyFileHandleParams): Promise<InvokeCommandOutput | null> {\n const { key, source, target } = params;\n /**\n * We need to check on the target if the file already exists.\n */\n const targetClient = this.createS3Client({\n region: target.region\n });\n\n const exists = await this.exists({\n client: targetClient,\n bucket: target.services.s3Id,\n key\n });\n\n if (exists) {\n // If the file already exists, we can skip copying it.\n return null;\n }\n\n /**\n * Then we can safely trigger a Lambda function that will copy the file.\n */\n\n return await this.getLambdaTrigger().handle({\n invocationType: \"Event\",\n payload: {\n action: \"copyFile\",\n key,\n source: {\n region: source.region,\n bucket: source.services.s3Id\n },\n target: {\n region: target.region,\n bucket: target.services.s3Id\n }\n }\n });\n }\n\n private async exists(params: IExistsParams): Promise<boolean> {\n const { client, bucket, key } = params;\n const input: HeadObjectCommandInput = {\n Bucket: bucket,\n Key: key\n };\n const cmd = new HeadObjectCommand(input);\n try {\n const result = await client.send(cmd);\n return result.$metadata?.httpStatusCode === 200 && !!result.ETag;\n } catch {\n /**\n * TODO What happens if this fails? To we continue with the copy or end the process?\n * Do we log the error?\n * For now, we will assume that file does not exist.\n */\n return false;\n }\n }\n}\n"],"names":["CopyFile","params","key","source","target","targetClient","exists","client","bucket","input","cmd","HeadObjectCommand","result"],"mappings":";AAsBO,MAAMA;IAIT,YAAmBC,MAAuB,CAAE;QACxC,IAAI,CAAC,cAAc,GAAGA,OAAO,cAAc;QAC3C,IAAI,CAAC,gBAAgB,GAAGA,OAAO,gBAAgB;IACnD;IAEA,MAAa,OAAOA,MAA6B,EAAuC;QACpF,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAEC,MAAM,EAAE,GAAGH;QAIhC,MAAMI,eAAe,IAAI,CAAC,cAAc,CAAC;YACrC,QAAQD,OAAO,MAAM;QACzB;QAEA,MAAME,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC;YAC7B,QAAQD;YACR,QAAQD,OAAO,QAAQ,CAAC,IAAI;YAC5BF;QACJ;QAEA,IAAII,QAEA,OAAO;QAOX,OAAO,MAAM,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;YACxC,gBAAgB;YAChB,SAAS;gBACL,QAAQ;gBACRJ;gBACA,QAAQ;oBACJ,QAAQC,OAAO,MAAM;oBACrB,QAAQA,OAAO,QAAQ,CAAC,IAAI;gBAChC;gBACA,QAAQ;oBACJ,QAAQC,OAAO,MAAM;oBACrB,QAAQA,OAAO,QAAQ,CAAC,IAAI;gBAChC;YACJ;QACJ;IACJ;IAEA,MAAc,OAAOH,MAAqB,EAAoB;QAC1D,MAAM,EAAEM,MAAM,EAAEC,MAAM,EAAEN,GAAG,EAAE,GAAGD;QAChC,MAAMQ,QAAgC;YAClC,QAAQD;YACR,KAAKN;QACT;QACA,MAAMQ,MAAM,IAAIC,kBAAkBF;QAClC,IAAI;YACA,MAAMG,SAAS,MAAML,OAAO,IAAI,CAACG;YACjC,OAAOE,OAAO,SAAS,EAAE,mBAAmB,OAAO,CAAC,CAACA,OAAO,IAAI;QACpE,EAAE,OAAM;YAMJ,OAAO;QACX;IACJ;AACJ"}
@@ -1,65 +1,47 @@
1
1
  import { HeadObjectCommand } from "@webiny/aws-sdk/client-s3/index.js";
2
- export class DeleteFile {
3
- constructor(params) {
4
- this.createS3Client = params.createS3Client;
5
- this.getLambdaTrigger = params.getLambdaTrigger;
6
- }
7
- async handle(params) {
8
- const {
9
- key,
10
- target
11
- } = params;
12
-
13
- /**
14
- * We need to check on the target if the file already exists.
15
- */
16
-
17
- const targetClient = this.createS3Client({
18
- region: target.region
19
- });
20
- const exists = await this.exists({
21
- client: targetClient,
22
- bucket: target.services.s3Id,
23
- key
24
- });
25
- if (!exists) {
26
- // If the file does not exist, we can skip the deletion.
27
- return null;
2
+ class DeleteFile {
3
+ constructor(params){
4
+ this.createS3Client = params.createS3Client;
5
+ this.getLambdaTrigger = params.getLambdaTrigger;
28
6
  }
29
-
30
- /**
31
- * Then we can safely trigger a Lambda function that will delete the file.
32
- */
33
- return await this.getLambdaTrigger().handle({
34
- invocationType: "Event",
35
- payload: {
36
- action: "deleteFile",
37
- key,
38
- target: {
39
- region: target.region,
40
- bucket: target.services.s3Id
7
+ async handle(params) {
8
+ const { key, target } = params;
9
+ const targetClient = this.createS3Client({
10
+ region: target.region
11
+ });
12
+ const exists = await this.exists({
13
+ client: targetClient,
14
+ bucket: target.services.s3Id,
15
+ key
16
+ });
17
+ if (!exists) return null;
18
+ return await this.getLambdaTrigger().handle({
19
+ invocationType: "Event",
20
+ payload: {
21
+ action: "deleteFile",
22
+ key,
23
+ target: {
24
+ region: target.region,
25
+ bucket: target.services.s3Id
26
+ }
27
+ }
28
+ });
29
+ }
30
+ async exists(params) {
31
+ const { client, bucket, key } = params;
32
+ const input = {
33
+ Bucket: bucket,
34
+ Key: key
35
+ };
36
+ const cmd = new HeadObjectCommand(input);
37
+ try {
38
+ const result = await client.send(cmd);
39
+ return result.$metadata?.httpStatusCode === 200;
40
+ } catch {
41
+ return false;
41
42
  }
42
- }
43
- });
44
- }
45
- async exists(params) {
46
- const {
47
- client,
48
- bucket,
49
- key
50
- } = params;
51
- const input = {
52
- Bucket: bucket,
53
- Key: key
54
- };
55
- const cmd = new HeadObjectCommand(input);
56
- try {
57
- const result = await client.send(cmd);
58
- return result.$metadata?.httpStatusCode === 200;
59
- } catch {
60
- return false;
61
43
  }
62
- }
63
44
  }
45
+ export { DeleteFile };
64
46
 
65
47
  //# sourceMappingURL=DeleteFile.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["HeadObjectCommand","DeleteFile","constructor","params","createS3Client","getLambdaTrigger","handle","key","target","targetClient","region","exists","client","bucket","services","s3Id","invocationType","payload","action","input","Bucket","Key","cmd","result","send","$metadata","httpStatusCode"],"sources":["DeleteFile.ts"],"sourcesContent":["import type {\n ICreateS3ClientCb,\n IDeleteFile,\n IDeleteFileHandleParams,\n IGetLambdaTriggerCb\n} from \"~/resolver/recordTypes/fileManager/types.js\";\nimport type { HeadObjectCommandInput, S3Client } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { HeadObjectCommand } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type { InvokeCommandOutput } from \"@webiny/aws-sdk/client-lambda/index.js\";\nimport type { IDeleteFileLambdaPayload } from \"~/types.js\";\n\ninterface IExistsParams {\n client: Pick<S3Client, \"send\">;\n bucket: string;\n key: string;\n}\n\nexport interface IDeleteFileParams {\n createS3Client: ICreateS3ClientCb;\n getLambdaTrigger: IGetLambdaTriggerCb<IDeleteFileLambdaPayload>;\n}\n\nexport class DeleteFile implements IDeleteFile {\n private readonly createS3Client: ICreateS3ClientCb;\n private readonly getLambdaTrigger: IGetLambdaTriggerCb<IDeleteFileLambdaPayload>;\n\n public constructor(params: IDeleteFileParams) {\n this.createS3Client = params.createS3Client;\n this.getLambdaTrigger = params.getLambdaTrigger;\n }\n\n public async handle(params: IDeleteFileHandleParams): Promise<InvokeCommandOutput | null> {\n const { key, target } = params;\n\n /**\n * We need to check on the target if the file already exists.\n */\n\n const targetClient = this.createS3Client({\n region: target.region\n });\n\n const exists = await this.exists({\n client: targetClient,\n bucket: target.services.s3Id,\n key\n });\n if (!exists) {\n // If the file does not exist, we can skip the deletion.\n return null;\n }\n\n /**\n * Then we can safely trigger a Lambda function that will delete the file.\n */\n return await this.getLambdaTrigger().handle({\n invocationType: \"Event\",\n payload: {\n action: \"deleteFile\",\n key,\n target: {\n region: target.region,\n bucket: target.services.s3Id\n }\n }\n });\n }\n\n private async exists(params: IExistsParams): Promise<boolean> {\n const { client, bucket, key } = params;\n const input: HeadObjectCommandInput = {\n Bucket: bucket,\n Key: key\n };\n const cmd = new HeadObjectCommand(input);\n try {\n const result = await client.send(cmd);\n return result.$metadata?.httpStatusCode === 200;\n } catch {\n return false;\n }\n }\n}\n"],"mappings":"AAOA,SAASA,iBAAiB,QAAQ,oCAAoC;AAetE,OAAO,MAAMC,UAAU,CAAwB;EAIpCC,WAAWA,CAACC,MAAyB,EAAE;IAC1C,IAAI,CAACC,cAAc,GAAGD,MAAM,CAACC,cAAc;IAC3C,IAAI,CAACC,gBAAgB,GAAGF,MAAM,CAACE,gBAAgB;EACnD;EAEA,MAAaC,MAAMA,CAACH,MAA+B,EAAuC;IACtF,MAAM;MAAEI,GAAG;MAAEC;IAAO,CAAC,GAAGL,MAAM;;IAE9B;AACR;AACA;;IAEQ,MAAMM,YAAY,GAAG,IAAI,CAACL,cAAc,CAAC;MACrCM,MAAM,EAAEF,MAAM,CAACE;IACnB,CAAC,CAAC;IAEF,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACA,MAAM,CAAC;MAC7BC,MAAM,EAAEH,YAAY;MACpBI,MAAM,EAAEL,MAAM,CAACM,QAAQ,CAACC,IAAI;MAC5BR;IACJ,CAAC,CAAC;IACF,IAAI,CAACI,MAAM,EAAE;MACT;MACA,OAAO,IAAI;IACf;;IAEA;AACR;AACA;IACQ,OAAO,MAAM,IAAI,CAACN,gBAAgB,CAAC,CAAC,CAACC,MAAM,CAAC;MACxCU,cAAc,EAAE,OAAO;MACvBC,OAAO,EAAE;QACLC,MAAM,EAAE,YAAY;QACpBX,GAAG;QACHC,MAAM,EAAE;UACJE,MAAM,EAAEF,MAAM,CAACE,MAAM;UACrBG,MAAM,EAAEL,MAAM,CAACM,QAAQ,CAACC;QAC5B;MACJ;IACJ,CAAC,CAAC;EACN;EAEA,MAAcJ,MAAMA,CAACR,MAAqB,EAAoB;IAC1D,MAAM;MAAES,MAAM;MAAEC,MAAM;MAAEN;IAAI,CAAC,GAAGJ,MAAM;IACtC,MAAMgB,KAA6B,GAAG;MAClCC,MAAM,EAAEP,MAAM;MACdQ,GAAG,EAAEd;IACT,CAAC;IACD,MAAMe,GAAG,GAAG,IAAItB,iBAAiB,CAACmB,KAAK,CAAC;IACxC,IAAI;MACA,MAAMI,MAAM,GAAG,MAAMX,MAAM,CAACY,IAAI,CAACF,GAAG,CAAC;MACrC,OAAOC,MAAM,CAACE,SAAS,EAAEC,cAAc,KAAK,GAAG;IACnD,CAAC,CAAC,MAAM;MACJ,OAAO,KAAK;IAChB;EACJ;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"resolver/recordTypes/fileManager/DeleteFile.js","sources":["../../../../src/resolver/recordTypes/fileManager/DeleteFile.ts"],"sourcesContent":["import type {\n ICreateS3ClientCb,\n IDeleteFile,\n IDeleteFileHandleParams,\n IGetLambdaTriggerCb\n} from \"~/resolver/recordTypes/fileManager/types.js\";\nimport type { HeadObjectCommandInput, S3Client } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport { HeadObjectCommand } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type { InvokeCommandOutput } from \"@webiny/aws-sdk/client-lambda/index.js\";\nimport type { IDeleteFileLambdaPayload } from \"~/types.js\";\n\ninterface IExistsParams {\n client: Pick<S3Client, \"send\">;\n bucket: string;\n key: string;\n}\n\nexport interface IDeleteFileParams {\n createS3Client: ICreateS3ClientCb;\n getLambdaTrigger: IGetLambdaTriggerCb<IDeleteFileLambdaPayload>;\n}\n\nexport class DeleteFile implements IDeleteFile {\n private readonly createS3Client: ICreateS3ClientCb;\n private readonly getLambdaTrigger: IGetLambdaTriggerCb<IDeleteFileLambdaPayload>;\n\n public constructor(params: IDeleteFileParams) {\n this.createS3Client = params.createS3Client;\n this.getLambdaTrigger = params.getLambdaTrigger;\n }\n\n public async handle(params: IDeleteFileHandleParams): Promise<InvokeCommandOutput | null> {\n const { key, target } = params;\n\n /**\n * We need to check on the target if the file already exists.\n */\n\n const targetClient = this.createS3Client({\n region: target.region\n });\n\n const exists = await this.exists({\n client: targetClient,\n bucket: target.services.s3Id,\n key\n });\n if (!exists) {\n // If the file does not exist, we can skip the deletion.\n return null;\n }\n\n /**\n * Then we can safely trigger a Lambda function that will delete the file.\n */\n return await this.getLambdaTrigger().handle({\n invocationType: \"Event\",\n payload: {\n action: \"deleteFile\",\n key,\n target: {\n region: target.region,\n bucket: target.services.s3Id\n }\n }\n });\n }\n\n private async exists(params: IExistsParams): Promise<boolean> {\n const { client, bucket, key } = params;\n const input: HeadObjectCommandInput = {\n Bucket: bucket,\n Key: key\n };\n const cmd = new HeadObjectCommand(input);\n try {\n const result = await client.send(cmd);\n return result.$metadata?.httpStatusCode === 200;\n } catch {\n return false;\n }\n }\n}\n"],"names":["DeleteFile","params","key","target","targetClient","exists","client","bucket","input","cmd","HeadObjectCommand","result"],"mappings":";AAsBO,MAAMA;IAIT,YAAmBC,MAAyB,CAAE;QAC1C,IAAI,CAAC,cAAc,GAAGA,OAAO,cAAc;QAC3C,IAAI,CAAC,gBAAgB,GAAGA,OAAO,gBAAgB;IACnD;IAEA,MAAa,OAAOA,MAA+B,EAAuC;QACtF,MAAM,EAAEC,GAAG,EAAEC,MAAM,EAAE,GAAGF;QAMxB,MAAMG,eAAe,IAAI,CAAC,cAAc,CAAC;YACrC,QAAQD,OAAO,MAAM;QACzB;QAEA,MAAME,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC;YAC7B,QAAQD;YACR,QAAQD,OAAO,QAAQ,CAAC,IAAI;YAC5BD;QACJ;QACA,IAAI,CAACG,QAED,OAAO;QAMX,OAAO,MAAM,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;YACxC,gBAAgB;YAChB,SAAS;gBACL,QAAQ;gBACRH;gBACA,QAAQ;oBACJ,QAAQC,OAAO,MAAM;oBACrB,QAAQA,OAAO,QAAQ,CAAC,IAAI;gBAChC;YACJ;QACJ;IACJ;IAEA,MAAc,OAAOF,MAAqB,EAAoB;QAC1D,MAAM,EAAEK,MAAM,EAAEC,MAAM,EAAEL,GAAG,EAAE,GAAGD;QAChC,MAAMO,QAAgC;YAClC,QAAQD;YACR,KAAKL;QACT;QACA,MAAMO,MAAM,IAAIC,kBAAkBF;QAClC,IAAI;YACA,MAAMG,SAAS,MAAML,OAAO,IAAI,CAACG;YACjC,OAAOE,OAAO,SAAS,EAAE,mBAAmB;QAChD,EAAE,OAAM;YACJ,OAAO;QACX;IACJ;AACJ"}
@@ -1,7 +1,9 @@
1
1
  import { createFileManagerOnPutPlugin } from "./fileManagerOnPut.js";
2
2
  import { createFileManagerOnDeletePlugin } from "./fileManagerOnDelete.js";
3
- export const createFileManagerPlugins = params => {
4
- return [createFileManagerOnPutPlugin(params), createFileManagerOnDeletePlugin(params)];
5
- };
3
+ const createFileManagerPlugins = (params)=>[
4
+ createFileManagerOnPutPlugin(params),
5
+ createFileManagerOnDeletePlugin(params)
6
+ ];
7
+ export { createFileManagerPlugins };
6
8
 
7
9
  //# sourceMappingURL=fileManager.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFileManagerOnPutPlugin","createFileManagerOnDeletePlugin","createFileManagerPlugins","params"],"sources":["fileManager.ts"],"sourcesContent":["import { createFileManagerOnPutPlugin } from \"./fileManagerOnPut.js\";\nimport { createFileManagerOnDeletePlugin } from \"./fileManagerOnDelete.js\";\nimport type { ICopyFile, IDeleteFile } from \"~/resolver/recordTypes/fileManager/types.js\";\n\nexport interface ICreateFileManagerPluginsParams {\n copyFile: ICopyFile;\n deleteFile: IDeleteFile;\n}\n\nexport const createFileManagerPlugins = (params: ICreateFileManagerPluginsParams) => {\n return [createFileManagerOnPutPlugin(params), createFileManagerOnDeletePlugin(params)];\n};\n"],"mappings":"AAAA,SAASA,4BAA4B;AACrC,SAASC,+BAA+B;AAQxC,OAAO,MAAMC,wBAAwB,GAAIC,MAAuC,IAAK;EACjF,OAAO,CAACH,4BAA4B,CAACG,MAAM,CAAC,EAAEF,+BAA+B,CAACE,MAAM,CAAC,CAAC;AAC1F,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"resolver/recordTypes/fileManager/fileManager.js","sources":["../../../../src/resolver/recordTypes/fileManager/fileManager.ts"],"sourcesContent":["import { createFileManagerOnPutPlugin } from \"./fileManagerOnPut.js\";\nimport { createFileManagerOnDeletePlugin } from \"./fileManagerOnDelete.js\";\nimport type { ICopyFile, IDeleteFile } from \"~/resolver/recordTypes/fileManager/types.js\";\n\nexport interface ICreateFileManagerPluginsParams {\n copyFile: ICopyFile;\n deleteFile: IDeleteFile;\n}\n\nexport const createFileManagerPlugins = (params: ICreateFileManagerPluginsParams) => {\n return [createFileManagerOnPutPlugin(params), createFileManagerOnDeletePlugin(params)];\n};\n"],"names":["createFileManagerPlugins","params","createFileManagerOnPutPlugin","createFileManagerOnDeletePlugin"],"mappings":";;AASO,MAAMA,2BAA2B,CAACC,SAC9B;QAACC,6BAA6BD;QAASE,gCAAgCF;KAAQ"}
@@ -1,41 +1,30 @@
1
1
  import { createStorerAfterEachPluginWithName } from "../../plugins/StorerAfterEachPlugin.js";
2
2
  import { shouldBeHandled } from "./shouldBeHandled.js";
3
3
  import { convertException } from "@webiny/utils";
4
- export const createFileManagerOnDeletePlugin = params => {
5
- const {
6
- deleteFile
7
- } = params;
8
- return createStorerAfterEachPluginWithName("fileManager.onDelete", {
9
- canHandle: params => {
10
- const {
11
- command
12
- } = params;
13
- if (command !== "delete") {
14
- return false;
15
- }
16
- return shouldBeHandled(params);
17
- },
18
- handle: async params => {
19
- const {
20
- item
21
- } = params;
22
- /**
23
- * We are 100% positive that the key exists here because canHandle would not allow for handle to be called.
24
- */
25
- // @ts-expect-error
26
- const key = item.values["text@key"] || item.values["key"];
27
- try {
28
- await deleteFile.handle({
29
- target: params.target,
30
- source: params.source,
31
- key
32
- });
33
- } catch (ex) {
34
- console.error("Error while handling file manager onDelete plugin.");
35
- console.log(convertException(ex));
36
- }
37
- }
38
- });
4
+ const createFileManagerOnDeletePlugin = (params)=>{
5
+ const { deleteFile } = params;
6
+ return createStorerAfterEachPluginWithName("fileManager.onDelete", {
7
+ canHandle: (params)=>{
8
+ const { command } = params;
9
+ if ("delete" !== command) return false;
10
+ return shouldBeHandled(params);
11
+ },
12
+ handle: async (params)=>{
13
+ const { item } = params;
14
+ const key = item.values["text@key"] || item.values["key"];
15
+ try {
16
+ await deleteFile.handle({
17
+ target: params.target,
18
+ source: params.source,
19
+ key
20
+ });
21
+ } catch (ex) {
22
+ console.error("Error while handling file manager onDelete plugin.");
23
+ console.log(convertException(ex));
24
+ }
25
+ }
26
+ });
39
27
  };
28
+ export { createFileManagerOnDeletePlugin };
40
29
 
41
30
  //# sourceMappingURL=fileManagerOnDelete.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createStorerAfterEachPluginWithName","shouldBeHandled","convertException","createFileManagerOnDeletePlugin","params","deleteFile","canHandle","command","handle","item","key","values","target","source","ex","console","error","log"],"sources":["fileManagerOnDelete.ts"],"sourcesContent":["import { createStorerAfterEachPluginWithName } from \"~/resolver/plugins/StorerAfterEachPlugin.js\";\nimport { shouldBeHandled } from \"./shouldBeHandled.js\";\nimport { convertException } from \"@webiny/utils\";\nimport type { IDeleteFile } from \"./types.js\";\n\nexport interface ICreateFileManagerOnDeletePluginParams {\n deleteFile: IDeleteFile;\n}\n\nexport const createFileManagerOnDeletePlugin = (params: ICreateFileManagerOnDeletePluginParams) => {\n const { deleteFile } = params;\n\n return createStorerAfterEachPluginWithName(\"fileManager.onDelete\", {\n canHandle: params => {\n const { command } = params;\n if (command !== \"delete\") {\n return false;\n }\n return shouldBeHandled(params);\n },\n handle: async params => {\n const { item } = params;\n /**\n * We are 100% positive that the key exists here because canHandle would not allow for handle to be called.\n */\n // @ts-expect-error\n const key = (item.values[\"text@key\"] || item.values[\"key\"]) as string;\n try {\n await deleteFile.handle({\n target: params.target,\n source: params.source,\n key\n });\n } catch (ex) {\n console.error(\"Error while handling file manager onDelete plugin.\");\n console.log(convertException(ex));\n }\n }\n });\n};\n"],"mappings":"AAAA,SAASA,mCAAmC;AAC5C,SAASC,eAAe;AACxB,SAASC,gBAAgB,QAAQ,eAAe;AAOhD,OAAO,MAAMC,+BAA+B,GAAIC,MAA8C,IAAK;EAC/F,MAAM;IAAEC;EAAW,CAAC,GAAGD,MAAM;EAE7B,OAAOJ,mCAAmC,CAAC,sBAAsB,EAAE;IAC/DM,SAAS,EAAEF,MAAM,IAAI;MACjB,MAAM;QAAEG;MAAQ,CAAC,GAAGH,MAAM;MAC1B,IAAIG,OAAO,KAAK,QAAQ,EAAE;QACtB,OAAO,KAAK;MAChB;MACA,OAAON,eAAe,CAACG,MAAM,CAAC;IAClC,CAAC;IACDI,MAAM,EAAE,MAAMJ,MAAM,IAAI;MACpB,MAAM;QAAEK;MAAK,CAAC,GAAGL,MAAM;MACvB;AACZ;AACA;MACY;MACA,MAAMM,GAAG,GAAID,IAAI,CAACE,MAAM,CAAC,UAAU,CAAC,IAAIF,IAAI,CAACE,MAAM,CAAC,KAAK,CAAY;MACrE,IAAI;QACA,MAAMN,UAAU,CAACG,MAAM,CAAC;UACpBI,MAAM,EAAER,MAAM,CAACQ,MAAM;UACrBC,MAAM,EAAET,MAAM,CAACS,MAAM;UACrBH;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOI,EAAE,EAAE;QACTC,OAAO,CAACC,KAAK,CAAC,oDAAoD,CAAC;QACnED,OAAO,CAACE,GAAG,CAACf,gBAAgB,CAACY,EAAE,CAAC,CAAC;MACrC;IACJ;EACJ,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"resolver/recordTypes/fileManager/fileManagerOnDelete.js","sources":["../../../../src/resolver/recordTypes/fileManager/fileManagerOnDelete.ts"],"sourcesContent":["import { createStorerAfterEachPluginWithName } from \"~/resolver/plugins/StorerAfterEachPlugin.js\";\nimport { shouldBeHandled } from \"./shouldBeHandled.js\";\nimport { convertException } from \"@webiny/utils\";\nimport type { IDeleteFile } from \"./types.js\";\n\nexport interface ICreateFileManagerOnDeletePluginParams {\n deleteFile: IDeleteFile;\n}\n\nexport const createFileManagerOnDeletePlugin = (params: ICreateFileManagerOnDeletePluginParams) => {\n const { deleteFile } = params;\n\n return createStorerAfterEachPluginWithName(\"fileManager.onDelete\", {\n canHandle: params => {\n const { command } = params;\n if (command !== \"delete\") {\n return false;\n }\n return shouldBeHandled(params);\n },\n handle: async params => {\n const { item } = params;\n /**\n * We are 100% positive that the key exists here because canHandle would not allow for handle to be called.\n */\n // @ts-expect-error\n const key = (item.values[\"text@key\"] || item.values[\"key\"]) as string;\n try {\n await deleteFile.handle({\n target: params.target,\n source: params.source,\n key\n });\n } catch (ex) {\n console.error(\"Error while handling file manager onDelete plugin.\");\n console.log(convertException(ex));\n }\n }\n });\n};\n"],"names":["createFileManagerOnDeletePlugin","params","deleteFile","createStorerAfterEachPluginWithName","command","shouldBeHandled","item","key","ex","console","convertException"],"mappings":";;;AASO,MAAMA,kCAAkC,CAACC;IAC5C,MAAM,EAAEC,UAAU,EAAE,GAAGD;IAEvB,OAAOE,oCAAoC,wBAAwB;QAC/D,WAAWF,CAAAA;YACP,MAAM,EAAEG,OAAO,EAAE,GAAGH;YACpB,IAAIG,AAAY,aAAZA,SACA,OAAO;YAEX,OAAOC,gBAAgBJ;QAC3B;QACA,QAAQ,OAAMA;YACV,MAAM,EAAEK,IAAI,EAAE,GAAGL;YAKjB,MAAMM,MAAOD,KAAK,MAAM,CAAC,WAAW,IAAIA,KAAK,MAAM,CAAC,MAAM;YAC1D,IAAI;gBACA,MAAMJ,WAAW,MAAM,CAAC;oBACpB,QAAQD,OAAO,MAAM;oBACrB,QAAQA,OAAO,MAAM;oBACrBM;gBACJ;YACJ,EAAE,OAAOC,IAAI;gBACTC,QAAQ,KAAK,CAAC;gBACdA,QAAQ,GAAG,CAACC,iBAAiBF;YACjC;QACJ;IACJ;AACJ"}
@@ -1,41 +1,30 @@
1
1
  import { createStorerAfterEachPluginWithName } from "../../plugins/StorerAfterEachPlugin.js";
2
2
  import { shouldBeHandled } from "./shouldBeHandled.js";
3
3
  import { convertException } from "@webiny/utils";
4
- export const createFileManagerOnPutPlugin = params => {
5
- const {
6
- copyFile
7
- } = params;
8
- return createStorerAfterEachPluginWithName("fileManager.onPut", {
9
- canHandle: params => {
10
- const {
11
- command
12
- } = params;
13
- if (command !== "put") {
14
- return false;
15
- }
16
- return shouldBeHandled(params);
17
- },
18
- handle: async params => {
19
- const {
20
- item
21
- } = params;
22
- /**
23
- * We are 100% positive that the key exists here because canHandle would not allow for handle to be called.
24
- */
25
- // @ts-expect-error
26
- const key = item.values["text@key"] || item.values["key"];
27
- try {
28
- await copyFile.handle({
29
- target: params.target,
30
- source: params.source,
31
- key
32
- });
33
- } catch (ex) {
34
- console.error("Error while handling file manager onPut plugin.");
35
- console.log(convertException(ex));
36
- }
37
- }
38
- });
4
+ const createFileManagerOnPutPlugin = (params)=>{
5
+ const { copyFile } = params;
6
+ return createStorerAfterEachPluginWithName("fileManager.onPut", {
7
+ canHandle: (params)=>{
8
+ const { command } = params;
9
+ if ("put" !== command) return false;
10
+ return shouldBeHandled(params);
11
+ },
12
+ handle: async (params)=>{
13
+ const { item } = params;
14
+ const key = item.values["text@key"] || item.values["key"];
15
+ try {
16
+ await copyFile.handle({
17
+ target: params.target,
18
+ source: params.source,
19
+ key
20
+ });
21
+ } catch (ex) {
22
+ console.error("Error while handling file manager onPut plugin.");
23
+ console.log(convertException(ex));
24
+ }
25
+ }
26
+ });
39
27
  };
28
+ export { createFileManagerOnPutPlugin };
40
29
 
41
30
  //# sourceMappingURL=fileManagerOnPut.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createStorerAfterEachPluginWithName","shouldBeHandled","convertException","createFileManagerOnPutPlugin","params","copyFile","canHandle","command","handle","item","key","values","target","source","ex","console","error","log"],"sources":["fileManagerOnPut.ts"],"sourcesContent":["import { createStorerAfterEachPluginWithName } from \"~/resolver/plugins/StorerAfterEachPlugin.js\";\nimport { shouldBeHandled } from \"./shouldBeHandled.js\";\nimport { convertException } from \"@webiny/utils\";\nimport type { ICopyFile } from \"./types.js\";\n\nexport interface ICreateFileManagerOnPutPluginParams {\n copyFile: ICopyFile;\n}\n\nexport const createFileManagerOnPutPlugin = (params: ICreateFileManagerOnPutPluginParams) => {\n const { copyFile } = params;\n\n return createStorerAfterEachPluginWithName(\"fileManager.onPut\", {\n canHandle: params => {\n const { command } = params;\n if (command !== \"put\") {\n return false;\n }\n return shouldBeHandled(params);\n },\n handle: async params => {\n const { item } = params;\n /**\n * We are 100% positive that the key exists here because canHandle would not allow for handle to be called.\n */\n // @ts-expect-error\n const key = (item.values[\"text@key\"] || item.values[\"key\"]) as string;\n try {\n await copyFile.handle({\n target: params.target,\n source: params.source,\n key\n });\n } catch (ex) {\n console.error(\"Error while handling file manager onPut plugin.\");\n console.log(convertException(ex));\n }\n }\n });\n};\n"],"mappings":"AAAA,SAASA,mCAAmC;AAC5C,SAASC,eAAe;AACxB,SAASC,gBAAgB,QAAQ,eAAe;AAOhD,OAAO,MAAMC,4BAA4B,GAAIC,MAA2C,IAAK;EACzF,MAAM;IAAEC;EAAS,CAAC,GAAGD,MAAM;EAE3B,OAAOJ,mCAAmC,CAAC,mBAAmB,EAAE;IAC5DM,SAAS,EAAEF,MAAM,IAAI;MACjB,MAAM;QAAEG;MAAQ,CAAC,GAAGH,MAAM;MAC1B,IAAIG,OAAO,KAAK,KAAK,EAAE;QACnB,OAAO,KAAK;MAChB;MACA,OAAON,eAAe,CAACG,MAAM,CAAC;IAClC,CAAC;IACDI,MAAM,EAAE,MAAMJ,MAAM,IAAI;MACpB,MAAM;QAAEK;MAAK,CAAC,GAAGL,MAAM;MACvB;AACZ;AACA;MACY;MACA,MAAMM,GAAG,GAAID,IAAI,CAACE,MAAM,CAAC,UAAU,CAAC,IAAIF,IAAI,CAACE,MAAM,CAAC,KAAK,CAAY;MACrE,IAAI;QACA,MAAMN,QAAQ,CAACG,MAAM,CAAC;UAClBI,MAAM,EAAER,MAAM,CAACQ,MAAM;UACrBC,MAAM,EAAET,MAAM,CAACS,MAAM;UACrBH;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOI,EAAE,EAAE;QACTC,OAAO,CAACC,KAAK,CAAC,iDAAiD,CAAC;QAChED,OAAO,CAACE,GAAG,CAACf,gBAAgB,CAACY,EAAE,CAAC,CAAC;MACrC;IACJ;EACJ,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"resolver/recordTypes/fileManager/fileManagerOnPut.js","sources":["../../../../src/resolver/recordTypes/fileManager/fileManagerOnPut.ts"],"sourcesContent":["import { createStorerAfterEachPluginWithName } from \"~/resolver/plugins/StorerAfterEachPlugin.js\";\nimport { shouldBeHandled } from \"./shouldBeHandled.js\";\nimport { convertException } from \"@webiny/utils\";\nimport type { ICopyFile } from \"./types.js\";\n\nexport interface ICreateFileManagerOnPutPluginParams {\n copyFile: ICopyFile;\n}\n\nexport const createFileManagerOnPutPlugin = (params: ICreateFileManagerOnPutPluginParams) => {\n const { copyFile } = params;\n\n return createStorerAfterEachPluginWithName(\"fileManager.onPut\", {\n canHandle: params => {\n const { command } = params;\n if (command !== \"put\") {\n return false;\n }\n return shouldBeHandled(params);\n },\n handle: async params => {\n const { item } = params;\n /**\n * We are 100% positive that the key exists here because canHandle would not allow for handle to be called.\n */\n // @ts-expect-error\n const key = (item.values[\"text@key\"] || item.values[\"key\"]) as string;\n try {\n await copyFile.handle({\n target: params.target,\n source: params.source,\n key\n });\n } catch (ex) {\n console.error(\"Error while handling file manager onPut plugin.\");\n console.log(convertException(ex));\n }\n }\n });\n};\n"],"names":["createFileManagerOnPutPlugin","params","copyFile","createStorerAfterEachPluginWithName","command","shouldBeHandled","item","key","ex","console","convertException"],"mappings":";;;AASO,MAAMA,+BAA+B,CAACC;IACzC,MAAM,EAAEC,QAAQ,EAAE,GAAGD;IAErB,OAAOE,oCAAoC,qBAAqB;QAC5D,WAAWF,CAAAA;YACP,MAAM,EAAEG,OAAO,EAAE,GAAGH;YACpB,IAAIG,AAAY,UAAZA,SACA,OAAO;YAEX,OAAOC,gBAAgBJ;QAC3B;QACA,QAAQ,OAAMA;YACV,MAAM,EAAEK,IAAI,EAAE,GAAGL;YAKjB,MAAMM,MAAOD,KAAK,MAAM,CAAC,WAAW,IAAIA,KAAK,MAAM,CAAC,MAAM;YAC1D,IAAI;gBACA,MAAMJ,SAAS,MAAM,CAAC;oBAClB,QAAQD,OAAO,MAAM;oBACrB,QAAQA,OAAO,MAAM;oBACrBM;gBACJ;YACJ,EAAE,OAAOC,IAAI;gBACTC,QAAQ,KAAK,CAAC;gBACdA,QAAQ,GAAG,CAACC,iBAAiBF;YACjC;QACJ;IACJ;AACJ"}
@@ -1,30 +1,13 @@
1
- export const shouldBeHandled = params => {
2
- const {
3
- item,
4
- table
5
- } = params;
6
- if (table.type !== "regular") {
7
- return false;
8
- } else if (item.SK !== "L") {
9
- return false;
10
- }
11
- // TODO use constant from fileManager
12
- else if (item.modelId !== "fmFile") {
13
- return false;
14
- } else if (!item.values) {
15
- return false;
16
- }
17
-
18
- // @ts-expect-error
19
- const key = item.values["text@key"] || item.values["key"];
20
- if (!key) {
21
- return false;
22
- }
23
- /**
24
- * We can check length for being more than 2 characters,
25
- * because we know that the key is a string.
26
- */
27
- return typeof key === "string" && key.length > 2;
1
+ const shouldBeHandled = (params)=>{
2
+ const { item, table } = params;
3
+ if ("regular" !== table.type) return false;
4
+ if ("L" !== item.SK) return false;
5
+ if ("fmFile" !== item.modelId) return false;
6
+ if (!item.values) return false;
7
+ const key = item.values["text@key"] || item.values["key"];
8
+ if (!key) return false;
9
+ return "string" == typeof key && key.length > 2;
28
10
  };
11
+ export { shouldBeHandled };
29
12
 
30
13
  //# sourceMappingURL=shouldBeHandled.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["shouldBeHandled","params","item","table","type","SK","modelId","values","key","length"],"sources":["shouldBeHandled.ts"],"sourcesContent":["import type { IStorerAfterEachPluginCanHandleParams } from \"~/resolver/plugins/StorerAfterEachPlugin.js\";\n\nexport const shouldBeHandled = (params: IStorerAfterEachPluginCanHandleParams): boolean => {\n const { item, table } = params;\n if (table.type !== \"regular\") {\n return false;\n } else if (item.SK !== \"L\") {\n return false;\n }\n // TODO use constant from fileManager\n else if (item.modelId !== \"fmFile\") {\n return false;\n } else if (!item.values) {\n return false;\n }\n\n // @ts-expect-error\n const key = item.values[\"text@key\"] || item.values[\"key\"];\n if (!key) {\n return false;\n }\n /**\n * We can check length for being more than 2 characters,\n * because we know that the key is a string.\n */\n return typeof key === \"string\" && key.length > 2;\n};\n"],"mappings":"AAEA,OAAO,MAAMA,eAAe,GAAIC,MAA6C,IAAc;EACvF,MAAM;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGF,MAAM;EAC9B,IAAIE,KAAK,CAACC,IAAI,KAAK,SAAS,EAAE;IAC1B,OAAO,KAAK;EAChB,CAAC,MAAM,IAAIF,IAAI,CAACG,EAAE,KAAK,GAAG,EAAE;IACxB,OAAO,KAAK;EAChB;EACA;EAAA,KACK,IAAIH,IAAI,CAACI,OAAO,KAAK,QAAQ,EAAE;IAChC,OAAO,KAAK;EAChB,CAAC,MAAM,IAAI,CAACJ,IAAI,CAACK,MAAM,EAAE;IACrB,OAAO,KAAK;EAChB;;EAEA;EACA,MAAMC,GAAG,GAAGN,IAAI,CAACK,MAAM,CAAC,UAAU,CAAC,IAAIL,IAAI,CAACK,MAAM,CAAC,KAAK,CAAC;EACzD,IAAI,CAACC,GAAG,EAAE;IACN,OAAO,KAAK;EAChB;EACA;AACJ;AACA;AACA;EACI,OAAO,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACC,MAAM,GAAG,CAAC;AACpD,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"resolver/recordTypes/fileManager/shouldBeHandled.js","sources":["../../../../src/resolver/recordTypes/fileManager/shouldBeHandled.ts"],"sourcesContent":["import type { IStorerAfterEachPluginCanHandleParams } from \"~/resolver/plugins/StorerAfterEachPlugin.js\";\n\nexport const shouldBeHandled = (params: IStorerAfterEachPluginCanHandleParams): boolean => {\n const { item, table } = params;\n if (table.type !== \"regular\") {\n return false;\n } else if (item.SK !== \"L\") {\n return false;\n }\n // TODO use constant from fileManager\n else if (item.modelId !== \"fmFile\") {\n return false;\n } else if (!item.values) {\n return false;\n }\n\n // @ts-expect-error\n const key = item.values[\"text@key\"] || item.values[\"key\"];\n if (!key) {\n return false;\n }\n /**\n * We can check length for being more than 2 characters,\n * because we know that the key is a string.\n */\n return typeof key === \"string\" && key.length > 2;\n};\n"],"names":["shouldBeHandled","params","item","table","key"],"mappings":"AAEO,MAAMA,kBAAkB,CAACC;IAC5B,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGF;IACxB,IAAIE,AAAe,cAAfA,MAAM,IAAI,EACV,OAAO;IACJ,IAAID,AAAY,QAAZA,KAAK,EAAE,EACd,OAAO;IAGN,IAAIA,AAAiB,aAAjBA,KAAK,OAAO,EACjB,OAAO;IACJ,IAAI,CAACA,KAAK,MAAM,EACnB,OAAO;IAIX,MAAME,MAAMF,KAAK,MAAM,CAAC,WAAW,IAAIA,KAAK,MAAM,CAAC,MAAM;IACzD,IAAI,CAACE,KACD,OAAO;IAMX,OAAO,AAAe,YAAf,OAAOA,OAAoBA,IAAI,MAAM,GAAG;AACnD"}
@@ -1,3 +0,0 @@
1
- export {};
2
-
3
- //# sourceMappingURL=types.js.map
@@ -1,60 +1,50 @@
1
1
  import { AdminGetUserCommand } from "@webiny/aws-sdk/client-cognito-identity-provider/index.js";
2
- export class CopyUser {
3
- constructor(params) {
4
- this.createCognitoIdentityProviderClient = params.createCognitoIdentityProviderClient;
5
- this.getLambdaTrigger = params.getLambdaTrigger;
6
- }
7
- async handle(params) {
8
- const {
9
- username,
10
- target,
11
- source
12
- } = params;
13
- const exists = await this.userExists({
14
- username,
15
- userPoolId: target.services.cognitoUserPoolId,
16
- region: target.region
17
- });
18
- return await this.getLambdaTrigger().handle({
19
- invocationType: "Event",
20
- payload: {
21
- /**
22
- * We need to be able to create or update a user, depending on whether it already exists in the target user pool.
23
- */
24
- action: exists ? "updateUser" : "createUser",
25
- username,
26
- source: {
27
- region: source.region,
28
- userPoolId: source.services.cognitoUserPoolId
29
- },
30
- target: {
31
- region: target.region,
32
- userPoolId: target.services.cognitoUserPoolId
2
+ class CopyUser {
3
+ constructor(params){
4
+ this.createCognitoIdentityProviderClient = params.createCognitoIdentityProviderClient;
5
+ this.getLambdaTrigger = params.getLambdaTrigger;
6
+ }
7
+ async handle(params) {
8
+ const { username, target, source } = params;
9
+ const exists = await this.userExists({
10
+ username,
11
+ userPoolId: target.services.cognitoUserPoolId,
12
+ region: target.region
13
+ });
14
+ return await this.getLambdaTrigger().handle({
15
+ invocationType: "Event",
16
+ payload: {
17
+ action: exists ? "updateUser" : "createUser",
18
+ username,
19
+ source: {
20
+ region: source.region,
21
+ userPoolId: source.services.cognitoUserPoolId
22
+ },
23
+ target: {
24
+ region: target.region,
25
+ userPoolId: target.services.cognitoUserPoolId
26
+ }
27
+ }
28
+ });
29
+ }
30
+ async userExists(params) {
31
+ const { userPoolId, username, region } = params;
32
+ const provider = this.createCognitoIdentityProviderClient({
33
+ region
34
+ });
35
+ const input = {
36
+ UserPoolId: userPoolId,
37
+ Username: username
38
+ };
39
+ const cmd = new AdminGetUserCommand(input);
40
+ try {
41
+ const result = await provider.send(cmd);
42
+ return result.$metadata?.httpStatusCode === 200;
43
+ } catch {
44
+ return false;
33
45
  }
34
- }
35
- });
36
- }
37
- async userExists(params) {
38
- const {
39
- userPoolId,
40
- username,
41
- region
42
- } = params;
43
- const provider = this.createCognitoIdentityProviderClient({
44
- region
45
- });
46
- const input = {
47
- UserPoolId: userPoolId,
48
- Username: username
49
- };
50
- const cmd = new AdminGetUserCommand(input);
51
- try {
52
- const result = await provider.send(cmd);
53
- return result.$metadata?.httpStatusCode === 200;
54
- } catch {
55
- return false;
56
46
  }
57
- }
58
47
  }
48
+ export { CopyUser };
59
49
 
60
50
  //# sourceMappingURL=CopyUser.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AdminGetUserCommand","CopyUser","constructor","params","createCognitoIdentityProviderClient","getLambdaTrigger","handle","username","target","source","exists","userExists","userPoolId","services","cognitoUserPoolId","region","invocationType","payload","action","provider","input","UserPoolId","Username","cmd","result","send","$metadata","httpStatusCode"],"sources":["CopyUser.ts"],"sourcesContent":["import type {\n ICopyUser,\n ICopyUserHandleParams,\n ICreateCognitoIdentityProviderClientCb\n} from \"./types.js\";\nimport type { LambdaTrigger } from \"~/resolver/lambda/LambdaTrigger.js\";\nimport type { InvokeCommandOutput } from \"@webiny/aws-sdk/client-lambda/index.js\";\nimport type { AdminGetUserCommandInput } from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport { AdminGetUserCommand } from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport type { ICopyUserLambdaPayload } from \"~/types.js\";\n\ninterface IGetUserParams {\n username: string;\n userPoolId: string;\n region: string;\n}\n\nexport interface IGetLambdaTriggerCb {\n (): LambdaTrigger<ICopyUserLambdaPayload>;\n}\n\nexport interface ICopyUserParams {\n createCognitoIdentityProviderClient: ICreateCognitoIdentityProviderClientCb;\n getLambdaTrigger: IGetLambdaTriggerCb;\n}\n\nexport class CopyUser implements ICopyUser {\n private readonly createCognitoIdentityProviderClient: ICreateCognitoIdentityProviderClientCb;\n private readonly getLambdaTrigger: IGetLambdaTriggerCb;\n\n public constructor(params: ICopyUserParams) {\n this.createCognitoIdentityProviderClient = params.createCognitoIdentityProviderClient;\n this.getLambdaTrigger = params.getLambdaTrigger;\n }\n\n public async handle(params: ICopyUserHandleParams): Promise<InvokeCommandOutput | null> {\n const { username, target, source } = params;\n\n const exists = await this.userExists({\n username,\n userPoolId: target.services.cognitoUserPoolId,\n region: target.region\n });\n\n return await this.getLambdaTrigger().handle({\n invocationType: \"Event\",\n payload: {\n /**\n * We need to be able to create or update a user, depending on whether it already exists in the target user pool.\n */\n action: exists ? \"updateUser\" : \"createUser\",\n username,\n source: {\n region: source.region,\n userPoolId: source.services.cognitoUserPoolId\n },\n target: {\n region: target.region,\n userPoolId: target.services.cognitoUserPoolId\n }\n }\n });\n }\n\n private async userExists(params: IGetUserParams): Promise<boolean> {\n const { userPoolId, username, region } = params;\n\n const provider = this.createCognitoIdentityProviderClient({\n region\n });\n\n const input: AdminGetUserCommandInput = {\n UserPoolId: userPoolId,\n Username: username\n };\n const cmd = new AdminGetUserCommand(input);\n try {\n const result = await provider.send(cmd);\n return result.$metadata?.httpStatusCode === 200;\n } catch {\n return false;\n }\n }\n}\n"],"mappings":"AAQA,SAASA,mBAAmB,QAAQ,2DAA2D;AAkB/F,OAAO,MAAMC,QAAQ,CAAsB;EAIhCC,WAAWA,CAACC,MAAuB,EAAE;IACxC,IAAI,CAACC,mCAAmC,GAAGD,MAAM,CAACC,mCAAmC;IACrF,IAAI,CAACC,gBAAgB,GAAGF,MAAM,CAACE,gBAAgB;EACnD;EAEA,MAAaC,MAAMA,CAACH,MAA6B,EAAuC;IACpF,MAAM;MAAEI,QAAQ;MAAEC,MAAM;MAAEC;IAAO,CAAC,GAAGN,MAAM;IAE3C,MAAMO,MAAM,GAAG,MAAM,IAAI,CAACC,UAAU,CAAC;MACjCJ,QAAQ;MACRK,UAAU,EAAEJ,MAAM,CAACK,QAAQ,CAACC,iBAAiB;MAC7CC,MAAM,EAAEP,MAAM,CAACO;IACnB,CAAC,CAAC;IAEF,OAAO,MAAM,IAAI,CAACV,gBAAgB,CAAC,CAAC,CAACC,MAAM,CAAC;MACxCU,cAAc,EAAE,OAAO;MACvBC,OAAO,EAAE;QACL;AAChB;AACA;QACgBC,MAAM,EAAER,MAAM,GAAG,YAAY,GAAG,YAAY;QAC5CH,QAAQ;QACRE,MAAM,EAAE;UACJM,MAAM,EAAEN,MAAM,CAACM,MAAM;UACrBH,UAAU,EAAEH,MAAM,CAACI,QAAQ,CAACC;QAChC,CAAC;QACDN,MAAM,EAAE;UACJO,MAAM,EAAEP,MAAM,CAACO,MAAM;UACrBH,UAAU,EAAEJ,MAAM,CAACK,QAAQ,CAACC;QAChC;MACJ;IACJ,CAAC,CAAC;EACN;EAEA,MAAcH,UAAUA,CAACR,MAAsB,EAAoB;IAC/D,MAAM;MAAES,UAAU;MAAEL,QAAQ;MAAEQ;IAAO,CAAC,GAAGZ,MAAM;IAE/C,MAAMgB,QAAQ,GAAG,IAAI,CAACf,mCAAmC,CAAC;MACtDW;IACJ,CAAC,CAAC;IAEF,MAAMK,KAA+B,GAAG;MACpCC,UAAU,EAAET,UAAU;MACtBU,QAAQ,EAAEf;IACd,CAAC;IACD,MAAMgB,GAAG,GAAG,IAAIvB,mBAAmB,CAACoB,KAAK,CAAC;IAC1C,IAAI;MACA,MAAMI,MAAM,GAAG,MAAML,QAAQ,CAACM,IAAI,CAACF,GAAG,CAAC;MACvC,OAAOC,MAAM,CAACE,SAAS,EAAEC,cAAc,KAAK,GAAG;IACnD,CAAC,CAAC,MAAM;MACJ,OAAO,KAAK;IAChB;EACJ;AACJ","ignoreList":[]}
1
+ {"version":3,"file":"resolver/recordTypes/users/CopyUser.js","sources":["../../../../src/resolver/recordTypes/users/CopyUser.ts"],"sourcesContent":["import type {\n ICopyUser,\n ICopyUserHandleParams,\n ICreateCognitoIdentityProviderClientCb\n} from \"./types.js\";\nimport type { LambdaTrigger } from \"~/resolver/lambda/LambdaTrigger.js\";\nimport type { InvokeCommandOutput } from \"@webiny/aws-sdk/client-lambda/index.js\";\nimport type { AdminGetUserCommandInput } from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport { AdminGetUserCommand } from \"@webiny/aws-sdk/client-cognito-identity-provider/index.js\";\nimport type { ICopyUserLambdaPayload } from \"~/types.js\";\n\ninterface IGetUserParams {\n username: string;\n userPoolId: string;\n region: string;\n}\n\nexport interface IGetLambdaTriggerCb {\n (): LambdaTrigger<ICopyUserLambdaPayload>;\n}\n\nexport interface ICopyUserParams {\n createCognitoIdentityProviderClient: ICreateCognitoIdentityProviderClientCb;\n getLambdaTrigger: IGetLambdaTriggerCb;\n}\n\nexport class CopyUser implements ICopyUser {\n private readonly createCognitoIdentityProviderClient: ICreateCognitoIdentityProviderClientCb;\n private readonly getLambdaTrigger: IGetLambdaTriggerCb;\n\n public constructor(params: ICopyUserParams) {\n this.createCognitoIdentityProviderClient = params.createCognitoIdentityProviderClient;\n this.getLambdaTrigger = params.getLambdaTrigger;\n }\n\n public async handle(params: ICopyUserHandleParams): Promise<InvokeCommandOutput | null> {\n const { username, target, source } = params;\n\n const exists = await this.userExists({\n username,\n userPoolId: target.services.cognitoUserPoolId,\n region: target.region\n });\n\n return await this.getLambdaTrigger().handle({\n invocationType: \"Event\",\n payload: {\n /**\n * We need to be able to create or update a user, depending on whether it already exists in the target user pool.\n */\n action: exists ? \"updateUser\" : \"createUser\",\n username,\n source: {\n region: source.region,\n userPoolId: source.services.cognitoUserPoolId\n },\n target: {\n region: target.region,\n userPoolId: target.services.cognitoUserPoolId\n }\n }\n });\n }\n\n private async userExists(params: IGetUserParams): Promise<boolean> {\n const { userPoolId, username, region } = params;\n\n const provider = this.createCognitoIdentityProviderClient({\n region\n });\n\n const input: AdminGetUserCommandInput = {\n UserPoolId: userPoolId,\n Username: username\n };\n const cmd = new AdminGetUserCommand(input);\n try {\n const result = await provider.send(cmd);\n return result.$metadata?.httpStatusCode === 200;\n } catch {\n return false;\n }\n }\n}\n"],"names":["CopyUser","params","username","target","source","exists","userPoolId","region","provider","input","cmd","AdminGetUserCommand","result"],"mappings":";AA0BO,MAAMA;IAIT,YAAmBC,MAAuB,CAAE;QACxC,IAAI,CAAC,mCAAmC,GAAGA,OAAO,mCAAmC;QACrF,IAAI,CAAC,gBAAgB,GAAGA,OAAO,gBAAgB;IACnD;IAEA,MAAa,OAAOA,MAA6B,EAAuC;QACpF,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,MAAM,EAAE,GAAGH;QAErC,MAAMI,SAAS,MAAM,IAAI,CAAC,UAAU,CAAC;YACjCH;YACA,YAAYC,OAAO,QAAQ,CAAC,iBAAiB;YAC7C,QAAQA,OAAO,MAAM;QACzB;QAEA,OAAO,MAAM,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;YACxC,gBAAgB;YAChB,SAAS;gBAIL,QAAQE,SAAS,eAAe;gBAChCH;gBACA,QAAQ;oBACJ,QAAQE,OAAO,MAAM;oBACrB,YAAYA,OAAO,QAAQ,CAAC,iBAAiB;gBACjD;gBACA,QAAQ;oBACJ,QAAQD,OAAO,MAAM;oBACrB,YAAYA,OAAO,QAAQ,CAAC,iBAAiB;gBACjD;YACJ;QACJ;IACJ;IAEA,MAAc,WAAWF,MAAsB,EAAoB;QAC/D,MAAM,EAAEK,UAAU,EAAEJ,QAAQ,EAAEK,MAAM,EAAE,GAAGN;QAEzC,MAAMO,WAAW,IAAI,CAAC,mCAAmC,CAAC;YACtDD;QACJ;QAEA,MAAME,QAAkC;YACpC,YAAYH;YACZ,UAAUJ;QACd;QACA,MAAMQ,MAAM,IAAIC,oBAAoBF;QACpC,IAAI;YACA,MAAMG,SAAS,MAAMJ,SAAS,IAAI,CAACE;YACnC,OAAOE,OAAO,SAAS,EAAE,mBAAmB;QAChD,EAAE,OAAM;YACJ,OAAO;QACX;IACJ;AACJ"}