@apimatic/cli 1.1.0-alpha.5 → 1.1.0-alpha.6

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 (61) hide show
  1. package/README.md +115 -37
  2. package/bin/run +5 -1
  3. package/lib/client-utils/auth-manager.js +3 -3
  4. package/lib/client-utils/sdk-client.js +1 -0
  5. package/lib/commands/api/transform.d.ts +7 -7
  6. package/lib/commands/api/transform.js +18 -15
  7. package/lib/commands/api/validate.d.ts +4 -4
  8. package/lib/commands/api/validate.js +13 -10
  9. package/lib/commands/auth/login.d.ts +2 -2
  10. package/lib/commands/auth/login.js +29 -12
  11. package/lib/commands/auth/logout.d.ts +1 -1
  12. package/lib/commands/auth/logout.js +3 -2
  13. package/lib/commands/auth/status.d.ts +1 -1
  14. package/lib/commands/auth/status.js +3 -2
  15. package/lib/commands/portal/generate.d.ts +6 -6
  16. package/lib/commands/portal/generate.js +16 -11
  17. package/lib/commands/portal/quickstart.d.ts +10 -0
  18. package/lib/commands/portal/quickstart.js +83 -0
  19. package/lib/commands/portal/serve.d.ts +17 -0
  20. package/lib/commands/portal/serve.js +143 -0
  21. package/lib/commands/sdk/generate.d.ts +8 -8
  22. package/lib/commands/sdk/generate.js +16 -13
  23. package/lib/config/axios-config.d.ts +2 -0
  24. package/lib/config/axios-config.js +12 -0
  25. package/lib/config/env.d.ts +26 -0
  26. package/lib/config/env.js +28 -1
  27. package/lib/controllers/api/transform.js +6 -5
  28. package/lib/controllers/api/validate.d.ts +1 -1
  29. package/lib/controllers/api/validate.js +25 -8
  30. package/lib/controllers/portal/generate.d.ts +2 -1
  31. package/lib/controllers/portal/generate.js +19 -11
  32. package/lib/controllers/portal/quickstart.d.ts +14 -0
  33. package/lib/controllers/portal/quickstart.js +206 -0
  34. package/lib/controllers/portal/serve.d.ts +4 -0
  35. package/lib/controllers/portal/serve.js +152 -0
  36. package/lib/controllers/sdk/generate.js +7 -6
  37. package/lib/index.d.ts +1 -1
  38. package/lib/index.js +3 -3
  39. package/lib/prompts/portal/quickstart.d.ts +32 -0
  40. package/lib/prompts/portal/quickstart.js +216 -0
  41. package/lib/prompts/portal/serve.d.ts +7 -0
  42. package/lib/prompts/portal/serve.js +25 -0
  43. package/lib/services/portal/server.d.ts +11 -0
  44. package/lib/services/portal/server.js +71 -0
  45. package/lib/types/api/transform.d.ts +0 -1
  46. package/lib/types/api/transform.js +1 -0
  47. package/lib/types/api/validate.js +1 -0
  48. package/lib/types/portal/generate.js +1 -0
  49. package/lib/types/portal/quickstart.d.ts +17 -0
  50. package/lib/types/portal/quickstart.js +3 -0
  51. package/lib/types/sdk/generate.js +1 -0
  52. package/lib/types/utils.js +1 -0
  53. package/lib/utils/utils.d.ts +28 -4
  54. package/lib/utils/utils.js +289 -53
  55. package/lib/validators/common/directoryValidator.d.ts +9 -0
  56. package/lib/validators/common/directoryValidator.js +53 -0
  57. package/lib/validators/common/portValidator.d.ts +5 -0
  58. package/lib/validators/common/portValidator.js +20 -0
  59. package/lib/validators/portal/serveValidator.d.ts +6 -0
  60. package/lib/validators/portal/serveValidator.js +21 -0
  61. package/package.json +59 -23
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const axios_1 = require("axios");
4
+ const fiftyMBsInBytes = 50 * 1024 * 1024;
5
+ const fiveMinutesInMilliseconds = 5 * 60 * 1000;
6
+ const axiosInstance = axios_1.default.create({
7
+ maxContentLength: fiftyMBsInBytes,
8
+ maxBodyLength: fiftyMBsInBytes,
9
+ timeout: fiveMinutesInMilliseconds
10
+ });
11
+ exports.default = axiosInstance;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXhpb3MtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9heGlvcy1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBMEI7QUFFMUIsTUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUVoRCxNQUFNLGFBQWEsR0FBRyxlQUFLLENBQUMsTUFBTSxDQUFDO0lBQ2pDLGdCQUFnQixFQUFFLGVBQWU7SUFDakMsYUFBYSxFQUFFLGVBQWU7SUFDOUIsT0FBTyxFQUFFLHlCQUF5QjtDQUNuQyxDQUFDLENBQUM7QUFFSCxrQkFBZSxhQUFhLENBQUMifQ==
@@ -1 +1,27 @@
1
1
  export declare const baseURL = "https://api.apimatic.io";
