Main: Begin derived app rewrite into remnantchat.

This commit is contained in:
Gary 2024-01-03 18:09:51 -08:00
parent d546fef71c
commit 6003270216
41 changed files with 184 additions and 710 deletions

2
.env
View File

@ -1,2 +1,2 @@
REACT_APP_NAME=$npm_package_name REACT_APP_NAME=$npm_package_name
REACT_APP_GITHUB_REPO="https://github.com/jeremyckahn/chitchatter" REACT_APP_GITHUB_REPO="https://githaven.org/shiloh/remnantchat"

View File

@ -1,23 +0,0 @@
name: Community Room Request
description: Request a new Community Room
title: '[Community Room Request]: '
labels: ['room request']
assignees:
- jeremyckahn
body:
- type: input
id: room-url
attributes:
label: Room URL
description: What is the Chitchatter URL for this room?
placeholder: ex. https://chitchatter.im/public/room-subject
validations:
required: true
- type: input
id: room-subject
attributes:
label: Room Subject
description: What should be discussed in this room?
placeholder: ex. Technology, video games, etc.
validations:
required: true

View File

@ -1,26 +0,0 @@
name: CI
on:
push:
branches:
- '**'
# - '!main'
jobs:
test_and_build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
- run: npm ci
- run: npm test
- name: 'Build web app artifacts'
run: npm run build
- uses: actions/upload-artifact@v3
with:
name: build-output
path: build

View File

@ -1,34 +0,0 @@
name: Deploy to Github Pages
on:
push:
branches:
- main
workflow_dispatch:
jobs:
deployment:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
cache: 'npm'
- name: Build
run: |
npm ci
npm run build
npm run analyze -- --html build/bundle-info.html
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.DEPLOY_KEY }}
publish_dir: ./build
force_orphan: true

View File

@ -1,34 +0,0 @@
name: Perform Security Audit with ZAProxy
# Use ZAP Proxy to perform a full scan of the production site.
on:
# manually trigger workflow
workflow_dispatch:
# Listen for Production deployments
workflow_run:
workflows: [pages-build-deployment]
types:
- completed
jobs:
zap_scan:
runs-on: ubuntu-latest
name: Scan Production Site
steps:
- name: Set Date (NOW) as Variable
id: set-now
run: |
echo "NOW=$(date +'%Y-%m-%d')" >> "$GITHUB_OUTPUT"
- name: Checkout Repo for .zap/rules.tsv
uses: actions/checkout@v4
- name: ZAP Full Scan
# https://github.com/zaproxy/action-full-scan
uses: zaproxy/action-full-scan@v0.7.0
with:
target: 'https://chitchatter.im/'
rules_file_name: '.zap/rules.tsv'
artifact_name: 'zap_scan_${{ steps.set-now.outputs.NOW }}'
allow_issue_writing: false

View File

