great 0.3.1 → 1.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 (185) hide show
  1. package/README.md +121 -15
  2. package/dist/accounts/create.d.ts +4 -0
  3. package/dist/accounts/create.js +42 -0
  4. package/dist/accounts/create.js.map +1 -0
  5. package/dist/accounts/index.d.ts +5 -2
  6. package/dist/accounts/index.js +48 -9
  7. package/dist/accounts/index.js.map +1 -1
  8. package/dist/clone/index.d.ts +8 -0
  9. package/dist/clone/index.js +61 -0
  10. package/dist/clone/index.js.map +1 -0
  11. package/dist/config/index.d.ts +8 -0
  12. package/dist/config/index.js +111 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/create/index.d.ts +3 -0
  15. package/dist/create/index.js +7 -0
  16. package/dist/create/index.js.map +1 -0
  17. package/dist/deploy/index.d.ts +11 -0
  18. package/dist/deploy/index.js +132 -0
  19. package/dist/deploy/index.js.map +1 -0
  20. package/dist/explode/index.d.ts +5 -0
  21. package/dist/explode/index.js +32 -0
  22. package/dist/explode/index.js.map +1 -0
  23. package/dist/explode/transform.d.ts +30 -0
  24. package/dist/explode/transform.js +100 -0
  25. package/dist/explode/transform.js.map +1 -0
  26. package/dist/explode/unescapeMongo.d.ts +1 -0
  27. package/dist/explode/unescapeMongo.js +15 -0
  28. package/dist/explode/unescapeMongo.js.map +1 -0
  29. package/dist/generated/graphql.d.ts +1784 -0
  30. package/dist/generated/graphql.js +73 -0
  31. package/dist/generated/graphql.js.map +1 -0
  32. package/dist/index.js +29 -4
  33. package/dist/index.js.map +1 -1
  34. package/dist/init/index.d.ts +5 -0
  35. package/dist/init/index.js +46 -0
  36. package/dist/init/index.js.map +1 -0
  37. package/dist/integrations/create.d.ts +6 -0
  38. package/dist/integrations/create.js +70 -0
  39. package/dist/integrations/create.js.map +1 -0
  40. package/dist/{projects/describe.d.ts → integrations/index.d.ts} +0 -1
  41. package/dist/integrations/index.js +23 -0
  42. package/dist/integrations/index.js.map +1 -0
  43. package/dist/integrations/list.d.ts +7 -0
  44. package/dist/integrations/list.js +103 -0
  45. package/dist/integrations/list.js.map +1 -0
  46. package/dist/login/index.d.ts +6 -0
  47. package/dist/login/index.js +25 -0
  48. package/dist/login/index.js.map +1 -0
  49. package/dist/logout/index.d.ts +6 -0
  50. package/dist/logout/index.js +11 -0
  51. package/dist/logout/index.js.map +1 -0
  52. package/dist/now/index.d.ts +3 -1
  53. package/dist/now/index.js +11 -2
  54. package/dist/now/index.js.map +1 -1
  55. package/dist/pull/index.d.ts +5 -1
  56. package/dist/pull/index.js +50 -19
  57. package/dist/pull/index.js.map +1 -1
  58. package/dist/push/index.d.ts +11 -0
  59. package/dist/push/index.js +481 -0
  60. package/dist/push/index.js.map +1 -0
  61. package/dist/repl/dispatch.d.ts +8 -0
  62. package/dist/repl/dispatch.js +75 -0
  63. package/dist/repl/dispatch.js.map +1 -0
  64. package/dist/repl/help.d.ts +2 -0
  65. package/dist/repl/help.js +14 -0
  66. package/dist/repl/help.js.map +1 -0
  67. package/dist/repl/index.d.ts +10 -0
  68. package/dist/repl/index.js +92 -0
  69. package/dist/repl/index.js.map +1 -0
  70. package/dist/run/index.d.ts +33 -1
  71. package/dist/run/index.js +109 -40
  72. package/dist/run/index.js.map +1 -1
  73. package/dist/status/index.d.ts +10 -0
  74. package/dist/status/index.js +122 -0
  75. package/dist/status/index.js.map +1 -0
  76. package/dist/types.d.ts +1 -0
  77. package/dist/types.js +2 -0
  78. package/dist/types.js.map +1 -0
  79. package/dist/utils/authServer.d.ts +4 -0
  80. package/dist/utils/authServer.js +49 -0
  81. package/dist/utils/authServer.js.map +1 -0
  82. package/dist/utils/config.d.ts +15 -0
  83. package/dist/utils/config.js +41 -0
  84. package/dist/utils/config.js.map +1 -0
  85. package/dist/utils/createIntegrationFromFile.d.ts +22 -0
  86. package/dist/utils/createIntegrationFromFile.js +116 -0
  87. package/dist/utils/createIntegrationFromFile.js.map +1 -0
  88. package/dist/utils/determineNameAndKey.d.ts +4 -0
  89. package/dist/utils/determineNameAndKey.js +8 -0
  90. package/dist/utils/determineNameAndKey.js.map +1 -0
  91. package/dist/utils/dispatch.d.ts +3 -0
  92. package/dist/utils/dispatch.js +37 -0
  93. package/dist/utils/dispatch.js.map +1 -0
  94. package/dist/utils/fetchLocal.d.ts +3 -0
  95. package/dist/utils/fetchLocal.js +21 -0
  96. package/dist/utils/fetchLocal.js.map +1 -0
  97. package/dist/utils/fetchSession.d.ts +7 -0
  98. package/dist/utils/fetchSession.js +34 -0
  99. package/dist/utils/fetchSession.js.map +1 -0
  100. package/dist/utils/graphqlClient.d.ts +10 -0
  101. package/dist/utils/graphqlClient.js +24 -0
  102. package/dist/utils/graphqlClient.js.map +1 -0
  103. package/dist/utils/graphqlError.d.ts +2 -0
  104. package/dist/utils/graphqlError.js +20 -0
  105. package/dist/utils/graphqlError.js.map +1 -0
  106. package/dist/utils/hashContent.d.ts +1 -0
  107. package/dist/utils/hashContent.js +7 -0
  108. package/dist/utils/hashContent.js.map +1 -0
  109. package/dist/utils/jwt.d.ts +6 -0
  110. package/dist/utils/jwt.js +24 -0
  111. package/dist/utils/jwt.js.map +1 -0
  112. package/dist/utils/promptForValue.d.ts +9 -0
  113. package/dist/utils/promptForValue.js +24 -0
  114. package/dist/utils/promptForValue.js.map +1 -0
  115. package/dist/utils/resolveAccount.d.ts +19 -0
  116. package/dist/utils/resolveAccount.js +75 -0
  117. package/dist/utils/resolveAccount.js.map +1 -0
  118. package/dist/utils/resolveElement.d.ts +20 -0
  119. package/dist/utils/resolveElement.js +67 -0
  120. package/dist/utils/resolveElement.js.map +1 -0
  121. package/dist/utils/resolveIntegration.d.ts +9 -0
  122. package/dist/utils/resolveIntegration.js +71 -0
  123. package/dist/utils/resolveIntegration.js.map +1 -0
  124. package/dist/utils/saveIntegration.d.ts +16 -0
  125. package/dist/utils/saveIntegration.js +117 -0
  126. package/dist/utils/saveIntegration.js.map +1 -0
  127. package/dist/utils/token.d.ts +6 -0
  128. package/dist/utils/token.js +31 -0
  129. package/dist/utils/token.js.map +1 -0
  130. package/dist/utils/valueTypes.d.ts +4 -0
  131. package/dist/utils/valueTypes.js +43 -0
  132. package/dist/utils/valueTypes.js.map +1 -0
  133. package/dist/value/get.d.ts +8 -0
  134. package/dist/value/get.js +50 -0
  135. package/dist/value/get.js.map +1 -0
  136. package/dist/{projects → value}/index.d.ts +1 -2
  137. package/dist/value/index.js +26 -0
  138. package/dist/value/index.js.map +1 -0
  139. package/dist/value/list.d.ts +8 -0
  140. package/dist/value/list.js +122 -0
  141. package/dist/value/list.js.map +1 -0
  142. package/dist/value/set.d.ts +12 -0
  143. package/dist/value/set.js +103 -0
  144. package/dist/value/set.js.map +1 -0
  145. package/dist/whoami/fetchSession.d.ts +9 -0
  146. package/dist/whoami/fetchSession.js +19 -0
  147. package/dist/whoami/fetchSession.js.map +1 -0
  148. package/dist/whoami/index.d.ts +9 -1
  149. package/dist/whoami/index.js +18 -10
  150. package/dist/whoami/index.js.map +1 -1
  151. package/package.json +29 -13
  152. package/.codeclimate.yml +0 -7
  153. package/.editorconfig +0 -11
  154. package/.nvmrc +0 -1
  155. package/.prettierrc.json +0 -6
  156. package/dist/now/index.test.d.ts +0 -1
  157. package/dist/now/index.test.js +0 -18
  158. package/dist/now/index.test.js.map +0 -1
  159. package/dist/projects/describe.js +0 -44
  160. package/dist/projects/describe.js.map +0 -1
  161. package/dist/projects/index.js +0 -39
  162. package/dist/projects/index.js.map +0 -1
  163. package/dist/utils/callApi.d.ts +0 -5
  164. package/dist/utils/callApi.js +0 -20
  165. package/dist/utils/callApi.js.map +0 -1
  166. package/dist/utils/fetchLocalProject.d.ts +0 -1
  167. package/dist/utils/fetchLocalProject.js +0 -12
  168. package/dist/utils/fetchLocalProject.js.map +0 -1
  169. package/dist/utils/saveProject.d.ts +0 -2
  170. package/dist/utils/saveProject.js +0 -68
  171. package/dist/utils/saveProject.js.map +0 -1
  172. package/eslint.config.js +0 -27
  173. package/src/accounts/index.ts +0 -41
  174. package/src/index.ts +0 -22
  175. package/src/now/index.test.ts +0 -31
  176. package/src/now/index.ts +0 -15
  177. package/src/projects/describe.ts +0 -80
  178. package/src/projects/index.ts +0 -61
  179. package/src/pull/index.ts +0 -45
  180. package/src/run/index.ts +0 -81
  181. package/src/utils/callApi.ts +0 -29
  182. package/src/utils/fetchLocalProject.ts +0 -12
  183. package/src/utils/saveProject.ts +0 -106
  184. package/src/whoami/index.ts +0 -32
  185. package/tsconfig.json +0 -28
