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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pull/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,OAA0B,MAAM,qBAAqB,CAAA;AAC5D,OAAO,WAAW,MAAM,yBAAyB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAA;AAQhE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAA8B,EAAE,QAAiB,EAAE,EAAE,CAC1E,KAAK,UAAU,WAAW,CAAC,SAAkB;IAC3C,MAAM,EAAE,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAA;IAC1C,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAA;QAC1D,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,qCAAqC,EAAE,EAAE,CAAA;IAErD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAkB,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC9D,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC1C,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;QAC9C,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6CAA6C,CAAC;KAC1D,QAAQ,CACP,WAAW,EACX,yEAAyE,CAC1E;KACA,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pull/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,eAAe,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EACL,mBAAmB,GAEpB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAqB,MAAM,oBAAoB,CAAA;AAGrE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,MAAM,kCAAkC,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B7C,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,GAA8B,EAC9B,QAAiB,EACjB,MAA6B,EAC7B,MAAkB,EAClB,MAA2B,EAC3B,EAAE,CACF,KAAK,UAAU,eAAe;IAE5B,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAA;QACpD,GAAG,CACD,OAAO,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,0CAA0C,CAC5F,CAAA;QACD,OAAM;IACR,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACzE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CACxC,kCAAkC,EAClC,EAAE,EAAE,EAAE,CACP,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,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAA;QACnD,OAAM;IACR,CAAC;IAGD,eAAe,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AACrE,CAAC,CAAA;AAEH,eAAe,CAAC,OAAgB,EAAE,QAAiB,EAAE,EAAE,CACrD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,11 @@
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 { promptForValueSetting } from '../utils/promptForValue.js';
6
+ import type { Command } from 'commander';
7
+ export declare const action: (log: (message: string) => void, apiToken?: string, client?: GraphQLRequestClient, fsImpl?: typeof fs, config?: Conf<ConfigSchema>, promptForValueSettingFn?: typeof promptForValueSetting) => (options?: {
8
+ account?: string;
9
+ }) => Promise<void>;
10
+ declare const _default: (program: Command, apiToken?: string) => Command;
11
+ export default _default;
@@ -0,0 +1,481 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { sentenceCase } from 'change-case';
5
+ import { fetchIdFromFile, fetchIntegrationFromFile, } from '../utils/fetchLocal.js';
6
+ import createIntegrationFromFile from '../utils/createIntegrationFromFile.js';
7
+ import { createGraphQLClient, } from '../utils/graphqlClient.js';
8
+ import { handleGraphQLError } from '../utils/graphqlError.js';
9
+ import { getApiBaseUrl } from '../utils/config.js';
10
+ import hashContent from '../utils/hashContent.js';
11
+ import { VALID_VALUE_TYPES, isValidValueElementType, } from '../utils/valueTypes.js';
12
+ import { setValueForElement } from '../value/set.js';
13
+ import { promptForValueSetting } from '../utils/promptForValue.js';
14
+ import { ElementType, } from '../generated/graphql.js';
15
+ import { gql } from 'graphql-tag';
16
+ const IntegrationForPushQueryDocument = gql `
17
+ query IntegrationForPush($id: ID!) {
18
+ integration(id: $id) {
19
+ id
20
+ key
21
+ name
22
+ latest {
23
+ timestamp
24
+ elements {
25
+ id
26
+ key
27
+ __typename
28
+ name
29
+ description
30
+ createdAt
31
+ content {
32
+ checksum
33
+ timestamp
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ `;
40
+ const CreateElementMutationDocument = gql `
41
+ mutation CreateElement(
42
+ $integrationId: ID!
43
+ $key: ID!
44
+ $name: String!
45
+ $type: ElementType!
46
+ $description: String
47
+ ) {
48
+ createElement(
49
+ integrationId: $integrationId
50
+ key: $key
51
+ name: $name
52
+ type: $type
53
+ description: $description
54
+ ) {
55
+ id
56
+ key
57
+ }
58
+ }
59
+ `;
60
+ const UpdateElementMutationDocument = gql `
61
+ mutation UpdateElement($id: ID!, $name: String, $description: String) {
62
+ updateElement(id: $id, name: $name, description: $description) {
63
+ id
64
+ name
65
+ description
66
+ }
67
+ }
68
+ `;
69
+ const SetElementContentMutationDocument = gql `
70
+ mutation SetElementContent($id: ID!, $content: JSON) {
71
+ setElementContent(id: $id, content: $content) {
72
+ id
73
+ content {
74
+ timestamp
75
+ checksum
76
+ }
77
+ }
78
+ }
79
+ `;
80
+ const DeleteElementMutationDocument = gql `
81
+ mutation DeleteElement($id: ID!) {
82
+ deleteElement(id: $id) {
83
+ id
84
+ key
85
+ }
86
+ }
87
+ `;
88
+ const folderToElementType = {
89
+ schemas: ElementType.Schema,
90
+ services: ElementType.Service,
91
+ auths: ElementType.Auth,
92
+ mutations: ElementType.Mutation,
93
+ dictionaries: ElementType.Dictionary,
94
+ jobs: ElementType.Job,
95
+ values: ElementType.Value,
96
+ flows: ElementType.Flow,
97
+ retryRules: ElementType.RetryRule,
98
+ };
99
+ function readLocalElements(fsImpl) {
100
+ const elements = [];
101
+ for (const folder of Object.keys(folderToElementType)) {
102
+ if (!fsImpl.existsSync(folder)) {
103
+ continue;
104
+ }
105
+ const files = fsImpl.readdirSync(folder);
106
+ for (const file of files) {
107
+ if (!file.endsWith('.json')) {
108
+ continue;
109
+ }
110
+ const key = file.replace('.json', '');
111
+ const filePath = path.join(folder, file);
112
+ try {
113
+ const content = fsImpl.readFileSync(filePath, 'utf8');
114
+ const data = JSON.parse(content);
115
+ elements.push({ folder, key, filePath, data });
116
+ }
117
+ catch (error) {
118
+ throw new Error(`Failed to read or parse ${filePath}: ${error}`);
119
+ }
120
+ }
121
+ }
122
+ return elements;
123
+ }
124
+ function compareLocalAndRemote(local, remote) {
125
+ if (!remote) {
126
+ return {
127
+ category: 'conflict',
128
+ reason: 'Element exists locally with __id but not found in Integreat',
129
+ };
130
+ }
131
+ const localChecksum = hashContent(local.data);
132
+ const localName = local.data.name || '';
133
+ const localDesc = local.data.description || '';
134
+ const localTimestamp = typeof local.data.__timestamp === 'string'
135
+ ? new Date(local.data.__timestamp)
136
+ : undefined;
137
+ const remoteChecksum = remote.checksum || '';
138
+ const remoteName = remote.name || '';
139
+ const remoteDesc = remote.description || '';
140
+ const remoteCreatedAt = remote.createdAt
141
+ ? new Date(remote.createdAt)
142
+ : undefined;
143
+ const hasContentChanged = localChecksum !== remoteChecksum;
144
+ const hasNameChanged = localName !== remoteName;
145
+ const hasDescriptionChanged = localDesc !== remoteDesc;
146
+ if (!hasContentChanged && !hasNameChanged && !hasDescriptionChanged) {
147
+ return { category: 'unchanged' };
148
+ }
149
+ const metaDateConflict = localTimestamp && remoteCreatedAt && localTimestamp < remoteCreatedAt;
150
+ const conflicts = [];
151
+ if (hasContentChanged && local.data.__timestamp !== remote.timestamp) {
152
+ conflicts.push('Content changed both local and remote');
153
+ }
154
+ if (hasNameChanged && metaDateConflict) {
155
+ conflicts.push(`name: "${localName}" (local) vs "${remoteName}" (remote)`);
156
+ }
157
+ if (hasDescriptionChanged && metaDateConflict) {
158
+ conflicts.push(`description: "${localDesc}" (local) vs "${remoteDesc}" (remote)`);
159
+ }
160
+ if (conflicts.length > 0) {
161
+ return {
162
+ category: 'conflict',
163
+ reason: ` ${conflicts.join('\n ')}`,
164
+ };
165
+ }
166
+ else {
167
+ return { category: 'update' };
168
+ }
169
+ }
170
+ function categorizeElements(localElements, remoteElementsMap) {
171
+ const toCreate = [];
172
+ const toUpdate = [];
173
+ const toDelete = [];
174
+ const conflicts = [];
175
+ const localElementIds = new Set();
176
+ for (const local of localElements) {
177
+ const localId = local.data.__id;
178
+ if (!localId) {
179
+ toCreate.push(local);
180
+ continue;
181
+ }
182
+ localElementIds.add(localId);
183
+ const remote = remoteElementsMap.get(localId);
184
+ const result = compareLocalAndRemote(local, remote);
185
+ if (result.category === 'conflict') {
186
+ conflicts.push({ ...local, reason: result.reason });
187
+ }
188
+ else if (result.category === 'update') {
189
+ toUpdate.push({ ...local, remoteId: remote?.id });
190
+ }
191
+ }
192
+ for (const [id, remoteLement] of remoteElementsMap) {
193
+ if (!localElementIds.has(id)) {
194
+ toDelete.push(remoteLement);
195
+ }
196
+ }
197
+ return { toCreate, toUpdate, toDelete, conflicts };
198
+ }
199
+ const prepareContentForApi = ({ __id, __key, __timestamp, name, description, ...content }, elementType) => {
200
+ if (elementType === ElementType.Value) {
201
+ const { value, type, ...rest } = content;
202
+ if (type === undefined) {
203
+ throw new Error('Value element must have a "type" field. ' +
204
+ 'Valid types: ' +
205
+ VALID_VALUE_TYPES.join(', '));
206
+ }
207
+ if (!isValidValueElementType(type)) {
208
+ throw new Error(`Invalid value element type: "${type}". ` +
209
+ 'Valid types: ' +
210
+ VALID_VALUE_TYPES.join(', '));
211
+ }
212
+ return { type, ...rest };
213
+ }
214
+ return content;
215
+ };
216
+ async function createElementOnApi(client, integrationId, element) {
217
+ const elementType = folderToElementType[element.folder];
218
+ const name = element.data.name || sentenceCase(element.key);
219
+ const description = element.data.description;
220
+ const result = await client.request(CreateElementMutationDocument, {
221
+ integrationId,
222
+ key: element.key,
223
+ type: elementType,
224
+ name,
225
+ description,
226
+ });
227
+ if (result.error) {
228
+ return undefined;
229
+ }
230
+ const id = result.data?.createElement?.id;
231
+ if (!id) {
232
+ return undefined;
233
+ }
234
+ return { id, name };
235
+ }
236
+ async function updateElementContent(client, elementId, content) {
237
+ const result = await client.request(SetElementContentMutationDocument, {
238
+ id: elementId,
239
+ content,
240
+ });
241
+ if (result.error) {
242
+ return undefined;
243
+ }
244
+ return result.data?.setElementContent?.content?.timestamp;
245
+ }
246
+ function updateLocalFile(fsImpl, filePath, updatedId, updatedTimestamp, generatedName, keepValue = false) {
247
+ const content = fsImpl.readFileSync(filePath, 'utf8');
248
+ const parsed = JSON.parse(content);
249
+ const { __id, __key, __timestamp, name, description, value, ...data } = parsed;
250
+ const id = updatedId || __id;
251
+ const timestamp = updatedTimestamp || __timestamp;
252
+ const finalName = generatedName || name;
253
+ const orderedData = {
254
+ ...(id ? { __id: id } : {}),
255
+ __key,
256
+ ...(timestamp ? { __timestamp: timestamp } : {}),
257
+ ...(finalName ? { name: finalName } : {}),
258
+ ...(description ? { description } : {}),
259
+ ...data,
260
+ ...(keepValue && value !== undefined ? { value } : {}),
261
+ };
262
+ fsImpl.writeFileSync(filePath, JSON.stringify(orderedData, null, 2));
263
+ }
264
+ function buildRemoteElementsMap(elements) {
265
+ const remoteElements = new Map();
266
+ for (const element of elements) {
267
+ remoteElements.set(element.id, {
268
+ id: element.id,
269
+ checksum: element.content?.checksum,
270
+ timestamp: element.content?.timestamp,
271
+ name: element.name,
272
+ description: element.description,
273
+ createdAt: element.createdAt,
274
+ });
275
+ }
276
+ return remoteElements;
277
+ }
278
+ function handleConflicts(conflicts, log) {
279
+ log(chalk.red.bold('!! Conflicts detected!\n'));
280
+ for (const conflict of conflicts) {
281
+ log(`${chalk.bold(conflict.filePath)}`);
282
+ log(` ${conflict.reason ?? 'Unknown reason'}`);
283
+ }
284
+ log(`\nRun ${chalk.bold('great pull')} to get remote changes, then manually merge and push again.`);
285
+ }
286
+ async function createOrUpdateElement(element, graphqlClient, integrationId, fsImpl, log, apiElementsMap, shouldSetValue) {
287
+ let id = element.remoteId;
288
+ let generatedName;
289
+ if (!id) {
290
+ const result = await createElementOnApi(graphqlClient, integrationId, element);
291
+ if (!result) {
292
+ log(chalk.red(`Failed to create element ${element.key} in ${element.folder}`));
293
+ return false;
294
+ }
295
+ id = result.id;
296
+ generatedName = result.name;
297
+ }
298
+ else {
299
+ const apiElement = apiElementsMap.get(id);
300
+ if (apiElement) {
301
+ const localName = element.data.name || '';
302
+ const localDesc = element.data.description;
303
+ const apiName = apiElement.name || '';
304
+ const apiDesc = apiElement.description;
305
+ const nameDiffers = localName !== apiName;
306
+ const descDiffers = (localDesc || null) !== (apiDesc || null);
307
+ if (nameDiffers || descDiffers) {
308
+ const result = await graphqlClient.request(UpdateElementMutationDocument, {
309
+ id,
310
+ name: nameDiffers ? localName : undefined,
311
+ description: descDiffers ? localDesc : undefined,
312
+ });
313
+ if (result.error) {
314
+ log(chalk.yellow(`Warning: Failed to update metadata for ${element.key} in ${element.folder}, continuing with content update`));
315
+ }
316
+ }
317
+ }
318
+ }
319
+ const elementType = folderToElementType[element.folder];
320
+ let content;
321
+ try {
322
+ content = prepareContentForApi(element.data, elementType);
323
+ }
324
+ catch (error) {
325
+ log(chalk.red(`Failed to prepare content for ${element.key} in ${element.folder}: ${error instanceof Error ? error.message : String(error)}`));
326
+ return false;
327
+ }
328
+ const timestamp = await updateElementContent(graphqlClient, id, content);
329
+ if (!timestamp) {
330
+ log(chalk.red(`Failed to ${element.remoteId ? 'update' : 'set'} content for ${element.key} in ${element.folder}`));
331
+ return false;
332
+ }
333
+ const hasValue = element.data.value !== undefined;
334
+ if (elementType === ElementType.Value && hasValue && shouldSetValue) {
335
+ const valueStr = String(element.data.value);
336
+ const result = await setValueForElement(id, valueStr, content, graphqlClient);
337
+ if (!result.success) {
338
+ log(chalk.red(`Failed to set value for ${element.key}: ${result.error}`));
339
+ return false;
340
+ }
341
+ log(chalk.green(`✓ Value set for element "${element.key}" (${content.type})`));
342
+ }
343
+ updateLocalFile(fsImpl, element.filePath, element.remoteId ? undefined : id, timestamp, generatedName, !shouldSetValue && hasValue);
344
+ return true;
345
+ }
346
+ async function deleteElement(element, graphqlClient, log) {
347
+ const result = await graphqlClient.request(DeleteElementMutationDocument, {
348
+ id: element.id,
349
+ });
350
+ if (result.error) {
351
+ log(chalk.red(`Failed to delete element ${element.id}`));
352
+ return false;
353
+ }
354
+ return true;
355
+ }
356
+ function logSummary(createdCount, updatedCount, deletedCount, log) {
357
+ const total = createdCount + updatedCount + deletedCount;
358
+ if (total > 0) {
359
+ const parts = [];
360
+ if (createdCount > 0)
361
+ parts.push(`${createdCount} created`);
362
+ if (updatedCount > 0)
363
+ parts.push(`${updatedCount} updated`);
364
+ if (deletedCount > 0)
365
+ parts.push(`${deletedCount} deleted`);
366
+ log(`\n${chalk.green('✓')} ${parts.join(', ')}`);
367
+ }
368
+ }
369
+ export const action = (log, apiToken, client, fsImpl = fs, config, promptForValueSettingFn = promptForValueSetting) => async function pushIntegration(options) {
370
+ let integrationId = fetchIdFromFile(fsImpl);
371
+ if (!integrationId) {
372
+ log(chalk.yellow('No integration ID found in integration.json'));
373
+ log('Creating integration on server...\n');
374
+ const apiBaseUrl = getApiBaseUrl(config);
375
+ const graphqlClient = client ?? createGraphQLClient(apiToken, apiBaseUrl);
376
+ const result = await createIntegrationFromFile(graphqlClient, apiToken ?? '', options ?? {}, config, fsImpl);
377
+ if (!result.success || !result.integration) {
378
+ log(chalk.red(result.error));
379
+ return;
380
+ }
381
+ const { integration } = result;
382
+ log(chalk.green('✓ Integration created'));
383
+ log(` Name: ${chalk.cyan(integration.name)}`);
384
+ log(` ID: ${integration.id}`);
385
+ log(` Key: ${integration.key}`);
386
+ log('');
387
+ const fileData = fetchIntegrationFromFile(fsImpl);
388
+ if (!fileData) {
389
+ log(chalk.red('Failed to read integration.json after creation'));
390
+ return;
391
+ }
392
+ const updatedData = {
393
+ __id: integration.id,
394
+ __key: integration.key,
395
+ name: integration.name,
396
+ description: fileData.description,
397
+ status: integration.status,
398
+ account: {
399
+ __id: integration.account.id,
400
+ __key: integration.account.key,
401
+ name: integration.account.name,
402
+ },
403
+ flags: fileData.flags,
404
+ identConfig: fileData.identConfig,
405
+ nonvalues: fileData.nonvalues,
406
+ queueService: fileData.queueService,
407
+ };
408
+ fsImpl.writeFileSync('integration.json', JSON.stringify(updatedData, null, 2));
409
+ integrationId = integration.id;
410
+ log(chalk.green('✓ Updated integration.json with server details\n'));
411
+ }
412
+ const apiBaseUrl = getApiBaseUrl(config);
413
+ const graphqlClient = client ?? createGraphQLClient(apiToken, apiBaseUrl);
414
+ const result = await graphqlClient.request(IntegrationForPushQueryDocument, { id: integrationId });
415
+ if (result.error) {
416
+ handleGraphQLError(result.error, log);
417
+ return;
418
+ }
419
+ const integration = result.data?.integration;
420
+ if (!integration || !integration.latest) {
421
+ log(chalk.red('Integration has no latest version'));
422
+ return;
423
+ }
424
+ const apiElementsMap = buildRemoteElementsMap(integration.latest.elements);
425
+ let localElements;
426
+ try {
427
+ localElements = readLocalElements(fsImpl);
428
+ }
429
+ catch (error) {
430
+ log(chalk.red(`Error reading local files: ${error}`));
431
+ return;
432
+ }
433
+ const { toCreate, toUpdate, toDelete, conflicts } = categorizeElements(localElements, apiElementsMap);
434
+ if (conflicts.length > 0) {
435
+ handleConflicts(conflicts, log);
436
+ return;
437
+ }
438
+ if (toCreate.length + toUpdate.length + toDelete.length === 0) {
439
+ log(chalk.green('No changes to push'));
440
+ return;
441
+ }
442
+ let shouldSetValue = false;
443
+ try {
444
+ shouldSetValue = await promptForValueSettingFn([...toCreate, ...toUpdate], log);
445
+ }
446
+ catch {
447
+ log(chalk.yellow('\nPush cancelled'));
448
+ return;
449
+ }
450
+ let createdCount = 0;
451
+ for (const element of toCreate) {
452
+ const success = await createOrUpdateElement(element, graphqlClient, integrationId, fsImpl, log, apiElementsMap, shouldSetValue);
453
+ if (!success)
454
+ return;
455
+ log(chalk.green(`✓ Created ${element.folder}/${element.key}`));
456
+ createdCount++;
457
+ }
458
+ let updatedCount = 0;
459
+ for (const element of toUpdate) {
460
+ const success = await createOrUpdateElement(element, graphqlClient, integrationId, fsImpl, log, apiElementsMap, shouldSetValue);
461
+ if (!success)
462
+ return;
463
+ log(chalk.green(`✓ Updated ${element.folder}/${element.key}`));
464
+ updatedCount++;
465
+ }
466
+ let deletedCount = 0;
467
+ for (const element of toDelete) {
468
+ const success = await deleteElement(element, graphqlClient, log);
469
+ if (!success)
470
+ return;
471
+ log(chalk.green(`✓ Deleted ${element.id}`));
472
+ deletedCount++;
473
+ }
474
+ logSummary(createdCount, updatedCount, deletedCount, log);
475
+ };
476
+ export default (program, apiToken) => program
477
+ .command('push')
478
+ .description('push local changes to Integreat')
479
+ .option('-a, --account <id>', 'account id or key (required when creating integration)')
480
+ .action(action(console.log, apiToken));
481
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/push/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Spinner } from 'nanospinner';
2
+ import type { GraphQLRequestClient } from '../utils/graphqlClient.js';
3
+ import type { Logger } from '../types.js';
4
+ export declare function createDispatch(integrationId: string, _log: Logger, apiToken?: string, client?: GraphQLRequestClient, context?: Record<string, unknown>, createSpinnerFn?: () => Spinner): (actionOrType: {
5
+ type: string;
6
+ payload: unknown;
7
+ meta?: unknown;
8
+ } | string, maybePayload?: unknown) => Promise<unknown>;
@@ -0,0 +1,75 @@
1
+ import chalk from 'chalk';
2
+ import { createSpinner } from 'nanospinner';
3
+ import { dispatchAction } from '../utils/dispatch.js';
4
+ const SUCCESS_STATUSES = ['ok', 'noaction', 'queued'];
5
+ const isSuccessResponse = (response) => response.status && SUCCESS_STATUSES.includes(response.status);
6
+ function textFromStatus(status) {
7
+ switch (status) {
8
+ case 'ok':
9
+ return chalk.green.bold('Success.');
10
+ case 'noaction':
11
+ return chalk.green.bold('Nothing to do.');
12
+ case 'queued':
13
+ return chalk.green.bold('Action was queued.');
14
+ case 'timeout':
15
+ return chalk.red.bold('Action timed out.');
16
+ default:
17
+ return chalk.red.bold('Action failed.');
18
+ }
19
+ }
20
+ function textFromStatusAndMessage(status, message) {
21
+ const statusString = textFromStatus(status);
22
+ return message ? `${statusString} ${message}` : statusString;
23
+ }
24
+ function countMessage(data) {
25
+ const count = Array.isArray(data)
26
+ ? data.length
27
+ : data === null || data === undefined
28
+ ? 0
29
+ : 1;
30
+ return count === 0
31
+ ? 'No data returned'
32
+ : `${count} data item${count === 1 ? '' : 's'} loaded to ${chalk.bold('$')}.`;
33
+ }
34
+ const removeGraphQLProps = ({ __typename, ...response }) => response;
35
+ export function createDispatch(integrationId, _log, apiToken, client, context, createSpinnerFn = createSpinner) {
36
+ return async (actionOrType, maybePayload) => {
37
+ let type;
38
+ let payload;
39
+ if (typeof actionOrType === 'string') {
40
+ type = actionOrType;
41
+ payload = maybePayload;
42
+ }
43
+ else {
44
+ const { meta, ...actionWithoutMeta } = actionOrType;
45
+ type = actionWithoutMeta.type;
46
+ payload = actionWithoutMeta.payload;
47
+ }
48
+ const spinner = createSpinnerFn().start();
49
+ try {
50
+ const response = await dispatchAction(integrationId, type, payload, apiToken, client);
51
+ if (isSuccessResponse(response)) {
52
+ const message = response.status === 'ok' ? countMessage(response.data) : undefined;
53
+ spinner.success(textFromStatusAndMessage(response.status, message));
54
+ }
55
+ else {
56
+ spinner.error(textFromStatusAndMessage(response.status, response.error || response.warning || undefined));
57
+ }
58
+ if (context) {
59
+ context.$$ = removeGraphQLProps(response);
60
+ context.$ = response.data;
61
+ }
62
+ return undefined;
63
+ }
64
+ catch (error) {
65
+ const errorMessage = error instanceof Error ? error.message : String(error);
66
+ spinner.error(`Could not dispatch: ${errorMessage}`);
67
+ if (context) {
68
+ context.$$ = null;
69
+ context.$ = null;
70
+ }
71
+ return undefined;
72
+ }
73
+ };
74
+ }
75
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../src/repl/dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Logger } from '../types.js';
2
+ export declare function createHelp(log: Logger): () => void;
@@ -0,0 +1,14 @@
1
+ import chalk from 'chalk';
2
+ export function createHelp(log) {
3
+ return () => {
4
+ log(chalk.white('\nAvailable functions:'));
5
+ log(chalk.cyan(' dispatch(action)') + ' - Dispatch an action object');
6
+ log(chalk.cyan(' dispatch(type, payload)') +
7
+ ' - Dispatch with type and payload');
8
+ log(chalk.cyan(' help()') + ' - Show this help message');
9
+ log(chalk.white('\nAvailable variables:'));
10
+ log(chalk.cyan(' $') + ' - Data from the last dispatch');
11
+ log(chalk.cyan(' $$') + ' - Full response from the last dispatch\n');
12
+ };
13
+ }
14
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/repl/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,GAAG,EAAE;QACV,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAA;QAC1C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,8BAA8B,CAAC,CAAA;QACtE,GAAG,CACD,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC;YACrC,mCAAmC,CACtC,CAAA;QACD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,2BAA2B,CAAC,CAAA;QACzD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAA;QAC1C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,iCAAiC,CAAC,CAAA;QAC1D,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,2CAA2C,CAAC,CAAA;IACvE,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import Conf from 'conf';
2
+ import type { Command } from 'commander';
3
+ import type { GraphQLRequestClient } from '../utils/graphqlClient.js';
4
+ import type { Logger } from '../types.js';
5
+ import { type ConfigSchema } from '../utils/config.js';
6
+ export declare const action: (log: Logger, apiToken?: string, client?: GraphQLRequestClient, config?: Conf<ConfigSchema>) => (integrationKeyOrId?: string, options?: {
7
+ account?: string;
8
+ }) => Promise<void>;
9
+ declare const _default: (program: Command, apiToken?: string) => Command;
10
+ export default _default;