great 1.0.2 → 1.1.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 (101) hide show
  1. package/README.md +4 -0
  2. package/dist/create/account.d.ts +2 -0
  3. package/dist/create/account.js +40 -0
  4. package/dist/create/account.js.map +1 -0
  5. package/dist/create/integration.d.ts +4 -0
  6. package/dist/create/integration.js +73 -0
  7. package/dist/create/integration.js.map +1 -0
  8. package/dist/create/utils.d.ts +4 -0
  9. package/dist/create/utils.js +8 -0
  10. package/dist/create/utils.js.map +1 -0
  11. package/dist/deploy/index.js +1 -1
  12. package/dist/deploy/index.js.map +1 -1
  13. package/dist/explode/transform.js +3 -1
  14. package/dist/explode/transform.js.map +1 -1
  15. package/dist/explode/unescapeMongo.js +9 -1
  16. package/dist/explode/unescapeMongo.js.map +1 -1
  17. package/dist/generated/graphql.d.ts +87 -4
  18. package/dist/generated/graphql.js +7 -1
  19. package/dist/generated/graphql.js.map +1 -1
  20. package/dist/implode/escapeMongo.d.ts +1 -0
  21. package/dist/implode/escapeMongo.js +23 -0
  22. package/dist/implode/escapeMongo.js.map +1 -0
  23. package/dist/implode/index.d.ts +6 -0
  24. package/dist/implode/index.js +153 -0
  25. package/dist/implode/index.js.map +1 -0
  26. package/dist/implode/transform.d.ts +47 -0
  27. package/dist/implode/transform.js +73 -0
  28. package/dist/implode/transform.js.map +1 -0
  29. package/dist/index.js +3 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/integrations/create.js +1 -1
  32. package/dist/integrations/create.js.map +1 -1
  33. package/dist/integrations/describe.d.ts +5 -0
  34. package/dist/integrations/describe.js +51 -0
  35. package/dist/integrations/describe.js.map +1 -0
  36. package/dist/integrations/list.js +1 -1
  37. package/dist/integrations/list.js.map +1 -1
  38. package/dist/projects/describe.d.ts +5 -0
  39. package/dist/projects/describe.js +51 -0
  40. package/dist/projects/describe.js.map +1 -0
  41. package/dist/projects/index.d.ts +5 -0
  42. package/dist/projects/index.js +83 -0
  43. package/dist/projects/index.js.map +1 -0
  44. package/dist/push/index.js +49 -15
  45. package/dist/push/index.js.map +1 -1
  46. package/dist/repl/dispatch.d.ts +1 -1
  47. package/dist/repl/dispatch.js +2 -2
  48. package/dist/repl/dispatch.js.map +1 -1
  49. package/dist/repl/fetchUserAndIntegration.d.ts +10 -0
  50. package/dist/repl/fetchUserAndIntegration.js +73 -0
  51. package/dist/repl/fetchUserAndIntegration.js.map +1 -0
  52. package/dist/repl/help.js +6 -2
  53. package/dist/repl/help.js.map +1 -1
  54. package/dist/repl/index.d.ts +1 -1
  55. package/dist/repl/index.js +2 -1
  56. package/dist/repl/index.js.map +1 -1
  57. package/dist/run/index.d.ts +3 -0
  58. package/dist/run/index.js +1 -1
  59. package/dist/run/index.js.map +1 -1
  60. package/dist/status/index.js +1 -1
  61. package/dist/status/index.js.map +1 -1
  62. package/dist/utils/apiUrl.d.ts +1 -0
  63. package/dist/utils/apiUrl.js +7 -0
  64. package/dist/utils/apiUrl.js.map +1 -0
  65. package/dist/utils/callApi.d.ts +5 -0
  66. package/dist/utils/callApi.js +17 -0
  67. package/dist/utils/callApi.js.map +1 -0
  68. package/dist/utils/createIntegrationFromFile.d.ts +1 -1
  69. package/dist/utils/createIntegrationFromFile.js +3 -0
  70. package/dist/utils/createIntegrationFromFile.js.map +1 -1
  71. package/dist/utils/dispatch.d.ts +1 -1
  72. package/dist/utils/dispatch.js +2 -2
  73. package/dist/utils/dispatch.js.map +1 -1
  74. package/dist/utils/fetchAccount.d.ts +10 -0
  75. package/dist/utils/fetchAccount.js +60 -0
  76. package/dist/utils/fetchAccount.js.map +1 -0
  77. package/dist/utils/fetchLocalProject.d.ts +1 -0
  78. package/dist/utils/fetchLocalProject.js +12 -0
  79. package/dist/utils/fetchLocalProject.js.map +1 -0
  80. package/dist/utils/fetchUserAndIntegration.d.ts +9 -0
  81. package/dist/utils/fetchUserAndIntegration.js +48 -0
  82. package/dist/utils/fetchUserAndIntegration.js.map +1 -0
  83. package/dist/utils/graphqlError.d.ts +1 -1
  84. package/dist/utils/graphqlError.js +5 -3
  85. package/dist/utils/graphqlError.js.map +1 -1
  86. package/dist/utils/graphqlRequestClient.d.ts +10 -0
  87. package/dist/utils/graphqlRequestClient.js +20 -0
  88. package/dist/utils/graphqlRequestClient.js.map +1 -0
  89. package/dist/utils/parseJson.d.ts +1 -0
  90. package/dist/utils/parseJson.js +5 -0
  91. package/dist/utils/parseJson.js.map +1 -0
  92. package/dist/utils/resolveAccount.d.ts +2 -2
  93. package/dist/utils/resolveAccount.js +6 -8
  94. package/dist/utils/resolveAccount.js.map +1 -1
  95. package/dist/utils/saveProject.d.ts +8 -0
  96. package/dist/utils/saveProject.js +93 -0
  97. package/dist/utils/saveProject.js.map +1 -0
  98. package/dist/utils/session.d.ts +9 -0
  99. package/dist/utils/session.js +17 -0
  100. package/dist/utils/session.js.map +1 -0
  101. package/package.json +16 -15
