1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var graphql_1 = require("graphql");
|
4 | var apollo_link_1 = require("apollo-link");
|
5 | var apollo_link_ws_1 = require("apollo-link-ws");
|
6 | var apollo_link_error_1 = require("apollo-link-error");
|
7 | var ws = require("ws");
|
8 | var http_link_dataloader_1 = require("http-link-dataloader");
|
9 | function makePrismaLink(_a) {
|
10 | var endpoint = _a.endpoint, token = _a.token, debug = _a.debug;
|
11 | var httpLink = new http_link_dataloader_1.HTTPLinkDataloader({
|
12 | uri: endpoint,
|
13 | headers: token ? { Authorization: "Bearer " + token } : {},
|
14 | });
|
15 |
|
16 | var wsEndpoint = endpoint.replace(/^http/, 'ws');
|
17 | var wsLink = new apollo_link_ws_1.WebSocketLink({
|
18 | uri: wsEndpoint,
|
19 | options: {
|
20 | reconnect: true,
|
21 | connectionParams: token
|
22 | ? {
|
23 | Authorization: "Bearer " + token,
|
24 | }
|
25 | : {},
|
26 | lazy: true,
|
27 | inactivityTimeout: 30000,
|
28 | },
|
29 | webSocketImpl: ws,
|
30 | });
|
31 |
|
32 | var backendLink = apollo_link_1.split(function (op) { return isSubscription(op); }, wsLink, httpLink);
|
33 | var reportErrors = apollo_link_error_1.onError(function (_a) {
|
34 | var graphQLErrors = _a.graphQLErrors, networkError = _a.networkError;
|
35 | if (graphQLErrors)
|
36 | graphQLErrors.map(function (_a) {
|
37 | var message = _a.message, locations = _a.locations, path = _a.path;
|
38 | return console.log("[GraphQL error]: Message: " + message + ", Location: " + locations + ", Path: " + path);
|
39 | });
|
40 | if (networkError)
|
41 | console.log("[Network error]: " + networkError);
|
42 | });
|
43 | if (debug) {
|
44 | var debugLink = new apollo_link_1.ApolloLink(function (operation, forward) {
|
45 | console.log("Request to " + endpoint + ":");
|
46 | console.log("query:");
|
47 | console.log(graphql_1.print(operation.query).trim());
|
48 | console.log("operationName: " + operation.operationName);
|
49 | console.log("variables:");
|
50 | console.log(JSON.stringify(operation.variables, null, 2));
|
51 | return forward(operation).map(function (data) {
|
52 | console.log("Response from " + endpoint + ":");
|
53 | console.log(JSON.stringify(data.data, null, 2));
|
54 | return data;
|
55 | });
|
56 | });
|
57 | return apollo_link_1.ApolloLink.from([debugLink, reportErrors, backendLink]);
|
58 | }
|
59 | else {
|
60 | return apollo_link_1.ApolloLink.from([reportErrors, backendLink]);
|
61 | }
|
62 | }
|
63 | exports.makePrismaLink = makePrismaLink;
|
64 | function isSubscription(operation) {
|
65 | var selectedOperation = getSelectedOperation(operation);
|
66 | if (selectedOperation) {
|
67 | return selectedOperation.operation === 'subscription';
|
68 | }
|
69 | return false;
|
70 | }
|
71 | function getSelectedOperation(operation) {
|
72 | if (operation.query.definitions.length === 1) {
|
73 | return operation.query.definitions[0];
|
74 | }
|
75 | return operation.query.definitions.find(function (d) {
|
76 | return d.kind === 'OperationDefinition' &&
|
77 | !!d.name &&
|
78 | d.name.value === operation.operationName;
|
79 | });
|
80 | }
|
81 |
|
\ | No newline at end of file |