@webiny/api-sync-system 0.0.0-unstable.e53eceafb5

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 (360) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -0
  3. package/constants.d.ts +1 -0
  4. package/constants.js +9 -0
  5. package/constants.js.map +1 -0
  6. package/index.d.ts +3 -0
  7. package/index.js +40 -0
  8. package/index.js.map +1 -0
  9. package/package.json +45 -0
  10. package/resolver/app/RecordHandler.d.ts +34 -0
  11. package/resolver/app/RecordHandler.js +126 -0
  12. package/resolver/app/RecordHandler.js.map +1 -0
  13. package/resolver/app/RecordsValidation.d.ts +6 -0
  14. package/resolver/app/RecordsValidation.js +29 -0
  15. package/resolver/app/RecordsValidation.js.map +1 -0
  16. package/resolver/app/ResolverApplication.d.ts +14 -0
  17. package/resolver/app/ResolverApplication.js +48 -0
  18. package/resolver/app/ResolverApplication.js.map +1 -0
  19. package/resolver/app/abstractions/RecordHandler.d.ts +7 -0
  20. package/resolver/app/abstractions/RecordHandler.js +7 -0
  21. package/resolver/app/abstractions/RecordHandler.js.map +1 -0
  22. package/resolver/app/abstractions/RecordsValidation.d.ts +14 -0
  23. package/resolver/app/abstractions/RecordsValidation.js +7 -0
  24. package/resolver/app/abstractions/RecordsValidation.js.map +1 -0
  25. package/resolver/app/abstractions/ResolverApplication.d.ts +7 -0
  26. package/resolver/app/abstractions/ResolverApplication.js +7 -0
  27. package/resolver/app/abstractions/ResolverApplication.js.map +1 -0
  28. package/resolver/app/abstractions/ResolverRecord.d.ts +42 -0
  29. package/resolver/app/abstractions/ResolverRecord.js +7 -0
  30. package/resolver/app/abstractions/ResolverRecord.js.map +1 -0
  31. package/resolver/app/bundler/BaseBundle.d.ts +21 -0
  32. package/resolver/app/bundler/BaseBundle.js +26 -0
  33. package/resolver/app/bundler/BaseBundle.js.map +1 -0
  34. package/resolver/app/bundler/Bundler.d.ts +10 -0
  35. package/resolver/app/bundler/Bundler.js +30 -0
  36. package/resolver/app/bundler/Bundler.js.map +1 -0
  37. package/resolver/app/bundler/Bundles.d.ts +14 -0
  38. package/resolver/app/bundler/Bundles.js +38 -0
  39. package/resolver/app/bundler/Bundles.js.map +1 -0
  40. package/resolver/app/bundler/CommandBundle.d.ts +15 -0
  41. package/resolver/app/bundler/CommandBundle.js +28 -0
  42. package/resolver/app/bundler/CommandBundle.js.map +1 -0
  43. package/resolver/app/bundler/TableBundle.d.ts +13 -0
  44. package/resolver/app/bundler/TableBundle.js +25 -0
  45. package/resolver/app/bundler/TableBundle.js.map +1 -0
  46. package/resolver/app/bundler/types.d.ts +29 -0
  47. package/resolver/app/bundler/types.js +7 -0
  48. package/resolver/app/bundler/types.js.map +1 -0
  49. package/resolver/app/commandHandler/DeleteCommandHandler.d.ts +18 -0
  50. package/resolver/app/commandHandler/DeleteCommandHandler.js +39 -0
  51. package/resolver/app/commandHandler/DeleteCommandHandler.js.map +1 -0
  52. package/resolver/app/commandHandler/PutCommandHandler.d.ts +18 -0
  53. package/resolver/app/commandHandler/PutCommandHandler.js +32 -0
  54. package/resolver/app/commandHandler/PutCommandHandler.js.map +1 -0
  55. package/resolver/app/commandHandler/delete.d.ts +2 -0
  56. package/resolver/app/commandHandler/delete.js +24 -0
  57. package/resolver/app/commandHandler/delete.js.map +1 -0
  58. package/resolver/app/commandHandler/put.d.ts +2 -0
  59. package/resolver/app/commandHandler/put.js +24 -0
  60. package/resolver/app/commandHandler/put.js.map +1 -0
  61. package/resolver/app/data/SourceDataContainer.d.ts +12 -0
  62. package/resolver/app/data/SourceDataContainer.js +42 -0
  63. package/resolver/app/data/SourceDataContainer.js.map +1 -0
  64. package/resolver/app/data/types.d.ts +23 -0
  65. package/resolver/app/data/types.js +7 -0
  66. package/resolver/app/data/types.js.map +1 -0
  67. package/resolver/app/fetcher/Fetcher.d.ts +22 -0
  68. package/resolver/app/fetcher/Fetcher.js +132 -0
  69. package/resolver/app/fetcher/Fetcher.js.map +1 -0
  70. package/resolver/app/fetcher/types.d.ts +25 -0
  71. package/resolver/app/fetcher/types.js +7 -0
  72. package/resolver/app/fetcher/types.js.map +1 -0
  73. package/resolver/app/ingestor/Ingestor.d.ts +13 -0
  74. package/resolver/app/ingestor/Ingestor.js +44 -0
  75. package/resolver/app/ingestor/Ingestor.js.map +1 -0
  76. package/resolver/app/ingestor/IngestorResult.d.ts +7 -0
  77. package/resolver/app/ingestor/IngestorResult.js +45 -0
  78. package/resolver/app/ingestor/IngestorResult.js.map +1 -0
  79. package/resolver/app/ingestor/types.d.ts +26 -0
  80. package/resolver/app/ingestor/types.js +7 -0
  81. package/resolver/app/ingestor/types.js.map +1 -0
  82. package/resolver/app/storer/Storer.d.ts +44 -0
  83. package/resolver/app/storer/Storer.js +103 -0
  84. package/resolver/app/storer/Storer.js.map +1 -0
  85. package/resolver/app/storer/types.d.ts +21 -0
  86. package/resolver/app/storer/types.js +7 -0
  87. package/resolver/app/storer/types.js.map +1 -0
  88. package/resolver/app/transform/TransformHandler.d.ts +34 -0
  89. package/resolver/app/transform/TransformHandler.js +70 -0
  90. package/resolver/app/transform/TransformHandler.js.map +1 -0
  91. package/resolver/app/transform/middleware.d.ts +3 -0
  92. package/resolver/app/transform/middleware.js +29 -0
  93. package/resolver/app/transform/middleware.js.map +1 -0
  94. package/resolver/app/utils/Retry.d.ts +18 -0
  95. package/resolver/app/utils/Retry.js +38 -0
  96. package/resolver/app/utils/Retry.js.map +1 -0
  97. package/resolver/app/utils/sleep.d.ts +1 -0
  98. package/resolver/app/utils/sleep.js +14 -0
  99. package/resolver/app/utils/sleep.js.map +1 -0
  100. package/resolver/app/validation/body.d.ts +142 -0
  101. package/resolver/app/validation/body.js +46 -0
  102. package/resolver/app/validation/body.js.map +1 -0
  103. package/resolver/app/validation/createJsonTransform.d.ts +2 -0
  104. package/resolver/app/validation/createJsonTransform.js +24 -0
  105. package/resolver/app/validation/createJsonTransform.js.map +1 -0
  106. package/resolver/app/validation/detail.d.ts +89 -0
  107. package/resolver/app/validation/detail.js +50 -0
  108. package/resolver/app/validation/detail.js.map +1 -0
  109. package/resolver/app/validation/event.d.ts +217 -0
  110. package/resolver/app/validation/event.js +32 -0
  111. package/resolver/app/validation/event.js.map +1 -0
  112. package/resolver/app/validation/numericString.d.ts +2 -0
  113. package/resolver/app/validation/numericString.js +23 -0
  114. package/resolver/app/validation/numericString.js.map +1 -0
  115. package/resolver/app/validation/system.d.ts +20 -0
  116. package/resolver/app/validation/system.js +20 -0
  117. package/resolver/app/validation/system.js.map +1 -0
  118. package/resolver/createEventHandlerPlugin.d.ts +10 -0
  119. package/resolver/createEventHandlerPlugin.js +127 -0
  120. package/resolver/createEventHandlerPlugin.js.map +1 -0
  121. package/resolver/createResolverHandler.d.ts +21 -0
  122. package/resolver/createResolverHandler.js +79 -0
  123. package/resolver/createResolverHandler.js.map +1 -0
  124. package/resolver/deployment/Deployment.d.ts +17 -0
  125. package/resolver/deployment/Deployment.js +50 -0
  126. package/resolver/deployment/Deployment.js.map +1 -0
  127. package/resolver/deployment/Deployments.d.ts +13 -0
  128. package/resolver/deployment/Deployments.js +34 -0
  129. package/resolver/deployment/Deployments.js.map +1 -0
  130. package/resolver/deployment/DeploymentsFetcher.d.ts +16 -0
  131. package/resolver/deployment/DeploymentsFetcher.js +112 -0
  132. package/resolver/deployment/DeploymentsFetcher.js.map +1 -0
  133. package/resolver/deployment/types.d.ts +34 -0
  134. package/resolver/deployment/types.js +7 -0
  135. package/resolver/deployment/types.js.map +1 -0
  136. package/resolver/lambda/LambdaTrigger.d.ts +18 -0
  137. package/resolver/lambda/LambdaTrigger.js +39 -0
  138. package/resolver/lambda/LambdaTrigger.js.map +1 -0
  139. package/resolver/plugins/CommandHandlerPlugin.d.ts +31 -0
  140. package/resolver/plugins/CommandHandlerPlugin.js +27 -0
  141. package/resolver/plugins/CommandHandlerPlugin.js.map +1 -0
  142. package/resolver/plugins/StorerAfterEachPlugin.d.ts +31 -0
  143. package/resolver/plugins/StorerAfterEachPlugin.js +33 -0
  144. package/resolver/plugins/StorerAfterEachPlugin.js.map +1 -0
  145. package/resolver/plugins/TransformRecordPlugin.d.ts +38 -0
  146. package/resolver/plugins/TransformRecordPlugin.js +30 -0
  147. package/resolver/plugins/TransformRecordPlugin.js.map +1 -0
  148. package/resolver/recordTypes/fileManager/CopyFile.d.ts +14 -0
  149. package/resolver/recordTypes/fileManager/CopyFile.js +81 -0
  150. package/resolver/recordTypes/fileManager/CopyFile.js.map +1 -0
  151. package/resolver/recordTypes/fileManager/DeleteFile.d.ts +14 -0
  152. package/resolver/recordTypes/fileManager/DeleteFile.js +72 -0
  153. package/resolver/recordTypes/fileManager/DeleteFile.js.map +1 -0
  154. package/resolver/recordTypes/fileManager/fileManager.d.ts +6 -0
  155. package/resolver/recordTypes/fileManager/fileManager.js +14 -0
  156. package/resolver/recordTypes/fileManager/fileManager.js.map +1 -0
  157. package/resolver/recordTypes/fileManager/fileManagerOnDelete.d.ts +5 -0
  158. package/resolver/recordTypes/fileManager/fileManagerOnDelete.js +48 -0
  159. package/resolver/recordTypes/fileManager/fileManagerOnDelete.js.map +1 -0
  160. package/resolver/recordTypes/fileManager/fileManagerOnPut.d.ts +5 -0
  161. package/resolver/recordTypes/fileManager/fileManagerOnPut.js +48 -0
  162. package/resolver/recordTypes/fileManager/fileManagerOnPut.js.map +1 -0
  163. package/resolver/recordTypes/fileManager/shouldBeHandled.d.ts +2 -0
  164. package/resolver/recordTypes/fileManager/shouldBeHandled.js +37 -0
  165. package/resolver/recordTypes/fileManager/shouldBeHandled.js.map +1 -0
  166. package/resolver/recordTypes/fileManager/types.d.ts +26 -0
  167. package/resolver/recordTypes/fileManager/types.js +7 -0
  168. package/resolver/recordTypes/fileManager/types.js.map +1 -0
  169. package/resolver/recordTypes/users/CopyUser.d.ts +18 -0
  170. package/resolver/recordTypes/users/CopyUser.js +67 -0
  171. package/resolver/recordTypes/users/CopyUser.js.map +1 -0
  172. package/resolver/recordTypes/users/DeleteUser.d.ts +18 -0
  173. package/resolver/recordTypes/users/DeleteUser.js +65 -0
  174. package/resolver/recordTypes/users/DeleteUser.js.map +1 -0
  175. package/resolver/recordTypes/users/shouldBeHandled.d.ts +2 -0
  176. package/resolver/recordTypes/users/shouldBeHandled.js +36 -0
  177. package/resolver/recordTypes/users/shouldBeHandled.js.map +1 -0
  178. package/resolver/recordTypes/users/types.d.ts +24 -0
  179. package/resolver/recordTypes/users/types.js +7 -0
  180. package/resolver/recordTypes/users/types.js.map +1 -0
  181. package/resolver/recordTypes/users/users.d.ts +6 -0
  182. package/resolver/recordTypes/users/users.js +14 -0
  183. package/resolver/recordTypes/users/users.js.map +1 -0
  184. package/resolver/recordTypes/users/usersOnDelete.d.ts +5 -0
  185. package/resolver/recordTypes/users/usersOnDelete.js +47 -0
  186. package/resolver/recordTypes/users/usersOnDelete.js.map +1 -0
  187. package/resolver/recordTypes/users/usersOnPut.d.ts +5 -0
  188. package/resolver/recordTypes/users/usersOnPut.js +48 -0
  189. package/resolver/recordTypes/users/usersOnPut.js.map +1 -0
  190. package/sync/FilterOutRecord.d.ts +11 -0
  191. package/sync/FilterOutRecord.js +29 -0
  192. package/sync/FilterOutRecord.js.map +1 -0
  193. package/sync/attachToDynamoDbDocument.d.ts +11 -0
  194. package/sync/attachToDynamoDbDocument.js +79 -0
  195. package/sync/attachToDynamoDbDocument.js.map +1 -0
  196. package/sync/createHandler.d.ts +14 -0
  197. package/sync/createHandler.js +63 -0
  198. package/sync/createHandler.js.map +1 -0
  199. package/sync/createSendDataToEventBridgeOnRequestEnd.d.ts +2 -0
  200. package/sync/createSendDataToEventBridgeOnRequestEnd.js +51 -0
  201. package/sync/createSendDataToEventBridgeOnRequestEnd.js.map +1 -0
  202. package/sync/createSyncSystem.d.ts +16 -0
  203. package/sync/createSyncSystem.js +42 -0
  204. package/sync/createSyncSystem.js.map +1 -0
  205. package/sync/filter/createDefaultFilterOutRecordPlugins.d.ts +13 -0
  206. package/sync/filter/createDefaultFilterOutRecordPlugins.js +88 -0
  207. package/sync/filter/createDefaultFilterOutRecordPlugins.js.map +1 -0
  208. package/sync/handler/Handler.d.ts +28 -0
  209. package/sync/handler/Handler.js +93 -0
  210. package/sync/handler/Handler.js.map +1 -0
  211. package/sync/handler/HandlerConverter.d.ts +12 -0
  212. package/sync/handler/HandlerConverter.js +43 -0
  213. package/sync/handler/HandlerConverter.js.map +1 -0
  214. package/sync/handler/converter/BatchGetCommandConverter.d.ts +8 -0
  215. package/sync/handler/converter/BatchGetCommandConverter.js +24 -0
  216. package/sync/handler/converter/BatchGetCommandConverter.js.map +1 -0
  217. package/sync/handler/converter/BatchWriteCommandConverter.d.ts +9 -0
  218. package/sync/handler/converter/BatchWriteCommandConverter.js +24 -0
  219. package/sync/handler/converter/BatchWriteCommandConverter.js.map +1 -0
  220. package/sync/handler/converter/DeleteCommandConverter.d.ts +9 -0
  221. package/sync/handler/converter/DeleteCommandConverter.js +24 -0
  222. package/sync/handler/converter/DeleteCommandConverter.js.map +1 -0
  223. package/sync/handler/converter/GetCommandConverter.d.ts +8 -0
  224. package/sync/handler/converter/GetCommandConverter.js +24 -0
  225. package/sync/handler/converter/GetCommandConverter.js.map +1 -0
  226. package/sync/handler/converter/PutCommandConverter.d.ts +9 -0
  227. package/sync/handler/converter/PutCommandConverter.js +24 -0
  228. package/sync/handler/converter/PutCommandConverter.js.map +1 -0
  229. package/sync/handler/converter/QueryCommandConverter.d.ts +8 -0
  230. package/sync/handler/converter/QueryCommandConverter.js +24 -0
  231. package/sync/handler/converter/QueryCommandConverter.js.map +1 -0
  232. package/sync/handler/converter/ScanCommandConverter.d.ts +8 -0
  233. package/sync/handler/converter/ScanCommandConverter.js +24 -0
  234. package/sync/handler/converter/ScanCommandConverter.js.map +1 -0
  235. package/sync/handler/converter/UpdateCommandConverter.d.ts +9 -0
  236. package/sync/handler/converter/UpdateCommandConverter.js +24 -0
  237. package/sync/handler/converter/UpdateCommandConverter.js.map +1 -0
  238. package/sync/handler/converter/commands/BatchWriteCommandValue.d.ts +9 -0
  239. package/sync/handler/converter/commands/BatchWriteCommandValue.js +51 -0
  240. package/sync/handler/converter/commands/BatchWriteCommandValue.js.map +1 -0
  241. package/sync/handler/converter/commands/DeleteCommandValue.d.ts +9 -0
  242. package/sync/handler/converter/commands/DeleteCommandValue.js +27 -0
  243. package/sync/handler/converter/commands/DeleteCommandValue.js.map +1 -0
  244. package/sync/handler/converter/commands/NullCommandValue.d.ts +8 -0
  245. package/sync/handler/converter/commands/NullCommandValue.js +18 -0
  246. package/sync/handler/converter/commands/NullCommandValue.js.map +1 -0
  247. package/sync/handler/converter/commands/PutCommandValue.d.ts +9 -0
  248. package/sync/handler/converter/commands/PutCommandValue.js +27 -0
  249. package/sync/handler/converter/commands/PutCommandValue.js.map +1 -0
  250. package/sync/handler/converter/commands/UpdateCommandValue.d.ts +9 -0
  251. package/sync/handler/converter/commands/UpdateCommandValue.js +27 -0
  252. package/sync/handler/converter/commands/UpdateCommandValue.js.map +1 -0
  253. package/sync/handler/types.d.ts +18 -0
  254. package/sync/handler/types.js +7 -0
  255. package/sync/handler/types.js.map +1 -0
  256. package/sync/plugins/FilterOutRecordPlugin.d.ts +23 -0
  257. package/sync/plugins/FilterOutRecordPlugin.js +31 -0
  258. package/sync/plugins/FilterOutRecordPlugin.js.map +1 -0
  259. package/sync/requestPlugin.d.ts +9 -0
  260. package/sync/requestPlugin.js +59 -0
  261. package/sync/requestPlugin.js.map +1 -0
  262. package/sync/types.d.ts +64 -0
  263. package/sync/types.js +7 -0
  264. package/sync/types.js.map +1 -0
  265. package/sync/utils/getTableType.d.ts +2 -0
  266. package/sync/utils/getTableType.js +22 -0
  267. package/sync/utils/getTableType.js.map +1 -0
  268. package/sync/utils/manifest.d.ts +17 -0
  269. package/sync/utils/manifest.js +52 -0
  270. package/sync/utils/manifest.js.map +1 -0
  271. package/sync/utils/validateSystemInput.d.ts +11 -0
  272. package/sync/utils/validateSystemInput.js +44 -0
  273. package/sync/utils/validateSystemInput.js.map +1 -0
  274. package/types.d.ts +42 -0
  275. package/types.js +15 -0
  276. package/types.js.map +1 -0
  277. package/utils/createSystemName.d.ts +5 -0
  278. package/utils/createSystemName.js +12 -0
  279. package/utils/createSystemName.js.map +1 -0
  280. package/worker/actions/copyFile/CopyFile.d.ts +63 -0
  281. package/worker/actions/copyFile/CopyFile.js +283 -0
  282. package/worker/actions/copyFile/CopyFile.js.map +1 -0
  283. package/worker/actions/copyFile/copyFileAction.d.ts +6 -0
  284. package/worker/actions/copyFile/copyFileAction.js +47 -0
  285. package/worker/actions/copyFile/copyFileAction.js.map +1 -0
  286. package/worker/actions/copyFile/copyFileSchema.d.ts +47 -0
  287. package/worker/actions/copyFile/copyFileSchema.js +25 -0
  288. package/worker/actions/copyFile/copyFileSchema.js.map +1 -0
  289. package/worker/actions/copyFile/types.d.ts +10 -0
  290. package/worker/actions/copyFile/types.js +7 -0
  291. package/worker/actions/copyFile/types.js.map +1 -0
  292. package/worker/actions/createUser/CreateUser.d.ts +17 -0
  293. package/worker/actions/createUser/CreateUser.js +90 -0
  294. package/worker/actions/createUser/CreateUser.js.map +1 -0
  295. package/worker/actions/createUser/createUserAction.d.ts +6 -0
  296. package/worker/actions/createUser/createUserAction.js +42 -0
  297. package/worker/actions/createUser/createUserAction.js.map +1 -0
  298. package/worker/actions/createUser/createUserSchema.d.ts +47 -0
  299. package/worker/actions/createUser/createUserSchema.js +25 -0
  300. package/worker/actions/createUser/createUserSchema.js.map +1 -0
  301. package/worker/actions/createUser/types.d.ts +10 -0
  302. package/worker/actions/createUser/types.js +7 -0
  303. package/worker/actions/createUser/types.js.map +1 -0
  304. package/worker/actions/deleteFile/DeleteFile.d.ts +24 -0
  305. package/worker/actions/deleteFile/DeleteFile.js +82 -0
  306. package/worker/actions/deleteFile/DeleteFile.js.map +1 -0
  307. package/worker/actions/deleteFile/deleteFileAction.d.ts +6 -0
  308. package/worker/actions/deleteFile/deleteFileAction.js +42 -0
  309. package/worker/actions/deleteFile/deleteFileAction.js.map +1 -0
  310. package/worker/actions/deleteFile/deleteFileSchema.d.ts +47 -0
  311. package/worker/actions/deleteFile/deleteFileSchema.js +25 -0
  312. package/worker/actions/deleteFile/deleteFileSchema.js.map +1 -0
  313. package/worker/actions/deleteFile/types.d.ts +9 -0
  314. package/worker/actions/deleteFile/types.js +7 -0
  315. package/worker/actions/deleteFile/types.js.map +1 -0
  316. package/worker/actions/deleteUser/DeleteUser.d.ts +16 -0
  317. package/worker/actions/deleteUser/DeleteUser.js +67 -0
  318. package/worker/actions/deleteUser/DeleteUser.js.map +1 -0
  319. package/worker/actions/deleteUser/deleteUserAction.d.ts +6 -0
  320. package/worker/actions/deleteUser/deleteUserAction.js +40 -0
  321. package/worker/actions/deleteUser/deleteUserAction.js.map +1 -0
  322. package/worker/actions/deleteUser/deleteUserSchema.d.ts +29 -0
  323. package/worker/actions/deleteUser/deleteUserSchema.js +24 -0
  324. package/worker/actions/deleteUser/deleteUserSchema.js.map +1 -0
  325. package/worker/actions/deleteUser/types.d.ts +9 -0
  326. package/worker/actions/deleteUser/types.js +7 -0
  327. package/worker/actions/deleteUser/types.js.map +1 -0
  328. package/worker/actions/logValidationError.d.ts +2 -0
  329. package/worker/actions/logValidationError.js +17 -0
  330. package/worker/actions/logValidationError.js.map +1 -0
  331. package/worker/actions/removeCognitoUserAttributes.d.ts +6 -0
  332. package/worker/actions/removeCognitoUserAttributes.js +24 -0
  333. package/worker/actions/removeCognitoUserAttributes.js.map +1 -0
  334. package/worker/actions/updateUser/UpdateUser.d.ts +17 -0
  335. package/worker/actions/updateUser/UpdateUser.js +81 -0
  336. package/worker/actions/updateUser/UpdateUser.js.map +1 -0
  337. package/worker/actions/updateUser/types.d.ts +10 -0
  338. package/worker/actions/updateUser/types.js +7 -0
  339. package/worker/actions/updateUser/types.js.map +1 -0
  340. package/worker/actions/updateUser/updateUserAction.d.ts +6 -0
  341. package/worker/actions/updateUser/updateUserAction.js +42 -0
  342. package/worker/actions/updateUser/updateUserAction.js.map +1 -0
  343. package/worker/actions/updateUser/updateUserSchema.d.ts +47 -0
  344. package/worker/actions/updateUser/updateUserSchema.js +25 -0
  345. package/worker/actions/updateUser/updateUserSchema.js.map +1 -0
  346. package/worker/createWorkerHandler.d.ts +11 -0
  347. package/worker/createWorkerHandler.js +48 -0
  348. package/worker/createWorkerHandler.js.map +1 -0
  349. package/worker/handler/WorkerActionHandler.d.ts +10 -0
  350. package/worker/handler/WorkerActionHandler.js +33 -0
  351. package/worker/handler/WorkerActionHandler.js.map +1 -0
  352. package/worker/handler/eventHandler.d.ts +1 -0
  353. package/worker/handler/eventHandler.js +31 -0
  354. package/worker/handler/eventHandler.js.map +1 -0
  355. package/worker/plugins/WorkerActionPlugin.d.ts +10 -0
  356. package/worker/plugins/WorkerActionPlugin.js +28 -0
  357. package/worker/plugins/WorkerActionPlugin.js.map +1 -0
  358. package/worker/types.d.ts +14 -0
  359. package/worker/types.js +7 -0
  360. package/worker/types.js.map +1 -0