@@ -0,0 +1,10 @@
1
+ import { type GraphQLRequestClient } from './graphqlClient.js';
2
+ export interface AccountResult {
3
+ account?: {
4
+ id: string;
5
+ name: string;
6
+ key: string;
7
+ };
8
+ error?: string;
9
+ }
10
+ export declare function fetchAccount(accountId: string, apiToken?: string, client?: GraphQLRequestClient, baseUrl?: string): Promise<AccountResult>;
@@ -0,0 +1,60 @@
1
+ import { gql } from 'graphql-tag';
2
+ import { createGraphQLClient, } from './graphqlClient.js';
3
+ const AccountByIdQueryDocument = gql `
4
+ query AccountById($id: ID!) {
5
+ account(id: $id) {
6
+ id
7
+ name
8
+ key
9
+ }
10
+ }
11
+ `;
12
+ const AccountByKeyQueryDocument = gql `
13
+ query AccountByKey($key: ID!) {
14
+ accountByKey(key: $key) {
15
+ id
16
+ name
17
+ key
18
+ }
19
+ }
20
+ `;
21
+ function isNotFoundError(error) {
22
+ const errorWithResponse = error;
23
+ if (errorWithResponse.response?.errors) {
24
+ return errorWithResponse.response.errors.some((err) => err.extensions?.code === 'NOT_FOUND');
25
+ }
26
+ return error?.message?.includes('NOT_FOUND');
27
+ }
28
+ export async function fetchAccount(accountId, apiToken, client, baseUrl) {
29
+ const graphqlClient = client ?? createGraphQLClient(apiToken, baseUrl);
30
+ try {
31
+ const idResult = await graphqlClient.request(AccountByIdQueryDocument, { id: accountId });
32
+ if (idResult.error && !isNotFoundError(idResult.error)) {
33
+ return {
34
+ error: `Could not fetch account: ${idResult.error.message}`,
35
+ };
36
+ }
37
+ if (idResult.data?.account) {
38
+ return { account: idResult.data.account };
39
+ }
40
+ const keyResult = await graphqlClient.request(AccountByKeyQueryDocument, { key: accountId });
41
+ if (keyResult.error && !isNotFoundError(keyResult.error)) {
42
+ return {
43
+ error: `Could not fetch account: ${keyResult.error.message}`,
44
+ };
45
+ }
46
+ if (keyResult.data?.accountByKey) {
47
+ return { account: keyResult.data.accountByKey };
48
+ }
49
+ return {
50
+ error: `Account "${accountId}" not found`,
51
+ };
52
+ }
53
+ catch (error) {
54
+ const errorMessage = error instanceof Error ? error.message : String(error);
55
+ return {
56
+ error: `Could not fetch account: ${errorMessage}`,
57
+ };
58
+ }
59
+ }
60
+ //# sourceMappingURL=fetchAccount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchAccount.js","sourceRoot":"","sources":["../../src/utils/fetchAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAA;AAM3B,MAAM,wBAAwB,GAAG,GAAG,CAAA;;;;;;;;CAQnC,CAAA;AAED,MAAM,yBAAyB,GAAG,GAAG,CAAA;;;;;;;;CAQpC,CAAA;AAWD,SAAS,eAAe,CAAC,KAAY;IAEnC,MAAM,iBAAiB,GAAG,KAIzB,CAAA;IAED,IAAI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAC3C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,WAAW,CAC9C,CAAA;IACH,CAAC;IAGD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,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,SAAS,EAAE,CAClB,CAAA;QAGD,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,OAAO;gBACL,KAAK,EAAE,4BAA4B,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;aAC5D,CAAA;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3B,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;QAC3C,CAAC;QAGD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,CAC3C,yBAAyB,EACzB,EAAE,GAAG,EAAE,SAAS,EAAE,CACnB,CAAA;QAGD,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO;gBACL,KAAK,EAAE,4BAA4B,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;aAC7D,CAAA;QACH,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAA;QACjD,CAAC;QAGD,OAAO;YACL,KAAK,EAAE,YAAY,SAAS,aAAa;SAC1C,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,KAAK,EAAE,4BAA4B,YAAY,EAAE;SAClD,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function fetchIdFromIndex(): any;
@@ -0,0 +1,12 @@
1
+ import fs from 'node:fs';
2
+ export function fetchIdFromIndex() {
3
+ try {
4
+ const content = fs.readFileSync('index.json', 'utf8');
5
+ const index = JSON.parse(content);
6
+ return index.id;
7
+ }
8
+ catch {
9
+ return undefined;
10
+ }
11
+ }
12
+ //# sourceMappingURL=fetchLocalProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchLocalProject.js","sourceRoot":"","sources":["../../src/utils/fetchLocalProject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjC,OAAO,KAAK,CAAC,EAAE,CAAA;IACjB,CAAC;IAAC,MAAM,CAAC;QAEP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type GraphQLRequestClient } from './graphqlClient.js';
2
+ export declare const SessionQueryDocument: import("graphql/index.js").DocumentNode;
3
+ export interface UserAndIntegrationResult {
4
+ integrationId: string;
5
+ integrationName?: string;
6
+ userName?: string;
7
+ error?: string;
8
+ }
9
+ export declare function fetchUserAndIntegration(identifier: string, accountId: string | undefined, apiToken?: string, client?: GraphQLRequestClient, baseUrl?: string): Promise<UserAndIntegrationResult>;
@@ -0,0 +1,48 @@
1
+ import { gql } from 'graphql-tag';
2
+ import { createGraphQLClient, } from './graphqlClient.js';
3
+ import { resolveIntegration } from './resolveIntegration.js';
4
+ export const SessionQueryDocument = gql `
5
+ query Session {
6
+ session {
7
+ user {
8
+ id
9
+ name
10
+ }
11
+ }
12
+ }
13
+ `;
14
+ export async function fetchUserAndIntegration(identifier, accountId, apiToken, client, baseUrl) {
15
+ const graphqlClient = client ?? createGraphQLClient(apiToken, baseUrl);
16
+ const integrationResult = await resolveIntegration(identifier, accountId, apiToken, client, baseUrl);
17
+ if (integrationResult.error) {
18
+ return {
19
+ integrationId: '',
20
+ error: integrationResult.error,
21
+ };
22
+ }
23
+ try {
24
+ const sessionResult = await graphqlClient.request(SessionQueryDocument, {});
25
+ if (sessionResult.error) {
26
+ const errorMessage = sessionResult.error.message || String(sessionResult.error);
27
+ return {
28
+ integrationId: integrationResult.integrationId,
29
+ integrationName: integrationResult.integrationName,
30
+ error: errorMessage,
31
+ };
32
+ }
33
+ return {
34
+ integrationId: integrationResult.integrationId,
35
+ integrationName: integrationResult.integrationName,
36
+ userName: sessionResult.data?.session?.user?.name,
37
+ };
38
+ }
39
+ catch (error) {
40
+ const errorMessage = error instanceof Error ? error.message : String(error);
41
+ return {
42
+ integrationId: integrationResult.integrationId,
43
+ integrationName: integrationResult.integrationName,
44
+ error: `Could not fetch session: ${errorMessage}`,
45
+ };
46
+ }
47
+ }
48
+ //# sourceMappingURL=fetchUserAndIntegration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchUserAndIntegration.js","sourceRoot":"","sources":["../../src/utils/fetchUserAndIntegration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EACL,mBAAmB,GAEpB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAA;;;;;;;;;CAStC,CAAA;AASD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,UAAkB,EAClB,SAA6B,EAC7B,QAAiB,EACjB,MAA6B,EAC7B,OAAgB;IAEhB,MAAM,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAGtE,MAAM,iBAAiB,GAAG,MAAM,kBAAkB,CAChD,UAAU,EACV,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,CACR,CAAA;IAGD,IAAI,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO;YACL,aAAa,EAAE,EAAE;YACjB,KAAK,EAAE,iBAAiB,CAAC,KAAK;SAC/B,CAAA;IACH,CAAC;IAGD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,OAAO,CAC/C,oBAAoB,EACpB,EAAE,CACH,CAAA;QAGD,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM,YAAY,GAChB,aAAa,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;YAC5D,OAAO;gBACL,aAAa,EAAE,iBAAiB,CAAC,aAAa;gBAC9C,eAAe,EAAE,iBAAiB,CAAC,eAAe;gBAClD,KAAK,EAAE,YAAY;aACpB,CAAA;QACH,CAAC;QAED,OAAO;YACL,aAAa,EAAE,iBAAiB,CAAC,aAAa;YAC9C,eAAe,EAAE,iBAAiB,CAAC,eAAe;YAClD,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI;SAClD,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,aAAa,EAAE,iBAAiB,CAAC,aAAa;YAC9C,eAAe,EAAE,iBAAiB,CAAC,eAAe;YAClD,KAAK,EAAE,4BAA4B,YAAY,EAAE;SAClD,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export declare function isNotFoundError(error: Error): boolean;
2
- export declare function handleGraphQLError(error: Error | undefined, log: (message: string) => void): void;
2
+ export declare function handleGraphQLError(error: Error | string | undefined, log: (message: string) => void): void;
@@ -9,12 +9,14 @@ export function isNotFoundError(error) {
9
9
  export function handleGraphQLError(error, log) {
10
10
  if (!error)
11
11
  return;
12
- const isAuthError = error.message.includes('Authentication required') ||
13
- error.message.includes('Not authenticated');
12
+ const message = typeof error === 'string' ? error : error.message;
13
+ const isAuthError = message.includes('Authentication required') ||
14
+ message.includes('Not authenticated') ||
15
+ message.includes('Unauthorized');
14
16
  if (isAuthError) {
15
17
  log(chalk.red(`Not logged in. Run ${chalk.bold('great login')}.`));
16
18
  return;
17
19
  }
18
- log(chalk.red(error.message));
20
+ log(chalk.red(message));
19
21
  }
20
22
  //# sourceMappingURL=graphqlError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphqlError.js","sourceRoot":"","sources":["../../src/utils/graphqlError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,MAAM,UAAU,eAAe,CAAC,KAAY;IAE1C,MAAM,iBAAiB,GAAG,KAIzB,CAAA;IAED,IAAI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAC3C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,WAAW,CAC9C,CAAA;IACH,CAAC;IAGD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC9C,CAAC;AAKD,MAAM,UAAU,kBAAkB,CAChC,KAAwB,EACxB,GAA8B;IAE9B,IAAI,CAAC,KAAK;QAAE,OAAM;IAElB,MAAM,WAAW,GACf,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACjD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAA;IAC7C,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IAGD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;AAC/B,CAAC"}
1
+ {"version":3,"file":"graphqlError.js","sourceRoot":"","sources":["../../src/utils/graphqlError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,MAAM,UAAU,eAAe,CAAC,KAAY;IAE1C,MAAM,iBAAiB,GAAG,KAIzB,CAAA;IAED,IAAI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAC3C,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,WAAW,CAC9C,CAAA;IACH,CAAC;IAGD,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;AAC9C,CAAC;AAKD,MAAM,UAAU,kBAAkB,CAChC,KAAiC,EACjC,GAA8B;IAE9B,IAAI,CAAC,KAAK;QAAE,OAAM;IAElB,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAA;IACjE,MAAM,WAAW,GACf,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC3C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IAClC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAA;QAClE,OAAM;IACR,CAAC;IAGD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;AACzB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { RequestDocument, Variables } from 'graphql-request';
2
+ interface RequestResult<T> {
3
+ data?: T;
4
+ error?: Error;
5
+ }
6
+ export interface GraphQLRequestClient {
7
+ request: <T, V extends Variables = Variables>(document: RequestDocument, variables: V) => Promise<RequestResult<T>>;
8
+ }
9
+ export declare function createGraphQLRequestClient(token?: string): GraphQLRequestClient;
10
+ export {};
@@ -0,0 +1,20 @@
1
+ import { GraphQLClient } from 'graphql-request';
2
+ import { getApiBaseUrl } from './config.js';
3
+ export function createGraphQLRequestClient(token) {
4
+ const graphQLUrl = `${getApiBaseUrl()}/graphql`;
5
+ const client = new GraphQLClient(graphQLUrl, {
6
+ headers: token ? { Authorization: `Bearer ${token}` } : {},
7
+ });
8
+ return {
9
+ request: async (document, variables) => {
10
+ try {
11
+ const data = await client.request(document, variables);
12
+ return { data };
13
+ }
14
+ catch (error) {
15
+ return { error: error };
16
+ }
17
+ },
18
+ };
19
+ }
20
+ //# sourceMappingURL=graphqlRequestClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphqlRequestClient.js","sourceRoot":"","sources":["../../src/utils/graphqlRequestClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAe3C,MAAM,UAAU,0BAA0B,CACxC,KAAc;IAEd,MAAM,UAAU,GAAG,GAAG,aAAa,EAAE,UAAU,CAAA;IAE/C,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE;QAC3C,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;KAC3D,CAAC,CAAA;IAEF,OAAO;QACL,OAAO,EAAE,KAAK,EACZ,QAAyB,EACzB,SAAY,EACe,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAI,QAAQ,EAAE,SAAS,CAAC,CAAA;gBACzD,OAAO,EAAE,IAAI,EAAE,CAAA;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,CAAA;YAClC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export default function parseJson(text: string): unknown;
@@ -0,0 +1,5 @@
1
+ import stripJsonComments from 'strip-json-comments';
2
+ export default function parseJson(text) {
3
+ return JSON.parse(stripJsonComments(text, { trailingCommas: true }));
4
+ }
5
+ //# sourceMappingURL=parseJson.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseJson.js","sourceRoot":"","sources":["../../src/utils/parseJson.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AAMnD,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,IAAY;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACtE,CAAC"}
@@ -7,11 +7,11 @@ export interface AccountResult {
7
7
  name: string;
8
8
  key: string;
9
9
  };
10
- error?: string;
10
+ error?: Error | string;
11
11
  }
12
12
  export interface ResolveAccountResult {
13
13
  accountId?: string;
14
- error?: string;
14
+ error?: Error | string;
15
15
  source?: 'flag' | 'config';
16
16
  }
17
17
  export declare function resolveAccountId(options: {
@@ -25,18 +25,14 @@ async function fetchAccount(accountId, apiToken, client, baseUrl) {
25
25
  try {
26
26
  const idResult = await graphqlClient.request(AccountByIdQueryDocument, { id: accountId });
27
27
  if (idResult.error && !isNotFoundError(idResult.error)) {
28
- return {
29
- error: `Could not fetch account: ${idResult.error.message}`,
30
- };
28
+ return { error: idResult.error };
31
29
  }
32
30
  if (idResult.data?.account) {
33
31
  return { account: idResult.data.account };
34
32
  }
35
33
  const keyResult = await graphqlClient.request(AccountByKeyQueryDocument, { key: accountId });
36
34
  if (keyResult.error && !isNotFoundError(keyResult.error)) {
37
- return {
38
- error: `Could not fetch account: ${keyResult.error.message}`,
39
- };
35
+ return { error: keyResult.error };
40
36
  }
41
37
  if (keyResult.data?.accountByKey) {
42
38
  return { account: keyResult.data.accountByKey };
@@ -46,9 +42,8 @@ async function fetchAccount(accountId, apiToken, client, baseUrl) {
46
42
  };
47
43
  }
48
44
  catch (error) {
49
- const errorMessage = error instanceof Error ? error.message : String(error);
50
45
  return {
51
- error: `Could not fetch account: ${errorMessage}`,
46
+ error: error instanceof Error ? error : new Error(String(error)),
52
47
  };
53
48
  }
54
49
  }
@@ -64,6 +59,9 @@ export async function resolveAccountId(options, apiToken, client, config) {
64
59
  if (defaultAccount) {
65
60
  const result = await fetchAccount(defaultAccount, apiToken, client);
66
61
  if (result.error) {
62
+ if (result.error instanceof Error) {
63
+ return { error: result.error };
64
+ }
67
65
  return {
68
66
  error: `Default account '${defaultAccount}' not found. Update with: great config set account <id>, or unset with: great config unset account`,
69
67
  };
@@ -1 +1 @@
1
- {"version":3,"file":"resolveAccount.js","sourceRoot":"","sources":["../../src/utils/resolveAccount.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveAccount.js","sourceRoot":"","sources":["../../src/utils/resolveAccount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import fs from 'node:fs';
2
+ import type { IntegrationDefinitionQuery } from '../generated/graphql.js';
3
+ export type FileSystem = Pick<typeof fs, 'writeFileSync' | 'mkdirSync' | 'existsSync'>;
4
+ type Integration = NonNullable<IntegrationDefinitionQuery['integration']>;
5
+ type ActiveVersion = NonNullable<Integration['active']>;
6
+ type IntegrationMeta = Pick<Integration, 'id' | 'name' | 'description' | 'status'>;
7
+ export default function saveProject(integration: IntegrationMeta, active: ActiveVersion, root?: string, fsImpl?: FileSystem): void;
8
+ export {};
@@ -0,0 +1,93 @@
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
+ fsImpl.writeFileSync(path, JSON.stringify(content, undefined, 2));
19
+ };
20
+ }
21
+ function transformElement(element) {
22
+ return {
23
+ __id: element.id,
24
+ __key: element.key,
25
+ __timestamp: element.createdAt,
26
+ ...element.content,
27
+ };
28
+ }
29
+ export default function saveProject(integration, active, root, fsImpl = fs) {
30
+ const { id, name, description, status } = integration;
31
+ const { timestamp, schemas, services, mutations, auths, dictionaries, jobs, values, } = active;
32
+ const rootFolder = root ? normalizeFolderName(root) : undefined;
33
+ const createFolder = createFolderIfMissing(rootFolder, fsImpl);
34
+ const writeFile = writeJsonFile(rootFolder, fsImpl);
35
+ if (rootFolder) {
36
+ createFolderIfMissing(undefined, fsImpl)(rootFolder);
37
+ }
38
+ const index = {
39
+ __id: id,
40
+ __timestamp: timestamp,
41
+ name,
42
+ description,
43
+ status,
44
+ flags: undefined,
45
+ identConfig: undefined,
46
+ nonvalues: undefined,
47
+ queueService: undefined,
48
+ };
49
+ writeFile(null, 'index', index);
50
+ createFolder('schemas');
51
+ if (schemas) {
52
+ schemas.forEach((schema) => {
53
+ writeFile('schemas', schema.key, transformElement(schema));
54
+ });
55
+ }
56
+ createFolder('services');
57
+ if (services) {
58
+ services.forEach((service) => {
59
+ writeFile('services', service.key, transformElement(service));
60
+ });
61
+ }
62
+ createFolder('mutations');
63
+ if (mutations) {
64
+ mutations.forEach((mutation) => {
65
+ writeFile('mutations', mutation.key, transformElement(mutation));
66
+ });
67
+ }
68
+ createFolder('auths');
69
+ if (auths) {
70
+ auths.forEach((auth) => {
71
+ writeFile('auths', auth.key, transformElement(auth));
72
+ });
73
+ }
74
+ createFolder('dictionaries');
75
+ if (dictionaries) {
76
+ dictionaries.forEach((dictionary) => {
77
+ writeFile('dictionaries', dictionary.key, transformElement(dictionary));
78
+ });
79
+ }
80
+ createFolder('jobs');
81
+ if (jobs) {
82
+ jobs.forEach((job) => {
83
+ writeFile('jobs', job.key, transformElement(job));
84
+ });
85
+ }
86
+ createFolder('values');
87
+ if (values) {
88
+ values.forEach((value) => {
89
+ writeFile('values', value.key, transformElement(value));
90
+ });
91
+ }
92
+ }
93
+ //# sourceMappingURL=saveProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveProject.js","sourceRoot":"","sources":["../../src/utils/saveProject.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { SessionQuery } from '../generated/graphql.js';
2
+ import type { Client } from 'urql';
3
+ export declare const SessionQueryDocument: import("graphql/index.js").DocumentNode;
4
+ export declare function fetchUserSession(apiToken?: string, client?: Client): Promise<{
5
+ data?: SessionQuery;
6
+ error?: {
7
+ message: string;
8
+ };
9
+ }>;
@@ -0,0 +1,17 @@
1
+ import { gql } from 'graphql-tag';
2
+ import { createGraphQLClient } from './graphqlClient.js';
3
+ export const SessionQueryDocument = gql `
4
+ query Session {
5
+ session {
6
+ user {
7
+ id
8
+ name
9
+ }
10
+ }
11
+ }
12
+ `;
13
+ export async function fetchUserSession(apiToken, client) {
14
+ const graphqlClient = client ?? createGraphQLClient(apiToken);
15
+ return await graphqlClient.query(SessionQueryDocument, {});
16
+ }
17
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAGjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAA;;;;;;;;;CAStC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAiB,EACjB,MAAe;IAKf,MAAM,aAAa,GAAG,MAAM,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC7D,OAAO,MAAM,aAAa,CAAC,KAAK,CAAe,oBAAoB,EAAE,EAAE,CAAC,CAAA;AAC1E,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "great",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "A CLI for Integreat",
5
5
  "author": "Kjell-Morten Bratsberg Thorsen <kjellmorten@integreat.io>",
6
6
  "license": "UNLICENSED",
@@ -18,8 +18,8 @@
18
18
  "great": "dist/index.js"
19
19
  },
20
20
  "scripts": {
21
- "test": "node --import tsx --no-deprecation --test --enable-source-maps --experimental-test-coverage --test-reporter node-test-reporter \"src/**/*.test.ts\"",
22
- "test:ci": "node --import tsx --no-deprecation --test --enable-source-maps --experimental-test-coverage --test-reporter spec \"src/**/*.test.ts\"",
21
+ "test": "node --import tsx --no-deprecation --test --enable-source-maps --test-reporter node-test-reporter \"src/**/*.test.ts\"",
22
+ "test:ci": "node --import tsx --no-deprecation --test --enable-source-maps --test-reporter spec \"src/**/*.test.ts\"",
23
23
  "test:watch": "npm run dev",
24
24
  "dev": "node --import tsx --no-deprecation --test --enable-source-maps --test-reporter node-test-reporter --watch \"src/**/*.test.ts\" || exit 0",
25
25
  "build": "tsc",
@@ -39,31 +39,32 @@
39
39
  },
40
40
  "homepage": "https://github.com/integreat-io/great#readme",
41
41
  "dependencies": {
42
- "@inquirer/prompts": "^8.2.1",
42
+ "@inquirer/prompts": "^8.3.2",
43
43
  "chalk": "^5.6.2",
44
44
  "change-case": "^5.4.4",
45
- "clipboardy": "^5.3.0",
45
+ "clipboardy": "^5.3.1",
46
46
  "columnify": "^1.6.0",
47
47
  "commander": "^14.0.3",
48
48
  "conf": "^15.1.0",
49
- "graphql": "^16.12.0",
49
+ "graphql": "^16.13.2",
50
50
  "graphql-request": "^7.4.0",
51
51
  "graphql-tag": "^2.12.6",
52
52
  "ky": "^1.14.3",
53
53
  "nanospinner": "^1.2.2",
54
- "open": "^11.0.0"
54
+ "open": "^11.0.0",
55
+ "strip-json-comments": "^5.0.3"
55
56
  },
56
57
  "devDependencies": {
57
- "@graphql-codegen/cli": "^6.1.1",
58
- "@graphql-codegen/typescript": "^5.0.8",
59
- "@graphql-codegen/typescript-operations": "^5.0.8",
60
- "@graphql-codegen/typescript-urql": "^4.0.1",
58
+ "@graphql-codegen/cli": "^6.2.1",
59
+ "@graphql-codegen/typescript": "^5.0.9",
60
+ "@graphql-codegen/typescript-operations": "^5.0.9",
61
+ "@graphql-codegen/typescript-urql": "^5.0.0",
61
62
  "@integreat/ts-dev-setup": "^8.2.0",
62
63
  "@types/columnify": "^1.5.4",
63
- "@types/node": "^25.3.0",
64
+ "@types/node": "^25.5.0",
64
65
  "@types/sinon": "^21.0.0",
65
- "integreat": "^1.6.4",
66
- "sinon": "^21.0.1",
67
- "strip-ansi": "^7.1.2"
66
+ "integreat": "^1.6.5",
67
+ "sinon": "^21.0.3",
68
+ "strip-ansi": "^7.2.0"
68
69
  }
69
70
  }