@ -1,10 +1,8 @@
# Chitchatter # RemnantChat
![Chitchatter logo](./public/logo/logo.svg) ![RemnantChat logo](./public/logo/logo.svg)
<sub>Logo provided by [@ramyashreeshetty](https://github.com/ramyashreeshetty)</sub> RemnantChat is a free (as in both price and freedom) communication tool. Designed to be the simplest way to connect with others privately and securely, it is:
Chitchatter is a free (as in both price and freedom) communication tool. Designed to be the simplest way to connect with others privately and securely, it is:
- Fully open source (licensed under [GPL v2](./LICENSE)) - Fully open source (licensed under [GPL v2](./LICENSE))
- Peer-to-peer - Peer-to-peer
@ -13,19 +11,19 @@ Chitchatter is a free (as in both price and freedom) communication tool. Designe
- Ephemeral - Ephemeral
- Message content is never persisted to disk on either the client or server - Message content is never persisted to disk on either the client or server
- Decentralized - Decentralized
- There is no API server. All that's required for Chitchatter to function is availability of GitHub for static assets, and public WebTorrent and STUN/TURN relay servers for establishing peer-to-peer communication. - There is no API server. All that's required for RemnantChat to function is availability of GitHub for static assets, and public WebTorrent and STUN/TURN relay servers for establishing peer-to-peer communication.
- Embeddable - Embeddable
- [Self-hostable](#self-hosting) - [Self-hostable](#self-hosting)
Chitchatter uses the [Create React App](https://github.com/facebook/create-react-app) toolchain. The secure networking and streaming magic would not be possible without [Trystero](https://github.com/dmotz/trystero). File transfer functionality is powered by [`secure-file-transfer`](https://github.com/jeremyckahn/secure-file-transfer). RemnantChat uses the [Create React App](https://github.com/facebook/create-react-app) toolchain. The secure networking and streaming magic would not be possible without [Trystero](https://github.com/dmotz/trystero). File transfer functionality is powered by [`secure-file-transfer`](https://github.com/jeremyckahn/secure-file-transfer).
## Status ## Status
- [![Known Vulnerabilities](https://snyk.io/test/github/jeremyckahn/chitchatter/badge.svg?targetFile=package.json)](https://snyk.io/test/github/jeremyckahn/chitchatter?targetFile=package.json) - [![Known Vulnerabilities](https://snyk.io/test/github/jeremyckahn/RemnantChat/badge.svg?targetFile=package.json)](https://snyk.io/test/github/jeremyckahn/RemnantChat?targetFile=package.json)
## How to use it ## How to use it
Open https://chitchatter.im/ and join a room to start chatting with anyone else who is in the room. By default, room names are random [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)s that are generated client-side. To privately communicate with someone, it is recommended to join one of these randomly-generated rooms and share the URL (via the "🔗" button at the top of the page) to whomever you wish to communicate with via a secure medium of your choosing (such as [Burner Note](https://burnernote.com/) or [Yopass](https://yopass.se/)). Your user name will be presented to you, and it would be good to share that with who you will be chatting with beforehand so they know they're talking to you. Open https://RemnantChat.im/ and join a room to start chatting with anyone else who is in the room. By default, room names are random [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)s that are generated client-side. To privately communicate with someone, it is recommended to join one of these randomly-generated rooms and share the URL (via the "🔗" button at the top of the page) to whomever you wish to communicate with via a secure medium of your choosing (such as [Burner Note](https://burnernote.com/) or [Yopass](https://yopass.se/)). Your user name will be presented to you, and it would be good to share that with who you will be chatting with beforehand so they know they're talking to you.
## Features ## Features
@ -47,7 +45,7 @@ Open https://chitchatter.im/ and join a room to start chatting with anyone else
## Anti-features ## Anti-features
- Messages are never persisted to disk. When you leave a peer room, messages are cleared from memory and cannot be retrieved. - Messages are never persisted to disk. When you leave a peer room, messages are cleared from memory and cannot be retrieved.
- Chitchatter is an entirely client-side communication app. It uses public WebTorrent servers to establish peer connections and STUN/TURN relay servers when direct peer-to-peer connections cannot be established, but there is no Chitchatter API server. - RemnantChat is an entirely client-side communication app. It uses public WebTorrent servers to establish peer connections and STUN/TURN relay servers when direct peer-to-peer connections cannot be established, but there is no RemnantChat API server.
- No analytics, tracking, or telemetry of any kind. - No analytics, tracking, or telemetry of any kind.
- This is a community-driven and unfunded project that makes no money. The users come first and there is no corporate influence or financial interest involved. - This is a community-driven and unfunded project that makes no money. The users come first and there is no corporate influence or financial interest involved.
@ -55,11 +53,11 @@ Open https://chitchatter.im/ and join a room to start chatting with anyone else
There is no shortage of user-friendly chat apps available, but they rely on a central service to facilitate communication. It is difficult to trust these central services, as commercial interests and [government pressure](https://www.npr.org/2022/08/12/1117092169/nebraska-cops-used-facebook-messages-to-investigate-an-alleged-illegal-abortion) can compel service operators to work against the best interest of the users. Even when user data is handled in good faith by service operators, the possibility remains that [encrypted data held at rest may be decrypted](https://www.cbsnews.com/news/fbi-may-have-found-way-to-unlock-san-bernardino-shooters-iphone/) against the user's will. There is no shortage of user-friendly chat apps available, but they rely on a central service to facilitate communication. It is difficult to trust these central services, as commercial interests and [government pressure](https://www.npr.org/2022/08/12/1117092169/nebraska-cops-used-facebook-messages-to-investigate-an-alleged-illegal-abortion) can compel service operators to work against the best interest of the users. Even when user data is handled in good faith by service operators, the possibility remains that [encrypted data held at rest may be decrypted](https://www.cbsnews.com/news/fbi-may-have-found-way-to-unlock-san-bernardino-shooters-iphone/) against the user's will.
Chitchatter designs around these risks with a [web meshe architecture](https://dev.to/jeremyckahn/taking-the-power-back-with-web-meshes-omg). There is no central service operator that stores or potentially mishandles communication data. Some services are required to establish an initial connection between peers, but otherwise the app uses direct peer-to-peer communication for everything. Any services that are used by Chitchatter have no association with the project and are publicly available for all to use. RemnantChat designs around these risks with a [web meshe architecture](https://dev.to/jeremyckahn/taking-the-power-back-with-web-meshes-omg). There is no central service operator that stores or potentially mishandles communication data. Some services are required to establish an initial connection between peers, but otherwise the app uses direct peer-to-peer communication for everything. Any services that are used by RemnantChat have no association with the project and are publicly available for all to use.
## Use cases ## Use cases
Chitchatter offers a private and secure solution for: RemnantChat offers a private and secure solution for:
- Organizing groups of people, such as unions or political movements - Organizing groups of people, such as unions or political movements
- Conveniently moving text or data from one device to another - Conveniently moving text or data from one device to another
@ -75,30 +73,30 @@ Chitchatter offers a private and secure solution for:
### 💻️ Project status ### 💻️ Project status
I consider Chitchatter feature-complete inasmuch it does all the things I personally need it to do. I don't have specific plans to add significant functionality in the future, but I may do so if it seems fun to me at the time. **I am committed to fixing any significant bugs** that are reported, so please [open an issue](https://github.com/jeremyckahn/chitchatter/issues/new) if you discover one! Aside from that, Chitchatter is effectively in maintenance mode for the foreseeable future. I consider RemnantChat feature-complete inasmuch it does all the things I personally need it to do. I don't have specific plans to add significant functionality in the future, but I may do so if it seems fun to me at the time. **I am committed to fixing any significant bugs** that are reported, so please [open an issue](https://github.com/jeremyckahn/RemnantChat/issues/new) if you discover one! Aside from that, RemnantChat is effectively in maintenance mode for the foreseeable future.
If you would like a feature to be implemented and are willing to pay a development cost to ensure it gets done, please file a GitHub issue describing the feature and indicate that you are willing to compensate for the work. If you are not willing to pay, please open a GitHub issue regardless. I may implement it if it seems fun to do so, but other members of the community may also step up to implement it via Pull Requests. If you would like a feature to be implemented and are willing to pay a development cost to ensure it gets done, please file a GitHub issue describing the feature and indicate that you are willing to compensate for the work. If you are not willing to pay, please open a GitHub issue regardless. I may implement it if it seems fun to do so, but other members of the community may also step up to implement it via Pull Requests.
I will always make time support Pull Requests from others. If you're willing to put in the work to improve Chitchatter, I am willing to help shepherd that work along and get it shipped. I will always make time support Pull Requests from others. If you're willing to put in the work to improve RemnantChat, I am willing to help shepherd that work along and get it shipped.
If you don't agree with the direction of the project, you are welcome to fork Chitchatter and take it in another one. If you don't agree with the direction of the project, you are welcome to fork RemnantChat and take it in another one.
### 🏗️ Support and custom development ### 🏗️ Support and custom development
I'm willing to do paid installations and customizations of Chitchatter for your needs. If you'd like to contract me to make a version of Chitchatter that is custom built for you, please email me at jeremyckahn@gmail.com and let me know what you have in mind to get started. I'm willing to do paid installations and customizations of RemnantChat for your needs. If you'd like to contract me to make a version of RemnantChat that is custom built for you, please email me at jeremyckahn@gmail.com and let me know what you have in mind to get started.
--- ---
## Veracity ## Veracity
The core of Chitchatter's security model is the fact that it is fully open source. You are free (and encouraged) to fully audit the project source code and infrastructure. Not only is the source code available under the terms of the [GPL](./LICENSE), but [all build logs are publicly accessible](https://github.com/jeremyckahn/chitchatter/actions/workflows/pages/pages-build-deployment) as well. The core of RemnantChat's security model is the fact that it is fully open source. You are free (and encouraged) to fully audit the project source code and infrastructure. Not only is the source code available under the terms of the [GPL](./LICENSE), but [all build logs are publicly accessible](https://github.com/jeremyckahn/RemnantChat/actions/workflows/pages/pages-build-deployment) as well.
If you would like to verify that the app hosted at https://chitchatter.im/ is the one that is hosted on GitHub, you can use `dig`: If you would like to verify that the app hosted at https://RemnantChat.im/ is the one that is hosted on GitHub, you can use `dig`:
``` ```
$ dig chitchatter.im $ dig RemnantChat.im
; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> chitchatter.im ; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> RemnantChat.im
;; global options: +cmd ;; global options: +cmd
;; Got answer: ;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61332 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61332
@ -107,17 +105,17 @@ $ dig chitchatter.im
;; OPT PSEUDOSECTION: ;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494 ; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION: ;; QUESTION SECTION:
;chitchatter.im. IN A ;RemnantChat.im. IN A
;; ANSWER SECTION: ;; ANSWER SECTION:
chitchatter.im. 231 IN CNAME jeremyckahn.github.io. RemnantChat.im. 231 IN CNAME jeremyckahn.github.io.
jeremyckahn.github.io. 231 IN A 185.199.111.153 jeremyckahn.github.io. 231 IN A 185.199.111.153
jeremyckahn.github.io. 231 IN A 185.199.110.153 jeremyckahn.github.io. 231 IN A 185.199.110.153
jeremyckahn.github.io. 231 IN A 185.199.109.153 jeremyckahn.github.io. 231 IN A 185.199.109.153
jeremyckahn.github.io. 231 IN A 185.199.108.153 jeremyckahn.github.io. 231 IN A 185.199.108.153
``` ```
To examine the static assets that are served to end users, you can audit the [`gh-pages` branch](https://github.com/jeremyckahn/chitchatter/tree/gh-pages). To examine the static assets that are served to end users, you can audit the [`gh-pages` branch](https://github.com/jeremyckahn/RemnantChat/tree/gh-pages).
## Project roadmap ## Project roadmap
@ -125,26 +123,26 @@ See the full ticket backlog [here](https://github.com/users/jeremyckahn/projects
## Environments ## Environments
- Production environment: https://chitchatter.im/ - Production environment: https://RemnantChat.im/
- Mirror: https://chitchatter.vercel.app/ (note that peers cannot connect across domains) - Mirror: https://RemnantChat.vercel.app/ (note that peers cannot connect across domains)
- Staging: https://chitchatter-git-develop-jeremyckahn.vercel.app/ - Staging: https://RemnantChat-git-develop-jeremyckahn.vercel.app/
## SDK ## SDK
You can use the official Chitchatter SDK to embed the app as a [Web Component](https://developer.mozilla.org/en-US/docs/Web/API/Web_components) called `<chat-room />`. You can use the official RemnantChat SDK to embed the app as a [Web Component](https://developer.mozilla.org/en-US/docs/Web/API/Web_components) called `<chat-room />`.
```html ```html
<script src="https://chitchatter.im/sdk.js"></script> <script src="https://RemnantChat.im/sdk.js"></script>
<chat-room /> <chat-room />
``` ```
The `<chat-room />` component supports the following optional attributes: The `<chat-room />` component supports the following optional attributes:
- `room`: The name of the Chitchatter room the user should join. The default value is the URL of the embedding page. - `room`: The name of the RemnantChat room the user should join. The default value is the URL of the embedding page.
- `user-name`: The friendly name of the user (which they can change). - `user-name`: The friendly name of the user (which they can change).
- `user-id`: The static ID of the user. The default value is a random UUID. - `user-id`: The static ID of the user. The default value is a random UUID.
- `root-url`: The URL of the Chitchatter instance to use. The default value is `https://chitchatter.im/`. - `root-url`: The URL of the RemnantChat instance to use. The default value is `https://RemnantChat.im/`.
- `color-mode`: `light` or `dark`. The default value is `dark`. - `color-mode`: `light` or `dark`. The default value is `dark`.
- `play-message-sound`: Whether or not to play a sound when a user receives a message while the window is not in focus. The default value is `false`. - `play-message-sound`: Whether or not to play a sound when a user receives a message while the window is not in focus. The default value is `false`.
@ -183,18 +181,18 @@ The build is minified and the filenames include the hashes.
### Self-hosting ### Self-hosting
Chitchatter is designed to be forked and self-hosted. If you would like to change pairing or relay server configuration, or you simply prefer to control your own builds and versions, just [fork this repo](https://github.com/jeremyckahn/chitchatter/fork) and follow the steps below. RemnantChat is designed to be forked and self-hosted. If you would like to change pairing or relay server configuration, or you simply prefer to control your own builds and versions, just [fork this repo](https://github.com/jeremyckahn/RemnantChat/fork) and follow the steps below.
#### Caveats #### Caveats
Chitchatter peer connections are bound to the instance's domain. So, a user of Chitchatter at https://chitchatter.im/ would not be able to connect to a user of a Chitchatter instance on another domain (such as a personal GitHub Pages-hosted fork). RemnantChat peer connections are bound to the instance's domain. So, a user of RemnantChat at https://RemnantChat.im/ would not be able to connect to a user of a RemnantChat instance on another domain (such as a personal GitHub Pages-hosted fork).
#### Necessary steps after forking #### Necessary steps after forking
Assuming you are hosting Chitchatter on [GitHub Pages](https://pages.github.com/): Assuming you are hosting RemnantChat on [GitHub Pages](https://pages.github.com/):
1. Change the [`homepage` property in `package.json`](https://github.com/jeremyckahn/chitchatter/blob/1ea67e2c3a45115e054ebfe3457f2c3572c6213b/package.json#L4) to whatever URL your Chitchatter instance will be hosted from. This will be something like `https://github_user_or_org_name.github.io/chitchatter/`. 1. Change the [`homepage` property in `package.json`](https://github.com/jeremyckahn/RemnantChat/blob/1ea67e2c3a45115e054ebfe3457f2c3572c6213b/package.json#L4) to whatever URL your RemnantChat instance will be hosted from. This will be something like `https://github_user_or_org_name.github.io/RemnantChat/`.
2. Define a [`DEPLOY_KEY` GitHub Action secret](https://github.com/jeremyckahn/chitchatter/blob/e2bac732cf1288f7b5d0bec151098f18e8b1d0d6/.github/workflows/deploy.yml#L28-L31) (at `https://github.com/github_user_or_org_name/chitchatter/settings/secrets/actions`). See the docs for [`peaceiris/actions-gh-pages`](https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-set-ssh-private-key-deploy_key) for more information. 2. Define a [`DEPLOY_KEY` GitHub Action secret](https://github.com/jeremyckahn/RemnantChat/blob/e2bac732cf1288f7b5d0bec151098f18e8b1d0d6/.github/workflows/deploy.yml#L28-L31) (at `https://github.com/github_user_or_org_name/RemnantChat/settings/secrets/actions`). See the docs for [`peaceiris/actions-gh-pages`](https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-set-ssh-private-key-deploy_key) for more information.
#### Deployment #### Deployment
@ -212,7 +210,7 @@ Explore the files in `src/config` to modify pairing and relay server configurati
### Troubleshooting ### Troubleshooting
If you run into any issues with a custom Chitchatter installation, first ensure that you are using [the latest version of the code](https://github.com/jeremyckahn/chitchatter/tree/main). If you are hosting your installation with GitHub Pages, sync your `main` branch and _not_ your `gh-pages` branch. Updating your `main` branch will trigger a proper rebuild of your `gh-pages` branch. If you run into any issues with a custom RemnantChat installation, first ensure that you are using [the latest version of the code](https://github.com/jeremyckahn/RemnantChat/tree/main). If you are hosting your installation with GitHub Pages, sync your `main` branch and _not_ your `gh-pages` branch. Updating your `main` branch will trigger a proper rebuild of your `gh-pages` branch.
- https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork - https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork
@ -222,28 +220,28 @@ This could happen for a variety of reasons. The most likely of which is that one
##### Issues specific to browsers with ad blocking extensions ##### Issues specific to browsers with ad blocking extensions
Some ad blockers (such as uBlock Origin) prevent connections to certain WebTorrent servers. This prevents Chitchatter peers from connecting. To work around this, you can either disable your ad blocker or [self-host your own Chitchatter instance](#self-hosting). Some ad blockers (such as uBlock Origin) prevent connections to certain WebTorrent servers. This prevents RemnantChat peers from connecting. To work around this, you can either disable your ad blocker or [self-host your own RemnantChat instance](#self-hosting).
##### Issues specific to iOS Safari ##### Issues specific to iOS Safari
Chitchatter works on iOS Safari, but browser-level bugs often prevent peers from rejoining the room when the browser is closed and later reopened (for instance, when switching applications). The suggested workaround for this issue is to refresh the page to rejoin the room. RemnantChat works on iOS Safari, but browser-level bugs often prevent peers from rejoining the room when the browser is closed and later reopened (for instance, when switching applications). The suggested workaround for this issue is to refresh the page to rejoin the room.
##### Issues specific to Firefox ##### Issues specific to Firefox
Per [#36](https://github.com/jeremyckahn/chitchatter/issues/36), check your `about:config` settings and ensure that `media.peerconnection.enabled` is **enabled**. Per [#36](https://github.com/jeremyckahn/RemnantChat/issues/36), check your `about:config` settings and ensure that `media.peerconnection.enabled` is **enabled**.
##### Security ##### Security
Chitchatter undergoes [weekly security audits](https://github.com/jeremyckahn/chitchatter/blob/develop/.github/workflows/security.yml) to identify and address potential vulnerabilities. Reports from all audits can be found in [**Issues**](https://github.com/jeremyckahn/chitchatter/issues?q=%22Security+Report+-+%22). RemnantChat undergoes [weekly security audits](https://github.com/jeremyckahn/RemnantChat/blob/develop/.github/workflows/security.yml) to identify and address potential vulnerabilities. Reports from all audits can be found in [**Issues**](https://github.com/jeremyckahn/RemnantChat/issues?q=%22Security+Report+-+%22).
### Contributors ### Contributors
<p align="center"> <p align="center">
<a href="https://github.com/jeremyckahn/chitchatter/graphs/contributors"> <a href="https://github.com/jeremyckahn/RemnantChat/graphs/contributors">
<img src="https://contrib.rocks/image?repo=jeremyckahn/chitchatter" /> <img src="https://contrib.rocks/image?repo=jeremyckahn/RemnantChat" />
</a> </a>
</p> </p>
## ⚠️ [Disclaimer](https://chitchatter.im/disclaimer) ## ⚠️ [Disclaimer](https://RemnantChat.im/disclaimer)
By using Chitchatter, you agree to accept **full responsibility** for your actions related to its use. Additionally, you agree **not** to hold any contributors to the Chitchatter project responsible for any result of your use of it. The developers of Chitchatter do not endorse illegal activity. By using RemnantChat, you agree to accept **full responsibility** for your actions related to its use. Additionally, you agree **not** to hold any contributors to the RemnantChat project responsible for any result of your use of it. The developers of RemnantChat do not endorse illegal activity.

6
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "chitchatter", "name": "remnantchat",
"version": "0.0.0", "version": "0.0.0",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "chitchatter", "name": "remnantchat",
"version": "0.0.0", "version": "0.0.1",
"license": "GPL-2.0-or-later", "license": "GPL-2.0-or-later",
"dependencies": { "dependencies": {
"@emotion/react": "^11.10.0", "@emotion/react": "^11.10.0",

View File

@ -1 +1 @@
chitchatter.im remnant.chat

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -24,7 +24,7 @@
work correctly both with client-side routing and a non-root public URL. work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`. Learn how to configure a non-root public URL by running `npm run build`.
--> -->
<title>Chitchatter</title> <title>RemnantChat</title>
<!-- Start Single Page Apps for GitHub Pages --> <!-- Start Single Page Apps for GitHub Pages -->
<script type="text/javascript"> <script type="text/javascript">
// Single Page Apps for GitHub Pages // Single Page Apps for GitHub Pages

View File

@ -1 +1,70 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="500" zoomAndPan="magnify" viewBox="0 0 375 374.999991" height="500" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><clipPath id="7de9461a18"><path d="M 71.738281 39.585938 L 303.476562 39.585938 L 303.476562 271.671875 L 71.738281 271.671875 Z M 71.738281 39.585938 " clip-rule="nonzero"/></clipPath><clipPath id="dd6ae01401"><path d="M 161.007812 254.363281 L 294.71875 254.363281 L 294.71875 335.777344 L 161.007812 335.777344 Z M 161.007812 254.363281 " clip-rule="nonzero"/></clipPath></defs><g clip-path="url(#7de9461a18)"><path fill="#1976d2" d="M 148.070312 249.8125 C 118.234375 232.945312 98.09375 200.933594 98.09375 164.207031 C 98.09375 109.9375 142.074219 65.945312 196.332031 65.945312 C 226.316406 65.945312 253.160156 79.390625 271.179688 100.574219 L 303.476562 100.574219 C 281.75 64.054688 241.898438 39.585938 196.332031 39.585938 C 127.519531 39.585938 71.738281 95.382812 71.738281 164.207031 C 71.738281 209.835938 96.257812 249.730469 132.828125 271.445312 L 148.070312 249.8125 " fill-opacity="1" fill-rule="nonzero"/></g><g clip-path="url(#dd6ae01401)"><path fill="#1976d2" d="M 225.441406 258.078125 C 224.351562 258.417969 223.253906 258.738281 222.152344 259.039062 L 161.152344 283.789062 C 165.308594 285.011719 169.554688 286.027344 173.882812 286.8125 L 294.566406 335.777344 L 237.386719 254.613281 C 233.496094 256.03125 229.507812 257.195312 225.441406 258.078125 " fill-opacity="1" fill-rule="nonzero"/></g><path fill="#d9d9d9" d="M 205.59375 231.441406 C 241.128906 231.441406 269.9375 202.625 269.9375 167.078125 C 269.9375 131.535156 241.128906 102.71875 205.59375 102.71875 C 185.953125 102.71875 168.371094 111.523438 156.566406 125.398438 L 135.414062 125.398438 C 149.644531 101.480469 175.746094 85.453125 205.59375 85.453125 C 250.664062 85.453125 287.199219 122 287.199219 167.078125 C 287.199219 207.140625 258.347656 240.460938 220.296875 247.382812 L 141.25 279.453125 L 179.089844 225.742188 C 187.171875 229.402344 196.144531 231.441406 205.59375 231.441406 " fill-opacity="1" fill-rule="nonzero"/><path fill="#1976d2" d="M 181.148438 164.210938 C 181.148438 170.050781 176.414062 174.789062 170.574219 174.789062 C 164.734375 174.789062 160 170.050781 160 164.210938 C 160 158.367188 164.734375 153.632812 170.574219 153.632812 C 176.414062 153.632812 181.148438 158.367188 181.148438 164.210938 " fill-opacity="1" fill-rule="nonzero"/><path fill="#1976d2" d="M 212.996094 164.210938 C 212.996094 170.050781 208.261719 174.789062 202.421875 174.789062 C 196.578125 174.789062 191.84375 170.050781 191.84375 164.210938 C 191.84375 158.367188 196.578125 153.632812 202.421875 153.632812 C 208.261719 153.632812 212.996094 158.367188 212.996094 164.210938 " fill-opacity="1" fill-rule="nonzero"/><path fill="#1976d2" d="M 244.84375 164.210938 C 244.84375 170.050781 240.105469 174.789062 234.265625 174.789062 C 228.425781 174.789062 223.691406 170.050781 223.691406 164.210938 C 223.691406 158.367188 228.425781 153.632812 234.265625 153.632812 C 240.105469 153.632812 244.84375 158.367188 244.84375 164.210938 " fill-opacity="1" fill-rule="nonzero"/></svg> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg1"
width="200.65968"
height="200.65968"
viewBox="0 0 200.65968 200.65968"
sodipodi:docname="remnantchatlogo.svg"
inkscape:version="1.3 (0e150ed, 2023-07-21)"
inkscape:dataloss="true"
inkscape:export-filename="../Documents/Code/remnantchat/public/logo/logo.svg"
inkscape:export-xdpi="244.95203"
inkscape:export-ydpi="244.95203"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#eeeeee"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050"
inkscape:zoom="1.1269514"
inkscape:cx="156.17354"
inkscape:cy="88.734969"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g1" />
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g1"
transform="translate(-35.199879,-24.466618)">
<circle
style="fill:none;stroke:#ffffff;stroke-width:16.3339;stroke-dasharray:none;stroke-opacity:1"
id="path1"
cx="135.52972"
cy="124.79646"
r="92.162895" />
<g
id="g3"
transform="translate(9.4909776,8.0550422)"
style="stroke-width:10;stroke-dasharray:none">
<path
style="fill:#00bcf3;stroke:#ffffff;stroke-width:10;stroke-dasharray:none;stroke-opacity:1"
d="m 95.476244,113.90011 61.124996,61.43382"
id="path2" />
<path
style="fill:#00bcf3;stroke:#ffffff;stroke-width:10;stroke-dasharray:none;stroke-opacity:1"
d="M 156.60125,113.90011 95.476243,175.33393"
id="path2-1" />
<path
style="fill:none;stroke:#ffffff;stroke-width:10;stroke-dasharray:none;stroke-opacity:1"
d="M 125.95686,183.04794 V 60.988826 c -0.0328,-6.933458 25.9673,-7.860172 26.01044,0 v 22.157746"
id="path3"
sodipodi:nodetypes="cccc" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -1,266 +1,9 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns="http://www.w3.org/2000/svg" width="230.66" height="230.66">
<svg <g stroke="#fff" transform="translate(-35.2 -24.467)">
width="472.85938" <circle cx="135.53" cy="124.796" r="92.163" fill="none" stroke-width="16.334"/>
zoomAndPan="magnify" <g stroke-width="10">
viewBox="0 0 354.64453 128.97656" <path fill="#00bcf3" d="m104.967 121.955 61.125 61.434m0-61.434-61.125 61.434"/>
height="171.96875" <path fill="none" d="M135.448 191.103V69.043c-.033-6.933 25.967-7.86 26.01 0v22.159"/>
preserveAspectRatio="xMidYMid"
version="1.0"
id="svg110"
sodipodi:docname="logo.svg"
inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview112"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.3350176"
inkscape:cx="234.45384"
inkscape:cy="86.141186"
inkscape:window-width="1728"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg110" />
<defs
id="defs10">
<g
id="g2" />
<clipPath
id="3bacd8e954">
<path
d="M 11.863281,122.92969 H 113.10938 v 101.0625 H 11.863281 Z m 0,0"
clip-rule="nonzero"
id="path4" />
</clipPath>
<clipPath
id="abfee98d57">
<path
d="m 50.867188,216.45703 h 58.414062 v 35.44922 H 50.867188 Z m 0,0"
clip-rule="nonzero"
id="path7" />
</clipPath>
</defs>
<g
clip-path="url(#3bacd8e954)"
id="g14"
transform="translate(-11.863281,-122.92969)">
<path
fill="#1976d2"
d="M 45.214844,214.47266 C 32.179688,207.12891 23.378906,193.1875 23.378906,177.19531 c 0,-23.6289 19.214844,-42.78906 42.917969,-42.78906 13.101563,0 24.828125,5.85547 32.703125,15.08203 h 14.10938 c -9.49219,-15.90234 -26.902349,-26.55859 -46.812505,-26.55859 -30.0625,0 -54.433594,24.29687 -54.433594,54.26562 0,19.8711 10.710938,37.24219 26.691407,46.69922 l 6.660156,-9.42187"
fill-opacity="1"
fill-rule="nonzero"
id="path12" />
</g>
<g
clip-path="url(#abfee98d57)"
id="g18"
transform="translate(-11.863281,-122.92969)">
<path
fill="#1976d2"
d="m 79.015625,218.07422 c -0.476563,0.14844 -0.953125,0.28906 -1.4375,0.41797 l -26.652344,10.77734 c 1.820313,0.53125 3.675781,0.97266 5.566407,1.31641 l 52.726562,21.32422 -24.984375,-35.34375 c -1.699219,0.61718 -3.441406,1.12109 -5.21875,1.50781"
fill-opacity="1"
fill-rule="nonzero"
id="path16" />
</g>
<path
fill="#d9d9d9"
d="m 58.480469,83.542972 c 15.527344,0 28.113281,-12.54688 28.113281,-28.02344 0,-15.48047 -12.585937,-28.02735 -28.113281,-28.02735 -8.582031,0 -16.261719,3.83204 -21.417969,9.875 h -9.242187 c 6.21875,-10.41406 17.621094,-17.39453 30.660156,-17.39453 19.691406,0 35.65234,15.91407 35.65234,35.54688 0,17.4414 -12.601559,31.95312 -29.226559,34.96875 L 30.371094,104.45312 46.902344,81.062502 c 3.53125,1.59375 7.449219,2.48047 11.578125,2.48047"
fill-opacity="1"
fill-rule="nonzero"
id="path20" />
<path
fill="#1976d2"
d="m 47.800781,54.269532 c 0,2.54297 -2.066406,4.60547 -4.621093,4.60547 -2.550781,0 -4.617188,-2.0625 -4.617188,-4.60547 0,-2.54688 2.066407,-4.60938 4.617188,-4.60938 2.554687,0 4.621093,2.0625 4.621093,4.60938"
fill-opacity="1"
fill-rule="nonzero"
id="path22" />
<path
fill="#1976d2"
d="m 61.714844,54.269532 c 0,2.54297 -2.066406,4.60547 -4.621094,4.60547 -2.550781,0 -4.617187,-2.0625 -4.617187,-4.60547 0,-2.54688 2.066406,-4.60938 4.617187,-4.60938 2.554688,0 4.621094,2.0625 4.621094,4.60938"
fill-opacity="1"
fill-rule="nonzero"
id="path24" />
<path
fill="#1976d2"
d="m 75.628907,54.269532 c 0,2.54297 -2.070313,4.60547 -4.621094,4.60547 -2.550782,0 -4.621094,-2.0625 -4.621094,-4.60547 0,-2.54688 2.070312,-4.60938 4.621094,-4.60938 2.550781,0 4.621094,2.0625 4.621094,4.60938"
fill-opacity="1"
fill-rule="nonzero"
id="path26" />
<path
fill="#1976d2"
d="m 104.62891,40.363282 h 250.01562 v 48.73828 H 104.62891 v -48.73828"
fill-opacity="1"
fill-rule="nonzero"
id="path28" />
<g
fill="#ffffff"
fill-opacity="1"
id="g36"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(124.78224,199.77909)"
id="g34">
<g
id="g32">
<path
d="m 2.4375,0 0.332031,-24.335938 h 4.507813 v 11.015626 h 9.480468 v -11.015626 h 4.542969 L 21.601562,0 h -4.84375 V -7.746094 H 7.277344 V 0 Z m 0,0"
id="path30" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g44"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(148.85163,199.77909)"
id="g42">
<g
id="g40">
<path
d="m 2.4375,0 0.5,-24.335938 H 7.144531 L 7.445312,0 Z m 0,0"
id="path38" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g52"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(158.7331,199.77909)"
id="g50">
<g
id="g48">
<path
d="m 2.4375,-20.464844 v -3.871094 h 20.796875 v 3.90625 L 15.054688,-20.765625 15.65625,0 h -5.640625 l 0.601563,-20.765625 z m 0,0"
id="path46" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g60"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(184.40489,199.77909)"
id="g58">
<g
id="g56">
<path
d="m 22.300781,-18.027344 c -3.707031,-2.539062 -5.742187,-2.90625 -8.277343,-2.90625 -4.910157,0 -7.046876,3.039063 -7.046876,8.78125 0.066407,4.972656 2.503907,6.609375 7.546876,6.609375 2.535156,0 5.039062,-1.199219 7.777343,-3.703125 v 7.175782 c -2.46875,1.667968 -5.074219,2.539062 -7.945312,2.539062 -7.378907,0 -11.917969,-4.875 -11.917969,-12.621094 0,-7.710937 4.039062,-12.285156 11.417969,-12.621094 2.835937,-0.132812 5.007812,0.03516 8.445312,1.703126 z m 0,0"
id="path54" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g68"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(209.14196,199.77909)"
id="g66">
<g
id="g64">
<path
d="m 2.4375,0 0.332031,-24.335938 h 4.507813 v 11.015626 h 9.480468 v -11.015626 h 4.542969 L 21.601562,0 h -4.84375 V -7.746094 H 7.277344 V 0 Z m 0,0"
id="path62" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g76"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(233.21136,199.77909)"
id="g74">
<g
id="g72">
<path
d="m 17.359375,-8.679688 -3.4375,-10.183593 c -0.265625,0.867187 -0.566406,1.703125 -0.835937,2.539062 -0.265626,0.832031 -0.535157,1.667969 -0.800782,2.46875 -0.300781,0.835938 -0.566406,1.671875 -0.867187,2.539063 -0.265625,0.867187 -0.566407,1.734375 -0.867188,2.636718 z M 2.4375,0 12.050781,-24.335938 h 3.773438 L 25.4375,0 H 19.53125 L 18.664062,-3.773438 H 9.179688 L 8.011719,0 Z m 0,0"
id="path70" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g84"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(261.08647,199.77909)"
id="g82">
<g
id="g80">
<path
d="m 2.4375,-20.464844 v -3.871094 h 20.796875 v 3.90625 L 15.054688,-20.765625 15.65625,0 h -5.640625 l 0.601563,-20.765625 z m 0,0"
id="path78" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g92"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(286.75826,199.77909)"
id="g90">
<g
id="g88">
<path
d="m 2.4375,-20.464844 v -3.871094 h 20.796875 v 3.90625 L 15.054688,-20.765625 15.65625,0 h -5.640625 l 0.601563,-20.765625 z m 0,0"
id="path86" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g100"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(312.43006,199.77909)"
id="g98">
<g
id="g96">
<path
d="m 2.4375,0 v -24.335938 h 15.855469 v 3.871094 H 6.808594 v 5.609375 h 10.984375 v 3.839844 H 6.808594 v 4.972656 H 18.5625 V 0 Z m 0,0"
id="path94" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g108"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(333.42821,199.77909)"
id="g106">
<g
id="g104">
<path
d="m 18.128906,-17.058594 c 0,2.636719 -1.003906,4.574219 -2.773437,5.640625 1.101562,0.835938 2.070312,2.269531 3.074219,4.207031 0.53125,1.035157 1.167968,2.335938 1.835937,3.640626 0.632813,1.265624 1.300781,2.535156 1.800781,3.570312 h -5.875 l -2.46875,-6.308594 v 0.03125 C 12.320312,-9.179688 11.316406,-9.75 9.113281,-9.75 H 7.410156 V 0 H 2.4375 v -24.335938 h 7.679688 c 2.535156,0 4.503906,0.597657 5.875,1.800782 1.402343,1.203125 2.136718,3.039062 2.136718,5.476562 z m -11.019531,-4.40625 v 7.277344 h 3.339844 c 2.101562,0 4.238281,-1.4375 4.238281,-2.871094 0,-3.472656 -2.167969,-4.40625 -4.238281,-4.40625 z m 0,0"
id="path102" />
</g>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,6 +1,6 @@
{ {
"short_name": "Chitchatter", "short_name": "RemnantChat",
"name": "Chitchatter", "name": "RemnantChat",
"description": "This is a communication tool that is free, open source, and designed for simplicity and security. All communication between you and your online peers is encrypted. There is no trace of your conversation once you leave.", "description": "This is a communication tool that is free, open source, and designed for simplicity and security. All communication between you and your online peers is encrypted. There is no trace of your conversation once you leave.",
"icons": [ "icons": [
{ {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

View File

@ -8,7 +8,7 @@ import { QueryParamKeys } from '../src/models/shell'
import { isColorMode, UserSettings } from '../src/models/settings' import { isColorMode, UserSettings } from '../src/models/settings'
import { iframeFeatureAllowList } from '../src/config/iframeFeatureAllowList' import { iframeFeatureAllowList } from '../src/config/iframeFeatureAllowList'
export const defaultRoot = 'https://chitchatter.im/' export const defaultRoot = 'https://remnant.chat/'
// NOTE: This is a subset of standard iframe attributes: // NOTE: This is a subset of standard iframe attributes:
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attributes // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attributes
@ -103,7 +103,7 @@ class ChatEmbed extends HTMLElement {
window.addEventListener('message', this.handleConfigRequestedMessage) window.addEventListener('message', this.handleConfigRequestedMessage)
this.configRequestExpirationTimout = setTimeout(() => { this.configRequestExpirationTimout = setTimeout(() => {
console.error(`[chitchatter-sdk] configuration was not sent successfully`) console.error(`[remnantchat-sdk] configuration was not sent successfully`)
this.stopListeningForConfigRequest() this.stopListeningForConfigRequest()
}, configRequestTimeout) }, configRequestTimeout)
} }

View File

@ -78,8 +78,8 @@ const getConfigFromSdk = () => {
const Bootstrap = ({ const Bootstrap = ({
persistedStorage: persistedStorageProp = localforage.createInstance({ persistedStorage: persistedStorageProp = localforage.createInstance({
name: 'chitchatter', name: 'remnantchat',
description: 'Persisted settings data for chitchatter', description: 'Persisted settings data for remnantchat',
}), }),
initialUserSettings, initialUserSettings,
serializationService = serializationServiceInstance, serializationService = serializationServiceInstance,
@ -152,7 +152,7 @@ const Bootstrap = ({
} }
} catch (e) { } catch (e) {
console.error( console.error(
'Chitchatter configuration from parent frame could not be loaded' 'RemnantChat configuration from parent frame could not be loaded'
) )
} }
} }

View File

@ -48,7 +48,7 @@ const Init = ({ getUuid = uuid, ...props }: InitProps) => {
} catch (e) { } catch (e) {
console.error(e) console.error(e)
setErrorMessage( setErrorMessage(
'Chitchatter was unable to boot up. Please check the browser console.' 'RemnantChat was unable to boot up. Please check the browser console.'
) )
} }
})() })()

View File

@ -34,7 +34,7 @@ export const PasswordPrompt = ({
<DialogContent> <DialogContent>
<DialogContentText sx={{ mb: 2 }}> <DialogContentText sx={{ mb: 2 }}>
You will only be able to connect to room peers that enter the same You will only be able to connect to room peers that enter the same
password. Due to the decentralized nature of Chitchatter, it is password. Due to the decentralized nature of RemnantChat, it is
impossible to know if the password you enter will match the password impossible to know if the password you enter will match the password
entered by other peers. entered by other peers.
</DialogContentText> </DialogContentText>

View File

@ -37,7 +37,7 @@ export const EnvironmentUnsupportedDialog = () => {
</DialogTitle> </DialogTitle>
<DialogContent> <DialogContent>
<DialogContentText id="alert-dialog-description"> <DialogContentText id="alert-dialog-description">
Chitchatter is unable to start up. The following issues were detected: RemnantChat is unable to start up. The following issues were detected:
</DialogContentText> </DialogContentText>
<Typography <Typography
component="ul" component="ul"

View File

@ -330,7 +330,7 @@ export const Shell = ({ appNeedsUpdate, children, userPeerId }: ShellProps) => {
<> <>
<UpgradeDialog appNeedsUpdate={appNeedsUpdate} /> <UpgradeDialog appNeedsUpdate={appNeedsUpdate} />
<Box <Box
className="Chitchatter" className="RemnantChat"
sx={{ sx={{
height: '100vh', height: '100vh',
display: 'flex', display: 'flex',
@ -408,10 +408,10 @@ export const Shell = ({ appNeedsUpdate, children, userPeerId }: ShellProps) => {
> >
This conversation is powered by{' '} This conversation is powered by{' '}
<Link <Link
href="https://github.com/jeremyckahn/chitchatter" href="https://githaven.org/shiloh/remnantchat"
target="_blank" target="_blank"
> >
Chitchatter RemnantChat
</Link> </Link>
</Typography> </Typography>
) : null} ) : null}

View File

@ -36,7 +36,7 @@ export const UpgradeDialog = ({ appNeedsUpdate }: UpgradeDialogProps) => {
</DialogTitle> </DialogTitle>
<DialogContent> <DialogContent>
<DialogContentText id="alert-dialog-description"> <DialogContentText id="alert-dialog-description">
In order to function properly, Chitchatter needs to be updated. The In order to function properly, RemnantChat needs to be updated. The
update has already been installed in the background. All you need to update has already been installed in the background. All you need to
do is reload the page or click "Refresh" below. do is reload the page or click "Refresh" below.
</DialogContentText> </DialogContentText>

View File

@ -9,5 +9,5 @@ export enum routes {
} }
export const homepageUrl = new URL( export const homepageUrl = new URL(
process.env.REACT_APP_HOMEPAGE ?? 'https://chitchatter.im/' process.env.REACT_APP_HOMEPAGE ?? 'https://remnant.chat/'
) )

View File

@ -7,7 +7,7 @@ export const rtcConfig: RTCConfiguration = {
// connection cannot be made. Feel free to change them as you'd like. If you // connection cannot be made. Feel free to change them as you'd like. If you
// would like to disable relay servers entirely, remove the `iceServers` // would like to disable relay servers entirely, remove the `iceServers`
// property from the rtcConfig object. IF YOU DISABLE RELAY SERVERS, // property from the rtcConfig object. IF YOU DISABLE RELAY SERVERS,
// CHITCHATTER PEERS MAY NOT BE ABLE TO CONNECT DEPENDING ON HOW THEY ARE // REMNANTCHAT PEERS MAY NOT BE ABLE TO CONNECT DEPENDING ON HOW THEY ARE
// CONNECTED TO THE INTERNET. // CONNECTED TO THE INTERNET.
iceServers: [ iceServers: [
{ {

View File

@ -1,6 +1,6 @@
export const streamSaverUrl = export const streamSaverUrl =
process.env.REACT_APP_STREAMSAVER_URL ?? process.env.REACT_APP_STREAMSAVER_URL ??
// If you would like to host your own Chitchatter instance with an // If you would like to host your own RemnantChat instance with an
// alternative StreamSaver fork to facilitate file sharing, change this // alternative StreamSaver fork to facilitate file sharing, change this
// string to its respective .mitm.html URL. // string to its respective .mitm.html URL.
// //

View File

@ -1,5 +1,5 @@
let trackerUrls: string[] | undefined = [ let trackerUrls: string[] | undefined = [
// If you would like to host your own Chitchatter instance with alternative // If you would like to host your own RemnantChat instance with alternative
// WebTorrent trackers to connect peers, add them to this array. This array // WebTorrent trackers to connect peers, add them to this array. This array
// gets provided to Trystero as the `trackerUrls` configuration option: // gets provided to Trystero as the `trackerUrls` configuration option:
// https://github.com/dmotz/trystero#joinroomconfig-namespace // https://github.com/dmotz/trystero#joinroomconfig-namespace
@ -10,7 +10,7 @@ let trackerUrls: string[] | undefined = [
// If a tracker URL has been provided via the REACT_APP_TRACKER_URL environment // If a tracker URL has been provided via the REACT_APP_TRACKER_URL environment
// variable, prioritize using it. This is mainly relevant for local development // variable, prioritize using it. This is mainly relevant for local development
// when using the `npm run dev` script. If you are hosting your own Chitchatter // when using the `npm run dev` script. If you are hosting your own RemnantChat
// instance, consider populating the trackerUrls above instead. // instance, consider populating the trackerUrls above instead.
if (process.env.REACT_APP_TRACKER_URL) { if (process.env.REACT_APP_TRACKER_URL) {
trackerUrls.unshift(process.env.REACT_APP_TRACKER_URL) trackerUrls.unshift(process.env.REACT_APP_TRACKER_URL)

12
src/img/githaven.svg Normal file
View File

@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" width="111.116" height="113.192">
<g transform="translate(-17.69 -20.226)">
<path fill="#abb2bf" d="M43.197 44.234C17.834 36.212.77 83.012 44.97 81.708l63.995-1.066c31.18-3.757 24.112-54.732-10.714-46.395-4.372 1.047-4.163-10.459-18.76-13.595-10.377-2.23-31.074 4.1-36.294 23.582Z"/>
<ellipse cx="60.447" cy="53.457" fill="#fff" rx="4.576" ry="6.554"/>
<ellipse cx="88.011" cy="53.81" fill="#fff" rx="4.576" ry="6.554"/>
<path stroke="#98c379" stroke-linecap="round" stroke-linejoin="round" stroke-width="5" d="m74.506 85.27-.55 32.67"/>
<path fill="none" stroke="#98c379" stroke-linecap="round" stroke-linejoin="round" stroke-width="5" d="M56.42 86.168c.824 24.124-3.143 19.799-16.234 19.568m51.48-20.137c-.824 24.124 3.143 19.799 16.234 19.568"/>
<ellipse cx="34.197" cy="105.935" fill="none" stroke="#98c379" stroke-linecap="round" stroke-linejoin="round" stroke-width="5" rx="5.831" ry="6.122"/>
<ellipse cx="74.147" cy="124.797" fill="none" stroke="#98c379" stroke-linecap="round" stroke-linejoin="round" stroke-width="5" rx="5.831" ry="6.122"/>
<ellipse cx="115.998" cy="104.792" fill="none" stroke="#98c379" stroke-linecap="round" stroke-linejoin="round" stroke-width="5" rx="5.831" ry="6.122"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -1,238 +1,9 @@
<svg <svg xmlns="http://www.w3.org/2000/svg" width="230.66" height="230.66">
width="100%" <g stroke="#fff" transform="translate(-35.2 -24.467)">
zoomAndPan="magnify" <circle cx="135.53" cy="124.796" r="92.163" fill="none" stroke-width="16.334"/>
viewBox="0 0 354.64453 128.97656" <g stroke-width="10">
height="unset" <path fill="#00bcf3" d="m104.967 121.955 61.125 61.434m0-61.434-61.125 61.434"/>
preserveAspectRatio="xMidYMid" <path fill="none" d="M135.448 191.103V69.043c-.033-6.933 25.967-7.86 26.01 0v22.159"/>
version="1.0"
id="svg110">
<defs
id="defs10">
<clipPath
id="3bacd8e954">
<path
d="M 11.863281,122.92969 H 113.10938 v 101.0625 H 11.863281 Z m 0,0"
clip-rule="nonzero"
id="path4" />
</clipPath>
<clipPath
id="abfee98d57">
<path
d="m 50.867188,216.45703 h 58.414062 v 35.44922 H 50.867188 Z m 0,0"
clip-rule="nonzero"
id="path7" />
</clipPath>
</defs>
<g
clip-path="url(#3bacd8e954)"
id="g14"
transform="translate(-11.863281,-122.92969)">
<path
fill="#1976d2"
d="M 45.214844,214.47266 C 32.179688,207.12891 23.378906,193.1875 23.378906,177.19531 c 0,-23.6289 19.214844,-42.78906 42.917969,-42.78906 13.101563,0 24.828125,5.85547 32.703125,15.08203 h 14.10938 c -9.49219,-15.90234 -26.902349,-26.55859 -46.812505,-26.55859 -30.0625,0 -54.433594,24.29687 -54.433594,54.26562 0,19.8711 10.710938,37.24219 26.691407,46.69922 l 6.660156,-9.42187"
fill-opacity="1"
fill-rule="nonzero"
id="path12" />
</g>
<g
clip-path="url(#abfee98d57)"
id="g18"
transform="translate(-11.863281,-122.92969)">
<path
fill="#1976d2"
d="m 79.015625,218.07422 c -0.476563,0.14844 -0.953125,0.28906 -1.4375,0.41797 l -26.652344,10.77734 c 1.820313,0.53125 3.675781,0.97266 5.566407,1.31641 l 52.726562,21.32422 -24.984375,-35.34375 c -1.699219,0.61718 -3.441406,1.12109 -5.21875,1.50781"
fill-opacity="1"
fill-rule="nonzero"
id="path16" />
</g>
<path
fill="#d9d9d9"
d="m 58.480469,83.542972 c 15.527344,0 28.113281,-12.54688 28.113281,-28.02344 0,-15.48047 -12.585937,-28.02735 -28.113281,-28.02735 -8.582031,0 -16.261719,3.83204 -21.417969,9.875 h -9.242187 c 6.21875,-10.41406 17.621094,-17.39453 30.660156,-17.39453 19.691406,0 35.65234,15.91407 35.65234,35.54688 0,17.4414 -12.601559,31.95312 -29.226559,34.96875 L 30.371094,104.45312 46.902344,81.062502 c 3.53125,1.59375 7.449219,2.48047 11.578125,2.48047"
fill-opacity="1"
fill-rule="nonzero"
id="path20" />
<path
fill="#1976d2"
d="m 47.800781,54.269532 c 0,2.54297 -2.066406,4.60547 -4.621093,4.60547 -2.550781,0 -4.617188,-2.0625 -4.617188,-4.60547 0,-2.54688 2.066407,-4.60938 4.617188,-4.60938 2.554687,0 4.621093,2.0625 4.621093,4.60938"
fill-opacity="1"
fill-rule="nonzero"
id="path22" />
<path
fill="#1976d2"
d="m 61.714844,54.269532 c 0,2.54297 -2.066406,4.60547 -4.621094,4.60547 -2.550781,0 -4.617187,-2.0625 -4.617187,-4.60547 0,-2.54688 2.066406,-4.60938 4.617187,-4.60938 2.554688,0 4.621094,2.0625 4.621094,4.60938"
fill-opacity="1"
fill-rule="nonzero"
id="path24" />
<path
fill="#1976d2"
d="m 75.628907,54.269532 c 0,2.54297 -2.070313,4.60547 -4.621094,4.60547 -2.550782,0 -4.621094,-2.0625 -4.621094,-4.60547 0,-2.54688 2.070312,-4.60938 4.621094,-4.60938 2.550781,0 4.621094,2.0625 4.621094,4.60938"
fill-opacity="1"
fill-rule="nonzero"
id="path26" />
<path
fill="#1976d2"
d="m 104.62891,40.363282 h 250.01562 v 48.73828 H 104.62891 v -48.73828"
fill-opacity="1"
fill-rule="nonzero"
id="path28" />
<g
fill="#ffffff"
fill-opacity="1"
id="g36"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(124.78224,199.77909)"
id="g34">
<g
id="g32">
<path
d="m 2.4375,0 0.332031,-24.335938 h 4.507813 v 11.015626 h 9.480468 v -11.015626 h 4.542969 L 21.601562,0 h -4.84375 V -7.746094 H 7.277344 V 0 Z m 0,0"
id="path30" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g44"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(148.85163,199.77909)"
id="g42">
<g
id="g40">
<path
d="m 2.4375,0 0.5,-24.335938 H 7.144531 L 7.445312,0 Z m 0,0"
id="path38" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g52"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(158.7331,199.77909)"
id="g50">
<g
id="g48">
<path
d="m 2.4375,-20.464844 v -3.871094 h 20.796875 v 3.90625 L 15.054688,-20.765625 15.65625,0 h -5.640625 l 0.601563,-20.765625 z m 0,0"
id="path46" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g60"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(184.40489,199.77909)"
id="g58">
<g
id="g56">
<path
d="m 22.300781,-18.027344 c -3.707031,-2.539062 -5.742187,-2.90625 -8.277343,-2.90625 -4.910157,0 -7.046876,3.039063 -7.046876,8.78125 0.066407,4.972656 2.503907,6.609375 7.546876,6.609375 2.535156,0 5.039062,-1.199219 7.777343,-3.703125 v 7.175782 c -2.46875,1.667968 -5.074219,2.539062 -7.945312,2.539062 -7.378907,0 -11.917969,-4.875 -11.917969,-12.621094 0,-7.710937 4.039062,-12.285156 11.417969,-12.621094 2.835937,-0.132812 5.007812,0.03516 8.445312,1.703126 z m 0,0"
id="path54" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g68"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(209.14196,199.77909)"
id="g66">
<g
id="g64">
<path
d="m 2.4375,0 0.332031,-24.335938 h 4.507813 v 11.015626 h 9.480468 v -11.015626 h 4.542969 L 21.601562,0 h -4.84375 V -7.746094 H 7.277344 V 0 Z m 0,0"
id="path62" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g76"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(233.21136,199.77909)"
id="g74">
<g
id="g72">
<path
d="m 17.359375,-8.679688 -3.4375,-10.183593 c -0.265625,0.867187 -0.566406,1.703125 -0.835937,2.539062 -0.265626,0.832031 -0.535157,1.667969 -0.800782,2.46875 -0.300781,0.835938 -0.566406,1.671875 -0.867187,2.539063 -0.265625,0.867187 -0.566407,1.734375 -0.867188,2.636718 z M 2.4375,0 12.050781,-24.335938 h 3.773438 L 25.4375,0 H 19.53125 L 18.664062,-3.773438 H 9.179688 L 8.011719,0 Z m 0,0"
id="path70" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g84"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(261.08647,199.77909)"
id="g82">
<g
id="g80">
<path
d="m 2.4375,-20.464844 v -3.871094 h 20.796875 v 3.90625 L 15.054688,-20.765625 15.65625,0 h -5.640625 l 0.601563,-20.765625 z m 0,0"
id="path78" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g92"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(286.75826,199.77909)"
id="g90">
<g
id="g88">
<path
d="m 2.4375,-20.464844 v -3.871094 h 20.796875 v 3.90625 L 15.054688,-20.765625 15.65625,0 h -5.640625 l 0.601563,-20.765625 z m 0,0"
id="path86" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g100"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(312.43006,199.77909)"
id="g98">
<g
id="g96">
<path
d="m 2.4375,0 v -24.335938 h 15.855469 v 3.871094 H 6.808594 v 5.609375 h 10.984375 v 3.839844 H 6.808594 v 4.972656 H 18.5625 V 0 Z m 0,0"
id="path94" />
</g>
</g>
</g>
<g
fill="#ffffff"
fill-opacity="1"
id="g108"
transform="translate(-11.863281,-122.92969)">
<g
transform="translate(333.42821,199.77909)"
id="g106">
<g
id="g104">
<path
d="m 18.128906,-17.058594 c 0,2.636719 -1.003906,4.574219 -2.773437,5.640625 1.101562,0.835938 2.070312,2.269531 3.074219,4.207031 0.53125,1.035157 1.167968,2.335938 1.835937,3.640626 0.632813,1.265624 1.300781,2.535156 1.800781,3.570312 h -5.875 l -2.46875,-6.308594 v 0.03125 C 12.320312,-9.179688 11.316406,-9.75 9.113281,-9.75 H 7.410156 V 0 H 2.4375 v -24.335938 h 7.679688 c 2.535156,0 4.503906,0.597657 5.875,1.800782 1.402343,1.203125 2.136718,3.039062 2.136718,5.476562 z m -11.019531,-4.40625 v 7.277344 h 3.339844 c 2.101562,0 4.238281,-1.4375 4.238281,-2.871094 0,-3.472656 -2.167969,-4.40625 -4.238281,-4.40625 z m 0,0"
id="path102" />
</g>
</g> </g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 442 B

View File

@ -31,7 +31,7 @@ export const About = () => {
{` {`
### User Guide ### User Guide
Chitchatter is a communication tool designed to make secure and private communication accessible to all. Please [see the README](https://github.com/jeremyckahn/chitchatter/blob/develop/README.md) for full project documentation. RemnantChat is a communication tool designed to make secure and private communication accessible to all. It is a derived work from the the platform ChitChatter [see the upstream project](https://github.com/jeremyckahn/chitchatter/blob/develop/README.md) for project documentation [see the full README](https://githaven.org/shiloh/remnantchat/README.md)
#### Chat rooms #### Chat rooms
@ -43,17 +43,17 @@ To connect to others, share the room URL with a secure tool such as [Burner Note
##### Peer verification ##### Peer verification
When you connect with a peer, Chitchatter automatically attempts to use [public-key cryptography](https://en.wikipedia.org/wiki/Public-key_cryptography) to verify them. You can see everyone's public keys in the peer list. Feel free to share your public key with others (it is not sensitive information) so that they can uniquely identify you. When you connect with a peer, RemnantChat automatically attempts to use [public-key cryptography](https://en.wikipedia.org/wiki/Public-key_cryptography) to verify them. You can see everyone's public keys in the peer list. Feel free to share your public key with others (it is not sensitive information) so that they can uniquely identify you.
All public and private keys are generated locally. Your private key is never sent to any peer or server. All public and private keys are generated locally. Your private key is never sent to any peer or server.
##### Community rooms ##### Community rooms
There is [a public list of community rooms](https://github.com/jeremyckahn/chitchatter/wiki/Chitchatter-Community-Rooms) that you can join to discuss various topics. There is [a public list of community rooms]() that you can join to discuss various topics.
##### Conversation backfilling ##### Conversation backfilling
Conversation transcripts are erased from local memory as soon as you close the page or navigate away from the room. Conversations are only ever held in volatile memory and never persisted to any disk by Chitchatter. Conversation transcripts are erased from local memory as soon as you close the page or navigate away from the room. Conversations are only ever held in volatile memory and never persisted to any disk by RemnantChat.
When a peer joins a **public** room with participants already in it, the new peer will automatically request the transcript of the conversation that has already taken place from the other peers. Once all peers leave the room, the conversation is completely erased. Peers joining a **private** room will not get the conversation transcript backfilled. When a peer joins a **public** room with participants already in it, the new peer will automatically request the transcript of the conversation that has already taken place from the other peers. Once all peers leave the room, the conversation is completely erased. Peers joining a **private** room will not get the conversation transcript backfilled.

View File

@ -27,10 +27,10 @@ The words of which the initial letter is capitalized have meanings defined under
For the purposes of this Disclaimer: For the purposes of this Disclaimer:
* **Project** (referred to as either "the Project", "We", "Us" or "Our" in this Disclaimer) refers to Chitchatter. * **Project** (referred to as either "the Project", "We", "Us" or "Our" in this Disclaimer) refers to RemnantChat.
* **Service** refers to the Website. * **Service** refers to the Website.
* **You** means the individual accessing the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable. * **You** means the individual accessing the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.
* **Website** refers to Chitchatter, accessible from [https://chitchatter.im](https://chitchatter.im) * **Website** refers to RemnantChat, accessible from [https://Remnant.Chat](https://Remnant.Chat)
### Disclaimer ### Disclaimer

View File

@ -51,7 +51,7 @@ export const EmbedCodeDialog = ({
return ( return (
<Dialog open={showEmbedCode} onClose={handleEmbedCodeWindowClose}> <Dialog open={showEmbedCode} onClose={handleEmbedCodeWindowClose}>
<DialogTitle>Embedding Chitchatter</DialogTitle> <DialogTitle>Embedding RemnantChat</DialogTitle>
<DialogContent> <DialogContent>
<DialogContentText <DialogContentText
sx={{ sx={{
@ -97,10 +97,10 @@ export const EmbedCodeDialog = ({
> >
As an alternative to using an <code>iframe</code>, you can use the{' '} As an alternative to using an <code>iframe</code>, you can use the{' '}
<Link <Link
href="https://github.com/jeremyckahn/chitchatter#SDK" href="https://githaven.org/shiloh/remnantchat#SDK"
target="_blank" target="_blank"
> >
Chitchatter SDK RemnantChat SDK
</Link>{' '} </Link>{' '}
to embed a chat room as a{' '} to embed a chat room as a{' '}
<Link <Link

View File

@ -8,7 +8,7 @@ import TextField from '@mui/material/TextField'
import Divider from '@mui/material/Divider' import Divider from '@mui/material/Divider'
import IconButton from '@mui/material/IconButton' import IconButton from '@mui/material/IconButton'
import MuiLink from '@mui/material/Link' import MuiLink from '@mui/material/Link'
import GitHubIcon from '@mui/icons-material/GitHub'
import Cached from '@mui/icons-material/Cached' import Cached from '@mui/icons-material/Cached'
import { v4 as uuid } from 'uuid' import { v4 as uuid } from 'uuid'
@ -31,7 +31,7 @@ export function Home({ userId }: HomeProps) {
const navigate = useNavigate() const navigate = useNavigate()
useEffect(() => { useEffect(() => {
setTitle('Chitchatter') setTitle('RemnantChat')
}, [setTitle]) }, [setTitle])
const handleRoomNameChange = (event: React.ChangeEvent<HTMLInputElement>) => { const handleRoomNameChange = (event: React.ChangeEvent<HTMLInputElement>) => {
@ -155,7 +155,7 @@ export function Home({ userId }: HomeProps) {
}} }}
> >
<MuiLink <MuiLink
href="https://github.com/jeremyckahn/chitchatter" href="https://githaven.org/shiloh/remnantchat"
target="_blank" target="_blank"
sx={theme => ({ sx={theme => ({
color: theme.palette.text.primary, color: theme.palette.text.primary,
@ -166,22 +166,20 @@ export function Home({ userId }: HomeProps) {
edge="start" edge="start"
color="inherit" color="inherit"
aria-label="Open menu" aria-label="Open menu"
> ></IconButton>
<GitHubIcon sx={{ fontSize: '2em' }} />
</IconButton>
</MuiLink> </MuiLink>
</Box> </Box>
<Typography variant="body1" sx={{ textAlign: 'center' }}> <Typography variant="body1" sx={{ textAlign: 'center' }}>
Licensed under{' '} Licensed under{' '}
<MuiLink <MuiLink
href="https://github.com/jeremyckahn/chitchatter/blob/develop/LICENSE" href="https://githaven.org/shiloh/remnantchat/LICENSE"
target="_blank" target="_blank"
> >
GPL v2 GPL v2
</MuiLink> </MuiLink>
. Please{' '} . Please{' '}
<MuiLink <MuiLink
href="https://github.com/jeremyckahn/chitchatter/blob/develop/README.md" href="https://githaven.org/shiloh/remnantchat/README.md"
target="_blank" target="_blank"
> >
read the docs read the docs

View File

@ -198,7 +198,7 @@ export const Settings = ({ userId }: SettingsProps) => {
mb: 2, mb: 2,
}} }}
> >
Export your Chitchatter profile data so that it can be moved to another Export your RemnantChat profile data so that it can be moved to another
browser or device.{' '} browser or device.{' '}
<strong>Be careful not to share the exported data with anyone</strong>. <strong>Be careful not to share the exported data with anyone</strong>.
It contains your unique verification keys. It contains your unique verification keys.
@ -228,7 +228,7 @@ export const Settings = ({ userId }: SettingsProps) => {
mb: 2, mb: 2,
}} }}
> >
Import your Chitchatter profile that was previously exported from Import your RemnantChat profile that was previously exported from
another browser or device. another browser or device.
</Typography> </Typography>
<FileReaderInput <FileReaderInput
@ -277,7 +277,7 @@ export const Settings = ({ userId }: SettingsProps) => {
</PeerNameDisplay> </PeerNameDisplay>
</strong>{' '} </strong>{' '}
to a new, randomly-assigned name. It will also reset all of your saved to a new, randomly-assigned name. It will also reset all of your saved
Chitchatter application preferences. RemnantChat application preferences.
</Typography> </Typography>
<Button <Button
variant="outlined" variant="outlined"
@ -300,7 +300,7 @@ export const Settings = ({ userId }: SettingsProps) => {
mb: 2, mb: 2,
}} }}
> >
Chitchatter only stores user preferences and never message content of RemnantChat only stores user preferences and never message content of
any kind. This preference data is only stored locally on your device and any kind. This preference data is only stored locally on your device and
not a server. not a server.
</Typography> </Typography>

View File

@ -11,7 +11,7 @@ class InvalidFileError extends Error {
message = 'InvalidFileError: File could not be imported' message = 'InvalidFileError: File could not be imported'
} }
const encryptionTestTarget = 'chitchatter' const encryptionTestTarget = 'remnantchat'
export class SettingsService { export class SettingsService {
exportSettings = async (userSettings: UserSettings) => { exportSettings = async (userSettings: UserSettings) => {
@ -22,7 +22,7 @@ export class SettingsService {
type: 'application/json;charset=utf-8', type: 'application/json;charset=utf-8',
}) })
saveAs(blob, `chitchatter-profile-${userSettings.userId}.json`) saveAs(blob, `remnantchat-profile-${userSettings.userId}.json`)
} }
importSettings = async (file: File) => { importSettings = async (file: File) => {
@ -57,7 +57,7 @@ export class SettingsService {
) )
// NOTE: This determines whether the public and private keys match // NOTE: This determines whether the public and private keys match
// and are compatible with Chitchatter. // and are compatible with RemnantChat.
if (decryptedString !== encryptionTestTarget) { if (decryptedString !== encryptionTestTarget) {
throw new Error() throw new Error()
} }

View File

@ -9,7 +9,7 @@
"strict": true, "strict": true,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"module": "esnext", "module": "NodeNext",
"moduleResolution": "NodeNext", "moduleResolution": "NodeNext",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,