@supernovaio/cli-next 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +201 -0
  2. package/bin/dev +7 -0
  3. package/bin/dev.cmd +3 -0
  4. package/bin/run +57 -0
  5. package/bin/run.cmd +3 -0
  6. package/dist/commands/describe-design-system.d.ts +45 -0
  7. package/dist/commands/describe-design-system.d.ts.map +1 -0
  8. package/dist/commands/describe-design-system.js +75 -0
  9. package/dist/commands/describe-design-system.js.map +1 -0
  10. package/dist/commands/describe-workspaces.d.ts +54 -0
  11. package/dist/commands/describe-workspaces.d.ts.map +1 -0
  12. package/dist/commands/describe-workspaces.js +111 -0
  13. package/dist/commands/describe-workspaces.js.map +1 -0
  14. package/dist/commands/import-components.d.ts +50 -0
  15. package/dist/commands/import-components.d.ts.map +1 -0
  16. package/dist/commands/import-components.js +93 -0
  17. package/dist/commands/import-components.js.map +1 -0
  18. package/dist/commands/import-storybook.d.ts +69 -0
  19. package/dist/commands/import-storybook.d.ts.map +1 -0
  20. package/dist/commands/import-storybook.js +348 -0
  21. package/dist/commands/import-storybook.js.map +1 -0
  22. package/dist/commands/login.d.ts +30 -0
  23. package/dist/commands/login.d.ts.map +1 -0
  24. package/dist/commands/login.js +78 -0
  25. package/dist/commands/login.js.map +1 -0
  26. package/dist/commands/logout.d.ts +28 -0
  27. package/dist/commands/logout.d.ts.map +1 -0
  28. package/dist/commands/logout.js +46 -0
  29. package/dist/commands/logout.js.map +1 -0
  30. package/dist/commands/publish-documentation.d.ts +63 -0
  31. package/dist/commands/publish-documentation.d.ts.map +1 -0
  32. package/dist/commands/publish-documentation.js +136 -0
  33. package/dist/commands/publish-documentation.js.map +1 -0
  34. package/dist/commands/sync-tokens.d.ts +70 -0
  35. package/dist/commands/sync-tokens.d.ts.map +1 -0
  36. package/dist/commands/sync-tokens.js +109 -0
  37. package/dist/commands/sync-tokens.js.map +1 -0
  38. package/dist/hooks/postrun/save-config.d.ts +4 -0
  39. package/dist/hooks/postrun/save-config.d.ts.map +1 -0
  40. package/dist/hooks/postrun/save-config.js +17 -0
  41. package/dist/hooks/postrun/save-config.js.map +1 -0
  42. package/dist/hooks/prerun/load-config.d.ts +4 -0
  43. package/dist/hooks/prerun/load-config.d.ts.map +1 -0
  44. package/dist/hooks/prerun/load-config.js +24 -0
  45. package/dist/hooks/prerun/load-config.js.map +1 -0
  46. package/dist/hooks/prerun/sentry.d.ts +4 -0
  47. package/dist/hooks/prerun/sentry.d.ts.map +1 -0
  48. package/dist/hooks/prerun/sentry.js +17 -0
  49. package/dist/hooks/prerun/sentry.js.map +1 -0
  50. package/dist/index.d.ts +2 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +2 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/services/auth.service.d.ts +12 -0
  55. package/dist/services/auth.service.d.ts.map +1 -0
  56. package/dist/services/auth.service.js +104 -0
  57. package/dist/services/auth.service.js.map +1 -0
  58. package/dist/services/index.d.ts +3 -0
  59. package/dist/services/index.d.ts.map +1 -0
  60. package/dist/services/index.js +3 -0
  61. package/dist/services/index.js.map +1 -0
  62. package/dist/services/vault.service.d.ts +28 -0
  63. package/dist/services/vault.service.d.ts.map +1 -0
  64. package/dist/services/vault.service.js +181 -0
  65. package/dist/services/vault.service.js.map +1 -0
  66. package/dist/types/base-command.d.ts +23 -0
  67. package/dist/types/base-command.d.ts.map +1 -0
  68. package/dist/types/base-command.js +127 -0
  69. package/dist/types/base-command.js.map +1 -0
  70. package/dist/types/flags.d.ts +4 -0
  71. package/dist/types/flags.d.ts.map +1 -0
  72. package/dist/types/flags.js +11 -0
  73. package/dist/types/flags.js.map +1 -0
  74. package/dist/types/index.d.ts +7 -0
  75. package/dist/types/index.d.ts.map +1 -0
  76. package/dist/types/index.js +7 -0
  77. package/dist/types/index.js.map +1 -0
  78. package/dist/types/login.d.ts +189 -0
  79. package/dist/types/login.d.ts.map +1 -0
  80. package/dist/types/login.js +39 -0
  81. package/dist/types/login.js.map +1 -0
  82. package/dist/types/not-authorized.error.d.ts +6 -0
  83. package/dist/types/not-authorized.error.d.ts.map +1 -0
  84. package/dist/types/not-authorized.error.js +13 -0
  85. package/dist/types/not-authorized.error.js.map +1 -0
  86. package/dist/types/sentry-command.d.ts +15 -0
  87. package/dist/types/sentry-command.d.ts.map +1 -0
  88. package/dist/types/sentry-command.js +50 -0
  89. package/dist/types/sentry-command.js.map +1 -0
  90. package/dist/types/types.d.ts +29 -0
  91. package/dist/types/types.d.ts.map +1 -0
  92. package/dist/types/types.js +17 -0
  93. package/dist/types/types.js.map +1 -0
  94. package/dist/utils/api-client.d.ts +4 -0
  95. package/dist/utils/api-client.d.ts.map +1 -0
  96. package/dist/utils/api-client.js +11 -0
  97. package/dist/utils/api-client.js.map +1 -0
  98. package/dist/utils/common.d.ts +2 -0
  99. package/dist/utils/common.d.ts.map +1 -0
  100. package/dist/utils/common.js +6 -0
  101. package/dist/utils/common.js.map +1 -0
  102. package/dist/utils/config.service.d.ts +17 -0
  103. package/dist/utils/config.service.d.ts.map +1 -0
  104. package/dist/utils/config.service.js +70 -0
  105. package/dist/utils/config.service.js.map +1 -0
  106. package/dist/utils/figma-tokens-data-loader.d.ts +17 -0
  107. package/dist/utils/figma-tokens-data-loader.d.ts.map +1 -0
  108. package/dist/utils/figma-tokens-data-loader.js +193 -0
  109. package/dist/utils/figma-tokens-data-loader.js.map +1 -0
  110. package/dist/utils/index.d.ts +2 -0
  111. package/dist/utils/index.d.ts.map +1 -0
  112. package/dist/utils/index.js +2 -0
  113. package/dist/utils/index.js.map +1 -0
  114. package/dist/utils/network.d.ts +3 -0
  115. package/dist/utils/network.d.ts.map +1 -0
  116. package/dist/utils/network.js +13 -0
  117. package/dist/utils/network.js.map +1 -0
  118. package/dist/utils/run-exporter/exporter-utils.d.ts +14 -0
  119. package/dist/utils/run-exporter/exporter-utils.d.ts.map +1 -0
  120. package/dist/utils/run-exporter/exporter-utils.js +16 -0
  121. package/dist/utils/run-exporter/exporter-utils.js.map +1 -0
  122. package/dist/utils/sdk.d.ts +20 -0
  123. package/dist/utils/sdk.d.ts.map +1 -0
  124. package/dist/utils/sdk.js +52 -0
  125. package/dist/utils/sdk.js.map +1 -0
  126. package/oclif.manifest.json +534 -0
  127. package/package.json +143 -0
