1.0.17 • Published 5 months ago

pg-socket v1.0.17

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

PG-SOCKET

Runs a socket.io server with events for changes from configured postgres database

Supported ENV Variables

Database Configuration (Required)

DB_DATABASE - Database Name
DB_HOST - Database Host
DB_PORT - Database Port
DB_USER - Database User
DB_PASSWORD - Database Password

or

DATABASE_URL - Postgres Connection String (ex: postgres://user:password@host:port/database?schema=public)

Optional Configs

WHITELISTED_TABLES - Comma Separated List of Tables to watch, if not set, all tables will be watched
BLACKLISTED_TABLES - Comma Separated List of Tables to ignore. Ignored in case WHITELISTED_TABLES is set
SOCKET_PORT - Port to run socket.io server on, defaults to 4000. Can be overridden by -p flag

Example Usage

CLI

npx pg-socket #-p 4001

package.json

Additionally env-cmd can be used to load the environment variables

yarn add -D pg-socket env-cmd
{
  "scripts": {
    "pg:socket": "env-cmd --silent pg-socket"
  }
}

Docker

docker run -p 4000:4000 -e DB_DATABASE=postgres -e DB_HOST=localhost -e DB_PORT=5432 -e DB_USER=postgres -e DB_PASSWORD=postgres -e WHITELISTED_TABLES=users,posts -e SOCKET_PORT=4000 -d pg-socket

Docker Compose

version: "3"

services:
  app:
    build:
      context: .
    image: my-app-backend-img
    container_name: my-app-backend
    restart: unless-stopped
  redis:
    image: redis
    container_name: my-app-redis
    restart: unless-stopped
  pg-socket:
    image: ashrhmn/pg-socket
    container_name: my-app-pg-socket
    restart: unless-stopped
    # Set ENV Variables in .env file
    env_file:
      - .env
    # Or set ENV Variables here
    environment:
      - DATABASE_URL=postgres://user:password@host:port/database?schema=public
      - WHITELISTED_TABLES=users,items
      - SOCKET_PORT=4000

Client Side Usage

Socket will emit events for each table that is watched. The event name will be the table name. The event payload will be empty.

Global watch event will be emitted on the all event. The payload will be the table name.

// Client Side
import { io } from "socket.io-client";

export const socket = io(
  process.env.NEXT_PUBLIC_SOCKET_URL
);

socket.on("products", ()=>{
    // Do something
});


socket.on("all", (tableName)=>{
  if(tableName === "products"){
    // Do something
  }
});
1.0.17

5 months ago

1.0.15

10 months ago

1.0.14

10 months ago

1.0.13

10 months ago

1.0.12

10 months ago

1.0.11

10 months ago

1.0.10

10 months ago

1.0.9

10 months ago

1.0.8

10 months ago

1.0.7

10 months ago

1.0.6

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago