great 1.0.2 → 1.2.0

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 (180) hide show
  1. package/README.md +141 -43
  2. package/dist/accounts/create.d.ts +1 -1
  3. package/dist/accounts/create.js +2 -4
  4. package/dist/accounts/create.js.map +1 -1
  5. package/dist/accounts/index.d.ts +1 -1
  6. package/dist/accounts/index.js +2 -4
  7. package/dist/accounts/index.js.map +1 -1
  8. package/dist/clone/index.d.ts +4 -2
  9. package/dist/clone/index.js +19 -43
  10. package/dist/clone/index.js.map +1 -1
  11. package/dist/config/index.js +4 -30
  12. package/dist/config/index.js.map +1 -1
  13. package/dist/deploy/index.d.ts +1 -1
  14. package/dist/deploy/index.js +55 -15
  15. package/dist/deploy/index.js.map +1 -1
  16. package/dist/env/index.d.ts +12 -0
  17. package/dist/env/index.js +131 -0
  18. package/dist/env/index.js.map +1 -0
  19. package/dist/explode/transform.d.ts +1 -1
  20. package/dist/explode/transform.js +6 -2
  21. package/dist/explode/transform.js.map +1 -1
  22. package/dist/explode/unescapeMongo.js +9 -1
  23. package/dist/explode/unescapeMongo.js.map +1 -1
  24. package/dist/generated/operations.d.ts +617 -0
  25. package/dist/generated/operations.js +2 -0
  26. package/dist/generated/operations.js.map +1 -0
  27. package/dist/generated/schema.d.ts +965 -0
  28. package/dist/generated/{graphql.js → schema.js} +20 -2
  29. package/dist/generated/schema.js.map +1 -0
  30. package/dist/implode/escapeMongo.d.ts +1 -0
  31. package/dist/implode/escapeMongo.js +23 -0
  32. package/dist/implode/escapeMongo.js.map +1 -0
  33. package/dist/implode/index.d.ts +6 -0
  34. package/dist/implode/index.js +132 -0
  35. package/dist/implode/index.js.map +1 -0
  36. package/dist/implode/transform.d.ts +45 -0
  37. package/dist/implode/transform.js +73 -0
  38. package/dist/implode/transform.js.map +1 -0
  39. package/dist/import/index.d.ts +8 -0
  40. package/dist/import/index.js +43 -0
  41. package/dist/import/index.js.map +1 -0
  42. package/dist/include/index.d.ts +10 -0
  43. package/dist/include/index.js +41 -0
  44. package/dist/include/index.js.map +1 -0
  45. package/dist/index.js +15 -2
  46. package/dist/index.js.map +1 -1
  47. package/dist/init/index.js +8 -16
  48. package/dist/init/index.js.map +1 -1
  49. package/dist/integrations/create.d.ts +1 -1
  50. package/dist/integrations/create.js +3 -5
  51. package/dist/integrations/create.js.map +1 -1
  52. package/dist/integrations/list.d.ts +1 -1
  53. package/dist/integrations/list.js +3 -5
  54. package/dist/integrations/list.js.map +1 -1
  55. package/dist/migrate/index.d.ts +5 -0
  56. package/dist/migrate/index.js +101 -0
  57. package/dist/migrate/index.js.map +1 -0
  58. package/dist/pull/index.d.ts +4 -2
  59. package/dist/pull/index.js +25 -44
  60. package/dist/pull/index.js.map +1 -1
  61. package/dist/push/index.d.ts +1 -1
  62. package/dist/push/index.js +364 -93
  63. package/dist/push/index.js.map +1 -1
  64. package/dist/rename/index.d.ts +8 -0
  65. package/dist/rename/index.js +109 -0
  66. package/dist/rename/index.js.map +1 -0
  67. package/dist/repl/dispatch.d.ts +8 -2
  68. package/dist/repl/dispatch.js +43 -29
  69. package/dist/repl/dispatch.js.map +1 -1
  70. package/dist/repl/dispatchAndLoad.d.ts +7 -0
  71. package/dist/repl/dispatchAndLoad.js +35 -0
  72. package/dist/repl/dispatchAndLoad.js.map +1 -0
  73. package/dist/repl/help.js +13 -2
  74. package/dist/repl/help.js.map +1 -1
  75. package/dist/repl/index.d.ts +1 -1
  76. package/dist/repl/index.js +31 -10
  77. package/dist/repl/index.js.map +1 -1
  78. package/dist/repl/load.d.ts +8 -0
  79. package/dist/repl/load.js +53 -0
  80. package/dist/repl/load.js.map +1 -0
  81. package/dist/run/index.d.ts +7 -5
  82. package/dist/run/index.js +5 -7
  83. package/dist/run/index.js.map +1 -1
  84. package/dist/status/index.d.ts +1 -1
  85. package/dist/status/index.js +6 -8
  86. package/dist/status/index.js.map +1 -1
  87. package/dist/utils/config.d.ts +9 -2
  88. package/dist/utils/config.js +39 -6
  89. package/dist/utils/config.js.map +1 -1
  90. package/dist/utils/createIntegrationFromFile.d.ts +3 -1
  91. package/dist/utils/createIntegrationFromFile.js +14 -30
  92. package/dist/utils/createIntegrationFromFile.js.map +1 -1
  93. package/dist/utils/detectPullConflicts.d.ts +8 -0
  94. package/dist/utils/detectPullConflicts.js +65 -0
  95. package/dist/utils/detectPullConflicts.js.map +1 -0
  96. package/dist/utils/dispatch.d.ts +2 -2
  97. package/dist/utils/dispatch.js +5 -4
  98. package/dist/utils/dispatch.js.map +1 -1
  99. package/dist/utils/elementFiles.d.ts +13 -0
  100. package/dist/utils/elementFiles.js +76 -0
  101. package/dist/utils/elementFiles.js.map +1 -0
  102. package/dist/utils/fetchIntegrationDefinition.d.ts +8 -0
  103. package/dist/utils/fetchIntegrationDefinition.js +58 -0
  104. package/dist/utils/fetchIntegrationDefinition.js.map +1 -0
  105. package/dist/utils/fetchLocal.d.ts +3 -1
  106. package/dist/utils/fetchLocal.js +11 -9
  107. package/dist/utils/fetchLocal.js.map +1 -1
  108. package/dist/utils/fetchSession.d.ts +1 -1
  109. package/dist/utils/fetchSession.js +2 -1
  110. package/dist/utils/fetchSession.js.map +1 -1
  111. package/dist/utils/graphqlClient.d.ts +3 -0
  112. package/dist/utils/graphqlClient.js +3 -0
  113. package/dist/utils/graphqlClient.js.map +1 -1
  114. package/dist/utils/graphqlError.d.ts +2 -1
  115. package/dist/utils/graphqlError.js +17 -3
  116. package/dist/utils/graphqlError.js.map +1 -1
  117. package/dist/utils/greatFile.d.ts +40 -0
  118. package/dist/utils/greatFile.js +66 -0
  119. package/dist/utils/greatFile.js.map +1 -0
  120. package/dist/utils/hashContent.js +1 -1
  121. package/dist/utils/hashContent.js.map +1 -1
  122. package/dist/utils/integrationType.d.ts +3 -0
  123. package/dist/utils/integrationType.js +15 -0
  124. package/dist/utils/integrationType.js.map +1 -0
  125. package/dist/utils/parseJson.d.ts +1 -0
  126. package/dist/utils/parseJson.js +5 -0
  127. package/dist/utils/parseJson.js.map +1 -0
  128. package/dist/utils/resolveAccount.d.ts +5 -4
  129. package/dist/utils/resolveAccount.js +17 -9
  130. package/dist/utils/resolveAccount.js.map +1 -1
  131. package/dist/utils/resolveElement.d.ts +1 -1
  132. package/dist/utils/resolveElementInclude.d.ts +3 -0
  133. package/dist/utils/resolveElementInclude.js +28 -0
  134. package/dist/utils/resolveElementInclude.js.map +1 -0
  135. package/dist/utils/resolveIntegration.d.ts +4 -2
  136. package/dist/utils/resolveIntegration.js +7 -3
  137. package/dist/utils/resolveIntegration.js.map +1 -1
  138. package/dist/utils/resolveTemplateImport.d.ts +3 -0
  139. package/dist/utils/resolveTemplateImport.js +31 -0
  140. package/dist/utils/resolveTemplateImport.js.map +1 -0
  141. package/dist/utils/response.d.ts +3 -0
  142. package/dist/utils/response.js +24 -0
  143. package/dist/utils/response.js.map +1 -0
  144. package/dist/utils/saveIntegration.d.ts +8 -4
  145. package/dist/utils/saveIntegration.js +76 -34
  146. package/dist/utils/saveIntegration.js.map +1 -1
  147. package/dist/utils/token.js +1 -1
  148. package/dist/utils/token.js.map +1 -1
  149. package/dist/utils/url.d.ts +1 -0
  150. package/dist/utils/url.js +10 -0
  151. package/dist/utils/url.js.map +1 -0
  152. package/dist/utils/writeShadowElement.d.ts +26 -0
  153. package/dist/utils/writeShadowElement.js +119 -0
  154. package/dist/utils/writeShadowElement.js.map +1 -0
  155. package/dist/{value → values}/get.d.ts +1 -1
  156. package/dist/{value → values}/get.js +7 -8
  157. package/dist/values/get.js.map +1 -0
  158. package/dist/{value → values}/index.js +13 -1
  159. package/dist/values/index.js.map +1 -0
  160. package/dist/{value → values}/list.js +10 -9
  161. package/dist/values/list.js.map +1 -0
  162. package/dist/{value → values}/set.d.ts +1 -1
  163. package/dist/{value → values}/set.js +9 -9
  164. package/dist/values/set.js.map +1 -0
  165. package/dist/values/unset.d.ts +8 -0
  166. package/dist/values/unset.js +61 -0
  167. package/dist/values/unset.js.map +1 -0
  168. package/dist/whoami/fetchSession.d.ts +3 -3
  169. package/dist/whoami/fetchSession.js +2 -4
  170. package/dist/whoami/fetchSession.js.map +1 -1
  171. package/dist/whoami/index.d.ts +1 -1
  172. package/package.json +20 -19
  173. package/dist/generated/graphql.d.ts +0 -1784
  174. package/dist/generated/graphql.js.map +0 -1
  175. package/dist/value/get.js.map +0 -1
  176. package/dist/value/index.js.map +0 -1
  177. package/dist/value/list.js.map +0 -1
  178. package/dist/value/set.js.map +0 -1
  179. /package/dist/{value → values}/index.d.ts +0 -0
  180. /package/dist/{value → values}/list.d.ts +0 -0
@@ -35,6 +35,12 @@ export var IntegrationOrderField;
35
35
  IntegrationOrderField["Name"] = "name";
36
36
  IntegrationOrderField["UpdatedAt"] = "updatedAt";
37
37
  })(IntegrationOrderField || (IntegrationOrderField = {}));
38
+ export var IntegrationType;
39
+ (function (IntegrationType) {
40
+ IntegrationType["Integration"] = "integration";
41
+ IntegrationType["Library"] = "library";
42
+ IntegrationType["Template"] = "template";
43
+ })(IntegrationType || (IntegrationType = {}));
38
44
  export var LogStatus;
39
45
  (function (LogStatus) {
40
46
  LogStatus["Autherror"] = "autherror";
@@ -57,7 +63,7 @@ export var LogType;
57
63
  LogType["Action"] = "action";
58
64
  LogType["Load"] = "load";
59
65
  LogType["Response"] = "response";
60
- LogType["Schedule"] = "schedule";
66
+ LogType["Trigger"] = "trigger";
61
67
  LogType["Unload"] = "unload";
62
68
  })(LogType || (LogType = {}));
63
69
  export var NotificationType;
@@ -65,9 +71,21 @@ export var NotificationType;
65
71
  NotificationType["Failure"] = "failure";
66
72
  NotificationType["Warning"] = "warning";
67
73
  })(NotificationType || (NotificationType = {}));
74
+ export var RulesetOrderField;
75
+ (function (RulesetOrderField) {
76
+ RulesetOrderField["CreatedAt"] = "createdAt";
77
+ RulesetOrderField["Name"] = "name";
78
+ RulesetOrderField["UpdatedAt"] = "updatedAt";
79
+ })(RulesetOrderField || (RulesetOrderField = {}));
68
80
  export var Status;
69
81
  (function (Status) {
70
82
  Status["Active"] = "active";
71
83
  Status["Inactive"] = "inactive";
72
84
  })(Status || (Status = {}));
73
- //# sourceMappingURL=graphql.js.map
85
+ export var UserType;
86
+ (function (UserType) {
87
+ UserType["Agent"] = "agent";
88
+ UserType["Support"] = "support";
89
+ UserType["User"] = "user";
90
+ })(UserType || (UserType = {}));
91
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/generated/schema.ts"],"names":[],"mappings":"AAyDA,MAAM,CAAN,IAAY,iBAOX;AAPD,WAAY,iBAAiB;IAE3B,4CAAuB,CAAA;IAEvB,kCAAa,CAAA;IAEb,4CAAuB,CAAA;AACzB,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,QAO5B;AAGD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,8BAAe,CAAA;IACf,gCAAiB,CAAA;IACjB,8BAAe,CAAA;AACjB,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAyFD,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,0BAAa,CAAA;AACf,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAiCD,MAAM,CAAN,IAAY,WAWX;AAXD,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,gCAAiB,CAAA;IACjB,wCAAyB,CAAA;IACzB,4BAAa,CAAA;IACb,0BAAW,CAAA;IACX,oCAAqB,CAAA;IACrB,sCAAuB,CAAA;IACvB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;IACnB,8BAAe,CAAA;AACjB,CAAC,EAXW,WAAW,KAAX,WAAW,QAWtB;AA4KD,MAAM,CAAN,IAAY,qBASX;AATD,WAAY,qBAAqB;IAE/B,4CAAmB,CAAA;IAEnB,gDAAuB,CAAA;IAEvB,sCAAa,CAAA;IAEb,gDAAuB,CAAA;AACzB,CAAC,EATW,qBAAqB,KAArB,qBAAqB,QAShC;AAGD,MAAM,CAAN,IAAY,eAaX;AAbD,WAAY,eAAe;IAEzB,8CAA2B,CAAA;IAK3B,sCAAmB,CAAA;IAKnB,wCAAqB,CAAA;AACvB,CAAC,EAbW,eAAe,KAAf,eAAe,QAa1B;AA+ID,MAAM,CAAN,IAAY,SAeX;AAfD,WAAY,SAAS;IACnB,oCAAuB,CAAA;IACvB,sCAAyB,CAAA;IACzB,wCAA2B,CAAA;IAC3B,4BAAe,CAAA;IACf,kCAAqB,CAAA;IACrB,kCAAqB,CAAA;IACrB,kCAAqB,CAAA;IACrB,sBAAS,CAAA;IACT,gCAAmB,CAAA;IACnB,8BAAiB,CAAA;IACjB,gCAAmB,CAAA;IACnB,kCAAqB,CAAA;IACrB,gCAAmB,CAAA;IACnB,gCAAmB,CAAA;AACrB,CAAC,EAfW,SAAS,KAAT,SAAS,QAepB;AAED,MAAM,CAAN,IAAY,OAMX;AAND,WAAY,OAAO;IACjB,4BAAiB,CAAA;IACjB,wBAAa,CAAA;IACb,gCAAqB,CAAA;IACrB,8BAAmB,CAAA;IACnB,4BAAiB,CAAA;AACnB,CAAC,EANW,OAAO,KAAP,OAAO,QAMlB;AAmmBD,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,uCAAmB,CAAA;IACnB,uCAAmB,CAAA;AACrB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AA+cD,MAAM,CAAN,IAAY,iBAOX;AAPD,WAAY,iBAAiB;IAE3B,4CAAuB,CAAA;IAEvB,kCAAa,CAAA;IAEb,4CAAuB,CAAA;AACzB,CAAC,EAPW,iBAAiB,KAAjB,iBAAiB,QAO5B;AAoDD,MAAM,CAAN,IAAY,MAGX;AAHD,WAAY,MAAM;IAChB,2BAAiB,CAAA;IACjB,+BAAqB,CAAA;AACvB,CAAC,EAHW,MAAM,KAAN,MAAM,QAGjB;AAiFD,MAAM,CAAN,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,+BAAmB,CAAA;IACnB,yBAAa,CAAA;AACf,CAAC,EAJW,QAAQ,KAAR,QAAQ,QAInB"}
@@ -0,0 +1 @@
1
+ export declare function escapeMongo<T>(obj: T): T;
@@ -0,0 +1,23 @@
1
+ function escapeKey(key) {
2
+ if (key === '')
3
+ return '**empty**';
4
+ return key
5
+ .replaceAll('\\', '\\\\')
6
+ .replaceAll('.', '\\_')
7
+ .replaceAll('$', '\\$');
8
+ }
9
+ export function escapeMongo(obj) {
10
+ if (obj === null || typeof obj !== 'object') {
11
+ return obj;
12
+ }
13
+ if (Array.isArray(obj)) {
14
+ return obj.map((item) => escapeMongo(item));
15
+ }
16
+ const result = {};
17
+ for (const key in obj) {
18
+ const escapedKey = escapeKey(key);
19
+ result[escapedKey] = escapeMongo(obj[key]);
20
+ }
21
+ return result;
22
+ }
23
+ //# sourceMappingURL=escapeMongo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escapeMongo.js","sourceRoot":"","sources":["../../src/implode/escapeMongo.ts"],"names":[],"mappings":"AAAA,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,WAAW,CAAA;IAClC,OAAO,GAAG;SACP,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;SACxB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;SACtB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,GAAM;IAEnC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAA;IACZ,CAAC;IAGD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAM,CAAA;IAClD,CAAC;IAGD,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;QAEjC,MAAM,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,OAAO,MAAW,CAAA;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import fs from 'node:fs';
2
+ import { type GraphQLRequestClient } from '../utils/graphqlClient.js';
3
+ import type { Command } from 'commander';
4
+ export declare const action: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, fsImpl?: typeof fs) => (folderPath?: string) => Promise<void>;
5
+ declare const _default: (program: Command, apiToken?: string) => Command;
6
+ export default _default;
@@ -0,0 +1,132 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { gql } from 'graphql-tag';
5
+ import parseJson from '../utils/parseJson.js';
6
+ import { readGreatFile, getIntegrationId, getElementRecord, } from '../utils/greatFile.js';
7
+ import { readElementFolder } from '../utils/elementFiles.js';
8
+ import { transformToLegacy } from './transform.js';
9
+ import { getClient } from '../utils/graphqlClient.js';
10
+ const ValuesListQueryDocument = gql `
11
+ query ValuesListKeyValue($id: ID!) {
12
+ integration(id: $id) {
13
+ id
14
+ latest {
15
+ elements(type: [value]) {
16
+ __typename
17
+ ... on Value {
18
+ key
19
+ value
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
25
+ `;
26
+ const SecretRefQueryDocument = gql `
27
+ query SecretRef($id: ID!) {
28
+ secretRef(id: $id)
29
+ }
30
+ `;
31
+ const elementFolders = [
32
+ 'schemas',
33
+ 'services',
34
+ 'auths',
35
+ 'mutations',
36
+ 'dictionaries',
37
+ 'jobs',
38
+ 'values',
39
+ 'retryRules',
40
+ ];
41
+ function readElementFiles(folder, rootPath, fsImpl) {
42
+ return readElementFolder(folder, rootPath, fsImpl).map(({ key, data }) => {
43
+ const element = data;
44
+ element.key = key;
45
+ return element;
46
+ });
47
+ }
48
+ async function fetchValues(integrationId, client, log) {
49
+ const result = await client.request(ValuesListQueryDocument, { id: integrationId });
50
+ if (result.error) {
51
+ log(chalk.yellow('Warning: Failed to fetch values from API'));
52
+ return new Map();
53
+ }
54
+ const elements = result.data?.integration?.latest?.elements ?? [];
55
+ const values = new Map();
56
+ for (const el of elements) {
57
+ if (el.__typename !== 'Value')
58
+ continue;
59
+ values.set(el.key, el.value);
60
+ }
61
+ return values;
62
+ }
63
+ async function fetchSecretRefs(secretElements, great, client) {
64
+ const refs = new Map();
65
+ for (const el of secretElements) {
66
+ const id = getElementRecord(great, 'values', el.key)?.id;
67
+ if (!id)
68
+ continue;
69
+ const result = await client.request(SecretRefQueryDocument, { id });
70
+ if (result.data?.secretRef) {
71
+ refs.set(el.key, result.data.secretRef);
72
+ }
73
+ }
74
+ return refs;
75
+ }
76
+ export const action = (log, apiToken, client, fsImpl = fs) => async function implodeIntegration(folderPath) {
77
+ const rootPath = folderPath || '.';
78
+ const integrationPath = path.join(rootPath, 'integration.json');
79
+ if (!fsImpl.existsSync(integrationPath)) {
80
+ log(chalk.red(`No integration.json found in ${rootPath}`));
81
+ return;
82
+ }
83
+ let integration;
84
+ try {
85
+ const content = fsImpl.readFileSync(integrationPath, 'utf8');
86
+ integration = parseJson(content);
87
+ }
88
+ catch (error) {
89
+ log(chalk.red(`Failed to parse integration.json: ${error}`));
90
+ return;
91
+ }
92
+ let elements;
93
+ try {
94
+ elements = Object.fromEntries(elementFolders.map((folder) => [
95
+ folder,
96
+ readElementFiles(folder, rootPath, fsImpl),
97
+ ]));
98
+ }
99
+ catch (error) {
100
+ log(chalk.red(`Error reading element files: ${error}`));
101
+ return;
102
+ }
103
+ let fetchedValues = new Map();
104
+ let fetchedSecretRefs = new Map();
105
+ const great = readGreatFile(folderPath, fsImpl);
106
+ const integrationId = getIntegrationId(great);
107
+ integration.key = path.basename(path.resolve(rootPath));
108
+ integration.account = great.account?.key
109
+ ? { key: great.account.key }
110
+ : undefined;
111
+ if (integrationId && apiToken) {
112
+ const graphqlClient = getClient(apiToken, client);
113
+ fetchedValues = await fetchValues(integrationId, graphqlClient, log);
114
+ const secretElements = elements.values.filter((el) => el.type === 'secret');
115
+ fetchedSecretRefs = await fetchSecretRefs(secretElements, great, graphqlClient);
116
+ }
117
+ const legacy = transformToLegacy(integration, elements, fetchedValues, fetchedSecretRefs);
118
+ const outputPath = path.join(rootPath, `${integration.key}.json`);
119
+ try {
120
+ fsImpl.writeFileSync(outputPath, JSON.stringify(legacy, undefined, 2));
121
+ log(chalk.green(`Written legacy file to ${outputPath}`));
122
+ }
123
+ catch (error) {
124
+ log(chalk.red(`Failed to write output file: ${error}`));
125
+ }
126
+ };
127
+ export default (program, apiToken) => program
128
+ .command('implode')
129
+ .description('Combine integration file structure into a single legacy JSON file')
130
+ .argument('[folder]', 'Path to integration folder (default: current dir)')
131
+ .action(action(console.log, apiToken));
132
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/implode/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface ElementFile {
2
+ key: string;
3
+ [key: string]: unknown;
4
+ }
5
+ export interface IntegrationFile {
6
+ key: string;
7
+ name: string;
8
+ status: string;
9
+ flags?: Record<string, unknown>;
10
+ account?: {
11
+ key: string;
12
+ [key: string]: unknown;
13
+ };
14
+ [key: string]: unknown;
15
+ }
16
+ interface LegacyIntegration {
17
+ id: string;
18
+ projectId: string;
19
+ accountId: string;
20
+ name: string;
21
+ status: string;
22
+ values: Record<string, unknown>;
23
+ retryRules: Record<string, unknown>[];
24
+ definitions: {
25
+ flags?: Record<string, unknown>;
26
+ schemas: Record<string, unknown>[];
27
+ services: Record<string, unknown>[];
28
+ auths: Record<string, unknown>[];
29
+ mutations: Record<string, unknown>;
30
+ dictionaries: Record<string, unknown>;
31
+ jobs: Record<string, unknown>[];
32
+ };
33
+ }
34
+ interface ElementsByFolder {
35
+ schemas: ElementFile[];
36
+ services: ElementFile[];
37
+ auths: ElementFile[];
38
+ mutations: ElementFile[];
39
+ dictionaries: ElementFile[];
40
+ jobs: ElementFile[];
41
+ values: ElementFile[];
42
+ retryRules: ElementFile[];
43
+ }
44
+ export declare function transformToLegacy(integration: IntegrationFile, elements: ElementsByFolder, fetchedValues?: Map<string, unknown>, fetchedSecretRefs?: Map<string, string>): LegacyIntegration;
45
+ export {};
@@ -0,0 +1,73 @@
1
+ import { escapeMongo } from './escapeMongo.js';
2
+ function stripMetaFields({ key, ...rest }) {
3
+ return rest;
4
+ }
5
+ function transformArrayElement(element) {
6
+ const content = stripMetaFields(element);
7
+ return escapeMongo({ id: element.key, ...content });
8
+ }
9
+ function transformMutationElement(element) {
10
+ const { mutation, ...rest } = stripMetaFields(element);
11
+ return [element.key, escapeMongo(mutation ?? rest)];
12
+ }
13
+ function transformDictionaryElement(element) {
14
+ const { dictionary, ...rest } = stripMetaFields(element);
15
+ return [element.key, escapeMongo(dictionary ?? rest)];
16
+ }
17
+ function resolveSecretRef(element, fetchedSecretRefs) {
18
+ const ref = fetchedSecretRefs.get(element.key) ??
19
+ (typeof element.ref === 'string' ? element.ref : undefined);
20
+ if (ref)
21
+ return ref.replaceAll('_', ':');
22
+ return '';
23
+ }
24
+ function transformValueElement(element, fetchedValues, fetchedSecretRefs) {
25
+ const isSecret = element.type === 'secret';
26
+ const key = isSecret ? `${element.key}$secret` : element.key;
27
+ const value = isSecret
28
+ ? resolveSecretRef(element, fetchedSecretRefs)
29
+ : (fetchedValues.get(element.key) ?? '');
30
+ return [key, value];
31
+ }
32
+ export function transformToLegacy(integration, elements, fetchedValues = new Map(), fetchedSecretRefs = new Map()) {
33
+ const schemas = elements.schemas.map(transformArrayElement);
34
+ const services = elements.services.map(transformArrayElement);
35
+ const auths = elements.auths.map(transformArrayElement);
36
+ const jobs = elements.jobs.map(transformArrayElement);
37
+ const retryRules = elements.retryRules.map(transformArrayElement);
38
+ const mutations = {};
39
+ for (const el of elements.mutations) {
40
+ const [key, value] = transformMutationElement(el);
41
+ mutations[key] = value;
42
+ }
43
+ const dictionaries = {};
44
+ for (const el of elements.dictionaries) {
45
+ const [key, value] = transformDictionaryElement(el);
46
+ dictionaries[key] = value;
47
+ }
48
+ const values = {};
49
+ for (const el of elements.values) {
50
+ const [key, value] = transformValueElement(el, fetchedValues, fetchedSecretRefs);
51
+ values[key] = value;
52
+ }
53
+ const accountId = integration.account?.key ?? '';
54
+ return {
55
+ id: accountId ? `${accountId}:${integration.key}` : '',
56
+ projectId: integration.key,
57
+ accountId,
58
+ name: integration.name,
59
+ status: integration.status,
60
+ values,
61
+ retryRules,
62
+ definitions: {
63
+ ...(integration.flags ? { flags: integration.flags } : {}),
64
+ schemas,
65
+ services,
66
+ auths,
67
+ mutations,
68
+ dictionaries,
69
+ jobs,
70
+ },
71
+ };
72
+ }
73
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/implode/transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import fs from 'node:fs';
2
+ import Conf from 'conf';
3
+ import { type GraphQLRequestClient } from '../utils/graphqlClient.js';
4
+ import type { ConfigSchema } from '../utils/config.js';
5
+ import type { Command } from 'commander';
6
+ export declare const action: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, fsImpl?: typeof fs, config?: Conf<ConfigSchema>) => (templateId: string) => Promise<void>;
7
+ declare const _default: (program: Command, apiToken?: string) => Command;
8
+ export default _default;
@@ -0,0 +1,43 @@
1
+ import chalk from 'chalk';
2
+ import { getClient } from '../utils/graphqlClient.js';
3
+ import { fetchIntegrationFromFile } from '../utils/fetchLocal.js';
4
+ import { resolveTemplateImport } from '../utils/resolveTemplateImport.js';
5
+ import { readGreatFile, writeGreatFile, upsertImportRecord, } from '../utils/greatFile.js';
6
+ import { writeShadowElements, logShadowConflicts, } from '../utils/writeShadowElement.js';
7
+ export const action = (log, apiToken, client, fsImpl, config) => async function importTemplate(templateId) {
8
+ if (!templateId) {
9
+ log(chalk.red('Template id is required'));
10
+ log(`Usage: ${chalk.bold('great import <template-id>')}`);
11
+ return;
12
+ }
13
+ if (!fetchIntegrationFromFile(fsImpl)) {
14
+ log(chalk.red('No local integration project found'));
15
+ log(`Run ${chalk.bold('great init')} or ${chalk.bold('great clone <integration-id>')} first`);
16
+ return;
17
+ }
18
+ const graphqlClient = getClient(apiToken, client, config);
19
+ const resolved = await resolveTemplateImport(graphqlClient, templateId, log);
20
+ if (!resolved) {
21
+ return;
22
+ }
23
+ const great = readGreatFile(undefined, fsImpl);
24
+ const result = writeShadowElements(great, resolved.elements, {
25
+ pinnedFallback: resolved.timestamp,
26
+ fsImpl,
27
+ });
28
+ if (result.conflicts.length > 0) {
29
+ logShadowConflicts('Import', result.conflicts, log);
30
+ return;
31
+ }
32
+ upsertImportRecord(great, templateId, resolved.timestamp);
33
+ writeGreatFile(great, undefined, fsImpl);
34
+ log(chalk.green(`Imported ${result.written.length} element(s) from template ${templateId}`));
35
+ if (result.skipped.length > 0) {
36
+ log(chalk.yellow(`Skipped ${result.skipped.length} config element(s)`));
37
+ }
38
+ };
39
+ export default (program, apiToken) => program
40
+ .command('import <template>')
41
+ .description('import a template, creating a shadow file for each element')
42
+ .action(action(console.log, apiToken));
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/import/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAA6B,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EACL,aAAa,EACb,cAAc,EACd,kBAAkB,GACnB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,gCAAgC,CAAA;AAIvC,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,GAA8B,EAC9B,QAAiB,EACjB,MAA6B,EAC7B,MAAkB,EAClB,MAA2B,EAC3B,EAAE,CACF,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;QACzC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAA;QACzD,OAAM;IACR,CAAC;IAID,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAA;QACpD,GAAG,CACD,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CACzF,CAAA;QACD,OAAM;IACR,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,CAAC,CAAA;IAC5E,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAM;IACR,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE;QAC3D,cAAc,EAAE,QAAQ,CAAC,SAAS;QAClC,MAAM;KACP,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACnD,OAAM;IACR,CAAC;IAED,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IACzD,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAExC,GAAG,CACD,KAAK,CAAC,KAAK,CACT,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,6BAA6B,UAAU,EAAE,CAC3E,CACF,CAAA;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,oBAAoB,CAAC,CAAC,CAAA;IACzE,CAAC;AACH,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,4DAA4D,CAAC;KACzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import fs from 'node:fs';
2
+ import Conf from 'conf';
3
+ import { type GraphQLRequestClient } from '../utils/graphqlClient.js';
4
+ import type { ConfigSchema } from '../utils/config.js';
5
+ import type { Command } from 'commander';
6
+ export declare const action: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, fsImpl?: typeof fs, config?: Conf<ConfigSchema>) => (elementId: string, options?: {
7
+ pinnedAt?: string;
8
+ }) => Promise<void>;
9
+ declare const _default: (program: Command, apiToken?: string) => Command;
10
+ export default _default;
@@ -0,0 +1,41 @@
1
+ import chalk from 'chalk';
2
+ import { getClient } from '../utils/graphqlClient.js';
3
+ import { fetchIntegrationFromFile } from '../utils/fetchLocal.js';
4
+ import { resolveElementInclude } from '../utils/resolveElementInclude.js';
5
+ import { readGreatFile, writeGreatFile } from '../utils/greatFile.js';
6
+ import { writeShadowElements, logShadowConflicts, } from '../utils/writeShadowElement.js';
7
+ export const action = (log, apiToken, client, fsImpl, config) => async function includeElement(elementId, options) {
8
+ if (!elementId) {
9
+ log(chalk.red('Element id is required'));
10
+ log(`Usage: ${chalk.bold('great include <element-id>')}`);
11
+ return;
12
+ }
13
+ if (!fetchIntegrationFromFile(fsImpl)) {
14
+ log(chalk.red('No local integration project found'));
15
+ log(`Run ${chalk.bold('great init')} or ${chalk.bold('great clone <integration-id>')} first`);
16
+ return;
17
+ }
18
+ const graphqlClient = getClient(apiToken, client, config);
19
+ const resolved = await resolveElementInclude(graphqlClient, elementId, options?.pinnedAt, log);
20
+ if (!resolved) {
21
+ return;
22
+ }
23
+ const great = readGreatFile(undefined, fsImpl);
24
+ const result = writeShadowElements(great, [resolved], {
25
+ pinnedFallback: resolved.content?.createdAt,
26
+ fsImpl,
27
+ });
28
+ if (result.conflicts.length > 0) {
29
+ logShadowConflicts('Include', result.conflicts, log);
30
+ return;
31
+ }
32
+ writeGreatFile(great, undefined, fsImpl);
33
+ const [written] = result.written;
34
+ log(chalk.green(`Included ${written.folder}/${written.key} as a shadow element`));
35
+ };
36
+ export default (program, apiToken) => program
37
+ .command('include <element>')
38
+ .description('include an element from another integration as a shadow')
39
+ .option('-p, --pinned-at <timestamp>', 'pin the shadow to the source as it stood at this ISO timestamp')
40
+ .action(action(console.log, apiToken));
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/include/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,SAAS,EAA6B,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,gCAAgC,CAAA;AAIvC,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,GAA8B,EAC9B,QAAiB,EACjB,MAA6B,EAC7B,MAAkB,EAClB,MAA2B,EAC3B,EAAE,CACF,KAAK,UAAU,cAAc,CAC3B,SAAiB,EACjB,OAA+B;IAE/B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAA;QACxC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAA;QACzD,OAAM;IACR,CAAC;IAID,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAA;QACpD,GAAG,CACD,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CACzF,CAAA;QACD,OAAM;IACR,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAC1C,aAAa,EACb,SAAS,EACT,OAAO,EAAE,QAAQ,EACjB,GAAG,CACJ,CAAA;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAM;IACR,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAM9C,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE;QACpD,cAAc,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS;QAC3C,MAAM;KACP,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;QACpD,OAAM;IACR,CAAC;IAED,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAExC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAA;IAChC,GAAG,CACD,KAAK,CAAC,KAAK,CACT,YAAY,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,sBAAsB,CAChE,CACF,CAAA;AACH,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CACL,6BAA6B,EAC7B,gEAAgE,CACjE;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
package/dist/index.js CHANGED
@@ -4,36 +4,49 @@ import accounts from './accounts/index.js';
4
4
  import clone from './clone/index.js';
5
5
  import config from './config/index.js';
6
6
  import create from './create/index.js';
7
+ import env from './env/index.js';
7
8
  import deploy from './deploy/index.js';
8
9
  import explode from './explode/index.js';
10
+ import implode from './implode/index.js';
11
+ import importTemplate from './import/index.js';
12
+ import include from './include/index.js';
9
13
  import init from './init/index.js';
10
14
  import login from './login/index.js';
11
15
  import logout from './logout/index.js';
16
+ import migrate from './migrate/index.js';
12
17
  import now from './now/index.js';
13
18
  import integrations from './integrations/index.js';
14
19
  import pull from './pull/index.js';
15
20
  import push from './push/index.js';
21
+ import rename from './rename/index.js';
16
22
  import repl from './repl/index.js';
17
23
  import run from './run/index.js';
18
24
  import status from './status/index.js';
19
- import value from './value/index.js';
25
+ import value from './values/index.js';
20
26
  import whoami from './whoami/index.js';
21
27
  import { getStoredToken } from './utils/token.js';
22
28
  const apiToken = getStoredToken();
23
- program.version('0.4.0-alpha.0', '-v, --version').description('Integreat CLI');
29
+ program.version('1.2.0', '-v, --version').description('Integreat CLI');
30
+ program.enablePositionalOptions();
24
31
  accounts(program, apiToken);
