@webiny/pulumi-aws 0.0.0-ee-vpcs.549378cf03

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 (153) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +328 -0
  3. package/apps/admin/createAdminPulumiApp.d.ts +24 -0
  4. package/apps/admin/createAdminPulumiApp.js +21 -0
  5. package/apps/admin/createAdminPulumiApp.js.map +1 -0
  6. package/apps/admin/index.d.ts +1 -0
  7. package/apps/admin/index.js +18 -0
  8. package/apps/admin/index.js.map +1 -0
  9. package/apps/api/ApiApwScheduler.d.ts +20 -0
  10. package/apps/api/ApiApwScheduler.js +246 -0
  11. package/apps/api/ApiApwScheduler.js.map +1 -0
  12. package/apps/api/ApiCloudfront.d.ts +3 -0
  13. package/apps/api/ApiCloudfront.js +101 -0
  14. package/apps/api/ApiCloudfront.js.map +1 -0
  15. package/apps/api/ApiFileManager.d.ts +10 -0
  16. package/apps/api/ApiFileManager.js +166 -0
  17. package/apps/api/ApiFileManager.js.map +1 -0
  18. package/apps/api/ApiGateway.d.ts +18 -0
  19. package/apps/api/ApiGateway.js +88 -0
  20. package/apps/api/ApiGateway.js.map +1 -0
  21. package/apps/api/ApiGraphql.d.ts +26 -0
  22. package/apps/api/ApiGraphql.js +167 -0
  23. package/apps/api/ApiGraphql.js.map +1 -0
  24. package/apps/api/ApiHeadlessCMS.d.ts +13 -0
  25. package/apps/api/ApiHeadlessCMS.js +94 -0
  26. package/apps/api/ApiHeadlessCMS.js.map +1 -0
  27. package/apps/api/ApiOutput.d.ts +15 -0
  28. package/apps/api/ApiOutput.js +43 -0
  29. package/apps/api/ApiOutput.js.map +1 -0
  30. package/apps/api/ApiPageBuilder.d.ts +24 -0
  31. package/apps/api/ApiPageBuilder.js +248 -0
  32. package/apps/api/ApiPageBuilder.js.map +1 -0
  33. package/apps/api/createApiPulumiApp.d.ts +71 -0
  34. package/apps/api/createApiPulumiApp.js +188 -0
  35. package/apps/api/createApiPulumiApp.js.map +1 -0
  36. package/apps/api/index.d.ts +9 -0
  37. package/apps/api/index.js +122 -0
  38. package/apps/api/index.js.map +1 -0
  39. package/apps/awsUtils.d.ts +3 -0
  40. package/apps/awsUtils.js +23 -0
  41. package/apps/awsUtils.js.map +1 -0
  42. package/apps/common/CoreOutput.d.ts +21 -0
  43. package/apps/common/CoreOutput.js +50 -0
  44. package/apps/common/CoreOutput.js.map +1 -0
  45. package/apps/common/VpcConfig.d.ts +8 -0
  46. package/apps/common/VpcConfig.js +37 -0
  47. package/apps/common/VpcConfig.js.map +1 -0
  48. package/apps/common/index.d.ts +2 -0
  49. package/apps/common/index.js +31 -0
  50. package/apps/common/index.js.map +1 -0
  51. package/apps/core/CoreCognito.d.ts +10 -0
  52. package/apps/core/CoreCognito.js +100 -0
  53. package/apps/core/CoreCognito.js.map +1 -0
  54. package/apps/core/CoreDynamo.d.ts +5 -0
  55. package/apps/core/CoreDynamo.js +51 -0
  56. package/apps/core/CoreDynamo.js.map +1 -0
  57. package/apps/core/CoreElasticSearch.d.ts +16 -0
  58. package/apps/core/CoreElasticSearch.js +286 -0
  59. package/apps/core/CoreElasticSearch.js.map +1 -0
  60. package/apps/core/CoreEventBus.d.ts +1 -0
  61. package/apps/core/CoreEventBus.js +25 -0
  62. package/apps/core/CoreEventBus.js.map +1 -0
  63. package/apps/core/CoreFileManager.d.ts +8 -0
  64. package/apps/core/CoreFileManager.js +55 -0
  65. package/apps/core/CoreFileManager.js.map +1 -0
  66. package/apps/core/CoreVpc.d.ts +13 -0
  67. package/apps/core/CoreVpc.js +148 -0
  68. package/apps/core/CoreVpc.js.map +1 -0
  69. package/apps/core/createCorePulumiApp.d.ts +64 -0
  70. package/apps/core/createCorePulumiApp.js +104 -0
  71. package/apps/core/createCorePulumiApp.js.map +1 -0
  72. package/apps/core/index.d.ts +6 -0
  73. package/apps/core/index.js +83 -0
  74. package/apps/core/index.js.map +1 -0
  75. package/apps/createAppBucket.d.ts +13 -0
  76. package/apps/createAppBucket.js +106 -0
  77. package/apps/createAppBucket.js.map +1 -0
  78. package/apps/customDomain.d.ts +9 -0
  79. package/apps/customDomain.js +14 -0
  80. package/apps/customDomain.js.map +1 -0
  81. package/apps/index.d.ts +7 -0
  82. package/apps/index.js +100 -0
  83. package/apps/index.js.map +1 -0
  84. package/apps/lambdaUtils.d.ts +10 -0
  85. package/apps/lambdaUtils.js +82 -0
  86. package/apps/lambdaUtils.js.map +1 -0
  87. package/apps/react/createReactPulumiApp.d.ts +33 -0
  88. package/apps/react/createReactPulumiApp.js +144 -0
  89. package/apps/react/createReactPulumiApp.js.map +1 -0
  90. package/apps/react/index.d.ts +1 -0
  91. package/apps/react/index.js +18 -0
  92. package/apps/react/index.js.map +1 -0
  93. package/apps/tenantRouter.d.ts +3 -0
  94. package/apps/tenantRouter.js +115 -0
  95. package/apps/tenantRouter.js.map +1 -0
  96. package/apps/website/WebsitePrerendering.d.ts +39 -0
  97. package/apps/website/WebsitePrerendering.js +300 -0
  98. package/apps/website/WebsitePrerendering.js.map +1 -0
  99. package/apps/website/createWebsitePulumiApp.d.ts +74 -0
  100. package/apps/website/createWebsitePulumiApp.js +246 -0
  101. package/apps/website/createWebsitePulumiApp.js.map +1 -0
  102. package/apps/website/deliveryViewerRequest.d.ts +2 -0
  103. package/apps/website/deliveryViewerRequest.js +32 -0
  104. package/apps/website/deliveryViewerRequest.js.map +1 -0
  105. package/apps/website/index.d.ts +1 -0
  106. package/apps/website/index.js +18 -0
  107. package/apps/website/index.js.map +1 -0
  108. package/components/tenantRouter/WebsiteTenantRouter.d.ts +11 -0
  109. package/components/tenantRouter/WebsiteTenantRouter.js +98 -0
  110. package/components/tenantRouter/WebsiteTenantRouter.js.map +1 -0
  111. package/components/tenantRouter/functions/origin/request.d.ts +1 -0
  112. package/components/tenantRouter/functions/origin/request.js +129 -0
  113. package/components/tenantRouter/functions/origin/request.js.map +1 -0
  114. package/enterprise/createAdminPulumiApp.d.ts +1 -0
  115. package/enterprise/createAdminPulumiApp.js +25 -0
  116. package/enterprise/createAdminPulumiApp.js.map +1 -0
  117. package/enterprise/createApiPulumiApp.d.ts +61 -0
  118. package/enterprise/createApiPulumiApp.js +68 -0
  119. package/enterprise/createApiPulumiApp.js.map +1 -0
  120. package/enterprise/createCorePulumiApp.d.ts +42 -0
  121. package/enterprise/createCorePulumiApp.js +137 -0
  122. package/enterprise/createCorePulumiApp.js.map +1 -0
  123. package/enterprise/createWebsitePulumiApp.d.ts +56 -0
  124. package/enterprise/createWebsitePulumiApp.js +68 -0
  125. package/enterprise/createWebsitePulumiApp.js.map +1 -0
  126. package/enterprise/index.d.ts +4 -0
  127. package/enterprise/index.js +57 -0
  128. package/enterprise/index.js.map +1 -0
  129. package/index.d.ts +3 -0
  130. package/index.js +44 -0
  131. package/index.js.map +1 -0
  132. package/package.json +53 -0
  133. package/utils/crawlDirectory.d.ts +1 -0
  134. package/utils/crawlDirectory.js +33 -0
  135. package/utils/crawlDirectory.js.map +1 -0
  136. package/utils/getPresignedPost.d.ts +11 -0
  137. package/utils/getPresignedPost.js +46 -0
  138. package/utils/getPresignedPost.js.map +1 -0
  139. package/utils/index.d.ts +3 -0
  140. package/utils/index.js +51 -0
  141. package/utils/index.js.map +1 -0
  142. package/utils/lambdaEnvVariables.d.ts +20 -0
  143. package/utils/lambdaEnvVariables.js +78 -0
  144. package/utils/lambdaEnvVariables.js.map +1 -0
  145. package/utils/storageMigrate.d.ts +0 -0
  146. package/utils/storageMigrate.js +292 -0
  147. package/utils/storageMigrate.js.map +1 -0
  148. package/utils/tagResources.d.ts +5 -0
  149. package/utils/tagResources.js +43 -0
  150. package/utils/tagResources.js.map +1 -0
  151. package/utils/uploadFolderToS3.d.ts +26 -0
  152. package/utils/uploadFolderToS3.js +188 -0
  153. package/utils/uploadFolderToS3.js.map +1 -0
