@routr/pgdata 2.0.29 → 2.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.
package/dist/envs.d.ts CHANGED
@@ -1 +1,7 @@
1
+ export declare const TLS_ON: boolean;
2
+ export declare const VERIFY_CLIENT_CERT: boolean;
3
+ export declare const CACERT: string;
4
+ export declare const SERVER_CERT: string;
5
+ export declare const SERVER_KEY: string;
1
6
  export declare const BIND_ADDR: string;
7
+ export declare const EXTERNAL_SERVER_BIND_ADDR: string;
package/dist/envs.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
- var _a;
2
+ var _a, _b, _c, _d, _e;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.BIND_ADDR = void 0;
4
+ exports.EXTERNAL_SERVER_BIND_ADDR = exports.BIND_ADDR = exports.SERVER_KEY = exports.SERVER_CERT = exports.CACERT = exports.VERIFY_CLIENT_CERT = exports.TLS_ON = void 0;
5
5
  /*
6
6
  * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
7
7
  * http://github.com/fonoster
@@ -22,4 +22,17 @@ exports.BIND_ADDR = void 0;
22
22
  */
23
23
  const common_1 = require("@routr/common");
24
24
  common_1.Assertions.assertEnvsAreSet(["DATABASE_URL"]);
25
- exports.BIND_ADDR = (_a = process.env.BIND_ADDR) !== null && _a !== void 0 ? _a : "0.0.0.0:51907";
25
+ exports.TLS_ON = process.env.TLS_ON === "true";
26
+ exports.VERIFY_CLIENT_CERT = process.env.VERIFY_CLIENT_CERT === "true";
27
+ exports.CACERT = (_a = process.env.CACERT) !== null && _a !== void 0 ? _a : "/etc/routr/certs/ca.crt";
28
+ exports.SERVER_CERT = (_b = process.env.SERVER_CERT) !== null && _b !== void 0 ? _b : "/etc/routr/certs/server.crt";
29
+ exports.SERVER_KEY = (_c = process.env.SERVER_KEY) !== null && _c !== void 0 ? _c : "/etc/routr/certs/server.key";
30
+ exports.BIND_ADDR = (_d = process.env.BIND_ADDR) !== null && _d !== void 0 ? _d : "0.0.0.0:51907";
31
+ exports.EXTERNAL_SERVER_BIND_ADDR = (_e = process.env.EXTERNAL_SERVER_BIND_ADDR) !== null && _e !== void 0 ? _e : "0.0.0.0:51908";
32
+ if (exports.TLS_ON) {
33
+ if (exports.VERIFY_CLIENT_CERT) {
34
+ common_1.Assertions.assertFileExist(exports.CACERT);
35
+ }
36
+ common_1.Assertions.assertFileExist(exports.SERVER_CERT);
37
+ common_1.Assertions.assertFileExist(exports.SERVER_KEY);
38
+ }
package/dist/runner.js CHANGED
@@ -29,7 +29,10 @@ const envs_1 = require("./envs");
29
29
  const service_1 = __importDefault(require("./service"));
30
30
  const logger = (0, logger_1.getLogger)({ service: "pgdata", filePath: __filename });
31
31
  try {
32
- (0, service_1.default)({ bindAddr: envs_1.BIND_ADDR });
32
+ (0, service_1.default)({
33
+ bindAddr: envs_1.BIND_ADDR,
34
+ externalServerBindAddr: envs_1.EXTERNAL_SERVER_BIND_ADDR
35
+ });
33
36
  }
