From 1360dae681d3104a5fc6bd5e8a03a1e7094eedf9 Mon Sep 17 00:00:00 2001 From: Egor Date: Sat, 31 Jan 2026 02:00:29 -0800 Subject: [PATCH] rename to prism --- .env.example | 6 +- .github/workflows/docker.yml | 2 +- .gitignore | 2 +- README.md | 48 +- assets/SUP Architecture.excalidraw | 1582 ---------------------------- assets/SUP Architecture.webp | Bin 32074 -> 0 bytes assets/prism.webp | Bin 0 -> 10476 bytes assets/sup.webp | Bin 24712 -> 0 bytes bun.lock | 2 +- docker-compose.dev.yml | 8 +- docker-compose.yml | 10 +- package.json | 6 +- scripts/release.ts | 4 +- server/Dockerfile | 6 +- server/constants/config.ts | 6 +- server/constants/paths.ts | 2 +- server/index.ts | 2 +- server/modules/proton-mail.ts | 4 +- server/modules/store.ts | 7 +- server/public/favicon.webp | Bin 950 -> 664 bytes server/public/icon-512.webp | Bin 24712 -> 0 bytes server/public/index.html | 2 +- server/public/manifest.json | 4 +- server/routes/admin.ts | 2 +- server/routes/ntfy.ts | 2 +- server/routes/proton-mail.ts | 2 +- server/routes/webhook.ts | 2 +- 27 files changed, 65 insertions(+), 1646 deletions(-) delete mode 100644 assets/SUP Architecture.excalidraw delete mode 100644 assets/SUP Architecture.webp create mode 100644 assets/prism.webp delete mode 100644 assets/sup.webp delete mode 100644 server/public/icon-512.webp diff --git a/.env.example b/.env.example index e4581fd..3143814 100644 --- a/.env.example +++ b/.env.example @@ -14,8 +14,8 @@ # RATE_LIMIT=100 # Optional: Device name shown in Signal app's linked devices list -# Default: SUP -# DEVICE_NAME=What SUP +# Default: PRISM +# DEVICE_NAME=What PRISM # Optional: Enable verbose logging # Default: false @@ -32,4 +32,4 @@ # PROTON_IMAP_PASSWORD=bridge-generated-password # PROTON_BRIDGE_HOST=protonmail-bridge # PROTON_BRIDGE_PORT=143 -# PROTON_SUP_TOPIC=Proton Mail \ No newline at end of file +# PROTON_PRISM_TOPIC=Proton Mail \ No newline at end of file diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index f821375..a6c3b02 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -7,7 +7,7 @@ on: env: REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository_owner }}/sup + IMAGE_NAME: ${{ github.repository_owner }}/prism jobs: build: diff --git a/.gitignore b/.gitignore index 9ba758d..d320784 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ node_modules/ signal-cli .env -sup +prism diff --git a/README.md b/README.md index a03d6b4..ba0645e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@
-SUP Icon +PRISM Icon -# SUP +# PRISM **Self-hosted notification gateway using Signal and Webhooks for transport** @@ -12,18 +12,18 @@ -SUP is a self-hosted notification gateway that receives HTTP requests and routes them through Signal groups or custom webhooks. Route notifications through Signal to avoid exposing unique network fingerprints, or forward them to your own webhook endpoints for custom handling. +PRISM is a self-hosted notification gateway that receives HTTP requests and routes them through Signal groups or custom webhooks. Route notifications through Signal to avoid exposing unique network fingerprints, or forward them to your own webhook endpoints for custom handling. ## How? -SUP accepts notifications via HTTP POST requests and routes them based on your configured delivery method: +PRISM accepts notifications via HTTP POST requests and routes them based on your configured delivery method: - **Signal groups**: Uses [signal-cli](https://github.com/AsamK/signal-cli) to create a Signal group for each app and send notifications as messages - **Webhook forwarding**: Forwards notifications to your own webhook URL (useful for UnifiedPush distributors, ntfy, or custom handlers) Each endpoint can be independently configured to use either delivery method through the admin UI. -For the optional Proton Mail integration, SUP requires a server that runs Proton's official [proton-bridge](https://github.com/ProtonMail/proton-bridge). SUP's docker compose process will run an image from [protonmail-bridge-docker](https://github.com/shenxn/protonmail-bridge-docker). Once authenticated, the communication between SUP and proton-bridge will be over IMAP. +For the optional Proton Mail integration, PRISM requires a server that runs Proton's official [proton-bridge](https://github.com/ProtonMail/proton-bridge). PRISM's docker compose process will run an image from [protonmail-bridge-docker](https://github.com/shenxn/protonmail-bridge-docker). Once authenticated, the communication between PRISM and proton-bridge will be over IMAP. ## Setup @@ -39,7 +39,7 @@ To receive Proton Mail notifications via Signal: ```bash # Download docker-compose.yml -curl -L -O https://raw.githubusercontent.com/lone-cloud/sup/master/docker-compose.yml +curl -L -O https://raw.githubusercontent.com/lone-cloud/prism/master/docker-compose.yml docker compose run --rm protonmail-bridge init ``` @@ -75,20 +75,20 @@ Your phone will now receive Signal notifications when Proton Mail receives new e Note that the bridge will first need to sync all of your old emails before you can start getting new email notifications which may take a while, but this is a one-time setup. -### 2. Install SUP Server +### 2. Install PRISM Server ```bash # Download docker-compose.yml -curl -L -O https://raw.githubusercontent.com/lone-cloud/sup/master/docker-compose.yml +curl -L -O https://raw.githubusercontent.com/lone-cloud/prism/master/docker-compose.yml # Download .env.example (optional) -curl -L -O https://raw.githubusercontent.com/lone-cloud/sup/master/server/.env.example +curl -L -O https://raw.githubusercontent.com/lone-cloud/prism/master/server/.env.example -# Configure SUP server through environment variables (optional) +# Configure PRISM server through environment variables (optional) cp .env.example .env nano .env -# Start SUP server +# Start PRISM server docker compose up -d ``` @@ -125,8 +125,8 @@ For local development, install Bun and signal-cli: # Install Bun (use your package manager and this is a backup) curl -fsSL https://bun.sh/install | bash -git clone https://github.com/lone-cloud/sup.git -cd sup +git clone https://github.com/lone-cloud/prism.git +cd prism bun install cd server @@ -151,7 +151,7 @@ docker compose -f docker-compose.dev.yml up protonmail-bridge Receive Signal notifications when new emails arrive in your Proton Mail inbox. -SUP monitors a Proton Mail account via the local bridge and forwards email alerts through Signal. This relies on the same technology that a third-party email client like Thunderbird would be using to integrate with Proton Mail. +PRISM monitors a Proton Mail account via the local bridge and forwards email alerts through Signal. This relies on the same technology that a third-party email client like Thunderbird would be using to integrate with Proton Mail. ### Home Assistant Alerts @@ -160,26 +160,26 @@ Add a rest notification configuration (eg. add to configuration.yaml) to Home As ```bash notify: - platform: rest - name: SUP - resource: "http:///Home Assistant" + name: PRISM + resource: "http:///Home Assistant" method: POST headers: - Authorization: !secret sup_basic_auth + Authorization: !secret prism_basic_auth ``` -Note how Home Assistant is also a self-hosted server. As such, it is advisable to turn on `ALLOW_INSECURE_HTTP` environment variable for SUP and to refer to it by its LAN IP address. +Note how Home Assistant is also a self-hosted server. As such, it is advisable to turn on `ALLOW_INSECURE_HTTP` environment variable for PRISM and to refer to it by its LAN IP address. Add the Base64 version of your API_KEY environment variable secret to your secrets.yaml. This secret must be prepended by a colon and the simplest way to get this value is to run `btoa(':')` in your browser's console. ```bash -sup_basic_auth: "Basic " +prism_basic_auth: "Basic " ``` -Reboot your Home Assistant system and you'll then be able to send Signal notifications to yourself by using this notify sup action. +Reboot your Home Assistant system and you'll then be able to send Signal notifications to yourself by using this notify prism action. ## Monitoring -The health of the system can be viewed in the same admin UI used for linking Signal. SUP uses [basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) - provide your `API_KEY` as the password (username can be anything). +The health of the system can be viewed in the same admin UI used for linking Signal. PRISM uses [basic access authentication](https://en.wikipedia.org/wiki/Basic_access_authentication) - provide your `API_KEY` as the password (username can be anything). For API-based monitoring, call `/api/health` which returns JSON: @@ -189,11 +189,9 @@ For API-based monitoring, call `/api/health` which returns JSON: ## Architecture -![SUP Architecture](assets/SUP%20Architecture.webp) +PRISM consists of two services that **MUST run together on the same machine**: -SUP consists of two services that **MUST run together on the same machine**: - -- **sup** (Bun): Receives webhooks, sends Signal messages via signal-cli. Optional: monitors Proton Mail IMAP +- **prism** (Bun): Receives webhooks, sends Signal messages via signal-cli. Optional: monitors Proton Mail IMAP - **protonmail-bridge** (Official Proton, optional): Decrypts Proton Mail emails, runs local IMAP server All services communicate over a private Docker network with no external exposure except Signal protocol. **Separating these services across multiple machines would expose plaintext IMAP traffic and compromise security.** diff --git a/assets/SUP Architecture.excalidraw b/assets/SUP Architecture.excalidraw deleted file mode 100644 index cb7ff65..0000000 --- a/assets/SUP Architecture.excalidraw +++ /dev/null @@ -1,1582 +0,0 @@ -{ - "type": "excalidraw", - "version": 2, - "source": "https://excalidraw.com", - "elements": [ - { - "id": "ubnB-MCtd3Y84dUGFa-b7", - "type": "rectangle", - "x": 311.93098958333337, - "y": 15.150065104166629, - "width": 166.41015625, - "height": 133.2421875, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aJ", - "roundness": { - "type": 3 - }, - "seed": 1606195181, - "version": 358, - "versionNonce": 588019384, - "isDeleted": false, - "boundElements": [ - { - "id": "RNCrlFh5EZBwnYr-7bA_j", - "type": "arrow" - }, - { - "id": "hauitp4TDHIQsHGW_tjMw", - "type": "arrow" - } - ], - "updated": 1769391114004, - "link": null, - "locked": false - }, - { - "id": "7fGvBO1wPB7KmcLdQS0oT", - "type": "rectangle", - "x": -156.96024576822913, - "y": 25.20804850260413, - "width": 167.36328125, - "height": 133.2421875, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aN", - "roundness": { - "type": 3 - }, - "seed": 611898349, - "version": 361, - "versionNonce": 887010157, - "isDeleted": false, - "boundElements": [ - { - "id": "wN-1aiqTy8EelOURWsY4E", - "type": "arrow" - }, - { - "id": "jqv8Vv58NPpsDZoaXIZY8", - "type": "arrow" - } - ], - "updated": 1768687676554, - "link": null, - "locked": false - }, - { - "id": "OLh35JqPLzCNQfQUwFZVV", - "type": "text", - "x": -128.99674479166663, - "y": 77.70084635416663, - "width": 123.85987854003906, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aO", - "roundness": null, - "seed": 1914263683, - "version": 128, - "versionNonce": 156587309, - "isDeleted": false, - "boundElements": [], - "updated": 1768687034227, - "link": null, - "locked": false, - "text": "Signal Server", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Signal Server", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "vgtgZtFmt1xq7s1sOgLPv", - "type": "rectangle", - "x": 7.194319011910807, - "y": 508.80493813682875, - "width": 119.4609375, - "height": 63.421875, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aS", - "roundness": { - "type": 3 - }, - "seed": 1282447693, - "version": 302, - "versionNonce": 1698256072, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "roYNM1cuh0Q_XzEwhEmVq" - }, - { - "id": "0gzKxrXTCJjBSJaqf17am", - "type": "arrow" - }, - { - "id": "wN-1aiqTy8EelOURWsY4E", - "type": "arrow" - } - ], - "updated": 1769391143351, - "link": null, - "locked": false - }, - { - "id": "roYNM1cuh0Q_XzEwhEmVq", - "type": "text", - "x": 17.9448301813444, - "y": 528.0158756368287, - "width": 97.95991516113281, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aT", - "roundness": null, - "seed": 1388624675, - "version": 221, - "versionNonce": 465796040, - "isDeleted": false, - "boundElements": [], - "updated": 1769391143351, - "link": null, - "locked": false, - "text": "Signal App", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "vgtgZtFmt1xq7s1sOgLPv", - "originalText": "Signal App", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "PPR4JysV7Oxn5UJ2TDQSX", - "type": "text", - "x": -65.51204325358069, - "y": 278.1585489908854, - "width": 214.33975219726562, - "height": 50, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "abV", - "roundness": null, - "seed": 1448567395, - "version": 46, - "versionNonce": 330571043, - "isDeleted": false, - "boundElements": [], - "updated": 1768685762804, - "link": null, - "locked": false, - "text": "WebSocket connection\non chat.signal.com", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "wN-1aiqTy8EelOURWsY4E", - "originalText": "WebSocket connection on chat.signal.com", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "IHq2qxEqUSCP4Tt7IOSph", - "type": "text", - "x": 337.91731770833337, - "y": 49.52115885416663, - "width": 109.89990234375, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ag", - "roundness": null, - "seed": 87614285, - "version": 70, - "versionNonce": 1300605187, - "isDeleted": false, - "boundElements": [], - "updated": 1768687383820, - "link": null, - "locked": false, - "text": "SUP Server", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "SUP Server", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "hcGGzvqT_ihnanzGYaqOv", - "type": "rectangle", - "x": 255.8606770833336, - "y": -30.20735677083337, - "width": 596.9561941964287, - "height": 223.84570312499994, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "an", - "roundness": { - "type": 3 - }, - "seed": 1456200845, - "version": 696, - "versionNonce": 1670648965, - "isDeleted": false, - "boundElements": [ - { - "id": "Gf2m8hClymOsReVNX3j47", - "type": "arrow" - } - ], - "updated": 1768722074032, - "link": null, - "locked": false - }, - { - "id": "xYkxnXL4g5KS5YsJIUrlM", - "type": "text", - "x": 404.1661714033563, - "y": -61.89886106396227, - "width": 250.01974487304688, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ao", - "roundness": null, - "seed": 1877972781, - "version": 927, - "versionNonce": 1660665784, - "isDeleted": false, - "boundElements": [], - "updated": 1769391224127, - "link": null, - "locked": false, - "text": "User's Self-Hosted Server", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "User's Self-Hosted Server", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "JFj4AIU6qh1LAm8QVQqRG", - "type": "rectangle", - "x": -42.549479166666515, - "y": 402.95865885416663, - "width": 214.66566534309902, - "height": 295.0022477613677, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "ap", - "roundness": { - "type": 3 - }, - "seed": 1667903597, - "version": 335, - "versionNonce": 443863224, - "isDeleted": false, - "boundElements": [ - { - "id": "t44vlc42q_1WvhRZtOcdt", - "type": "arrow" - } - ], - "updated": 1769391139610, - "link": null, - "locked": false - }, - { - "id": "wN-1aiqTy8EelOURWsY4E", - "type": "arrow", - "x": 1.1943190119108067, - "y": 540.4158756368288, - "width": 77.76372649212522, - "height": 375.9656396342246, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "apV", - "roundness": null, - "seed": 1580099555, - "version": 560, - "versionNonce": 899439032, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "PPR4JysV7Oxn5UJ2TDQSX" - } - ], - "updated": 1769391153323, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -77.76372649212522, - 0 - ], - [ - -77.76372649212522, - -227.95498889880895 - ], - [ - -74.57292415513993, - -227.95498889880895 - ], - [ - -74.57292415513993, - -375.9656396342246 - ] - ], - "startBinding": { - "elementId": "vgtgZtFmt1xq7s1sOgLPv", - "mode": "orbit", - "fixedPoint": [ - -0.05022562291544046, - 0.49842325695984285 - ] - }, - "endBinding": { - "elementId": "7fGvBO1wPB7KmcLdQS0oT", - "mode": "orbit", - "fixedPoint": [ - 0.49940249737425607, - 1.0450307827616538 - ] - }, - "startArrowhead": "arrow", - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": [ - { - "index": 2, - "start": [ - -77.76372649212522, - 0 - ], - "end": [ - -77.76372649212522, - -227.95498889880895 - ] - }, - { - "index": 3, - "start": [ - -77.76372649212522, - -227.95498889880895 - ], - "end": [ - -74.57292415513993, - -227.95498889880895 - ] - } - ], - "startIsSpecial": false, - "endIsSpecial": false - }, - { - "id": "8Nmzpi54TtXde91RroPni", - "type": "text", - "x": -33.900604801127656, - "y": 371.83191970447785, - "width": 223.8397979736328, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "dashed", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "aq", - "roundness": null, - "seed": 489832781, - "version": 590, - "versionNonce": 1567561416, - "isDeleted": false, - "boundElements": [], - "updated": 1769391081293, - "link": null, - "locked": false, - "text": "User's Phone (Android)", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "User's Phone (Android)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "pDL0AmXVDpmeLiMPNhgXB", - "type": "ellipse", - "x": 347.6231055682466, - "y": 393.20907140731777, - "width": 155.6640625, - "height": 128.03125, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b02", - "roundness": { - "type": 2 - }, - "seed": 23153837, - "version": 1096, - "versionNonce": 1593174472, - "isDeleted": false, - "boundElements": [ - { - "id": "sMHy2iCqiPDKAwwq-dRtF", - "type": "text" - }, - { - "id": "Gf2m8hClymOsReVNX3j47", - "type": "arrow" - }, - { - "id": "t44vlc42q_1WvhRZtOcdt", - "type": "arrow" - }, - { - "id": "hauitp4TDHIQsHGW_tjMw", - "type": "arrow" - } - ], - "updated": 1769391114004, - "link": null, - "locked": false - }, - { - "id": "sMHy2iCqiPDKAwwq-dRtF", - "type": "text", - "x": 403.1996013953288, - "y": 444.9588138679227, - "width": 44.43995666503906, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b03", - "roundness": null, - "seed": 2011005347, - "version": 1037, - "versionNonce": 146595768, - "isDeleted": false, - "boundElements": [], - "updated": 1769391114005, - "link": null, - "locked": false, - "text": "User", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "pDL0AmXVDpmeLiMPNhgXB", - "originalText": "User", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "l68p6MrICi0j1MxyTO7FJ", - "type": "rectangle", - "x": 629.8659261067706, - "y": 11.624343145461296, - "width": 166.41015625, - "height": 133.2421875, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b06", - "roundness": { - "type": 3 - }, - "seed": 1014887149, - "version": 909, - "versionNonce": 2142655688, - "isDeleted": false, - "boundElements": [ - { - "id": "RNCrlFh5EZBwnYr-7bA_j", - "type": "arrow" - }, - { - "id": "Gf2m8hClymOsReVNX3j47", - "type": "arrow" - }, - { - "id": "arkYz5xpoKLpnfgkI-VOo", - "type": "arrow" - } - ], - "updated": 1769391546726, - "link": null, - "locked": false - }, - { - "id": "hauitp4TDHIQsHGW_tjMw", - "type": "arrow", - "x": 425.3551368182466, - "y": 387.20912122059906, - "width": 30.43223172450473, - "height": 232.81686861643243, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b07", - "roundness": null, - "seed": 1731189997, - "version": 800, - "versionNonce": 525624760, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "vxGx-nqDvOFOiAk4_cs44" - } - ], - "updated": 1769391116391, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 0, - -117.52344361887725 - ], - [ - -30.43223172450473, - -117.52344361887725 - ], - [ - -30.43223172450473, - -232.81686861643243 - ] - ], - "startBinding": { - "elementId": "pDL0AmXVDpmeLiMPNhgXB", - "mode": "orbit", - "fixedPoint": [ - 0.4993575909661228, - -0.04686316963021689 - ] - }, - "endBinding": { - "elementId": "ubnB-MCtd3Y84dUGFa-b7", - "mode": "orbit", - "fixedPoint": [ - 0.49939907513908144, - 1.0450307827616534 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": [ - { - "index": 2, - "start": [ - 0, - -117.52344361887725 - ], - "end": [ - -30.43223172450473, - -117.52344361887725 - ] - } - ], - "startIsSpecial": false, - "endIsSpecial": false - }, - { - "id": "vxGx-nqDvOFOiAk4_cs44", - "type": "text", - "x": 440.88123067220056, - "y": 207.03896510294422, - "width": 166.91983032226562, - "height": 50, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b08", - "roundness": null, - "seed": 1384345283, - "version": 52, - "versionNonce": 242755768, - "isDeleted": false, - "boundElements": [], - "updated": 1769391114005, - "link": null, - "locked": false, - "text": "Link Signal device\n(one time setup)", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "hauitp4TDHIQsHGW_tjMw", - "originalText": "Link Signal device\n(one time setup)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "RNCrlFh5EZBwnYr-7bA_j", - "type": "arrow", - "x": 623.8659261067706, - "y": 78.1454368954613, - "width": 139.52478027343722, - "height": 3.525721958705347, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b09", - "roundness": null, - "seed": 1756548205, - "version": 486, - "versionNonce": 1694311243, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "dltbZAYBQ5avRfqMY2QVu" - } - ], - "updated": 1768722102290, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -69.76239013671864, - 0 - ], - [ - -69.76239013671864, - 3.525721958705347 - ], - [ - -139.52478027343722, - 3.525721958705347 - ] - ], - "startBinding": { - "elementId": "l68p6MrICi0j1MxyTO7FJ", - "mode": "orbit", - "fixedPoint": [ - -0.03605549165512547, - 0.4992494869539725 - ] - }, - "endBinding": { - "elementId": "ubnB-MCtd3Y84dUGFa-b7", - "mode": "orbit", - "fixedPoint": [ - 1.036055491655126, - 0.4992494869539726 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "dltbZAYBQ5avRfqMY2QVu", - "type": "text", - "x": 595.2638367425828, - "y": -29.353516351609017, - "width": 53.69996643066406, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b09V", - "roundness": null, - "seed": 1817962659, - "version": 6, - "versionNonce": 867947107, - "isDeleted": false, - "boundElements": [], - "updated": 1768686850795, - "link": null, - "locked": false, - "text": "IMAP", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "RNCrlFh5EZBwnYr-7bA_j", - "originalText": "IMAP", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "Gf2m8hClymOsReVNX3j47", - "type": "arrow", - "x": 509.28708256349, - "y": 457.12469640731774, - "width": 204.69119151059056, - "height": 306.25816576185645, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0B", - "roundness": null, - "seed": 778790627, - "version": 1694, - "versionNonce": 1434069448, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "dRN0F_NBkLKndkjCpaYdF" - } - ], - "updated": 1769391546728, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 40, - 0 - ], - [ - 40, - -191.35883889243678 - ], - [ - 204.69119151059056, - -191.35883889243678 - ], - [ - 204.69119151059056, - -231.57083911934063 - ], - [ - 203.6839216682805, - -231.57083911934063 - ], - [ - 203.6839216682805, - -306.25816576185645 - ] - ], - "startBinding": { - "elementId": "pDL0AmXVDpmeLiMPNhgXB", - "mode": "orbit", - "fixedPoint": [ - 1.0385439927423414, - 0.49921894068830835 - ] - }, - "endBinding": { - "elementId": "l68p6MrICi0j1MxyTO7FJ", - "mode": "orbit", - "fixedPoint": [ - 0.49939907513908044, - 1.0450307827616534 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": [ - { - "index": 3, - "start": [ - 40, - -191.35883889243678 - ], - "end": [ - 204.69119151059056, - -191.35883889243678 - ] - }, - { - "index": 4, - "start": [ - 204.69119151059056, - -191.35883889243678 - ], - "end": [ - 204.69119151059056, - -231.57083911934063 - ] - }, - { - "index": 5, - "start": [ - 204.69119151059056, - -231.57083911934063 - ], - "end": [ - 203.6839216682805, - -231.57083911934063 - ] - } - ], - "startIsSpecial": false, - "endIsSpecial": false - }, - { - "id": "dRN0F_NBkLKndkjCpaYdF", - "type": "text", - "x": 778.3100734892347, - "y": 224.62913876488096, - "width": 160.4198455810547, - "height": 75, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0C", - "roundness": null, - "seed": 1005555021, - "version": 92, - "versionNonce": 344651720, - "isDeleted": false, - "boundElements": [], - "updated": 1769391199999, - "link": null, - "locked": false, - "text": "Auth ProtonMail\naccount\n(one time setup)", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "Gf2m8hClymOsReVNX3j47", - "originalText": "Auth ProtonMail account\n(one time setup)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "t44vlc42q_1WvhRZtOcdt", - "type": "arrow", - "x": 353.59834675075695, - "y": 493.28719640731777, - "width": 175.48216057432444, - "height": 0.3715921051325495, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0D", - "roundness": null, - "seed": 1473653773, - "version": 582, - "versionNonce": 68636088, - "isDeleted": false, - "boundElements": [], - "updated": 1769391159341, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -175.48216057432444, - -0.3715921051325495 - ] - ], - "startBinding": { - "elementId": "pDL0AmXVDpmeLiMPNhgXB", - "mode": "orbit", - "fixedPoint": [ - 0.03838548915238757, - 0.7816695142787405 - ] - }, - "endBinding": { - "elementId": "JFj4AIU6qh1LAm8QVQqRG", - "mode": "orbit", - "fixedPoint": [ - 1.0279504409352573, - 0.3049364746562415 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "LuiOfX2WrGgTFGCh1s_oo", - "type": "text", - "x": 664.5501302083335, - "y": 36.45224144345241, - "width": 103.99989318847656, - "height": 75, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0F", - "roundness": null, - "seed": 788874861, - "version": 221, - "versionNonce": 788868075, - "isDeleted": false, - "boundElements": [], - "updated": 1768722062632, - "link": null, - "locked": false, - "text": "ProtonMail\nBridge\n(Optional)", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "ProtonMail\nBridge\n(Optional)", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "G6GfUeIwo3YJpOfYBMe8P", - "type": "text", - "x": 85.91843377976204, - "y": 55.63304501488096, - "width": 143.7398681640625, - "height": 50, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0G", - "roundness": null, - "seed": 1208577891, - "version": 477, - "versionNonce": 1172217027, - "isDeleted": false, - "boundElements": [], - "updated": 1768688207743, - "link": null, - "locked": false, - "text": "Create groups\nSend messages", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Create groups\nSend messages", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "WeHPdAoCwAGXZu5ut9jaX", - "type": "rectangle", - "x": 334.86374627976204, - "y": 97.17992001488096, - "width": 108.8515625, - "height": 35, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0H", - "roundness": { - "type": 3 - }, - "seed": 1407995459, - "version": 103, - "versionNonce": 523854669, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "-ooE7317g-_nL1NRo7VtK" - }, - { - "id": "jqv8Vv58NPpsDZoaXIZY8", - "type": "arrow" - } - ], - "updated": 1768687674726, - "link": null, - "locked": false - }, - { - "id": "-ooE7317g-_nL1NRo7VtK", - "type": "text", - "x": 348.75957452683235, - "y": 102.17992001488096, - "width": 81.05990600585938, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0I", - "roundness": null, - "seed": 572049933, - "version": 25, - "versionNonce": 708753027, - "isDeleted": false, - "boundElements": [], - "updated": 1768687389129, - "link": null, - "locked": false, - "text": "signal-cli", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "WeHPdAoCwAGXZu5ut9jaX", - "originalText": "signal-cli", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "jqv8Vv58NPpsDZoaXIZY8", - "type": "arrow", - "x": 328.86374627976204, - "y": 114.57992001488095, - "width": 312.46071079799117, - "height": 0.14687500000000853, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0P", - "roundness": null, - "seed": 586510381, - "version": 30, - "versionNonce": 1977867533, - "isDeleted": false, - "boundElements": [], - "updated": 1768687676554, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - -312.46071079799117, - 0.14687500000000853 - ] - ], - "startBinding": { - "elementId": "WeHPdAoCwAGXZu5ut9jaX", - "mode": "orbit", - "fixedPoint": [ - -0.055120935907557594, - 0.4971428571428569 - ] - }, - "endBinding": { - "elementId": "7fGvBO1wPB7KmcLdQS0oT", - "mode": "orbit", - "fixedPoint": [ - 1.0358501575446377, - 0.6718498712149771 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": null, - "startIsSpecial": null, - "endIsSpecial": null - }, - { - "id": "KsN6VJCu_Js44TB79mnZV", - "type": "text", - "x": 562.6354678762497, - "y": 407.7665418137195, - "width": 392.6328125, - "height": 250, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0Z", - "roundness": null, - "seed": 302706755, - "version": 445, - "versionNonce": 904888248, - "isDeleted": true, - "boundElements": [], - "updated": 1769391173119, - "link": null, - "locked": false, - "text": "signal-cli: \ngithub.com/AsamK/signal-cli\n\nprotonmail bridge:\ngithub.com/ProtonMail/proton-bridge\n\nprotonmail bridge docker image:\ngithub.com/shenxn/protonmail-bridge-\ndocker\n", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "signal-cli: \ngithub.com/AsamK/signal-cli\n\nprotonmail bridge: github.com/ProtonMail/proton-bridge\n\nprotonmail bridge docker image: github.com/shenxn/protonmail-bridge-docker\n", - "autoResize": false, - "lineHeight": 1.25 - }, - { - "id": "b_1xFx1msT5nd4KKXb3l3", - "type": "rectangle", - "x": 719.7241843953517, - "y": 338.4950760145983, - "width": 167.36328125, - "height": 133.2421875, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0a", - "roundness": { - "type": 3 - }, - "seed": 663201227, - "version": 1450, - "versionNonce": 1730630328, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "I1pGk3B9Ec_xrXMDZgUV0" - }, - { - "id": "arkYz5xpoKLpnfgkI-VOo", - "type": "arrow" - } - ], - "updated": 1769391546726, - "link": null, - "locked": false - }, - { - "id": "I1pGk3B9Ec_xrXMDZgUV0", - "type": "text", - "x": 751.4058784261134, - "y": 380.1161697645983, - "width": 103.99989318847656, - "height": 50, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0b", - "roundness": null, - "seed": 583447659, - "version": 839, - "versionNonce": 1587575752, - "isDeleted": false, - "boundElements": [], - "updated": 1769391546726, - "link": null, - "locked": false, - "text": "ProtonMail\nServer", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "b_1xFx1msT5nd4KKXb3l3", - "originalText": "ProtonMail Server", - "autoResize": true, - "lineHeight": 1.25 - }, - { - "id": "arkYz5xpoKLpnfgkI-VOo", - "type": "arrow", - "x": 821.417836997662, - "y": 332.4950760145983, - "width": 77.84510390781213, - "height": 232.63753787407194, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0c", - "roundness": null, - "seed": 1417079147, - "version": 1710, - "versionNonce": 1020626360, - "isDeleted": false, - "boundElements": [ - { - "type": "text", - "id": "EGNOTS-XqhS2k84RwsI7Q" - } - ], - "updated": 1769391572659, - "link": null, - "locked": false, - "points": [ - [ - 0, - 0 - ], - [ - 0, - -40 - ], - [ - 58.703349266920895, - -40 - ], - [ - 58.703349266920895, - -222.84056746374762 - ], - [ - 51.96225042641231, - -222.84056746374762 - ], - [ - 51.96225042641231, - -232.63753787407194 - ], - [ - -19.141754640891236, - -232.63753787407194 - ] - ], - "startBinding": { - "elementId": "b_1xFx1msT5nd4KKXb3l3", - "mode": "orbit", - "fixedPoint": [ - 0.6076222445137457, - -0.045030782761653475 - ] - }, - "endBinding": { - "elementId": "l68p6MrICi0j1MxyTO7FJ", - "mode": "orbit", - "fixedPoint": [ - 1.0360554916551261, - 0.6568659580913585 - ] - }, - "startArrowhead": null, - "endArrowhead": "arrow", - "elbowed": true, - "fixedSegments": [ - { - "index": 3, - "start": [ - 58.703349266920895, - -40 - ], - "end": [ - 58.703349266920895, - -222.84056746374762 - ] - }, - { - "index": 4, - "start": [ - 58.703349266920895, - -222.84056746374762 - ], - "end": [ - 51.96225042641231, - -222.84056746374762 - ] - }, - { - "index": 5, - "start": [ - 51.96225042641231, - -222.84056746374762 - ], - "end": [ - 51.96225042641231, - -232.63753787407194 - ] - } - ], - "startIsSpecial": false, - "endIsSpecial": false - }, - { - "id": "EGNOTS-XqhS2k84RwsI7Q", - "type": "text", - "x": 923.453510180991, - "y": 97.15450855085066, - "width": 43.63995361328125, - "height": 25, - "angle": 0, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "groupIds": [], - "frameId": null, - "index": "b0cV", - "roundness": null, - "seed": 1245023659, - "version": 14, - "versionNonce": 1269678792, - "isDeleted": false, - "boundElements": [], - "updated": 1769391546727, - "link": null, - "locked": false, - "text": "Sync", - "fontSize": 20, - "fontFamily": 5, - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "arkYz5xpoKLpnfgkI-VOo", - "originalText": "Sync", - "autoResize": true, - "lineHeight": 1.25 - } - ], - "appState": { - "gridSize": 20, - "gridStep": 5, - "gridModeEnabled": false, - "viewBackgroundColor": "#ffffff", - "lockedMultiSelections": {} - }, - "files": {} -} \ No newline at end of file diff --git a/assets/SUP Architecture.webp b/assets/SUP Architecture.webp deleted file mode 100644 index b4cc1c94d80816f57a27932bfaf9fa43601e91a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32074 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 literal 0 HcmV?d00001 diff --git a/assets/sup.webp b/assets/sup.webp deleted file mode 100644 index c6be5f355b092c56335dfdd82542dd13f6432bf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24712 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 bXw%LE+5i9m03W5(#Q*>R0000000000pSz9P diff --git a/bun.lock b/bun.lock index 8247563..3fb30e2 100644 --- a/bun.lock +++ b/bun.lock @@ -3,7 +3,7 @@ "configVersion": 1, "workspaces": { "": { - "name": "sup", + "name": "prism", "dependencies": { "chalk": "5.6.2", "hono": "4.11.7", diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 2086537..260ef95 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -1,6 +1,6 @@ services: server: - container_name: sup-server + container_name: prism-server build: context: . dockerfile: server/Dockerfile @@ -15,10 +15,10 @@ services: - PROTON_IMAP_PASSWORD=${PROTON_IMAP_PASSWORD:-} - PROTON_BRIDGE_HOST=protonmail-bridge - PROTON_BRIDGE_PORT=${PROTON_BRIDGE_PORT:-143} - - PROTON_SUP_TOPIC=${PROTON_SUP_TOPIC:-Proton Mail} + - PROTON_PRISM_TOPIC=${PROTON_PRISM_TOPIC:-Proton Mail} volumes: - signal-data:/root/.local/share/signal-cli - - sup-data:/root/.local/share/sup + - prism-data:/root/.local/share/prism restart: unless-stopped protonmail-bridge: @@ -34,5 +34,5 @@ services: volumes: signal-data: - sup-data: + prism-data: proton-bridge-data: diff --git a/docker-compose.yml b/docker-compose.yml index 46f152c..4928eae 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: server: - container_name: sup-server - image: ghcr.io/lone-cloud/sup:latest + container_name: prism-server + image: ghcr.io/lone-cloud/prism:latest ports: - '8080:8080' environment: @@ -14,10 +14,10 @@ services: - PROTON_IMAP_PASSWORD=${PROTON_IMAP_PASSWORD:-} - PROTON_BRIDGE_HOST=protonmail-bridge - PROTON_BRIDGE_PORT=${PROTON_BRIDGE_PORT:-143} - - PROTON_SUP_TOPIC=${PROTON_SUP_TOPIC:-Proton Mail} + - PROTON_PRISM_TOPIC=${PROTON_PRISM_TOPIC:-Proton Mail} volumes: - signal-data:/root/.local/share/signal-cli - - sup-data:/root/.local/share/sup + - prism-data:/root/.local/share/prism restart: unless-stopped protonmail-bridge: @@ -31,5 +31,5 @@ services: volumes: signal-data: - sup-data: + prism-data: proton-bridge-data: diff --git a/package.json b/package.json index 73d1934..9467fbb 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "sup", + "name": "prism", "version": "0.2.0", "description": "Privacy-preserving push notifications using Signal as transport", "private": true, @@ -11,12 +11,12 @@ "license": "AGPL-3.0-or-later", "repository": { "type": "git", - "url": "https://github.com/lone-cloud/sup" + "url": "https://github.com/lone-cloud/prism" }, "scripts": { "postinstall": "bun run scripts/install-signal-cli.ts || true", "start": "bun run server/index.ts", - "build": "bun build --compile server/index.ts --outfile server/sup", + "build": "bun build --compile server/index.ts --outfile server/prism", "check": "tsc --noEmit && biome check .", "fix": "biome check --write --unsafe .", "release": "bun run scripts/release.ts" diff --git a/scripts/release.ts b/scripts/release.ts index 31e5f62..354314f 100644 --- a/scripts/release.ts +++ b/scripts/release.ts @@ -26,14 +26,14 @@ try { Pull the latest version: \`\`\`bash -docker pull ghcr.io/lone-cloud/sup:${version} +docker pull ghcr.io/lone-cloud/prism:${version} \`\`\`" --generate-notes`; console.log(` ✨ Release ${version} complete! Once CI completes, images will be available: - docker pull ghcr.io/lone-cloud/sup:${version} + docker pull ghcr.io/lone-cloud/prism:${version} `); } catch (error) { console.error('Release failed:', error); diff --git a/server/Dockerfile b/server/Dockerfile index 7eaf1dc..c9f4899 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -7,7 +7,7 @@ RUN bun install --frozen-lockfile COPY server ./server -RUN bun build --compile server/index.ts --outfile sup +RUN bun build --compile server/index.ts --outfile prism FROM debian:13.3-slim @@ -34,7 +34,7 @@ RUN ARCH=$(uname -m) && \ rm /tmp/libsignal_jni_aarch64.so; \ fi -COPY --from=builder /app/sup /usr/local/bin/sup +COPY --from=builder /app/prism /usr/local/bin/prism COPY --from=builder /app/server/public /public ENV PATH="/usr/local/signal-cli/bin:${PATH}" @@ -42,4 +42,4 @@ ENV LD_LIBRARY_PATH="/usr/local/signal-cli/lib:${LD_LIBRARY_PATH}" EXPOSE 8080 -CMD ["sup"] +CMD ["prism"] diff --git a/server/constants/config.ts b/server/constants/config.ts index 38819ca..4c2358d 100644 --- a/server/constants/config.ts +++ b/server/constants/config.ts @@ -4,15 +4,15 @@ export const VERBOSE_LOGGING = Bun.env.VERBOSE_LOGGING === 'true'; export const ALLOW_INSECURE_HTTP = Bun.env.ALLOW_INSECURE_HTTP === 'true'; export const RATE_LIMIT = Number.parseInt(Bun.env.RATE_LIMIT || '100', 10); -export const DEVICE_NAME = Bun.env.DEVICE_NAME || 'SUP'; +export const DEVICE_NAME = Bun.env.DEVICE_NAME || 'PRISM'; -export const SUP_ENDPOINT_PREFIX = `[${DEVICE_NAME}:`; +export const PRISM_ENDPOINT_PREFIX = `[${DEVICE_NAME}:`; export const PROTON_IMAP_USERNAME = Bun.env.PROTON_IMAP_USERNAME; export const PROTON_IMAP_PASSWORD = Bun.env.PROTON_IMAP_PASSWORD; export const PROTON_BRIDGE_HOST = Bun.env.PROTON_BRIDGE_HOST || 'protonmail-bridge'; export const PROTON_BRIDGE_PORT = Number.parseInt(Bun.env.PROTON_BRIDGE_PORT || '143', 10); -export const PROTON_SUP_TOPIC = Bun.env.PROTON_SUP_TOPIC || 'Proton Mail'; +export const PROTON_PRISM_TOPIC = Bun.env.PROTON_PRISM_TOPIC || 'Proton Mail'; export const IMAP_INBOX = 'INBOX'; export const IMAP_SEEN_FLAG = '\\Seen'; diff --git a/server/constants/paths.ts b/server/constants/paths.ts index 2cc10ee..e56c235 100644 --- a/server/constants/paths.ts +++ b/server/constants/paths.ts @@ -7,7 +7,7 @@ export const SIGNAL_CLI_SOCKET = '/tmp/signal-cli.sock'; export const SIGNAL_CLI_DATA_DIR = `${HOME}/.local/share/signal-cli`; export const SIGNAL_CLI_DATA = `${HOME}/.local/share/signal-cli/data`; -export const SUP_DB = `${HOME}/.local/share/sup/store.db`; +export const PRISM_DB = `${HOME}/.local/share/prism/store.db`; const PUBLIC_DIR_LOCAL = `${import.meta.dir}/../public`; export const PUBLIC_DIR = (await Bun.file(`${PUBLIC_DIR_LOCAL}/favicon.webp`).exists()) diff --git a/server/index.ts b/server/index.ts index 0a67601..0402348 100644 --- a/server/index.ts +++ b/server/index.ts @@ -94,7 +94,7 @@ const server = Bun.serve({ idleTimeout: 30, }); -logInfo(`\nSUP running on:`); +logInfo(`\nPRISM running on:`); logInfo(` Local: http://localhost:${server.port}`); const lanIP = getLanIP(); diff --git a/server/modules/proton-mail.ts b/server/modules/proton-mail.ts index f44ef81..10af834 100644 --- a/server/modules/proton-mail.ts +++ b/server/modules/proton-mail.ts @@ -10,7 +10,7 @@ import { PROTON_BRIDGE_PORT, PROTON_IMAP_PASSWORD, PROTON_IMAP_USERNAME, - PROTON_SUP_TOPIC, + PROTON_PRISM_TOPIC, } from '@/constants/config'; import { sendNotification as sendChannelNotification } from '@/modules/notifications'; import { logError, logInfo, logSuccess, logVerbose, logWarn } from '@/utils/log'; @@ -124,7 +124,7 @@ export async function startProtonMonitor() { const uid = await uidPromise; - await sendChannelNotification(`${ENDPOINT_PREFIX_PROTON}${PROTON_SUP_TOPIC}`, { + await sendChannelNotification(`${ENDPOINT_PREFIX_PROTON}${PROTON_PRISM_TOPIC}`, { title: from, message: subject, actions: [ diff --git a/server/modules/store.ts b/server/modules/store.ts index 99b266b..c6e3b9a 100644 --- a/server/modules/store.ts +++ b/server/modules/store.ts @@ -1,5 +1,7 @@ import { Database } from 'bun:sqlite'; -import { SUP_DB } from '@/constants/paths'; +import { mkdirSync } from 'node:fs'; +import { dirname } from 'node:path'; +import { PRISM_DB } from '@/constants/paths'; import type { NotificationChannel } from '@/types/notifications'; type EndpointMapping = { @@ -10,7 +12,8 @@ type EndpointMapping = { upEndpoint: string | null; }; -const db = new Database(SUP_DB); +mkdirSync(dirname(PRISM_DB), { recursive: true }); +const db = new Database(PRISM_DB); db.run(` CREATE TABLE IF NOT EXISTS mappings ( diff --git a/server/public/favicon.webp b/server/public/favicon.webp index 2a011b0fe1b4629ba864ee57a2a7e64f1be92dc3..87636f6acf6279bb2ad928d793ea910cde479df5 100644 GIT binary patch literal 664 zcmV;J0%!eFNk&GH0ssJ4MM6+kP&il$0000G0000V0018V06|PpNGSmT00DsG|Nr^r z8-6wQZ{%vO#?)lr!M5EATw@pD5sb-h{44+P#UG#a#lI6o!~~#!u2ocM0ZCmmjFlvH zk*yB^0JjYhYJ&2&Oy4i?Y-Fj3o3ms57l30tN=B>PBbb5cZb^tx>XO~mJs|!*A1_dH zWxl^qkUlHojr$FQfvg{(n>Wl}2}m;n9lRmp#&XstwDSh=3z1`=v`yqy0e!(Oyne%l z6+G+Bygofp{rHW@kyqBn8=x-==sRr@z^^KFk$&q%ftUH)cmtLj%lUlJ$s44vBrv0( zf5=%3x_G5e;FklqFXo}lbxY1zOGTpL^`|0!Kfqy?h9u+W+H03SAYE9vnF=&SZ=sqly3k z{{L!q@o5zY$3wR6kDtmtsEL10^a63??usX7-$7p&u6#MANXeUTy68a_cDc4!iIP6q#vc{?z#1`V2V#)d~&VJZot(WwCml= zYuqBu0{;>k$Xx6b<6IsZHf6RNgo>`1CO*U(%1S|qmoDtBd&sk$LSL^cR>0iFd*f!6 z(;wW^QEbzTjAZ^|9$xI;^Iz!}-3_nZXU31V#V?gWPjr#&AdY#z=_SDufT+Rcn$twg y8z6hp{yiA4)z=Sw?uBB1?VmPEjhicQGyjaOWwW7w<<|rOy9OH;E4v+wId^z9% literal 950 zcmV;n14;Z+Nk&Gl0{{S5MM6+kP&il$0000G0000V0018V06|PpNFMpOD%7+#$=7P{R*0+gH;nEbvtRCZimeVix*|jP!pE z7bDeuGUC?`jB*K7hI+M znI1%HQgK==-l(Iy>Bc~xTeGi&R|76Qkg^AImOudh{*@$7%vb1lm)t!94ru@BIj=`6 zs_Bl`h7SMq*~x(k#2CTeoPnS8cxx5_jW!sBtI57$1_1F|>- z|JQ$W)hZPq>d`=tB6|#4d;Ib)?Is>)@b*A9vE47at$qP>$$Ywo3LQ;KkFL+Ze*M$k zP4;m{Y8=MC8^yp0zmF*QYi*8*uMx_WhrO>=6$K}?|`po=HLBa z{wLR8-p=tKdYdmu=}6teZI7xpS7mB>JNu5XzT$h^JC^hRZ-1h#r!V5hNgM;lpDa24 zT>y`K1o{WRPf))08_)i>&G7#ZbJii}m;&cd*A=vE1jgZSEL!F}P2lYTLJ$A&dB+eV zI~vw8LLXJ$u8%reBjgYAF!{r4&$q|1l*zdY%L&nI{ZARlGybAJ5InOx0(a?pjlo6Y zvTkkRZ#icx%kb@TRrN72CCEjf1JzdQtXOgQemTDIowi=rgv*v*aGiBc69FX}0el$~ z!4=pTb6%NU#zMUv*Hl2hk0?Pq5F$wtzxyXhwPyYF5dp_5wg&jLk1p0GO`i0}9C#jO YPl*zQJVXY&!=mC&?(-0i`UMaG0QP9dVgLXD diff --git a/server/public/icon-512.webp b/server/public/icon-512.webp deleted file mode 100644 index c6be5f355b092c56335dfdd82542dd13f6432bf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24712 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 bXw%LE+5i9m03W5(#Q*>R0000000000pSz9P diff --git a/server/public/index.html b/server/public/index.html index c4f0dc4..a7da615 100644 --- a/server/public/index.html +++ b/server/public/index.html @@ -2,7 +2,7 @@ - SUP Admin + PRISM Admin diff --git a/server/public/manifest.json b/server/public/manifest.json index d89df99..8934c4b 100644 --- a/server/public/manifest.json +++ b/server/public/manifest.json @@ -1,6 +1,6 @@ { - "name": "SUP Admin", - "short_name": "SUP", + "name": "PRISM Admin", + "short_name": "PRISM", "description": "Notification gateway admin panel", "start_url": "/", "display": "standalone", diff --git a/server/routes/admin.ts b/server/routes/admin.ts index 65dfb89..ce1be31 100644 --- a/server/routes/admin.ts +++ b/server/routes/admin.ts @@ -26,7 +26,7 @@ admin.use( '*', basicAuth({ verifyUser: (_, password, c) => verifyApiKey(password, c), - realm: 'SUP Admin - Username: any, Password: API_KEY', + realm: 'PRISM Admin - Username: any, Password: API_KEY', }), ); diff --git a/server/routes/ntfy.ts b/server/routes/ntfy.ts index 2c78105..a116f86 100644 --- a/server/routes/ntfy.ts +++ b/server/routes/ntfy.ts @@ -10,7 +10,7 @@ ntfy.use( '*', basicAuth({ verifyUser: (_, password) => verifyApiKey(password), - realm: 'SUP ntfy - Username: any, Password: API_KEY', + realm: 'PRISM ntfy - Username: any, Password: API_KEY', }), ); diff --git a/server/routes/proton-mail.ts b/server/routes/proton-mail.ts index da90df1..ed6af75 100644 --- a/server/routes/proton-mail.ts +++ b/server/routes/proton-mail.ts @@ -10,7 +10,7 @@ protonMail.use( '*', basicAuth({ verifyUser: (_, password, c) => verifyApiKey(password, c), - realm: 'SUP Proton Mail - Username: any, Password: API_KEY', + realm: 'PRISM Proton Mail - Username: any, Password: API_KEY', }), ); diff --git a/server/routes/webhook.ts b/server/routes/webhook.ts index 49c98b8..eb24f40 100644 --- a/server/routes/webhook.ts +++ b/server/routes/webhook.ts @@ -11,7 +11,7 @@ webhook.use( '*', basicAuth({ verifyUser: (_, password) => verifyApiKey(password), - realm: 'SUP Webhook - Username: any, Password: API_KEY', + realm: 'PRISM Webhook - Username: any, Password: API_KEY', }), );