@yrpri/api 9.0.172 → 9.0.173

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/app.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import express from "express";
2
+ import type { Server as HttpServer } from "http";
2
3
  import WebSocket, { WebSocketServer } from "ws";
3
4
  import { RedisClientType } from "@redis/client";
4
5
  import { WebSocketsManager } from "./webSockets.js";
@@ -49,6 +50,6 @@ export declare class YourPrioritiesApi {
49
50
  registerUserLogin: (user: any | null, userId: number, loginProvider: string, req: YpRequest, done: () => void) => void;
50
51
  setupErrorHandler(): void;
51
52
  listen(): Promise<void>;
52
- setupHttpsServer(): any;
53
+ setupHttpsServer(): Promise<HttpServer>;
53
54
  }
54
55
  export {};
package/app.js CHANGED
@@ -892,7 +892,7 @@ export class YourPrioritiesApi {
892
892
  setupErrorHandler() {
893
893
  this.app.use((err, req, res, next) => {
894
894
  if (err instanceof auth.UnauthorizedError) {
895
- log.info("Anon debug UnauthorizedError", { user: req.user });
895
+ log.debug("UnauthorizedError debug", { user: req.user });
896
896
  log.error("User Unauthorized", {
897
897
  context: "unauthorizedError",
898
898
  user: toJson(req.user),
@@ -976,28 +976,46 @@ export class YourPrioritiesApi {
976
976
  });
977
977
  }
978
978
  async listen() {
979
- const server = await this.setupHttpsServer();
980
- this.webSocketsManager = new WebSocketsManager(this.wsClients, this.redisClient, server);
981
- await this.webSocketsManager.listen();
982
- }
983
- setupHttpsServer() {
984
- let server;
985
- const portNumber = process.env.PORT ? parseInt(process.env.PORT) : 4242;
986
- if (process.env.YOUR_PRIORITIES_LISTEN_HOST) {
987
- server = this.app.listen(portNumber, process.env.YOUR_PRIORITIES_LISTEN_HOST, () => {
988
- log.info(`Your Priorities Platform API Server listening on port ${process.env.YOUR_PRIORITIES_LISTEN_HOST}:${this.app.get("port")} on ${process.env.NODE_ENV}`);
989
- });
979
+ try {
980
+ log.info("Starting Your Priorities Platform API Server");
981
+ const server = await this.setupHttpsServer();
982
+ log.debug("Server created");
983
+ this.webSocketsManager = new WebSocketsManager(this.wsClients, this.redisClient, server);
984
+ log.debug("WebSocketsManager created");
985
+ await this.webSocketsManager.listen();
990
986
  }
991
- else {
992
- server = this.app.listen(portNumber, function (err) {
993
- if (err) {
994
- log.error("Error listening on port", { err });
995
- }
996
- log.info("Your Priorities Platform API Server listening on port " +
997
- server.address().port +
998
- ` on ${process.env.NODE_ENV}`);
999
- });
987
+ catch (err) {
988
+ log.error("Server failed to start", { err: err?.message || err });
989
+ process.exit(1);
1000
990
  }
1001
- return server;
991
+ }
992
+ async setupHttpsServer() {
993
+ const port = Number(process.env.PORT) || 4242;
994
+ const host = process.env.YOUR_PRIORITIES_LISTEN_HOST || "0.0.0.0";
995
+ this.app.set("port", port);
996
+ return await new Promise((resolve, reject) => {
997
+ const server = this.app.listen(port, host);
998
+ const onError = (err) => {
999
+ server.removeListener("listening", onListening);
1000
+ log.error("HTTP server listen error", {
1001
+ code: err?.code,
1002
+ message: err?.message,
1003
+ host,
1004
+ port,
1005
+ });
1006
+ reject(err);
1007
+ };
1008
+ const onListening = () => {
1009
+ server.removeListener("error", onError);
1010
+ const addr = server.address();
1011
+ const rendered = typeof addr === "string"
1012
+ ? addr
1013
+ : `${addr.address}:${addr.port}`;
1014
+ log.info(`Your Priorities Platform API Server listening on ${rendered} (env=${process.env.NODE_ENV})`);
1015
+ resolve(server);
1016
+ };
1017
+ server.once("error", onError);
1018
+ server.once("listening", onListening);
1019
+ });
1002
1020
  }
1003
1021
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yrpri/api",
3
- "version": "9.0.172",
3
+ "version": "9.0.173",
4
4
  "license": "MIT",
5
5
  "author": "Robert Bjarnason & Citizens Foundation",
6
6
  "repository": {
package/webSockets.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Server } from "https";
1
+ import { Server as HttpServer } from "http";
2
2
  import { RedisClientType } from "@redis/client";
3
3
  import { WebSocketServer, WebSocket } from "ws";
4
4
  /**
@@ -12,7 +12,7 @@ export declare class WebSocketsManager {
12
12
  ws: WebSocketServer;
13
13
  redisClient: RedisClientType;
14
14
  private pingInterval;
15
- constructor(wsClients: Map<string, WebSocket>, redisClient: RedisClientType, server: Server);
15
+ constructor(wsClients: Map<string, WebSocket>, redisClient: RedisClientType, server: HttpServer);
16
16
  /**
17
17
  * Main entry point to start listening for connections
18
18
  * and initialize Redis pub/sub, heartbeat, etc.