25
32
  clone(program, apiToken);
26
33
  config(program);
27
34
  create(program, apiToken);
28
35
  deploy(program, apiToken);
36
+ env(program);
29
37
  explode(program);
38
+ implode(program, apiToken);
39
+ importTemplate(program, apiToken);
40
+ include(program, apiToken);
30
41
  init(program);
31
42
  login(program);
32
43
  logout(program);
44
+ migrate(program);
33
45
  now(program);
34
46
  integrations(program, apiToken);
35
47
  pull(program, apiToken);
36
48
  push(program, apiToken);
49
+ rename(program, apiToken);
37
50
  repl(program, apiToken);
38
51
  run(program, apiToken);
39
52
  status(program, apiToken);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,QAAQ,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,MAAM,kBAAkB,CAAA;AACpC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,KAAK,MAAM,kBAAkB,CAAA;AACpC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,YAAY,MAAM,yBAAyB,CAAA;AAClD,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,KAAK,MAAM,kBAAkB,CAAA;AACpC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;AAEjC,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;AAE9E,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC3B,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACxB,MAAM,CAAC,OAAO,CAAC,CAAA;AACf,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,OAAO,CAAC,OAAO,CAAC,CAAA;AAChB,IAAI,CAAC,OAAO,CAAC,CAAA;AACb,KAAK,CAAC,OAAO,CAAC,CAAA;AACd,MAAM,CAAC,OAAO,CAAC,CAAA;AACf,GAAG,CAAC,OAAO,CAAC,CAAA;AACZ,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC/B,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACxB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAEzB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,QAAQ,MAAM,qBAAqB,CAAA;AAC1C,OAAO,KAAK,MAAM,kBAAkB,CAAA;AACpC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,cAAc,MAAM,mBAAmB,CAAA;AAC9C,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,KAAK,MAAM,kBAAkB,CAAA;AACpC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,OAAO,MAAM,oBAAoB,CAAA;AACxC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,YAAY,MAAM,yBAAyB,CAAA;AAClD,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,IAAI,MAAM,iBAAiB,CAAA;AAClC,OAAO,GAAG,MAAM,gBAAgB,CAAA;AAChC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,KAAK,MAAM,mBAAmB,CAAA;AACrC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;AAEjC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;AAOtE,OAAO,CAAC,uBAAuB,EAAE,CAAA;AAEjC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC3B,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACxB,MAAM,CAAC,OAAO,CAAC,CAAA;AACf,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,GAAG,CAAC,OAAO,CAAC,CAAA;AACZ,OAAO,CAAC,OAAO,CAAC,CAAA;AAChB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC1B,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACjC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC1B,IAAI,CAAC,OAAO,CAAC,CAAA;AACb,KAAK,CAAC,OAAO,CAAC,CAAA;AACd,MAAM,CAAC,OAAO,CAAC,CAAA;AACf,OAAO,CAAC,OAAO,CAAC,CAAA;AAChB,GAAG,CAAC,OAAO,CAAC,CAAA;AACZ,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAC/B,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACvB,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACtB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACzB,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AACxB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAEzB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA"}
