vscode-apollo 2.5.6 → 2.6.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 (178) hide show
  1. package/.circleci/config.yml +17 -0
  2. package/.github/workflows/E2E.yml +3 -2
  3. package/.github/workflows/build-prs.yml +2 -1
  4. package/.prettierignore +3 -0
  5. package/.semgrepignore +2 -0
  6. package/.vscode/settings.json +7 -2
  7. package/CHANGELOG.md +6 -0
  8. package/apollo.connectors.mapping.configuration.json +10 -0
  9. package/package.json +37 -3
  10. package/sampleWorkspace/connectors-community/.github/ISSUE_TEMPLATE/connector-bug-report.md +36 -0
  11. package/sampleWorkspace/connectors-community/.github/ISSUE_TEMPLATE/new-connector.md +10 -0
  12. package/sampleWorkspace/connectors-community/.github/renovate.json5 +3 -0
  13. package/sampleWorkspace/connectors-community/.vscode/extensions.json +3 -0
  14. package/sampleWorkspace/connectors-community/.vscode/settings.json +13 -0
  15. package/sampleWorkspace/connectors-community/.vscode/tasks.json +10 -0
  16. package/sampleWorkspace/connectors-community/README.md +108 -0
  17. package/sampleWorkspace/connectors-community/apollo.config.json +5 -0
  18. package/sampleWorkspace/connectors-community/connectors/.template/Dockerfile +5 -0
  19. package/sampleWorkspace/connectors-community/connectors/.template/README +46 -0
  20. package/sampleWorkspace/connectors-community/connectors/.template/connector.graphql +31 -0
  21. package/sampleWorkspace/connectors-community/connectors/.template/router.yaml +18 -0
  22. package/sampleWorkspace/connectors-community/connectors/.template/supergraph.yaml +6 -0
  23. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/README +12 -0
  24. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/albums.graphql +48 -0
  25. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/comments.graphql +54 -0
  26. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/photos.graphql +54 -0
  27. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/posts.graphql +51 -0
  28. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/supergraph.yaml +26 -0
  29. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/todos.graphql +51 -0
  30. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/users.graphql +80 -0
  31. package/sampleWorkspace/connectors-community/connectors/TM-Forum/README.md +9 -0
  32. package/sampleWorkspace/connectors-community/connectors/TM-Forum/router.yaml +18 -0
  33. package/sampleWorkspace/connectors-community/connectors/TM-Forum/supergraph.yaml +6 -0
  34. package/sampleWorkspace/connectors-community/connectors/TM-Forum/tmf622-ProductOrdering.graphql +296 -0
  35. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/README.md +7 -0
  36. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/addresses.graphql +30 -0
  37. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/customer.graphql +77 -0
  38. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/products.graphql +70 -0
  39. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/router.yaml +24 -0
  40. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/supergraph.yaml +14 -0
  41. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/swagger.json +69226 -0
  42. package/sampleWorkspace/connectors-community/connectors/anthropic/Dockerfile +5 -0
  43. package/sampleWorkspace/connectors-community/connectors/anthropic/README +61 -0
  44. package/sampleWorkspace/connectors-community/connectors/anthropic/messages.graphql +258 -0
  45. package/sampleWorkspace/connectors-community/connectors/anthropic/router.yaml +18 -0
  46. package/sampleWorkspace/connectors-community/connectors/anthropic/supergraph.yaml +6 -0
  47. package/sampleWorkspace/connectors-community/connectors/apollo-ecomm-simple/README +3 -0
  48. package/sampleWorkspace/connectors-community/connectors/apollo-ecomm-simple/connector.graphql +38 -0
  49. package/sampleWorkspace/connectors-community/connectors/apollo-ecomm-simple/router.yaml +18 -0
  50. package/sampleWorkspace/connectors-community/connectors/apollo-ecomm-simple/supergraph.yaml +6 -0
  51. package/sampleWorkspace/connectors-community/connectors/apple/README +36 -0
  52. package/sampleWorkspace/connectors-community/connectors/apple/app-store-connect.graphql +100 -0
  53. package/sampleWorkspace/connectors-community/connectors/apple/router.yaml +18 -0
  54. package/sampleWorkspace/connectors-community/connectors/apple/supergraph.yaml +6 -0
  55. package/sampleWorkspace/connectors-community/connectors/aws/README +125 -0
  56. package/sampleWorkspace/connectors-community/connectors/aws/dynamodb.graphql +130 -0
  57. package/sampleWorkspace/connectors-community/connectors/aws/json-responses/product-price.json +10 -0
  58. package/sampleWorkspace/connectors-community/connectors/aws/json-responses/products.json +53 -0
  59. package/sampleWorkspace/connectors-community/connectors/aws/lambda.graphql +179 -0
  60. package/sampleWorkspace/connectors-community/connectors/aws/router.yaml +54 -0
  61. package/sampleWorkspace/connectors-community/connectors/aws/supergraph.yaml +10 -0
  62. package/sampleWorkspace/connectors-community/connectors/bored/README.md +35 -0
  63. package/sampleWorkspace/connectors-community/connectors/bored/bored.graphql +87 -0
  64. package/sampleWorkspace/connectors-community/connectors/bored/supergraph.yaml +6 -0
  65. package/sampleWorkspace/connectors-community/connectors/common-room/README.md +23 -0
  66. package/sampleWorkspace/connectors-community/connectors/common-room/contacts.graphql +141 -0
  67. package/sampleWorkspace/connectors-community/connectors/common-room/json-responses/members_email_.json +61 -0
  68. package/sampleWorkspace/connectors-community/connectors/common-room/router.yaml +18 -0
  69. package/sampleWorkspace/connectors-community/connectors/common-room/supergraph.yaml +6 -0
  70. package/sampleWorkspace/connectors-community/connectors/googlemaps/README.md +58 -0
  71. package/sampleWorkspace/connectors-community/connectors/googlemaps/distancematrix.graphql +155 -0
  72. package/sampleWorkspace/connectors-community/connectors/googlemaps/places-legacy.graphql +117 -0
  73. package/sampleWorkspace/connectors-community/connectors/googlemaps/places.graphql +399 -0
  74. package/sampleWorkspace/connectors-community/connectors/googlemaps/router.yaml +18 -0
  75. package/sampleWorkspace/connectors-community/connectors/googlemaps/supergraph.yaml +18 -0
  76. package/sampleWorkspace/connectors-community/connectors/googlemaps/timezone.graphql +64 -0
  77. package/sampleWorkspace/connectors-community/connectors/heygen/README +105 -0
  78. package/sampleWorkspace/connectors-community/connectors/heygen/avatars.graphql +79 -0
  79. package/sampleWorkspace/connectors-community/connectors/heygen/photo-avatars.graphql +454 -0
  80. package/sampleWorkspace/connectors-community/connectors/heygen/router.yaml +21 -0
  81. package/sampleWorkspace/connectors-community/connectors/heygen/supergraph.yaml +10 -0
  82. package/sampleWorkspace/connectors-community/connectors/jira/README +36 -0
  83. package/sampleWorkspace/connectors-community/connectors/jira/connector.graphql +197 -0
  84. package/sampleWorkspace/connectors-community/connectors/jira/router.yaml +18 -0
  85. package/sampleWorkspace/connectors-community/connectors/jira/supergraph.yaml +6 -0
  86. package/sampleWorkspace/connectors-community/connectors/museums/README.md +40 -0
  87. package/sampleWorkspace/connectors-community/connectors/museums/chicagoArt.graphql +150 -0
  88. package/sampleWorkspace/connectors-community/connectors/museums/met.graphql +119 -0
  89. package/sampleWorkspace/connectors-community/connectors/museums/supergraph.yaml +10 -0
  90. package/sampleWorkspace/connectors-community/connectors/nws/README.md +45 -0
  91. package/sampleWorkspace/connectors-community/connectors/nws/alerts.graphql +598 -0
  92. package/sampleWorkspace/connectors-community/connectors/nws/supergraph.yaml +6 -0
  93. package/sampleWorkspace/connectors-community/connectors/odata/README +18 -0
  94. package/sampleWorkspace/connectors-community/connectors/odata/connector.graphql +171 -0
  95. package/sampleWorkspace/connectors-community/connectors/odata/router.yaml +18 -0
  96. package/sampleWorkspace/connectors-community/connectors/odata/supergraph.yaml +6 -0
  97. package/sampleWorkspace/connectors-community/connectors/openai/README.md +61 -0
  98. package/sampleWorkspace/connectors-community/connectors/openai/assistants.graphql +285 -0
  99. package/sampleWorkspace/connectors-community/connectors/openai/chat-completions.graphql +169 -0
  100. package/sampleWorkspace/connectors-community/connectors/openai/models.graphql +47 -0
  101. package/sampleWorkspace/connectors-community/connectors/openai/router.yaml +24 -0
  102. package/sampleWorkspace/connectors-community/connectors/openai/supergraph.yaml +14 -0
  103. package/sampleWorkspace/connectors-community/connectors/pokeapi/README +45 -0
  104. package/sampleWorkspace/connectors-community/connectors/pokeapi/games.graphql +70 -0
  105. package/sampleWorkspace/connectors-community/connectors/pokeapi/locations.graphql +127 -0
  106. package/sampleWorkspace/connectors-community/connectors/pokeapi/moves.graphql +107 -0
  107. package/sampleWorkspace/connectors-community/connectors/pokeapi/pokemon.graphql +539 -0
  108. package/sampleWorkspace/connectors-community/connectors/pokeapi/router.yaml +18 -0
  109. package/sampleWorkspace/connectors-community/connectors/pokeapi/supergraph.yaml +18 -0
  110. package/sampleWorkspace/connectors-community/connectors/strapi/README.md +75 -0
  111. package/sampleWorkspace/connectors-community/connectors/strapi/router.yaml +19 -0
  112. package/sampleWorkspace/connectors-community/connectors/strapi/supergraph.yaml +6 -0
  113. package/sampleWorkspace/connectors-community/connectors/strapi/users.graphql +227 -0
  114. package/sampleWorkspace/connectors-community/connectors/stripe/README.md +83 -0
  115. package/sampleWorkspace/connectors-community/connectors/stripe/checkout.graphql +112 -0
  116. package/sampleWorkspace/connectors-community/connectors/stripe/core-resources.graphql +868 -0
  117. package/sampleWorkspace/connectors-community/connectors/stripe/payment-methods.graphql +526 -0
  118. package/sampleWorkspace/connectors-community/connectors/stripe/products.graphql +162 -0
  119. package/sampleWorkspace/connectors-community/connectors/stripe/router.yaml +26 -0
  120. package/sampleWorkspace/connectors-community/connectors/stripe/supergraph.yaml +18 -0
  121. package/sampleWorkspace/connectors-community/connectors/supabase/README.md +80 -0
  122. package/sampleWorkspace/connectors-community/connectors/supabase/router.yaml +5 -0
  123. package/sampleWorkspace/connectors-community/connectors/supabase/supabase.graphql +143 -0
  124. package/sampleWorkspace/connectors-community/connectors/supabase/supergraph.yaml +6 -0
  125. package/sampleWorkspace/connectors-community/connectors/thespacedevs/README +46 -0
  126. package/sampleWorkspace/connectors-community/connectors/thespacedevs/agencies.graphql +193 -0
  127. package/sampleWorkspace/connectors-community/connectors/thespacedevs/api-throttle.graphql +33 -0
  128. package/sampleWorkspace/connectors-community/connectors/thespacedevs/astronauts.graphql +237 -0
  129. package/sampleWorkspace/connectors-community/connectors/thespacedevs/celestial-bodies.graphql +131 -0
  130. package/sampleWorkspace/connectors-community/connectors/thespacedevs/docking-events.graphql +3460 -0
  131. package/sampleWorkspace/connectors-community/connectors/thespacedevs/launches.graphql +1156 -0
  132. package/sampleWorkspace/connectors-community/connectors/thespacedevs/supergraph.yaml +77 -0
  133. package/sampleWorkspace/connectors-community/connectors/tint/README +35 -0
  134. package/sampleWorkspace/connectors-community/connectors/tint/accounts.graphql +69 -0
  135. package/sampleWorkspace/connectors-community/connectors/tint/router.yaml +21 -0
  136. package/sampleWorkspace/connectors-community/connectors/tint/social-feeds.graphql +62 -0
  137. package/sampleWorkspace/connectors-community/connectors/tint/supergraph.yaml +10 -0
  138. package/sampleWorkspace/connectors-community/connectors/todoist/README.md +48 -0
  139. package/sampleWorkspace/connectors-community/connectors/todoist/supergraph.yaml +6 -0
  140. package/sampleWorkspace/connectors-community/connectors/todoist/todoist.graphql +381 -0
  141. package/sampleWorkspace/connectors-community/connectors/trimblemaps/README +99 -0
  142. package/sampleWorkspace/connectors-community/connectors/trimblemaps/connector.graphql +66 -0
  143. package/sampleWorkspace/connectors-community/connectors/trimblemaps/router.yaml +18 -0
  144. package/sampleWorkspace/connectors-community/connectors/trimblemaps/supergraph.yaml +6 -0
  145. package/sampleWorkspace/connectors-community/connectors/twilio/README.md +44 -0
  146. package/sampleWorkspace/connectors-community/connectors/twilio/messages.graphql +107 -0
  147. package/sampleWorkspace/connectors-community/connectors/twilio/router.yaml +6 -0
  148. package/sampleWorkspace/connectors-community/connectors/twilio/supergraph.yaml +6 -0
  149. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes/README.md +44 -0
  150. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes/earthquakes.graphql +235 -0
  151. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes/supergraph.yaml +6 -0
  152. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes-nominatum/README.md +44 -0
  153. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes-nominatum/earthquake-simple.graphql +87 -0
  154. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes-nominatum/router.yaml +3 -0
  155. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes-nominatum/supergraph.yaml +6 -0
  156. package/sampleWorkspace/connectors-community/connectors/usps/README +36 -0
  157. package/sampleWorkspace/connectors-community/connectors/usps/router.yaml +18 -0
  158. package/sampleWorkspace/connectors-community/connectors/usps/supergraph.yaml +6 -0
  159. package/sampleWorkspace/connectors-community/connectors/usps/tracking.graphql +118 -0
  160. package/sampleWorkspace/connectors-community/connectors/zendesk/README +36 -0
  161. package/sampleWorkspace/connectors-community/connectors/zendesk/connector.graphql +98 -0
  162. package/sampleWorkspace/connectors-community/connectors/zendesk/router.yaml +18 -0
  163. package/sampleWorkspace/connectors-community/connectors/zendesk/supergraph.yaml +6 -0
  164. package/sampleWorkspace/connectors-community/file-new/index.js +520 -0
  165. package/sampleWorkspace/connectors-community/package-lock.json +119 -0
  166. package/sampleWorkspace/connectors-community/package.json +20 -0
  167. package/sampleWorkspace/connectors-community/supergraph.yaml +6 -0
  168. package/sampleWorkspace/sampleWorkspace.code-workspace +29 -8
  169. package/src/__tests__/fixtures/textmate/test.apollo.connectors.mapping +213 -0
  170. package/src/__tests__/fixtures/textmate/test.connect.graphql +104 -0
  171. package/src/language-server/__tests__/fixtures/documents/functionCall.ts.snap +3 -3
  172. package/syntaxes/build.ts +266 -0
  173. package/syntaxes/connectors.mapping.json +532 -0
  174. package/syntaxes/connectors.mapping.yaml +440 -0
  175. package/syntaxes/graphql.connectors.json +426 -0
  176. package/syntaxes/graphql.connectors.yaml +254 -0
  177. package/syntaxes/graphql.json +8 -1
  178. package/syntaxes/tsconfig.json +6 -0