@@ -0,0 +1,44 @@
1
+ "use strict";
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 => {
9
+ const {
10
+ env,
11
+ region,
12
+ variant,
13
+ version
14
+ } = input;
15
+ if (!env) {
16
+ return {
17
+ error: "Sync System: No environment variable provided. Sync System will not be attached."
18
+ };
19
+ } else if (!region) {
20
+ return {
21
+ error: "Sync System: No region variable provided. Sync System will not be attached."
22
+ };
23
+ } else if (!version) {
24
+ return {
25
+ error: "Sync System: No version variable provided. Sync System will not be attached."
26
+ };
27
+ }
28
+ const name = (0, _createSystemName.createSystemName)({
29
+ env,
30
+ variant
31
+ });
32
+ return {
33
+ system: {
34
+ env,
35
+ name,
36
+ region,
37
+ variant,
38
+ version
39
+ }
40
+ };
41
+ };
42
+ exports.validateSystemInput = validateSystemInput;
43
+
44
+ //# sourceMappingURL=validateSystemInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_createSystemName","require","validateSystemInput","input","env","region","variant","version","error","name","createSystemName","system","exports"],"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,IAAAA,iBAAA,GAAAC,OAAA;AAcO,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,GAAG,IAAAC,kCAAgB,EAAC;IAC1BN,GAAG;IACHE;EACJ,CAAC,CAAC;EAEF,OAAO;IACHK,MAAM,EAAE;MACJP,GAAG;MACHK,IAAI;MACJJ,MAAM;MACNC,OAAO;MACPC;IACJ;EACJ,CAAC;AACL,CAAC;AAACK,OAAA,CAAAV,mBAAA,GAAAA,mBAAA","ignoreList":[]}
package/types.d.ts ADDED
@@ -0,0 +1,42 @@
1
+ import type { Context as BaseContext } from "@webiny/handler-aws/types";
2
+ export type CommandType = "put" | "delete";
3
+ export type ExtendedCommandType = "put" | "delete" | "update";
4
+ export type AllCommandType = ExtendedCommandType | "batchWrite" | "null";
5
+ export declare enum DynamoDBTableType {
6
+ REGULAR = "regular",
7
+ ELASTICSEARCH = "elasticsearch",
8
+ LOG = "log",
9
+ UNKNOWN = "unknown"
10
+ }
11
+ export interface Context extends BaseContext {
12
+ }
13
+ export interface IFileLambdaPayloadInfo {
14
+ bucket: string;
15
+ region: string;
16
+ }
17
+ export interface ICopyFileLambdaPayload {
18
+ action: "copyFile";
19
+ key: string;
20
+ source: IFileLambdaPayloadInfo;
21
+ target: IFileLambdaPayloadInfo;
22
+ }
23
+ export interface IDeleteFileLambdaPayload {
24
+ action: "deleteFile";
25
+ key: string;
26
+ target: IFileLambdaPayloadInfo;
27
+ }
28
+ export interface IUserLambdaPayloadInfo {
29
+ region: string;
30
+ userPoolId: string;
31
+ }
32
+ export interface IDeleteUserLambdaPayload {
33
+ action: "deleteUser";
34
+ username: string;
35
+ target: IUserLambdaPayloadInfo;
36
+ }
37
+ export interface ICopyUserLambdaPayload {
38
+ action: "createUser" | "updateUser";
39
+ username: string;
40
+ source: IUserLambdaPayloadInfo;
41
+ target: IUserLambdaPayloadInfo;
42
+ }
package/types.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DynamoDBTableType = void 0;
7
+ let DynamoDBTableType = exports.DynamoDBTableType = /*#__PURE__*/function (DynamoDBTableType) {
8
+ DynamoDBTableType["REGULAR"] = "regular";
9
+ DynamoDBTableType["ELASTICSEARCH"] = "elasticsearch";
10
+ DynamoDBTableType["LOG"] = "log";
11
+ DynamoDBTableType["UNKNOWN"] = "unknown";
12
+ return DynamoDBTableType;
13
+ }({});
14
+
15
+ //# sourceMappingURL=types.js.map
package/types.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DynamoDBTableType","exports"],"sources":["types.ts"],"sourcesContent":["import type { Context as BaseContext } from \"@webiny/handler-aws/types\";\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 ELASTICSEARCH = \"elasticsearch\",\n LOG = \"log\",\n UNKNOWN = \"unknown\"\n}\n\nexport interface Context extends 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":";;;;;;IAMYA,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ export interface ICreateSystemNameParams {
2
+ env: string;
3
+ variant: string | undefined;
4
+ }
5
+ export declare const createSystemName: (params: ICreateSystemNameParams) => string;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createSystemName = void 0;
7
+ const createSystemName = params => {
8
+ return [params.env, params.variant].filter(Boolean).join("#");
9
+ };
10
+ exports.createSystemName = createSystemName;
11
+
12
+ //# sourceMappingURL=createSystemName.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createSystemName","params","env","variant","filter","Boolean","join","exports"],"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":";;;;;;AAKO,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;AAACC,OAAA,CAAAP,gBAAA,GAAAA,gBAAA","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ import type { CompletedPart, S3Client, S3ClientConfig } from "@webiny/aws-sdk/client-s3/index.js";
2
+ type ByteSize = number | `${number}B` | `${number}KB` | `${number}MB` | `${number}GB`;
3
+ export interface ICopyFileParams {
4
+ createS3Client: (config: Partial<S3ClientConfig>) => Pick<S3Client, "send">;
5
+ sourceRegion: string;
6
+ targetRegion: string;
7
+ maxConcurrency?: number;
8
+ minPartSize?: ByteSize;
9
+ maxPartSize?: ByteSize;
10
+ }
11
+ export interface ICopyParams {
12
+ key: string;
13
+ sourceBucket: string;
14
+ targetBucket: string;
15
+ }
16
+ export interface IHeadObjectParams {
17
+ client: Pick<S3Client, "send">;
18
+ bucket: string;
19
+ key: string;
20
+ }
21
+ export interface ICreateMultipartUploadParams {
22
+ targetBucket: string;
23
+ targetKey: string;
24
+ }
25
+ export interface IUploadPartCopyParams {
26
+ sourceBucket: string;
27
+ sourceKey: string;
28
+ targetBucket: string;
29
+ targetKey: string;
30
+ uploadId: string;
31
+ partNumber: number;
32
+ start: number;
33
+ end: number;
34
+ completedParts: CompletedPart[];
35
+ }
36
+ export interface ICompleteMultipartUploadParams {
37
+ targetBucket: string;
38
+ targetKey: string;
39
+ uploadId: string;
40
+ completedParts: CompletedPart[];
41
+ }
42
+ export interface IAbortMultipartUploadParams {
43
+ targetBucket: string;
44
+ targetKey: string;
45
+ uploadId: string;
46
+ }
47
+ export declare class CopyFile {
48
+ private readonly sourceClient;
49
+ private readonly targetClient;
50
+ private readonly maxConcurrency;
51
+ private readonly minPartSizeBytes;
52
+ private readonly maxPartSizeBytes;
53
+ constructor(params: ICopyFileParams);
54
+ copy(params: ICopyParams): Promise<void>;
55
+ private parseByteSize;
56
+ private headObject;
57
+ private createMultipartUpload;
58
+ private uploadPartCopy;
59
+ private completeMultipartUpload;
60
+ private abortMultipartUpload;
61
+ private copyMetadata;
62
+ }
63
+ export {};
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
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 {
12
+ constructor(params) {
13
+ const {
14
+ createS3Client,
15
+ sourceRegion,
16
+ targetRegion,
17
+ maxConcurrency = 100,
18
+ minPartSize = "5MB",
19
+ maxPartSize = "1GB"
20
+ } = params;
21
+ this.sourceClient = createS3Client({
22
+ region: sourceRegion
23
+ });
24
+ this.targetClient = createS3Client({
25
+ region: targetRegion
26
+ });
27
+ this.maxConcurrency = maxConcurrency;
28
+ this.minPartSizeBytes = this.parseByteSize(minPartSize);
29
+ this.maxPartSizeBytes = this.parseByteSize(maxPartSize);
30
+ if (this.minPartSizeBytes < 5 * 1024 * 1024) {
31
+ throw new Error("minPartSize must be at least 5MB.");
32
+ }
33
+ }
34
+ async copy(params) {
35
+ const {
36
+ key,
37
+ sourceBucket,
38
+ targetBucket
39
+ } = params;
40
+ const sourceHead = await this.headObject({
41
+ client: this.sourceClient,
42
+ bucket: sourceBucket,
43
+ key
44
+ });
45
+ if (!sourceHead?.ContentLength || !sourceHead.ETag) {
46
+ throw new Error("Source object metadata is invalid or missing.");
47
+ }
48
+ /**
49
+ * If the target object already exists, we can skip the copy operation.
50
+ */
51
+ const targetHead = await this.headObject({
52
+ client: this.targetClient,
53
+ bucket: targetBucket,
54
+ key
55
+ });
56
+ if (targetHead) {
57
+ return;
58
+ }
59
+ const totalSize = sourceHead.ContentLength;
60
+ let partSize = Math.max(this.minPartSizeBytes, Math.min(this.maxPartSizeBytes, Math.ceil(totalSize / this.maxConcurrency)));
61
+ partSize = Math.min(partSize, totalSize);
62
+ const uploadId = await this.createMultipartUpload({
63
+ targetBucket,
64
+ targetKey: key
65
+ });
66
+ const completedParts = [];
67
+ try {
68
+ let partNumber = 1;
69
+ let start = 0;
70
+ const promises = [];
71
+ let active = 0;
72
+ while (start < totalSize) {
73
+ const end = Math.min(start + partSize - 1, totalSize - 1);
74
+ const copyPromise = this.uploadPartCopy({
75
+ sourceBucket,
76
+ sourceKey: key,
77
+ targetBucket,
78
+ targetKey: key,
79
+ uploadId,
80
+ partNumber,
81
+ start,
82
+ end,
83
+ completedParts
84
+ });
85
+ promises.push(copyPromise);
86
+ active++;
87
+ if (active >= this.maxConcurrency) {
88
+ await Promise.race(promises);
89
+ active--;
90
+ }
91
+ partNumber++;
92
+ start += partSize;
93
+ }
94
+ await Promise.all(promises);
95
+ /**
96
+ * Complete the multipart upload with all the completed parts.
97
+ */
98
+ await this.completeMultipartUpload({
99
+ targetBucket,
100
+ targetKey: key,
101
+ uploadId,
102
+ completedParts
103
+ });
104
+ } catch (ex) {
105
+ await this.abortMultipartUpload({
106
+ targetBucket,
107
+ targetKey: key,
108
+ uploadId
109
+ });
110
+ throw ex;
111
+ }
112
+ /**
113
+ * And then copy the metadata file.
114
+ */
115
+
116
+ try {
117
+ await this.copyMetadata({
118
+ sourceBucket,
119
+ targetBucket,
120
+ key
121
+ });
122
+ } catch (ex) {
123
+ console.error(`Failed to copy metadata for ${key} from ${sourceBucket} to ${targetBucket}.`);
124
+ console.log((0, _utils.convertException)(ex));
125
+ }
126
+ }
127
+ parseByteSize(value) {
128
+ if (typeof value === "number") {
129
+ return value;
130
+ }
131
+ const parsed = _bytes.default.parse(value);
132
+ if (typeof parsed === "number") {
133
+ return parsed;
134
+ }
135
+ const typeOfValue = typeof value;
136
+ throw new Error(`Invalid byte size value type "${typeOfValue}".`);
137
+ }
138
+ async headObject(params) {
139
+ const {
140
+ client,
141
+ bucket,
142
+ key
143
+ } = params;
144
+ const input = {
145
+ Bucket: bucket,
146
+ Key: key
147
+ };
148
+ const command = new _index.HeadObjectCommand(input);
149
+ try {
150
+ const result = await client.send(command);
151
+ if (result.$metadata?.httpStatusCode === 200) {
152
+ return result;
153
+ }
154
+ } catch (ex) {
155
+ if (ex.name === "NotFound" || ex.$metadata?.httpStatusCode === 404) {
156
+ return null;
157
+ }
158
+ console.error(`Failed to head object ${key} in bucket ${bucket}.`);
159
+ console.log((0, _utils.convertException)(ex));
160
+ }
161
+ return null;
162
+ }
163
+ async createMultipartUpload(params) {
164
+ const {
165
+ targetBucket,
166
+ targetKey
167
+ } = params;
168
+ const input = {
169
+ Bucket: targetBucket,
170
+ Key: targetKey
171
+ };
172
+ const command = new _index.CreateMultipartUploadCommand(input);
173
+ const response = await this.targetClient.send(command);
174
+ if (!response.UploadId) {
175
+ throw new Error("Failed to create multipart upload.");
176
+ }
177
+ return response.UploadId;
178
+ }
179
+ async uploadPartCopy(params) {
180
+ const {
181
+ sourceBucket,
182
+ sourceKey,
183
+ targetBucket,
184
+ targetKey,
185
+ uploadId,
186
+ partNumber,
187
+ start,
188
+ end,
189
+ completedParts
190
+ } = params;
191
+ const input = {
192
+ Bucket: targetBucket,
193
+ Key: targetKey,
194
+ UploadId: uploadId,
195
+ PartNumber: partNumber,
196
+ CopySource: encodeURIComponent(`${sourceBucket}/${sourceKey}`),
197
+ CopySourceRange: `bytes=${start}-${end}`
198
+ };
199
+ const command = new _index.UploadPartCopyCommand(input);
200
+ const response = await this.targetClient.send(command);
201
+ if (!response.CopyPartResult?.ETag) {
202
+ throw new Error(`UploadPartCopy failed for part ${partNumber}`);
203
+ }
204
+ completedParts.push({
205
+ ETag: response.CopyPartResult.ETag,
206
+ PartNumber: partNumber
207
+ });
208
+ }
209
+ async completeMultipartUpload(params) {
210
+ const {
211
+ targetBucket,
212
+ targetKey,
213
+ uploadId,
214
+ completedParts
215
+ } = params;
216
+ const sortedParts = [...completedParts].sort((a, b) => {
217
+ return a.PartNumber - b.PartNumber;
218
+ });
219
+ const input = {
220
+ Bucket: targetBucket,
221
+ Key: targetKey,
222
+ UploadId: uploadId,
223
+ MultipartUpload: {
224
+ Parts: sortedParts
225
+ }
226
+ };
227
+ const command = new _index.CompleteMultipartUploadCommand(input);
228
+ return await this.targetClient.send(command);
229
+ }
230
+ async abortMultipartUpload(params) {
231
+ const {
232
+ targetBucket,
233
+ targetKey,
234
+ uploadId
235
+ } = params;
236
+ const input = {
237
+ Bucket: targetBucket,
238
+ Key: targetKey,
239
+ UploadId: uploadId
240
+ };
241
+ const command = new _index.AbortMultipartUploadCommand(input);
242
+ await this.targetClient.send(command);
243
+ }
244
+ async copyMetadata(params) {
245
+ const {
246
+ sourceBucket,
247
+ targetBucket,
248
+ key
249
+ } = params;
250
+ const metadataKey = `${key}.metadata`;
251
+ const [sourceMetadata, targetMetadata] = await Promise.all([this.headObject({
252
+ client: this.sourceClient,
253
+ bucket: sourceBucket,
254
+ key: metadataKey
255
+ }).catch(() => null), this.headObject({
256
+ client: this.targetClient,
257
+ bucket: targetBucket,
258
+ key: metadataKey
259
+ }).catch(() => null)]);
260
+ /**
261
+ * If the source metadata does not exist, we cannot copy it.
262
+ */
263
+ if (!sourceMetadata?.ETag) {
264
+ return null;
265
+ }
266
+ /**
267
+ * If the target metadata already exists, we can skip copying it.
268
+ */
269
+ if (targetMetadata) {
270
+ return null;
271
+ }
272
+ const input = {
273
+ Bucket: targetBucket,
274
+ Key: metadataKey,
275
+ CopySource: encodeURIComponent(`${sourceBucket}/${metadataKey}`)
276
+ };
277
+ const command = new _index.CopyObjectCommand(input);
278
+ return await this.targetClient.send(command);
279
+ }
280
+ }
281
+ exports.CopyFile = CopyFile;
282
+
283
+ //# sourceMappingURL=CopyFile.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,6 @@
1
+ import type { S3Client, S3ClientConfig } from "@webiny/aws-sdk/client-s3/index.js";
2
+ import type { ICopyFileActionEvent } from "./types.js";
3
+ export interface ICreateCopyFileActionParams {
4
+ createS3Client: (config: Partial<S3ClientConfig>) => Pick<S3Client, "send">;
5
+ }
6
+ export declare const createCopyFileAction: ({ createS3Client }: ICreateCopyFileActionParams) => import("../../plugins/WorkerActionPlugin.js").WorkerActionPlugin<ICopyFileActionEvent>;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createCopyFileAction = void 0;
7
+ var _WorkerActionPlugin = require("../../plugins/WorkerActionPlugin.js");
8
+ var _CopyFile = require("./CopyFile.js");
9
+ var _copyFileSchema = require("./copyFileSchema.js");
10
+ var _logValidationError = require("../logValidationError.js");
11
+ const createCopyFileAction = ({
12
+ createS3Client
13
+ }) => {
14
+ return (0, _WorkerActionPlugin.createWorkerActionPlugin)({
15
+ name: "sync.worker.action.copyFile",
16
+ parse(input) {
17
+ const schema = (0, _copyFileSchema.createCopyFileSchema)();
18
+ const result = schema.safeParse(input);
19
+ if (!result.success || result.error) {
20
+ (0, _logValidationError.logValidationError)(result.error);
21
+ return undefined;
22
+ }
23
+ return result.data;
24
+ },
25
+ async handle(params) {
26
+ const {
27
+ data
28
+ } = params;
29
+ const copyFile = new _CopyFile.CopyFile({
30
+ createS3Client,
31
+ sourceRegion: data.source.region,
32
+ targetRegion: data.target.region,
33
+ maxConcurrency: undefined,
34
+ maxPartSize: undefined,
35
+ minPartSize: undefined
36
+ });
37
+ return copyFile.copy({
38
+ key: data.key,
39
+ sourceBucket: data.source.bucket,
40
+ targetBucket: data.target.bucket
41
+ });
42
+ }
43
+ });
44
+ };
45
+ exports.createCopyFileAction = createCopyFileAction;
46
+
47
+ //# sourceMappingURL=copyFileAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_WorkerActionPlugin","require","_CopyFile","_copyFileSchema","_logValidationError","createCopyFileAction","createS3Client","createWorkerActionPlugin","name","parse","input","schema","createCopyFileSchema","result","safeParse","success","error","logValidationError","undefined","data","handle","params","copyFile","CopyFile","sourceRegion","source","region","targetRegion","target","maxConcurrency","maxPartSize","minPartSize","copy","key","sourceBucket","bucket","targetBucket","exports"],"sources":["copyFileAction.ts"],"sourcesContent":["import { createWorkerActionPlugin } from \"~/worker/plugins/WorkerActionPlugin.js\";\nimport { CopyFile } from \"./CopyFile.js\";\nimport type { S3Client, S3ClientConfig } from \"@webiny/aws-sdk/client-s3/index.js\";\nimport type { ICopyFileActionEvent } from \"./types.js\";\nimport { createCopyFileSchema } from \"./copyFileSchema.js\";\nimport { logValidationError } from \"~/worker/actions/logValidationError.js\";\n\nexport interface ICreateCopyFileActionParams {\n createS3Client: (config: Partial<S3ClientConfig>) => Pick<S3Client, \"send\">;\n}\n\nexport const createCopyFileAction = ({ createS3Client }: ICreateCopyFileActionParams) => {\n return createWorkerActionPlugin<ICopyFileActionEvent>({\n name: \"sync.worker.action.copyFile\",\n parse(input) {\n const schema = createCopyFileSchema();\n const result = schema.safeParse(input);\n if (!result.success || result.error) {\n logValidationError(result.error);\n return undefined;\n }\n return result.data;\n },\n async handle(params) {\n const { data } = params;\n const copyFile = new CopyFile({\n createS3Client,\n sourceRegion: data.source.region,\n targetRegion: data.target.region,\n maxConcurrency: undefined,\n maxPartSize: undefined,\n minPartSize: undefined\n });\n return copyFile.copy({\n key: data.key,\n sourceBucket: data.source.bucket,\n targetBucket: data.target.bucket\n });\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAGA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAH,OAAA;AAMO,MAAMI,oBAAoB,GAAGA,CAAC;EAAEC;AAA4C,CAAC,KAAK;EACrF,OAAO,IAAAC,4CAAwB,EAAuB;IAClDC,IAAI,EAAE,6BAA6B;IACnCC,KAAKA,CAACC,KAAK,EAAE;MACT,MAAMC,MAAM,GAAG,IAAAC,oCAAoB,EAAC,CAAC;MACrC,MAAMC,MAAM,GAAGF,MAAM,CAACG,SAAS,CAACJ,KAAK,CAAC;MACtC,IAAI,CAACG,MAAM,CAACE,OAAO,IAAIF,MAAM,CAACG,KAAK,EAAE;QACjC,IAAAC,sCAAkB,EAACJ,MAAM,CAACG,KAAK,CAAC;QAChC,OAAOE,SAAS;MACpB;MACA,OAAOL,MAAM,CAACM,IAAI;IACtB,CAAC;IACD,MAAMC,MAAMA,CAACC,MAAM,EAAE;MACjB,MAAM;QAAEF;MAAK,CAAC,GAAGE,MAAM;MACvB,MAAMC,QAAQ,GAAG,IAAIC,kBAAQ,CAAC;QAC1BjB,cAAc;QACdkB,YAAY,EAAEL,IAAI,CAACM,MAAM,CAACC,MAAM;QAChCC,YAAY,EAAER,IAAI,CAACS,MAAM,CAACF,MAAM;QAChCG,cAAc,EAAEX,SAAS;QACzBY,WAAW,EAAEZ,SAAS;QACtBa,WAAW,EAAEb;MACjB,CAAC,CAAC;MACF,OAAOI,QAAQ,CAACU,IAAI,CAAC;QACjBC,GAAG,EAAEd,IAAI,CAACc,GAAG;QACbC,YAAY,EAAEf,IAAI,CAACM,MAAM,CAACU,MAAM;QAChCC,YAAY,EAAEjB,IAAI,CAACS,MAAM,CAACO;MAC9B,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAACE,OAAA,CAAAhC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ import zod from "zod";
2
+ export declare const createCopyFileSchema: () => zod.ZodObject<{
3
+ action: zod.ZodEnum<["copyFile"]>;
4
+ key: zod.ZodString;
5
+ source: zod.ZodObject<{
6
+ bucket: zod.ZodString;
7
+ region: zod.ZodString;
8
+ }, "strip", zod.ZodTypeAny, {
9
+ region: string;
10
+ bucket: string;
11
+ }, {
12
+ region: string;
13
+ bucket: string;
14
+ }>;
15
+ target: zod.ZodObject<{
16
+ bucket: zod.ZodString;
17
+ region: zod.ZodString;
18
+ }, "strip", zod.ZodTypeAny, {
19
+ region: string;
20
+ bucket: string;
21
+ }, {
22
+ region: string;
23
+ bucket: string;
24
+ }>;
25
+ }, "strip", zod.ZodTypeAny, {
26
+ key: string;
27
+ source: {
28
+ region: string;
29
+ bucket: string;
30
+ };
31
+ action: "copyFile";
32
+ target: {
33
+ region: string;
34
+ bucket: string;
35
+ };
36
+ }, {
37
+ key: string;
38
+ source: {
39
+ region: string;
40
+ bucket: string;
41
+ };
42
+ action: "copyFile";
43
+ target: {
44
+ region: string;
45
+ bucket: string;
46
+ };
47
+ }>;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createCopyFileSchema = void 0;
8
+ var _zod = _interopRequireDefault(require("zod"));
9
+ const createDataSchema = type => {
10
+ return _zod.default.object({
11
+ bucket: _zod.default.string().min(1, `${type} Bucket is required.`),
12
+ region: _zod.default.string().min(1, `${type} Region is required.`)
13
+ });
14
+ };
15
+ const createCopyFileSchema = () => {
16
+ return _zod.default.object({
17
+ action: _zod.default.enum(["copyFile"]),
18
+ key: _zod.default.string().min(1, "Key is required."),
19
+ source: createDataSchema("Source"),
20
+ target: createDataSchema("Target")
21
+ });
22
+ };
23
+ exports.createCopyFileSchema = createCopyFileSchema;
24
+
25
+ //# sourceMappingURL=copyFileSchema.js.map