UNPKG

prisma-accelerate-local

Version:

[![](https://img.shields.io/npm/l/prisma-accelerate-local)](https://www.npmjs.com/package/prisma-accelerate-local) [![](https://img.shields.io/npm/v/prisma-accelerate-local)](https://www.npmjs.com/package/prisma-accelerate-local) [![](https://img.shields.

171 lines (170 loc) 7.26 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createServer = exports.createKey = void 0; const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const fetch_engine_1 = require("@prisma/fetch-engine"); const fastify_1 = require("fastify"); const node_forge_1 = __importDefault(require("node-forge")); const prisma_accelerate_js_1 = require("./prisma-accelerate.js"); __exportStar(require("./prisma-accelerate.js"), exports); const createKey = () => { const keys = node_forge_1.default.pki.rsa.generateKeyPair(2048); const cert = node_forge_1.default.pki.createCertificate(); cert.publicKey = keys.publicKey; const now = new Date(); cert.validity.notBefore = now; cert.validity.notAfter.setFullYear(now.getFullYear() + 1); const attrs = [ { name: 'commonName', value: 'example.com', }, { name: 'countryName', value: 'EXAMPLE', }, { shortName: 'ST', value: 'Example State', }, { name: 'localityName', value: 'Example Locality', }, { name: 'organizationName', value: 'Example Org', }, { shortName: 'OU', value: 'Example Org Unit', }, ]; cert.setSubject(attrs); cert.setIssuer(attrs); cert.sign(keys.privateKey); return { cert: node_forge_1.default.pki.certificateToPem(cert), key: node_forge_1.default.pki.privateKeyToPem(keys.privateKey), }; }; exports.createKey = createKey; const getAdapter = (datasourceUrl) => { const url = new URL(datasourceUrl); const schema = url.searchParams.get('schema'); const { PrismaPg } = require('@prisma/adapter-pg'); return new PrismaPg({ connectionString: url.toString() }, { schema: schema ?? undefined, }); }; const createServer = ({ datasourceUrl, https, wasm, secret, fastifySeverOptions, singleInstance, onRequestSchema, onChangeSchema, }) => { const { getPrismaClient } = require('@prisma/client/runtime/library.js'); const prismaAccelerate = new prisma_accelerate_js_1.PrismaAccelerate({ secret, datasourceUrl, activeProvider: 'postgresql', adapter: wasm && datasourceUrl ? getAdapter : undefined, getRuntime: () => require(`@prisma/client/runtime/query_engine_bg.postgresql.js`), getPrismaClient, singleInstance, onRequestSchema, onChangeSchema, getQueryEngineWasmModule: wasm ? async () => { const runtimePath = './node_modules/@prisma/client/runtime/query_engine_bg.postgresql.wasm'; const queryEngineWasmFilePath = fs_1.default.existsSync(runtimePath) ? runtimePath : path_1.default.resolve(__dirname, fs_1.default.existsSync(path_1.default.resolve(__dirname, '../node_modules')) ? '..' : '../..', 'node_modules', '@prisma/client/runtime', 'query_engine_bg.postgresql.wasm'); const queryEngineWasmFileBytes = fs_1.default.readFileSync(queryEngineWasmFilePath); return new WebAssembly.Module(queryEngineWasmFileBytes); } : undefined, getEnginePath: async (adapter, engineVersion) => { const baseDir = adapter ? '@prisma/client/runtime' : '.prisma/client'; const dirname = path_1.default.resolve(__dirname, fs_1.default.existsSync(path_1.default.resolve(__dirname, '../node_modules')) ? '..' : '../..', 'node_modules', baseDir, adapter ? '' : engineVersion); if (!adapter) { fs_1.default.mkdirSync(dirname, { recursive: true }); const engine = await (0, fetch_engine_1.download)({ binaries: { 'libquery-engine': dirname, }, version: engineVersion, }).catch(() => undefined); if (!engine) { return undefined; } } return dirname; }, }); const _fastify = (0, fastify_1.fastify)({ https: https === undefined ? (0, exports.createKey)() : https, ...fastifySeverOptions, }); _fastify.addContentTypeParser('*', { parseAs: 'string' }, function (_req, body, done) { done(null, body); }); _fastify .post('/:version/:hash/graphql', async ({ body, params, headers }, reply) => { const { hash } = params; return prismaAccelerate.query({ hash, headers, body }).catch((e) => { return reply.status(e.code).send(e.value); }); }) .post('/:version/:hash/transaction/start', async ({ body, params, headers }, reply) => { const { version, hash } = params; const result = await prismaAccelerate .startTransaction({ version, hash, headers, body }) .catch((e) => { return reply.status(e.code).send(e.value); }); return result; }) .post('/:version/:hash/itx/:id/graphql', async ({ body, params, headers }, reply) => { const { hash, id } = params; return prismaAccelerate.queryTransaction({ hash, headers, body, id }).catch((e) => { return reply.status(e.code).send(e.value); }); }) .post('/:version/:hash/itx/:id/commit', async ({ params, headers }, reply) => { const { hash, id } = params; return prismaAccelerate.commitTransaction({ hash, headers, id }).catch((e) => { return reply.status(e.code).send(e.value); }); }) .post('/:version/:hash/itx/:id/rollback', async ({ params, headers }, reply) => { const { hash, id } = params; return prismaAccelerate.rollbackTransaction({ hash, headers, id }).catch((e) => { return reply.status(e.code).send(e.value); }); }) .put('/:version/:hash/schema', async ({ body, params, headers }, reply) => { const { hash } = params; return prismaAccelerate.updateSchema({ hash, headers, body }).catch((e) => { return reply.status(e.code).send(e.value); }); }) .all('*', async (req, reply) => { return reply.status(404).send('Not found'); }); return _fastify; }; exports.createServer = createServer;