34
37
  catch (e) {
35
38
  logger.error(e);
package/dist/service.js CHANGED
@@ -22,6 +22,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
25
28
  Object.defineProperty(exports, "__esModule", { value: true });
26
29
  /*
27
30
  * Copyright (C) 2023 by Fonoster Inc (https://fonoster.com)
@@ -52,6 +55,8 @@ const delete_1 = require("./api/delete");
52
55
  const find_1 = require("./api/find");
53
56
  const list_1 = require("./api/list");
54
57
  const grpc_health_check_1 = require("@fonoster/grpc-health-check");
58
+ const envs_1 = require("./envs");
59
+ const fs_1 = __importDefault(require("fs"));
55
60
  // eslint-disable-next-line @typescript-eslint/no-var-requires
56
61
  const interceptor = require("grpc-interceptors");
57
62
  const prisma = new client_1.PrismaClient();
@@ -64,7 +69,8 @@ const logger = (0, logger_1.getLogger)({ service: "pgdata", filePath: __filename
64
69
  function pgDataService(config) {
65
70
  const { bindAddr } = config;
66
71
  logger.info("starting routr service", { bindAddr, name: "pgdata" });
67
- const server = new grpc.Server();
72
+ const internalServer = new grpc.Server();
73
+ const externalServer = new grpc.Server();
68
74
  const kinds = [
69
75
  common_1.CommonConnect.Kind.AGENT,
70
76
  common_1.CommonConnect.Kind.CREDENTIALS,
@@ -77,19 +83,50 @@ function pgDataService(config) {
77
83
  kinds.forEach((kind) => {
78
84
  const k = kind.toLowerCase();
79
85
  const delegate = prisma[kind];
80
- server.addService(common_1.CommonConnect.createConnectService(k), {
86
+ const funcs = {
81
87
  create: (0, create_1.create)(delegate.create, k),
82
88
  get: (0, get_1.get)(delegate.findUnique, k),
83
89
  findBy: (0, find_1.findBy)(delegate.findMany, k),
84
90
  delete: (0, delete_1.del)(delegate.delete),
85
91
  update: (0, update_1.update)(delegate.update, k),
86
92
  list: (0, list_1.list)(delegate.findMany, k)
87
- });
93
+ };
94
+ internalServer.addService(common_1.CommonConnect.createConnectService(k), funcs);
95
+ externalServer.addService(common_1.CommonConnect.createConnectService(k), funcs);
88
96
  });
89
97
  const credentials = grpc.ServerCredentials.createInsecure();
90
- const withHealthChecks = interceptor.serverProxy((0, grpc_health_check_1.useHealth)(server));
98
+ const withHealthChecks = interceptor.serverProxy((0, grpc_health_check_1.useHealth)(internalServer));
91
99
  withHealthChecks.bindAsync(config.bindAddr, credentials, () => {
100
+ logger.info("internal server started", { bindAddr: config.bindAddr });
92
101
  withHealthChecks.start();
93
102
  });
103
+ if (envs_1.TLS_ON) {
104
+ const cacert = envs_1.VERIFY_CLIENT_CERT ? fs_1.default.readFileSync(envs_1.CACERT) : null;
105
+ const cert = fs_1.default.readFileSync(envs_1.SERVER_CERT);
106
+ const key = fs_1.default.readFileSync(envs_1.SERVER_KEY);
107
+ const externalCredentials = grpc.ServerCredentials.createSsl(
108
+ // By default the server does not ask for the client's certificate.
109
+ cacert, [
110
+ {
111
+ cert_chain: cert,
112
+ private_key: key
113
+ }
114
+ ], envs_1.VERIFY_CLIENT_CERT);
115
+ externalServer.bindAsync(config.externalServerBindAddr, externalCredentials, () => {
116
+ logger.info("external server started", {
117
+ externalServerBindAddr: config.externalServerBindAddr
118
+ });
119
+ externalServer.start();
120
+ });
121
+ }
122
+ else {
123
+ externalServer.bindAsync(config.externalServerBindAddr, credentials, () => {
124
+ logger.info("secure connection disabled");
125
+ logger.info("external server started", {
126
+ externalServerBindAddr: config.externalServerBindAddr
127
+ });
128
+ externalServer.start();
129
+ });
130
+ }
94
131
  }
95
132
  exports.default = pgDataService;
package/dist/types.d.ts CHANGED
@@ -2,6 +2,7 @@ import { CommonConnect as CC } from "@routr/common";
2
2
  import { JsonObject } from "pb-util/build";
3
3
  export interface PostgresDataConfig {
4
4
  bindAddr: string;
5
+ externalServerBindAddr: string;
5
6
  }
6
7
  export type DBDelegate = Exclude<Exclude<CC.Kind, CC.Kind.UNKNOWN>, CC.Kind.ACL> | "accessControlList";
7
8
  export type PrismaOperation = (request: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@routr/pgdata",
3
- "version": "2.0.29",
3
+ "version": "2.1.0",
4
4
  "description": "Postgres API Server for Routr Connect",
5
5
  "author": "Pedro Sanders <psanders@fonoster.com>",
6
6
  "homepage": "https://github.com/fonoster/routr#readme",
@@ -31,8 +31,8 @@
31
31
  "@opentelemetry/sdk-trace-node": "^1.0.4",
32
32
  "@opentelemetry/semantic-conventions": "^1.0.4",
33
33
  "@prisma/client": "^4.8.0",
34
- "@routr/common": "^2.0.20",
35
- "@routr/processor": "^2.0.20",
34
+ "@routr/common": "^2.1.0",
35
+ "@routr/processor": "^2.1.0",
36
36
  "google-protobuf": "^3.9.2",
37
37
  "grpc-interceptors": "github:fonoster/node-grpc-interceptors",
38
38
  "pb-util": "^1.0.3",
@@ -57,5 +57,5 @@
57
57
  "@types/validator": "^13.7.10",
58
58
  "prisma": "^4.8.0"
59
59
  },
60
- "gitHead": "59b95dfd079d17c604be42e8c4d2d428506a06a3"
60
+ "gitHead": "0e75c7950157dcb7701082655259a87da322c29d"
61
61
  }