@@ -1,32 +1,24 @@
1
1
  import fs from 'node:fs';
2
- import path from 'node:path';
3
2
  import chalk from 'chalk';
4
3
  import determineNameAndKey from '../utils/determineNameAndKey.js';
5
- const FOLDERS = [
6
- 'schemas',
7
- 'services',
8
- 'auths',
9
- 'mutations',
10
- 'dictionaries',
11
- 'jobs',
12
- 'values',
13
- 'flows',
14
- 'retryRules',
15
- ];
4
+ import { ELEMENT_FOLDERS } from '../utils/elementFiles.js';
5
+ import { currentIntegrationKey } from '../utils/fetchLocal.js';
16
6
  export const action = (log, fsImpl = fs) => async function init(name) {
17
7
  if (fsImpl.existsSync('integration.json')) {
18
8
  log(chalk.red('integration.json already exists in this directory'));
19
9
  log(`Run ${chalk.bold('great pull')} to update from server`);
20
10
  return;
21
11
  }
22
- const integrationName = name || path.basename(process.cwd());
23
- const { name: displayName, key } = determineNameAndKey(integrationName);
12
+ const key = currentIntegrationKey();
13
+ const { name: displayName, key: derivedKey } = determineNameAndKey(name || key);
14
+ if (name && derivedKey !== key) {
15
+ log(chalk.yellow(`Note: the integration key is the folder name "${key}"; the name only sets the display name.`));
16
+ }
24
17
  const integrationData = {
25
- __key: key,
26
18
  name: displayName,
27
19
  };
28
20
  fsImpl.writeFileSync('integration.json', JSON.stringify(integrationData, null, 2));
29
- for (const folder of FOLDERS) {
21
+ for (const folder of ELEMENT_FOLDERS) {
30
22
  if (!fsImpl.existsSync(folder)) {
31
23
  fsImpl.mkdirSync(folder, { recursive: true });
32
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AAEjE,MAAM,OAAO,GAAG;IACd,SAAS;IACT,UAAU;IACV,OAAO;IACP,WAAW;IACX,cAAc;IACd,MAAM;IACN,QAAQ;IACR,OAAO;IACP,YAAY;CACb,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CACpE,KAAK,UAAU,IAAI,CAAC,IAAa;IAE/B,IAAI,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAA;QACnE,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAA;QAC5D,OAAM;IACR,CAAC;IAGD,MAAM,eAAe,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC5D,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,mBAAmB,CAAC,eAAe,CAAC,CAAA;IAGvE,MAAM,eAAe,GAAG;QACtB,KAAK,EAAE,GAAG;QACV,IAAI,EAAE,WAAW;KAClB,CAAA;IAED,MAAM,CAAC,aAAa,CAClB,kBAAkB,EAClB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CACzC,CAAA;IAGD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAA;IACvD,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACzC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAA;IACpB,GAAG,CAAC,EAAE,CAAC,CAAA;IACP,GAAG,CAAC,aAAa,CAAC,CAAA;IAClB,GAAG,CAAC,oEAAoE,CAAC,CAAA;IACzE,GAAG,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAA;AAC3E,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,EAAE,CAClC,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CACV,4EAA4E,CAC7E;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/init/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,mBAAmB,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CACpE,KAAK,UAAU,IAAI,CAAC,IAAa;IAE/B,IAAI,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAA;QACnE,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAA;QAC5D,OAAM;IACR,CAAC;IAGD,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAA;IACnC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAChE,IAAI,IAAI,GAAG,CACZ,CAAA;IAGD,IAAI,IAAI,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAC/B,GAAG,CACD,KAAK,CAAC,MAAM,CACV,iDAAiD,GAAG,yCAAyC,CAC9F,CACF,CAAA;IACH,CAAC;IAGD,MAAM,eAAe,GAAG;QACtB,IAAI,EAAE,WAAW;KAClB,CAAA;IAED,MAAM,CAAC,aAAa,CAClB,kBAAkB,EAClB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CACzC,CAAA;IAGD,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAA;IACvD,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACzC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAA;IACpB,GAAG,CAAC,EAAE,CAAC,CAAA;IACP,GAAG,CAAC,aAAa,CAAC,CAAA;IAClB,GAAG,CAAC,oEAAoE,CAAC,CAAA;IACzE,GAAG,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,gCAAgC,CAAC,CAAA;AAC3E,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,EAAE,CAClC,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CACV,4EAA4E,CAC7E;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import Conf from 'conf';
2
2
  import { type GraphQLRequestClient } from '../utils/graphqlClient.js';
3
- import { type ConfigSchema } from '../utils/config.js';
3
+ import type { ConfigSchema } from '../utils/config.js';
4
4
  export default function createIntegration(log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>): (integrationName?: string, options?: {
5
5
  account?: string;
6
6
  }) => Promise<void>;
@@ -1,10 +1,9 @@
1
1
  import chalk from 'chalk';
2
- import { createGraphQLClient, } from '../utils/graphqlClient.js';
2
+ import { getClient } from '../utils/graphqlClient.js';
3
3
  import { handleGraphQLError } from '../utils/graphqlError.js';
4
4
  import { gql } from 'graphql-tag';
5
5
  import determineNameAndKey from '../utils/determineNameAndKey.js';
6
6
  import { resolveAccountId } from '../utils/resolveAccount.js';
7
- import { getApiBaseUrl } from '../utils/config.js';
8
7
  const CreateIntegrationMutationDocument = gql `
9
8
  mutation CreateIntegration(
10
9
  $accountId: ID!
@@ -38,11 +37,10 @@ export default function createIntegration(log, apiToken, client, config) {
38
37
  return;
39
38
  }
40
39
  const { name, key } = determineNameAndKey(integrationName);
41
- const apiBaseUrl = getApiBaseUrl(config);
42
- const graphqlClient = client ?? createGraphQLClient(apiToken, apiBaseUrl);
40
+ const graphqlClient = getClient(apiToken, client, config);
43
41
  const { accountId, error } = await resolveAccountId(options ?? {}, apiToken ?? '', graphqlClient, config);
44
42
  if (error) {
45
- log(chalk.red(error));
43
+ handleGraphQLError(error, log);
46
44
  return;
47
45
  }
48
46
  if (!accountId) {