@@ -0,0 +1,520 @@
1
+ import {config} from "dotenv";
2
+ config({ override: true });
3
+
4
+ import prompts from "prompts";
5
+ import { copyFile, cp, mkdir, readdir, readFile, writeFile } from "fs/promises";
6
+ import { resolve } from "path";
7
+ import { gql, request } from "graphql-request";
8
+ import { faker } from "@faker-js/faker";
9
+ import { existsSync, readFileSync } from "fs";
10
+ import { dump, load } from "js-yaml";
11
+
12
+ const userApiKey = process.env.APOLLO_KEY;
13
+ const graphosURL = "https://graphql.api.apollographql.com/api/graphql";
14
+ const graphosHeaders = {
15
+ "x-api-key": userApiKey,
16
+ "apollographql-client-name": "connectors-community",
17
+ "apollographql-client-version": "1",
18
+ };
19
+
20
+ async function main() {
21
+ if(!userApiKey) throw new Error("No User API key found in .env")
22
+ if (userApiKey && userApiKey.includes("service"))
23
+ throw new Error(
24
+ "You muse use a user API key from https://studio.apollographql.com/user-settings/api-keys"
25
+ );
26
+
27
+
28
+ let graphId = process.env.APOLLO_KEY?.split(":")[1];
29
+ let graphVariant = process.env.APOLLO_GRAPH_VARIANT;
30
+ let graphApiKey;
31
+
32
+ let clonePath = process.argv[2];
33
+ if (!clonePath) {
34
+ const pathPrompt = await prompts({
35
+ type: "text",
36
+ name: "path",
37
+ message: "Where would you like to setup your new connector environment?",
38
+ });
39
+
40
+ clonePath = pathPrompt.path.replace(/['"]+/g, "").replace(/[']+/g, "").trim();
41
+ }
42
+
43
+ const graphPrompt =
44
+ graphId && graphVariant
45
+ ? { type: 1 }
46
+ : await prompts({
47
+ name: "type",
48
+ type: "select",
49
+ choices: ["new", "existing"],
50
+ message: "Is this for a new or existing graph?",
51
+ });
52
+
53
+ let connectorName;
54
+ let folderToClone = ".template";
55
+ const modules = [];
56
+ const prebuild = await prompts({
57
+ type: "confirm",
58
+ name: "use",
59
+ message: "Do you want to use a pre-built connector?",
60
+ });
61
+
62
+ if (prebuild.use) {
63
+ const directory = await readdir("connectors", {
64
+ encoding: "utf-8",
65
+ });
66
+ const connectors = directory.filter(
67
+ (item) => !/(^|\/)\.[^\/\.]/g.test(item)
68
+ );
69
+ const prebuiltPrompt = await prompts({
70
+ name: "connector",
71
+ type: "select",
72
+ choices: connectors,
73
+ message: "Which connector would you like to use?",
74
+ });
75
+
76
+ if (prebuiltPrompt.connector == undefined)
77
+ throw new Error("User cancelled");
78
+
79
+ folderToClone = connectors[prebuiltPrompt.connector];
80
+ connectorName = folderToClone;
81
+ //Prompt for modules
82
+ const connectorDirectory = await readdir(
83
+ resolve("connectors", folderToClone),
84
+ {
85
+ encoding: "utf-8",
86
+ }
87
+ );
88
+ const schemaFiles = connectorDirectory.filter((f) =>
89
+ f.includes(".graphql")
90
+ );
91
+ const choices = schemaFiles.map((s) => s.split(".graphql")[0]);
92
+
93
+ if (choices.length === 1) {
94
+ modules.push(schemaFiles[0]);
95
+ }else if (choices.length > 1) {
96
+ const schemaModulesPrompt = await prompts({
97
+ name: "modules",
98
+ type: "multiselect",
99
+ choices,
100
+ message: `What portions of the ${connectorName} connector would you like to use?`,
101
+ });
102
+ schemaModulesPrompt.modules.forEach((i) => modules.push(schemaFiles[i]));
103
+ }
104
+ } else {
105
+ const connectorNamePrompt = await prompts({
106
+ name: "name",
107
+ type: "text",
108
+ message: "What would you like to name your connector?",
109
+ });
110
+
111
+ if (!connectorNamePrompt.name) userCancelled();
112
+
113
+ connectorName = connectorNamePrompt.name;
114
+ }
115
+
116
+ //Get user orgs and have them select if there is more than one
117
+ //We want to filter orgs that don't have any graphs in them yet
118
+ const org = await getUserOrgId(graphPrompt.type == 1);
119
+ const orgId = org.id;
120
+ if(org.graphId) graphId = org.graphId;
121
+ if(org.graphVariant) graphVariant = org.graphVariant;
122
+
123
+ //Create graph in GraphOS
124
+ if (graphPrompt.type == 0) {
125
+ //3. Create graph id
126
+ let idIsValid = false;
127
+ let newGraphId;
128
+ while (!idIsValid) {
129
+ newGraphId =
130
+ connectorName +
131
+ "-" +
132
+ faker.string
133
+ .uuid()
134
+ .replace(/[^A-Za-z0-9_]+/g, "-")
135
+ .toLowerCase()
136
+ .substring(0, 6);
137
+ const idValidResults = await request(
138
+ graphosURL,
139
+ gql`
140
+ query CC_IsGraphIdValid($graphId: ID!, $accountId: ID!) {
141
+ account(id: $accountId) {
142
+ graphIDAvailable(id: $graphId)
143
+ }
144
+ }
145
+ `,
146
+ {
147
+ graphId: newGraphId,
148
+ accountId: orgId,
149
+ },
150
+ graphosHeaders
151
+ );
152
+
153
+ idIsValid = idValidResults?.account?.graphIDAvailable ?? false;
154
+ }
155
+ //4. Create graph - return API key
156
+ const createGraphResults = await request(
157
+ graphosURL,
158
+ gql`
159
+ mutation CC_CreateGraph(
160
+ $graphType: GraphType!
161
+ $hiddenFromUninvitedNonAdmin: Boolean!
162
+ $createGraphId: ID!
163
+ $title: String!
164
+ $accountId: ID!
165
+ ) {
166
+ account(id: $accountId) {
167
+ createGraph(
168
+ graphType: $graphType
169
+ hiddenFromUninvitedNonAdmin: $hiddenFromUninvitedNonAdmin
170
+ id: $createGraphId
171
+ title: $title
172
+ ) {
173
+ ... on Service {
174
+ id
175
+ apiKeys {
176
+ token
177
+ }
178
+ }
179
+ ...on GraphCreationError {
180
+ message
181
+ }
182
+ }
183
+ }
184
+ }
185
+ `,
186
+ {
187
+ graphType: "SELF_HOSTED_SUPERGRAPH",
188
+ hiddenFromUninvitedNonAdmin: false,
189
+ createGraphId: newGraphId,
190
+ title: connectorName,
191
+ accountId: orgId,
192
+ },
193
+ graphosHeaders
194
+ );
195
+
196
+ if(createGraphResults.account.message){
197
+ throw new Error(`Unable to create graph in GraphOS: ${createGraphResults.account.message}`)
198
+ }
199
+
200
+ graphId = createGraphResults.account.createGraph.id;
201
+ graphVariant = "dev";
202
+ graphApiKey = createGraphResults.account.createGraph.apiKeys[0].token;
203
+
204
+ let sdl= await readFile(
205
+ resolve("connectors", ".template", "connector.graphql"),
206
+ { encoding: "utf-8" }
207
+ );
208
+
209
+ const publishSchemaDoc = gql`
210
+ mutation CC_PublishSubgraphSchema(
211
+ $graphId: ID!
212
+ $variantName: String!
213
+ $subgraphName: String!
214
+ $schemaDocument: PartialSchemaInput!
215
+ $url: String
216
+ $revision: String!
217
+ ) {
218
+ graph(id: $graphId) {
219
+ publishSubgraph(
220
+ graphVariant: $variantName
221
+ activePartialSchema: $schemaDocument
222
+ name: $subgraphName
223
+ url: $url
224
+ revision: $revision
225
+ ) {
226
+ launchUrl
227
+ updatedGateway
228
+ wasCreated
229
+ }
230
+ }
231
+ }
232
+ `;
233
+ const variables = {
234
+ graphId: graphId,
235
+ variantName: graphVariant,
236
+ subgraphName: connectorName,
237
+ schemaDocument: {
238
+ sdl
239
+ },
240
+ url: `http://${connectorName}`,
241
+ revision: "initial",
242
+ };
243
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
244
+
245
+ if(prebuild.use){
246
+ // need to publish modules
247
+ for(var i = 0; i<modules.length;i++){
248
+ const module = modules[i];
249
+ const moduleName = module.split(".")[0];
250
+
251
+ variables.url = `http://${connectorName}`;
252
+ variables.subgraphName = moduleName
253
+ variables.schemaDocument.sdl = await readFile(
254
+ resolve("connectors", folderToClone, module),
255
+ { encoding: "utf-8" }
256
+ );
257
+
258
+ await request(
259
+ graphosURL,
260
+ publishSchemaDoc,
261
+ variables,
262
+ graphosHeaders
263
+ );
264
+ await sleep(1000);
265
+ }
266
+ } else {
267
+ await request(
268
+ graphosURL,
269
+ publishSchemaDoc,
270
+ variables,
271
+ graphosHeaders
272
+ );
273
+ }
274
+
275
+ await sleep(1000);
276
+ await request(
277
+ graphosURL,
278
+ gql`
279
+ mutation CC_ChangeBuildPipeline(
280
+ $graphId: ID!
281
+ $variantName: String!
282
+ $fedVersion: BuildPipelineTrack!
283
+ ) {
284
+ graph(id: $graphId) {
285
+ variant(name: $variantName) {
286
+ buildConfig(version: $fedVersion) {
287
+ id
288
+ }
289
+ }
290
+ }
291
+ }
292
+ `,
293
+ {
294
+ graphId: graphId,
295
+ variantName: graphVariant,
296
+ fedVersion: "FED_NEXT",
297
+ },
298
+ graphosHeaders
299
+ );
300
+ }
301
+ //Use graph in GraphOS
302
+ else if (graphPrompt.type == 1) {
303
+ const newApiKeyResults = await request(
304
+ graphosURL,
305
+ gql`
306
+ mutation CC_CreateGraphKey($graphId: ID!, $keyName: String) {
307
+ graph(id: $graphId) {
308
+ newKey(keyName: $keyName) {
309
+ token
310
+ }
311
+ }
312
+ }
313
+ `,
314
+ {
315
+ graphId,
316
+ keyName: `connectors-community-${faker.string
317
+ .uuid()
318
+ .replace(/[^A-Za-z0-9_]+/g, "-")
319
+ .toLowerCase()
320
+ .substring(0, 6)}`,
321
+ },
322
+ graphosHeaders
323
+ );
324
+ graphApiKey = newApiKeyResults.graph.newKey.token;
325
+ }
326
+
327
+ if (!graphId || !graphVariant)
328
+ throw new Error("You muse use a graph ref from GraphOS to use connectors");
329
+
330
+ if (!existsSync(clonePath)) await mkdir(clonePath);
331
+
332
+ if (modules.length > 0) {
333
+ await copyFile(
334
+ resolve("connectors", folderToClone, "router.yaml"),
335
+ resolve(clonePath, "router.yaml")
336
+ );
337
+ let supergraph = load(
338
+ readFileSync(resolve("connectors", folderToClone, "supergraph.yaml"))
339
+ );
340
+ supergraph.subgraphs = {};
341
+ modules.forEach(async (module) => {
342
+ const moduleName = module.split(".")[0];
343
+ supergraph.subgraphs[`${connectorName}-${moduleName}`] = {
344
+ routing_url: `http:${moduleName}`,
345
+ schema: {
346
+ file: module,
347
+ },
348
+ };
349
+ await copyFile(
350
+ resolve("connectors", folderToClone, module),
351
+ resolve(clonePath, module)
352
+ );
353
+ });
354
+ await writeFile(resolve(clonePath, "supergraph.yaml"), dump(supergraph), {
355
+ encoding: "utf-8",
356
+ });
357
+ } else {
358
+ //Only one module so we can clone the folder
359
+ await cp(resolve("connectors", folderToClone), clonePath, {
360
+ recursive: true,
361
+ });
362
+ }
363
+
364
+ await mkdir(resolve(clonePath, ".vscode"));
365
+ await cp(".vscode", resolve(clonePath, ".vscode"), {
366
+ recursive: true,
367
+ });
368
+ await copyFile(
369
+ "apollo.config.json",
370
+ resolve(clonePath, "apollo.config.json")
371
+ );
372
+
373
+ await writeFile(
374
+ resolve(clonePath, ".env"),
375
+ `APOLLO_KEY=${graphApiKey}\nAPOLLO_GRAPH_REF=${graphId}@${graphVariant}`,
376
+ { encoding: "utf-8" }
377
+ );
378
+ await writeFile(
379
+ resolve(clonePath, ".vscode", "settings.json"),
380
+ `{
381
+ "terminal.integrated.profiles.osx": {
382
+ "graphos": {
383
+ "path": "zsh",
384
+ "args": ["-l"],
385
+ "env": {
386
+ "APOLLO_KEY": "${graphApiKey}",
387
+ "APOLLO_GRAPH_REF": "${graphId}@${graphVariant}",
388
+ "APOLLO_ROVER_DEV_ROUTER_VERSION": "2.0.0",
389
+ }
390
+ }
391
+ },
392
+ "terminal.integrated.defaultProfile.osx": "graphos"
393
+ }`
394
+ );
395
+
396
+ console.log(
397
+ `Project ready 🚀\! To open in VS Code, run: \n\ncode ${clonePath}`
398
+ );
399
+ }
400
+
401
+ main();
402
+
403
+ function userCancelled() {
404
+ throw new Error("User cancelled");
405
+ }
406
+
407
+ async function getUserOrgId(promptForGraph = false) {
408
+ //Get user orgs and have them select if there is more than one
409
+ const orgResults = await request(
410
+ graphosURL,
411
+ gql`
412
+ query CC_UserMemberships {
413
+ me {
414
+ id
415
+ ... on User {
416
+ memberships {
417
+ account {
418
+ id
419
+ graphs {
420
+ id
421
+ name
422
+ }
423
+ }
424
+ }
425
+ }
426
+ }
427
+ }
428
+ `,
429
+ {},
430
+ graphosHeaders
431
+ );
432
+ let graphId;
433
+ let graphVariant;
434
+ let orgId = orgResults.me.memberships[0].account.id;
435
+ if (orgResults.me.memberships.length > 1 && orgId) {
436
+ let membershipChoices = orgResults.me.memberships;
437
+ if (promptForGraph)
438
+ membershipChoices = membershipChoices.filter(
439
+ (m) => m.account.graphs.length > 0
440
+ );
441
+ const orgPrompt = await prompts({
442
+ name: "org",
443
+ type: "select",
444
+ choices: membershipChoices.map((m) => m.account.id),
445
+ message: promptForGraph ? "Which org would you like to use? (filtered to orgs that havecd graphs in them)" : "Which org would you like to use?",
446
+ });
447
+ if (typeof orgPrompt.org === 'number')
448
+ orgId = membershipChoices[orgPrompt.org].account.id;
449
+ else userCancelled();
450
+
451
+ if(promptForGraph){
452
+ const graphs = membershipChoices[orgPrompt.org].account.graphs;
453
+ const graphPrompt = await prompts({
454
+ name: "graph",
455
+ type: "select",
456
+ choices: graphs.map((m) => m.name),
457
+ message: "Which graph would you like to use?",
458
+ });
459
+
460
+ graphId = graphs[graphPrompt.graph].id;
461
+
462
+ const variantResults = await request(
463
+ graphosURL,
464
+ gql`
465
+ query CC_GetGraphVariants($graphId: ID!) {
466
+ graph(id: $graphId) {
467
+ variants {
468
+ name
469
+ }
470
+ }
471
+ }
472
+ `,
473
+ { graphId },
474
+ graphosHeaders
475
+ );
476
+
477
+ const variants = variantResults.graph.variants;
478
+ if (variants.length == 1) {
479
+ graphVariant = variants[0].name;
480
+ } else {
481
+ const variantPrompt = await prompts({
482
+ name: "variant",
483
+ type: "select",
484
+ choices: variants.map((m) => m.name),
485
+ message: "Which variant would you like to use?",
486
+ });
487
+ graphVariant = variants[variantPrompt.variant].name;
488
+ }
489
+ }
490
+ }
491
+
492
+ return { id: orgId, graphId, graphVariant };
493
+ }
494
+
495
+ async function updateFedVersion(graphId, graphVariant) {
496
+ await request(
497
+ graphosURL,
498
+ gql`
499
+ mutation CC_PublishSubgraphSchema(
500
+ $graphId: ID!
501
+ $variantName: String!
502
+ $fedVersion: BuildPipelineTrack!
503
+ ) {
504
+ graph(id: $graphId) {
505
+ variant(name: $variantName) {
506
+ buildConfig(version: $fedVersion) {
507
+ id
508
+ }
509
+ }
510
+ }
511
+ }
512
+ `,
513
+ {
514
+ graphId: graphId,
515
+ variantName: graphVariant,
516
+ fedVersion: "FED_NEXT",
517
+ },
518
+ graphosHeaders
519
+ );
520
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "name": "connectors-community",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "connectors-community",
9
+ "version": "1.0.0",
10
+ "license": "MIT",
11
+ "dependencies": {
12
+ "@faker-js/faker": "^9.0.3",
13
+ "dotenv": "^16.4.5",
14
+ "graphql": "^16.9.0",
15
+ "graphql-request": "^7.1.0",
16
+ "js-yaml": "^4.1.0",
17
+ "prompts": "^2.4.2"
18
+ }
19
+ },
20
+ "node_modules/@faker-js/faker": {
21
+ "version": "9.7.0",
22
+ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.7.0.tgz",
23
+ "integrity": "sha512-aozo5vqjCmDoXLNUJarFZx2IN/GgGaogY4TMJ6so/WLZOWpSV7fvj2dmrV6sEAnUm1O7aCrhTibjpzeDFgNqbg==",
24
+ "funding": [
25
+ {
26
+ "type": "opencollective",
27
+ "url": "https://opencollective.com/fakerjs"
28
+ }
29
+ ],
30
+ "license": "MIT",
31
+ "engines": {
32
+ "node": ">=18.0.0",
33
+ "npm": ">=9.0.0"
34
+ }
35
+ },
36
+ "node_modules/@graphql-typed-document-node/core": {
37
+ "version": "3.2.0",
38
+ "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz",
39
+ "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==",
40
+ "peerDependencies": {
41
+ "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0"
42
+ }
43
+ },
44
+ "node_modules/argparse": {
45
+ "version": "2.0.1",
46
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
47
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
48
+ },
49
+ "node_modules/dotenv": {
50
+ "version": "16.5.0",
51
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
52
+ "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
53
+ "license": "BSD-2-Clause",
54
+ "engines": {
55
+ "node": ">=12"
56
+ },
57
+ "funding": {
58
+ "url": "https://dotenvx.com"
59
+ }
60
+ },
61
+ "node_modules/graphql": {
62
+ "version": "16.11.0",
63
+ "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz",
64
+ "integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==",
65
+ "license": "MIT",
66
+ "engines": {
67
+ "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
68
+ }
69
+ },
70
+ "node_modules/graphql-request": {
71
+ "version": "7.1.2",
72
+ "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.1.2.tgz",
73
+ "integrity": "sha512-+XE3iuC55C2di5ZUrB4pjgwe+nIQBuXVIK9J98wrVwojzDW3GMdSBZfxUk8l4j9TieIpjpggclxhNEU9ebGF8w==",
74
+ "license": "MIT",
75
+ "dependencies": {
76
+ "@graphql-typed-document-node/core": "^3.2.0"
77
+ },
78
+ "peerDependencies": {
79
+ "graphql": "14 - 16"
80
+ }
81
+ },
82
+ "node_modules/js-yaml": {
83
+ "version": "4.1.0",
84
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
85
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
86
+ "dependencies": {
87
+ "argparse": "^2.0.1"
88
+ },
89
+ "bin": {
90
+ "js-yaml": "bin/js-yaml.js"
91
+ }
92
+ },
93
+ "node_modules/kleur": {
94
+ "version": "3.0.3",
95
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
96
+ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
97
+ "engines": {
98
+ "node": ">=6"
99
+ }
100
+ },
101
+ "node_modules/prompts": {
102
+ "version": "2.4.2",
103
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
104
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
105
+ "dependencies": {
106
+ "kleur": "^3.0.3",
107
+ "sisteransi": "^1.0.5"
108
+ },
109
+ "engines": {
110
+ "node": ">= 6"
111
+ }
112
+ },
113
+ "node_modules/sisteransi": {
114
+ "version": "1.0.5",
115
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
116
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "connectors-community",
3
+ "version": "1.0.0",
4
+ "description": "A simple repository designed share connectors in the community and ensure they follow a specific standard.",
5
+ "type": "module",
6
+ "main": "file-new/index.js",
7
+ "author": "Apollo GraphQL",
8
+ "license": "MIT",
9
+ "scripts": {
10
+ "start": "node file-new/index.js"
11
+ },
12
+ "dependencies": {
13
+ "@faker-js/faker": "^9.0.3",
14
+ "dotenv": "^16.4.5",
15
+ "graphql": "^16.9.0",
16
+ "graphql-request": "^7.1.0",
17
+ "js-yaml": "^4.1.0",
18
+ "prompts": "^2.4.2"
19
+ }
20
+ }
@@ -0,0 +1,6 @@
1
+ federation_version: =2.11.0
2
+ subgraphs:
3
+ connector:
4
+ routing_url: http://connector
5
+ schema:
6
+ file: connector.graphql