@@ -0,0 +1,71 @@
1
+ import { gql } from 'graphql-tag';
2
+ import { createGraphQLClient, } from './graphqlClient.js';
3
+ import { isNotFoundError } from './graphqlError.js';
4
+ export const IntegrationQueryDocument = gql `
5
+ query Integration($id: ID!) {
6
+ integration(id: $id) {
7
+ id
8
+ name
9
+ }
10
+ }
11
+ `;
12
+ export const IntegrationByKeyQueryDocument = gql `
13
+ query IntegrationByKey($accountId: ID!, $key: ID!) {
14
+ integrationByKey(accountId: $accountId, key: $key) {
15
+ id
16
+ name
17
+ }
18
+ }
19
+ `;
20
+ export async function resolveIntegration(identifier, accountId, apiToken, client, baseUrl) {
21
+ const graphqlClient = client ?? createGraphQLClient(apiToken, baseUrl);
22
+ try {
23
+ const idResult = await graphqlClient.request(IntegrationQueryDocument, { id: identifier });
24
+ if (idResult.error && !isNotFoundError(idResult.error)) {
25
+ const errorMessage = idResult.error.message || String(idResult.error);
26
+ return {
27
+ id: '',
28
+ error: errorMessage,
29
+ };
30
+ }
31
+ if (idResult.data?.integration) {
32
+ return {
33
+ id: idResult.data.integration.id,
34
+ name: idResult.data.integration.name,
35
+ };
36
+ }
37
+ if (accountId) {
38
+ const keyResult = await graphqlClient.request(IntegrationByKeyQueryDocument, { accountId, key: identifier });
39
+ if (keyResult.error && !isNotFoundError(keyResult.error)) {
40
+ const errorMessage = keyResult.error.message || String(keyResult.error);
41
+ return {
42
+ id: '',
43
+ error: errorMessage,
44
+ };
45
+ }
46
+ const integration = keyResult.data?.integrationByKey;
47
+ if (!integration) {
48
+ return {
49
+ id: '',
50
+ error: `Integration with key "${identifier}" not found in account "${accountId}"`,
51
+ };
52
+ }
53
+ return {
54
+ id: integration.id,
55
+ name: integration.name,
56
+ };
57
+ }
58
+ return {
59
+ id: '',
60
+ error: `Integration with id \`${identifier}\` not found`,
61
+ };
62
+ }
63
+ catch (error) {
64
+ const errorMessage = error instanceof Error ? error.message : String(error);
65
+ return {
66
+ id: '',
67
+ error: `Could not fetch integration: ${errorMessage}`,
68
+ };
69
+ }
70
+ }
71
+ //# sourceMappingURL=resolveIntegration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveIntegration.js","sourceRoot":"","sources":["../../src/utils/resolveIntegration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAMnD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;;;;;;;CAO1C,CAAA;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAA;;;;;;;CAO/C,CAAA;AAQD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,SAA6B,EAC7B,QAAiB,EACjB,MAA6B,EAC7B,OAAgB;IAEhB,MAAM,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEtE,IAAI,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAC1C,wBAAwB,EACxB,EAAE,EAAE,EAAE,UAAU,EAAE,CACnB,CAAA;QAGD,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACrE,OAAO;gBACL,EAAE,EAAE,EAAE;gBACN,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAGD,IAAI,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;YAC/B,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;gBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;aACrC,CAAA;QACH,CAAC;QAGD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,CAC3C,6BAA6B,EAC7B,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAC/B,CAAA;YAGD,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;gBACvE,OAAO;oBACL,EAAE,EAAE,EAAE;oBACN,KAAK,EAAE,YAAY;iBACpB,CAAA;YACH,CAAC;YAED,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,EAAE,gBAAgB,CAAA;YACpD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;oBACL,EAAE,EAAE,EAAE;oBACN,KAAK,EAAE,yBAAyB,UAAU,2BAA2B,SAAS,GAAG;iBAClF,CAAA;YACH,CAAC;YAED,OAAO;gBACL,EAAE,EAAE,WAAW,CAAC,EAAE;gBAClB,IAAI,EAAE,WAAW,CAAC,IAAI;aACvB,CAAA;QACH,CAAC;QAGD,OAAO;YACL,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,yBAAyB,UAAU,cAAc;SACzD,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3E,OAAO;YACL,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,gCAAgC,YAAY,EAAE;SACtD,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import fs from 'node:fs';
2
+ import type { IntegrationDefinitionQuery } from '../generated/graphql.js';
3
+ type Integration = NonNullable<IntegrationDefinitionQuery['integration']>;
4
+ export type IntegrationDefinitions = Omit<NonNullable<Integration['latest']>, 'elements'> & {
5
+ elements: (Omit<NonNullable<Integration['latest']>['elements'][0], 'content' | 'id' | 'name'> & {
6
+ id?: string;
7
+ name?: string;
8
+ content?: Partial<NonNullable<Integration['latest']>['elements'][0]['content']>;
9
+ })[];
10
+ };
11
+ export type IntegrationMeta = Pick<Integration, 'key' | 'name' | 'description' | 'status'> & {
12
+ id?: string;
13
+ account?: Integration['account'];
14
+ };
15
+ export default function saveIntegration(integration: IntegrationMeta, definitions: IntegrationDefinitions, root?: string, fsImpl?: typeof fs): void;
16
+ export {};
@@ -0,0 +1,117 @@
1
+ import fs from 'node:fs';
2
+ const normalizeFolderName = (folder) => folder.replace(':', '_');
3
+ function createFolderIfMissing(root, fsImpl) {
4
+ const rootPath = root ? `${root}/` : '';
5
+ return (name) => {
6
+ const path = `${rootPath}${name}`;
7
+ if (!fsImpl.existsSync(path)) {
8
+ fsImpl.mkdirSync(path);
9
+ }
10
+ };
11
+ }
12
+ function writeJsonFile(root, fsImpl) {
13
+ const rootPath = root ? `${root}/` : '';
14
+ return (folder, name, content) => {
15
+ const path = folder
16
+ ? `${rootPath}${folder}/${name}.json`
17
+ : `${rootPath}${name}.json`;
18
+ try {
19
+ fsImpl.writeFileSync(path, JSON.stringify(content, undefined, 2));
20
+ }
21
+ catch (error) {
22
+ console.error(`Error writing file ${path}:`, error);
23
+ }
24
+ };
25
+ }
26
+ const transformElement = ({ id, key, content, }) => ({
27
+ ...(id ? { __id: id } : {}),
28
+ __key: key,
29
+ ...(content?.timestamp ? { __timestamp: content.timestamp } : {}),
30
+ ...content?.data,
31
+ });
32
+ const transformAccount = ({ id, key, name }) => ({
33
+ __id: id,
34
+ __key: key,
35
+ name,
36
+ });
37
+ const typeToFolder = {
38
+ Schema: 'schemas',
39
+ Service: 'services',
40
+ Auth: 'auths',
41
+ SchemaMutation: 'mutations',
42
+ Dictionary: 'dictionaries',
43
+ Job: 'jobs',
44
+ Value: 'values',
45
+ Flow: 'flows',
46
+ RetryRule: 'retryRules',
47
+ };
48
+ function deleteRemovedFiles(rootFolder, elements, fsImpl) {
49
+ const rootPath = rootFolder ? `${rootFolder}/` : '';
50
+ Object.values(typeToFolder).forEach((folder) => {
51
+ const folderPath = `${rootPath}${folder}`;
52
+ if (!fsImpl.existsSync(folderPath)) {
53
+ return;
54
+ }
55
+ const files = fsImpl.readdirSync(folderPath);
56
+ files.forEach((file) => {
57
+ if (!file.endsWith('.json')) {
58
+ return;
59
+ }
60
+ const fileKey = file.replace('.json', '');
61
+ const existsInApi = elements?.some((element) => typeToFolder[element.__typename] === folder &&
62
+ element.key === fileKey);
63
+ if (existsInApi) {
64
+ return;
65
+ }
66
+ const filePath = `${folderPath}/${file}`;
67
+ try {
68
+ const content = fsImpl.readFileSync(filePath, 'utf8');
69
+ const data = JSON.parse(content);
70
+ if (data.__id) {
71
+ fsImpl.unlinkSync(filePath);
72
+ }
73
+ }
74
+ catch (error) {
75
+ console.error(`Error reading file ${filePath}:`, error);
76
+ }
77
+ });
78
+ });
79
+ }
80
+ export default function saveIntegration(integration, definitions, root, fsImpl = fs) {
81
+ const { id, key, name, description, status, account } = integration;
82
+ const { timestamp, elements } = definitions;
83
+ const rootFolder = root ? normalizeFolderName(root) : undefined;
84
+ const createFolder = createFolderIfMissing(rootFolder, fsImpl);
85
+ const writeFile = writeJsonFile(rootFolder, fsImpl);
86
+ if (rootFolder) {
87
+ createFolderIfMissing(undefined, fsImpl)(rootFolder);
88
+ }
89
+ const config = elements?.find((el) => el.__typename === 'ConfigElement' && el.key === 'config');
90
+ const index = {
91
+ ...(id ? { __id: id } : {}),
92
+ __key: key,
93
+ ...(timestamp ? { __timestamp: timestamp } : {}),
94
+ name,
95
+ description,
96
+ status,
97
+ account: account ? transformAccount(account) : undefined,
98
+ flags: config?.content?.data,
99
+ identConfig: undefined,
100
+ nonvalues: undefined,
101
+ queueService: undefined,
102
+ };
103
+ writeFile(null, 'integration', index);
104
+ Object.values(typeToFolder).forEach((folder) => {
105
+ createFolder(folder);
106
+ });
107
+ deleteRemovedFiles(rootFolder, elements, fsImpl);
108
+ if (elements) {
109
+ elements.forEach((element) => {
110
+ const folder = typeToFolder[element.__typename];
111
+ if (folder) {
112
+ writeFile(folder, element.key, transformElement(element));
113
+ }
114
+ });
115
+ }
116
+ }
117
+ //# sourceMappingURL=saveIntegration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveIntegration.js","sourceRoot":"","sources":["../../src/utils/saveIntegration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import Conf from 'conf';
2
+ import type { ConfigSchema } from './config.js';
3
+ export declare function isTokenExpired(expiresAt?: number): boolean;
4
+ export declare function getStoredToken(config?: Conf<ConfigSchema>): string | undefined;
5
+ export declare function saveToken(token: string, expiresAt?: number, config?: Conf<ConfigSchema>): void;
6
+ export declare function clearToken(config?: Conf<ConfigSchema>): void;
@@ -0,0 +1,31 @@
1
+ import { getConfigValue, setConfigValue, deleteConfigValue } from './config.js';
2
+ export function isTokenExpired(expiresAt) {
3
+ if (!expiresAt) {
4
+ return false;
5
+ }
6
+ return Date.now() >= expiresAt;
7
+ }
8
+ export function getStoredToken(config) {
9
+ const token = getConfigValue('token', config);
10
+ const expiresAt = getConfigValue('expiresAt', config);
11
+ if (!token) {
12
+ return process.env.GREAT_TOKEN;
13
+ }
14
+ if (isTokenExpired(expiresAt)) {
15
+ deleteConfigValue('token', config);
16
+ deleteConfigValue('expiresAt', config);
17
+ return undefined;
18
+ }
19
+ return token;
20
+ }
21
+ export function saveToken(token, expiresAt, config) {
22
+ setConfigValue('token', token, config);
23
+ if (expiresAt !== undefined) {
24
+ setConfigValue('expiresAt', expiresAt, config);
25
+ }
26
+ }
27
+ export function clearToken(config) {
28
+ deleteConfigValue('token', config);
29
+ deleteConfigValue('expiresAt', config);
30
+ }
31
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/utils/token.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAS/E,MAAM,UAAU,cAAc,CAAC,SAAkB;IAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,SAAS,CAAA;AAChC,CAAC;AAYD,MAAM,UAAU,cAAc,CAC5B,MAA2B;IAE3B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7C,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IAErD,IAAI,CAAC,KAAK,EAAE,CAAC;QAEX,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAE9B,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QAClC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AASD,MAAM,UAAU,SAAS,CACvB,KAAa,EACb,SAAkB,EAClB,MAA2B;IAE3B,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACtC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,cAAc,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAClC,iBAAiB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const VALID_VALUE_TYPES: readonly ["string", "secret", "number", "boolean", "date"];
2
+ export type ValueElementType = (typeof VALID_VALUE_TYPES)[number];
3
+ export declare function isValidValueElementType(type: unknown): type is ValueElementType;
4
+ export declare function castValue(valueStr: string, type: ValueElementType): string | number | boolean;
@@ -0,0 +1,43 @@
1
+ export const VALID_VALUE_TYPES = [
2
+ 'string',
3
+ 'secret',
4
+ 'number',
5
+ 'boolean',
6
+ 'date',
7
+ ];
8
+ export function isValidValueElementType(type) {
9
+ return (typeof type === 'string' &&
10
+ VALID_VALUE_TYPES.includes(type));
11
+ }
12
+ export function castValue(valueStr, type) {
13
+ switch (type) {
14
+ case 'string':
15
+ case 'secret':
16
+ return valueStr;
17
+ case 'number': {
18
+ const num = Number(valueStr);
19
+ if (isNaN(num)) {
20
+ throw new Error(`Cannot cast "${valueStr}" to number`);
21
+ }
22
+ return num;
23
+ }
24
+ case 'boolean': {
25
+ const lower = valueStr.toLowerCase();
26
+ if (lower === 'true' || lower === '1')
27
+ return true;
28
+ if (lower === 'false' || lower === '0')
29
+ return false;
30
+ throw new Error(`Cannot cast "${valueStr}" to boolean. Use "true" or "false"`);
31
+ }
32
+ case 'date': {
33
+ const isoPattern = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d\d\d)?Z?$/;
34
+ if (!isoPattern.test(valueStr)) {
35
+ throw new Error(`Date must be in ISO 8601 format (e.g., "2024-01-15T10:00:00Z")`);
36
+ }
37
+ return valueStr;
38
+ }
39
+ default:
40
+ throw new Error(`Unknown value type: ${type}`);
41
+ }
42
+ }
43
+ //# sourceMappingURL=valueTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueTypes.js","sourceRoot":"","sources":["../../src/utils/valueTypes.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;CACE,CAAA;AAOV,MAAM,UAAU,uBAAuB,CACrC,IAAa;IAEb,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACxB,iBAAiB,CAAC,QAAQ,CAAC,IAAwB,CAAC,CACrD,CAAA;AACH,CAAC;AAKD,MAAM,UAAU,SAAS,CACvB,QAAgB,EAChB,IAAsB;IAEtB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QAEjB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC5B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,gBAAgB,QAAQ,aAAa,CAAC,CAAA;YACxD,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;YACpC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAA;YAClD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAA;YACpD,MAAM,IAAI,KAAK,CACb,gBAAgB,QAAQ,qCAAqC,CAC9D,CAAA;QACH,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YAEZ,MAAM,UAAU,GAAG,oDAAoD,CAAA;YACvE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAA;YACH,CAAC;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC;AACH,CAAC"}
@@ -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
+ export declare const getValueAction: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>, fsImpl?: typeof fs) => (element: string, options?: {
6
+ integration?: string;
7
+ account?: string;
8
+ }) => Promise<void>;
@@ -0,0 +1,50 @@
1
+ import fs from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import { createGraphQLClient, } from '../utils/graphqlClient.js';
4
+ import { getApiBaseUrl } from '../utils/config.js';
5
+ import { resolveAccountId } from '../utils/resolveAccount.js';
6
+ import { resolveElement } from '../utils/resolveElement.js';
7
+ import { fetchIdFromFile } from '../utils/fetchLocal.js';
8
+ import { ElementType } from '../generated/graphql.js';
9
+ export const getValueAction = (log, apiToken, client, config, fsImpl = fs) => async (element, options) => {
10
+ if (!apiToken) {
11
+ log(chalk.red('Authentication required. Run `great login` first.'));
12
+ return;
13
+ }
14
+ const graphQLClient = client ?? createGraphQLClient(apiToken, getApiBaseUrl(config));
15
+ let integrationIdentifier = options?.integration;
16
+ if (!integrationIdentifier) {
17
+ integrationIdentifier = fetchIdFromFile(fsImpl);
18
+ }
19
+ let accountId;
20
+ if (integrationIdentifier) {
21
+ const { accountId: resolvedAccountId, error } = await resolveAccountId(options ?? {}, apiToken, graphQLClient, config);
22
+ if (error && options?.integration) {
23
+ log(chalk.red(error));
24
+ return;
25
+ }
26
+ accountId = resolvedAccountId;
27
+ }
28
+ const resolvedElement = await resolveElement({
29
+ identifier: element,
30
+ type: ElementType.Value,
31
+ integrationIdentifier,
32
+ accountId,
33
+ apiToken,
34
+ client: graphQLClient,
35
+ log,
36
+ });
37
+ if (!resolvedElement) {
38
+ return;
39
+ }
40
+ if (resolvedElement.__typename !== 'Value') {
41
+ log(chalk.red(`Element "${element}" is not a Value element (type: ${resolvedElement.__typename})`));
42
+ return;
43
+ }
44
+ if (resolvedElement.value === null || resolvedElement.value === undefined) {
45
+ log(chalk.yellow(`Value element "${resolvedElement.key}" has no value set`));
46
+ return;
47
+ }
48
+ log(resolvedElement.value.toString());
49
+ };
50
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/value/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EACL,mBAAmB,GAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,aAAa,EAAqB,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAKrD,MAAM,CAAC,MAAM,cAAc,GACzB,CACE,GAA8B,EAC9B,QAAiB,EACjB,MAA6B,EAC7B,MAA2B,EAC3B,MAAM,GAAG,EAAE,EACX,EAAE,CACJ,KAAK,EACH,OAAe,EACf,OAAoD,EACpD,EAAE;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAA;QACnE,OAAM;IACR,CAAC;IAGD,MAAM,aAAa,GACjB,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAGhE,IAAI,qBAAqB,GAAG,OAAO,EAAE,WAAW,CAAA;IAChD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IACjD,CAAC;IAGD,IAAI,SAA6B,CAAA;IACjC,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,MAAM,gBAAgB,CACpE,OAAO,IAAI,EAAE,EACb,QAAQ,EACR,aAAa,EACb,MAAM,CACP,CAAA;QAID,IAAI,KAAK,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;YAClC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;YACrB,OAAM;QACR,CAAC;QAED,SAAS,GAAG,iBAAiB,CAAA;IAC/B,CAAC;IAGD,MAAM,eAAe,GAAG,MAAM,cAAc,CAAC;QAC3C,UAAU,EAAE,OAAO;QACnB,IAAI,EAAE,WAAW,CAAC,KAAK;QACvB,qBAAqB;QACrB,SAAS;QACT,QAAQ;QACR,MAAM,EAAE,aAAa;QACrB,GAAG;KACJ,CAAC,CAAA;IAEF,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAM;IACR,CAAC;IAGD,IAAI,eAAe,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3C,GAAG,CACD,KAAK,CAAC,GAAG,CACP,YAAY,OAAO,mCAAmC,eAAe,CAAC,UAAU,GAAG,CACpF,CACF,CAAA;QACD,OAAM;IACR,CAAC;IAGD,IAAI,eAAe,CAAC,KAAK,KAAK,IAAI,IAAI,eAAe,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1E,GAAG,CACD,KAAK,CAAC,MAAM,CAAC,kBAAkB,eAAe,CAAC,GAAG,oBAAoB,CAAC,CACxE,CAAA;QACD,OAAM;IACR,CAAC;IAGD,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;AACvC,CAAC,CAAA"}
@@ -1,4 +1,3 @@
1
1
  import type { Command } from 'commander';