@@ -0,0 +1,127 @@
1
+ import { Command } from "@oclif/core";
2
+ import inquirer from "inquirer";
3
+ import { ConfigService } from "../utils/config.service.js";
4
+ import { getClient } from "../utils/index.js";
5
+ const hasAccess = (role) => role && ["Admin", "Contributor", "Creator", "Owner"].includes(role);
6
+ export class BaseCommand extends Command {
7
+ configService = ConfigService.getInstance();
8
+ apiClientForEnv = new Map();
9
+ async apiClient(env) {
10
+ let client = this.apiClientForEnv.get(env);
11
+ if (!client) {
12
+ client = await getClient(env);
13
+ this.apiClientForEnv.set(env, client);
14
+ }
15
+ return client;
16
+ }
17
+ async getBrandId(env, designSystemId, versionId, brandId) {
18
+ if (brandId)
19
+ return brandId;
20
+ const { designSystems: { versions: { brands }, }, } = await this.apiClient(env);
21
+ const brdIds = (await brands.list(designSystemId, versionId)).brands.map(({ meta: { name }, persistentId: id }) => ({
22
+ id,
23
+ name,
24
+ }));
25
+ if (brdIds.length === 1) {
26
+ return brdIds[0].id;
27
+ }
28
+ return this.promptWithExit("Select a brand:", brdIds.map(brand => ({
29
+ name: brand.name,
30
+ value: brand.id,
31
+ })));
32
+ }
33
+ async getDesignSystemId(env, designSystemId) {
34
+ if (designSystemId)
35
+ return designSystemId;
36
+ const { designSystems: client } = await this.apiClient(env);
37
+ const { designSystems, workspaces } = await client.listUserDesignSystems();
38
+ const workspaceById = new Map(workspaces.map(ws => [ws.id, ws]));
39
+ const dsNameCount = designSystems.reduce((acc, { meta: { name }, role }) => {
40
+ if (hasAccess(role))
41
+ acc.set(name, (acc.get(name) ?? 0) + 1);
42
+ return acc;
43
+ }, new Map());
44
+ if (designSystems.length === 0) {
45
+ this.error("You don't have any design system.");
46
+ }
47
+ const dsIds = designSystems
48
+ .sort(({ meta: { name: a } }, { meta: { name: b } }) => a.localeCompare(b))
49
+ .map(({ id, meta: { name }, role, workspaceId }) => ({
50
+ id,
51
+ name: (dsNameCount.get(name) ?? 0) > 1 ? `${name} (${workspaceById.get(workspaceId)?.profile?.name})` : name,
52
+ role,
53
+ }))
54
+ .filter(({ role }) => hasAccess(role));
55
+ if (dsIds.length === 0) {
56
+ this.error("You don't have access to any design system.");
57
+ }
58
+ if (dsIds.length === 1) {
59
+ return dsIds[0].id;
60
+ }
61
+ return this.promptWithExit("Select a design system:", dsIds.map(({ id, name }) => ({
62
+ name,
63
+ value: id,
64
+ })));
65
+ }
66
+ async getVersionId(env, designSystemId, versionId) {
67
+ if (versionId)
68
+ return versionId;
69
+ const { versions } = (await this.apiClient(env)).designSystems;
70
+ const verIds = (await versions.list(designSystemId)).designSystemVersions.map(({ id, meta: { name } }) => ({
71
+ id,
72
+ name,
73
+ }));
74
+ if (verIds.length === 1) {
75
+ return verIds[0].id;
76
+ }
77
+ return this.promptWithExit("Select a version:", verIds.map(wrk => ({
78
+ name: wrk.name,
79
+ value: wrk.id,
80
+ })));
81
+ }
82
+ async getWorkspaceId(env, workspaceId) {
83
+ if (workspaceId)
84
+ return workspaceId;
85
+ const { workspaces } = await this.apiClient(env);
86
+ const wrks = (await workspaces.list()).membership.map(({ workspace: { id, profile: { name }, }, }) => ({ id, name }));
87
+ if (wrks.length === 1) {
88
+ return wrks[0].id;
89
+ }
90
+ return this.promptWithExit("Select a workspace:", wrks.map(wrk => ({
91
+ name: wrk.name,
92
+ value: wrk.id,
93
+ })));
94
+ }
95
+ async parse(options, argv) {
96
+ const parsed = await super.parse(options, argv);
97
+ const fileConfig = this.configService.getCommandConfig(this.commandId, this.configSchema);
98
+ parsed.flags = { ...fileConfig, ...parsed.flags };
99
+ return parsed;
100
+ }
101
+ saveConfig(config) {
102
+ this.configService.updateCommandConfig(this.commandId, this.removeUndefinedValues(config));
103
+ }
104
+ async promptWithExit(message, choices) {
105
+ const choice = await inquirer.prompt([
106
+ {
107
+ choices: [...choices, { name: "Exit", value: "exit" }],
108
+ message,
109
+ name: "selected",
110
+ type: "list",
111
+ },
112
+ ]);
113
+ if (choice.selected === "exit") {
114
+ this.log("Exiting...");
115
+ this.exit();
116
+ }
117
+ return choice.selected;
118
+ }
119
+ removeUndefinedValues(obj) {
120
+ return Object.entries(obj).reduce((acc, [key, value]) => {
121
+ if (value !== undefined)
122
+ acc[key] = value;
123
+ return acc;
124
+ }, {});
125
+ }
126
+ }
127
+ //# sourceMappingURL=base-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-command.js","sourceRoot":"","sources":["../../src/types/base-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAMrC,OAAO,QAAQ,MAAM,UAAU,CAAA;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAG7C,MAAM,SAAS,GAAG,CAAC,IAA8B,EAAE,EAAE,CACnD,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;AAErE,MAAM,OAAgB,WAA8B,SAAQ,OAAO;IACvD,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAA;IAC7C,eAAe,GAAuC,IAAI,GAAG,EAAE,CAAA;IAK7D,KAAK,CAAC,SAAS,CAAC,GAAc;QACtC,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAA;YAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,GAAc,EACd,cAAsB,EACtB,SAAiB,EACjB,OAAgB;QAEhB,IAAI,OAAO;YAAE,OAAO,OAAO,CAAA;QAC3B,MAAM,EACJ,aAAa,EAAE,EACb,QAAQ,EAAE,EAAE,MAAM,EAAE,GACrB,GACF,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CACtE,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACzC,EAAE;YACF,IAAI;SACL,CAAC,CACH,CAAA;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CACxB,iBAAiB,EACjB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,EAAE;SAChB,CAAC,CAAC,CACJ,CAAA;IACH,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,GAAc,EAAE,cAAuB;QACvE,IAAI,cAAc;YAAE,OAAO,cAAc,CAAA;QACzC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAC3D,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE,CAAA;QAC1E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;QAChE,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YACzE,IAAI,SAAS,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;YAE5D,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,IAAI,GAAG,EAAkB,CAAC,CAAA;QAE7B,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,KAAK,GAAG,aAAa;aACxB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aAC1E,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,EAAE;YACF,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI;YAC5G,IAAI;SACL,CAAC,CAAC;aACF,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAExC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACpB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CACxB,yBAAyB,EACzB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI;YACJ,KAAK,EAAE,EAAE;SACV,CAAC,CAAC,CACJ,CAAA;IACH,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,GAAc,EAAE,cAAsB,EAAE,SAAkB;QACrF,IAAI,SAAS;YAAE,OAAO,SAAS,CAAA;QAC/B,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAA;QAC9D,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACzG,EAAE;YACF,IAAI;SACL,CAAC,CAAC,CAAA;QAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CACxB,mBAAmB,EACnB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAC,CACJ,CAAA;IACH,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,GAAc,EAAE,WAAoB;QACjE,IAAI,WAAW;YAAE,OAAO,WAAW,CAAA;QACnC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;QAChD,MAAM,IAAI,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CACnD,CAAC,EACC,SAAS,EAAE,EACT,EAAE,EACF,OAAO,EAAE,EAAE,IAAI,EAAE,GAClB,GACF,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CACrB,CAAA;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACnB,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CACxB,qBAAqB,EACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACf,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,EAAE;SACd,CAAC,CAAC,CACJ,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,KAAK,CAChB,OAAwB,EACxB,IAAe;QAEf,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACzF,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;QACjD,OAAO,MAAM,CAAA;IACf,CAAC;IAES,UAAU,CAAC,MAA+B;QAClD,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAA;IAC5F,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,OAA0C;QACtF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YACnC;gBACE,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBACtD,OAAO;gBACP,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,MAAM;aACb;SACF,CAAC,CAAA;QACF,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YACtB,IAAI,CAAC,IAAI,EAAE,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAC,QAAkB,CAAA;IAClC,CAAC;IAEO,qBAAqB,CAAC,GAA4B;QACxD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAC/B,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACpB,IAAI,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;YACzC,OAAO,GAAG,CAAA;QACZ,CAAC,EACD,EAA6B,CAC9B,CAAA;IACH,CAAC;CACF","sourcesContent":["import { Command } from \"@oclif/core\"\nimport { Input, ParserOutput } from \"@oclif/core/interfaces\"\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport { ArgOutput, FlagOutput } from \"@oclif/core/lib/interfaces/parser.js\"\nimport { DTODesignSystem, SupernovaApiClient } from \"@supernova-studio/client\"\nimport inquirer from \"inquirer\"\nimport { z } from \"zod\"\n\nimport { ConfigService } from \"../utils/config.service.js\"\nimport { getClient } from \"../utils/index.js\"\nimport { TargetEnv } from \"./login.js\"\n\nconst hasAccess = (role?: DTODesignSystem[\"role\"]) =>\n role && [\"Admin\", \"Contributor\", \"Creator\", \"Owner\"].includes(role)\n\nexport abstract class BaseCommand<T extends object> extends Command {\n protected configService = ConfigService.getInstance()\n private apiClientForEnv: Map<TargetEnv, SupernovaApiClient> = new Map()\n\n abstract get commandId(): string\n abstract get configSchema(): z.ZodType<T>\n\n protected async apiClient(env: TargetEnv): Promise<SupernovaApiClient> {\n let client = this.apiClientForEnv.get(env)\n if (!client) {\n client = await getClient(env)\n this.apiClientForEnv.set(env, client)\n }\n\n return client\n }\n\n protected async getBrandId(\n env: TargetEnv,\n designSystemId: string,\n versionId: string,\n brandId?: string,\n ): Promise<string> {\n if (brandId) return brandId\n const {\n designSystems: {\n versions: { brands },\n },\n } = await this.apiClient(env)\n const brdIds = (await brands.list(designSystemId, versionId)).brands.map(\n ({ meta: { name }, persistentId: id }) => ({\n id,\n name,\n }),\n )\n\n if (brdIds.length === 1) {\n return brdIds[0].id\n }\n\n return this.promptWithExit(\n \"Select a brand:\",\n brdIds.map(brand => ({\n name: brand.name,\n value: brand.id,\n })),\n )\n }\n\n protected async getDesignSystemId(env: TargetEnv, designSystemId?: string): Promise<string> {\n if (designSystemId) return designSystemId\n const { designSystems: client } = await this.apiClient(env)\n const { designSystems, workspaces } = await client.listUserDesignSystems()\n const workspaceById = new Map(workspaces.map(ws => [ws.id, ws]))\n const dsNameCount = designSystems.reduce((acc, { meta: { name }, role }) => {\n if (hasAccess(role)) acc.set(name, (acc.get(name) ?? 0) + 1)\n\n return acc\n }, new Map<string, number>())\n\n if (designSystems.length === 0) {\n this.error(\"You don't have any design system.\")\n }\n\n const dsIds = designSystems\n .sort(({ meta: { name: a } }, { meta: { name: b } }) => a.localeCompare(b))\n .map(({ id, meta: { name }, role, workspaceId }) => ({\n id,\n name: (dsNameCount.get(name) ?? 0) > 1 ? `${name} (${workspaceById.get(workspaceId)?.profile?.name})` : name,\n role,\n }))\n .filter(({ role }) => hasAccess(role))\n\n if (dsIds.length === 0) {\n this.error(\"You don't have access to any design system.\")\n }\n\n if (dsIds.length === 1) {\n return dsIds[0].id\n }\n\n return this.promptWithExit(\n \"Select a design system:\",\n dsIds.map(({ id, name }) => ({\n name,\n value: id,\n })),\n )\n }\n\n protected async getVersionId(env: TargetEnv, designSystemId: string, versionId?: string): Promise<string> {\n if (versionId) return versionId\n const { versions } = (await this.apiClient(env)).designSystems\n const verIds = (await versions.list(designSystemId)).designSystemVersions.map(({ id, meta: { name } }) => ({\n id,\n name,\n }))\n\n if (verIds.length === 1) {\n return verIds[0].id\n }\n\n return this.promptWithExit(\n \"Select a version:\",\n verIds.map(wrk => ({\n name: wrk.name,\n value: wrk.id,\n })),\n )\n }\n\n protected async getWorkspaceId(env: TargetEnv, workspaceId?: string): Promise<string> {\n if (workspaceId) return workspaceId\n const { workspaces } = await this.apiClient(env)\n const wrks = (await workspaces.list()).membership.map(\n ({\n workspace: {\n id,\n profile: { name },\n },\n }) => ({ id, name }),\n )\n\n if (wrks.length === 1) {\n return wrks[0].id\n }\n\n return this.promptWithExit(\n \"Select a workspace:\",\n wrks.map(wrk => ({\n name: wrk.name,\n value: wrk.id,\n })),\n )\n }\n\n public async parse<F extends FlagOutput, B extends FlagOutput, A extends ArgOutput>(\n options?: Input<F, B, A>,\n argv?: string[],\n ): Promise<ParserOutput<F, B, A>> {\n const parsed = await super.parse(options, argv)\n const fileConfig = this.configService.getCommandConfig(this.commandId, this.configSchema)\n parsed.flags = { ...fileConfig, ...parsed.flags }\n return parsed\n }\n\n protected saveConfig(config: Record<string, unknown>): void {\n this.configService.updateCommandConfig(this.commandId, this.removeUndefinedValues(config))\n }\n\n private async promptWithExit(message: string, choices: { name: string; value: string }[]) {\n const choice = await inquirer.prompt([\n {\n choices: [...choices, { name: \"Exit\", value: \"exit\" }],\n message,\n name: \"selected\",\n type: \"list\",\n },\n ])\n if (choice.selected === \"exit\") {\n this.log(\"Exiting...\")\n this.exit()\n }\n\n return choice.selected as string\n }\n\n private removeUndefinedValues(obj: Record<string, unknown>): Record<string, unknown> {\n return Object.entries(obj).reduce(\n (acc, [key, value]) => {\n if (value !== undefined) acc[key] = value\n return acc\n },\n {} as Record<string, unknown>,\n )\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export declare const flags: {
2
+ environment: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
3
+ };
4
+ //# sourceMappingURL=flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/types/flags.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,KAAK;;CAOjB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { Flags } from "@oclif/core";
2
+ import { defaultTargetEnv, targetEnvs } from "./login.js";
3
+ export const flags = {
4
+ environment: Flags.string({
5
+ char: "e",
6
+ default: defaultTargetEnv,
7
+ description: "Target environment (demo, development, local, production, staging)",
8
+ options: targetEnvs,
9
+ }),
10
+ };
11
+ //# sourceMappingURL=flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/types/flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAEnC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEzD,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;QACxB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,oEAAoE;QACjF,OAAO,EAAE,UAAU;KACpB,CAAC;CACH,CAAA","sourcesContent":["import { Flags } from \"@oclif/core\"\n\nimport { defaultTargetEnv, targetEnvs } from \"./login.js\"\n\nexport const flags = {\n environment: Flags.string({\n char: \"e\",\n default: defaultTargetEnv,\n description: \"Target environment (demo, development, local, production, staging)\",\n options: targetEnvs,\n }),\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export * from "./base-command.js";
2
+ export * from "./flags.js";
3
+ export * from "./login.js";
4
+ export * from "./not-authorized.error.js";
5
+ export * from "./sentry-command.js";
6
+ export * from "./types.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA"}
@@ -0,0 +1,7 @@
1
+ export * from "./base-command.js";
2
+ export * from "./flags.js";
3
+ export * from "./login.js";
4
+ export * from "./not-authorized.error.js";
5
+ export * from "./sentry-command.js";
6
+ export * from "./types.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,YAAY,CAAA","sourcesContent":["export * from \"./base-command.js\"\nexport * from \"./flags.js\"\nexport * from \"./login.js\"\nexport * from \"./not-authorized.error.js\"\nexport * from \"./sentry-command.js\"\nexport * from \"./types.js\"\n"]}
@@ -0,0 +1,189 @@
1
+ import { z } from "zod";
2
+ export declare const urlMap: {
3
+ demo: string;
4
+ development: string;
5
+ local: string;
6
+ production: string;
7
+ staging: string;
8
+ };
9
+ export type TargetEnv = keyof typeof urlMap;
10
+ export declare const targetEnvs: TargetEnv[];
11
+ export declare const TokensSchema: z.ZodObject<{
12
+ accessToken: z.ZodString;
13
+ refreshToken: z.ZodOptional<z.ZodString>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ accessToken: string;
16
+ refreshToken?: string | undefined;
17
+ }, {
18
+ accessToken: string;
19
+ refreshToken?: string | undefined;
20
+ }>;
21
+ export declare const StatusTokensSchema: z.ZodDiscriminatedUnion<"status", [z.ZodObject<{
22
+ status: z.ZodLiteral<"Pending">;
23
+ tokens: z.ZodOptional<z.ZodNever>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ status: "Pending";
26
+ tokens?: undefined;
27
+ }, {
28
+ status: "Pending";
29
+ tokens?: undefined;
30
+ }>, z.ZodObject<{
31
+ status: z.ZodLiteral<"Success">;
32
+ tokens: z.ZodObject<{
33
+ accessToken: z.ZodString;
34
+ refreshToken: z.ZodOptional<z.ZodString>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ accessToken: string;
37
+ refreshToken?: string | undefined;
38
+ }, {
39
+ accessToken: string;
40
+ refreshToken?: string | undefined;
41
+ }>;
42
+ }, "strip", z.ZodTypeAny, {
43
+ status: "Success";
44
+ tokens: {
45
+ accessToken: string;
46
+ refreshToken?: string | undefined;
47
+ };
48
+ }, {
49
+ status: "Success";
50
+ tokens: {
51
+ accessToken: string;
52
+ refreshToken?: string | undefined;
53
+ };
54
+ }>]>;
55
+ export declare const TokensResponseSchema: z.ZodObject<{
56
+ result: z.ZodDiscriminatedUnion<"status", [z.ZodObject<{
57
+ status: z.ZodLiteral<"Pending">;
58
+ tokens: z.ZodOptional<z.ZodNever>;
59
+ }, "strip", z.ZodTypeAny, {
60
+ status: "Pending";
61
+ tokens?: undefined;
62
+ }, {
63
+ status: "Pending";
64
+ tokens?: undefined;
65
+ }>, z.ZodObject<{
66
+ status: z.ZodLiteral<"Success">;
67
+ tokens: z.ZodObject<{
68
+ accessToken: z.ZodString;
69
+ refreshToken: z.ZodOptional<z.ZodString>;
70
+ }, "strip", z.ZodTypeAny, {
71
+ accessToken: string;
72
+ refreshToken?: string | undefined;
73
+ }, {
74
+ accessToken: string;
75
+ refreshToken?: string | undefined;
76
+ }>;
77
+ }, "strip", z.ZodTypeAny, {
78
+ status: "Success";
79
+ tokens: {
80
+ accessToken: string;
81
+ refreshToken?: string | undefined;
82
+ };
83
+ }, {
84
+ status: "Success";
85
+ tokens: {
86
+ accessToken: string;
87
+ refreshToken?: string | undefined;
88
+ };
89
+ }>]>;
90
+ }, "strip", z.ZodTypeAny, {
91
+ result: {
92
+ status: "Pending";
93
+ tokens?: undefined;
94
+ } | {
95
+ status: "Success";
96
+ tokens: {
97
+ accessToken: string;
98
+ refreshToken?: string | undefined;
99
+ };
100
+ };
101
+ }, {
102
+ result: {
103
+ status: "Pending";
104
+ tokens?: undefined;
105
+ } | {
106
+ status: "Success";
107
+ tokens: {
108
+ accessToken: string;
109
+ refreshToken?: string | undefined;
110
+ };
111
+ };
112
+ }>;
113
+ export declare const RefreshTokenResponseSchema: z.ZodObject<{
114
+ result: z.ZodObject<{
115
+ tokens: z.ZodObject<{
116
+ accessToken: z.ZodString;
117
+ refreshToken: z.ZodOptional<z.ZodString>;
118
+ }, "strip", z.ZodTypeAny, {
119
+ accessToken: string;
120
+ refreshToken?: string | undefined;
121
+ }, {
122
+ accessToken: string;
123
+ refreshToken?: string | undefined;
124
+ }>;
125
+ }, "strip", z.ZodTypeAny, {
126
+ tokens: {
127
+ accessToken: string;
128
+ refreshToken?: string | undefined;
129
+ };
130
+ }, {
131
+ tokens: {
132
+ accessToken: string;
133
+ refreshToken?: string | undefined;
134
+ };
135
+ }>;
136
+ }, "strip", z.ZodTypeAny, {
137
+ result: {
138
+ tokens: {
139
+ accessToken: string;
140
+ refreshToken?: string | undefined;
141
+ };
142
+ };
143
+ }, {
144
+ result: {
145
+ tokens: {
146
+ accessToken: string;
147
+ refreshToken?: string | undefined;
148
+ };
149
+ };
150
+ }>;
151
+ export declare const AuthResponseSchema: z.ZodObject<{
152
+ result: z.ZodObject<{
153
+ authorizeUrl: z.ZodString;
154
+ readKey: z.ZodString;
155
+ }, "strip", z.ZodTypeAny, {
156
+ authorizeUrl: string;
157
+ readKey: string;
158
+ }, {
159
+ authorizeUrl: string;
160
+ readKey: string;
161
+ }>;
162
+ }, "strip", z.ZodTypeAny, {
163
+ result: {
164
+ authorizeUrl: string;
165
+ readKey: string;
166
+ };
167
+ }, {
168
+ result: {
169
+ authorizeUrl: string;
170
+ readKey: string;
171
+ };
172
+ }>;
173
+ export declare const EnvTokensSchema: z.ZodRecord<z.ZodEnum<["demo", "development", "production", "staging", "local"]>, z.ZodOptional<z.ZodObject<{
174
+ accessToken: z.ZodString;
175
+ refreshToken: z.ZodOptional<z.ZodString>;
176
+ }, "strip", z.ZodTypeAny, {
177
+ accessToken: string;
178
+ refreshToken?: string | undefined;
179
+ }, {
180
+ accessToken: string;
181
+ refreshToken?: string | undefined;
182
+ }>>>;
183
+ export type AuthResponse = z.infer<typeof AuthResponseSchema>;
184
+ export type Tokens = z.infer<typeof TokensSchema>;
185
+ export type TokensResponse = z.infer<typeof TokensResponseSchema>;
186
+ export type RefreshTokenResponse = z.infer<typeof RefreshTokenResponseSchema>;
187
+ export type EnvTokens = z.infer<typeof EnvTokensSchema>;
188
+ export declare const defaultTargetEnv: TargetEnv;
189
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/types/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAA;AAE3C,eAAO,MAAM,UAAU,EAA0B,SAAS,EAAE,CAAA;AAE5D,eAAO,MAAM,YAAY;;;;;;;;;EAGvB,CAAA;AAYF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAyF,CAAA;AAExH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE/B,CAAA;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIrC,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EAK7B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;IAG3B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAC7D,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AACjD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAC7E,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAA;AAEvD,eAAO,MAAM,gBAAgB,EAAE,SAAwB,CAAA"}
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ export const urlMap = {
3
+ demo: "https://auth-2.demo.supernova.io/api/plugin-oauth",
4
+ development: "https://auth-2.dev.supernova.io/api/plugin-oauth",
5
+ local: `https://auth-2.dev.supernova.io/api/plugin-oauth`,
6
+ production: "https://auth-2.supernova.io/api/plugin-oauth",
7
+ staging: "https://auth-2.staging.supernova.io/api/plugin-oauth",
8
+ };
9
+ export const targetEnvs = Object.keys(urlMap);
10
+ export const TokensSchema = z.object({
11
+ accessToken: z.string(),
12
+ refreshToken: z.string().optional(),
13
+ });
14
+ const PendingStatusTokensSchema = z.object({
15
+ status: z.literal("Pending"),
16
+ tokens: z.never().optional(),
17
+ });
18
+ const SuccessStatusTokensSchema = z.object({
19
+ status: z.literal("Success"),
20
+ tokens: TokensSchema,
21
+ });
22
+ export const StatusTokensSchema = z.discriminatedUnion("status", [PendingStatusTokensSchema, SuccessStatusTokensSchema]);
23
+ export const TokensResponseSchema = z.object({
24
+ result: StatusTokensSchema,
25
+ });
26
+ export const RefreshTokenResponseSchema = z.object({
27
+ result: z.object({
28
+ tokens: TokensSchema,
29
+ }),
30
+ });
31
+ export const AuthResponseSchema = z.object({
32
+ result: z.object({
33
+ authorizeUrl: z.string(),
34
+ readKey: z.string(),
35
+ }),
36
+ });
37
+ export const EnvTokensSchema = z.record(z.enum(["demo", "development", "production", "staging", "local"]), TokensSchema.optional());
38
+ export const defaultTargetEnv = "production";
39
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/types/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,mDAAmD;IACzD,WAAW,EAAE,kDAAkD;IAC/D,KAAK,EAAE,kDAAkD;IACzD,UAAU,EAAE,8CAA8C;IAC1D,OAAO,EAAE,sDAAsD;CAChE,CAAA;AAID,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAgB,CAAA;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC5B,MAAM,EAAE,YAAY;CACrB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC,CAAA;AAExH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,kBAAkB;CAC3B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,YAAY;KACrB,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC;CACH,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CACrC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,EACjE,YAAY,CAAC,QAAQ,EAAE,CACxB,CAAA;AAQD,MAAM,CAAC,MAAM,gBAAgB,GAAc,YAAY,CAAA","sourcesContent":["import { z } from \"zod\"\n\nexport const urlMap = {\n demo: \"https://auth-2.demo.supernova.io/api/plugin-oauth\",\n development: \"https://auth-2.dev.supernova.io/api/plugin-oauth\",\n local: `https://auth-2.dev.supernova.io/api/plugin-oauth`,\n production: \"https://auth-2.supernova.io/api/plugin-oauth\",\n staging: \"https://auth-2.staging.supernova.io/api/plugin-oauth\",\n}\n\nexport type TargetEnv = keyof typeof urlMap\n\nexport const targetEnvs = Object.keys(urlMap) as TargetEnv[]\n\nexport const TokensSchema = z.object({\n accessToken: z.string(),\n refreshToken: z.string().optional(),\n})\n\nconst PendingStatusTokensSchema = z.object({\n status: z.literal(\"Pending\"),\n tokens: z.never().optional(),\n})\n\nconst SuccessStatusTokensSchema = z.object({\n status: z.literal(\"Success\"),\n tokens: TokensSchema,\n})\n\nexport const StatusTokensSchema = z.discriminatedUnion(\"status\", [PendingStatusTokensSchema, SuccessStatusTokensSchema])\n\nexport const TokensResponseSchema = z.object({\n result: StatusTokensSchema,\n})\n\nexport const RefreshTokenResponseSchema = z.object({\n result: z.object({\n tokens: TokensSchema,\n }),\n})\n\nexport const AuthResponseSchema = z.object({\n result: z.object({\n authorizeUrl: z.string(),\n readKey: z.string(),\n }),\n})\n\nexport const EnvTokensSchema = z.record(\n z.enum([\"demo\", \"development\", \"production\", \"staging\", \"local\"]),\n TokensSchema.optional(),\n)\n\nexport type AuthResponse = z.infer<typeof AuthResponseSchema>\nexport type Tokens = z.infer<typeof TokensSchema>\nexport type TokensResponse = z.infer<typeof TokensResponseSchema>\nexport type RefreshTokenResponse = z.infer<typeof RefreshTokenResponseSchema>\nexport type EnvTokens = z.infer<typeof EnvTokensSchema>\n\nexport const defaultTargetEnv: TargetEnv = \"production\"\n"]}
@@ -0,0 +1,6 @@
1
+ export declare class NotAuthorizedError extends Error {
2
+ readonly code: string;
3
+ constructor(message?: string, code?: string);
4
+ getFormattedMessage(): string;
5
+ }
6
+ //# sourceMappingURL=not-authorized.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-authorized.error.d.ts","sourceRoot":"","sources":["../../src/types/not-authorized.error.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,IAAI,EAAE,MAAM,CAAA;gBAEhB,OAAO,GAAE,MAA+C,EAAE,IAAI,GAAE,MAAyB;IAQ9F,mBAAmB,IAAI,MAAM;CAGrC"}
@@ -0,0 +1,13 @@
1
+ export class NotAuthorizedError extends Error {
2
+ code;
3
+ constructor(message = 'Not authorized. Login first, please.', code = 'NOT_AUTHORIZED') {
4
+ super(message);
5
+ this.name = 'NotAuthorizedError';
6
+ this.code = code;
7
+ Object.setPrototypeOf(this, new.target.prototype);
8
+ }
9
+ getFormattedMessage() {
10
+ return `[${this.code}] ${this.message}`;
11
+ }
12
+ }
13
+ //# sourceMappingURL=not-authorized.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"not-authorized.error.js","sourceRoot":"","sources":["../../src/types/not-authorized.error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3B,IAAI,CAAQ;IAE5B,YAAY,UAAkB,sCAAsC,EAAE,OAAe,gBAAgB;QACnG,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACnD,CAAC;IAEM,mBAAmB;QACxB,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAA;IACzC,CAAC;CACF","sourcesContent":["export class NotAuthorizedError extends Error {\n public readonly code: string\n\n constructor(message: string = 'Not authorized. Login first, please.', code: string = 'NOT_AUTHORIZED') {\n super(message)\n this.name = 'NotAuthorizedError'\n this.code = code\n\n Object.setPrototypeOf(this, new.target.prototype)\n }\n\n public getFormattedMessage(): string {\n return `[${this.code}] ${this.message}`\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import { Config } from "@oclif/core/config";
2
+ import { CommandError, Input, ParserOutput } from "@oclif/core/interfaces";
3
+ import { ArgOutput, FlagOutput } from "@oclif/core/lib/interfaces/parser.js";
4
+ import { BaseCommand } from "./base-command.js";
5
+ export declare abstract class SentryCommand<T extends object> extends BaseCommand<T> {
6
+ protected constructor(argv: string[], config: Config);
7
+ catch(error: CommandError & {
8
+ oclif?: {
9
+ exit: number;
10
+ };
11
+ }): Promise<void>;
12
+ finally(): Promise<void>;
13
+ parse<F extends FlagOutput, B extends FlagOutput, A extends ArgOutput>(options?: Input<F, B, A>, argv?: string[]): Promise<ParserOutput<F, B, A>>;
14
+ }
15
+ //# sourceMappingURL=sentry-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry-command.d.ts","sourceRoot":"","sources":["../../src/types/sentry-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAG1E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAA;AAG5E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,8BAAsB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAC1E,SAAS,aAAa,IAAI,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM;IAI9C,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG;QAAE,KAAK,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;IAcxD,OAAO;IAEA,KAAK,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,SAAS,EAChF,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxB,IAAI,CAAC,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;CAgClC"}
@@ -0,0 +1,50 @@
1
+ import * as Sentry from "@sentry/node";
2
+ import { BaseCommand } from "./base-command.js";
3
+ import { NotAuthorizedError } from "./not-authorized.error.js";
4
+ export class SentryCommand extends BaseCommand {
5
+ constructor(argv, config) {
6
+ super(argv, config);
7
+ }
8
+ async catch(error) {
9
+ this.logToStderr(error.message);
10
+ if (error.oclif) {
11
+ throw error;
12
+ }
13
+ if (error instanceof NotAuthorizedError) {
14
+ throw error;
15
+ }
16
+ Sentry.captureException(error);
17
+ this.logToStderr(`Something went wrong. Please try again later.`);
18
+ }
19
+ async finally() { }
20
+ async parse(options, argv) {
21
+ Sentry.addBreadcrumb({
22
+ category: "command",
23
+ data: {
24
+ commandName: this.id,
25
+ },
26
+ level: "debug",
27
+ message: "Starting command parse",
28
+ });
29
+ const parsed = await super.parse(options, argv);
30
+ const span = Sentry.getActiveSpan();
31
+ if (span) {
32
+ span.setAttributes({
33
+ args: Object.keys(parsed.args),
34
+ designSystemId: parsed.flags.designSystemId,
35
+ flags: Object.keys(parsed.flags),
36
+ workspaceId: parsed.flags.workspaceId,
37
+ });
38
+ }
39
+ Sentry.addBreadcrumb({
40
+ category: "command",
41
+ data: {
42
+ result: "success",
43
+ },
44
+ level: "debug",
45
+ message: "Command parse completed",
46
+ });
47
+ return parsed;
48
+ }
49
+ }
50
+ //# sourceMappingURL=sentry-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry-command.js","sourceRoot":"","sources":["../../src/types/sentry-command.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D,MAAM,OAAgB,aAAgC,SAAQ,WAAc;IAC1E,YAAsB,IAAc,EAAE,MAAc;QAClD,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAkD;QAC5D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,KAAK,CAAA;QACb,CAAC;QAED,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;YACxC,MAAM,KAAK,CAAA;QACb,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAC9B,IAAI,CAAC,WAAW,CAAC,+CAA+C,CAAC,CAAA;IACnE,CAAC;IAED,KAAK,CAAC,OAAO,KAAI,CAAC;IAEX,KAAK,CAAC,KAAK,CAChB,OAAwB,EACxB,IAAe;QAEf,MAAM,CAAC,aAAa,CAAC;YACnB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE;gBACJ,WAAW,EAAE,IAAI,CAAC,EAAE;aACrB;YACD,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,wBAAwB;SAClC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,EAAE,CAAA;QACnC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,aAAa,CAAC;gBACjB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC9B,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc;gBAC3C,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW;aACtC,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,CAAC,aAAa,CAAC;YACnB,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE;gBACJ,MAAM,EAAE,SAAS;aAClB;YACD,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,yBAAyB;SACnC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAA;IACf,CAAC;CACF","sourcesContent":["import { Config } from \"@oclif/core/config\"\nimport { CommandError, Input, ParserOutput } from \"@oclif/core/interfaces\"\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error\nimport { ArgOutput, FlagOutput } from \"@oclif/core/lib/interfaces/parser.js\"\nimport * as Sentry from \"@sentry/node\"\n\nimport { BaseCommand } from \"./base-command.js\"\nimport { NotAuthorizedError } from \"./not-authorized.error.js\"\n\nexport abstract class SentryCommand<T extends object> extends BaseCommand<T> {\n protected constructor(argv: string[], config: Config) {\n super(argv, config)\n }\n\n async catch(error: CommandError & { oclif?: { exit: number } }) {\n this.logToStderr(error.message)\n if (error.oclif) {\n throw error\n }\n\n if (error instanceof NotAuthorizedError) {\n throw error\n }\n\n Sentry.captureException(error)\n this.logToStderr(`Something went wrong. Please try again later.`)\n }\n\n async finally() {}\n\n public async parse<F extends FlagOutput, B extends FlagOutput, A extends ArgOutput>(\n options?: Input<F, B, A>,\n argv?: string[],\n ): Promise<ParserOutput<F, B, A>> {\n Sentry.addBreadcrumb({\n category: \"command\",\n data: {\n commandName: this.id,\n },\n level: \"debug\",\n message: \"Starting command parse\",\n })\n\n const parsed = await super.parse(options, argv)\n const span = Sentry.getActiveSpan()\n if (span) {\n span.setAttributes({\n args: Object.keys(parsed.args),\n designSystemId: parsed.flags.designSystemId,\n flags: Object.keys(parsed.flags),\n workspaceId: parsed.flags.workspaceId,\n })\n }\n\n Sentry.addBreadcrumb({\n category: \"command\",\n data: {\n result: \"success\",\n },\n level: \"debug\",\n message: \"Command parse completed\",\n })\n\n return parsed\n }\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import * as pulsar from "@supernova-studio/pulsar-language";
2
+ export interface ExportConfiguration {
3
+ accessToken: string;
4
+ apiUrl: string;
5
+ apiVersion?: string;
6
+ brandId?: string;
7
+ debugMode?: boolean;
8
+ designSystemId: string;
9
+ designSystemVersionId: string;
10
+ exportPath: string;
11
+ logger: pulsar.PLLogger;
12
+ proxyUrl?: string;
13
+ themeId?: string;
14
+ }
15
+ export declare enum Environment {
16
+ demo = "demo",
17
+ development = "development",
18
+ local = "local",
19
+ production = "production",
20
+ staging = "staging"
21
+ }
22
+ export declare enum ErrorCode {
23
+ designSystemDescriptionFailed = "ERR_DESIGN_SYSTEM_DESCRIPTION_FAILED",
24
+ documentationPublishingFailed = "ERR_DOCUMENTATION_PUBLISHING_FAILED",
25
+ exportFailed = "ERR_EXPORT_FAILED",
26
+ tokenSyncFailed = "ERR_TOKEN_SYNC_FAILED",
27
+ workspaceDescriptionFailed = "ERR_WORKSPACE_DESCRIPTION_FAILED"
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,MAAM,mCAAmC,CAAA;AAK3D,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,oBAAY,WAAW;IACrB,IAAI,SAAS;IACb,WAAW,gBAAgB;IAC3B,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,OAAO,YAAY;CACpB;AAED,oBAAY,SAAS;IACnB,6BAA6B,yCAAyC;IACtE,6BAA6B,wCAAwC;IACrE,YAAY,sBAAsB;IAClC,eAAe,0BAA0B;IACzC,0BAA0B,qCAAqC;CAChE"}
@@ -0,0 +1,17 @@
1
+ export var Environment;
2
+ (function (Environment) {
3
+ Environment["demo"] = "demo";
4
+ Environment["development"] = "development";
5
+ Environment["local"] = "local";
6
+ Environment["production"] = "production";
7
+ Environment["staging"] = "staging";
8
+ })(Environment || (Environment = {}));
9
+ export var ErrorCode;
10
+ (function (ErrorCode) {
11
+ ErrorCode["designSystemDescriptionFailed"] = "ERR_DESIGN_SYSTEM_DESCRIPTION_FAILED";
12
+ ErrorCode["documentationPublishingFailed"] = "ERR_DOCUMENTATION_PUBLISHING_FAILED";
13
+ ErrorCode["exportFailed"] = "ERR_EXPORT_FAILED";
14
+ ErrorCode["tokenSyncFailed"] = "ERR_TOKEN_SYNC_FAILED";
15
+ ErrorCode["workspaceDescriptionFailed"] = "ERR_WORKSPACE_DESCRIPTION_FAILED";
16
+ })(ErrorCode || (ErrorCode = {}));
17
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"AA+BA,MAAM,CAAN,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,0CAA2B,CAAA;IAC3B,8BAAe,CAAA;IACf,wCAAyB,CAAA;IACzB,kCAAmB,CAAA;AACrB,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB;AAED,MAAM,CAAN,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,mFAAsE,CAAA;IACtE,kFAAqE,CAAA;IACrE,+CAAkC,CAAA;IAClC,sDAAyC,CAAA;IACzC,4EAA+D,CAAA;AACjE,CAAC,EANW,SAAS,KAAT,SAAS,QAMpB","sourcesContent":["//\n// types.ts\n// Supernova CLI\n//\n// Created by Jiri Trecak.\n// Copyright © Supernova.io. All rights reserved.\n//\n\n// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n// MARK: - Imports\n\n// eslint-disable-next-line n/no-extraneous-import\nimport * as pulsar from \"@supernova-studio/pulsar-language\"\n\n// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n// MARK: - Types\n\nexport interface ExportConfiguration {\n accessToken: string\n apiUrl: string\n apiVersion?: string\n brandId?: string\n debugMode?: boolean\n designSystemId: string\n designSystemVersionId: string\n exportPath: string\n logger: pulsar.PLLogger\n proxyUrl?: string\n themeId?: string\n}\n\nexport enum Environment {\n demo = \"demo\",\n development = \"development\",\n local = \"local\",\n production = \"production\",\n staging = \"staging\",\n}\n\nexport enum ErrorCode {\n designSystemDescriptionFailed = \"ERR_DESIGN_SYSTEM_DESCRIPTION_FAILED\",\n documentationPublishingFailed = \"ERR_DOCUMENTATION_PUBLISHING_FAILED\",\n exportFailed = \"ERR_EXPORT_FAILED\",\n tokenSyncFailed = \"ERR_TOKEN_SYNC_FAILED\",\n workspaceDescriptionFailed = \"ERR_WORKSPACE_DESCRIPTION_FAILED\",\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import { SupernovaApiClient } from "@supernova-studio/client";
2
+ import { TargetEnv } from "../types/index.js";
3
+ export declare const getClient: (env?: TargetEnv, version?: string) => Promise<SupernovaApiClient>;
4
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAG7D,OAAO,EAAiC,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAK5E,eAAO,MAAM,SAAS,GAAU,MAAK,SAA4B,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAI/G,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { SupernovaApiClient } from "@supernova-studio/client";
2
+ import { VaultService } from "../services/index.js";
3
+ import { defaultTargetEnv } from "../types/index.js";
4
+ import { environmentAPI } from "./network.js";
5
+ const vaultService = new VaultService();
6
+ export const getClient = async (env = defaultTargetEnv, version) => {
7
+ const { accessToken } = await vaultService.getTokensFromVault(env);
8
+ const hostUrl = new URL(environmentAPI(env, version));
9
+ return new SupernovaApiClient({ accessToken, host: hostUrl.host });
10
+ };
11
+ //# sourceMappingURL=api-client.js.map