@@ -0,0 +1,20 @@
1
+ import * as pulumi from "@pulumi/pulumi";
2
+ import { PulumiApp } from "@webiny/pulumi";
3
+ declare type EnvVariables = Record<string, string | pulumi.Output<string>>;
4
+ export declare let sealEnvVariables: () => void;
5
+ export declare function getCommonLambdaEnvVariables(): pulumi.Output<EnvVariables>;
6
+ export interface SetCommonLambdaEnvVariables {
7
+ (variables: EnvVariables): void;
8
+ }
9
+ export interface WithCommonLambdaEnvVariables {
10
+ /**
11
+ * Set ENV variables that wil be assigned to all Lambda functions in the current Pulumi app.
12
+ */
13
+ setCommonLambdaEnvVariables: SetCommonLambdaEnvVariables;
14
+ }
15
+ /**
16
+ * Augment the given app with `setCommonLambdaEnvVariables` functionality.
17
+ * @param {PulumiApp} app
18
+ */
19
+ export declare function withCommonLambdaEnvVariables<T extends PulumiApp>(app: T): T & WithCommonLambdaEnvVariables;
20
+ export {};
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.getCommonLambdaEnvVariables = getCommonLambdaEnvVariables;
11
+ exports.sealEnvVariables = void 0;
12
+ exports.withCommonLambdaEnvVariables = withCommonLambdaEnvVariables;
13
+
14
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
15
+
16
+ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
17
+
18
+ const variablesRegistry = {};
19
+ let sealEnvVariables;
20
+ exports.sealEnvVariables = sealEnvVariables;
21
+ const magicPrefixes = ["WEBINY_", "WCP_", "OKTA_", "AUTH0_"];
22
+ const variablesPromise = new Promise(resolve => {
23
+ exports.sealEnvVariables = sealEnvVariables = () => {
24
+ // Apart from a couple of basic environment variables like STAGED_ROLLOUTS_VARIANT and DEBUG,
25
+ // we also take into consideration variables that have `WEBINY_` and `WCP_` prefix in their names.
26
+ const baseVariables = Object.keys(process.env).reduce((current, environmentVariableName) => {
27
+ const hasMagicPrefix = magicPrefixes.some(prefix => environmentVariableName.startsWith(prefix));
28
+
29
+ if (hasMagicPrefix && process.env[environmentVariableName] !== undefined) {
30
+ current[environmentVariableName] = String(process.env[environmentVariableName]);
31
+ }
32
+
33
+ return current;
34
+ }, {
35
+ // STAGED_ROLLOUTS_VARIANT: app.ctx.variant || "",
36
+ // Among other things, this determines the amount of information we reveal on runtime errors.
37
+ // https://www.webiny.com/docs/how-to-guides/environment-variables/#debug-environment-variable
38
+ DEBUG: String(process.env.DEBUG),
39
+ // This flag means that Lambda was deployed using the new Pulumi Apps architecture.
40
+ PULUMI_APPS: "true"
41
+ });
42
+ resolve(Object.assign({}, baseVariables, variablesRegistry));
43
+ };
44
+ });
45
+
46
+ function getCommonLambdaEnvVariables() {
47
+ return pulumi.output(variablesPromise);
48
+ }
49
+
50
+ function setCommonLambdaEnvVariables(variables) {
51
+ Object.assign(variablesRegistry, variables);
52
+ }
53
+
54
+ /**
55
+ * Augment the given app with `setCommonLambdaEnvVariables` functionality.
56
+ * @param {PulumiApp} app
57
+ */
58
+ function withCommonLambdaEnvVariables(app) {
59
+ const originalProgram = app.program;
60
+
61
+ app.program = async app => {
62
+ // We must first execute the original program, and pass in the augmented app.
63
+ const resources = await originalProgram((0, _objectSpread2.default)((0, _objectSpread2.default)({}, app), {}, {
64
+ // @ts-ignore because currently, we don't have a way of passing in a custom app type.
65
+ setCommonLambdaEnvVariables
66
+ })); // Once the program is executed, we need to seal the variables (this will resolve the pulumi.output promise).
67
+
68
+ app.addHandler(() => {
69
+ sealEnvVariables();
70
+ });
71
+ return resources;
72
+ }; // Augment the original PulumiApp.
73
+
74
+
75
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, app), {}, {
76
+ setCommonLambdaEnvVariables
77
+ });
78
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["variablesRegistry","sealEnvVariables","magicPrefixes","variablesPromise","Promise","resolve","baseVariables","Object","keys","process","env","reduce","current","environmentVariableName","hasMagicPrefix","some","prefix","startsWith","undefined","String","DEBUG","PULUMI_APPS","assign","getCommonLambdaEnvVariables","pulumi","output","setCommonLambdaEnvVariables","variables","withCommonLambdaEnvVariables","app","originalProgram","program","resources","addHandler"],"sources":["lambdaEnvVariables.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\nimport { PulumiApp } from \"@webiny/pulumi\";\n\ntype EnvVariables = Record<string, string | pulumi.Output<string>>;\n\nconst variablesRegistry: EnvVariables = {};\n\nexport let sealEnvVariables: () => void;\n\nconst magicPrefixes = [\"WEBINY_\", \"WCP_\", \"OKTA_\", \"AUTH0_\"];\n\nconst variablesPromise = new Promise<EnvVariables>(resolve => {\n sealEnvVariables = () => {\n // Apart from a couple of basic environment variables like STAGED_ROLLOUTS_VARIANT and DEBUG,\n // we also take into consideration variables that have `WEBINY_` and `WCP_` prefix in their names.\n const baseVariables = Object.keys(process.env).reduce<EnvVariables>(\n (current, environmentVariableName) => {\n const hasMagicPrefix = magicPrefixes.some(prefix =>\n environmentVariableName.startsWith(prefix)\n );\n\n if (hasMagicPrefix && process.env[environmentVariableName] !== undefined) {\n current[environmentVariableName] = String(process.env[environmentVariableName]);\n }\n return current;\n },\n {\n // STAGED_ROLLOUTS_VARIANT: app.ctx.variant || \"\",\n // Among other things, this determines the amount of information we reveal on runtime errors.\n // https://www.webiny.com/docs/how-to-guides/environment-variables/#debug-environment-variable\n DEBUG: String(process.env.DEBUG),\n // This flag means that Lambda was deployed using the new Pulumi Apps architecture.\n PULUMI_APPS: \"true\"\n }\n );\n\n resolve(Object.assign({}, baseVariables, variablesRegistry));\n };\n});\n\nexport function getCommonLambdaEnvVariables(): pulumi.Output<EnvVariables> {\n return pulumi.output(variablesPromise);\n}\n\nfunction setCommonLambdaEnvVariables(variables: EnvVariables) {\n Object.assign(variablesRegistry, variables);\n}\n\nexport interface SetCommonLambdaEnvVariables {\n (variables: EnvVariables): void;\n}\n\nexport interface WithCommonLambdaEnvVariables {\n /**\n * Set ENV variables that wil be assigned to all Lambda functions in the current Pulumi app.\n */\n setCommonLambdaEnvVariables: SetCommonLambdaEnvVariables;\n}\n\n/**\n * Augment the given app with `setCommonLambdaEnvVariables` functionality.\n * @param {PulumiApp} app\n */\nexport function withCommonLambdaEnvVariables<T extends PulumiApp>(\n app: T\n): T & WithCommonLambdaEnvVariables {\n const originalProgram = app.program;\n app.program = async app => {\n // We must first execute the original program, and pass in the augmented app.\n const resources = await originalProgram({\n ...app,\n // @ts-ignore because currently, we don't have a way of passing in a custom app type.\n setCommonLambdaEnvVariables\n });\n\n // Once the program is executed, we need to seal the variables (this will resolve the pulumi.output promise).\n app.addHandler(() => {\n sealEnvVariables();\n });\n\n return resources;\n };\n\n // Augment the original PulumiApp.\n return {\n ...app,\n setCommonLambdaEnvVariables\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA;;AAKA,MAAMA,iBAA+B,GAAG,EAAxC;AAEO,IAAIC,gBAAJ;;AAEP,MAAMC,aAAa,GAAG,CAAC,SAAD,EAAY,MAAZ,EAAoB,OAApB,EAA6B,QAA7B,CAAtB;AAEA,MAAMC,gBAAgB,GAAG,IAAIC,OAAJ,CAA0BC,OAAO,IAAI;EAC1D,2BAAAJ,gBAAgB,GAAG,MAAM;IACrB;IACA;IACA,MAAMK,aAAa,GAAGC,MAAM,CAACC,IAAP,CAAYC,OAAO,CAACC,GAApB,EAAyBC,MAAzB,CAClB,CAACC,OAAD,EAAUC,uBAAV,KAAsC;MAClC,MAAMC,cAAc,GAAGZ,aAAa,CAACa,IAAd,CAAmBC,MAAM,IAC5CH,uBAAuB,CAACI,UAAxB,CAAmCD,MAAnC,CADmB,CAAvB;;MAIA,IAAIF,cAAc,IAAIL,OAAO,CAACC,GAAR,CAAYG,uBAAZ,MAAyCK,SAA/D,EAA0E;QACtEN,OAAO,CAACC,uBAAD,CAAP,GAAmCM,MAAM,CAACV,OAAO,CAACC,GAAR,CAAYG,uBAAZ,CAAD,CAAzC;MACH;;MACD,OAAOD,OAAP;IACH,CAViB,EAWlB;MACI;MACA;MACA;MACAQ,KAAK,EAAED,MAAM,CAACV,OAAO,CAACC,GAAR,CAAYU,KAAb,CAJjB;MAKI;MACAC,WAAW,EAAE;IANjB,CAXkB,CAAtB;IAqBAhB,OAAO,CAACE,MAAM,CAACe,MAAP,CAAc,EAAd,EAAkBhB,aAAlB,EAAiCN,iBAAjC,CAAD,CAAP;EACH,CAzBD;AA0BH,CA3BwB,CAAzB;;AA6BO,SAASuB,2BAAT,GAAoE;EACvE,OAAOC,MAAM,CAACC,MAAP,CAActB,gBAAd,CAAP;AACH;;AAED,SAASuB,2BAAT,CAAqCC,SAArC,EAA8D;EAC1DpB,MAAM,CAACe,MAAP,CAActB,iBAAd,EAAiC2B,SAAjC;AACH;;AAaD;AACA;AACA;AACA;AACO,SAASC,4BAAT,CACHC,GADG,EAE6B;EAChC,MAAMC,eAAe,GAAGD,GAAG,CAACE,OAA5B;;EACAF,GAAG,CAACE,OAAJ,GAAc,MAAMF,GAAN,IAAa;IACvB;IACA,MAAMG,SAAS,GAAG,MAAMF,eAAe,6DAChCD,GADgC;MAEnC;MACAH;IAHmC,GAAvC,CAFuB,CAQvB;;IACAG,GAAG,CAACI,UAAJ,CAAe,MAAM;MACjBhC,gBAAgB;IACnB,CAFD;IAIA,OAAO+B,SAAP;EACH,CAdD,CAFgC,CAkBhC;;;EACA,mEACOH,GADP;IAEIH;EAFJ;AAIH"}
File without changes
@@ -0,0 +1,292 @@
1
+ // TODO: This file is not utilized at the moment. We can delete it when we're sure
2
+ // TODO: it's no longer needed (the soonest probably somewhere around v5.35.0 release).
3
+ // const path = require("path");
4
+ // const fs = require("fs");
5
+ // const { getPulumi, login } = require("../utils");
6
+ // const { getProjectApplication } = require("@webiny/cli/utils");
7
+ //
8
+ // // In general , storage may have different resource names than API.
9
+ // // We are replacing it, so it will be recognized by pulumi code.
10
+ // // Also, users may have their resource name customized, so after migrating to new pulumi application may break.
11
+ // // This allows to customize a way in which resources are migrated from API to storage.
12
+ // // `oldName` - name that is currently used in pulumi code
13
+ // // `newName` - name used inside new pulumi code for storage
14
+ // // If user has customized names, you should modify `oldName`
15
+ // const storageResources = [
16
+ // {
17
+ // type: "aws:dynamodb/table:Table",
18
+ // oldName: "webiny",
19
+ // newName: "webiny"
20
+ // },
21
+ // {
22
+ // type: "aws:cognito/userPool:UserPool",
23
+ // oldName: "api-user-pool",
24
+ // newName: "user-pool"
25
+ // },
26
+ // {
27
+ // type: "aws:cognito/userPoolClient:UserPoolClient",
28
+ // oldName: "api-user-pool-client",
29
+ // newName: "user-pool-client"
30
+ // },
31
+ // {
32
+ // type: "aws:s3/bucket:Bucket",
33
+ // oldName: "fm-bucket",
34
+ // newName: "fm-bucket"
35
+ // }
36
+ // ];
37
+ //
38
+ // module.exports = async inputs => {
39
+ // const apiPulumi = await getAppPulumi({
40
+ // folder: "apps/api"
41
+ // });
42
+ //
43
+ // // First we export API stack into variable as JSON
44
+ // const stackJson = await exportStack({
45
+ // pulumi: apiPulumi,
46
+ // env: inputs.env
47
+ // });
48
+ //
49
+ // // From exported JSON we retrieve state for storage app.
50
+ // const storageState = processStorageState({
51
+ // state: JSON.parse(stackJson),
52
+ // env: inputs.env
53
+ // });
54
+ //
55
+ // // Also we need to update API stack state.
56
+ // const apiState = processApiState({
57
+ // // We parse JSON twice to make sure we are operating on different objects.
58
+ // state: JSON.parse(stackJson),
59
+ // env: inputs.env
60
+ // });
61
+ //
62
+ // // Now we can import API and storage.
63
+ // await importStack({
64
+ // app: "apps/api",
65
+ // pulumi: apiPulumi,
66
+ // env: inputs.env,
67
+ // state: apiState
68
+ // });
69
+ //
70
+ // const storagePulumi = await getAppPulumi({
71
+ // folder: "apps/core"
72
+ // });
73
+ //
74
+ // await importStack({
75
+ // app: "apps/core",
76
+ // pulumi: storagePulumi,
77
+ // env: inputs.env,
78
+ // state: storageState
79
+ // });
80
+ // };
81
+ //
82
+ // async function exportStack({ pulumi, env }) {
83
+ // const result = await pulumi.run({
84
+ // command: ["stack", "export", "--show-secrets", "-s", env]
85
+ // });
86
+ //
87
+ // return result.stdout;
88
+ // }
89
+ //
90
+ // async function importStack({ pulumi, env, state, app }) {
91
+ // // Importing stack can be made only using some file, so we save one.
92
+ // const stackFile = path.join(process.cwd(), `.${app}.stack.json`);
93
+ // const stackJson = JSON.stringify(state, null, 4);
94
+ //
95
+ // await fs.promises.writeFile(stackFile, stackJson, { encoding: "utf-8" });
96
+ //
97
+ // await pulumi.run({
98
+ // execa: {
99
+ // stdio: "inherit"
100
+ // },
101
+ // command: ["stack", "import", "-s", env, "--file", stackFile]
102
+ // });
103
+ //
104
+ // // Cleanup the temp file
105
+ // await fs.promises.rm(stackFile);
106
+ // }
107
+ //
108
+ // async function getAppPulumi({ folder }) {
109
+ // const projectApplication = getProjectApplication({
110
+ // cwd: path.join(process.cwd(), folder)
111
+ // });
112
+ // await login(projectApplication);
113
+ //
114
+ // return await getPulumi({
115
+ // folder: folder
116
+ // });
117
+ // }
118
+ //
119
+ // // async function getApp({ folder, env }) {
120
+ // // const projectApplication = getProjectApplication({
121
+ // // cwd: path.join(process.cwd(), folder)
122
+ // // });
123
+ // // await login(projectApplication);
124
+ //
125
+ // // const pulumi = await getPulumi({
126
+ // // folder: folder
127
+ // // });
128
+ //
129
+ // // const stack = await projectApplication.config.createOrSelectStack({
130
+ // // appDir: projectApplication.root,
131
+ // // projectDir: projectApplication.project.root,
132
+ // // env,
133
+ // // pulumi: pulumi
134
+ // // });
135
+ //
136
+ // // return {
137
+ // // pulumi,
138
+ // // stack
139
+ // // };
140
+ // // }
141
+ //
142
+ // function processStorageState({ state, env }) {
143
+ // // From API state we need to extract only some resources.
144
+ // const resources = state.deployment.resources.filter(resource => {
145
+ // return (
146
+ // // Stack resource is always required
147
+ // resource.type === "pulumi:pulumi:Stack" ||
148
+ // // Same goes to pulumi provider
149
+ // resource.type === "pulumi:providers:aws" ||
150
+ // isStorageResource(resource)
151
+ // );
152
+ // });
153
+ //
154
+ // const stack = resources.find(r => r.type === "pulumi:pulumi:Stack");
155
+ //
156
+ // // Clear the stack outputs, storage will have slightly different outputs.
157
+ // // This will be fixed once storage is deployed.
158
+ // stack.outputs = {};
159
+ //
160
+ // // We will operate on a JSON string, because some URNs are nested deep inside state JSON.
161
+ // // So it's easier to make a simple replace operation, than recursively traverse the whole tree.
162
+ // let resourcesJson = JSON.stringify(resources);
163
+ //
164
+ // // Stack name is generated from pulumi config, must be in a proper format.
165
+ // const storageStackUrn = `urn:pulumi:${env}::storage::pulumi:pulumi:Stack::storage-${env}`;
166
+ // // There are multiple references to the stack URN (every resource has it as its parent).
167
+ // resourcesJson = replaceAll(resourcesJson, stack.urn, storageStackUrn);
168
+ //
169
+ // // The same goes for provider resource
170
+ // const provider = resources.find(r => r.type === "pulumi:providers:aws");
171
+ // const apiProviderName = parseResourceUrn(provider.urn).name;
172
+ // const storageProviderUrn = `urn:pulumi:${env}::storage::pulumi:providers:aws::${apiProviderName}`;
173
+ // resourcesJson = replaceAll(resourcesJson, provider.urn, storageProviderUrn);
174
+ //
175
+ // // Storage has a little bit different resource names than API.
176
+ // // We are replacing it, so it will be recognized by pulumi code.
177
+ // for (const resource of storageResources) {
178
+ // const apiResourceUrn = getResourceUrn({
179
+ // app: "apps/api",
180
+ // env: env,
181
+ // name: resource.oldName,
182
+ // type: resource.type
183
+ // });
184
+ //
185
+ // const storageResourceUrn = getResourceUrn({
186
+ // app: "apps/storage",
187
+ // env: env,
188
+ // name: resource.newName,
189
+ // type: resource.type
190
+ // });
191
+ //
192
+ // resourcesJson = replaceAll(resourcesJson, apiResourceUrn, storageResourceUrn);
193
+ // }
194
+ //
195
+ // state.deployment.resources = JSON.parse(resourcesJson);
196
+ //
197
+ // return state;
198
+ // }
199
+ //
200
+ // function processApiState({ state, env }) {
201
+ // let resources = state.deployment.resources.filter(resource => {
202
+ // if (resource.type === "aws:s3/bucketObject:BucketObject") {
203
+ // return false;
204
+ // }
205
+ //
206
+ // return (
207
+ // // We leave stack and provider untouched.
208
+ // resource.type === "pulumi:pulumi:Stack" ||
209
+ // resource.type === "pulumi:providers:aws" ||
210
+ // // All resources that are belonging to storage will be removed from API
211
+ // !isStorageResource(resource)
212
+ // );
213
+ // });
214
+ //
215
+ // for (const resource of storageResources) {
216
+ // const resourceUrn = getResourceUrn({
217
+ // app: "apps/api",
218
+ // env: env,
219
+ // name: resource.oldName,
220
+ // type: resource.type
221
+ // });
222
+ //
223
+ // // Remove any resource that is direct child of any storage resource
224
+ // // This may be for example S3 object that sits inside fm-bucket
225
+ // resources = resources.filter(r => r.parent !== resourceUrn);
226
+ //
227
+ // // Do the same with dependencies (recursively)
228
+ // for (const resource of resources) {
229
+ // removeResourceDependencies(resource, resourceUrn);
230
+ // }
231
+ // }
232
+ //
233
+ // state.deployment.resources = resources;
234
+ //
235
+ // return state;
236
+ // }
237
+ //
238
+ // function parseResourceUrn(urn) {
239
+ // const regex = /urn:pulumi:(.*?)::(.*?)::(.*?)::(.*)/;
240
+ // const match = regex.exec(urn);
241
+ // if (!match) {
242
+ // return null;
243
+ // }
244
+ //
245
+ // return {
246
+ // env: match[1],
247
+ // app: match[2],
248
+ // type: match[3],
249
+ // name: match[4]
250
+ // };
251
+ // }
252
+ //
253
+ // function getResourceUrn({ app, name, type, env }) {
254
+ // return `urn:pulumi:${env}::${app}::${type}::${name}`;
255
+ // }
256
+ //
257
+ // function isStorageResource(resource) {
258
+ // const urn = parseResourceUrn(resource.urn);
259
+ //
260
+ // return storageResources.some(r => {
261
+ // return r.type === resource.type && urn.name === r.oldName;
262
+ // });
263
+ // }
264
+ //
265
+ // function replaceAll(str, search, replacer) {
266
+ // // Just a hacky way to do replaceAll.
267
+ // return str.split(search).join(replacer);
268
+ // }
269
+ //
270
+ // function removeResourceDependencies(obj, urn) {
271
+ // if (!obj) {
272
+ // return;
273
+ // }
274
+ //
275
+ // if (Array.isArray(obj)) {
276
+ // const index = obj.indexOf(urn);
277
+ // if (index >= 0) {
278
+ // obj.splice(index, 1);
279
+ // } else {
280
+ // for (const item of obj) {
281
+ // removeResourceDependencies(item, urn);
282
+ // }
283
+ // }
284
+ // }
285
+ //
286
+ // if (typeof obj === "object") {
287
+ // for (const key of Object.keys(obj)) {
288
+ // removeResourceDependencies(obj[key], urn);
289
+ // }
290
+ // }
291
+ // }
292
+ "use strict";
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["storageMigrate.js"],"sourcesContent":["// TODO: This file is not utilized at the moment. We can delete it when we're sure\n// TODO: it's no longer needed (the soonest probably somewhere around v5.35.0 release).\n// const path = require(\"path\");\n// const fs = require(\"fs\");\n// const { getPulumi, login } = require(\"../utils\");\n// const { getProjectApplication } = require(\"@webiny/cli/utils\");\n//\n// // In general , storage may have different resource names than API.\n// // We are replacing it, so it will be recognized by pulumi code.\n// // Also, users may have their resource name customized, so after migrating to new pulumi application may break.\n// // This allows to customize a way in which resources are migrated from API to storage.\n// // `oldName` - name that is currently used in pulumi code\n// // `newName` - name used inside new pulumi code for storage\n// // If user has customized names, you should modify `oldName`\n// const storageResources = [\n// {\n// type: \"aws:dynamodb/table:Table\",\n// oldName: \"webiny\",\n// newName: \"webiny\"\n// },\n// {\n// type: \"aws:cognito/userPool:UserPool\",\n// oldName: \"api-user-pool\",\n// newName: \"user-pool\"\n// },\n// {\n// type: \"aws:cognito/userPoolClient:UserPoolClient\",\n// oldName: \"api-user-pool-client\",\n// newName: \"user-pool-client\"\n// },\n// {\n// type: \"aws:s3/bucket:Bucket\",\n// oldName: \"fm-bucket\",\n// newName: \"fm-bucket\"\n// }\n// ];\n//\n// module.exports = async inputs => {\n// const apiPulumi = await getAppPulumi({\n// folder: \"apps/api\"\n// });\n//\n// // First we export API stack into variable as JSON\n// const stackJson = await exportStack({\n// pulumi: apiPulumi,\n// env: inputs.env\n// });\n//\n// // From exported JSON we retrieve state for storage app.\n// const storageState = processStorageState({\n// state: JSON.parse(stackJson),\n// env: inputs.env\n// });\n//\n// // Also we need to update API stack state.\n// const apiState = processApiState({\n// // We parse JSON twice to make sure we are operating on different objects.\n// state: JSON.parse(stackJson),\n// env: inputs.env\n// });\n//\n// // Now we can import API and storage.\n// await importStack({\n// app: \"apps/api\",\n// pulumi: apiPulumi,\n// env: inputs.env,\n// state: apiState\n// });\n//\n// const storagePulumi = await getAppPulumi({\n// folder: \"apps/core\"\n// });\n//\n// await importStack({\n// app: \"apps/core\",\n// pulumi: storagePulumi,\n// env: inputs.env,\n// state: storageState\n// });\n// };\n//\n// async function exportStack({ pulumi, env }) {\n// const result = await pulumi.run({\n// command: [\"stack\", \"export\", \"--show-secrets\", \"-s\", env]\n// });\n//\n// return result.stdout;\n// }\n//\n// async function importStack({ pulumi, env, state, app }) {\n// // Importing stack can be made only using some file, so we save one.\n// const stackFile = path.join(process.cwd(), `.${app}.stack.json`);\n// const stackJson = JSON.stringify(state, null, 4);\n//\n// await fs.promises.writeFile(stackFile, stackJson, { encoding: \"utf-8\" });\n//\n// await pulumi.run({\n// execa: {\n// stdio: \"inherit\"\n// },\n// command: [\"stack\", \"import\", \"-s\", env, \"--file\", stackFile]\n// });\n//\n// // Cleanup the temp file\n// await fs.promises.rm(stackFile);\n// }\n//\n// async function getAppPulumi({ folder }) {\n// const projectApplication = getProjectApplication({\n// cwd: path.join(process.cwd(), folder)\n// });\n// await login(projectApplication);\n//\n// return await getPulumi({\n// folder: folder\n// });\n// }\n//\n// // async function getApp({ folder, env }) {\n// // const projectApplication = getProjectApplication({\n// // cwd: path.join(process.cwd(), folder)\n// // });\n// // await login(projectApplication);\n//\n// // const pulumi = await getPulumi({\n// // folder: folder\n// // });\n//\n// // const stack = await projectApplication.config.createOrSelectStack({\n// // appDir: projectApplication.root,\n// // projectDir: projectApplication.project.root,\n// // env,\n// // pulumi: pulumi\n// // });\n//\n// // return {\n// // pulumi,\n// // stack\n// // };\n// // }\n//\n// function processStorageState({ state, env }) {\n// // From API state we need to extract only some resources.\n// const resources = state.deployment.resources.filter(resource => {\n// return (\n// // Stack resource is always required\n// resource.type === \"pulumi:pulumi:Stack\" ||\n// // Same goes to pulumi provider\n// resource.type === \"pulumi:providers:aws\" ||\n// isStorageResource(resource)\n// );\n// });\n//\n// const stack = resources.find(r => r.type === \"pulumi:pulumi:Stack\");\n//\n// // Clear the stack outputs, storage will have slightly different outputs.\n// // This will be fixed once storage is deployed.\n// stack.outputs = {};\n//\n// // We will operate on a JSON string, because some URNs are nested deep inside state JSON.\n// // So it's easier to make a simple replace operation, than recursively traverse the whole tree.\n// let resourcesJson = JSON.stringify(resources);\n//\n// // Stack name is generated from pulumi config, must be in a proper format.\n// const storageStackUrn = `urn:pulumi:${env}::storage::pulumi:pulumi:Stack::storage-${env}`;\n// // There are multiple references to the stack URN (every resource has it as its parent).\n// resourcesJson = replaceAll(resourcesJson, stack.urn, storageStackUrn);\n//\n// // The same goes for provider resource\n// const provider = resources.find(r => r.type === \"pulumi:providers:aws\");\n// const apiProviderName = parseResourceUrn(provider.urn).name;\n// const storageProviderUrn = `urn:pulumi:${env}::storage::pulumi:providers:aws::${apiProviderName}`;\n// resourcesJson = replaceAll(resourcesJson, provider.urn, storageProviderUrn);\n//\n// // Storage has a little bit different resource names than API.\n// // We are replacing it, so it will be recognized by pulumi code.\n// for (const resource of storageResources) {\n// const apiResourceUrn = getResourceUrn({\n// app: \"apps/api\",\n// env: env,\n// name: resource.oldName,\n// type: resource.type\n// });\n//\n// const storageResourceUrn = getResourceUrn({\n// app: \"apps/storage\",\n// env: env,\n// name: resource.newName,\n// type: resource.type\n// });\n//\n// resourcesJson = replaceAll(resourcesJson, apiResourceUrn, storageResourceUrn);\n// }\n//\n// state.deployment.resources = JSON.parse(resourcesJson);\n//\n// return state;\n// }\n//\n// function processApiState({ state, env }) {\n// let resources = state.deployment.resources.filter(resource => {\n// if (resource.type === \"aws:s3/bucketObject:BucketObject\") {\n// return false;\n// }\n//\n// return (\n// // We leave stack and provider untouched.\n// resource.type === \"pulumi:pulumi:Stack\" ||\n// resource.type === \"pulumi:providers:aws\" ||\n// // All resources that are belonging to storage will be removed from API\n// !isStorageResource(resource)\n// );\n// });\n//\n// for (const resource of storageResources) {\n// const resourceUrn = getResourceUrn({\n// app: \"apps/api\",\n// env: env,\n// name: resource.oldName,\n// type: resource.type\n// });\n//\n// // Remove any resource that is direct child of any storage resource\n// // This may be for example S3 object that sits inside fm-bucket\n// resources = resources.filter(r => r.parent !== resourceUrn);\n//\n// // Do the same with dependencies (recursively)\n// for (const resource of resources) {\n// removeResourceDependencies(resource, resourceUrn);\n// }\n// }\n//\n// state.deployment.resources = resources;\n//\n// return state;\n// }\n//\n// function parseResourceUrn(urn) {\n// const regex = /urn:pulumi:(.*?)::(.*?)::(.*?)::(.*)/;\n// const match = regex.exec(urn);\n// if (!match) {\n// return null;\n// }\n//\n// return {\n// env: match[1],\n// app: match[2],\n// type: match[3],\n// name: match[4]\n// };\n// }\n//\n// function getResourceUrn({ app, name, type, env }) {\n// return `urn:pulumi:${env}::${app}::${type}::${name}`;\n// }\n//\n// function isStorageResource(resource) {\n// const urn = parseResourceUrn(resource.urn);\n//\n// return storageResources.some(r => {\n// return r.type === resource.type && urn.name === r.oldName;\n// });\n// }\n//\n// function replaceAll(str, search, replacer) {\n// // Just a hacky way to do replaceAll.\n// return str.split(search).join(replacer);\n// }\n//\n// function removeResourceDependencies(obj, urn) {\n// if (!obj) {\n// return;\n// }\n//\n// if (Array.isArray(obj)) {\n// const index = obj.indexOf(urn);\n// if (index >= 0) {\n// obj.splice(index, 1);\n// } else {\n// for (const item of obj) {\n// removeResourceDependencies(item, urn);\n// }\n// }\n// }\n//\n// if (typeof obj === \"object\") {\n// for (const key of Object.keys(obj)) {\n// removeResourceDependencies(obj[key], urn);\n// }\n// }\n// }\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Registers a global stack transformation that merges a set
3
+ * of tags with whatever was explicitly set in the resource definition.
4
+ */
5
+ export declare function tagResources(tags: Record<string, string>): void;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+
5
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.tagResources = tagResources;
11
+
12
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
13
+
14
+ var pulumi = _interopRequireWildcard(require("@pulumi/pulumi"));
15
+
16
+ /**
17
+ * Registers a global stack transformation that merges a set
18
+ * of tags with whatever was explicitly set in the resource definition.
19
+ */
20
+ function tagResources(tags) {
21
+ pulumi.runtime.registerStackTransformation(args => {
22
+ if (isTaggable(args.type)) {
23
+ args.props["tags"] = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, args.props["tags"]), tags);
24
+ return {
25
+ props: args.props,
26
+ opts: args.opts
27
+ };
28
+ }
29
+
30
+ return undefined;
31
+ });
32
+ }
33
+ /**
34
+ * Returns true if the given resource type is an AWS resource that supports tags.
35
+ */
36
+
37
+
38
+ function isTaggable(resourceType) {
39
+ return taggableResourceTypes.has(resourceType);
40
+ } // A list of known AWS type tokens that are taggable.
41
+
42
+
43
+ const taggableResourceTypes = new Set(["aws:accessanalyzer/analyzer:Analyzer", "aws:acm/certificate:Certificate", "aws:acmpca/certificateAuthority:CertificateAuthority", "aws:alb/loadBalancer:LoadBalancer", "aws:alb/targetGroup:TargetGroup", "aws:apigateway/apiKey:ApiKey", "aws:apigateway/clientCertificate:ClientCertificate", "aws:apigateway/domainName:DomainName", "aws:apigateway/restApi:RestApi", "aws:apigateway/stage:Stage", "aws:apigateway/usagePlan:UsagePlan", "aws:apigateway/vpcLink:VpcLink", "aws:apigatewayv2/api:Api", "aws:apigatewayv2/stage:Stage", "aws:applicationloadbalancing/loadBalancer:LoadBalancer", "aws:applicationloadbalancing/targetGroup:TargetGroup", "aws:appmesh/mesh:Mesh", "aws:appmesh/route:Route", "aws:appmesh/virtualNode:VirtualNode", "aws:appmesh/virtualRouter:VirtualRouter", "aws:appmesh/virtualService:VirtualService", "aws:appsync/graphQLApi:GraphQLApi", "aws:athena/workgroup:Workgroup", "aws:autoscaling/group:Group", "aws:backup/plan:Plan", "aws:backup/vault:Vault", "aws:cfg/aggregateAuthorization:AggregateAuthorization", "aws:cfg/configurationAggregator:ConfigurationAggregator", "aws:cfg/rule:Rule", "aws:cloudformation/stack:Stack", "aws:cloudformation/stackSet:StackSet", "aws:cloudfront/distribution:Distribution", "aws:cloudhsmv2/cluster:Cluster", "aws:cloudtrail/trail:Trail", "aws:cloudwatch/eventRule:EventRule", "aws:cloudwatch/logGroup:LogGroup", "aws:cloudwatch/metricAlarm:MetricAlarm", "aws:codebuild/project:Project", "aws:codecommit/repository:Repository", "aws:codepipeline/pipeline:Pipeline", "aws:codepipeline/webhook:Webhook", "aws:codestarnotifications/notificationRule:NotificationRule", "aws:cognito/identityPool:IdentityPool", "aws:cognito/userPool:UserPool", "aws:datapipeline/pipeline:Pipeline", "aws:datasync/agent:Agent", "aws:datasync/efsLocation:EfsLocation", "aws:datasync/locationSmb:LocationSmb", "aws:datasync/nfsLocation:NfsLocation", "aws:datasync/s3Location:S3Location", "aws:datasync/task:Task", "aws:dax/cluster:Cluster", "aws:directconnect/connection:Connection", "aws:directconnect/hostedPrivateVirtualInterfaceAccepter:HostedPrivateVirtualInterfaceAccepter", "aws:directconnect/hostedPublicVirtualInterfaceAccepter:HostedPublicVirtualInterfaceAccepter", "aws:directconnect/hostedTransitVirtualInterfaceAcceptor:HostedTransitVirtualInterfaceAcceptor", "aws:directconnect/linkAggregationGroup:LinkAggregationGroup", "aws:directconnect/privateVirtualInterface:PrivateVirtualInterface", "aws:directconnect/publicVirtualInterface:PublicVirtualInterface", "aws:directconnect/transitVirtualInterface:TransitVirtualInterface", "aws:directoryservice/directory:Directory", "aws:dlm/lifecyclePolicy:LifecyclePolicy", "aws:dms/endpoint:Endpoint", "aws:dms/replicationInstance:ReplicationInstance", "aws:dms/replicationSubnetGroup:ReplicationSubnetGroup", "aws:dms/replicationTask:ReplicationTask", "aws:docdb/cluster:Cluster", "aws:docdb/clusterInstance:ClusterInstance", "aws:docdb/clusterParameterGroup:ClusterParameterGroup", "aws:docdb/subnetGroup:SubnetGroup", "aws:dynamodb/table:Table", "aws:ebs/snapshot:Snapshot", "aws:ebs/snapshotCopy:SnapshotCopy", "aws:ebs/volume:Volume", "aws:ec2/ami:Ami", "aws:ec2/amiCopy:AmiCopy", "aws:ec2/amiFromInstance:AmiFromInstance", "aws:ec2/capacityReservation:CapacityReservation", "aws:ec2/customerGateway:CustomerGateway", "aws:ec2/defaultNetworkAcl:DefaultNetworkAcl", "aws:ec2/defaultRouteTable:DefaultRouteTable", "aws:ec2/defaultSecurityGroup:DefaultSecurityGroup", "aws:ec2/defaultSubnet:DefaultSubnet", "aws:ec2/defaultVpc:DefaultVpc", "aws:ec2/defaultVpcDhcpOptions:DefaultVpcDhcpOptions", "aws:ec2/eip:Eip", "aws:ec2/fleet:Fleet", "aws:ec2/instance:Instance", "aws:ec2/internetGateway:InternetGateway", "aws:ec2/keyPair:KeyPair", "aws:ec2/launchTemplate:LaunchTemplate", "aws:ec2/natGateway:NatGateway", "aws:ec2/networkAcl:NetworkAcl", "aws:ec2/networkInterface:NetworkInterface", "aws:ec2/placementGroup:PlacementGroup", "aws:ec2/routeTable:RouteTable", "aws:ec2/securityGroup:SecurityGroup", "aws:ec2/spotInstanceRequest:SpotInstanceRequest", "aws:ec2/subnet:Subnet", "aws:ec2/vpc:Vpc", "aws:ec2/vpcDhcpOptions:VpcDhcpOptions", "aws:ec2/vpcEndpoint:VpcEndpoint", "aws:ec2/vpcEndpointService:VpcEndpointService", "aws:ec2/vpcPeeringConnection:VpcPeeringConnection", "aws:ec2/vpcPeeringConnectionAccepter:VpcPeeringConnectionAccepter", "aws:ec2/vpnConnection:VpnConnection", "aws:ec2/vpnGateway:VpnGateway", "aws:ec2clientvpn/endpoint:Endpoint", "aws:ec2transitgateway/routeTable:RouteTable", "aws:ec2transitgateway/transitGateway:TransitGateway", "aws:ec2transitgateway/vpcAttachment:VpcAttachment", "aws:ec2transitgateway/vpcAttachmentAccepter:VpcAttachmentAccepter", "aws:ecr/repository:Repository", "aws:ecs/capacityProvider:CapacityProvider", "aws:ecs/cluster:Cluster", "aws:ecs/service:Service", "aws:ecs/taskDefinition:TaskDefinition", "aws:efs/fileSystem:FileSystem", "aws:eks/cluster:Cluster", "aws:eks/fargateProfile:FargateProfile", "aws:eks/nodeGroup:NodeGroup", "aws:elasticache/cluster:Cluster", "aws:elasticache/replicationGroup:ReplicationGroup", "aws:elasticbeanstalk/application:Application", "aws:elasticbeanstalk/applicationVersion:ApplicationVersion", "aws:elasticbeanstalk/environment:Environment", "aws:elasticloadbalancing/loadBalancer:LoadBalancer", "aws:elasticloadbalancingv2/loadBalancer:LoadBalancer", "aws:elasticloadbalancingv2/targetGroup:TargetGroup", "aws:elasticsearch/domain:Domain", "aws:elb/loadBalancer:LoadBalancer", "aws:emr/cluster:Cluster", "aws:fsx/lustreFileSystem:LustreFileSystem", "aws:fsx/windowsFileSystem:WindowsFileSystem", "aws:gamelift/alias:Alias", "aws:gamelift/build:Build", "aws:gamelift/fleet:Fleet", "aws:gamelift/gameSessionQueue:GameSessionQueue", "aws:glacier/vault:Vault", "aws:glue/crawler:Crawler", "aws:glue/job:Job", "aws:glue/trigger:Trigger", "aws:iam/role:Role", "aws:iam/user:User", "aws:inspector/resourceGroup:ResourceGroup", "aws:kinesis/analyticsApplication:AnalyticsApplication", "aws:kinesis/firehoseDeliveryStream:FirehoseDeliveryStream", "aws:kinesis/stream:Stream", "aws:kms/externalKey:ExternalKey", "aws:kms/key:Key", "aws:lambda/function:Function", "aws:lb/loadBalancer:LoadBalancer", "aws:lb/targetGroup:TargetGroup", "aws:licensemanager/licenseConfiguration:LicenseConfiguration", "aws:lightsail/instance:Instance", "aws:mediaconvert/queue:Queue", "aws:mediapackage/channel:Channel", "aws:mediastore/container:Container", "aws:mq/broker:Broker", "aws:mq/configuration:Configuration", "aws:msk/cluster:Cluster", "aws:neptune/cluster:Cluster", "aws:neptune/clusterInstance:ClusterInstance", "aws:neptune/clusterParameterGroup:ClusterParameterGroup", "aws:neptune/eventSubscription:EventSubscription", "aws:neptune/parameterGroup:ParameterGroup", "aws:neptune/subnetGroup:SubnetGroup", "aws:opsworks/stack:Stack", "aws:organizations/account:Account", "aws:pinpoint/app:App", "aws:qldb/ledger:Ledger", "aws:ram/resourceShare:ResourceShare", "aws:rds/cluster:Cluster", "aws:rds/clusterEndpoint:ClusterEndpoint", "aws:rds/clusterInstance:ClusterInstance", "aws:rds/clusterParameterGroup:ClusterParameterGroup", "aws:rds/clusterSnapshot:ClusterSnapshot", "aws:rds/eventSubscription:EventSubscription", "aws:rds/instance:Instance", "aws:rds/optionGroup:OptionGroup", "aws:rds/parameterGroup:ParameterGroup", "aws:rds/securityGroup:SecurityGroup", "aws:rds/snapshot:Snapshot", "aws:rds/subnetGroup:SubnetGroup", "aws:redshift/cluster:Cluster", "aws:redshift/eventSubscription:EventSubscription", "aws:redshift/parameterGroup:ParameterGroup", "aws:redshift/snapshotCopyGrant:SnapshotCopyGrant", "aws:redshift/snapshotSchedule:SnapshotSchedule", "aws:redshift/subnetGroup:SubnetGroup", "aws:resourcegroups/group:Group", "aws:route53/healthCheck:HealthCheck", "aws:route53/resolverEndpoint:ResolverEndpoint", "aws:route53/resolverRule:ResolverRule", "aws:route53/zone:Zone", "aws:s3/bucket:Bucket", "aws:s3/bucketObject:BucketObject", "aws:sagemaker/endpoint:Endpoint", "aws:sagemaker/endpointConfiguration:EndpointConfiguration", "aws:sagemaker/model:Model", "aws:sagemaker/notebookInstance:NotebookInstance", "aws:secretsmanager/secret:Secret", "aws:servicecatalog/portfolio:Portfolio", "aws:sfn/activity:Activity", "aws:sfn/stateMachine:StateMachine", "aws:sns/topic:Topic", "aws:sqs/queue:Queue", "aws:ssm/activation:Activation", "aws:ssm/document:Document", "aws:ssm/maintenanceWindow:MaintenanceWindow", "aws:ssm/parameter:Parameter", "aws:ssm/patchBaseline:PatchBaseline", "aws:storagegateway/cachesIscsiVolume:CachesIscsiVolume", "aws:storagegateway/gateway:Gateway", "aws:storagegateway/nfsFileShare:NfsFileShare", "aws:storagegateway/smbFileShare:SmbFileShare", "aws:swf/domain:Domain", "aws:transfer/server:Server", "aws:transfer/user:User", "aws:waf/rateBasedRule:RateBasedRule", "aws:waf/rule:Rule", "aws:waf/ruleGroup:RuleGroup", "aws:waf/webAcl:WebAcl", "aws:wafregional/rateBasedRule:RateBasedRule", "aws:wafregional/rule:Rule", "aws:wafregional/ruleGroup:RuleGroup", "aws:wafregional/webAcl:WebAcl", "aws:workspaces/directory:Directory", "aws:workspaces/ipGroup:IpGroup"]);
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tagResources","tags","pulumi","runtime","registerStackTransformation","args","isTaggable","type","props","opts","undefined","resourceType","taggableResourceTypes","has","Set"],"sources":["tagResources.ts"],"sourcesContent":["import * as pulumi from \"@pulumi/pulumi\";\n\n/**\n * Registers a global stack transformation that merges a set\n * of tags with whatever was explicitly set in the resource definition.\n */\nexport function tagResources(tags: Record<string, string>) {\n pulumi.runtime.registerStackTransformation(args => {\n if (isTaggable(args.type)) {\n args.props[\"tags\"] = { ...args.props[\"tags\"], ...tags };\n return { props: args.props, opts: args.opts };\n }\n return undefined;\n });\n}\n\n/**\n * Returns true if the given resource type is an AWS resource that supports tags.\n */\nfunction isTaggable(resourceType: string) {\n return taggableResourceTypes.has(resourceType);\n}\n\n// A list of known AWS type tokens that are taggable.\nconst taggableResourceTypes = new Set([\n \"aws:accessanalyzer/analyzer:Analyzer\",\n \"aws:acm/certificate:Certificate\",\n \"aws:acmpca/certificateAuthority:CertificateAuthority\",\n \"aws:alb/loadBalancer:LoadBalancer\",\n \"aws:alb/targetGroup:TargetGroup\",\n \"aws:apigateway/apiKey:ApiKey\",\n \"aws:apigateway/clientCertificate:ClientCertificate\",\n \"aws:apigateway/domainName:DomainName\",\n \"aws:apigateway/restApi:RestApi\",\n \"aws:apigateway/stage:Stage\",\n \"aws:apigateway/usagePlan:UsagePlan\",\n \"aws:apigateway/vpcLink:VpcLink\",\n \"aws:apigatewayv2/api:Api\",\n \"aws:apigatewayv2/stage:Stage\",\n \"aws:applicationloadbalancing/loadBalancer:LoadBalancer\",\n \"aws:applicationloadbalancing/targetGroup:TargetGroup\",\n \"aws:appmesh/mesh:Mesh\",\n \"aws:appmesh/route:Route\",\n \"aws:appmesh/virtualNode:VirtualNode\",\n \"aws:appmesh/virtualRouter:VirtualRouter\",\n \"aws:appmesh/virtualService:VirtualService\",\n \"aws:appsync/graphQLApi:GraphQLApi\",\n \"aws:athena/workgroup:Workgroup\",\n \"aws:autoscaling/group:Group\",\n \"aws:backup/plan:Plan\",\n \"aws:backup/vault:Vault\",\n \"aws:cfg/aggregateAuthorization:AggregateAuthorization\",\n \"aws:cfg/configurationAggregator:ConfigurationAggregator\",\n \"aws:cfg/rule:Rule\",\n \"aws:cloudformation/stack:Stack\",\n \"aws:cloudformation/stackSet:StackSet\",\n \"aws:cloudfront/distribution:Distribution\",\n \"aws:cloudhsmv2/cluster:Cluster\",\n \"aws:cloudtrail/trail:Trail\",\n \"aws:cloudwatch/eventRule:EventRule\",\n \"aws:cloudwatch/logGroup:LogGroup\",\n \"aws:cloudwatch/metricAlarm:MetricAlarm\",\n \"aws:codebuild/project:Project\",\n \"aws:codecommit/repository:Repository\",\n \"aws:codepipeline/pipeline:Pipeline\",\n \"aws:codepipeline/webhook:Webhook\",\n \"aws:codestarnotifications/notificationRule:NotificationRule\",\n \"aws:cognito/identityPool:IdentityPool\",\n \"aws:cognito/userPool:UserPool\",\n \"aws:datapipeline/pipeline:Pipeline\",\n \"aws:datasync/agent:Agent\",\n \"aws:datasync/efsLocation:EfsLocation\",\n \"aws:datasync/locationSmb:LocationSmb\",\n \"aws:datasync/nfsLocation:NfsLocation\",\n \"aws:datasync/s3Location:S3Location\",\n \"aws:datasync/task:Task\",\n \"aws:dax/cluster:Cluster\",\n \"aws:directconnect/connection:Connection\",\n \"aws:directconnect/hostedPrivateVirtualInterfaceAccepter:HostedPrivateVirtualInterfaceAccepter\",\n \"aws:directconnect/hostedPublicVirtualInterfaceAccepter:HostedPublicVirtualInterfaceAccepter\",\n \"aws:directconnect/hostedTransitVirtualInterfaceAcceptor:HostedTransitVirtualInterfaceAcceptor\",\n \"aws:directconnect/linkAggregationGroup:LinkAggregationGroup\",\n \"aws:directconnect/privateVirtualInterface:PrivateVirtualInterface\",\n \"aws:directconnect/publicVirtualInterface:PublicVirtualInterface\",\n \"aws:directconnect/transitVirtualInterface:TransitVirtualInterface\",\n \"aws:directoryservice/directory:Directory\",\n \"aws:dlm/lifecyclePolicy:LifecyclePolicy\",\n \"aws:dms/endpoint:Endpoint\",\n \"aws:dms/replicationInstance:ReplicationInstance\",\n \"aws:dms/replicationSubnetGroup:ReplicationSubnetGroup\",\n \"aws:dms/replicationTask:ReplicationTask\",\n \"aws:docdb/cluster:Cluster\",\n \"aws:docdb/clusterInstance:ClusterInstance\",\n \"aws:docdb/clusterParameterGroup:ClusterParameterGroup\",\n \"aws:docdb/subnetGroup:SubnetGroup\",\n \"aws:dynamodb/table:Table\",\n \"aws:ebs/snapshot:Snapshot\",\n \"aws:ebs/snapshotCopy:SnapshotCopy\",\n \"aws:ebs/volume:Volume\",\n \"aws:ec2/ami:Ami\",\n \"aws:ec2/amiCopy:AmiCopy\",\n \"aws:ec2/amiFromInstance:AmiFromInstance\",\n \"aws:ec2/capacityReservation:CapacityReservation\",\n \"aws:ec2/customerGateway:CustomerGateway\",\n \"aws:ec2/defaultNetworkAcl:DefaultNetworkAcl\",\n \"aws:ec2/defaultRouteTable:DefaultRouteTable\",\n \"aws:ec2/defaultSecurityGroup:DefaultSecurityGroup\",\n \"aws:ec2/defaultSubnet:DefaultSubnet\",\n \"aws:ec2/defaultVpc:DefaultVpc\",\n \"aws:ec2/defaultVpcDhcpOptions:DefaultVpcDhcpOptions\",\n \"aws:ec2/eip:Eip\",\n \"aws:ec2/fleet:Fleet\",\n \"aws:ec2/instance:Instance\",\n \"aws:ec2/internetGateway:InternetGateway\",\n \"aws:ec2/keyPair:KeyPair\",\n \"aws:ec2/launchTemplate:LaunchTemplate\",\n \"aws:ec2/natGateway:NatGateway\",\n \"aws:ec2/networkAcl:NetworkAcl\",\n \"aws:ec2/networkInterface:NetworkInterface\",\n \"aws:ec2/placementGroup:PlacementGroup\",\n \"aws:ec2/routeTable:RouteTable\",\n \"aws:ec2/securityGroup:SecurityGroup\",\n \"aws:ec2/spotInstanceRequest:SpotInstanceRequest\",\n \"aws:ec2/subnet:Subnet\",\n \"aws:ec2/vpc:Vpc\",\n \"aws:ec2/vpcDhcpOptions:VpcDhcpOptions\",\n \"aws:ec2/vpcEndpoint:VpcEndpoint\",\n \"aws:ec2/vpcEndpointService:VpcEndpointService\",\n \"aws:ec2/vpcPeeringConnection:VpcPeeringConnection\",\n \"aws:ec2/vpcPeeringConnectionAccepter:VpcPeeringConnectionAccepter\",\n \"aws:ec2/vpnConnection:VpnConnection\",\n \"aws:ec2/vpnGateway:VpnGateway\",\n \"aws:ec2clientvpn/endpoint:Endpoint\",\n \"aws:ec2transitgateway/routeTable:RouteTable\",\n \"aws:ec2transitgateway/transitGateway:TransitGateway\",\n \"aws:ec2transitgateway/vpcAttachment:VpcAttachment\",\n \"aws:ec2transitgateway/vpcAttachmentAccepter:VpcAttachmentAccepter\",\n \"aws:ecr/repository:Repository\",\n \"aws:ecs/capacityProvider:CapacityProvider\",\n \"aws:ecs/cluster:Cluster\",\n \"aws:ecs/service:Service\",\n \"aws:ecs/taskDefinition:TaskDefinition\",\n \"aws:efs/fileSystem:FileSystem\",\n \"aws:eks/cluster:Cluster\",\n \"aws:eks/fargateProfile:FargateProfile\",\n \"aws:eks/nodeGroup:NodeGroup\",\n \"aws:elasticache/cluster:Cluster\",\n \"aws:elasticache/replicationGroup:ReplicationGroup\",\n \"aws:elasticbeanstalk/application:Application\",\n \"aws:elasticbeanstalk/applicationVersion:ApplicationVersion\",\n \"aws:elasticbeanstalk/environment:Environment\",\n \"aws:elasticloadbalancing/loadBalancer:LoadBalancer\",\n \"aws:elasticloadbalancingv2/loadBalancer:LoadBalancer\",\n \"aws:elasticloadbalancingv2/targetGroup:TargetGroup\",\n \"aws:elasticsearch/domain:Domain\",\n \"aws:elb/loadBalancer:LoadBalancer\",\n \"aws:emr/cluster:Cluster\",\n \"aws:fsx/lustreFileSystem:LustreFileSystem\",\n \"aws:fsx/windowsFileSystem:WindowsFileSystem\",\n \"aws:gamelift/alias:Alias\",\n \"aws:gamelift/build:Build\",\n \"aws:gamelift/fleet:Fleet\",\n \"aws:gamelift/gameSessionQueue:GameSessionQueue\",\n \"aws:glacier/vault:Vault\",\n \"aws:glue/crawler:Crawler\",\n \"aws:glue/job:Job\",\n \"aws:glue/trigger:Trigger\",\n \"aws:iam/role:Role\",\n \"aws:iam/user:User\",\n \"aws:inspector/resourceGroup:ResourceGroup\",\n \"aws:kinesis/analyticsApplication:AnalyticsApplication\",\n \"aws:kinesis/firehoseDeliveryStream:FirehoseDeliveryStream\",\n \"aws:kinesis/stream:Stream\",\n \"aws:kms/externalKey:ExternalKey\",\n \"aws:kms/key:Key\",\n \"aws:lambda/function:Function\",\n \"aws:lb/loadBalancer:LoadBalancer\",\n \"aws:lb/targetGroup:TargetGroup\",\n \"aws:licensemanager/licenseConfiguration:LicenseConfiguration\",\n \"aws:lightsail/instance:Instance\",\n \"aws:mediaconvert/queue:Queue\",\n \"aws:mediapackage/channel:Channel\",\n \"aws:mediastore/container:Container\",\n \"aws:mq/broker:Broker\",\n \"aws:mq/configuration:Configuration\",\n \"aws:msk/cluster:Cluster\",\n \"aws:neptune/cluster:Cluster\",\n \"aws:neptune/clusterInstance:ClusterInstance\",\n \"aws:neptune/clusterParameterGroup:ClusterParameterGroup\",\n \"aws:neptune/eventSubscription:EventSubscription\",\n \"aws:neptune/parameterGroup:ParameterGroup\",\n \"aws:neptune/subnetGroup:SubnetGroup\",\n \"aws:opsworks/stack:Stack\",\n \"aws:organizations/account:Account\",\n \"aws:pinpoint/app:App\",\n \"aws:qldb/ledger:Ledger\",\n \"aws:ram/resourceShare:ResourceShare\",\n \"aws:rds/cluster:Cluster\",\n \"aws:rds/clusterEndpoint:ClusterEndpoint\",\n \"aws:rds/clusterInstance:ClusterInstance\",\n \"aws:rds/clusterParameterGroup:ClusterParameterGroup\",\n \"aws:rds/clusterSnapshot:ClusterSnapshot\",\n \"aws:rds/eventSubscription:EventSubscription\",\n \"aws:rds/instance:Instance\",\n \"aws:rds/optionGroup:OptionGroup\",\n \"aws:rds/parameterGroup:ParameterGroup\",\n \"aws:rds/securityGroup:SecurityGroup\",\n \"aws:rds/snapshot:Snapshot\",\n \"aws:rds/subnetGroup:SubnetGroup\",\n \"aws:redshift/cluster:Cluster\",\n \"aws:redshift/eventSubscription:EventSubscription\",\n \"aws:redshift/parameterGroup:ParameterGroup\",\n \"aws:redshift/snapshotCopyGrant:SnapshotCopyGrant\",\n \"aws:redshift/snapshotSchedule:SnapshotSchedule\",\n \"aws:redshift/subnetGroup:SubnetGroup\",\n \"aws:resourcegroups/group:Group\",\n \"aws:route53/healthCheck:HealthCheck\",\n \"aws:route53/resolverEndpoint:ResolverEndpoint\",\n \"aws:route53/resolverRule:ResolverRule\",\n \"aws:route53/zone:Zone\",\n \"aws:s3/bucket:Bucket\",\n \"aws:s3/bucketObject:BucketObject\",\n \"aws:sagemaker/endpoint:Endpoint\",\n \"aws:sagemaker/endpointConfiguration:EndpointConfiguration\",\n \"aws:sagemaker/model:Model\",\n \"aws:sagemaker/notebookInstance:NotebookInstance\",\n \"aws:secretsmanager/secret:Secret\",\n \"aws:servicecatalog/portfolio:Portfolio\",\n \"aws:sfn/activity:Activity\",\n \"aws:sfn/stateMachine:StateMachine\",\n \"aws:sns/topic:Topic\",\n \"aws:sqs/queue:Queue\",\n \"aws:ssm/activation:Activation\",\n \"aws:ssm/document:Document\",\n \"aws:ssm/maintenanceWindow:MaintenanceWindow\",\n \"aws:ssm/parameter:Parameter\",\n \"aws:ssm/patchBaseline:PatchBaseline\",\n \"aws:storagegateway/cachesIscsiVolume:CachesIscsiVolume\",\n \"aws:storagegateway/gateway:Gateway\",\n \"aws:storagegateway/nfsFileShare:NfsFileShare\",\n \"aws:storagegateway/smbFileShare:SmbFileShare\",\n \"aws:swf/domain:Domain\",\n \"aws:transfer/server:Server\",\n \"aws:transfer/user:User\",\n \"aws:waf/rateBasedRule:RateBasedRule\",\n \"aws:waf/rule:Rule\",\n \"aws:waf/ruleGroup:RuleGroup\",\n \"aws:waf/webAcl:WebAcl\",\n \"aws:wafregional/rateBasedRule:RateBasedRule\",\n \"aws:wafregional/rule:Rule\",\n \"aws:wafregional/ruleGroup:RuleGroup\",\n \"aws:wafregional/webAcl:WebAcl\",\n \"aws:workspaces/directory:Directory\",\n \"aws:workspaces/ipGroup:IpGroup\"\n]);\n"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { BucketName, CacheControl } from "aws-sdk/clients/s3";
2
+ export interface Paths {
3
+ full: string;
4
+ relative: string;
5
+ }
6
+ export declare type CacheControls = Array<{
7
+ pattern: RegExp;
8
+ value: CacheControl;
9
+ }>;
10
+ export interface UploadFolderToS3Params {
11
+ path: string;
12
+ acl: string;
13
+ onFileUploadSuccess: (params: {
14
+ paths: Paths;
15
+ }) => void;
16
+ onFileUploadError: (params: {
17
+ paths: Paths;
18
+ error: Error;
19
+ }) => void;
20
+ onFileUploadSkip: (params: {
21
+ paths: Paths;
22
+ }) => void;
23
+ bucket: BucketName;
24
+ cacheControl?: CacheControl | CacheControls;
25
+ }
26
+ export declare const uploadFolderToS3: ({ path: root, bucket, onFileUploadSuccess, onFileUploadError, onFileUploadSkip, acl, cacheControl }: UploadFolderToS3Params) => Promise<void>;