2
- export declare const action: (log: (message: string) => void, apiToken?: string) => (accountId?: string) => Promise<void>;
3
- declare const _default: (program: Command, apiToken?: string) => void;
2
+ declare const _default: (program: Command, apiToken?: string) => Command;
4
3
  export default _default;
@@ -0,0 +1,26 @@
1
+ import { setValueAction } from './set.js';
2
+ import { getValueAction } from './get.js';
3
+ import { listValuesAction } from './list.js';
4
+ export default (program, apiToken) => {
5
+ const value = program.command('value').description('Manage value elements');
6
+ value
7
+ .command('list')
8
+ .description('List all value elements in an integration')
9
+ .option('-i, --integration <id>', 'integration id or key (or use local integration.json)')
10
+ .option('-a, --account <id>', 'account id or key (uses default from config if not provided)')
11
+ .action(listValuesAction(console.log, apiToken));
12
+ value
13
+ .command('set <element> <value>')
14
+ .description('Set the value of a value element')
15
+ .option('-i, --integration <id>', 'integration id or key (required when using element key)')
16
+ .option('-a, --account <id>', 'account id or key (uses default from config if not provided)')
17
+ .action(setValueAction(console.log, apiToken));
18
+ value
19
+ .command('get <element>')
20
+ .description('Get the value of a value element')
21
+ .option('-i, --integration <id>', 'integration id or key (required when using element key)')
22
+ .option('-a, --account <id>', 'account id or key (uses default from config if not provided)')
23
+ .action(getValueAction(console.log, apiToken));
24
+ return value;
25
+ };
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/value/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAK5C,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAA;IAE3E,KAAK;SACF,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CACL,wBAAwB,EACxB,uDAAuD,CACxD;SACA,MAAM,CACL,oBAAoB,EACpB,8DAA8D,CAC/D;SACA,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAElD,KAAK;SACF,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CACL,wBAAwB,EACxB,yDAAyD,CAC1D;SACA,MAAM,CACL,oBAAoB,EACpB,8DAA8D,CAC/D;SACA,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEhD,KAAK;SACF,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CACL,wBAAwB,EACxB,yDAAyD,CAC1D;SACA,MAAM,CACL,oBAAoB,EACpB,8DAA8D,CAC/D;SACA,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEhD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -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
+ export declare const listValuesAction: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>, fsImpl?: typeof fs) => (options?: {
6
+ integration?: string;
7
+ account?: string;
8
+ }) => Promise<void>;
@@ -0,0 +1,122 @@
1
+ import fs from 'node:fs';
2
+ import chalk from 'chalk';
3
+ import columnify from 'columnify';
4
+ import { gql } from 'graphql-tag';
5
+ import { createGraphQLClient, } from '../utils/graphqlClient.js';
6
+ import { handleGraphQLError } from '../utils/graphqlError.js';
7
+ import { getApiBaseUrl } from '../utils/config.js';
8
+ import { resolveAccountId } from '../utils/resolveAccount.js';
9
+ import { resolveIntegration } from '../utils/resolveIntegration.js';
10
+ import { fetchIdFromFile } from '../utils/fetchLocal.js';
11
+ const ValuesListQueryDocument = gql `
12
+ query ValuesList($id: ID!) {
13
+ integration(id: $id) {
14
+ id
15
+ key
16
+ name
17
+ latest {
18
+ elements(type: [value]) {
19
+ __typename
20
+ ... on Value {
21
+ id
22
+ key
23
+ name
24
+ value
25
+ content {
26
+ data
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ }
33
+ `;
34
+ function detectType(content) {
35
+ const type = content?.data?.type;
36
+ if (!type || typeof type !== 'string') {
37
+ return 'unknown';
38
+ }
39
+ return type;
40
+ }
41
+ function formatValue(value, content) {
42
+ if (content?.data?.type === 'secret')
43
+ return '<secret>';
44
+ if (value === null || value === undefined)
45
+ return '';
46
+ const stringValue = String(value);
47
+ const maxLength = 50;
48
+ if (stringValue.length > maxLength) {
49
+ return stringValue.substring(0, maxLength - 1) + '…';
50
+ }
51
+ return stringValue;
52
+ }
53
+ export const listValuesAction = (log, apiToken, client, config, fsImpl = fs) => async (options) => {
54
+ if (!apiToken) {
55
+ log(chalk.red('Authentication required. Run `great login` first.'));
56
+ return;
57
+ }
58
+ const graphQLClient = client ?? createGraphQLClient(apiToken, getApiBaseUrl(config));
59
+ let integrationIdentifier = options?.integration;
60
+ if (!integrationIdentifier) {
61
+ integrationIdentifier = fetchIdFromFile(fsImpl);
62
+ }
63
+ if (!integrationIdentifier) {
64
+ log(chalk.red('Integration required. Use -i flag or run from integration directory.'));
65
+ return;
66
+ }
67
+ const { accountId, error } = await resolveAccountId(options ?? {}, apiToken, graphQLClient, config);
68
+ if (error && options?.integration) {
69
+ log(chalk.red(error));
70
+ return;
71
+ }
72
+ const integrationResult = await resolveIntegration(integrationIdentifier, accountId, apiToken, graphQLClient, getApiBaseUrl(config));
73
+ if (integrationResult.error || !integrationResult.id) {
74
+ log(chalk.red(integrationResult.error || 'Integration not found'));
75
+ return;
76
+ }
77
+ const result = await graphQLClient.request(ValuesListQueryDocument, { id: integrationResult.id });
78
+ if (result.error) {
79
+ handleGraphQLError(result.error, log);
80
+ return;
81
+ }
82
+ const integration = result.data?.integration;
83
+ if (!integration?.latest) {
84
+ log(chalk.red('Integration has no latest version'));
85
+ return;
86
+ }
87
+ const values = integration.latest.elements
88
+ .filter((el) => el.__typename === 'Value')
89
+ .map((element) => ({
90
+ key: element.key,
91
+ name: element.name,
92
+ value: formatValue(element.value, element.content),
93
+ type: detectType(element.content),
94
+ id: element.id,
95
+ }));
96
+ if (values.length === 0) {
97
+ log(chalk.white(`No values in integration "${integration.name}"`));
98
+ return;
99
+ }
100
+ log(columnify(values, {
101
+ columns: ['key', 'name', 'value', 'type', 'id'],
102
+ columnSplitter: ' ',
103
+ config: {
104
+ key: {
105
+ dataTransform: (data) => chalk.cyan(data),
106
+ },
107
+ type: {
108
+ dataTransform: (data) => chalk.grey(data),
109
+ headingTransform: (heading) => chalk.grey(heading.toUpperCase()),
110
+ },
111
+ id: {
112
+ dataTransform: (data) => chalk.grey(data),
113
+ headingTransform: (heading) => chalk.grey(heading.toUpperCase()),
114
+ },
115
+ },
116
+ }));
117
+ const count = values.length;
118
+ const countText = `${count} ${count === 1 ? 'value' : 'values'}`;
119
+ const suffix = integration.name ? ` in ${integration.name}` : '';
120
+ log(chalk.white(`\n${countText}${suffix}`));
121
+ };
122
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/value/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EACL,mBAAmB,GAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAqB,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD,MAAM,uBAAuB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;CAsBlC,CAAA;AAKD,SAAS,UAAU,CACjB,OAAwD;IAExD,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAA;IAEhC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAKD,SAAS,WAAW,CAClB,KAAc,EACd,OAAwD;IAExD,IAAI,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAA;IACvD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAEpD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,EAAE,CAAA;IAEpB,IAAI,WAAW,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QACnC,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACtD,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAKD,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CACE,GAA8B,EAC9B,QAAiB,EACjB,MAA6B,EAC7B,MAA2B,EAC3B,MAAM,GAAG,EAAE,EACX,EAAE,CACJ,KAAK,EAAE,OAAoD,EAAE,EAAE;IAE7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAA;QACnE,OAAM;IACR,CAAC;IAGD,MAAM,aAAa,GACjB,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAGhE,IAAI,qBAAqB,GAAG,OAAO,EAAE,WAAW,CAAA;IAChD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IACjD,CAAC;IAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,GAAG,CACD,KAAK,CAAC,GAAG,CACP,sEAAsE,CACvE,CACF,CAAA;QACD,OAAM;IACR,CAAC;IAGD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,gBAAgB,CACjD,OAAO,IAAI,EAAE,EACb,QAAQ,EACR,aAAa,EACb,MAAM,CACP,CAAA;IAID,IAAI,KAAK,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;QAClC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QACrB,OAAM;IACR,CAAC;IAGD,MAAM,iBAAiB,GAAG,MAAM,kBAAkB,CAChD,qBAAqB,EACrB,SAAS,EACT,QAAQ,EACR,aAAa,EACb,aAAa,CAAC,MAAM,CAAC,CACtB,CAAA;IAED,IAAI,iBAAiB,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;QACrD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,uBAAuB,CAAC,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IAGD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CACxC,uBAAuB,EACvB,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAC7B,CAAA;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;QACrC,OAAM;IACR,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,CAAA;IAC5C,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QACzB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAA;QACnD,OAAM;IACR,CAAC;IAGD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ;SACvC,MAAM,CACL,CAAC,EAAE,EAAqD,EAAE,CACxD,EAAE,CAAC,UAAU,KAAK,OAAO,CAC5B;SACA,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;QAClD,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;QACjC,EAAE,EAAE,OAAO,CAAC,EAAE;KACf,CAAC,CAAC,CAAA;IAGL,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IAED,GAAG,CACD,SAAS,CAAC,MAAM,EAAE;QAChB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC;QAC/C,cAAc,EAAE,KAAK;QACrB,MAAM,EAAE;YACN,GAAG,EAAE;gBACH,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aAClD;YACD,IAAI,EAAE;gBACJ,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjD,gBAAgB,EAAE,CAAC,OAAe,EAAE,EAAE,CACpC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;aACpC;YACD,EAAE,EAAE;gBACF,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBACjD,gBAAgB,EAAE,CAAC,OAAe,EAAE,EAAE,CACpC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;aACpC;SACF;KACF,CAAC,CACH,CAAA;IAGD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;IAC3B,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAChE,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAChE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC,CAAA;AAC7C,CAAC,CAAA"}
@@ -0,0 +1,12 @@
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
+ export declare function setValueForElement(elementId: string, valueStr: string, elementContent: Record<string, unknown>, graphQLClient: GraphQLRequestClient): Promise<{
6
+ success: boolean;
7
+ error?: string;
8
+ }>;
9
+ export declare const setValueAction: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>, fsImpl?: typeof fs) => (element: string, valueStr: string, options?: {
10
+ integration?: string;
11
+ account?: string;
12
+ }) => Promise<void>;