1 | "use strict";
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const http2_1 = __importDefault(require("http2"));
|
7 | const Engine_1 = require("./Engine");
|
8 | class Client {
|
9 | constructor(url) {
|
10 | this.session = http2_1.default.connect(url, {});
|
11 |
|
12 | this.session.on('error', e => { });
|
13 | }
|
14 | close() {
|
15 | this.session.destroy();
|
16 | }
|
17 | request(body) {
|
18 | return new Promise((resolve, reject) => {
|
19 | try {
|
20 | let rejected = false;
|
21 | const buffer = Buffer.from(JSON.stringify(body));
|
22 | const req = this.session.request({
|
23 | [http2_1.default.constants.HTTP2_HEADER_METHOD]: http2_1.default.constants.HTTP2_METHOD_POST,
|
24 | [http2_1.default.constants.HTTP2_HEADER_PATH]: `/`,
|
25 | 'Content-Type': 'application/json',
|
26 | 'Content-Length': buffer.length,
|
27 | });
|
28 | req.setEncoding('utf8');
|
29 | let data = [];
|
30 | let headers;
|
31 | req.on('error', e => {
|
32 | rejected = true;
|
33 | if (e.code && e.code === 'ECONNREFUSED') {
|
34 | reject(new Error(`Prisma Client could not connect to query engine.`));
|
35 | }
|
36 | else {
|
37 | reject(e);
|
38 | }
|
39 | });
|
40 | req.on('data', chunk => {
|
41 | data.push(chunk);
|
42 | });
|
43 | req.on('response', res => {
|
44 | headers = res;
|
45 | if (res[':status'] === 408) {
|
46 | rejected = true;
|
47 | return reject(new Engine_1.PrismaQueryEngineError(`Timeout in query engine. This is probably related to the database being overwhelmed.`, res[':status']));
|
48 | }
|
49 | if (res[':status'] > 226) {
|
50 | rejected = true;
|
51 | reject(new Engine_1.PrismaQueryEngineError(`Error in query engine response, status code ${res[':status']}${data ? ': ' + data : ''}`, res[':status']));
|
52 | }
|
53 | });
|
54 | if (!rejected) {
|
55 | req.write(buffer);
|
56 | req.end();
|
57 | }
|
58 | req.on('end', () => {
|
59 | if (data && data.length > 0 && !rejected) {
|
60 | resolve({ body: JSON.parse(data.join('')), headers });
|
61 | }
|
62 | });
|
63 | }
|
64 | catch (e) {
|
65 | reject(e);
|
66 | }
|
67 | });
|
68 | }
|
69 | }
|
70 | exports.Client = Client;
|
71 |
|
\ | No newline at end of file |