2
+ export declare const staticPortalRepoUrl = "https://github.com/apimatic/static-portal-workflow.git";
3
+ export declare const metadataFileContent: {
4
+ ImportSettings: {
5
+ AutoGenerateTestCases: boolean;
6
+ ImportAdditionalHeader: boolean;
7
+ ImportAdditionalTypeCombinatorModels: boolean;
8
+ ImportTypeCombinatorsWithOnlyOneType: boolean;
9
+ };
10
+ CodeGenSettings: {
11
+ Timeout: number;
12
+ ValidateRequiredParameters: boolean;
13
+ AddSingleAuthDeprecatedCode: boolean;
14
+ EnableGlobalUserAgent: boolean;
15
+ UserAgent: string;
16
+ EnableLogging: boolean;
17
+ EnableModelKeywordArgsInRuby: boolean;
18
+ SymbolizeHashKeysInRuby: boolean;
19
+ ReturnCompleteHttpResponse: boolean;
20
+ UserConfigurableRetries: boolean;
21
+ UseEnumPrefix: boolean;
22
+ ExtendedAdditionalPropertiesSupport: boolean;
23
+ EnforceStandardizedCasing: boolean;
24
+ ControllerPostfix: string;
25
+ DoNotSplitWords: string[];
26
+ };
27
+ };
package/lib/config/env.js CHANGED
@@ -1,4 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.baseURL = void 0;
3
+ exports.metadataFileContent = exports.staticPortalRepoUrl = exports.baseURL = void 0;
4
4
  exports.baseURL = "https://api.apimatic.io";
5
+ exports.staticPortalRepoUrl = "https://github.com/apimatic/static-portal-workflow.git";
6
+ exports.metadataFileContent = {
7
+ ImportSettings: {
8
+ AutoGenerateTestCases: false,
9
+ ImportAdditionalHeader: false,
10
+ ImportAdditionalTypeCombinatorModels: false,
11
+ ImportTypeCombinatorsWithOnlyOneType: false
12
+ },
13
+ CodeGenSettings: {
14
+ Timeout: 30,
15
+ ValidateRequiredParameters: true,
16
+ AddSingleAuthDeprecatedCode: false,
17
+ EnableGlobalUserAgent: true,
18
+ UserAgent: "{language}-SDK/{version} [OS: {os-info}, Engine: {engine}/{engine-version}]",
19
+ EnableLogging: true,
20
+ EnableModelKeywordArgsInRuby: true,
21
+ SymbolizeHashKeysInRuby: true,
22
+ ReturnCompleteHttpResponse: true,
23
+ UserConfigurableRetries: true,
24
+ UseEnumPrefix: false,
25
+ ExtendedAdditionalPropertiesSupport: true,
26
+ EnforceStandardizedCasing: true,
27
+ ControllerPostfix: "Api",
28
+ DoNotSplitWords: ["oauth"]
29
+ }
30
+ };
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQWEsUUFBQSxPQUFPLEdBQUcseUJBQXlCLENBQUM7QUFDcEMsUUFBQSxtQkFBbUIsR0FBRyx3REFBd0QsQ0FBQztBQUMvRSxRQUFBLG1CQUFtQixHQUFHO0lBQ2pDLGNBQWMsRUFBRTtRQUNkLHFCQUFxQixFQUFFLEtBQUs7UUFDNUIsc0JBQXNCLEVBQUUsS0FBSztRQUM3QixvQ0FBb0MsRUFBRSxLQUFLO1FBQzNDLG9DQUFvQyxFQUFFLEtBQUs7S0FDNUM7SUFDRCxlQUFlLEVBQUU7UUFDZixPQUFPLEVBQUUsRUFBRTtRQUNYLDBCQUEwQixFQUFFLElBQUk7UUFDaEMsMkJBQTJCLEVBQUUsS0FBSztRQUNsQyxxQkFBcUIsRUFBRSxJQUFJO1FBQzNCLFNBQVMsRUFBRSw2RUFBNkU7UUFDeEYsYUFBYSxFQUFFLElBQUk7UUFDbkIsNEJBQTRCLEVBQUUsSUFBSTtRQUNsQyx1QkFBdUIsRUFBRSxJQUFJO1FBQzdCLDBCQUEwQixFQUFFLElBQUk7UUFDaEMsdUJBQXVCLEVBQUUsSUFBSTtRQUM3QixhQUFhLEVBQUUsS0FBSztRQUNwQixtQ0FBbUMsRUFBRSxJQUFJO1FBQ3pDLHlCQUF5QixFQUFFLElBQUk7UUFDL0IsaUJBQWlCLEVBQUUsS0FBSztRQUN4QixlQUFlLEVBQUUsQ0FBQyxPQUFPLENBQUM7S0FDM0I7Q0FDRixDQUFDIn0=
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getValidFormat = exports.downloadTransformationFile = exports.getTransformationId = void 0;
4
- const cli_ux_1 = require("cli-ux");
4
+ const core_1 = require("@oclif/core");
5
5
  const fs = require("fs-extra");
6
6
  const utils_1 = require("../../utils/utils");
7
7
  const sdk_1 = require("@apimatic/sdk");
8
8
  const getTransformationId = async ({ file, url, format }, transformationController) => {
9
- cli_ux_1.default.action.start("Transforming API specification");
9
+ core_1.ux.action.start("Transforming API specification");
10
10
  let generation;
11
11
  if (file) {
12
12
  const fileDescriptor = new sdk_1.FileWrapper(fs.createReadStream(file));
@@ -22,12 +22,12 @@ const getTransformationId = async ({ file, url, format }, transformationControll
22
22
  else {
23
23
  throw new Error("Please provide a specification file");
24
24
  }
25
- cli_ux_1.default.action.stop();
25
+ core_1.ux.action.stop();
26
26
  return generation.result;
27
27
  };
28
28
  exports.getTransformationId = getTransformationId;
29
29
  const downloadTransformationFile = async ({ id, destinationFilePath, transformationController }) => {
30
- cli_ux_1.default.action.start("Downloading Transformed file");
30
+ core_1.ux.action.start("Downloading Transformed file");
31
31
  const { result } = await transformationController.downloadTransformedFile(id);
32
32
  if (result.readable) {
33
33
  await (0, utils_1.writeFileUsingReadableStream)(result, destinationFilePath);
@@ -35,7 +35,7 @@ const downloadTransformationFile = async ({ id, destinationFilePath, transformat
35
35
  else {
36
36
  throw new Error("Couldn't save transformation file");
37
37
  }
38
- cli_ux_1.default.action.stop();
38
+ core_1.ux.action.stop();
39
39
  return destinationFilePath;
40
40
  };
41
41
  exports.downloadTransformationFile = downloadTransformationFile;
@@ -50,3 +50,4 @@ const getValidFormat = (format) => {
50
50
  }
51
51
  };
52
52
  exports.getValidFormat = getValidFormat;
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyb2xsZXJzL2FwaS90cmFuc2Zvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0NBQWlDO0FBQ2pDLCtCQUErQjtBQUUvQiw2Q0FBaUU7QUFFakUsdUNBUXVCO0FBRWhCLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUN0QyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUEwQixFQUM3Qyx3QkFBa0QsRUFDekIsRUFBRTtJQUMzQixTQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBRWxELElBQUksVUFBdUMsQ0FBQztJQUM1QyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsTUFBTSxjQUFjLEdBQUcsSUFBSSxpQkFBVyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLFVBQVUsR0FBRyxNQUFNLHdCQUF3QixDQUFDLGdCQUFnQixDQUMxRCxpQkFBVyxDQUFDLHFCQUFxQixFQUNqQyxjQUFjLEVBQ2QsTUFBdUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7U0FBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEdBQTJCO1lBQ25DLEdBQUcsRUFBRSxHQUFHO1lBQ1IsWUFBWSxFQUFFLE1BQXVCO1NBQ3RDLENBQUM7UUFDRixVQUFVLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELFNBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakIsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQXpCVyxRQUFBLG1CQUFtQix1QkF5QjlCO0FBRUssTUFBTSwwQkFBMEIsR0FBRyxLQUFLLEVBQUUsRUFDL0MsRUFBRSxFQUNGLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDSyxFQUFtQixFQUFFO0lBQ2xELFNBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFaEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUF1QixNQUFNLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWxHLElBQUssTUFBZ0MsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUEsb0NBQTRCLEVBQUMsTUFBK0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNGLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxTQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pCLE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBaEJXLFFBQUEsMEJBQTBCLDhCQWdCckM7QUFDRiw4RkFBOEY7QUFDdkYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtJQUMvQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDL0UsT0FBTyxtQkFBYSxDQUFDLE1BQW9DLENBQUMsQ0FBQztJQUM3RCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7QUFDSCxDQUFDLENBQUM7QUFQVyxRQUFBLGNBQWMsa0JBT3pCIn0=
@@ -1,3 +1,3 @@
1
1
  import { GetValidationParams } from "../../types/api/validate";
2
2
  import { APIValidationExternalApisController, ApiValidationSummary } from "@apimatic/sdk";
3
- export declare const getValidation: ({ file, url }: GetValidationParams, apiValidationController: APIValidationExternalApisController) => Promise<ApiValidationSummary>;
3
+ export declare const getValidationSummary: ({ file, url }: GetValidationParams, apiValidationController: APIValidationExternalApisController) => Promise<ApiValidationSummary>;
@@ -1,16 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getValidation = void 0;
4
- const cli_ux_1 = require("cli-ux");
3
+ exports.getValidationSummary = void 0;
5
4
  const fs = require("fs-extra");
6
5
  const sdk_1 = require("@apimatic/sdk");
7
6
  const sdk_2 = require("@apimatic/sdk");
8
- const getValidation = async ({ file, url }, apiValidationController) => {
7
+ const utils_1 = require("../../utils/utils");
8
+ const getValidationSummary = async ({ file, url }, apiValidationController) => {
9
9
  let validation;
10
- cli_ux_1.default.action.start("Validating specification file");
11
10
  if (file) {
12
- const fileDescriptor = new sdk_1.FileWrapper(fs.createReadStream(file));
13
- validation = await apiValidationController.validateAPIViaFile(sdk_2.ContentType.EnumMultipartformdata, fileDescriptor);
11
+ const fileStatus = fs.statSync(file);
12
+ if (fileStatus.isDirectory()) {
13
+ const tempDir = await (0, utils_1.createTempDirectory)();
14
+ try {
15
+ const zipPath = await (0, utils_1.zipDirectory)(file, tempDir);
16
+ const zipFile = new sdk_1.FileWrapper(fs.createReadStream(zipPath));
17
+ validation = await apiValidationController.validateAPIViaFile(sdk_2.ContentType.EnumMultipartformdata, zipFile);
18
+ await (0, utils_1.deleteFile)(zipPath);
19
+ }
20
+ catch (error) {
21
+ throw new Error("There was an error validating your spec file.");
22
+ }
23
+ finally {
24
+ await fs.remove(tempDir);
25
+ }
26
+ }
27
+ else {
28
+ const fileDescriptor = new sdk_1.FileWrapper(fs.createReadStream(file));
29
+ validation = await apiValidationController.validateAPIViaFile(sdk_2.ContentType.EnumMultipartformdata, fileDescriptor);
30
+ }
14
31
  }
15
32
  else if (url) {
16
33
  validation = await apiValidationController.validateAPIViaURL(url);
@@ -18,7 +35,7 @@ const getValidation = async ({ file, url }, apiValidationController) => {
18
35
  else {
19
36
  throw new Error("Please provide a specification file");
20
37
  }
21
- cli_ux_1.default.action.stop();
22
38
  return validation.result;
23
39
  };
24
- exports.getValidation = getValidation;
40
+ exports.getValidationSummary = getValidationSummary;
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlcnMvYXBpL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQix1Q0FBeUQ7QUFFekQsdUNBQXVHO0FBQ3ZHLDZDQUFrRjtBQUUzRSxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFDdkMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUF1QixFQUNsQyx1QkFBNEQsRUFDN0IsRUFBRTtJQUNqQyxJQUFJLFVBQTZDLENBQUM7SUFFbEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUMsQ0FBQztZQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsMkJBQW1CLEdBQUUsQ0FBQztZQUU1QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLG9CQUFZLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLGlCQUFXLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQzlELFVBQVUsR0FBRyxNQUFNLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLGlCQUFXLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBRTFHLE1BQU0sSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNuRSxDQUFDO29CQUNPLENBQUM7Z0JBQ1AsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO2FBQ0ksQ0FBQztZQUNKLE1BQU0sY0FBYyxHQUFHLElBQUksaUJBQVcsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRSxVQUFVLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBVyxDQUFDLHFCQUFxQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ25ILENBQUM7SUFDSCxDQUFDO1NBQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLFVBQVUsR0FBRyxNQUFNLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBcENXLFFBQUEsb0JBQW9CLHdCQW9DL0IifQ==
@@ -1,2 +1,3 @@
1
1
  import { GeneratePortalParams } from "../../types/portal/generate";
2
- export declare const downloadDocsPortal: ({ zippedBuildFilePath, portalFolderPath, zippedPortalPath, overrideAuthKey, zip }: GeneratePortalParams, configDir: string) => Promise<string>;
2
+ import { CancelTokenSource } from "axios";
3
+ export declare const downloadDocsPortal: ({ zippedBuildFilePath, portalFolderPath, zippedPortalPath, overrideAuthKey, zip }: GeneratePortalParams, configDir: string, cancellationToken?: CancelTokenSource | null) => Promise<string>;
@@ -1,34 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.downloadDocsPortal = void 0;
4
- const cli_ux_1 = require("cli-ux");
5
4
  const fs = require("fs-extra");
6
5
  const FormData = require("form-data");
7
6
  const env_1 = require("../../config/env");
8
7
  const utils_1 = require("../../utils/utils");
9
8
  const auth_manager_1 = require("../../client-utils/auth-manager");
10
- const axios_1 = require("axios");
11
- // TODO: Remove after SDK is patched
12
- const downloadPortalAxios = async (zippedBuildFilePath, overrideAuthKey, configDir) => {
9
+ const axios_config_1 = require("../../config/axios-config");
10
+ //TODO: Remove after SDK is patched
11
+ const downloadPortalAxios = async (zippedBuildFilePath, configDir, overrideAuthKey, cancellationToken) => {
13
12
  const formData = new FormData();
14
13
  const authInfo = await (0, auth_manager_1.getAuthInfo)(configDir);
14
+ let authorizationHeader = "";
15
+ if (overrideAuthKey) {
16
+ authorizationHeader = `X-Auth-Key ${overrideAuthKey}`;
17
+ }
18
+ else if (authInfo) {
19
+ authorizationHeader = `X-Auth-Key ${authInfo.authKey}`;
20
+ }
15
21
  formData.append("file", fs.createReadStream(zippedBuildFilePath));
16
22
  const config = {
17
- headers: Object.assign({ Authorization: authInfo || overrideAuthKey ? `X-Auth-Key ${(authInfo === null || authInfo === void 0 ? void 0 : authInfo.authKey.trim()) || overrideAuthKey}` : "", "User-Agent": "APIMatic CLI" }, formData.getHeaders()),
23
+ headers: Object.assign({ Authorization: authorizationHeader, "User-Agent": "APIMatic CLI" }, formData.getHeaders()),
18
24
  responseType: "arraybuffer"
19
25
  };
20
- const { data } = await axios_1.default.post(`${env_1.baseURL}/portal`, formData, config);
26
+ if (cancellationToken) {
27
+ config.cancelToken = cancellationToken.token;
28
+ }
29
+ const { data } = await axios_config_1.default.post(`${env_1.baseURL}/portal`, formData, config);
21
30
  return data;
22
31
  };
23
32
  // Download Docs Portal
24
- const downloadDocsPortal = async ({ zippedBuildFilePath, portalFolderPath, zippedPortalPath, overrideAuthKey, zip }, configDir) => {
25
- cli_ux_1.default.action.start("Downloading portal");
33
+ const downloadDocsPortal = async ({ zippedBuildFilePath, portalFolderPath, zippedPortalPath, overrideAuthKey, zip }, configDir, cancellationToken = null) => {
26
34
  // Check if the build file exists for the user or not
27
35
  if (!(await fs.pathExists(zippedBuildFilePath))) {
28
36
  throw new Error("Build file doesn't exist");
29
37
  }
30
38
  // TODO: ***CRITICAL*** Remove this call once the SDK is patched
31
- const data = await downloadPortalAxios(zippedBuildFilePath, overrideAuthKey, configDir);
39
+ const data = await downloadPortalAxios(zippedBuildFilePath, configDir, overrideAuthKey, cancellationToken);
32
40
  await (0, utils_1.deleteFile)(zippedBuildFilePath);
33
41
  await fs.writeFile(zippedPortalPath, data);
34
42
  // TODO: Uncomment this code block when the SDK is patched
@@ -38,13 +46,13 @@ const downloadDocsPortal = async ({ zippedBuildFilePath, portalFolderPath, zippe
38
46
  // if ((data as NodeJS.ReadableStream).readable) {
39
47
  // await writeFileUsingReadableStream(data as NodeJS.ReadableStream, zippedPortalPath);
40
48
  if (!zip) {
41
- await (0, utils_1.unzipFile)(fs.createReadStream(zippedPortalPath), portalFolderPath);
49
+ await (0, utils_1.extractZipFile)(zippedPortalPath, portalFolderPath);
42
50
  await (0, utils_1.deleteFile)(zippedPortalPath);
43
51
  }
44
- cli_ux_1.default.action.stop();
45
52
  return zip ? zippedPortalPath : portalFolderPath;
46
53
  // } else {
47
54
  // throw new Error("Couldn't download the portal");
48
55
  // }
49
56
  };
50
57
  exports.downloadDocsPortal = downloadDocsPortal;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJvbGxlcnMvcG9ydGFsL2dlbmVyYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQixzQ0FBc0M7QUFDdEMsMENBQTJDO0FBQzNDLDZDQUErRDtBQUUvRCxrRUFBd0U7QUFHeEUsNERBQXNEO0FBRXRELG1DQUFtQztBQUNuQyxNQUFNLG1CQUFtQixHQUFHLEtBQUssRUFBRSxtQkFBMkIsRUFBRSxTQUFpQixFQUFFLGVBQThCLEVBQUUsaUJBQTJDLEVBQUUsRUFBRTtJQUNoSyxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFvQixNQUFNLElBQUEsMEJBQVcsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUMvRCxJQUFJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztJQUM3QixJQUFJLGVBQWUsRUFDbkIsQ0FBQztRQUNDLG1CQUFtQixHQUFHLGNBQWMsZUFBZSxFQUFFLENBQUM7SUFDeEQsQ0FBQztTQUNJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDbEIsbUJBQW1CLEdBQUcsY0FBYyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUNELFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQXVCO1FBQ2pDLE9BQU8sa0JBQ0wsYUFBYSxFQUFFLG1CQUFtQixFQUNsQyxZQUFZLEVBQUUsY0FBYyxJQUN6QixRQUFRLENBQUMsVUFBVSxFQUFFLENBQ3pCO1FBQ0QsWUFBWSxFQUFFLGFBQWE7S0FDNUIsQ0FBQztJQUVGLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixNQUFNLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFrQixNQUFNLHNCQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBTyxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hHLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUYsdUJBQXVCO0FBQ2hCLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxFQUNyQyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQXdCLEVBQ3JHLFNBQWlCLEVBQ2pCLG9CQUE4QyxJQUFJLEVBQ3BELEVBQUU7SUFDRixxREFBcUQ7SUFDckQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsZ0VBQWdFO0lBQ2hFLE1BQU0sSUFBSSxHQUFnQixNQUFNLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUV4SCxNQUFNLElBQUEsa0JBQVUsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUUzQywwREFBMEQ7SUFDMUQsdUZBQXVGO0lBQ3ZGLGdFQUFnRTtJQUNoRSx3RUFBd0U7SUFDeEUsa0RBQWtEO0lBQ2xELHlGQUF5RjtJQUN6RixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUEsc0JBQWMsRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sSUFBQSxrQkFBVSxFQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7SUFDakQsV0FBVztJQUNYLHFEQUFxRDtJQUNyRCxJQUFJO0FBQ04sQ0FBQyxDQUFDO0FBOUJXLFFBQUEsa0JBQWtCLHNCQThCN0IifQ==
@@ -0,0 +1,14 @@
1
+ import { APIValidationExternalApisController, ApiValidationSummary } from "@apimatic/sdk";
2
+ import { LoginCredentials, SpecFile } from "../../types/portal/quickstart";
3
+ import { SDKClient } from "../../client-utils/sdk-client";
4
+ import { PortalQuickstartPrompts } from "../../prompts/portal/quickstart";
5
+ export declare class PortalQuickstartController {
6
+ private readonly specUrl;
7
+ isUserAuthenticated(configDir: string): Promise<boolean>;
8
+ userLogin(credentials: LoginCredentials, client: SDKClient, configDir: string): Promise<void>;
9
+ getSpecFile(spec: string): Promise<SpecFile>;
10
+ getSpecValidationSummary(specFile: SpecFile, apiValidationController: APIValidationExternalApisController): Promise<ApiValidationSummary>;
11
+ setupBuildDirectory(prompts: PortalQuickstartPrompts, targetFolder: string, specFile: SpecFile, validationSummary: ApiValidationSummary, languages: string[]): Promise<void>;
12
+ generatePortalArtifacts(targetFolder: string, configDir: string): Promise<string>;
13
+ servePortal(generatedPortalPath: string, targetFolder: string, configDir: string): Promise<void>;
14
+ }
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PortalQuickstartController = void 0;
4
+ const simple_git_1 = require("simple-git");
5
+ const axios_1 = require("axios");
6
+ const path = require("path");
7
+ const filetype = require("file-type");
8
+ const fs = require("fs");
9
+ const fsextra = require("fs-extra");
10
+ const auth_manager_1 = require("../../client-utils/auth-manager");
11
+ const utils_1 = require("../../utils/utils");
12
+ const validate_1 = require("../api/validate");
13
+ const serve_1 = require("./serve");
14
+ const env_1 = require("../../config/env");
15
+ const server_1 = require("../../services/portal/server");
16
+ class PortalQuickstartController {
17
+ constructor() {
18
+ this.specUrl = "https://github.com/apimatic/static-portal-workflow/blob/master/spec/Apimatic-Calculator.json";
19
+ }
20
+ async isUserAuthenticated(configDir) {
21
+ const storedAuth = await (0, auth_manager_1.getAuthInfo)(configDir);
22
+ if (!(storedAuth === null || storedAuth === void 0 ? void 0 : storedAuth.authKey)) {
23
+ return false;
24
+ }
25
+ return true;
26
+ }
27
+ async userLogin(credentials, client, configDir) {
28
+ await client.login(credentials.email, credentials.password, configDir);
29
+ }
30
+ async getSpecFile(spec) {
31
+ let filePath = "";
32
+ const tempSpecDir = await (0, utils_1.createTempDirectory)();
33
+ if (spec) {
34
+ let specPath = String(spec);
35
+ if ((0, utils_1.isValidUrl)(specPath)) {
36
+ try {
37
+ const response = await axios_1.default.head(specPath);
38
+ if (response.headers["content-type"].includes("text/html")) {
39
+ throw new Error((0, utils_1.getMessageInRedColor)(`Invalid URL. Please check the URL and ensure it points to a valid OpenAPI definition.`));
40
+ }
41
+ const specFile = await axios_1.default.get(specPath, { responseType: "arraybuffer" });
42
+ const fileName = path.basename(specPath);
43
+ filePath = path.join(tempSpecDir, fileName);
44
+ await fsextra.writeFile(filePath, specFile.data);
45
+ }
46
+ catch (error) {
47
+ if (axios_1.default.isAxiosError(error)) {
48
+ if (error.response) {
49
+ if (error.response.status === 404) {
50
+ throw new Error((0, utils_1.getMessageInRedColor)(`Unable to download the API Definition. The server returned a 404 Not Found error. Please verify that the provided URL is correct and publicly accessible.`));
51
+ }
52
+ else {
53
+ throw new Error((0, utils_1.getMessageInRedColor)(`Unable to download the API Definition. The server returned ${error.response.status} ${error.response.statusText}`));
54
+ }
55
+ }
56
+ else if (error.request) {
57
+ if (error.code === "ECONNABORTED") {
58
+ throw new Error((0, utils_1.getMessageInRedColor)(`Unable to download the API Definition, your request timed out. Please check your internet connection and try again, or contact APIMatic support for help if your problem persists.`));
59
+ }
60
+ else if (error.code === "ENOTFOUND" || error.code === "ERR_NETWORK") {
61
+ throw new Error((0, utils_1.getMessageInRedColor)(`Failed to download the API Definition file due to network issues. Please check your internet connection and try again.`));
62
+ }
63
+ else {
64
+ throw new Error((0, utils_1.getMessageInRedColor)(`Failed to download the API Definition file, no response was received from the server. Please try again later.`));
65
+ }
66
+ }
67
+ else {
68
+ throw new Error((0, utils_1.getMessageInRedColor)(`Failed to download API Definition: ${error.message}`));
69
+ }
70
+ }
71
+ else {
72
+ throw new Error((0, utils_1.getMessageInRedColor)(`Unable to save API Definition : ${error instanceof Error ? error.message : "Unknown error"}`));
73
+ }
74
+ }
75
+ }
76
+ else {
77
+ specPath = path.normalize(specPath);
78
+ const fileType = await filetype.fromFile(specPath);
79
+ if ((fileType === null || fileType === void 0 ? void 0 : fileType.ext) === "zip") {
80
+ filePath = tempSpecDir;
81
+ await (0, utils_1.unzipFile)(fs.createReadStream(specPath), tempSpecDir);
82
+ }
83
+ else {
84
+ const destinationPath = path.join(tempSpecDir, path.basename(specPath));
85
+ filePath = destinationPath;
86
+ await fsextra.copy(specPath, destinationPath);
87
+ }
88
+ }
89
+ }
90
+ return { filePath, url: this.specUrl };
91
+ }
92
+ async getSpecValidationSummary(specFile, apiValidationController) {
93
+ const validationFlags = {
94
+ file: specFile.filePath,
95
+ url: specFile.url
96
+ };
97
+ const validationSummary = (0, validate_1.getValidationSummary)(validationFlags, apiValidationController);
98
+ return validationSummary;
99
+ }
100
+ async setupBuildDirectory(prompts, targetFolder, specFile, validationSummary, languages) {
101
+ const options = {
102
+ timeout: {
103
+ block: 60 * 1000 // 1 minute timeout.
104
+ }
105
+ };
106
+ const git = (0, simple_git_1.default)(options);
107
+ try {
108
+ await git.clone(env_1.staticPortalRepoUrl, targetFolder);
109
+ }
110
+ catch (error) {
111
+ prompts.displayBuildDirectoryGenerationErrorMessage();
112
+ if (error instanceof Error) {
113
+ if (error.message.includes("timed out")) {
114
+ throw new Error((0, utils_1.getMessageInRedColor)("The operation timed out while setting up the build directory. Please check your internet connection and try again."));
115
+ }
116
+ else if (error.message.includes("Could not resolve host")) {
117
+ throw new Error((0, utils_1.getMessageInRedColor)("Unable to resolve the host. Please check your network settings and try again."));
118
+ }
119
+ else {
120
+ throw new Error((0, utils_1.getMessageInRedColor)(`Failed to set up the build directory. ${error.message}`));
121
+ }
122
+ }
123
+ else {
124
+ throw new Error((0, utils_1.getMessageInRedColor)(`Failed to set up the build directory. ${error}`));
125
+ }
126
+ }
127
+ await (0, utils_1.clearDirectory)(path.join(targetFolder, ".git"));
128
+ await (0, utils_1.clearDirectory)(path.join(targetFolder, ".github"));
129
+ if (specFile.filePath && validationSummary.success) {
130
+ await (0, utils_1.deleteFile)(path.join(targetFolder, "spec", "Apimatic-Calculator.json"));
131
+ fsextra.copy(specFile.filePath, path.join(targetFolder, "spec", path.basename(specFile.filePath)));
132
+ }
133
+ const buildFilePath = path.join(targetFolder, "APIMATIC-BUILD.json");
134
+ const buildFileContent = JSON.parse(fs.readFileSync(buildFilePath, "utf8"));
135
+ const languageConfig = languages.reduce((config, lang) => {
136
+ config[lang] = {};
137
+ return config;
138
+ }, {});
139
+ buildFileContent.generatePortal.languageConfig = languageConfig;
140
+ fs.writeFileSync(buildFilePath, JSON.stringify(buildFileContent, null, 2));
141
+ const specFolder = path.join(targetFolder, "spec");
142
+ const metadataFile = fs.readdirSync(specFolder).find((file) => file.startsWith("APIMATIC-META"));
143
+ if (!metadataFile) {
144
+ const newMetadataFilePath = path.join(specFolder, "APIMATIC-META.json");
145
+ fs.writeFileSync(newMetadataFilePath, JSON.stringify(env_1.metadataFileContent, null, 2));
146
+ }
147
+ }
148
+ async generatePortalArtifacts(targetFolder, configDir) {
149
+ const generatedPortalPath = path.join(targetFolder, "api-portal");
150
+ try {
151
+ await (0, serve_1.generatePortal)(targetFolder, generatedPortalPath, configDir);
152
+ return generatedPortalPath;
153
+ }
154
+ catch (error) {
155
+ if (axios_1.default.isAxiosError(error)) {
156
+ if (error.response) {
157
+ if (error.response.status === 400) {
158
+ throw new Error((0, utils_1.getMessageInRedColor)(`The provided input is not valid. Please ensure the zip file contains a valid build file at the root level.`));
159
+ }
160
+ else if (error.response.status === 403) {
161
+ throw new Error((0, utils_1.getMessageInRedColor)(`Access denied. It looks like you don’t have access to APIMatic’s Docs as Code offering. Check your subscription details and contact our team at support@apimatic.io if you believe this is a mistake.`));
162
+ }
163
+ else if (error.response.status === 422) {
164
+ throw new Error((0, utils_1.getMessageInRedColor)(`Unable to process the build input. Please verify that your zip file is correctly structured and your build file is a valid JSON file.`));
165
+ }
166
+ else if (error.response.status === 500) {
167
+ throw new Error((0, utils_1.getMessageInRedColor)(`The server encountered an error while generating your portal, please try again. If the issue persists, contact our team at support@apimatic.io`));
168
+ }
169
+ else {
170
+ throw new Error((0, utils_1.getMessageInRedColor)(`Something went wrong while generating the portal. The server returned the following error ${error.response.status} ${error.response.statusText}. Please try again later. If the issue persists, contact our team at support@apimatic.io`));
171
+ }
172
+ }
173
+ else if (error.request) {
174
+ if (error.code === "ECONNABORTED") {
175
+ throw new Error((0, utils_1.getMessageInRedColor)(`The portal generation request timed out. Please try again. If the issue persists, try out our Async API for Docs as Code: https://docs.apimatic.io/platform-api/#/http/api-endpoints/docs-portal-management/generate-on-prem-portal-via-build-input`));
176
+ }
177
+ else if (error.code === "ENOTFOUND" || error.code === "ERR_NETWORK") {
178
+ throw new Error((0, utils_1.getMessageInRedColor)(`Network error encountered while generating the portal. Please check your connection and try again.`));
179
+ }
180
+ else {
181
+ throw new Error((0, utils_1.getMessageInRedColor)(`Something went wrong while generating the portal, please try again. If the issue persists, reach out to our support team at support@apimatic.io`));
182
+ }
183
+ }
184
+ else {
185
+ throw new Error((0, utils_1.getMessageInRedColor)(`Failed to generate portal: ${error.message}`));
186
+ }
187
+ }
188
+ else {
189
+ throw new Error((0, utils_1.getMessageInRedColor)(`Something went wrong while generating the portal, please try again later. If the issue persists, contact our team at support@apimatic.io`));
190
+ }
191
+ }
192
+ }
193
+ async servePortal(generatedPortalPath, targetFolder, configDir) {
194
+ const server = new server_1.PortalServerService();
195
+ server.setupServer(generatedPortalPath);
196
+ await server.startServer({
197
+ generatedPortalPath,
198
+ targetFolder,
199
+ configDir,
200
+ authKey: null
201
+ }, false, false);
202
+ await (0, utils_1.cleanUpGeneratedPortalFiles)(targetFolder);
203
+ }
204
+ }
205
+ exports.PortalQuickstartController = PortalQuickstartController;
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tzdGFydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cm9sbGVycy9wb3J0YWwvcXVpY2tzdGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBeUQ7QUFDekQsaUNBQTBCO0FBQzFCLDZCQUE2QjtBQUM3QixzQ0FBc0M7QUFDdEMseUJBQXlCO0FBQ3pCLG9DQUFvQztBQUNwQyxrRUFBOEQ7QUFJOUQsNkNBUTJCO0FBQzNCLDhDQUF1RDtBQUV2RCxtQ0FBeUM7QUFDekMsMENBQTRFO0FBQzVFLHlEQUFtRTtBQUduRSxNQUFhLDBCQUEwQjtJQUF2QztRQUNtQixZQUFPLEdBQ3RCLDhGQUE4RixDQUFDO0lBb1FuRyxDQUFDO0lBbFFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFpQjtRQUN6QyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsMEJBQVcsRUFBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsQ0FBQSxVQUFVLGFBQVYsVUFBVSx1QkFBVixVQUFVLENBQUUsT0FBTyxDQUFBLEVBQUUsQ0FBQztZQUN6QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQTZCLEVBQUUsTUFBaUIsRUFBRSxTQUFpQjtRQUNqRixNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVk7UUFDNUIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBQSwyQkFBbUIsR0FBRSxDQUFDO1FBRWhELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFB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
@@ -0,0 +1,4 @@
1
+ import * as chokidar from "chokidar";
2
+ import { CancelTokenSource } from "axios";
3
+ export declare const watchAndRegeneratePortal: (sourceDir: string, portalDir: string, configDir: string, overrideAuthKey: string | null, ignoredPaths?: string[]) => Promise<chokidar.FSWatcher>;
4
+ export declare const generatePortal: (sourceDir: string, portalDir: string, configDir: string, ignoredPaths?: string[], overrideAuthKey?: string | null, cancellationToken?: CancelTokenSource | null) => Promise<void>;