diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
deleted file mode 100755
index 2e7f4c6d..00000000
--- a/.github/workflows/codeql-analysis.yml
+++ /dev/null
@@ -1,68 +0,0 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-name: "CodeQL"
-
-on:
- pull_request:
- branches: [master]
- schedule:
- - cron: '0 0 * * *'
-
-jobs:
- analyze:
- name: Analyze
- runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- # Override automatic language detection by changing the below list
- # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
- language: ['javascript']
- # Learn more...
- # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
- with:
- # We must fetch at least the immediate parents so that if this is
- # a pull request then we can checkout the head.
- fetch-depth: 2
-
- # If this run was triggered by a pull request event, then checkout
- # the head of the pull request instead of the merge commit.
- - run: git checkout HEAD^2
- if: ${{ github.event_name == 'pull_request' }}
-
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v1
- with:
- languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
-
- # âšī¸ Command-line programs to run using the OS shell.
- # đ https://git.io/JvXDl
-
- # âī¸ If the Autobuild fails above, remove it and uncomment the following three lines
- # and modify them (or add more) to build your code if your project
- # uses a compiled language
-
- #- run: |
- # make bootstrap
- # make release
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
diff --git a/.gitmodules b/.gitmodules
old mode 100644
new mode 100755
diff --git a/.ignorepackages b/.ignorepackages
old mode 100644
new mode 100755
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
old mode 100644
new mode 100755
diff --git a/CODE_STYLE.md b/CODE_STYLE.md
old mode 100644
new mode 100755
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
old mode 100644
new mode 100755
diff --git a/api-ports.md b/api-ports.md
new file mode 100644
index 00000000..35bb58bf
--- /dev/null
+++ b/api-ports.md
@@ -0,0 +1,18 @@
+# API SERVICES PORT TABLE
+
+3000 -> main
+3001 -> posts
+3002 -> files
+3003 -> music
+3004 -> chats
+3005 -> marketplace
+3006 -> sync
+3007 -> mail
+3008 -> unallocated
+3009 -> unallocated
+3010 -> unallocated
+3011 -> unallocated
+3012 -> unallocated
+3013 -> unallocated
+3014 -> unallocated
+3015 -> unallocated
diff --git a/changelogs/v0-45-0.md b/changelogs/v0-45-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-45-1.md b/changelogs/v0-45-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-45-2.md b/changelogs/v0-45-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-46-0.md b/changelogs/v0-46-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-46-1.md b/changelogs/v0-46-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-47-0.md b/changelogs/v0-47-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-47-1.md b/changelogs/v0-47-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-47-2.md b/changelogs/v0-47-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-47-3.md b/changelogs/v0-47-3.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-47-4.md b/changelogs/v0-47-4.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-47-5.md b/changelogs/v0-47-5.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-48-0.md b/changelogs/v0-48-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-48-1.md b/changelogs/v0-48-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-48-2.md b/changelogs/v0-48-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-49-0.md b/changelogs/v0-49-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-49-1.md b/changelogs/v0-49-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-49-2.md b/changelogs/v0-49-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-49-3.md b/changelogs/v0-49-3.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-50-0.md b/changelogs/v0-50-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-50-1.md b/changelogs/v0-50-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-50-2.md b/changelogs/v0-50-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-50-3.md b/changelogs/v0-50-3.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-50-4.md b/changelogs/v0-50-4.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-51-0.md b/changelogs/v0-51-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-51-1.md b/changelogs/v0-51-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-52-0.md b/changelogs/v0-52-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-52-1.md b/changelogs/v0-52-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-52-2.md b/changelogs/v0-52-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-53-0.md b/changelogs/v0-53-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-53-1.md b/changelogs/v0-53-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-53-2.md b/changelogs/v0-53-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-54-0.md b/changelogs/v0-54-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-54-1.md b/changelogs/v0-54-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-54-2.md b/changelogs/v0-54-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-54-3.md b/changelogs/v0-54-3.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-54-4.md b/changelogs/v0-54-4.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-55-0.md b/changelogs/v0-55-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-56-0.md b/changelogs/v0-56-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-56-1.md b/changelogs/v0-56-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-56-2.md b/changelogs/v0-56-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-56-3.md b/changelogs/v0-56-3.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-57-0.md b/changelogs/v0-57-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-57-1.md b/changelogs/v0-57-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-57-2.md b/changelogs/v0-57-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-57-3.md b/changelogs/v0-57-3.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-57-4.md b/changelogs/v0-57-4.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-57-5.md b/changelogs/v0-57-5.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-57-6.md b/changelogs/v0-57-6.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-58-0.md b/changelogs/v0-58-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-58-1.md b/changelogs/v0-58-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-58-2.md b/changelogs/v0-58-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-59-0.md b/changelogs/v0-59-0.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-59-1.md b/changelogs/v0-59-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-60-1.md b/changelogs/v0-60-1.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-60-2.md b/changelogs/v0-60-2.md
old mode 100644
new mode 100755
diff --git a/changelogs/v0-60-3.md b/changelogs/v0-60-3.md
old mode 100644
new mode 100755
diff --git a/ecosystem.config.js b/ecosystem.config.js
old mode 100644
new mode 100755
diff --git a/linebridge b/linebridge
index 13b01b21..c011f235 160000
--- a/linebridge
+++ b/linebridge
@@ -1 +1 @@
-Subproject commit 13b01b21d6b63ecddd8625781a69355861d38db5
+Subproject commit c011f2353f8db14a2ed287015d108c2620098a84
diff --git a/package.json b/package.json
index c4ad1ba7..d766968d 100755
--- a/package.json
+++ b/package.json
@@ -5,12 +5,7 @@
"private": true,
"scripts": {
"wrapper:dev": "node ./packages/wrapper/src/index.js --dev",
- "dev": "concurrently -k -n Client,Server,Marketplace,Chat,File,Music,Sync -c bgCyan,auto \"yarn dev:client\" \"yarn dev:server\" \"yarn dev:marketplace_server\" \"yarn dev:chat_server\" \"yarn dev:file_server\" \"yarn dev:music_server\" \"yarn dev:sync_server\"",
- "dev:file_server": "cd packages/file_server && yarn dev",
- "dev:music_server": "cd packages/music_server && yarn dev",
- "dev:chat_server": "cd packages/chat_server && yarn dev",
- "dev:marketplace_server": "cd packages/marketplace_server && yarn dev",
- "dev:sync_server": "cd packages/sync_server && yarn dev",
+ "dev": "concurrently -k \"yarn dev:client\" \"yarn dev:server\"",
"dev:server": "cd packages/server && yarn dev",
"dev:client": "cd packages/app && yarn dev",
"release": "node ./scripts/release.js",
@@ -23,7 +18,7 @@
"dependencies": {
"7zip-min": "1.4.3",
"axios": "^1.4.0",
- "corenode": "^0.28.26",
+ "@ragestudio/hermes": "^0.1.1",
"dotenv": "16.0.3",
"octokit": "^2.0.14"
},
diff --git a/packages/app/android/.gitignore b/packages/app/android/.gitignore
old mode 100644
new mode 100755
diff --git a/packages/app/android/.idea/.gitignore b/packages/app/android/.idea/.gitignore
old mode 100644
new mode 100755
diff --git a/packages/app/android/.idea/compiler.xml b/packages/app/android/.idea/compiler.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/.idea/jarRepositories.xml b/packages/app/android/.idea/jarRepositories.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/.idea/misc.xml b/packages/app/android/.idea/misc.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/.gitignore b/packages/app/android/app/.gitignore
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/build.gradle b/packages/app/android/app/build.gradle
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/capacitor.build.gradle b/packages/app/android/app/capacitor.build.gradle
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/proguard-rules.pro b/packages/app/android/app/proguard-rules.pro
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/release/output-metadata.json b/packages/app/android/app/release/output-metadata.json
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/AndroidManifest.xml b/packages/app/android/app/src/main/AndroidManifest.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/java/com/ragestudio/comty/MainActivity.java b/packages/app/android/app/src/main/java/com/ragestudio/comty/MainActivity.java
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-hdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-hdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-ldpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-ldpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-mdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-mdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-night-hdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-night-hdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-night-ldpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-night-ldpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-night-mdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-night-mdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-night-xhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-night-xhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-night-xxhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-night-xxhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-night-xxxhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-night-xxxhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-xhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-xhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-xxhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-xxhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-land-xxxhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-land-xxxhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-night/splash.png b/packages/app/android/app/src/main/res/drawable-night/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-hdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-hdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-ldpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-ldpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-mdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-mdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-night-hdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-night-hdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-night-ldpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-night-ldpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-night-mdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-night-mdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-night-xhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-night-xhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-night-xxhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-night-xxhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-night-xxxhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-night-xxxhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-xhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-xhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-xxhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-xxhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-port-xxxhdpi/splash.png b/packages/app/android/app/src/main/res/drawable-port-xxxhdpi/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/packages/app/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable/ic_launcher_background.xml b/packages/app/android/app/src/main/res/drawable/ic_launcher_background.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/drawable/splash.png b/packages/app/android/app/src/main/res/drawable/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/layout/activity_main.xml b/packages/app/android/app/src/main/res/layout/activity_main.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/packages/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/packages/app/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/packages/app/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-ldpi/ic_launcher.png b/packages/app/android/app/src/main/res/mipmap-ldpi/ic_launcher.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-ldpi/ic_launcher_background.png b/packages/app/android/app/src/main/res/mipmap-ldpi/ic_launcher_background.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-ldpi/ic_launcher_foreground.png b/packages/app/android/app/src/main/res/mipmap-ldpi/ic_launcher_foreground.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png b/packages/app/android/app/src/main/res/mipmap-ldpi/ic_launcher_round.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/packages/app/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/packages/app/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/packages/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/packages/app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/values/ic_launcher_background.xml b/packages/app/android/app/src/main/res/values/ic_launcher_background.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/values/strings.xml b/packages/app/android/app/src/main/res/values/strings.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/values/styles.xml b/packages/app/android/app/src/main/res/values/styles.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/app/src/main/res/xml/file_paths.xml b/packages/app/android/app/src/main/res/xml/file_paths.xml
old mode 100644
new mode 100755
diff --git a/packages/app/android/build.gradle b/packages/app/android/build.gradle
old mode 100644
new mode 100755
diff --git a/packages/app/android/capacitor.settings.gradle b/packages/app/android/capacitor.settings.gradle
old mode 100644
new mode 100755
diff --git a/packages/app/android/gradle.properties b/packages/app/android/gradle.properties
old mode 100644
new mode 100755
diff --git a/packages/app/android/gradle/wrapper/gradle-wrapper.jar b/packages/app/android/gradle/wrapper/gradle-wrapper.jar
old mode 100644
new mode 100755
diff --git a/packages/app/android/gradle/wrapper/gradle-wrapper.properties b/packages/app/android/gradle/wrapper/gradle-wrapper.properties
old mode 100644
new mode 100755
diff --git a/packages/app/android/gradlew.bat b/packages/app/android/gradlew.bat
old mode 100644
new mode 100755
diff --git a/packages/app/android/settings.gradle b/packages/app/android/settings.gradle
old mode 100644
new mode 100755
diff --git a/packages/app/android/variables.gradle b/packages/app/android/variables.gradle
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/changelogs/index.jsx b/packages/app/constants/settings/changelogs/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/changelogs/index.less b/packages/app/constants/settings/changelogs/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/profileLinks/index.jsx b/packages/app/constants/settings/components/profileLinks/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/profileLinks/index.less b/packages/app/constants/settings/components/profileLinks/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/sessionItem/icons/chrome.jsx b/packages/app/constants/settings/components/sessionItem/icons/chrome.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/sessionItem/icons/firefox.jsx b/packages/app/constants/settings/components/sessionItem/icons/firefox.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/sessionItem/icons/mobile.jsx b/packages/app/constants/settings/components/sessionItem/icons/mobile.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/sessionItem/index.jsx b/packages/app/constants/settings/components/sessionItem/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/sessionItem/index.less b/packages/app/constants/settings/components/sessionItem/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/sliderValues/index.jsx b/packages/app/constants/settings/components/sliderValues/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/sliderValues/index.less b/packages/app/constants/settings/components/sliderValues/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/slidersWithPresets/index.jsx b/packages/app/constants/settings/components/slidersWithPresets/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/widgetsView/index.jsx b/packages/app/constants/settings/components/widgetsView/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/components/widgetsView/index.less b/packages/app/constants/settings/components/widgetsView/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/player/items/player.compressor/index.jsx b/packages/app/constants/settings/player/items/player.compressor/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/player/items/player.eq/index.jsx b/packages/app/constants/settings/player/items/player.eq/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/privacy/index.jsx b/packages/app/constants/settings/privacy/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/tap_share/context.js b/packages/app/constants/settings/tap_share/context.js
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/tap_share/errors.js b/packages/app/constants/settings/tap_share/errors.js
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/tap_share/index.jsx b/packages/app/constants/settings/tap_share/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/tap_share/index.less b/packages/app/constants/settings/tap_share/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/tap_share/steps/check_register/index.jsx b/packages/app/constants/settings/tap_share/steps/check_register/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/tap_share/steps/data_editor/index.jsx b/packages/app/constants/settings/tap_share/steps/data_editor/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/tap_share/steps/success/index.jsx b/packages/app/constants/settings/tap_share/steps/success/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/tap_share/steps/tag_writter/index.jsx b/packages/app/constants/settings/tap_share/steps/tag_writter/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/settings/widgets/index.jsx b/packages/app/constants/settings/widgets/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/constants/userLinksDecorators.js b/packages/app/constants/userLinksDecorators.js
old mode 100644
new mode 100755
diff --git a/packages/app/electron-builder.json b/packages/app/electron-builder.json
old mode 100644
new mode 100755
diff --git a/packages/app/package.json b/packages/app/package.json
index 4d1a25d4..750030ab 100755
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -42,6 +42,7 @@
"@mui/material": "^5.11.9",
"@ragestudio/cordova-nfc": "^1.2.0",
"@react-spring/web": "^9.7.2",
+ "@ruffle-rs/ruffle": "^0.1.0-nightly.2024.2.23",
"@sentry/browser": "^7.64.0",
"@tanstack/react-virtual": "^3.0.0-beta.54",
"@tsmx/human-readable": "^1.0.7",
@@ -100,6 +101,7 @@
"react-motion": "0.5.2",
"react-rnd": "10.3.5",
"react-router-dom": "^6.6.2",
+ "react-ruffle": "^1.0.2",
"react-ticker": "^1.3.2",
"react-transition-group": "^4.4.5",
"react-useanimations": "^2.10.0",
@@ -116,7 +118,6 @@
"tseep": "^1.1.1",
"ua-parser-js": "^1.0.36",
"virtual-scroller": "^1.12.3",
- "vite": "4.5.2",
"wait-on": "^6.0.1"
},
"devDependencies": {
@@ -137,7 +138,6 @@
"@types/react-router-dom": "^5.1.8",
"@typescript-eslint/eslint-plugin": "^4.29.0",
"concurrently": "^7.4.0",
- "corenode": "0.28.26",
"cors": "2.8.5",
"cross-env": "^7.0.3",
"electron": "^21.0.1",
@@ -175,4 +175,4 @@
]
}
}
-}
\ No newline at end of file
+}
diff --git a/packages/app/public/assets/badges/early_streamer.svg b/packages/app/public/assets/badges/early_streamer.svg
old mode 100644
new mode 100755
diff --git a/packages/app/public/assets/badges/x1.svg b/packages/app/public/assets/badges/x1.svg
old mode 100644
new mode 100755
diff --git a/packages/app/public/assets/icons/icon-128.webp b/packages/app/public/assets/icons/icon-128.webp
old mode 100644
new mode 100755
diff --git a/packages/app/public/assets/icons/icon-192.webp b/packages/app/public/assets/icons/icon-192.webp
old mode 100644
new mode 100755
diff --git a/packages/app/public/assets/icons/icon-256.webp b/packages/app/public/assets/icons/icon-256.webp
old mode 100644
new mode 100755
diff --git a/packages/app/public/assets/icons/icon-48.webp b/packages/app/public/assets/icons/icon-48.webp
old mode 100644
new mode 100755
diff --git a/packages/app/public/assets/icons/icon-512.webp b/packages/app/public/assets/icons/icon-512.webp
old mode 100644
new mode 100755
diff --git a/packages/app/public/assets/icons/icon-72.webp b/packages/app/public/assets/icons/icon-72.webp
old mode 100644
new mode 100755
diff --git a/packages/app/public/assets/icons/icon-96.webp b/packages/app/public/assets/icons/icon-96.webp
old mode 100644
new mode 100755
diff --git a/packages/app/public/manifest.webmanifest b/packages/app/public/manifest.webmanifest
old mode 100644
new mode 100755
diff --git a/packages/app/public/workers/audioStreamProcess.js b/packages/app/public/workers/audioStreamProcess.js
old mode 100644
new mode 100755
diff --git a/packages/app/public/workers/wav-decoder.js b/packages/app/public/workers/wav-decoder.js
old mode 100644
new mode 100755
diff --git a/packages/app/public/worklets/AudioDataWorkletStream.js b/packages/app/public/worklets/AudioDataWorkletStream.js
old mode 100644
new mode 100755
diff --git a/packages/app/resources/icon-background.png b/packages/app/resources/icon-background.png
old mode 100644
new mode 100755
diff --git a/packages/app/resources/icon-foreground.png b/packages/app/resources/icon-foreground.png
old mode 100644
new mode 100755
diff --git a/packages/app/resources/icon-only.svg b/packages/app/resources/icon-only.svg
old mode 100644
new mode 100755
diff --git a/packages/app/resources/splash-dark.png b/packages/app/resources/splash-dark.png
old mode 100644
new mode 100755
diff --git a/packages/app/resources/splash.png b/packages/app/resources/splash.png
old mode 100644
new mode 100755
diff --git a/packages/app/src/classes/PerformanceLog/index.js b/packages/app/src/classes/PerformanceLog/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/AnimationPlayer/index.jsx b/packages/app/src/components/AnimationPlayer/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/AnimationPlayer/index.less b/packages/app/src/components/AnimationPlayer/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Icons/customIcons/crown.jsx b/packages/app/src/components/Icons/customIcons/crown.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Icons/customIcons/verifiedBadge.jsx b/packages/app/src/components/Icons/customIcons/verifiedBadge.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Icons/customIcons/vrchat.jsx b/packages/app/src/components/Icons/customIcons/vrchat.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Layout/draggableDrawer/index.jsx b/packages/app/src/components/Layout/draggableDrawer/index.jsx
index 4d1073ed..b348262d 100755
--- a/packages/app/src/components/Layout/draggableDrawer/index.jsx
+++ b/packages/app/src/components/Layout/draggableDrawer/index.jsx
@@ -3,7 +3,6 @@ import React, { Component } from "react"
import { Motion, spring, presets } from "react-motion"
import classnames from "classnames"
import PropTypes from "prop-types"
-import document from "global/document"
import Observer from "react-intersection-observer"
import { css } from "@emotion/css"
import { createPortal } from "react-dom"
diff --git a/packages/app/src/components/Layout/quickNav/index.jsx b/packages/app/src/components/Layout/quickNav/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Layout/toolsBar/index.jsx b/packages/app/src/components/Layout/toolsBar/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Layout/toolsBar/index.less b/packages/app/src/components/Layout/toolsBar/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Layout/topBar/index.jsx b/packages/app/src/components/Layout/topBar/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Layout/topBar/index.less b/packages/app/src/components/Layout/topBar/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/LikeButton/index.jsx b/packages/app/src/components/LikeButton/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/LikeButton/index.less b/packages/app/src/components/LikeButton/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/LimitAlert/index.jsx b/packages/app/src/components/LimitAlert/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/MarkdownReader/index.jsx b/packages/app/src/components/MarkdownReader/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/MarkdownReader/index.less b/packages/app/src/components/MarkdownReader/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/PlaylistCreator/index.jsx b/packages/app/src/components/Music/PlaylistCreator/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/PlaylistCreator/index.less b/packages/app/src/components/Music/PlaylistCreator/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/PlaylistItem/index.jsx b/packages/app/src/components/Music/PlaylistItem/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/PlaylistItem/index.less b/packages/app/src/components/Music/PlaylistItem/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/PlaylistTimelineEntry/index.jsx b/packages/app/src/components/Music/PlaylistTimelineEntry/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/PlaylistTimelineEntry/index.less b/packages/app/src/components/Music/PlaylistTimelineEntry/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/PlaylistView/index.jsx b/packages/app/src/components/Music/PlaylistView/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/Track/index.jsx b/packages/app/src/components/Music/Track/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Music/Track/index.less b/packages/app/src/components/Music/Track/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/ObjectInspector/index.jsx b/packages/app/src/components/ObjectInspector/index.jsx
deleted file mode 100755
index fa1ff017..00000000
--- a/packages/app/src/components/ObjectInspector/index.jsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import React from "react"
-import * as antd from "antd"
-import { decycle } from "@corenode/utils"
-import { Icons } from "components/Icons"
-
-function parseTreeData(data, backKey) {
- const keys = Object.keys(data)
- let result = Array()
-
- keys.forEach((key) => {
- const value = data[key]
- const valueType = typeof value
- const obj = Object()
-
- obj.key = backKey ? `${backKey}-${key}` : key
- obj.title = key
- obj.type = valueType
-
- if (valueType === "object") {
- obj.children = parseTreeData(value)
- } else {
- obj.children = [
- {
- key: `${obj.key}-value`,
- title: "value",
- icon: ,
- children: [
- {
- key: `${obj.key}-value-indicator`,
- title: String(value),
- icon: ,
- },
- ],
- },
- {
- key: `${obj.key}-type`,
- title: "type",
- children: [
- {
- key: `${obj.key}-type-indicator`,
- title: valueType,
- },
- ],
- },
- ]
- }
-
- result.push(obj)
- })
-
- return result
-}
-
-export default class ObjectInspector extends React.Component {
- state = {
- data: null,
- expandedKeys: [],
- autoExpandParent: true,
- }
-
- componentDidMount() {
- const raw = decycle(this.props.data)
- const data = parseTreeData(raw)
-
- this.setState({ raw, data })
- }
-
- onExpand = (expandedKeys) => {
- this.setState({
- expandedKeys,
- autoExpandParent: false,
- })
- }
-
- render() {
- const { expandedKeys, autoExpandParent } = this.state
- return (
-
-
}
- onExpand={this.onExpand}
- expandedKeys={expandedKeys}
- autoExpandParent={autoExpandParent}
- treeData={this.state.data}
- />
-
- )
- }
-}
diff --git a/packages/app/src/components/PagePanels/components/NavMenu/index.jsx b/packages/app/src/components/PagePanels/components/NavMenu/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/PagePanels/components/NavMenu/index.less b/packages/app/src/components/PagePanels/components/NavMenu/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/AudioVolume/index.jsx b/packages/app/src/components/Player/AudioVolume/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/AudioVolume/index.less b/packages/app/src/components/Player/AudioVolume/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/BackgroundMediaPlayer/index.jsx b/packages/app/src/components/Player/BackgroundMediaPlayer/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/BackgroundMediaPlayer/index.less b/packages/app/src/components/Player/BackgroundMediaPlayer/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/ChangeModeButton/index.jsx b/packages/app/src/components/Player/ChangeModeButton/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/Controls/index.jsx b/packages/app/src/components/Player/Controls/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/Controls/index.less b/packages/app/src/components/Player/Controls/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/ExtraActions/index.jsx b/packages/app/src/components/Player/ExtraActions/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/SeekBar/index.jsx b/packages/app/src/components/Player/SeekBar/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/SeekBar/index.less b/packages/app/src/components/Player/SeekBar/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/ToolBarPlayer/index.jsx b/packages/app/src/components/Player/ToolBarPlayer/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/Player/ToolBarPlayer/index.less b/packages/app/src/components/Player/ToolBarPlayer/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/PostCard/index.less b/packages/app/src/components/PostCard/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/SortableList/index.jsx b/packages/app/src/components/SortableList/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/SortableList/index.less b/packages/app/src/components/SortableList/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/SyncRoomCard/index.jsx b/packages/app/src/components/SyncRoomCard/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/SyncRoomCard/index.less b/packages/app/src/components/SyncRoomCard/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/TapShare/Dialog/index.jsx b/packages/app/src/components/TapShare/Dialog/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/TapShare/Dialog/index.less b/packages/app/src/components/TapShare/Dialog/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/UserBadges/index.less b/packages/app/src/components/UserBadges/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/UserSelector/index.jsx b/packages/app/src/components/UserSelector/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/UserSelector/index.less b/packages/app/src/components/UserSelector/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/WidgetItemPreview/index.jsx b/packages/app/src/components/WidgetItemPreview/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/WidgetItemPreview/index.less b/packages/app/src/components/WidgetItemPreview/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/WidgetsBrowser/index.jsx b/packages/app/src/components/WidgetsBrowser/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/WidgetsBrowser/index.less b/packages/app/src/components/WidgetsBrowser/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/WidgetsWrapper/index.jsx b/packages/app/src/components/WidgetsWrapper/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/WidgetsWrapper/index.less b/packages/app/src/components/WidgetsWrapper/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/components/index.js b/packages/app/src/components/index.js
index 9d3c8f47..51f4b126 100755
--- a/packages/app/src/components/index.js
+++ b/packages/app/src/components/index.js
@@ -10,7 +10,6 @@ export { default as Login } from "./Login"
// COMPLEX COMPONENTS
export { default as ActionsBar } from "./ActionsBar"
-export { default as ObjectInspector } from "./ObjectInspector"
export { default as ModifierTag } from "./ModifierTag"
export { default as StepsForm } from "./StepsForm"
export { default as SearchButton } from "./SearchButton"
diff --git a/packages/app/src/contexts/WithPlayerContext/index.jsx b/packages/app/src/contexts/WithPlayerContext/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/contexts/WithPlaylistContext/index.js b/packages/app/src/contexts/WithPlaylistContext/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/api/api.core.js b/packages/app/src/cores/api/api.core.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/haptics/haptics.core.js b/packages/app/src/cores/haptics/haptics.core.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/nfc/nfc.core.js b/packages/app/src/cores/nfc/nfc.core.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/mediaSession.js b/packages/app/src/cores/player/mediaSession.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/player.storage.js b/packages/app/src/cores/player/player.storage.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/presets.js b/packages/app/src/cores/player/presets.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/processors/bpmNode/index.js b/packages/app/src/cores/player/processors/bpmNode/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/processors/compressorNode/index.js b/packages/app/src/cores/player/processors/compressorNode/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/processors/eqNode/index.js b/packages/app/src/cores/player/processors/eqNode/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/processors/gainNode/index.js b/packages/app/src/cores/player/processors/gainNode/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/processors/index.js b/packages/app/src/cores/player/processors/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/processors/node.js b/packages/app/src/cores/player/processors/node.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/processors/spatialNode/index.js b/packages/app/src/cores/player/processors/spatialNode/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/player/services.js b/packages/app/src/cores/player/services.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/rooms/rooms.core.js b/packages/app/src/cores/rooms/rooms.core.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/sync/sync.core.js b/packages/app/src/cores/sync/sync.core.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/tasksQueue/tasksQueue.core.js b/packages/app/src/cores/tasksQueue/tasksQueue.core.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/cores/widgets/widgets.core.js b/packages/app/src/cores/widgets/widgets.core.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/debug/components/index.js b/packages/app/src/debug/components/index.js
deleted file mode 100755
index 0d8cdebd..00000000
--- a/packages/app/src/debug/components/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default as ThemeDebug } from "./theme"
\ No newline at end of file
diff --git a/packages/app/src/debug/components/api/index.jsx b/packages/app/src/debuggers/api/index.jsx
similarity index 100%
rename from packages/app/src/debug/components/api/index.jsx
rename to packages/app/src/debuggers/api/index.jsx
diff --git a/packages/app/src/debuggers/email/index.jsx b/packages/app/src/debuggers/email/index.jsx
new file mode 100644
index 00000000..c95c180b
--- /dev/null
+++ b/packages/app/src/debuggers/email/index.jsx
@@ -0,0 +1,9 @@
+import React from "react"
+
+const EmailDebugger = () => {
+ return
+
Email
+
+}
+
+export default EmailDebugger
\ No newline at end of file
diff --git a/packages/app/src/debug/components/theme/index.jsx b/packages/app/src/debuggers/theme/index.jsx
similarity index 100%
rename from packages/app/src/debug/components/theme/index.jsx
rename to packages/app/src/debuggers/theme/index.jsx
diff --git a/packages/app/src/debug/components/theme/index.less b/packages/app/src/debuggers/theme/index.less
similarity index 100%
rename from packages/app/src/debug/components/theme/index.less
rename to packages/app/src/debuggers/theme/index.less
diff --git a/packages/app/src/debug/components/timeCalculation/index.jsx b/packages/app/src/debuggers/timeCalculation/index.jsx
similarity index 100%
rename from packages/app/src/debug/components/timeCalculation/index.jsx
rename to packages/app/src/debuggers/timeCalculation/index.jsx
diff --git a/packages/app/src/debug/components/timeCalculation/index.less b/packages/app/src/debuggers/timeCalculation/index.less
similarity index 100%
rename from packages/app/src/debug/components/timeCalculation/index.less
rename to packages/app/src/debuggers/timeCalculation/index.less
diff --git a/packages/app/src/hooks/useDebounce/index.js b/packages/app/src/hooks/useDebounce/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/hooks/useDefaultVisibility/index.js b/packages/app/src/hooks/useDefaultVisibility/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/hooks/useLayoutInterface/index.js b/packages/app/src/hooks/useLayoutInterface/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/hooks/useRandomFeaturedWallpaperUrl/index.js b/packages/app/src/hooks/useRandomFeaturedWallpaperUrl/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/hooks/useTopBar/index.jsx b/packages/app/src/hooks/useTopBar/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/hooks/useUrlQueryActiveKey/index.js b/packages/app/src/hooks/useUrlQueryActiveKey/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/hooks/useWsEvents/index.js b/packages/app/src/hooks/useWsEvents/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/layouts/blank/index.jsx b/packages/app/src/layouts/blank/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/layouts/components/floatingStack/index.jsx b/packages/app/src/layouts/components/floatingStack/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/layouts/components/floatingStack/index.less b/packages/app/src/layouts/components/floatingStack/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/layouts/components/modals/index.jsx b/packages/app/src/layouts/components/modals/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/layouts/components/modals/index.less b/packages/app/src/layouts/components/modals/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/@mobile-views/creator/index.jsx b/packages/app/src/pages/@mobile-views/creator/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/@mobile-views/creator/index.less b/packages/app/src/pages/@mobile-views/creator/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/@mobile-views/player/index.jsx b/packages/app/src/pages/@mobile-views/player/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/@mobile-views/player/index.less b/packages/app/src/pages/@mobile-views/player/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/account/index.mobile.jsx b/packages/app/src/pages/account/index.mobile.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/account/index.mobile.less b/packages/app/src/pages/account/index.mobile.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/account/tabs/details/index.less b/packages/app/src/pages/account/tabs/details/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/account/tabs/followers/index.less b/packages/app/src/pages/account/tabs/followers/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/account/tabs/music/index.jsx b/packages/app/src/pages/account/tabs/music/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/account/tabs/music/index.less b/packages/app/src/pages/account/tabs/music/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/forms/register/index.jsx b/packages/app/src/pages/auth/forms/register/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/forms/register/index.less b/packages/app/src/pages/auth/forms/register/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/forms/register/steps/email/index.jsx b/packages/app/src/pages/auth/forms/register/steps/email/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/forms/register/steps/password/index.jsx b/packages/app/src/pages/auth/forms/register/steps/password/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/forms/register/steps/password/index.less b/packages/app/src/pages/auth/forms/register/steps/password/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/forms/register/steps/tos/index.jsx b/packages/app/src/pages/auth/forms/register/steps/tos/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/forms/register/steps/username/index.jsx b/packages/app/src/pages/auth/forms/register/steps/username/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/forms/selector/index.jsx b/packages/app/src/pages/auth/forms/selector/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/auth/index.mobile.less b/packages/app/src/pages/auth/index.mobile.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/debug/index.jsx b/packages/app/src/pages/debug/index.jsx
similarity index 92%
rename from packages/app/src/debug/index.jsx
rename to packages/app/src/pages/debug/index.jsx
index efb669b1..5a597f28 100755
--- a/packages/app/src/debug/index.jsx
+++ b/packages/app/src/pages/debug/index.jsx
@@ -3,10 +3,12 @@ import loadable from "@loadable/component"
import * as antd from "antd"
const DebuggersComponentsPaths = {
- ...import.meta.glob("/src/debug/components/**/[a-z[]*.jsx"),
- ...import.meta.glob("/src/debug/components/**/[a-z[]*.tsx")
+ ...import.meta.glob("/src/debuggers/**/[a-z[]*.jsx"),
+ ...import.meta.glob("/src/debuggers/**/[a-z[]*.tsx")
}
+console.log(DebuggersComponentsPaths)
+
class DebuggerRender extends React.PureComponent {
state = {
error: null,
diff --git a/packages/app/src/debug/index.less b/packages/app/src/pages/debug/index.less
similarity index 100%
rename from packages/app/src/debug/index.less
rename to packages/app/src/pages/debug/index.less
diff --git a/packages/app/src/pages/games/pony/index.jsx b/packages/app/src/pages/games/pony/index.jsx
new file mode 100644
index 00000000..633000ec
--- /dev/null
+++ b/packages/app/src/pages/games/pony/index.jsx
@@ -0,0 +1,65 @@
+import React from "react"
+import * as antd from "antd"
+
+import "./index.less"
+
+const swfResource = "http://storage.ragestudio.net/gose-uploads/d4rcb9h-3a24f55c-12b4-4c03-a351-a06ed17111c9.swf"
+
+function loadRuffle() {
+ return new Promise((resolve, reject) => {
+ const script = document.createElement("script")
+
+ script.src = "https://unpkg.com/@ruffle-rs/ruffle"
+ script.async = true
+ script.onload = () => {
+ return resolve(script)
+ }
+
+ document.body.appendChild(script)
+ })
+}
+
+class Game extends React.Component {
+ ruffleScript = null
+
+ playerRef = React.createRef()
+
+ componentDidMount = async () => {
+ app.layout.toggleCenteredContent(false)
+
+ this.ruffleScript = await loadRuffle()
+
+ const ruffle = window.RufflePlayer.newest()
+ const player = ruffle.createPlayer()
+
+ this.playerRef.current.appendChild(player)
+
+ player.load(swfResource)
+ }
+
+ componentWillUnmount() {
+ document.body.removeChild(this.ruffleScript)
+ }
+
+ downloadResource = () => {
+ const a = document.createElement("a")
+ a.href = swfResource
+ a.download = "pony.swf"
+ a.click()
+ }
+
+ render() {
+ return
+ }
+}
+
+export default Game
\ No newline at end of file
diff --git a/packages/app/src/pages/games/pony/index.less b/packages/app/src/pages/games/pony/index.less
new file mode 100644
index 00000000..eb3d7910
--- /dev/null
+++ b/packages/app/src/pages/games/pony/index.less
@@ -0,0 +1,23 @@
+.ruffle_game {
+ display: flex;
+ flex-direction: column;
+
+ align-items: center;
+ justify-content: center;
+
+ width: 100%;
+ height: 90vh;
+
+ gap: 20px;
+
+ ruffle-player {
+ width: 100%;
+ height: 100%;
+
+ border-radius: 12px;
+
+ canvas {
+ border-radius: 12px;
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/app/src/pages/index.mobile.jsx b/packages/app/src/pages/index.mobile.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/insiders/index.jsx b/packages/app/src/pages/insiders/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/lyrics/index.jsx b/packages/app/src/pages/lyrics/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/lyrics/index.less b/packages/app/src/pages/lyrics/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/music/components/dashboard/index.jsx b/packages/app/src/pages/music/components/dashboard/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/music/components/dashboard/releases/index.jsx b/packages/app/src/pages/music/components/dashboard/releases/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/music/components/favorites/index.jsx b/packages/app/src/pages/music/components/favorites/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/music/components/library/index.jsx b/packages/app/src/pages/music/components/library/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/music/components/library/index.less b/packages/app/src/pages/music/components/library/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/music/creator/components/BasicInformation/index.jsx b/packages/app/src/pages/music/creator/components/BasicInformation/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/music/creator/components/TracksUploads/index.jsx b/packages/app/src/pages/music/creator/components/TracksUploads/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/music/creator/components/TracksUploads/index.less b/packages/app/src/pages/music/creator/components/TracksUploads/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/nfc/[tag_id].jsx b/packages/app/src/pages/nfc/[tag_id].jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/privacy/index.jsx b/packages/app/src/pages/privacy/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/settings/components/SettingItemComponent/index.jsx b/packages/app/src/pages/settings/components/SettingItemComponent/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/settings/components/SettingTab/index.jsx b/packages/app/src/pages/settings/components/SettingTab/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/settings/index.jsx b/packages/app/src/pages/settings/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/settings/index.mobile.jsx b/packages/app/src/pages/settings/index.mobile.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/settings/index.mobile.less b/packages/app/src/pages/settings/index.mobile.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/CategoriesSelector/index.jsx b/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/CategoriesSelector/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/CategoryViewResolver/index.jsx b/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/CategoryViewResolver/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/ProfileEditor/index.jsx b/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/ProfileEditor/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/ProfileEditor/index.less b/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/ProfileEditor/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/ProfileSelector/index.jsx b/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/ProfileSelector/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/StreamingKeyViewer/index.jsx b/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/StreamingKeyViewer/index.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/StreamingKeyViewer/index.less b/packages/app/src/pages/tv/tabs/livestreamControlPanel/components/StreamingKeyViewer/index.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/splash.jsx b/packages/app/src/splash.jsx
old mode 100644
new mode 100755
diff --git a/packages/app/src/theme/splash.less b/packages/app/src/theme/splash.less
old mode 100644
new mode 100755
diff --git a/packages/app/src/utils/hexToRGB/index.js b/packages/app/src/utils/hexToRGB/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/utils/rgbToValues/index.js b/packages/app/src/utils/rgbToValues/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/utils/rootVarHexToRGBValues/index.js b/packages/app/src/utils/rootVarHexToRGBValues/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/utils/seekToTimeLabel/index.js b/packages/app/src/utils/seekToTimeLabel/index.js
old mode 100644
new mode 100755
diff --git a/packages/app/src/utils/storagedState/index.js b/packages/app/src/utils/storagedState/index.js
old mode 100644
new mode 100755
diff --git a/packages/chat_server/.env-example b/packages/chat_server/.env-example
deleted file mode 100755
index 27627a20..00000000
--- a/packages/chat_server/.env-example
+++ /dev/null
@@ -1,15 +0,0 @@
-DB_HOSTNAME=""
-DB_NAME=""
-DB_USER=""
-DB_PWD=""
-
-S3_ENDPOINT=""
-S3_REGION=""
-S3_PORT=""
-S3_USE_SSL=""
-S3_BUCKET=""
-S3_ACCESS_KEY=""
-S3_SECRET_KEY=""
-
-COMTY_ACCESS_KEY=""
-COMTY_SECRET_KEY=""
\ No newline at end of file
diff --git a/packages/chat_server/.gitignore b/packages/chat_server/.gitignore
deleted file mode 100644
index b124b166..00000000
--- a/packages/chat_server/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-shared-classes
\ No newline at end of file
diff --git a/packages/chat_server/.infisical.json b/packages/chat_server/.infisical.json
deleted file mode 100644
index fb927147..00000000
--- a/packages/chat_server/.infisical.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "workspaceId": "64519574a8a691b55e8b361d",
- "defaultEnvironment": "dev",
- "gitBranchToEnvironmentMapping": {
- "master": "prod"
- }
-}
\ No newline at end of file
diff --git a/packages/chat_server/Dockerfile b/packages/chat_server/Dockerfile
deleted file mode 100755
index 0c982203..00000000
--- a/packages/chat_server/Dockerfile
+++ /dev/null
@@ -1,26 +0,0 @@
-FROM node:16-bullseye-slim
-
-RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
-
-RUN apt update
-RUN apt install --no-install-recommends curl python yarn build-essential -y
-
-RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
-
-WORKDIR /home/node/app
-USER node
-
-EXPOSE 3020
-
-COPY package.json ./
-COPY --chown=node:node . .
-
-RUN chmod -R 777 /home/node/app
-
-RUN export NODE_ENV=production
-
-RUN yarn global add cross-env
-RUN yarn install --production
-RUN yarn build
-
-CMD ["yarn", "run", "run:prod"]
\ No newline at end of file
diff --git a/packages/chat_server/package.json b/packages/chat_server/package.json
deleted file mode 100755
index a80b22ee..00000000
--- a/packages/chat_server/package.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "name": "@comty/chat_server",
- "version": "0.60.3",
- "main": "dist/index.js",
- "scripts": {
- "build": "hermes build",
- "dev": "nodemon --ignore dist/ --exec hermes-node ./src/index.js",
- "run:prod": "cross-env NODE_ENV=production node ./dist/index.js"
- },
- "shared": {
- "classes/FileUpload": "src/shared-classes/FileUpload",
- "classes/CacheService": "src/shared-classes/CacheService",
- "classes/ComtyClient": "src/shared-classes/ComtyClient",
- "classes/RedisClient": "src/shared-classes/RedisClient",
- "classes/StorageClient": "src/shared-classes/StorageClient",
- "classes/DbManager": "src/shared-classes/DbManager",
- "classes/Errors": "src/shared-classes/Errors",
- "classes/DbModels": "src/shared-classes/DbModels"
- },
- "license": "MIT",
- "dependencies": {
- "@foxify/events": "^2.1.0",
- "axios": "^1.4.0",
- "bcrypt": "5.0.1",
- "comty.js": "^0.58.2",
- "connect-mongo": "^4.6.0",
- "cors": "^2.8.5",
- "dotenv": "^16.0.3",
- "express": "^4.18.2",
- "jsonwebtoken": "8.5.1",
- "linebridge": "0.15.12",
- "luxon": "^3.0.4",
- "minio": "^7.0.32",
- "moment": "2.29.4",
- "moment-timezone": "0.5.37",
- "mongoose": "^6.9.0",
- "morgan": "^1.10.0",
- "redis": "^4.6.6",
- "socket.io": "^4.5.4"
- },
- "devDependencies": {
- "@ragestudio/hermes": "^0.1.0",
- "cross-env": "^7.0.3",
- "nodemon": "^2.0.15"
- }
-}
\ No newline at end of file
diff --git a/packages/chat_server/src/index.js b/packages/chat_server/src/index.js
deleted file mode 100755
index 2c5a7eb1..00000000
--- a/packages/chat_server/src/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import path from "path"
-global.FORCE_ENV = "prod"
-require(path.resolve(process.cwd(), "../../shared/lib/api_wrapper"))
\ No newline at end of file
diff --git a/packages/comty.js/package.json b/packages/comty.js/package.json
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/handlers/measurePing.js b/packages/comty.js/src/handlers/measurePing.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/handlers/request.js b/packages/comty.js/src/handlers/request.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/helpers/handleAfterRequest.js b/packages/comty.js/src/helpers/handleAfterRequest.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/helpers/handleBeforeRequest.js b/packages/comty.js/src/helpers/handleBeforeRequest.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/helpers/handleRegenerationEvent.js b/packages/comty.js/src/helpers/handleRegenerationEvent.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/helpers/withSettings.js b/packages/comty.js/src/helpers/withSettings.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/helpers/withStorage.js b/packages/comty.js/src/helpers/withStorage.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/hooks/useRequest/index.js b/packages/comty.js/src/hooks/useRequest/index.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/index.js b/packages/comty.js/src/index.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/models/index.js b/packages/comty.js/src/models/index.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/models/music/index.js b/packages/comty.js/src/models/music/index.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/models/nfc/index.js b/packages/comty.js/src/models/nfc/index.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/models/search/index.js b/packages/comty.js/src/models/search/index.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/models/sync/services/tidal.js b/packages/comty.js/src/models/sync/services/tidal.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/models/widget/index.js b/packages/comty.js/src/models/widget/index.js
old mode 100644
new mode 100755
diff --git a/packages/comty.js/src/remotes.js b/packages/comty.js/src/remotes.js
old mode 100644
new mode 100755
diff --git a/packages/file_server/.env-example b/packages/file_server/.env-example
deleted file mode 100755
index 0119f1bd..00000000
--- a/packages/file_server/.env-example
+++ /dev/null
@@ -1,20 +0,0 @@
-DB_HOSTNAME=""
-DB_NAME=""
-DB_USER=""
-DB_PWD=""
-
-S3_ENDPOINT=""
-S3_REGION=""
-S3_PORT=""
-S3_USE_SSL=""
-S3_BUCKET=""
-S3_ACCESS_KEY=""
-S3_SECRET_KEY=""
-
-REDIS_HOST=""
-REDIS_PORT=""
-REDIS_USERNAME=""
-REDIS_PASSWORD=""
-
-COMTY_ACCESS_KEY=""
-COMTY_SECRET_KEY=""
\ No newline at end of file
diff --git a/packages/file_server/.gitignore b/packages/file_server/.gitignore
deleted file mode 100644
index b124b166..00000000
--- a/packages/file_server/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-shared-classes
\ No newline at end of file
diff --git a/packages/file_server/.infisical.json b/packages/file_server/.infisical.json
deleted file mode 100644
index fb927147..00000000
--- a/packages/file_server/.infisical.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "workspaceId": "64519574a8a691b55e8b361d",
- "defaultEnvironment": "dev",
- "gitBranchToEnvironmentMapping": {
- "master": "prod"
- }
-}
\ No newline at end of file
diff --git a/packages/file_server/Dockerfile b/packages/file_server/Dockerfile
deleted file mode 100755
index df051039..00000000
--- a/packages/file_server/Dockerfile
+++ /dev/null
@@ -1,26 +0,0 @@
-FROM node:16-bullseye-slim
-
-RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
-
-RUN apt update
-RUN apt install --no-install-recommends curl ffmpeg python yarn build-essential -y
-
-RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
-
-WORKDIR /home/node/app
-USER node
-
-EXPOSE 3050
-
-COPY package.json ./
-COPY --chown=node:node . .
-
-RUN chmod -R 777 /home/node/app
-
-RUN export NODE_ENV=production
-
-RUN yarn global add cross-env
-RUN yarn install --production
-RUN yarn build
-
-CMD ["yarn", "run", "run:prod"]
\ No newline at end of file
diff --git a/packages/file_server/fixments/00_fix_audio_metadata.js b/packages/file_server/fixments/00_fix_audio_metadata.js
deleted file mode 100644
index 4ffc91b6..00000000
--- a/packages/file_server/fixments/00_fix_audio_metadata.js
+++ /dev/null
@@ -1,148 +0,0 @@
-global.toBoolean = (value) => {
- if (typeof value === "boolean") {
- return value
- }
-
- if (typeof value === "string") {
- return value.toLowerCase() === "true"
- }
-
- return false
-}
-
-import DbManager from "../src/shared-classes/DbManager"
-import StorageClient from "../src/shared-classes/StorageClient"
-
-import audioProcess from "../src/services/post-process/audio"
-
-import { Track } from "../../music_server/src/models"
-
-import axios from "axios"
-import fs from "fs"
-import path from "path"
-import pMap from "p-map"
-
-const tmpPath = path.resolve(__dirname, ".tmp")
-
-let index = 0
-let tracksLength = 0
-
-async function recalculateMetadata(track) {
- console.log(`\n`)
- console.time(`recalculation ${track._id}`)
- console.log(`Recalculating metadata for ${track._id}`)
-
- // parse url https://domain/buket/file and fetch buket and file
- const regex = new RegExp(`^https://(.*?)/(.*)$`)
-
- const match = regex.exec(track.source)
-
- const objectName = match[2].split("/").slice(1).join("/")
-
- const filePath = path.resolve(tmpPath, objectName)
-
- try {
- if (!track.metadata) {
- console.time(`fetching ${track._id}`)
- // storage obj on memory
- let file = await axios.get(track.source, {
- responseType: "stream",
- })
-
- if (!fs.existsSync(path.dirname(filePath))) {
- fs.mkdirSync(path.dirname(filePath), { recursive: true })
- }
-
- // write file to tmpPath
- const fileWriter = fs.createWriteStream(filePath)
-
- file.data.pipe(fileWriter)
-
- await new Promise((resolve, reject) => {
- fileWriter.on("finish", resolve)
- fileWriter.on("error", reject)
- })
- console.timeEnd(`fetching ${track._id}`)
-
- console.time(`processing ${track._id}`)
- file = await audioProcess({
- filepath: filePath
- })
- track.metadata = file.metadata
-
- if (!track.publisher) {
- track.publisher = {}
- }
- await track.save()
- await fs.promises.unlink(filePath)
-
- console.timeEnd(`processing ${track._id}`)
-
- console.log(`Updated metadata for ${track._id}`, track.metadata)
- } else {
- console.log(`Metadata already exists for ${track._id}, skipping...`)
- }
- } catch (error) {
- console.error(error)
-
- if (fs.existsSync(filePath)) {
- await fs.promises.unlink(filePath)
- }
- }
-
- index++
-
- console.timeEnd(`recalculation ${track._id}`)
- console.log(`Metadata done [${index}/${tracksLength}]`)
-}
-
-async function main() {
- console.time("fix audio metadata")
-
- const db = new DbManager()
- const storage = StorageClient()
-
- await db.initialize()
- await storage.initialize()
-
- console.log(`Finding tracks...`)
-
- console.time("finding tracks")
-
- let tracks = await Track.find({
- source: {
- $exists: true,
- },
- })
-
- tracksLength = tracks.length
-
- console.timeEnd("finding tracks")
-
- console.log(`Found ${tracks.length} tracks.`)
-
- console.log(`Starting fix...\n`)
-
- if (!fs.existsSync(tmpPath)) {
- fs.mkdirSync(tmpPath)
- }
-
- await pMap(tracks, recalculateMetadata, {
- concurrency: 3,
- })
-
- console.timeEnd("fix audio metadata")
- console.log("Done!")
-
- process.on("exit", () => {
- console.log("Exiting...")
- fs.promises.rmdir(tmpPath, { recursive: true })
- })
-
- process.exit(0)
-}
-
-main().catch((error) => {
- console.error(error)
- process.exit(1)
-})
\ No newline at end of file
diff --git a/packages/file_server/package.json b/packages/file_server/package.json
deleted file mode 100644
index 502c0f90..00000000
--- a/packages/file_server/package.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "@comty/file_server",
- "version": "0.60.3",
- "main": "dist/index.js",
- "scripts": {
- "build": "hermes build",
- "dev": "cross-env NODE_ENV=development nodemon --ignore dist/ --exec hermes-node ./src/index.js",
- "run:prod": "cross-env NODE_ENV=production node ./dist/index.js"
- },
- "shared": {
- "classes/FileUpload": "src/shared-classes/FileUpload",
- "classes/CacheService": "src/shared-classes/CacheService",
- "classes/ComtyClient": "src/shared-classes/ComtyClient",
- "classes/RedisClient": "src/shared-classes/RedisClient",
- "classes/StorageClient": "src/shared-classes/StorageClient",
- "classes/DbManager": "src/shared-classes/DbManager",
- "classes/Errors": "src/shared-classes/Errors",
- "classes/DbModels": "src/shared-classes/DbModels"
- },
- "license": "MIT",
- "dependencies": {
- "@foxify/events": "^2.1.0",
- "@octokit/rest": "^19.0.7",
- "axios": "^1.4.0",
- "backblaze-b2": "^1.7.0",
- "bcrypt": "^5.1.0",
- "busboy": "^1.6.0",
- "comty.js": "^0.58.2",
- "connect-mongo": "^4.6.0",
- "content-range": "^2.0.2",
- "cors": "^2.8.5",
- "dotenv": "^16.0.3",
- "express": "^4.18.2",
- "fluent-ffmpeg": "^2.1.2",
- "hyper-express": "^6.5.9",
- "jimp": "^0.22.8",
- "jsonwebtoken": "^9.0.0",
- "linebridge": "0.15.12",
- "luxon": "^3.0.4",
- "merge-files": "^0.1.2",
- "mime-types": "^2.1.35",
- "minio": "^7.0.32",
- "moment": "^2.29.4",
- "moment-timezone": "^0.5.40",
- "mongoose": "^6.9.0",
- "morgan": "^1.10.0",
- "normalize-url": "^8.0.0",
- "p-map": "4.0.0",
- "p-queue": "^7.3.4",
- "redis": "^4.6.6",
- "split-chunk-merge": "^1.0.0"
- },
- "devDependencies": {
- "@ragestudio/hermes": "^0.1.0",
- "chai": "^4.3.7",
- "cross-env": "^7.0.3",
- "mocha": "^10.2.0",
- "nodemon": "^2.0.15"
- }
-}
\ No newline at end of file
diff --git a/packages/file_server/src/index.js b/packages/file_server/src/index.js
deleted file mode 100644
index 9a830edd..00000000
--- a/packages/file_server/src/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import path from "path"
-global.FORCE_ENV = "prod"
-
-require(path.resolve(process.cwd(), "../../shared/lib/api_wrapper"))
\ No newline at end of file
diff --git a/packages/marketplace_server/.env-example b/packages/marketplace_server/.env-example
deleted file mode 100755
index 0119f1bd..00000000
--- a/packages/marketplace_server/.env-example
+++ /dev/null
@@ -1,20 +0,0 @@
-DB_HOSTNAME=""
-DB_NAME=""
-DB_USER=""
-DB_PWD=""
-
-S3_ENDPOINT=""
-S3_REGION=""
-S3_PORT=""
-S3_USE_SSL=""
-S3_BUCKET=""
-S3_ACCESS_KEY=""
-S3_SECRET_KEY=""
-
-REDIS_HOST=""
-REDIS_PORT=""
-REDIS_USERNAME=""
-REDIS_PASSWORD=""
-
-COMTY_ACCESS_KEY=""
-COMTY_SECRET_KEY=""
\ No newline at end of file
diff --git a/packages/marketplace_server/.gitignore b/packages/marketplace_server/.gitignore
deleted file mode 100644
index 0dd1cacd..00000000
--- a/packages/marketplace_server/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/static
-shared-classes
\ No newline at end of file
diff --git a/packages/marketplace_server/.infisical.json b/packages/marketplace_server/.infisical.json
deleted file mode 100644
index fb927147..00000000
--- a/packages/marketplace_server/.infisical.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "workspaceId": "64519574a8a691b55e8b361d",
- "defaultEnvironment": "dev",
- "gitBranchToEnvironmentMapping": {
- "master": "prod"
- }
-}
\ No newline at end of file
diff --git a/packages/marketplace_server/Dockerfile b/packages/marketplace_server/Dockerfile
deleted file mode 100755
index 07d0a231..00000000
--- a/packages/marketplace_server/Dockerfile
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM node:16-bullseye-slim
-
-RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
-
-RUN apt update
-RUN apt install --no-install-recommends curl python yarn build-essential -y
-
-RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
-
-# Copy comty.js to node_modules
-WORKDIR /home/node/app
-USER node
-
-EXPOSE 3040
-
-COPY package.json ./
-COPY --chown=node:node . .
-
-RUN chmod -R 777 /home/node/app
-
-RUN export NODE_ENV=production
-
-RUN yarn global add cross-env
-RUN yarn install --production
-RUN yarn build
-
-CMD ["yarn", "run", "run:prod"]
\ No newline at end of file
diff --git a/packages/marketplace_server/package.json b/packages/marketplace_server/package.json
deleted file mode 100644
index 548bece7..00000000
--- a/packages/marketplace_server/package.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "name": "@comty/marketplace_server",
- "version": "0.60.3",
- "main": "dist/index.js",
- "scripts": {
- "build": "hermes build",
- "dev": "cross-env NODE_ENV=development nodemon --ignore dist/ --exec hermes-node ./src/index.js",
- "run:prod": "cross-env NODE_ENV=production node ./dist/index.js"
- },
- "shared": {
- "classes/FileUpload": "src/shared-classes/FileUpload",
- "classes/CacheService": "src/shared-classes/CacheService",
- "classes/ComtyClient": "src/shared-classes/ComtyClient",
- "classes/RedisClient": "src/shared-classes/RedisClient",
- "classes/StorageClient": "src/shared-classes/StorageClient",
- "classes/DbManager": "src/shared-classes/DbManager",
- "classes/Errors": "src/shared-classes/Errors",
- "classes/DbModels": "src/shared-classes/DbModels"
- },
- "license": "MIT",
- "dependencies": {
- "7zip-min": "^1.4.4",
- "@foxify/events": "^2.1.0",
- "@octokit/rest": "^19.0.7",
- "axios": "^1.2.5",
- "bcrypt": "^5.1.0",
- "busboy": "^1.6.0",
- "comty.js": "^0.58.2",
- "connect-mongo": "^4.6.0",
- "content-range": "^2.0.2",
- "dotenv": "^16.0.3",
- "form-data": "^4.0.0",
- "formidable": "^2.1.1",
- "hyper-express": "^6.5.9",
- "jsonwebtoken": "^9.0.0",
- "linebridge": "0.15.12",
- "live-directory": "^3.0.3",
- "luxon": "^3.2.1",
- "merge-files": "^0.1.2",
- "mime-types": "^2.1.35",
- "minio": "^7.0.32",
- "moment": "^2.29.4",
- "moment-timezone": "^0.5.40",
- "mongoose": "^6.9.0",
- "normalize-url": "^8.0.0",
- "p-map": "^6.0.0",
- "p-queue": "^7.3.4",
- "redis": "^4.6.6",
- "sharp": "^0.31.3",
- "split-chunk-merge": "^1.0.0",
- "sucrase": "^3.32.0",
- "uglify-js": "^3.17.4"
- },
- "devDependencies": {
- "@corenode/utils": "0.28.26",
- "@ragestudio/hermes": "^0.1.0",
- "chai": "^4.3.7",
- "cross-env": "^7.0.3",
- "mocha": "^10.2.0",
- "nodemon": "^2.0.15"
- }
-}
\ No newline at end of file
diff --git a/packages/marketplace_server/src/index.js b/packages/marketplace_server/src/index.js
deleted file mode 100644
index 9a830edd..00000000
--- a/packages/marketplace_server/src/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import path from "path"
-global.FORCE_ENV = "prod"
-
-require(path.resolve(process.cwd(), "../../shared/lib/api_wrapper"))
\ No newline at end of file
diff --git a/packages/music_server/.env-example b/packages/music_server/.env-example
deleted file mode 100755
index 0119f1bd..00000000
--- a/packages/music_server/.env-example
+++ /dev/null
@@ -1,20 +0,0 @@
-DB_HOSTNAME=""
-DB_NAME=""
-DB_USER=""
-DB_PWD=""
-
-S3_ENDPOINT=""
-S3_REGION=""
-S3_PORT=""
-S3_USE_SSL=""
-S3_BUCKET=""
-S3_ACCESS_KEY=""
-S3_SECRET_KEY=""
-
-REDIS_HOST=""
-REDIS_PORT=""
-REDIS_USERNAME=""
-REDIS_PASSWORD=""
-
-COMTY_ACCESS_KEY=""
-COMTY_SECRET_KEY=""
\ No newline at end of file
diff --git a/packages/music_server/.gitignore b/packages/music_server/.gitignore
deleted file mode 100644
index b124b166..00000000
--- a/packages/music_server/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-shared-classes
\ No newline at end of file
diff --git a/packages/music_server/.infisical.json b/packages/music_server/.infisical.json
deleted file mode 100644
index fb927147..00000000
--- a/packages/music_server/.infisical.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "workspaceId": "64519574a8a691b55e8b361d",
- "defaultEnvironment": "dev",
- "gitBranchToEnvironmentMapping": {
- "master": "prod"
- }
-}
\ No newline at end of file
diff --git a/packages/music_server/Dockerfile b/packages/music_server/Dockerfile
deleted file mode 100755
index df051039..00000000
--- a/packages/music_server/Dockerfile
+++ /dev/null
@@ -1,26 +0,0 @@
-FROM node:16-bullseye-slim
-
-RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
-
-RUN apt update
-RUN apt install --no-install-recommends curl ffmpeg python yarn build-essential -y
-
-RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
-
-WORKDIR /home/node/app
-USER node
-
-EXPOSE 3050
-
-COPY package.json ./
-COPY --chown=node:node . .
-
-RUN chmod -R 777 /home/node/app
-
-RUN export NODE_ENV=production
-
-RUN yarn global add cross-env
-RUN yarn install --production
-RUN yarn build
-
-CMD ["yarn", "run", "run:prod"]
\ No newline at end of file
diff --git a/packages/music_server/fixments/00_sanitize_tracks_metadata.js b/packages/music_server/fixments/00_sanitize_tracks_metadata.js
deleted file mode 100644
index a9f65f8f..00000000
--- a/packages/music_server/fixments/00_sanitize_tracks_metadata.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import DbManager from "../src/shared-classes/DbManager"
-import { Track } from "../src/models"
-
-async function main() {
- const db = new DbManager()
-
- await db.initialize()
-
- console.log(`Finding tracks...`)
-
- console.time("finding tracks")
- const tracksWithMetadata = await Track.find({
- metadata: {
- $exists: true,
- },
- })
- console.timeEnd("finding tracks")
-
- console.log(`Found ${tracksWithMetadata.length} tracks with metadata.`)
-
- console.time("removing metadata")
-
- for (const track of tracksWithMetadata) {
- console.time(`removing metadata for ${track._id}`)
- await Track.findByIdAndUpdate(track._id, {
- $unset: {
- metadata: "",
- },
- })
- console.timeEnd(`removing metadata for ${track._id}`)
- }
-
- console.timeEnd("removing metadata")
-
- console.log("Done!")
-
- process.exit(0)
-}
-
-main().catch(console.error)
\ No newline at end of file
diff --git a/packages/music_server/package.json b/packages/music_server/package.json
deleted file mode 100644
index 840b7291..00000000
--- a/packages/music_server/package.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "name": "@comty/music_server",
- "version": "0.60.3",
- "main": "dist/index.js",
- "scripts": {
- "build": "hermes build",
- "dev": "nodemon --ignore dist/ --exec hermes-node ./src/index.js",
- "run:prod": "cross-env NODE_ENV=production node ./dist/index.js"
- },
- "shared": {
- "classes/FileUpload": "src/shared-classes/FileUpload",
- "classes/CacheService": "src/shared-classes/CacheService",
- "classes/ComtyClient": "src/shared-classes/ComtyClient",
- "classes/RedisClient": "src/shared-classes/RedisClient",
- "classes/StorageClient": "src/shared-classes/StorageClient",
- "classes/DbManager": "src/shared-classes/DbManager",
- "classes/Errors": "src/shared-classes/Errors",
- "classes/DbModels": "src/shared-classes/DbModels",
- "classes/TidalAPI": "src/shared-classes/TidalAPI"
- },
- "license": "MIT",
- "dependencies": {
- "@foxify/events": "^2.1.0",
- "@ragestudio/hermes": "^0.1.0",
- "axios": "^1.4.0",
- "bcrypt": "5.0.1",
- "comty.js": "^0.58.2",
- "connect-mongo": "^4.6.0",
- "corenode": "0.28.26",
- "cors": "^2.8.5",
- "dotenv": "^16.0.3",
- "express": "^4.18.2",
- "jsonwebtoken": "8.5.1",
- "linebridge": "0.15.12",
- "luxon": "^3.0.4",
- "minio": "^7.0.32",
- "moment": "2.29.4",
- "moment-timezone": "0.5.37",
- "mongoose": "^6.9.0",
- "morgan": "^1.10.0",
- "redis": "^4.6.6",
- "socket.io": "^4.5.4"
- },
- "devDependencies": {
- "cross-env": "^7.0.3",
- "nodemon": "^2.0.15"
- }
-}
\ No newline at end of file
diff --git a/packages/music_server/src/index.js b/packages/music_server/src/index.js
deleted file mode 100755
index 9a830edd..00000000
--- a/packages/music_server/src/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import path from "path"
-global.FORCE_ENV = "prod"
-
-require(path.resolve(process.cwd(), "../../shared/lib/api_wrapper"))
\ No newline at end of file
diff --git a/packages/server/README.md b/packages/server/README.md
deleted file mode 100755
index 87f39eb8..00000000
--- a/packages/server/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# @ragestudio/server
diff --git a/packages/wrapper/src/ascii.js b/packages/server/ascii.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/wrapper/src/ascii.js
rename to packages/server/ascii.js
diff --git a/packages/server/boot b/packages/server/boot
new file mode 100755
index 00000000..c5c817de
--- /dev/null
+++ b/packages/server/boot
@@ -0,0 +1,157 @@
+#!/usr/bin/env node
+require("sucrase/register")
+
+const path = require("path")
+const Module = require("module")
+const { Buffer } = require("buffer")
+const { webcrypto: crypto } = require("crypto")
+const { InfisicalClient } = require("@infisical/sdk")
+
+const moduleAlias = require("module-alias")
+
+// Override file execution arg
+process.argv.splice(1, 1)
+process.argv[1] = path.resolve(process.argv[1])
+
+// Expose boot function to global
+global.Boot = Boot
+global.isProduction = process.env.NODE_ENV === "production"
+
+global["__root"] = path.resolve(process.cwd())
+global["__src"] = path.resolve(globalThis["__root"], path.dirname(process.argv[1]))
+
+global["aliases"] = {
+ "root": global["__root"],
+ "src": global["__src"],
+
+ // expose shared resources
+ "@shared-utils": path.resolve(__dirname, "utils"),
+ "@shared-classes": path.resolve(__dirname, "classes"),
+ "@shared-lib": path.resolve(__dirname, "lib"),
+
+ // expose internal resources
+ "@lib": path.resolve(global["__src"], "lib"),
+ "@middlewares": path.resolve(global["__src"], "middlewares"),
+ "@controllers": path.resolve(global["__src"], "controllers"),
+ "@config": path.resolve(global["__src"], "config"),
+ "@shared": path.resolve(global["__src"], "shared"),
+ "@classes": path.resolve(global["__src"], "classes"),
+ "@models": path.resolve(global["__src"], "models"),
+ "@services": path.resolve(global["__src"], "services"),
+ "@utils": path.resolve(global["__src"], "utils"),
+}
+
+function registerBaseAliases(fromPath, customAliases = {}) {
+ if (typeof fromPath === "undefined") {
+ if (module.parent.filename.includes("dist")) {
+ fromPath = path.resolve(process.cwd(), "dist")
+ } else {
+ fromPath = path.resolve(process.cwd(), "src")
+ }
+ }
+
+ moduleAlias.addAliases({
+ ...customAliases,
+ "@controllers": path.resolve(fromPath, "controllers"),
+ "@middlewares": path.resolve(fromPath, "middlewares"),
+ "@models": path.resolve(fromPath, "models"),
+ "@classes": path.resolve(fromPath, "classes"),
+ "@lib": path.resolve(fromPath, "lib"),
+ "@utils": path.resolve(fromPath, "utils"),
+ })
+}
+
+function registerPatches() {
+ global.b64Decode = (data) => {
+ return Buffer.from(data, "base64").toString("utf-8")
+ }
+ global.b64Encode = (data) => {
+ return Buffer.from(data, "utf-8").toString("base64")
+ }
+
+ global.nanoid = (t = 21) => crypto.getRandomValues(new Uint8Array(t)).reduce(((t, e) => t += (e &= 63) < 36 ? e.toString(36) : e < 62 ? (e - 26).toString(36).toUpperCase() : e > 62 ? "-" : "_"), "");
+
+ Array.prototype.updateFromObjectKeys = function (obj) {
+ this.forEach((value, index) => {
+ if (obj[value] !== undefined) {
+ this[index] = obj[value]
+ }
+ })
+
+ return this
+ }
+
+ global.ToBoolean = (value) => {
+ if (typeof value === "boolean") {
+ return value
+ }
+
+ if (typeof value === "string") {
+ return value.toLowerCase() === "true"
+ }
+
+ return false
+ }
+}
+
+function registerAliases() {
+ registerBaseAliases(global["__src"], global["aliases"])
+}
+
+async function injectEnvFromInfisical() {
+ const envMode = global.FORCE_ENV ?? global.isProduction ? "prod" : "dev"
+
+ console.log(`đ Injecting env variables from INFISICAL in [${envMode}] mode...`)
+
+ const client = new InfisicalClient({
+ accessToken: process.env.INFISICAL_TOKEN,
+ })
+
+ const secrets = await client.listSecrets({
+ environment: envMode,
+ path: process.env.INFISICAL_PATH ?? "/",
+ projectId: process.env.INFISICAL_PROJECT_ID ?? null,
+ includeImports: false,
+ })
+
+ //inject to process.env
+ secrets.forEach((secret) => {
+ if (!(process.env[secret.secretKey])) {
+ process.env[secret.secretKey] = secret.secretValue
+ }
+ })
+}
+
+async function Boot(main) {
+ if (!main) {
+ throw new Error("main class is not defined")
+ }
+
+ if (process.env.INFISICAL_TOKEN) {
+ console.log(`INFISICAL_TOKEN found, injecting env variables from INFISICAL...`)
+ await injectEnvFromInfisical()
+ }
+
+ const instance = new main()
+
+ await instance.initialize()
+
+ if (process.send) {
+ process.send({
+ status: "ready"
+ })
+ }
+
+ return instance
+}
+
+console.log(`Booting in [${global.isProduction ? "production" : "development"}] mode...`)
+
+// Apply patches
+registerPatches()
+
+// Apply aliases
+registerAliases()
+
+// execute main
+Module.runMain()
\ No newline at end of file
diff --git a/packages/server/classes/CacheService/index.js b/packages/server/classes/CacheService/index.js
new file mode 100755
index 00000000..429b39e3
--- /dev/null
+++ b/packages/server/classes/CacheService/index.js
@@ -0,0 +1,72 @@
+import fs from "fs"
+import path from "path"
+
+export default class CacheService {
+ static deletionInterval = 1000 * 60 * 5
+
+ static cachePath = path.join(process.cwd(), ".cache")
+
+ constructor(params = {}) {
+ this.params = params
+
+ if (!fs.existsSync(CacheService.cachePath)) {
+ fs.mkdirSync(CacheService.cachePath, { recursive: true })
+ }
+ }
+
+ intervalMaps = new Map()
+
+ checkDeletionFilepath(filepath) {
+ try {
+ const stats = fs.statSync(filepath)
+
+ stats.atime = new Date(stats.atime)
+
+ if (stats.atime.getTime() + CacheService.deletionInterval < Date.now()) {
+ fs.promises.unlink(filepath)
+ } else {
+ return false
+ }
+
+ return true
+
+ } catch (error) {
+ console.error(error)
+
+ fs.promises.unlink(filepath)
+
+ return true
+ }
+ }
+
+ appendToDeletion(filepath) {
+ // create a interval of 5 minutes to delete the file
+ // check the last time the file was accessed and if it was accessed in the last 5 minutes
+ // reset the interval until the file is not accessed for 5 minutes and then delete it
+ try {
+ const createInterval = () => {
+ let interval = setInterval(async () => {
+ try {
+ await this.checkDeletionFilepath(filepath)
+
+ this.intervalMaps.delete(filepath)
+
+ if (!results) {
+ this.appendToDeletion(filepath)
+ }
+ } catch (error) {
+ return clearInterval(interval)
+ }
+ })
+
+ return interval
+ }
+
+ this.intervalMaps.set(filepath, createInterval())
+ } catch (error) {
+ console.error(error)
+
+ return fs.promises.unlink(filepath)
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/ComtyClient/index.js b/packages/server/classes/ComtyClient/index.js
new file mode 100755
index 00000000..0a8fbfdf
--- /dev/null
+++ b/packages/server/classes/ComtyClient/index.js
@@ -0,0 +1,9 @@
+import createClient from "comty.js"
+
+export default (params = {}) => {
+ return createClient({
+ ...params,
+ accessKey: process.env.COMTY_ACCESS_KEY,
+ privateKey: process.env.COMTY_PRIVATE_KEY,
+ })
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbManager/index.js b/packages/server/classes/DbManager/index.js
new file mode 100755
index 00000000..c8b9f2a1
--- /dev/null
+++ b/packages/server/classes/DbManager/index.js
@@ -0,0 +1,53 @@
+import mongoose from "mongoose"
+
+function getConnectionConfig(obj) {
+ const { DB_USER, DB_DRIVER, DB_NAME, DB_PWD, DB_HOSTNAME, DB_PORT, DB_AUTH_SOURCE } = obj
+
+ let auth = [
+ DB_DRIVER ?? "mongodb",
+ "://",
+ ]
+
+ auth.push(DB_HOSTNAME ?? "localhost")
+ auth.push(`:${DB_PORT ?? "27017"}`)
+
+ auth = auth.join("")
+
+ const params = {
+ auth: {},
+ dbName: DB_NAME,
+ user: DB_USER,
+ pass: DB_PWD,
+ }
+
+ if (DB_AUTH_SOURCE) {
+ params.auth.authSource = DB_AUTH_SOURCE
+ }
+
+ return [
+ auth,
+ params,
+ ]
+}
+
+export default class DBManager {
+ initialize = async (config) => {
+ console.log(`đ Connecting to DB [${process.env.DB_HOSTNAME}]...`)
+
+ const dbConfig = getConnectionConfig(config ?? process.env)
+
+ mongoose.set("strictQuery", false)
+
+ const connection = await mongoose.connect(...dbConfig)
+ .catch((err) => {
+ console.log(`â Failed to connect to DB, retrying...\n`)
+ console.log(err)
+
+ return false
+ })
+
+ if (connection) {
+ console.log(`â
Connected to DB.`)
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/NFCTags/index.js b/packages/server/classes/DbModels/NFCTags/index.js
new file mode 100755
index 00000000..d83c9e39
--- /dev/null
+++ b/packages/server/classes/DbModels/NFCTags/index.js
@@ -0,0 +1,37 @@
+export default {
+ name: "NFCTag",
+ collection: "nfc_tags",
+ schema: {
+ user_id: {
+ type: String,
+ required: true
+ },
+ owner_id: {
+ type: String,
+ required: true
+ },
+ serial: {
+ type: String,
+ required: true
+ },
+ alias: {
+ type: String,
+ default: "My NFC Tag"
+ },
+ active: {
+ type: Boolean,
+ default: true
+ },
+ behavior: {
+ type: Object,
+ default: {
+ type: "url",
+ value: "https://comty.app"
+ }
+ },
+ endpoint_url: {
+ type: String,
+ default: "https://comty.app/nfc/no_endpoint"
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/authorizedServerTokens/index.js b/packages/server/classes/DbModels/authorizedServerTokens/index.js
new file mode 100755
index 00000000..b569fc49
--- /dev/null
+++ b/packages/server/classes/DbModels/authorizedServerTokens/index.js
@@ -0,0 +1,28 @@
+export default {
+ name: "authorizedServerTokens",
+ collection: "authorizedServerTokens",
+ schema: {
+ client_id: {
+ type: String,
+ required: true,
+ },
+ token: {
+ type: String,
+ required: true,
+ },
+ access: {
+ type: Array,
+ default: [],
+ },
+ name: {
+ type: String,
+ },
+ description: {
+ type: String,
+ },
+ createdAt: {
+ type: Date,
+ default: Date.now,
+ },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/badge/index.js b/packages/server/classes/DbModels/badge/index.js
new file mode 100755
index 00000000..ed62fb1e
--- /dev/null
+++ b/packages/server/classes/DbModels/badge/index.js
@@ -0,0 +1,11 @@
+export default {
+ name: "Badge",
+ collection: "badges",
+ schema: {
+ name: { type: String, required: true },
+ label: { type: String },
+ description: { type: String },
+ icon: { type: String },
+ color: { type: String },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/comment/index.js b/packages/server/classes/DbModels/comment/index.js
new file mode 100755
index 00000000..953687d4
--- /dev/null
+++ b/packages/server/classes/DbModels/comment/index.js
@@ -0,0 +1,10 @@
+export default {
+ name: "Comment",
+ collection: "comments",
+ schema: {
+ user_id: { type: String, required: true },
+ parent_id: { type: String, required: true },
+ message: { type: String, required: true },
+ created_at: { type: Date, default: Date.now },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/config/index.js b/packages/server/classes/DbModels/config/index.js
new file mode 100755
index 00000000..f17b67bd
--- /dev/null
+++ b/packages/server/classes/DbModels/config/index.js
@@ -0,0 +1,15 @@
+export default {
+ name: "Config",
+ collection: "config",
+ schema: {
+ key: {
+ type: String,
+ required: true
+ },
+ value: {
+ // type can be anything
+ type: Object,
+ required: true
+ },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/featuredEvent/index.js b/packages/server/classes/DbModels/featuredEvent/index.js
new file mode 100755
index 00000000..af36c24f
--- /dev/null
+++ b/packages/server/classes/DbModels/featuredEvent/index.js
@@ -0,0 +1,13 @@
+export default {
+ name: "FeaturedEvent",
+ collection: "featuredEvents",
+ schema: {
+ name: { type: String, required: true },
+ category: { type: String },
+ description: { type: String },
+ dates: { type: Object },
+ location: { type: String },
+ announcement: { type: Object, required: true },
+ expired: { type: Boolean, default: false }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/featuredPlaylist/index.js b/packages/server/classes/DbModels/featuredPlaylist/index.js
new file mode 100755
index 00000000..48eacb7d
--- /dev/null
+++ b/packages/server/classes/DbModels/featuredPlaylist/index.js
@@ -0,0 +1,12 @@
+export default {
+ name: "FeaturedPlaylist",
+ collection: "featuredPlaylists",
+ schema: {
+ title: { type: String, required: true },
+ description: { type: String },
+ cover_url: { type: String },
+ enabled: { type: Boolean, default: true },
+ genre: { type: String },
+ playlist_id: { type: String, required: true },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/featuredWallpaper/index.js b/packages/server/classes/DbModels/featuredWallpaper/index.js
new file mode 100755
index 00000000..74fe331e
--- /dev/null
+++ b/packages/server/classes/DbModels/featuredWallpaper/index.js
@@ -0,0 +1,10 @@
+export default {
+ name: "FeaturedWallpaper",
+ collection: "featuredWallpapers",
+ schema: {
+ active: { type: Boolean, default: true },
+ date: { type: Date, default: Date.now },
+ url: { type: String, required: true },
+ author: { type: String },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/index.js b/packages/server/classes/DbModels/index.js
new file mode 100755
index 00000000..159b6d34
--- /dev/null
+++ b/packages/server/classes/DbModels/index.js
@@ -0,0 +1,23 @@
+import mongoose, { Schema } from "mongoose"
+import fs from "fs"
+import path from "path"
+
+function generateModels() {
+ let models = {}
+
+ const dirs = fs.readdirSync(__dirname).filter(file => file !== "index.js")
+
+ dirs.forEach((file) => {
+ const model = require(path.join(__dirname, file)).default
+
+ if (mongoose.models[model.name]) {
+ return models[model.name] = mongoose.model(model.name)
+ }
+
+ return models[model.name] = mongoose.model(model.name, new Schema(model.schema), model.collection)
+ })
+
+ return models
+}
+
+module.exports = generateModels()
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/playlist/index.js b/packages/server/classes/DbModels/playlist/index.js
new file mode 100755
index 00000000..6b9a9cf9
--- /dev/null
+++ b/packages/server/classes/DbModels/playlist/index.js
@@ -0,0 +1,41 @@
+export default {
+ name: "Playlist",
+ collection: "playlists",
+ schema: {
+ user_id: {
+ type: String,
+ required: true
+ },
+ title: {
+ type: String,
+ required: true
+ },
+ description: {
+ type: String
+ },
+ list: {
+ type: Object,
+ default: [],
+ required: true
+ },
+ cover: {
+ type: String,
+ default: "https://storage.ragestudio.net/comty-static-assets/default_song.png"
+ },
+ thumbnail: {
+ type: String,
+ default: "https://storage.ragestudio.net/comty-static-assets/default_song.png"
+ },
+ created_at: {
+ type: Date,
+ required: true
+ },
+ publisher: {
+ type: Object,
+ },
+ public: {
+ type: Boolean,
+ default: true,
+ },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/post/index.js b/packages/server/classes/DbModels/post/index.js
new file mode 100755
index 00000000..3db664b6
--- /dev/null
+++ b/packages/server/classes/DbModels/post/index.js
@@ -0,0 +1,13 @@
+export default {
+ name: "Post",
+ collection: "posts",
+ schema: {
+ user_id: { type: String, required: true },
+ timestamp: { type: String, required: true },
+ created_at: { type: Date, default: Date.now, required: true },
+ message: { type: String },
+ attachments: { type: Array, default: [] },
+ flags: { type: Array, default: [] },
+ reply_to: { type: String, default: null },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/postLike/index.js b/packages/server/classes/DbModels/postLike/index.js
new file mode 100755
index 00000000..16c41044
--- /dev/null
+++ b/packages/server/classes/DbModels/postLike/index.js
@@ -0,0 +1,14 @@
+export default {
+ name: "PostLike",
+ collection: "post_likes",
+ schema: {
+ user_id: {
+ type: String,
+ required: true,
+ },
+ post_id: {
+ type: String,
+ required: true,
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/regenerationToken/index.js b/packages/server/classes/DbModels/regenerationToken/index.js
new file mode 100755
index 00000000..35ac7459
--- /dev/null
+++ b/packages/server/classes/DbModels/regenerationToken/index.js
@@ -0,0 +1,14 @@
+export default {
+ name: "RegenerationToken",
+ collection: "regenerationTokens",
+ schema: {
+ expiredToken: {
+ type: String,
+ required: true,
+ },
+ refreshToken: {
+ type: String,
+ required: true,
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/release/index.js b/packages/server/classes/DbModels/release/index.js
new file mode 100755
index 00000000..204165ff
--- /dev/null
+++ b/packages/server/classes/DbModels/release/index.js
@@ -0,0 +1,38 @@
+export default {
+ name: "Release",
+ collection: "releases",
+ schema: {
+ user_id: {
+ type: String,
+ required: true
+ },
+ title: {
+ type: String,
+ required: true
+ },
+ type: {
+ type: String,
+ required: true,
+ },
+ list: {
+ type: Object,
+ default: [],
+ required: true
+ },
+ cover: {
+ type: String,
+ default: "https://storage.ragestudio.net/comty-static-assets/default_song.png"
+ },
+ created_at: {
+ type: Date,
+ required: true
+ },
+ publisher: {
+ type: Object,
+ },
+ public: {
+ type: Boolean,
+ default: true,
+ },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/role/index.js b/packages/server/classes/DbModels/role/index.js
new file mode 100755
index 00000000..917c8ff9
--- /dev/null
+++ b/packages/server/classes/DbModels/role/index.js
@@ -0,0 +1,15 @@
+export default {
+ name: "Role",
+ collection: "roles",
+ schema: {
+ name: {
+ type: String,
+ },
+ description: {
+ type: String,
+ },
+ apply: {
+ type: Object,
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/savedPost/index.js b/packages/server/classes/DbModels/savedPost/index.js
new file mode 100755
index 00000000..05634f5b
--- /dev/null
+++ b/packages/server/classes/DbModels/savedPost/index.js
@@ -0,0 +1,18 @@
+export default {
+ name: "SavedPost",
+ collection: "savedPosts",
+ schema: {
+ post_id: {
+ type: "string",
+ required: true,
+ },
+ user_id: {
+ type: "string",
+ required: true,
+ },
+ saved_at: {
+ type: "date",
+ default: Date.now,
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/serverLimit/index.js b/packages/server/classes/DbModels/serverLimit/index.js
new file mode 100755
index 00000000..44c27697
--- /dev/null
+++ b/packages/server/classes/DbModels/serverLimit/index.js
@@ -0,0 +1,24 @@
+import { Schema } from "mongoose"
+
+export default {
+ name: "ServerLimit",
+ collection: "serverLimits",
+ schema: {
+ key: {
+ type: String,
+ required: true,
+ },
+ value: {
+ type: Schema.Types.Mixed,
+ required: true,
+ },
+ active: {
+ type: Boolean,
+ default: true,
+ },
+ data: {
+ type: Object,
+ required: false,
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/session/index.js b/packages/server/classes/DbModels/session/index.js
new file mode 100755
index 00000000..39858a03
--- /dev/null
+++ b/packages/server/classes/DbModels/session/index.js
@@ -0,0 +1,14 @@
+export default {
+ name: "Session",
+ collection: "sessions",
+ schema: {
+ session_uuid: { type: String, required: true },
+ token: { type: String, required: true },
+ username: { type: String, required: true },
+ user_id: { type: String, required: true },
+ date: { type: Number, default: 0 },
+ location: { type: String, default: "Unknown" },
+ ip_address: { type: String, default: "Unknown" },
+ client: { type: String, default: "Unknown" },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/streamingCategory/index.js b/packages/server/classes/DbModels/streamingCategory/index.js
new file mode 100755
index 00000000..95b90ad4
--- /dev/null
+++ b/packages/server/classes/DbModels/streamingCategory/index.js
@@ -0,0 +1,14 @@
+export default {
+ name: "StreamingCategory",
+ collection: "streamingCategories",
+ schema: {
+ key: {
+ type: String,
+ required: true,
+ },
+ label: {
+ type: String,
+ required: true,
+ },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/streamingProfile/index.js b/packages/server/classes/DbModels/streamingProfile/index.js
new file mode 100755
index 00000000..1332700c
--- /dev/null
+++ b/packages/server/classes/DbModels/streamingProfile/index.js
@@ -0,0 +1,37 @@
+export default {
+ name: "StreamingProfile",
+ collection: "streamingProfiles",
+ schema: {
+ user_id: {
+ type: String,
+ required: true,
+ },
+ profile_name: {
+ type: String,
+ required: true,
+ },
+ stream_key: {
+ type: String,
+ required: true,
+ select: false,
+ },
+ info: {
+ type: Object,
+ default: {
+ title: "Untitled",
+ description: "No description",
+ category: "other",
+ thumbnail: null,
+ }
+ },
+ options: {
+ type: Object,
+ default: {
+ connection_protected: true,
+ private: false,
+ chatEnabled: true,
+ drvEnabled: false,
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/syncEntry/index.js b/packages/server/classes/DbModels/syncEntry/index.js
new file mode 100755
index 00000000..c8b4684d
--- /dev/null
+++ b/packages/server/classes/DbModels/syncEntry/index.js
@@ -0,0 +1,18 @@
+export default {
+ name: "SyncEntry",
+ collection: "syncEntries",
+ schema: {
+ user_id: {
+ type: "string",
+ required: true,
+ },
+ key: {
+ type: "string",
+ required: true,
+ },
+ value: {
+ type: "string",
+ required: true,
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/track/index.js b/packages/server/classes/DbModels/track/index.js
new file mode 100755
index 00000000..576ddc3c
--- /dev/null
+++ b/packages/server/classes/DbModels/track/index.js
@@ -0,0 +1,53 @@
+export default {
+ name: "Track",
+ collection: "tracks",
+ schema: {
+ title: {
+ type: String,
+ required: true,
+ },
+ album: {
+ type: String,
+ },
+ artist: {
+ type: String,
+ },
+ source: {
+ type: String,
+ required: true,
+ },
+ metadata: {
+ type: Object,
+ },
+ explicit: {
+ type: Boolean,
+ default: false,
+ },
+ public: {
+ type: Boolean,
+ default: true,
+ },
+ cover: {
+ type: String,
+ default: "https://storage.ragestudio.net/comty-static-assets/default_song.png"
+ },
+ thumbnail: {
+ type: String,
+ default: "https://storage.ragestudio.net/comty-static-assets/default_song.png"
+ },
+ videoCanvas: {
+ type: String,
+ },
+ spotifyId: {
+ type: String,
+ },
+ lyricsEnabled: {
+ type: Boolean,
+ default: true,
+ },
+ publisher: {
+ type: Object,
+ required: true,
+ },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/track_like/index.js b/packages/server/classes/DbModels/track_like/index.js
new file mode 100755
index 00000000..9f256563
--- /dev/null
+++ b/packages/server/classes/DbModels/track_like/index.js
@@ -0,0 +1,17 @@
+export default {
+ name: "TrackLike",
+ collection: "tracks_likes",
+ schema: {
+ user_id: {
+ type: String,
+ required: true,
+ },
+ track_id: {
+ type: String,
+ required: true,
+ },
+ created_at: {
+ type: Date,
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/user/index.js b/packages/server/classes/DbModels/user/index.js
new file mode 100755
index 00000000..f9efdfba
--- /dev/null
+++ b/packages/server/classes/DbModels/user/index.js
@@ -0,0 +1,21 @@
+export default {
+ name: "User",
+ collection: "accounts",
+ schema: {
+ username: { type: String, required: true },
+ password: { type: String, required: true, select: false },
+ email: { type: String, required: true },
+ description: { type: String, default: null },
+ public_name: { type: String, default: null },
+ fullName: { type: String, default: null },
+ cover: { type: String, default: null },
+ avatar: { type: String, default: null },
+ roles: { type: Array, default: [] },
+ verified: { type: Boolean, default: false },
+ birthday: { type: Date, default: null },
+ badges: { type: Array, default: [] },
+ links: { type: Array, default: [] },
+ createdAt: { type: String },
+ created_at: { type: String },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/userFollow/index.js b/packages/server/classes/DbModels/userFollow/index.js
new file mode 100755
index 00000000..7bd63e77
--- /dev/null
+++ b/packages/server/classes/DbModels/userFollow/index.js
@@ -0,0 +1,8 @@
+export default {
+ name: "UserFollow",
+ collection: "follows",
+ schema: {
+ user_id: { type: String, required: true },
+ to: { type: String, required: true },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/DbModels/widget/index.js b/packages/server/classes/DbModels/widget/index.js
new file mode 100755
index 00000000..283d8caf
--- /dev/null
+++ b/packages/server/classes/DbModels/widget/index.js
@@ -0,0 +1,24 @@
+export default {
+ name: "Widget",
+ collection: "widgets",
+ schema: {
+ manifest: {
+ type: Object,
+ required: true,
+ },
+ user_id: {
+ type: String,
+ required: true,
+ },
+ public: {
+ type: Boolean,
+ default: true,
+ },
+ created_at: {
+ type: Date,
+ },
+ updated_at: {
+ type: Date,
+ },
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/Errors/index.js b/packages/server/classes/Errors/index.js
new file mode 100755
index 00000000..bc95a60e
--- /dev/null
+++ b/packages/server/classes/Errors/index.js
@@ -0,0 +1,84 @@
+export class AuthorizationError extends Error {
+ constructor(req, res, message = "This endpoint requires authorization") {
+ super(message)
+ this.name = "AuthorizationError"
+
+ if (req && res) {
+ return res.status(this.constructor.statusCode).json({
+ error: message,
+ })
+ }
+ }
+
+ static get statusCode() {
+ return 401
+ }
+}
+
+export class NotFoundError extends Error {
+ constructor(req, res, message = "Not found") {
+ super(message)
+ this.name = "NotFoundError"
+
+ if (req && res) {
+ return res.status(this.constructor.statusCode).json({
+ error: message,
+ })
+ }
+ }
+
+ static get statusCode() {
+ return 404
+ }
+}
+
+export class PermissionError extends Error {
+ constructor(req, res, message = "You don't have permission to do this") {
+ super(message)
+ this.name = "PermissionError"
+
+ if (req && res) {
+ return res.status(this.constructor.statusCode).json({
+ error: message,
+ })
+ }
+ }
+
+ static get statusCode() {
+ return 403
+ }
+}
+
+export class BadRequestError extends Error {
+ constructor(req, res, message = "Bad request") {
+ super(message)
+ this.name = "BadRequestError"
+
+ if (req && res) {
+ return res.status(this.constructor.statusCode).json({
+ error: message,
+ })
+ }
+ }
+
+ static get statusCode() {
+ return 400
+ }
+}
+
+export class InternalServerError extends Error {
+ constructor(req, res, message = "Internal server error") {
+ super(message)
+ this.name = "InternalServerError"
+
+ if (req && res) {
+ return res.status(this.constructor.statusCode).json({
+ error: message,
+ })
+ }
+ }
+
+ static get statusCode() {
+ return 500
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/FileUpload/index.js b/packages/server/classes/FileUpload/index.js
new file mode 100755
index 00000000..6a609c2f
--- /dev/null
+++ b/packages/server/classes/FileUpload/index.js
@@ -0,0 +1,260 @@
+// Orginal forked from: Buzut/huge-uploader-nodejs
+// Copyright (c) 2018, Quentin Busuttil All rights reserved.
+
+import fs from "node:fs"
+import path from "node:path"
+import { promisify } from "node:util"
+import mimetypes from "mime-types"
+import crypto from "node:crypto"
+
+import Busboy from "busboy"
+
+export function getFileHash(file) {
+ return new Promise((resolve, reject) => {
+ const hash = crypto.createHash("sha256")
+
+ file.on("data", (chunk) => hash.update(chunk))
+
+ file.on("end", () => resolve(hash.digest("hex")))
+
+ file.on("error", reject)
+ })
+}
+
+export function checkHeaders(headers) {
+ if (
+ !headers["uploader-chunk-number"] ||
+ !headers["uploader-chunks-total"] ||
+ !headers["uploader-original-name"] ||
+ !headers["uploader-file-id"] ||
+ !headers["uploader-chunks-total"].match(/^[0-9]+$/) ||
+ !headers["uploader-chunk-number"].match(/^[0-9]+$/)
+ ) {
+ return false
+ }
+
+ return true
+}
+
+export function checkTotalSize(maxFileSize, maxChunkSize, totalChunks) {
+ if (maxChunkSize * totalChunks > maxFileSize) {
+ return false
+ }
+
+ return true
+}
+
+export function cleanChunks(dirPath) {
+ fs.readdir(dirPath, (err, files) => {
+ let filesLength = files.length
+
+ files.forEach((file) => {
+ fs.unlink(path.join(dirPath, file), () => {
+ if (--filesLength === 0) fs.rmdir(dirPath, () => { }) // cb does nothing but required
+ })
+ })
+ })
+}
+
+export function createAssembleChunksPromise({
+ tmpDir,
+ headers,
+ useDate,
+}) {
+ const asyncReadFile = promisify(fs.readFile)
+ const asyncAppendFile = promisify(fs.appendFile)
+
+ const originalMimeType = mimetypes.lookup(headers["uploader-original-name"])
+ const originalExtension = mimetypes.extension(originalMimeType)
+
+ const totalChunks = +headers["uploader-chunks-total"]
+
+ const fileId = headers["uploader-file-id"]
+ const workPath = path.join(tmpDir, fileId)
+ const chunksPath = path.resolve(workPath, "chunks")
+ const assembledFilepath = path.join(workPath, `assembled.${originalExtension}`)
+
+ let chunkCount = 0
+ let finalFilepath = null
+
+ return () => {
+ return new Promise((resolve, reject) => {
+ const onEnd = async () => {
+ try {
+ const hash = await getFileHash(fs.createReadStream(assembledFilepath))
+
+ if (useDate) {
+ finalFilepath = path.resolve(workPath, `${hash}_${Date.now()}.${originalExtension}`)
+ } else {
+ finalFilepath = path.resolve(workPath, `${hash}.${originalExtension}`)
+ }
+
+ fs.renameSync(assembledFilepath, finalFilepath)
+
+ cleanChunks(chunksPath)
+
+ return resolve({
+ filename: headers["uploader-original-name"],
+ filepath: finalFilepath,
+ cachePath: workPath,
+ hash,
+ mimetype: originalMimeType,
+ extension: originalExtension,
+ })
+ } catch (error) {
+ return reject(error)
+ }
+ }
+
+ const pipeChunk = () => {
+ asyncReadFile(path.join(chunksPath, chunkCount.toString()))
+ .then((chunk) => asyncAppendFile(assembledFilepath, chunk))
+ .then(() => {
+ // 0 indexed files = length - 1, so increment before comparison
+ if (totalChunks > ++chunkCount) {
+ return pipeChunk(chunkCount)
+ }
+
+ return onEnd()
+ })
+ .catch(reject)
+ }
+
+ pipeChunk()
+ })
+ }
+}
+
+export function mkdirIfDoesntExist(dirPath, callback) {
+ if (!fs.existsSync(dirPath)) {
+ fs.mkdir(dirPath, { recursive: true }, callback)
+ }
+}
+
+export function handleFile(tmpDir, headers, fileStream) {
+ const dirPath = path.join(tmpDir, headers["uploader-file-id"])
+ const chunksPath = path.join(dirPath, "chunks")
+ const chunkPath = path.join(chunksPath, headers["uploader-chunk-number"])
+ const useDate = headers["uploader-use-date"] === "true"
+ const chunkCount = +headers["uploader-chunk-number"]
+ const totalChunks = +headers["uploader-chunks-total"]
+
+ let error
+ let assembleChunksPromise
+ let finished = false
+ let writeStream
+
+ const writeFile = () => {
+ writeStream = fs.createWriteStream(chunkPath)
+
+ writeStream.on("error", (err) => {
+ error = err
+ fileStream.resume()
+ })
+
+ writeStream.on("close", () => {
+ finished = true
+
+ // if all is uploaded
+ if (chunkCount === totalChunks - 1) {
+ assembleChunksPromise = createAssembleChunksPromise({
+ tmpDir,
+ headers,
+ useDate,
+ })
+ }
+ })
+
+ fileStream.pipe(writeStream)
+ }
+
+ // make sure chunk is in range
+ if (chunkCount < 0 || chunkCount >= totalChunks) {
+ error = new Error("Chunk is out of range")
+ fileStream.resume()
+ }
+
+ else if (chunkCount === 0) {
+ // create file upload dir if it's first chunk
+ mkdirIfDoesntExist(chunksPath, (err) => {
+ if (err) {
+ error = err
+ fileStream.resume()
+ }
+
+ else writeFile()
+ })
+ }
+
+ else {
+ // make sure dir exists if it's not first chunk
+ fs.stat(dirPath, (err) => {
+ if (err) {
+ error = new Error("Upload has expired")
+ fileStream.resume()
+ }
+
+ else writeFile()
+ })
+ }
+
+ return (callback) => {
+ if (finished && !error) callback(null, assembleChunksPromise)
+ else if (error) callback(error)
+
+ else {
+ writeStream.on("error", callback)
+ writeStream.on("close", () => callback(null, assembleChunksPromise))
+ }
+ }
+}
+
+export function uploadFile(req, tmpDir, maxFileSize, maxChunkSize) {
+ return new Promise((resolve, reject) => {
+ if (!checkHeaders(req.headers)) {
+ reject(new Error("Missing header(s)"))
+ return
+ }
+
+ if (!checkTotalSize(maxFileSize, req.headers["uploader-chunks-total"])) {
+ reject(new Error("File is above size limit"))
+ return
+ }
+
+ try {
+ let limitReached = false
+ let getFileStatus
+
+ const busboy = Busboy({ headers: req.headers, limits: { files: 1, fileSize: maxChunkSize * 1000 * 1000 } })
+
+ busboy.on("file", (fieldname, fileStream) => {
+ fileStream.on("limit", () => {
+ limitReached = true
+ fileStream.resume()
+ })
+
+ getFileStatus = handleFile(tmpDir, req.headers, fileStream)
+ })
+
+ busboy.on("close", () => {
+ if (limitReached) {
+ reject(new Error("Chunk is above size limit"))
+ return
+ }
+
+ getFileStatus((fileErr, assembleChunksF) => {
+ if (fileErr) reject(fileErr)
+ else resolve(assembleChunksF)
+ })
+ })
+
+ req.pipe(busboy)
+ }
+
+ catch (err) {
+ reject(err)
+ }
+ })
+}
+
+export default uploadFile
\ No newline at end of file
diff --git a/packages/server/classes/RedisClient/index.js b/packages/server/classes/RedisClient/index.js
new file mode 100755
index 00000000..d231bc68
--- /dev/null
+++ b/packages/server/classes/RedisClient/index.js
@@ -0,0 +1,76 @@
+import Redis from "ioredis"
+
+function composeURL({
+ host,
+ port,
+ username,
+ password,
+} = {}) {
+ let url = "redis://"
+
+ if (username && password) {
+ url += username + ":" + password + "@"
+ }
+
+ url += host ?? "localhost"
+
+ if (port) {
+ url += ":" + port
+ }
+
+ return url
+}
+
+export default () => {
+ let { REDIS_HOST, REDIS_PORT, REDIS_NO_AUTH, REDIS_AUTH, REDIS_DB } = process.env
+
+ REDIS_NO_AUTH = ToBoolean(REDIS_NO_AUTH)
+
+ let clientOptions = {
+ host: REDIS_HOST,
+ port: REDIS_PORT,
+ lazyConnect: true,
+ autoConnect: false
+ }
+
+ if (!REDIS_NO_AUTH) {
+ if (REDIS_AUTH) {
+ const [user, password] = REDIS_AUTH.split(":")
+
+ clientOptions.username = user
+ clientOptions.password = password
+ }
+ } else {
+ console.log("â ī¸ Redis auth is disabled")
+ }
+
+ if (REDIS_DB) {
+ clientOptions.db = REDIS_DB
+ }
+
+ clientOptions = composeURL(clientOptions)
+
+ let client = {}
+
+ client.initialize = async () => {
+ console.log(`đ Connecting to Redis client [${REDIS_HOST}]`)
+
+ client = new Redis(clientOptions)
+
+ client.on("error", (error) => {
+ console.error("â Redis client error:", error)
+ })
+
+ client.on("connect", () => {
+ console.log(`â
Redis client connected [${process.env.REDIS_HOST}]`)
+ })
+
+ client.on("reconnecting", () => {
+ console.log("đ Redis client reconnecting...")
+ })
+
+ return client
+ }
+
+ return client
+}
\ No newline at end of file
diff --git a/packages/server/classes/SecureSyncEntry/index.js b/packages/server/classes/SecureSyncEntry/index.js
new file mode 100755
index 00000000..d0ec7734
--- /dev/null
+++ b/packages/server/classes/SecureSyncEntry/index.js
@@ -0,0 +1,134 @@
+import { SyncEntry } from "@shared-classes/DbModels"
+
+import crypto from "crypto"
+
+export default class SecureSyncEntry {
+ static get encrytionAlgorithm() {
+ return "aes-256-cbc"
+ }
+
+ static async set(user_id, key, value) {
+ if (!user_id) {
+ throw new Error("Missing user_id")
+ }
+
+ if (!key) {
+ throw new Error("Missing key")
+ }
+
+ if (!value) {
+ throw new Error("Missing value")
+ }
+
+ let entry = await SyncEntry.findOne({
+ user_id,
+ key,
+ }).catch(() => null)
+
+ const encryptionKey = Buffer.from(process.env.SYNC_ENCRIPT_SECRET, "hex")
+ const iv = crypto.randomBytes(16)
+
+ const cipher = crypto.createCipheriv(SecureSyncEntry.encrytionAlgorithm, encryptionKey, iv)
+
+ let encrypted
+
+ try {
+ encrypted = cipher.update(value)
+ }
+ catch (error) {
+ console.error(error)
+ }
+
+ encrypted = Buffer.concat([encrypted, cipher.final()])
+
+ if (entry) {
+ entry.value = iv.toString("hex") + ":" + encrypted.toString("hex")
+
+ await entry.save()
+
+ return entry
+ }
+
+ entry = new SyncEntry({
+ user_id,
+ key,
+ value: iv.toString("hex") + ":" + encrypted.toString("hex"),
+ })
+
+ await entry.save()
+
+ return entry
+ }
+
+ static async get(user_id, key) {
+ if (!user_id) {
+ throw new Error("Missing user_id")
+ }
+
+ if (!key) {
+ throw new Error("Missing key")
+ }
+
+ const entry = await SyncEntry.findOne({
+ user_id,
+ key,
+ }).catch(() => null)
+
+ if (!entry) {
+ return null
+ }
+
+ const encryptionKey = Buffer.from(process.env.SYNC_ENCRIPT_SECRET, "hex")
+
+ const iv = Buffer.from(entry.value.split(":")[0], "hex")
+ const encryptedText = Buffer.from(entry.value.split(":")[1], "hex")
+
+ const decipher = crypto.createDecipheriv(SecureSyncEntry.encrytionAlgorithm, encryptionKey, iv)
+
+ let decrypted = decipher.update(encryptedText)
+
+ decrypted = Buffer.concat([decrypted, decipher.final()])
+
+ return decrypted.toString()
+ }
+
+ static async delete(user_id, key) {
+ if (!user_id) {
+ throw new Error("Missing user_id")
+ }
+
+ if (!key) {
+ throw new Error("Missing key")
+ }
+
+ const entry = await SyncEntry.findOne({
+ user_id,
+ key,
+ }).catch(() => null)
+
+ if (!entry) {
+ return null
+ }
+
+ await entry.delete()
+
+ return entry
+ }
+
+ static async has(user_id, key) {
+ if (!user_id) {
+ throw new Error("Missing user_id")
+ }
+
+ if (!key) {
+ throw new Error("Missing key")
+ }
+
+ const entry = await SyncEntry.findOne({
+ user_id,
+ key,
+ }).catch(() => null)
+
+ return !!entry
+ }
+}
\ No newline at end of file
diff --git a/packages/server/classes/StorageClient/index.js b/packages/server/classes/StorageClient/index.js
new file mode 100755
index 00000000..9d350cbd
--- /dev/null
+++ b/packages/server/classes/StorageClient/index.js
@@ -0,0 +1,97 @@
+const Minio = require("minio")
+import path from "path"
+
+export const generateDefaultBucketPolicy = (payload) => {
+ const { bucketName } = payload
+
+ if (!bucketName) {
+ throw new Error("bucketName is required")
+ }
+
+ return {
+ Version: "2012-10-17",
+ Statement: [
+ {
+ Action: [
+ "s3:GetObject"
+ ],
+ Effect: "Allow",
+ Principal: {
+ AWS: [
+ "*"
+ ]
+ },
+ Resource: [
+ `arn:aws:s3:::${bucketName}/*`
+ ],
+ Sid: ""
+ }
+ ]
+ }
+}
+
+export class StorageClient extends Minio.Client {
+ constructor(options) {
+ super(options)
+
+ this.defaultBucket = String(options.defaultBucket)
+ this.defaultRegion = String(options.defaultRegion)
+ }
+
+ composeRemoteURL = (key) => {
+ const _path = path.join(this.defaultBucket, key)
+
+ return `${this.protocol}//${this.host}:${this.port}/${_path}`
+ }
+
+ setDefaultBucketPolicy = async (bucketName) => {
+ const policy = generateDefaultBucketPolicy({ bucketName })
+
+ return this.setBucketPolicy(bucketName, JSON.stringify(policy))
+ }
+
+ initialize = async () => {
+ console.log("đ Checking if storage client have default bucket...")
+
+ // check connection with s3
+ const bucketExists = await this.bucketExists(this.defaultBucket).catch(() => {
+ return false
+ })
+
+ if (!bucketExists) {
+ console.warn("đĒŖ Default bucket not exists! Creating new bucket...")
+
+ await this.makeBucket(this.defaultBucket, "s3")
+
+ // set default bucket policy
+ await this.setDefaultBucketPolicy(this.defaultBucket)
+ }
+
+ // check if default bucket policy exists
+ const bucketPolicy = await this.getBucketPolicy(this.defaultBucket).catch(() => {
+ return null
+ })
+
+ if (!bucketPolicy) {
+ // set default bucket policy
+ await this.setDefaultBucketPolicy(this.defaultBucket)
+ }
+
+ console.log("â
Storage client is ready.")
+ }
+}
+
+export const createStorageClientInstance = (options) => {
+ return new StorageClient({
+ endPoint: process.env.S3_ENDPOINT,
+ port: Number(process.env.S3_PORT),
+ useSSL: ToBoolean(process.env.S3_USE_SSL),
+ accessKey: process.env.S3_ACCESS_KEY,
+ secretKey: process.env.S3_SECRET_KEY,
+ defaultBucket: process.env.S3_BUCKET,
+ defaultRegion: process.env.S3_REGION,
+ ...options,
+ })
+}
+
+export default createStorageClientInstance
\ No newline at end of file
diff --git a/packages/server/classes/TidalAPI/index.js b/packages/server/classes/TidalAPI/index.js
new file mode 100755
index 00000000..53975536
--- /dev/null
+++ b/packages/server/classes/TidalAPI/index.js
@@ -0,0 +1,480 @@
+import axios from "axios"
+import qs from "qs"
+
+const TIDAL_CLIENT_ID = process.env.TIDAL_CLIENT_ID
+const TIDAL_CLIENT_SECRET = process.env.TIDAL_CLIENT_SECRET
+
+function tranformTrackData(data = {}) {
+ // TODO: Support Track remixes & versions
+ data._id = data.id
+
+ const coverUID = data.album.cover.replace(/-/g, "/")
+
+ data.cover = `https://resources.tidal.com/images/${coverUID}/1080x1080.jpg`
+
+ data.artist = data.artists.map(artist => artist.name).join(", ")
+
+ data.metadata = {
+ title: data.title,
+ artists: data.artists.map(artist => artist.name).join(", "),
+ artist: data.artists.map(artist => artist.name).join(", "),
+ album: data.album.title,
+ duration: data.duration,
+ }
+
+ data.service = "tidal"
+
+ return data
+}
+
+export default class TidalAPI {
+ static API_V1 = "https://api.tidal.com/v1"
+ static API_V2 = "https://api.tidal.com/v2"
+
+ static API_USERS = "https://api.tidal.com/v1/users"
+
+ static async checkAuthStatus(device_code) {
+ const data = {
+ client_id: TIDAL_CLIENT_ID,
+ device_code: device_code,
+ grant_type: "urn:ietf:params:oauth:grant-type:device_code",
+ scope: "r_usr+w_usr+w_sub",
+ }
+
+ const response = await axios({
+ method: "POST",
+ url: "https://auth.tidal.com/v1/oauth2/token",
+ params: data,
+ auth: {
+ username: TIDAL_CLIENT_ID,
+ password: TIDAL_CLIENT_SECRET,
+ },
+ }).catch(err => {
+ return false
+ })
+
+ if (!response) {
+ return false
+ }
+
+ return response.data
+ }
+
+ static async getAuthUrl() {
+ let data = {
+ client_id: TIDAL_CLIENT_ID,
+ scope: "r_usr+w_usr+w_sub",
+ }
+
+ const response = await axios({
+ method: "POST",
+ url: "https://auth.tidal.com/v1/oauth2/device_authorization",
+ params: data,
+ })
+
+ return {
+ url: "https://" + response.data.verificationUri + "/" + response.data.userCode,
+ device_code: response.data.deviceCode,
+ expires_in: response.data.expiresIn,
+ }
+ }
+
+ static async getUserData({ access_token, user_id, country }) {
+ const url = `https://api.tidal.com/v1/users/${user_id}?countryCode=${country}`
+
+ const response = await axios({
+ method: "GET",
+ url,
+ headers: {
+ Origin: "http://listen.tidal.com",
+ Authorization: `Bearer ${access_token}`,
+ },
+ })
+
+ return response.data
+ }
+
+ static async getTrackPlaybackUrl({ track_id, quality, access_token, country }) {
+ let params = {
+ countryCode: country ?? "US",
+ audioquality: quality ?? "LOSSLESS",
+ playbackmode: "STREAM",
+ assetpresentation: "FULL",
+ }
+
+ let response = await axios({
+ method: "GET",
+ url: `https://api.tidal.com/v1/tracks/${track_id}/playbackinfopostpaywall`,
+ params: params,
+ headers: {
+ Origin: "http://listen.tidal.com",
+ Authorization: `Bearer ${access_token}`,
+ },
+ })
+
+ let decodedManifest = JSON.parse(global.b64Decode(response.data.manifest))
+
+ decodedManifest.url = decodedManifest.urls[0]
+
+ return {
+ metadata: {
+ trackId: track_id,
+ audioMode: response.data.audioMode,
+ audioQuality: response.data.audioQuality,
+ bitDepth: response.data.bitDepth,
+ bitRate: response.data.bitRate,
+ mimeType: response.data.manifestMimeType,
+ },
+ ...decodedManifest,
+ }
+ }
+ static async getTrackMetadata({ track_id, access_token, country }) {
+ const response = await axios({
+ method: "GET",
+ url: `https://api.tidal.com/v1/tracks/${track_id}`,
+ params: {
+ countryCode: country,
+ },
+ headers: {
+ Origin: "http://listen.tidal.com",
+ Authorization: `Bearer ${access_token}`,
+ },
+ })
+
+ return response.data
+ }
+
+ static async getTrackManifest({ track_id, quality, access_token, country }) {
+ const playback = await TidalAPI.getTrackPlaybackUrl({
+ track_id,
+ quality,
+ access_token,
+ country,
+ })
+
+ const metadata = await TidalAPI.getTrackMetadata({
+ track_id,
+ access_token,
+ country,
+ })
+
+ return {
+ playback,
+ metadata,
+ }
+ }
+
+ static async search({ query, type = "all" }) {
+ let url = `https://api.tidal.com/v1/search`
+
+ switch (type) {
+ case "all":
+ url = `https://api.tidal.com/v1/search`
+ break
+ case "playlists":
+ url = `https://api.tidal.com/v1/search/playlists`
+ break
+ case "artists":
+ url = `https://api.tidal.com/v1/search/artists`
+ break
+ case "albums":
+ url = `https://api.tidal.com/v1/search/albums`
+ break
+ case "tracks":
+ url = `https://api.tidal.com/v1/search/tracks`
+ break
+ }
+
+ const response = await axios({
+ method: "GET",
+ url: url,
+ params: {
+ query: query,
+ countryCode: "AZ",
+ },
+ headers: {
+ Origin: "http://listen.tidal.com",
+ "x-tidal-token": TIDAL_CLIENT_ID,
+ },
+ })
+
+ return response.data.tracks.items.map(item => {
+ item = tranformTrackData(item)
+
+ return item
+ })
+ }
+
+ /**
+ * Retrieves favorite tracks for a user.
+ *
+ * @param {Object} options - The options for retrieving favorite tracks.
+ * @param {number} options.user_id - The user ID.
+ * @param {string} options.country - The country code.
+ * @param {string} options.access_token - The access token.
+ * @param {number} [options.limit=100] - The maximum number of tracks to retrieve.
+ * @param {number} [options.offset=0] - The offset for pagination.
+ * @return {Object} The response object containing the total length and tracks.
+ */
+ static async getFavoriteTracks({
+ user_id,
+ access_token,
+ country,
+ limit = 100,
+ offset = 0,
+ order = "DATE",
+ orderDirection = "DESC",
+ }) {
+ const response = await axios({
+ url: `${TidalAPI.API_USERS}/${user_id}/favorites/tracks`,
+ method: "GET",
+ headers: {
+ Origin: "http://listen.tidal.com",
+ Authorization: `Bearer ${access_token}`,
+ },
+ params: {
+ countryCode: country,
+ order,
+ orderDirection,
+ limit,
+ offset,
+ },
+ })
+
+ response.data.items = response.data.items.map(item => {
+ item.item = tranformTrackData(item.item)
+
+ item.item.liked_at = new Date(item.created).getTime()
+ item.item.liked = true
+ item.item._computed = true
+
+ return item.item
+ })
+
+ return {
+ total_length: response.data.totalNumberOfItems,
+ tracks: response.data.items,
+ }
+ }
+
+ /**
+ * Retrieves self favorite playlists based on specified parameters.
+ *
+ * @param {Object} options - The options object.
+ * @param {string} options.country - The country code.
+ * @param {string} options.access_token - The access token for authentication.
+ * @param {number} [options.limit=100] - The maximum number of playlists to retrieve.
+ * @param {number} [options.offset=0] - The offset for pagination.
+ * @param {string} [options.order="DATE"] - The field to order the playlists by.
+ * @param {string} [options.orderDirection="DESC"] - The direction to order the playlists in.
+ * @return {Object} - An object containing the total length and items of the playlists.
+ */
+ static async getFavoritePlaylists({
+ country,
+ access_token,
+ limit = 100,
+ offset = 0,
+ order = "DATE",
+ orderDirection = "DESC",
+ }) {
+ const params = {
+ folderId: "root",
+ deviceType: "BROWSER",
+ countryCode: country,
+ offset,
+ limit,
+ order,
+ orderDirection,
+ }
+
+ let response = await axios({
+ url: `${TidalAPI.API_V2}/my-collection/playlists/folders`,
+ method: "GET",
+ headers: {
+ Origin: "http://listen.tidal.com",
+ Authorization: `Bearer ${access_token}`,
+ Server: "envoy",
+ },
+ params: params,
+ })
+
+ response.data.items = response.data.items.map(item => {
+ item.data._id = item.data.uuid
+ item.data.addedAt = item.addedAt
+ item.data.created_at = item.addedAt
+
+ item.data.service = "tidal"
+
+ const coverUID = item.data.squareImage.replace(/-/g, "/")
+ item.data.cover = `https://resources.tidal.com/images/${coverUID}/1080x1080.jpg`
+
+ return item.data
+ })
+
+ return {
+ total_length: response.data.totalNumberOfItems,
+ items: response.data.items,
+ }
+ }
+
+ /**
+ * Retrieves playlist items based on the provided parameters.
+ *
+ * @param {Object} options - The options for retrieving playlist items.
+ * @param {string} options.uuid - The UUID of the playlist.
+ * @param {number} options.limit - The maximum number of items to retrieve.
+ * @param {number} options.offset - The offset of items to start retrieving from.
+ * @param {string} options.country - The country code for retrieving items.
+ * @param {string} options.access_token - The access token for authentication.
+ * @return {Object} An object containing the total length and items of the playlist.
+ */
+ static async getPlaylistItems({
+ uuid,
+ limit,
+ offset,
+
+ country,
+ access_token,
+ }) {
+ const params = {
+ limit,
+ offset,
+ countryCode: country,
+ }
+
+ let response = await axios({
+ url: `${TidalAPI.API_V1}/playlists/${uuid}/items`,
+ method: "GET",
+ headers: {
+ Origin: "http://listen.tidal.com",
+ Authorization: `Bearer ${access_token}`,
+ Server: "envoy",
+ },
+ params: params,
+ })
+
+ response.data.items = response.data.items.map((item) => {
+ item = tranformTrackData(item.item)
+
+ return item
+ })
+
+ return {
+ total_length: response.data.totalNumberOfItems,
+ list: response.data.items,
+ }
+ }
+
+ /**
+ * Retrieves playlist data from the Tidal API.
+ *
+ * @param {Object} options - The options for retrieving the playlist data.
+ * @param {string} options.uuid - The UUID of the playlist.
+ * @param {string} options.access_token - The access token for authentication.
+ * @param {string} options.country - The country code for the playlist data.
+ * @param {boolean} [options.resolve_items=false] - Whether to resolve the playlist items.
+ * @param {number} [options.limit] - The maximum number of items to retrieve.
+ * @param {number} [options.offset] - The offset for pagination.
+ * @return {Object} The playlist data retrieved from the Tidal API.
+ */
+ static async getPlaylistData({
+ uuid,
+
+ access_token,
+ country,
+
+ resolve_items = false,
+ limit,
+ offset,
+ }) {
+ const params = {
+ countryCode: country,
+ }
+
+ let response = await axios({
+ url: `${TidalAPI.API_V1}/playlists/${uuid}`,
+ method: "GET",
+ headers: {
+ Origin: "http://listen.tidal.com",
+ Authorization: `Bearer ${access_token}`,
+ Server: "envoy",
+ },
+ params: params,
+ })
+
+ const coverUID = response.data.squareImage.replace(/-/g, "/")
+ response.data.cover = `https://resources.tidal.com/images/${coverUID}/1080x1080.jpg`
+
+ response.data.service = "tidal"
+
+ if (resolve_items) {
+ response.data.list = await TidalAPI.getPlaylistItems({
+ uuid,
+ limit,
+ offset,
+ access_token,
+ country,
+ })
+
+ response.data.total_length = response.data.list.total_length
+ response.data.list = response.data.list.list
+ }
+
+ return response.data
+ }
+
+ /**
+ * Toggles the like status of a track.
+ *
+ * @param {Object} params - The parameters for toggling the track like.
+ * @param {string} params.trackId - The ID of the track to toggle the like status.
+ * @param {boolean} params.to - The new like status. True to like the track, false to unlike it.
+ * @param {string} params.user_id - The ID of the user performing the action.
+ * @param {string} params.access_token - The access token for authentication.
+ * @param {string} params.country - The country code.
+ * @return {Object} - The response data from the API.
+ */
+ static async toggleTrackLike({
+ trackId,
+ to,
+ user_id,
+
+ access_token,
+ country,
+ }) {
+ let url = `${TidalAPI.API_V1}/users/${user_id}/favorites/tracks`
+ let payload = null
+ let headers = {
+ Origin: "http://listen.tidal.com",
+ Authorization: `Bearer ${access_token}`,
+ }
+
+ if (!to) {
+ url = `${url}/${trackId}`
+ } else {
+ payload = qs.stringify({
+ trackIds: trackId,
+ onArtifactNotFound: "FAIL"
+ })
+
+ headers["Content-Type"] = "application/x-www-form-urlencoded"
+ }
+
+ let response = await axios({
+ url: url,
+ method: to ? "POST" : "DELETE",
+ headers: headers,
+ params: {
+ countryCode: country,
+ deviceType: "BROWSER"
+ },
+ data: payload
+ })
+
+ return response.data
+ }
+
+ static async togglePlaylistLike(playlist_id) {
+
+ }
+}
diff --git a/packages/server/index.js b/packages/server/index.js
new file mode 100755
index 00000000..d2d5d005
--- /dev/null
+++ b/packages/server/index.js
@@ -0,0 +1,411 @@
+require("dotenv").config()
+
+import fs from "node:fs"
+import path from "node:path"
+import repl from "node:repl"
+import { Transform } from "node:stream"
+import ChildProcess from "node:child_process"
+import { Observable } from "@gullerya/object-observer"
+import chalk from "chalk"
+import Spinnies from "spinnies"
+import chokidar from "chokidar"
+
+import { dots as DefaultSpinner } from "spinnies/spinners.json"
+import getInternalIp from "./lib/getInternalIp"
+import comtyAscii from "./ascii"
+import pkg from "./package.json"
+
+const bootloaderBin = path.resolve(__dirname, "boot")
+const servicesPath = path.resolve(__dirname, "services")
+
+async function scanServices() {
+ const finalServices = []
+
+ let services = fs.readdirSync(servicesPath)
+
+ for await (let _path of services) {
+ _path = path.resolve(servicesPath, _path)
+
+ if (fs.lstatSync(_path).isDirectory()) {
+ // search main file "*.service.*" (using regex) on the root of the service path
+ const mainFile = fs.readdirSync(_path).find((filename) => {
+ const regex = new RegExp(`^.*\.service\..*$`)
+
+ return regex.test(filename)
+ })
+
+ if (mainFile) {
+ finalServices.push(path.resolve(_path, mainFile))
+ }
+ }
+ }
+
+ return finalServices
+}
+
+let allReady = false
+let selectedProcessInstance = null
+let internalIp = null
+let services = null
+
+const spinnies = new Spinnies()
+
+const instancePool = []
+const serviceFileReference = {}
+const serviceWatcher = Observable.from({})
+
+Observable.observe(serviceWatcher, (changes) => {
+ const { type, path, value } = changes[0]
+
+ switch (type) {
+ case "update": {
+ //console.log(`Updated service | ${path} > ${value}`)
+
+ //check if all services all ready
+ if (Object.values(serviceWatcher).every((service) => service.ready)) {
+ handleAllReady()
+ }
+
+ break
+ }
+ }
+})
+
+function detachInstanceStd(instance) {
+ if (instance.logs) {
+ instance.logs.stdout.unpipe(process.stdout)
+ instance.logs.stderr.unpipe(process.stderr)
+ }
+}
+
+function attachInstanceStd(instance, { afterMsg } = {}) {
+ if (instance.logs) {
+ console.clear()
+
+ if (afterMsg) {
+ console.log(afterMsg)
+ }
+
+ instance.logs.stdout.pipe(process.stdout)
+ instance.logs.stderr.pipe(process.stderr)
+ }
+}
+
+const relp_commands = [
+ {
+ cmd: "select",
+ aliases: ["s", "sel"],
+ fn: (cb, service) => {
+ if (!isNaN(parseInt(service))) {
+ service = serviceWatcher[Object.keys(serviceWatcher)[service]]
+ } else {
+ service = serviceWatcher[service]
+ }
+
+ if (!service) {
+ console.error(`Service [${service}] not found`)
+ return false
+ }
+
+ if (selectedProcessInstance) {
+ detachInstanceStd(selectedProcessInstance.instance)
+ selectedProcessInstance = null
+ }
+
+ selectedProcessInstance = instancePool.find((instance) => instance.id === service.id)
+
+ if (!selectedProcessInstance) {
+ selectedProcessInstance = null
+
+ console.error(`Cannot find service [${service.id}] in the instances pool`)
+
+ return false
+ }
+
+ attachInstanceStd(selectedProcessInstance.instance)
+
+ return true
+ }
+ }
+]
+
+async function getIgnoredFiles(cwd) {
+ // git check-ignore -- *
+ let output = await new Promise((resolve, reject) => {
+ ChildProcess.exec("git check-ignore -- *", {
+ cwd: cwd
+ }, (err, stdout) => {
+ if (err) {
+ resolve(``)
+ }
+
+ resolve(stdout)
+ })
+ })
+
+ output = output.split("\n").map((file) => {
+ return `**/${file.trim()}`
+ })
+
+ output = output.filter((file) => {
+ return file
+ })
+
+ return output
+}
+
+async function handleAllReady() {
+ console.clear()
+
+ allReady = true
+
+ console.log(comtyAscii)
+ console.log(`đ All services[${services.length}] ready!\n`)
+ console.log(`USE: select , reboot, exit`)
+}
+
+// SERVICE WATCHER FUNCTIONS
+async function handleNewServiceStarting(id) {
+ if (serviceWatcher[id].ready === false) {
+ spinnies.add(id, {
+ text: `đĻ [${id}] Loading service...`,
+ spinner: DefaultSpinner
+ })
+ }
+}
+
+async function handleServiceStarted(id) {
+ if (serviceWatcher[id].ready === false) {
+ if (spinnies.pick(id)) {
+ spinnies.succeed(id, { text: `[${id}][${serviceWatcher[id].index}] Ready` })
+ }
+ }
+
+ serviceWatcher[id].ready = true
+}
+
+async function handleServiceExit(id, code, err) {
+ //console.log(`đ Service ${id} exited with code ${code}`, err)
+
+ if (serviceWatcher[id].ready === false) {
+ if (spinnies.pick(id)) {
+ spinnies.fail(id, { text: `[${id}][${serviceWatcher[id].index}] Failed with code ${code}` })
+ }
+ }
+
+ serviceWatcher[id].ready = false
+}
+
+// PROCESS HANDLERS
+async function handleProcessExit(error, code) {
+ if (error) {
+ console.error(error)
+ }
+
+ console.log(`\nPreparing to exit...`)
+
+ for await (let instance of instancePool) {
+ console.log(`đ Killing ${instance.id} [${instance.instance.pid}]`)
+ await instance.instance.kill()
+ }
+
+ return 0
+}
+
+async function handleIPCData(id, data) {
+ if (data.type === "log") {
+ console.log(`[${id}] ${data.message}`)
+ }
+
+ if (data.status === "ready") {
+ await handleServiceStarted(id)
+ }
+}
+
+function spawnService({ id, service, cwd }) {
+ handleNewServiceStarting(id)
+
+ let instance = ChildProcess.fork(bootloaderBin, [service], {
+ detached: false,
+ silent: true,
+ cwd: cwd,
+ env: {
+ ...process.env
+ }
+ })
+
+ instance.reload = () => {
+ instance.kill()
+
+ instance = spawnService({ id, service, cwd })
+
+ const instanceIndex = instancePool.findIndex((_instance) => _instance.id === id)
+
+ if (instanceIndex !== -1) {
+ instancePool[instanceIndex].instance = instance
+ }
+
+ // check if selectedProcessInstance
+ if (selectedProcessInstance) {
+ detachInstanceStd(selectedProcessInstance.instance)
+
+ //if the selected process is this service, reattach std
+ if (selectedProcessInstance.id === id) {
+ attachInstanceStd(instance, {
+ afterMsg: "Reloading service...",
+ })
+ }
+ }
+ }
+
+ instance.logs = {
+ stdout: createServiceLogTransformer({ id }),
+ stderr: createServiceLogTransformer({ id, color: "bgRed" }),
+ }
+
+ instance.logs.stdout.history = []
+ instance.logs.stderr.history = []
+
+ // push to buffer history
+ instance.stdout.pipe(instance.logs.stdout)
+ instance.stderr.pipe(instance.logs.stderr)
+
+ instance.on("message", (data) => {
+ return handleIPCData(id, data)
+ })
+
+ instance.on("close", (code, err) => {
+ return handleServiceExit(id, code, err)
+ })
+
+ return instance
+}
+
+function createServiceLogTransformer({ id, color = "bgCyan" }) {
+ return new Transform({
+ transform(data, encoding, callback) {
+ callback(null, `${chalk[color](`[${id}]`)} > ${data.toString()}`)
+ }
+ })
+}
+
+async function main() {
+ internalIp = await getInternalIp()
+
+ console.clear()
+ console.log(comtyAscii)
+ console.log(`\nRunning ${chalk.bgBlue(`${pkg.name}`)} | ${chalk.bgMagenta(`[v${pkg.version}]`)} | ${internalIp} \n\n\n`)
+
+ services = await scanServices()
+
+ if (services.length === 0) {
+ console.error("â No service found")
+ return process.exit(1)
+ }
+
+ console.log(`đĻ Found ${services.length} service(s)`)
+
+ // create watchers
+ for await (let service of services) {
+ const instanceFile = path.basename(service)
+ const instanceBasePath = path.dirname(service)
+
+ const { name: id, version, proxy } = require(path.resolve(instanceBasePath, "package.json"))
+
+ serviceFileReference[instanceFile] = id
+
+ serviceWatcher[id] = {
+ index: services.indexOf(service),
+ id: id,
+ version: version,
+ file: instanceFile,
+ cwd: instanceBasePath,
+ proxy: proxy,
+ buffer: [],
+ ready: false,
+ }
+ }
+
+ // create a new process of node for each service
+ for await (let service of services) {
+ const { id, version, cwd } = serviceWatcher[serviceFileReference[path.basename(service)]]
+
+ const instance = spawnService({ id, service, cwd })
+
+ // push to pool
+ instancePool.push({
+ id,
+ version,
+ instance
+ })
+
+ // if is NODE_ENV to development, start a file watcher for hot-reload
+ if (process.env.NODE_ENV === "development") {
+ const ignored = [
+ ...await getIgnoredFiles(cwd),
+ "**/node_modules/**",
+ "**/dist/**",
+ "**/build/**",
+ ]
+
+ chokidar.watch(cwd, {
+ ignored: ignored,
+ persistent: true,
+ ignoreInitial: true,
+ }).on("all", (event, path) => {
+ // find instance from pool
+ const instanceIndex = instancePool.findIndex((instance) => instance.id === id)
+
+ console.log(event, path, instanceIndex)
+
+ // reload
+ instancePool[instanceIndex].instance.reload()
+ })
+ }
+ }
+
+ // create repl
+ repl.start({
+ prompt: "> ",
+ useGlobal: true,
+ eval: (input, context, filename, callback) => {
+ let inputs = input.split(" ")
+
+ // remove last \n from input
+ inputs[inputs.length - 1] = inputs[inputs.length - 1].replace(/\n/g, "")
+
+ // find relp command
+ const command = inputs[0]
+ const args = inputs.slice(1)
+
+ const command_fn = relp_commands.find((relp_command) => {
+ let exising = false
+
+ if (Array.isArray(relp_command.aliases)) {
+ exising = relp_command.aliases.includes(command)
+ }
+
+ if (relp_command.cmd === command) {
+ exising = true
+ }
+
+ return exising
+ })
+
+ if (!command_fn) {
+ return callback(`Command not found: ${command}`)
+ }
+
+ return command_fn.fn(callback, ...args)
+ }
+ }).on("exit", () => {
+ process.exit(0)
+ })
+}
+
+process.on("exit", handleProcessExit)
+process.on("SIGINT", handleProcessExit)
+process.on("uncaughtException", handleProcessExit)
+process.on("unhandledRejection", handleProcessExit)
+
+main()
\ No newline at end of file
diff --git a/packages/server/lib/api_wrapper/index.js b/packages/server/lib/api_wrapper/index.js
new file mode 100755
index 00000000..3fdfc6d8
--- /dev/null
+++ b/packages/server/lib/api_wrapper/index.js
@@ -0,0 +1,120 @@
+require("dotenv").config()
+
+const path = require("path")
+const { registerBaseAliases } = require("linebridge/dist/server")
+const { webcrypto: crypto } = require("crypto")
+const infisical = require("infisical-node")
+
+global.isProduction = process.env.NODE_ENV === "production"
+
+globalThis["__root"] = path.resolve(process.cwd())
+globalThis["__src"] = path.resolve(globalThis["__root"], global.isProduction ? "dist" : "src")
+
+const customAliases = {
+ "root": globalThis["__root"],
+ "src": globalThis["__src"],
+ "@shared-classes": path.resolve(globalThis["__src"], "_shared/classes"),
+ "@services": path.resolve(globalThis["__src"], "services"),
+}
+
+if (!global.isProduction) {
+ customAliases["comty.js"] = path.resolve(globalThis["__src"], "../../comty.js/src")
+ customAliases["@shared-classes"] = path.resolve(globalThis["__src"], "shared-classes")
+}
+
+if (process.env.USE_LINKED_SHARED) {
+ customAliases["@shared-classes"] = path.resolve(globalThis["__src"], "shared-classes")
+}
+
+registerBaseAliases(globalThis["__src"], customAliases)
+
+// patches
+const { Buffer } = require("buffer")
+
+global.b64Decode = (data) => {
+ return Buffer.from(data, "base64").toString("utf-8")
+}
+global.b64Encode = (data) => {
+ return Buffer.from(data, "utf-8").toString("base64")
+}
+
+global.nanoid = (t = 21) => crypto.getRandomValues(new Uint8Array(t)).reduce(((t, e) => t += (e &= 63) < 36 ? e.toString(36) : e < 62 ? (e - 26).toString(36).toUpperCase() : e > 62 ? "-" : "_"), "");
+
+Array.prototype.updateFromObjectKeys = function (obj) {
+ this.forEach((value, index) => {
+ if (obj[value] !== undefined) {
+ this[index] = obj[value]
+ }
+ })
+
+ return this
+}
+
+global.toBoolean = (value) => {
+ if (typeof value === "boolean") {
+ return value
+ }
+
+ if (typeof value === "string") {
+ return value.toLowerCase() === "true"
+ }
+
+ return false
+}
+
+async function injectEnvFromInfisical() {
+ const envMode = global.FORCE_ENV ?? global.isProduction ? "prod" : "dev"
+
+ console.log(`đ Injecting env variables from INFISICAL in [${envMode}] mode...`)
+
+ const client = new infisical({
+ token: process.env.INFISICAL_TOKEN,
+ })
+
+ const secrets = await client.getAllSecrets({
+ environment: envMode,
+ attachToProcessEnv: false,
+ })
+
+ // inject to process.env
+ secrets.forEach((secret) => {
+ if (!(process.env[secret.secretName])) {
+ process.env[secret.secretName] = secret.secretValue
+ }
+ })
+}
+
+function handleExit(instance, code) {
+ if (instance.server) {
+ if (typeof instance.server.close === "function") {
+ instance.server.close()
+ }
+ }
+
+ return process.exit(code)
+}
+
+async function main({
+ force_infisical,
+} = {}) {
+ const API = require(path.resolve(globalThis["__src"], "api.js")).default
+
+ if (force_infisical || process.env.INFISICAL_TOKEN) {
+ await injectEnvFromInfisical()
+ }
+
+ const instance = new API()
+
+ process.on("exit", () => handleExit(instance, 0))
+ process.on("SIGINT", () => handleExit(instance, 0))
+ process.on("uncaughtException", () => handleExit(instance, 1))
+ process.on("unhandledRejection", () => handleExit(instance, 1))
+
+ await instance.initialize()
+
+ return instance
+}
+
+main().catch((error) => {
+ console.error(`đ [FATAL ERROR] >`, error)
+})
\ No newline at end of file
diff --git a/packages/wrapper/src/lib/getInternalIp.js b/packages/server/lib/getInternalIp/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/wrapper/src/lib/getInternalIp.js
rename to packages/server/lib/getInternalIp/index.js
diff --git a/packages/server/package.json b/packages/server/package.json
index 3abe6ee3..0f32b58c 100755
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -1,54 +1,41 @@
{
- "name": "@comty/server",
- "version": "0.60.3",
- "main": "dist/index.js",
- "scripts": {
- "build": "hermes build",
- "dev": "cross-env NODE_ENV=development nodemon --ignore dist/ --exec hermes-node ./src/index.js",
- "run:prod": "cross-env NODE_ENV=production node ./dist/index.js"
- },
- "shared": {
- "classes/FileUpload": "src/shared-classes/FileUpload",
- "classes/CacheService": "src/shared-classes/CacheService",
- "classes/ComtyClient": "src/shared-classes/ComtyClient",
- "classes/RedisClient": "src/shared-classes/RedisClient",
- "classes/StorageClient": "src/shared-classes/StorageClient",
- "classes/DbManager": "src/shared-classes/DbManager",
- "classes/Errors": "src/shared-classes/Errors",
- "classes/DbModels": "src/shared-classes/DbModels"
- },
- "license": "MIT",
- "dependencies": {
- "@foxify/events": "^2.1.0",
- "@octokit/rest": "^19.0.7",
- "@tensorflow/tfjs-node": "4.0.0",
- "axios": "^1.2.5",
- "bcrypt": "^5.1.0",
- "busboy": "^1.6.0",
- "connect-mongo": "^4.6.0",
- "content-range": "^2.0.2",
- "dotenv": "^16.0.3",
- "infisical-node": "^1.2.1",
- "jsonwebtoken": "^9.0.0",
- "linebridge": "0.16.0",
- "luxon": "^3.2.1",
- "mime-types": "^2.1.35",
- "minio": "^7.0.32",
- "moment": "^2.29.4",
- "moment-timezone": "^0.5.40",
- "mongoose": "^6.9.0",
- "normalize-url": "^8.0.0",
- "nsfwjs": "2.4.2",
- "p-map": "4",
- "p-queue": "^7.3.4",
- "path-to-regexp": "^6.2.1"
- },
- "devDependencies": {
- "@ragestudio/hermes": "^0.1.0",
- "@corenode/utils": "0.28.26",
- "chai": "^4.3.7",
- "cross-env": "^7.0.3",
- "mocha": "^10.2.0",
- "nodemon": "^2.0.15"
- }
-}
\ No newline at end of file
+ "name": "@comty/server",
+ "version": "0.60.2",
+ "license": "MIT",
+ "workspaces": [
+ "services/*"
+ ],
+ "private": true,
+ "scripts": {
+ "build": "hermes build",
+ "dev": "cross-env NODE_ENV=development hermes-node ./index.js",
+ "run:prod": "cross-env NODE_ENV=production node ./dist/index.js"
+ },
+ "dependencies": {
+ "@gullerya/object-observer": "^6.1.3",
+ "@infisical/sdk": "^2.1.8",
+ "@ragestudio/hermes": "^0.1.1",
+ "axios": "^1.6.7",
+ "bcrypt": "^5.1.1",
+ "chalk": "4.1.2",
+ "cli-color": "^2.0.3",
+ "clui": "^0.3.6",
+ "dotenv": "^16.4.4",
+ "http-proxy-middleware": "^2.0.6",
+ "hyper-express": "^6.14.12",
+ "linebridge": "^0.16.0",
+ "module-alias": "^2.2.3",
+ "p-map": "^4.0.0",
+ "p-queue": "^7.3.4",
+ "spinnies": "^0.5.1"
+ },
+ "devDependencies": {
+ "chai": "^5.1.0",
+ "cross-env": "^7.0.3",
+ "mocha": "^10.3.0",
+ "nodemon": "^3.0.3"
+ },
+ "resolutions": {
+ "string-width": "4.2.3"
+ }
+}
diff --git a/packages/chat_server/src/chatServer.js b/packages/server/services/chats/chatServer.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/chat_server/src/chatServer.js
rename to packages/server/services/chats/chatServer.js
diff --git a/packages/chat_server/src/api.js b/packages/server/services/chats/chats.service.js
similarity index 98%
rename from packages/chat_server/src/api.js
rename to packages/server/services/chats/chats.service.js
index 0c0f6c27..d6d58c4c 100755
--- a/packages/chat_server/src/api.js
+++ b/packages/server/services/chats/chats.service.js
@@ -12,7 +12,7 @@ import routes from "./routes"
import ChatServer from "./chatServer"
-export default class Server {
+export default class API {
constructor(options = {}) {
this.app = express()
this.httpServer = http.createServer(this.app)
@@ -98,4 +98,6 @@ export default class Server {
// log server started
console.log(`đ Server started ready on \n\t - http://${this.options.listenHost}:${this.options.listenPort} \n\t - Tooks ${elapsedTimeInMs}ms`)
}
-}
\ No newline at end of file
+}
+
+Boot(API)
\ No newline at end of file
diff --git a/packages/chat_server/src/middlewares/withWsAuth.js b/packages/server/services/chats/middlewares/withWsAuth.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/chat_server/src/middlewares/withWsAuth.js
rename to packages/server/services/chats/middlewares/withWsAuth.js
diff --git a/packages/server/services/chats/package.json b/packages/server/services/chats/package.json
new file mode 100755
index 00000000..15ef1e24
--- /dev/null
+++ b/packages/server/services/chats/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "chats",
+ "version": "0.60.2",
+ "license": "MIT",
+ "dependencies": {
+ "@foxify/events": "^2.1.0",
+ "axios": "^1.4.0",
+ "bcrypt": "5.0.1",
+ "comty.js": "^0.58.2",
+ "connect-mongo": "^4.6.0",
+ "cors": "^2.8.5",
+ "dotenv": "^16.0.3",
+ "express": "^4.18.2",
+ "jsonwebtoken": "8.5.1",
+ "linebridge": "0.15.12",
+ "luxon": "^3.0.4",
+ "minio": "^7.0.32",
+ "moment": "2.29.4",
+ "moment-timezone": "0.5.37",
+ "mongoose": "^6.9.0",
+ "morgan": "^1.10.0",
+ "redis": "^4.6.6",
+ "socket.io": "^4.5.4"
+ }
+}
\ No newline at end of file
diff --git a/packages/chat_server/src/routes/index.js b/packages/server/services/chats/routes/index.js
similarity index 100%
rename from packages/chat_server/src/routes/index.js
rename to packages/server/services/chats/routes/index.js
diff --git a/packages/chat_server/src/useMiddlewares/useCors/index.js b/packages/server/services/chats/useMiddlewares/useCors/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/chat_server/src/useMiddlewares/useCors/index.js
rename to packages/server/services/chats/useMiddlewares/useCors/index.js
diff --git a/packages/chat_server/src/useMiddlewares/useLogger/index.js b/packages/server/services/chats/useMiddlewares/useLogger/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/chat_server/src/useMiddlewares/useLogger/index.js
rename to packages/server/services/chats/useMiddlewares/useLogger/index.js
diff --git a/packages/server/services/ems/package.json b/packages/server/services/ems/package.json
new file mode 100644
index 00000000..7835ffcb
--- /dev/null
+++ b/packages/server/services/ems/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "ems",
+ "description": "External Messaging Service (SMS, EMAIL, PUSH)",
+ "version": "0.1.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "nodemailer": "^6.9.11",
+ "web-push": "^3.6.7"
+ }
+}
diff --git a/packages/server/services/ems/routes/dispatch/post.js b/packages/server/services/ems/routes/dispatch/post.js
new file mode 100644
index 00000000..92fa9023
--- /dev/null
+++ b/packages/server/services/ems/routes/dispatch/post.js
@@ -0,0 +1,29 @@
+export default {
+ useContext: ["mailTransporter"],
+ fn: async (req, res) => {
+ req.body = await req.urlencoded()
+
+ const { to, subject, body } = req.body
+
+ const mailOptions = {
+ from: "comty_no_reply@ragestudio.net",
+ to: to,
+ subject: subject,
+ text: body
+ }
+
+ console.log(mailOptions)
+
+ console.log(`Sending email to ${to}...`)
+
+ const result = await this.default.contexts.mailTransporter.sendMail(mailOptions)
+
+ console.log("Email sent! >", result)
+
+ return res.json({
+ code: 0,
+ message: "ok",
+ result: result
+ })
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/ems/routes/test/deep/xd/get.js b/packages/server/services/ems/routes/test/deep/xd/get.js
new file mode 100644
index 00000000..420692ef
--- /dev/null
+++ b/packages/server/services/ems/routes/test/deep/xd/get.js
@@ -0,0 +1,5 @@
+export default (req, res) => {
+ return res.json({
+ message: "Hi! from the deeps."
+ })
+}
\ No newline at end of file
diff --git a/packages/server/services/ems/routes/test/get.js b/packages/server/services/ems/routes/test/get.js
new file mode 100644
index 00000000..3c5e2c2a
--- /dev/null
+++ b/packages/server/services/ems/routes/test/get.js
@@ -0,0 +1,5 @@
+export default async (req, res) => {
+ return res.json({
+ msg: "HI!!"
+ })
+}
\ No newline at end of file
diff --git a/packages/file_server/src/controllers/stream/index.js b/packages/server/services/files/controllers/stream/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/controllers/stream/index.js
rename to packages/server/services/files/controllers/stream/index.js
diff --git a/packages/file_server/src/controllers/stream/routes/get/*.js b/packages/server/services/files/controllers/stream/routes/get/*.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/controllers/stream/routes/get/*.js
rename to packages/server/services/files/controllers/stream/routes/get/*.js
diff --git a/packages/file_server/src/controllers/upload/index.js b/packages/server/services/files/controllers/upload/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/controllers/upload/index.js
rename to packages/server/services/files/controllers/upload/index.js
diff --git a/packages/file_server/src/controllers/upload/routes/post/chunk.js b/packages/server/services/files/controllers/upload/routes/post/chunk.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/controllers/upload/routes/post/chunk.js
rename to packages/server/services/files/controllers/upload/routes/post/chunk.js
diff --git a/packages/file_server/src/api.js b/packages/server/services/files/file.service.js
old mode 100644
new mode 100755
similarity index 99%
rename from packages/file_server/src/api.js
rename to packages/server/services/files/file.service.js
index 1f229a87..da82cabd
--- a/packages/file_server/src/api.js
+++ b/packages/server/services/files/file.service.js
@@ -1,5 +1,7 @@
import fs from "fs"
import path from "path"
+import cors from "cors"
+import express from "express"
import B2 from "backblaze-b2"
@@ -7,10 +9,8 @@ import RedisClient from "@shared-classes/RedisClient"
import StorageClient from "@shared-classes/StorageClient"
import CacheService from "@shared-classes/CacheService"
import ComtyClient from "@shared-classes/ComtyClient"
-import cors from "cors"
-import express from "express"
-import pkg from "../package.json"
+import pkg from "./package.json"
global.DEFAULT_HEADERS = {
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept, Authorization, provider-type, Provider-Type",
@@ -183,4 +183,6 @@ export default class FileServerAPI {
// log server started
console.log(`đ Server started ready on \n\t - http://${this.listenIp}:${this.listenPort} \n\t - Tooks ${elapsedTimeInMs}ms`)
}
-}
\ No newline at end of file
+}
+
+Boot(FileServerAPI)
\ No newline at end of file
diff --git a/packages/file_server/src/middlewares/withAuth/index.js b/packages/server/services/files/middlewares/withAuth/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/middlewares/withAuth/index.js
rename to packages/server/services/files/middlewares/withAuth/index.js
diff --git a/packages/file_server/src/middlewares/withOptionalAuth/index.js b/packages/server/services/files/middlewares/withOptionalAuth/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/middlewares/withOptionalAuth/index.js
rename to packages/server/services/files/middlewares/withOptionalAuth/index.js
diff --git a/packages/file_server/src/middlewares/withWsAuth.js b/packages/server/services/files/middlewares/withWsAuth.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/middlewares/withWsAuth.js
rename to packages/server/services/files/middlewares/withWsAuth.js
diff --git a/packages/server/services/files/package.json b/packages/server/services/files/package.json
new file mode 100755
index 00000000..5748e152
--- /dev/null
+++ b/packages/server/services/files/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "files",
+ "version": "0.60.2",
+ "license": "MIT",
+ "dependencies": {
+ "@foxify/events": "^2.1.0",
+ "axios": "^1.4.0",
+ "backblaze-b2": "^1.7.0",
+ "bcrypt": "^5.1.0",
+ "busboy": "^1.6.0",
+ "comty.js": "^0.58.2",
+ "connect-mongo": "^4.6.0",
+ "content-range": "^2.0.2",
+ "cors": "^2.8.5",
+ "dotenv": "^16.0.3",
+ "express": "^4.18.2",
+ "fluent-ffmpeg": "^2.1.2",
+ "jsonwebtoken": "^9.0.0",
+ "linebridge": "0.15.12",
+ "luxon": "^3.0.4",
+ "merge-files": "^0.1.2",
+ "mime-types": "^2.1.35",
+ "sharp": "^0.33.2",
+ "minio": "^7.0.32",
+ "moment": "^2.29.4",
+ "moment-timezone": "^0.5.40",
+ "mongoose": "^6.9.0",
+ "morgan": "^1.10.0",
+ "normalize-url": "^8.0.0",
+ "p-map": "4.0.0",
+ "p-queue": "^7.3.4",
+ "redis": "^4.6.6",
+ "split-chunk-merge": "^1.0.0"
+ }
+}
\ No newline at end of file
diff --git a/packages/file_server/src/services/post-process/audio/index.js b/packages/server/services/files/services/post-process/audio/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/services/post-process/audio/index.js
rename to packages/server/services/files/services/post-process/audio/index.js
diff --git a/packages/file_server/src/services/post-process/image/index.js b/packages/server/services/files/services/post-process/image/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/services/post-process/image/index.js
rename to packages/server/services/files/services/post-process/image/index.js
diff --git a/packages/file_server/src/services/post-process/index.js b/packages/server/services/files/services/post-process/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/services/post-process/index.js
rename to packages/server/services/files/services/post-process/index.js
diff --git a/packages/file_server/src/services/post-process/video/index.js b/packages/server/services/files/services/post-process/video/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/services/post-process/video/index.js
rename to packages/server/services/files/services/post-process/video/index.js
diff --git a/packages/file_server/src/services/videoTranscode/index.js b/packages/server/services/files/services/videoTranscode/index.js
similarity index 100%
rename from packages/file_server/src/services/videoTranscode/index.js
rename to packages/server/services/files/services/videoTranscode/index.js
diff --git a/packages/file_server/src/useMiddlewares/useCors/index.js b/packages/server/services/files/useMiddlewares/useCors/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/useMiddlewares/useCors/index.js
rename to packages/server/services/files/useMiddlewares/useCors/index.js
diff --git a/packages/file_server/src/useMiddlewares/useLogger/index.js b/packages/server/services/files/useMiddlewares/useLogger/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/useMiddlewares/useLogger/index.js
rename to packages/server/services/files/useMiddlewares/useLogger/index.js
diff --git a/packages/file_server/src/utils/createRoutesFromDirectory/index.js b/packages/server/services/files/utils/createRoutesFromDirectory/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/utils/createRoutesFromDirectory/index.js
rename to packages/server/services/files/utils/createRoutesFromDirectory/index.js
diff --git a/packages/file_server/src/utils/getMiddlewares/index.js b/packages/server/services/files/utils/getMiddlewares/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/utils/getMiddlewares/index.js
rename to packages/server/services/files/utils/getMiddlewares/index.js
diff --git a/packages/file_server/src/utils/replaceImportsWithRemoteURL/index.js b/packages/server/services/files/utils/replaceImportsWithRemoteURL/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/utils/replaceImportsWithRemoteURL/index.js
rename to packages/server/services/files/utils/replaceImportsWithRemoteURL/index.js
diff --git a/packages/file_server/src/utils/resolveUrl/index.js b/packages/server/services/files/utils/resolveUrl/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/utils/resolveUrl/index.js
rename to packages/server/services/files/utils/resolveUrl/index.js
diff --git a/packages/file_server/src/utils/syncDirToRemote/index.js b/packages/server/services/files/utils/syncDirToRemote/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/file_server/src/utils/syncDirToRemote/index.js
rename to packages/server/services/files/utils/syncDirToRemote/index.js
diff --git a/packages/server/src/controllers/AdminController/endpoints/accounts_statistics.js b/packages/server/services/main/controllers/AdminController/endpoints/accounts_statistics.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/AdminController/endpoints/accounts_statistics.js
rename to packages/server/services/main/controllers/AdminController/endpoints/accounts_statistics.js
diff --git a/packages/server/src/controllers/AdminController/endpoints/delete_featured_wallpaper.js b/packages/server/services/main/controllers/AdminController/endpoints/delete_featured_wallpaper.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/AdminController/endpoints/delete_featured_wallpaper.js
rename to packages/server/services/main/controllers/AdminController/endpoints/delete_featured_wallpaper.js
diff --git a/packages/server/src/controllers/AdminController/endpoints/featured_wallpaper.js b/packages/server/services/main/controllers/AdminController/endpoints/featured_wallpaper.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/AdminController/endpoints/featured_wallpaper.js
rename to packages/server/services/main/controllers/AdminController/endpoints/featured_wallpaper.js
diff --git a/packages/server/src/controllers/AdminController/endpoints/resetPassword.js b/packages/server/services/main/controllers/AdminController/endpoints/resetPassword.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/AdminController/endpoints/resetPassword.js
rename to packages/server/services/main/controllers/AdminController/endpoints/resetPassword.js
diff --git a/packages/server/src/controllers/AdminController/endpoints/update_user_data.js b/packages/server/services/main/controllers/AdminController/endpoints/update_user_data.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/AdminController/endpoints/update_user_data.js
rename to packages/server/services/main/controllers/AdminController/endpoints/update_user_data.js
diff --git a/packages/server/src/controllers/AdminController/index.js b/packages/server/services/main/controllers/AdminController/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/AdminController/index.js
rename to packages/server/services/main/controllers/AdminController/index.js
diff --git a/packages/server/src/controllers/AuthController/endpoints/dataValidation.js b/packages/server/services/main/controllers/AuthController/endpoints/dataValidation.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/AuthController/endpoints/dataValidation.js
rename to packages/server/services/main/controllers/AuthController/endpoints/dataValidation.js
diff --git a/packages/server/services/main/controllers/AuthController/endpoints/otpSend.js b/packages/server/services/main/controllers/AuthController/endpoints/otpSend.js
new file mode 100644
index 00000000..c7bbefec
--- /dev/null
+++ b/packages/server/services/main/controllers/AuthController/endpoints/otpSend.js
@@ -0,0 +1,7 @@
+export default {
+ method: "GET",
+ route: "/otp/verify",
+ fn: async function (req, res) {
+
+ }
+}
\ No newline at end of file
diff --git a/packages/server/src/controllers/AuthController/endpoints/userLogin.js b/packages/server/services/main/controllers/AuthController/endpoints/userLogin.js
similarity index 100%
rename from packages/server/src/controllers/AuthController/endpoints/userLogin.js
rename to packages/server/services/main/controllers/AuthController/endpoints/userLogin.js
diff --git a/packages/server/src/controllers/AuthController/endpoints/userLogout.js b/packages/server/services/main/controllers/AuthController/endpoints/userLogout.js
similarity index 100%
rename from packages/server/src/controllers/AuthController/endpoints/userLogout.js
rename to packages/server/services/main/controllers/AuthController/endpoints/userLogout.js
diff --git a/packages/server/src/controllers/AuthController/endpoints/userRegister.js b/packages/server/services/main/controllers/AuthController/endpoints/userRegister.js
similarity index 95%
rename from packages/server/src/controllers/AuthController/endpoints/userRegister.js
rename to packages/server/services/main/controllers/AuthController/endpoints/userRegister.js
index 071891b1..2d9344bb 100755
--- a/packages/server/src/controllers/AuthController/endpoints/userRegister.js
+++ b/packages/server/services/main/controllers/AuthController/endpoints/userRegister.js
@@ -10,6 +10,8 @@ export default {
select: ["username", "email", "password", "fullName"],
}, async (req, res) => {
const result = await createUser(req.selection).catch((err) => {
+ console.error(err)
+
res.status(500).json({
message: `Error creating user > ${err.message}`,
})
diff --git a/packages/server/src/controllers/AuthController/index.js b/packages/server/services/main/controllers/AuthController/index.js
similarity index 100%
rename from packages/server/src/controllers/AuthController/index.js
rename to packages/server/services/main/controllers/AuthController/index.js
diff --git a/packages/server/src/controllers/AuthController/methods/createUser.js b/packages/server/services/main/controllers/AuthController/methods/createUser.js
similarity index 88%
rename from packages/server/src/controllers/AuthController/methods/createUser.js
rename to packages/server/services/main/controllers/AuthController/methods/createUser.js
index f4a963e9..3a43c0af 100755
--- a/packages/server/src/controllers/AuthController/methods/createUser.js
+++ b/packages/server/services/main/controllers/AuthController/methods/createUser.js
@@ -4,14 +4,6 @@ import bcrypt from "bcrypt"
export default async function (payload) {
let { username, password, email, fullName, roles, avatar } = payload
- if (username.length < 3) {
- throw new Error("Username must be at least 3 characters")
- }
-
- if (username.length > 64) {
- throw new Error("Username cannot be longer than 64 characters")
- }
-
// if username has capital letters, throw error
if (username !== username.toLowerCase()) {
throw new Error("Username must be lowercase")
diff --git a/packages/server/src/controllers/AutoUpdate/index.js b/packages/server/services/main/controllers/AutoUpdate/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/AutoUpdate/index.js
rename to packages/server/services/main/controllers/AutoUpdate/index.js
diff --git a/packages/server/src/controllers/BadgesController/endpoints/deleteBadge.js b/packages/server/services/main/controllers/BadgesController/endpoints/deleteBadge.js
similarity index 100%
rename from packages/server/src/controllers/BadgesController/endpoints/deleteBadge.js
rename to packages/server/services/main/controllers/BadgesController/endpoints/deleteBadge.js
diff --git a/packages/server/src/controllers/BadgesController/endpoints/getBadges.js b/packages/server/services/main/controllers/BadgesController/endpoints/getBadges.js
similarity index 100%
rename from packages/server/src/controllers/BadgesController/endpoints/getBadges.js
rename to packages/server/services/main/controllers/BadgesController/endpoints/getBadges.js
diff --git a/packages/server/src/controllers/BadgesController/endpoints/getUserBadges.js b/packages/server/services/main/controllers/BadgesController/endpoints/getUserBadges.js
similarity index 100%
rename from packages/server/src/controllers/BadgesController/endpoints/getUserBadges.js
rename to packages/server/services/main/controllers/BadgesController/endpoints/getUserBadges.js
diff --git a/packages/server/src/controllers/BadgesController/endpoints/giveToUser.js b/packages/server/services/main/controllers/BadgesController/endpoints/giveToUser.js
similarity index 100%
rename from packages/server/src/controllers/BadgesController/endpoints/giveToUser.js
rename to packages/server/services/main/controllers/BadgesController/endpoints/giveToUser.js
diff --git a/packages/server/src/controllers/BadgesController/endpoints/putBadge.js b/packages/server/services/main/controllers/BadgesController/endpoints/putBadge.js
similarity index 100%
rename from packages/server/src/controllers/BadgesController/endpoints/putBadge.js
rename to packages/server/services/main/controllers/BadgesController/endpoints/putBadge.js
diff --git a/packages/server/src/controllers/BadgesController/endpoints/removeToUser.js b/packages/server/services/main/controllers/BadgesController/endpoints/removeToUser.js
similarity index 100%
rename from packages/server/src/controllers/BadgesController/endpoints/removeToUser.js
rename to packages/server/services/main/controllers/BadgesController/endpoints/removeToUser.js
diff --git a/packages/server/src/controllers/BadgesController/index.js b/packages/server/services/main/controllers/BadgesController/index.js
similarity index 100%
rename from packages/server/src/controllers/BadgesController/index.js
rename to packages/server/services/main/controllers/BadgesController/index.js
diff --git a/packages/server/src/controllers/CommentsController/endpoints/createPostComment.js b/packages/server/services/main/controllers/CommentsController/endpoints/createPostComment.js
similarity index 100%
rename from packages/server/src/controllers/CommentsController/endpoints/createPostComment.js
rename to packages/server/services/main/controllers/CommentsController/endpoints/createPostComment.js
diff --git a/packages/server/src/controllers/CommentsController/endpoints/deletePostComment.js b/packages/server/services/main/controllers/CommentsController/endpoints/deletePostComment.js
similarity index 100%
rename from packages/server/src/controllers/CommentsController/endpoints/deletePostComment.js
rename to packages/server/services/main/controllers/CommentsController/endpoints/deletePostComment.js
diff --git a/packages/server/src/controllers/CommentsController/endpoints/getPostComments.js b/packages/server/services/main/controllers/CommentsController/endpoints/getPostComments.js
similarity index 100%
rename from packages/server/src/controllers/CommentsController/endpoints/getPostComments.js
rename to packages/server/services/main/controllers/CommentsController/endpoints/getPostComments.js
diff --git a/packages/server/src/controllers/CommentsController/index.js b/packages/server/services/main/controllers/CommentsController/index.js
similarity index 100%
rename from packages/server/src/controllers/CommentsController/index.js
rename to packages/server/services/main/controllers/CommentsController/index.js
diff --git a/packages/server/src/controllers/CommentsController/services/deleteComment.js b/packages/server/services/main/controllers/CommentsController/services/deleteComment.js
similarity index 100%
rename from packages/server/src/controllers/CommentsController/services/deleteComment.js
rename to packages/server/services/main/controllers/CommentsController/services/deleteComment.js
diff --git a/packages/server/src/controllers/CommentsController/services/getComments.js b/packages/server/services/main/controllers/CommentsController/services/getComments.js
similarity index 100%
rename from packages/server/src/controllers/CommentsController/services/getComments.js
rename to packages/server/services/main/controllers/CommentsController/services/getComments.js
diff --git a/packages/server/src/controllers/CommentsController/services/newComment.js b/packages/server/services/main/controllers/CommentsController/services/newComment.js
similarity index 100%
rename from packages/server/src/controllers/CommentsController/services/newComment.js
rename to packages/server/services/main/controllers/CommentsController/services/newComment.js
diff --git a/packages/server/src/controllers/FeaturedEventsController/index.js b/packages/server/services/main/controllers/FeaturedEventsController/index.js
similarity index 100%
rename from packages/server/src/controllers/FeaturedEventsController/index.js
rename to packages/server/services/main/controllers/FeaturedEventsController/index.js
diff --git a/packages/server/src/controllers/FeaturedEventsController/services/createFeaturedEvent.js b/packages/server/services/main/controllers/FeaturedEventsController/services/createFeaturedEvent.js
similarity index 100%
rename from packages/server/src/controllers/FeaturedEventsController/services/createFeaturedEvent.js
rename to packages/server/services/main/controllers/FeaturedEventsController/services/createFeaturedEvent.js
diff --git a/packages/server/src/controllers/FeedController/index.js b/packages/server/services/main/controllers/FeedController/index.js
similarity index 100%
rename from packages/server/src/controllers/FeedController/index.js
rename to packages/server/services/main/controllers/FeedController/index.js
diff --git a/packages/server/src/controllers/FeedController/services/getGlobalReleases.js b/packages/server/services/main/controllers/FeedController/services/getGlobalReleases.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/FeedController/services/getGlobalReleases.js
rename to packages/server/services/main/controllers/FeedController/services/getGlobalReleases.js
diff --git a/packages/server/src/controllers/FeedController/services/getPlaylistsFromFollowing.js b/packages/server/services/main/controllers/FeedController/services/getPlaylistsFromFollowing.js
similarity index 100%
rename from packages/server/src/controllers/FeedController/services/getPlaylistsFromFollowing.js
rename to packages/server/services/main/controllers/FeedController/services/getPlaylistsFromFollowing.js
diff --git a/packages/server/src/controllers/FeedController/services/getPosts.js b/packages/server/services/main/controllers/FeedController/services/getPosts.js
similarity index 100%
rename from packages/server/src/controllers/FeedController/services/getPosts.js
rename to packages/server/services/main/controllers/FeedController/services/getPosts.js
diff --git a/packages/server/src/controllers/FeedController/services/getReleasesFromFollowing.js b/packages/server/services/main/controllers/FeedController/services/getReleasesFromFollowing.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/FeedController/services/getReleasesFromFollowing.js
rename to packages/server/services/main/controllers/FeedController/services/getReleasesFromFollowing.js
diff --git a/packages/server/src/controllers/FollowController/endpoints/getFollowStatus.js b/packages/server/services/main/controllers/FollowController/endpoints/getFollowStatus.js
similarity index 100%
rename from packages/server/src/controllers/FollowController/endpoints/getFollowStatus.js
rename to packages/server/services/main/controllers/FollowController/endpoints/getFollowStatus.js
diff --git a/packages/server/src/controllers/FollowController/endpoints/getUserFollowers.js b/packages/server/services/main/controllers/FollowController/endpoints/getUserFollowers.js
similarity index 100%
rename from packages/server/src/controllers/FollowController/endpoints/getUserFollowers.js
rename to packages/server/services/main/controllers/FollowController/endpoints/getUserFollowers.js
diff --git a/packages/server/src/controllers/FollowController/endpoints/toggleFollow.js b/packages/server/services/main/controllers/FollowController/endpoints/toggleFollow.js
similarity index 100%
rename from packages/server/src/controllers/FollowController/endpoints/toggleFollow.js
rename to packages/server/services/main/controllers/FollowController/endpoints/toggleFollow.js
diff --git a/packages/server/src/controllers/FollowController/index.js b/packages/server/services/main/controllers/FollowController/index.js
similarity index 100%
rename from packages/server/src/controllers/FollowController/index.js
rename to packages/server/services/main/controllers/FollowController/index.js
diff --git a/packages/server/src/controllers/FollowController/services/followUser.js b/packages/server/services/main/controllers/FollowController/services/followUser.js
similarity index 100%
rename from packages/server/src/controllers/FollowController/services/followUser.js
rename to packages/server/services/main/controllers/FollowController/services/followUser.js
diff --git a/packages/server/src/controllers/FollowController/services/unfollowUser.js b/packages/server/services/main/controllers/FollowController/services/unfollowUser.js
similarity index 100%
rename from packages/server/src/controllers/FollowController/services/unfollowUser.js
rename to packages/server/services/main/controllers/FollowController/services/unfollowUser.js
diff --git a/packages/server/src/controllers/ModerationController/endpoints/modifyPostLikes.js b/packages/server/services/main/controllers/ModerationController/endpoints/modifyPostLikes.js
similarity index 100%
rename from packages/server/src/controllers/ModerationController/endpoints/modifyPostLikes.js
rename to packages/server/services/main/controllers/ModerationController/endpoints/modifyPostLikes.js
diff --git a/packages/server/src/controllers/ModerationController/index.js b/packages/server/services/main/controllers/ModerationController/index.js
similarity index 100%
rename from packages/server/src/controllers/ModerationController/index.js
rename to packages/server/services/main/controllers/ModerationController/index.js
diff --git a/packages/server/src/controllers/NFCController/endpoints/getExecution.js b/packages/server/services/main/controllers/NFCController/endpoints/getExecution.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/NFCController/endpoints/getExecution.js
rename to packages/server/services/main/controllers/NFCController/endpoints/getExecution.js
diff --git a/packages/server/src/controllers/NFCController/endpoints/getTagById.js b/packages/server/services/main/controllers/NFCController/endpoints/getTagById.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/NFCController/endpoints/getTagById.js
rename to packages/server/services/main/controllers/NFCController/endpoints/getTagById.js
diff --git a/packages/server/src/controllers/NFCController/endpoints/getTagBySerial.js b/packages/server/services/main/controllers/NFCController/endpoints/getTagBySerial.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/NFCController/endpoints/getTagBySerial.js
rename to packages/server/services/main/controllers/NFCController/endpoints/getTagBySerial.js
diff --git a/packages/server/src/controllers/NFCController/endpoints/getTags.js b/packages/server/services/main/controllers/NFCController/endpoints/getTags.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/NFCController/endpoints/getTags.js
rename to packages/server/services/main/controllers/NFCController/endpoints/getTags.js
diff --git a/packages/server/src/controllers/NFCController/endpoints/registerTag.js b/packages/server/services/main/controllers/NFCController/endpoints/registerTag.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/NFCController/endpoints/registerTag.js
rename to packages/server/services/main/controllers/NFCController/endpoints/registerTag.js
diff --git a/packages/server/src/controllers/NFCController/index.js b/packages/server/services/main/controllers/NFCController/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/NFCController/index.js
rename to packages/server/services/main/controllers/NFCController/index.js
diff --git a/packages/server/src/controllers/PostsController/endpoints/createPost.js b/packages/server/services/main/controllers/PostsController/endpoints/createPost.js
similarity index 78%
rename from packages/server/src/controllers/PostsController/endpoints/createPost.js
rename to packages/server/services/main/controllers/PostsController/endpoints/createPost.js
index 2c227e9f..4370f580 100755
--- a/packages/server/src/controllers/PostsController/endpoints/createPost.js
+++ b/packages/server/services/main/controllers/PostsController/endpoints/createPost.js
@@ -7,15 +7,14 @@ export default {
middlewares: ["withAuthentication"],
fn: Schematized({
required: ["timestamp"],
- select: ["message", "attachments", "type", "data", "timestamp"],
+ select: ["message", "attachments", "timestamp", "reply_to"],
}, async (req, res) => {
const post = await CreatePost({
user_id: req.user._id.toString(),
message: req.selection.message,
timestamp: req.selection.timestamp,
attachments: req.selection.attachments,
- type: req.selection.type,
- data: req.selection.data,
+ reply_to: req.selection.reply_to,
})
return res.json(post)
diff --git a/packages/server/src/controllers/PostsController/endpoints/deletePost.js b/packages/server/services/main/controllers/PostsController/endpoints/deletePost.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/endpoints/deletePost.js
rename to packages/server/services/main/controllers/PostsController/endpoints/deletePost.js
diff --git a/packages/server/src/controllers/PostsController/endpoints/explorePosts.js b/packages/server/services/main/controllers/PostsController/endpoints/explorePosts.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/endpoints/explorePosts.js
rename to packages/server/services/main/controllers/PostsController/endpoints/explorePosts.js
diff --git a/packages/server/src/controllers/PostsController/endpoints/getPostData.js b/packages/server/services/main/controllers/PostsController/endpoints/getPostData.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/endpoints/getPostData.js
rename to packages/server/services/main/controllers/PostsController/endpoints/getPostData.js
diff --git a/packages/server/src/controllers/PostsController/endpoints/getPostFromUser.js b/packages/server/services/main/controllers/PostsController/endpoints/getPostFromUser.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/endpoints/getPostFromUser.js
rename to packages/server/services/main/controllers/PostsController/endpoints/getPostFromUser.js
diff --git a/packages/server/services/main/controllers/PostsController/endpoints/getPostReplies.js b/packages/server/services/main/controllers/PostsController/endpoints/getPostReplies.js
new file mode 100755
index 00000000..05fa5cca
--- /dev/null
+++ b/packages/server/services/main/controllers/PostsController/endpoints/getPostReplies.js
@@ -0,0 +1,29 @@
+import { Post } from "@shared-classes/DbModels"
+import fullfillPostsData from "@utils/fullfillPostsData"
+
+export default {
+ method: "GET",
+ route: "/post/:post_id/replies",
+ middlewares: ["withOptionalAuthentication"],
+ fn: async (req, res) => {
+ const {
+ limit = 50,
+ offset = 0,
+ } = req.query
+
+ let replies = await Post.find({
+ reply_to: req.params.post_id,
+ })
+ .skip(offset)
+ .limit(limit)
+ .sort({ created_at: -1 })
+
+ replies = await fullfillPostsData({
+ posts: replies,
+ for_user_id: req.user?._id.toString(),
+ skip: offset,
+ })
+
+ return res.json(replies)
+ }
+}
\ No newline at end of file
diff --git a/packages/server/src/controllers/PostsController/endpoints/savedPosts.js b/packages/server/services/main/controllers/PostsController/endpoints/savedPosts.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/endpoints/savedPosts.js
rename to packages/server/services/main/controllers/PostsController/endpoints/savedPosts.js
diff --git a/packages/server/src/controllers/PostsController/endpoints/toogleLike.js b/packages/server/services/main/controllers/PostsController/endpoints/toogleLike.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/endpoints/toogleLike.js
rename to packages/server/services/main/controllers/PostsController/endpoints/toogleLike.js
diff --git a/packages/server/src/controllers/PostsController/endpoints/toogleSave.js b/packages/server/services/main/controllers/PostsController/endpoints/toogleSave.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/endpoints/toogleSave.js
rename to packages/server/services/main/controllers/PostsController/endpoints/toogleSave.js
diff --git a/packages/server/src/controllers/PostsController/index.js b/packages/server/services/main/controllers/PostsController/index.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/index.js
rename to packages/server/services/main/controllers/PostsController/index.js
diff --git a/packages/server/src/controllers/PostsController/services/createPost.js b/packages/server/services/main/controllers/PostsController/services/createPost.js
similarity index 92%
rename from packages/server/src/controllers/PostsController/services/createPost.js
rename to packages/server/services/main/controllers/PostsController/services/createPost.js
index 13ea2aec..c806c225 100755
--- a/packages/server/src/controllers/PostsController/services/createPost.js
+++ b/packages/server/services/main/controllers/PostsController/services/createPost.js
@@ -5,7 +5,7 @@ import getPostData from "./getPostData"
import flagNsfwByAttachments from "./flagNsfwByAttachments"
export default async (payload) => {
- let { user_id, message, attachments, type, data, timestamp } = payload
+ let { user_id, message, attachments, timestamp, reply_to } = payload
// check if is a Array and have at least one element
const isAttachmentsValid = Array.isArray(attachments) && attachments.length > 0
@@ -22,13 +22,12 @@ export default async (payload) => {
const created_at = momentTimezone.tz(Date.now(), current_timezone).format()
const post = new Post({
- type: type,
created_at: created_at,
user_id: typeof user_id === "object" ? user_id.toString() : user_id,
message: message,
attachments: attachments ?? [],
timestamp: timestamp,
- data: data,
+ reply_to: reply_to,
flags: [],
})
diff --git a/packages/server/src/controllers/PostsController/services/deletePost.js b/packages/server/services/main/controllers/PostsController/services/deletePost.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/services/deletePost.js
rename to packages/server/services/main/controllers/PostsController/services/deletePost.js
diff --git a/packages/server/src/controllers/PostsController/services/flagNsfwByAttachments.js b/packages/server/services/main/controllers/PostsController/services/flagNsfwByAttachments.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/services/flagNsfwByAttachments.js
rename to packages/server/services/main/controllers/PostsController/services/flagNsfwByAttachments.js
diff --git a/packages/server/src/controllers/PostsController/services/getPostData.js b/packages/server/services/main/controllers/PostsController/services/getPostData.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/services/getPostData.js
rename to packages/server/services/main/controllers/PostsController/services/getPostData.js
diff --git a/packages/server/src/controllers/PostsController/services/index.js b/packages/server/services/main/controllers/PostsController/services/index.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/services/index.js
rename to packages/server/services/main/controllers/PostsController/services/index.js
diff --git a/packages/server/src/controllers/PostsController/services/modifyPostData.js b/packages/server/services/main/controllers/PostsController/services/modifyPostData.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/services/modifyPostData.js
rename to packages/server/services/main/controllers/PostsController/services/modifyPostData.js
diff --git a/packages/server/src/controllers/PostsController/services/toggleLike.js b/packages/server/services/main/controllers/PostsController/services/toggleLike.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/services/toggleLike.js
rename to packages/server/services/main/controllers/PostsController/services/toggleLike.js
diff --git a/packages/server/src/controllers/PostsController/services/togglePostSave.js b/packages/server/services/main/controllers/PostsController/services/togglePostSave.js
similarity index 100%
rename from packages/server/src/controllers/PostsController/services/togglePostSave.js
rename to packages/server/services/main/controllers/PostsController/services/togglePostSave.js
diff --git a/packages/server/src/controllers/PublicController/endpoints/featuredWallpapers.js b/packages/server/services/main/controllers/PublicController/endpoints/featuredWallpapers.js
similarity index 100%
rename from packages/server/src/controllers/PublicController/endpoints/featuredWallpapers.js
rename to packages/server/services/main/controllers/PublicController/endpoints/featuredWallpapers.js
diff --git a/packages/server/src/controllers/PublicController/endpoints/getReleasesNotes.js b/packages/server/services/main/controllers/PublicController/endpoints/getReleasesNotes.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/PublicController/endpoints/getReleasesNotes.js
rename to packages/server/services/main/controllers/PublicController/endpoints/getReleasesNotes.js
diff --git a/packages/server/src/controllers/PublicController/endpoints/globalServerLimits.js b/packages/server/services/main/controllers/PublicController/endpoints/globalServerLimits.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/PublicController/endpoints/globalServerLimits.js
rename to packages/server/services/main/controllers/PublicController/endpoints/globalServerLimits.js
diff --git a/packages/server/src/controllers/PublicController/endpoints/ping.js b/packages/server/services/main/controllers/PublicController/endpoints/ping.js
similarity index 100%
rename from packages/server/src/controllers/PublicController/endpoints/ping.js
rename to packages/server/services/main/controllers/PublicController/endpoints/ping.js
diff --git a/packages/server/src/controllers/PublicController/endpoints/postingPolicy.js b/packages/server/services/main/controllers/PublicController/endpoints/postingPolicy.js
similarity index 100%
rename from packages/server/src/controllers/PublicController/endpoints/postingPolicy.js
rename to packages/server/services/main/controllers/PublicController/endpoints/postingPolicy.js
diff --git a/packages/server/src/controllers/PublicController/endpoints/serverHealth.js b/packages/server/services/main/controllers/PublicController/endpoints/serverHealth.js
similarity index 100%
rename from packages/server/src/controllers/PublicController/endpoints/serverHealth.js
rename to packages/server/services/main/controllers/PublicController/endpoints/serverHealth.js
diff --git a/packages/server/services/main/controllers/PublicController/incidentPrediction.js b/packages/server/services/main/controllers/PublicController/incidentPrediction.js
new file mode 100755
index 00000000..3acdff5a
--- /dev/null
+++ b/packages/server/services/main/controllers/PublicController/incidentPrediction.js
@@ -0,0 +1,27 @@
+// import { Schematized } from "../../../lib"
+// import IndecentPrediction from "../../../utils/indecent-prediction"
+
+// export default {
+// method: "GET",
+// route: "/indecent_prediction",
+// fn: Schematized({
+// select: ["url"],
+// required: ["url"],
+// }, async (req, res) => {
+// const { url } = req.selection
+
+// const predictions = await IndecentPrediction({
+// url,
+// }).catch((err) => {
+// res.status(500).json({
+// error: err.message,
+// })
+
+// return null
+// })
+
+// if (predictions) {
+// return res.json(predictions)
+// }
+// })
+// }
\ No newline at end of file
diff --git a/packages/server/src/controllers/PublicController/index.js b/packages/server/services/main/controllers/PublicController/index.js
similarity index 54%
rename from packages/server/src/controllers/PublicController/index.js
rename to packages/server/services/main/controllers/PublicController/index.js
index b40895a8..3ff1e414 100755
--- a/packages/server/src/controllers/PublicController/index.js
+++ b/packages/server/services/main/controllers/PublicController/index.js
@@ -1,5 +1,5 @@
-import { Controller } from "linebridge/dist/server"
-import generateEndpointsFromDir from "linebridge/dist/server/lib/generateEndpointsFromDir"
+import { Controller } from "linebridge/src/server"
+import generateEndpointsFromDir from "linebridge/src/server/lib/generateEndpointsFromDir"
export default class PublicController extends Controller {
static refName = "PublicController"
diff --git a/packages/server/src/controllers/RolesController/index.js b/packages/server/services/main/controllers/RolesController/index.js
similarity index 100%
rename from packages/server/src/controllers/RolesController/index.js
rename to packages/server/services/main/controllers/RolesController/index.js
diff --git a/packages/server/src/controllers/SearchController/endpoints/getQuickSearch.js b/packages/server/services/main/controllers/SearchController/endpoints/getQuickSearch.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/SearchController/endpoints/getQuickSearch.js
rename to packages/server/services/main/controllers/SearchController/endpoints/getQuickSearch.js
diff --git a/packages/server/src/controllers/SearchController/endpoints/getSearch.js b/packages/server/services/main/controllers/SearchController/endpoints/getSearch.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/SearchController/endpoints/getSearch.js
rename to packages/server/services/main/controllers/SearchController/endpoints/getSearch.js
diff --git a/packages/server/src/controllers/SearchController/index.js b/packages/server/services/main/controllers/SearchController/index.js
similarity index 100%
rename from packages/server/src/controllers/SearchController/index.js
rename to packages/server/services/main/controllers/SearchController/index.js
diff --git a/packages/server/src/controllers/SessionController/endpoints/deleteAllSelfSessions.js b/packages/server/services/main/controllers/SessionController/endpoints/deleteAllSelfSessions.js
similarity index 100%
rename from packages/server/src/controllers/SessionController/endpoints/deleteAllSelfSessions.js
rename to packages/server/services/main/controllers/SessionController/endpoints/deleteAllSelfSessions.js
diff --git a/packages/server/src/controllers/SessionController/endpoints/deleteCurrentSession.js b/packages/server/services/main/controllers/SessionController/endpoints/deleteCurrentSession.js
similarity index 100%
rename from packages/server/src/controllers/SessionController/endpoints/deleteCurrentSession.js
rename to packages/server/services/main/controllers/SessionController/endpoints/deleteCurrentSession.js
diff --git a/packages/server/src/controllers/SessionController/endpoints/getCurrentSession.js b/packages/server/services/main/controllers/SessionController/endpoints/getCurrentSession.js
similarity index 100%
rename from packages/server/src/controllers/SessionController/endpoints/getCurrentSession.js
rename to packages/server/services/main/controllers/SessionController/endpoints/getCurrentSession.js
diff --git a/packages/server/src/controllers/SessionController/endpoints/getSessions.js b/packages/server/services/main/controllers/SessionController/endpoints/getSessions.js
similarity index 100%
rename from packages/server/src/controllers/SessionController/endpoints/getSessions.js
rename to packages/server/services/main/controllers/SessionController/endpoints/getSessions.js
diff --git a/packages/server/src/controllers/SessionController/endpoints/regenerateSessionToken.js b/packages/server/services/main/controllers/SessionController/endpoints/regenerateSessionToken.js
similarity index 100%
rename from packages/server/src/controllers/SessionController/endpoints/regenerateSessionToken.js
rename to packages/server/services/main/controllers/SessionController/endpoints/regenerateSessionToken.js
diff --git a/packages/server/src/controllers/SessionController/endpoints/validateSession.js b/packages/server/services/main/controllers/SessionController/endpoints/validateSession.js
similarity index 100%
rename from packages/server/src/controllers/SessionController/endpoints/validateSession.js
rename to packages/server/services/main/controllers/SessionController/endpoints/validateSession.js
diff --git a/packages/server/src/controllers/SessionController/index.js b/packages/server/services/main/controllers/SessionController/index.js
similarity index 100%
rename from packages/server/src/controllers/SessionController/index.js
rename to packages/server/services/main/controllers/SessionController/index.js
diff --git a/packages/server/src/controllers/StatusController/endpoints/getConnectedFollowedUsers.js b/packages/server/services/main/controllers/StatusController/endpoints/getConnectedFollowedUsers.js
similarity index 100%
rename from packages/server/src/controllers/StatusController/endpoints/getConnectedFollowedUsers.js
rename to packages/server/services/main/controllers/StatusController/endpoints/getConnectedFollowedUsers.js
diff --git a/packages/server/src/controllers/StatusController/index.js b/packages/server/services/main/controllers/StatusController/index.js
similarity index 100%
rename from packages/server/src/controllers/StatusController/index.js
rename to packages/server/services/main/controllers/StatusController/index.js
diff --git a/packages/server/src/controllers/StatusController/services/getConnectedUsersFollowing.js b/packages/server/services/main/controllers/StatusController/services/getConnectedUsersFollowing.js
similarity index 100%
rename from packages/server/src/controllers/StatusController/services/getConnectedUsersFollowing.js
rename to packages/server/services/main/controllers/StatusController/services/getConnectedUsersFollowing.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/deleteStreamingProfile.js b/packages/server/services/main/controllers/StreamingController/endpoints/deleteStreamingProfile.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/deleteStreamingProfile.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/deleteStreamingProfile.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/getProfileFromStreamKey.js b/packages/server/services/main/controllers/StreamingController/endpoints/getProfileFromStreamKey.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/getProfileFromStreamKey.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/getProfileFromStreamKey.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/getProfilesVisibility.js b/packages/server/services/main/controllers/StreamingController/endpoints/getProfilesVisibility.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/getProfilesVisibility.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/getProfilesVisibility.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/getStreamingCategories.js b/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingCategories.js
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/getStreamingCategories.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/getStreamingCategories.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/getStreamingProfiles.js b/packages/server/services/main/controllers/StreamingController/endpoints/getStreamingProfiles.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/getStreamingProfiles.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/getStreamingProfiles.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/getStreams.js b/packages/server/services/main/controllers/StreamingController/endpoints/getStreams.js
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/getStreams.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/getStreams.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/handleStreamPublish.js b/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamPublish.js
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/handleStreamPublish.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/handleStreamPublish.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/handleStreamUnpublish.js b/packages/server/services/main/controllers/StreamingController/endpoints/handleStreamUnpublish.js
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/handleStreamUnpublish.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/handleStreamUnpublish.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/postStreamingProfile.js b/packages/server/services/main/controllers/StreamingController/endpoints/postStreamingProfile.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/postStreamingProfile.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/postStreamingProfile.js
diff --git a/packages/server/src/controllers/StreamingController/endpoints/regenerateStreamingKey.js b/packages/server/services/main/controllers/StreamingController/endpoints/regenerateStreamingKey.js
similarity index 100%
rename from packages/server/src/controllers/StreamingController/endpoints/regenerateStreamingKey.js
rename to packages/server/services/main/controllers/StreamingController/endpoints/regenerateStreamingKey.js
diff --git a/packages/server/src/controllers/StreamingController/index.js b/packages/server/services/main/controllers/StreamingController/index.js
similarity index 100%
rename from packages/server/src/controllers/StreamingController/index.js
rename to packages/server/services/main/controllers/StreamingController/index.js
diff --git a/packages/server/src/controllers/UserController/endpoints/checkEmailAvailable.js b/packages/server/services/main/controllers/UserController/endpoints/checkEmailAvailable.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/checkEmailAvailable.js
rename to packages/server/services/main/controllers/UserController/endpoints/checkEmailAvailable.js
diff --git a/packages/server/src/controllers/UserController/endpoints/checkUsernameAvailable.js b/packages/server/services/main/controllers/UserController/endpoints/checkUsernameAvailable.js
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/checkUsernameAvailable.js
rename to packages/server/services/main/controllers/UserController/endpoints/checkUsernameAvailable.js
diff --git a/packages/server/src/controllers/UserController/endpoints/getConnectedFollowingUsers.js b/packages/server/services/main/controllers/UserController/endpoints/getConnectedFollowingUsers.js
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/getConnectedFollowingUsers.js
rename to packages/server/services/main/controllers/UserController/endpoints/getConnectedFollowingUsers.js
diff --git a/packages/server/src/controllers/UserController/endpoints/getUserData.js b/packages/server/services/main/controllers/UserController/endpoints/getUserData.js
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/getUserData.js
rename to packages/server/services/main/controllers/UserController/endpoints/getUserData.js
diff --git a/packages/server/src/controllers/UserController/endpoints/getUsersData.js b/packages/server/services/main/controllers/UserController/endpoints/getUsersData.js
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/getUsersData.js
rename to packages/server/services/main/controllers/UserController/endpoints/getUsersData.js
diff --git a/packages/server/src/controllers/UserController/endpoints/resolveUserIdFromUsername.js b/packages/server/services/main/controllers/UserController/endpoints/resolveUserIdFromUsername.js
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/resolveUserIdFromUsername.js
rename to packages/server/services/main/controllers/UserController/endpoints/resolveUserIdFromUsername.js
diff --git a/packages/server/src/controllers/UserController/endpoints/selfDeletePublicName.js b/packages/server/services/main/controllers/UserController/endpoints/selfDeletePublicName.js
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/selfDeletePublicName.js
rename to packages/server/services/main/controllers/UserController/endpoints/selfDeletePublicName.js
diff --git a/packages/server/src/controllers/UserController/endpoints/selfUpdateData.js b/packages/server/services/main/controllers/UserController/endpoints/selfUpdateData.js
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/selfUpdateData.js
rename to packages/server/services/main/controllers/UserController/endpoints/selfUpdateData.js
diff --git a/packages/server/src/controllers/UserController/endpoints/selfUpdatePassword.js b/packages/server/services/main/controllers/UserController/endpoints/selfUpdatePassword.js
similarity index 100%
rename from packages/server/src/controllers/UserController/endpoints/selfUpdatePassword.js
rename to packages/server/services/main/controllers/UserController/endpoints/selfUpdatePassword.js
diff --git a/packages/server/src/controllers/UserController/index.js b/packages/server/services/main/controllers/UserController/index.js
similarity index 100%
rename from packages/server/src/controllers/UserController/index.js
rename to packages/server/services/main/controllers/UserController/index.js
diff --git a/packages/server/src/controllers/UserController/services/createUser.js b/packages/server/services/main/controllers/UserController/services/createUser.js
similarity index 100%
rename from packages/server/src/controllers/UserController/services/createUser.js
rename to packages/server/services/main/controllers/UserController/services/createUser.js
diff --git a/packages/server/src/controllers/UserController/services/getConnectedUsersFollowing.js b/packages/server/services/main/controllers/UserController/services/getConnectedUsersFollowing.js
similarity index 100%
rename from packages/server/src/controllers/UserController/services/getConnectedUsersFollowing.js
rename to packages/server/services/main/controllers/UserController/services/getConnectedUsersFollowing.js
diff --git a/packages/server/src/controllers/UserController/services/updateUserData.js b/packages/server/services/main/controllers/UserController/services/updateUserData.js
similarity index 100%
rename from packages/server/src/controllers/UserController/services/updateUserData.js
rename to packages/server/services/main/controllers/UserController/services/updateUserData.js
diff --git a/packages/server/src/controllers/UserController/services/updateUserPassword.js b/packages/server/services/main/controllers/UserController/services/updateUserPassword.js
similarity index 100%
rename from packages/server/src/controllers/UserController/services/updateUserPassword.js
rename to packages/server/services/main/controllers/UserController/services/updateUserPassword.js
diff --git a/packages/server/src/controllers/index.js b/packages/server/services/main/controllers/index.js
similarity index 100%
rename from packages/server/src/controllers/index.js
rename to packages/server/services/main/controllers/index.js
diff --git a/packages/server/src/events/index.js b/packages/server/services/main/events/index.js
similarity index 100%
rename from packages/server/src/events/index.js
rename to packages/server/services/main/events/index.js
diff --git a/packages/server/src/events/user_connected.js b/packages/server/services/main/events/user_connected.js
similarity index 100%
rename from packages/server/src/events/user_connected.js
rename to packages/server/services/main/events/user_connected.js
diff --git a/packages/server/src/events/user_created.js b/packages/server/services/main/events/user_created.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/events/user_created.js
rename to packages/server/services/main/events/user_created.js
diff --git a/packages/server/src/events/user_disconnected.js b/packages/server/services/main/events/user_disconnected.js
similarity index 100%
rename from packages/server/src/events/user_disconnected.js
rename to packages/server/services/main/events/user_disconnected.js
diff --git a/packages/server/src/fixments/additions_to_attachments.js b/packages/server/services/main/fixments/additions_to_attachments.js
similarity index 100%
rename from packages/server/src/fixments/additions_to_attachments.js
rename to packages/server/services/main/fixments/additions_to_attachments.js
diff --git a/packages/server/src/fixments/migrate_posts_likes.js b/packages/server/services/main/fixments/migrate_posts_likes.js
similarity index 100%
rename from packages/server/src/fixments/migrate_posts_likes.js
rename to packages/server/services/main/fixments/migrate_posts_likes.js
diff --git a/packages/server/src/fixments/move_playlist_to_release.js b/packages/server/services/main/fixments/move_playlist_to_release.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/fixments/move_playlist_to_release.js
rename to packages/server/services/main/fixments/move_playlist_to_release.js
diff --git a/packages/server/src/lib/checkUserAdmin/index.js b/packages/server/services/main/lib/checkUserAdmin/index.js
similarity index 100%
rename from packages/server/src/lib/checkUserAdmin/index.js
rename to packages/server/services/main/lib/checkUserAdmin/index.js
diff --git a/packages/server/src/lib/chunkedUpload/index.js b/packages/server/services/main/lib/chunkedUpload/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/lib/chunkedUpload/index.js
rename to packages/server/services/main/lib/chunkedUpload/index.js
diff --git a/packages/server/src/lib/index.js b/packages/server/services/main/lib/index.js
similarity index 100%
rename from packages/server/src/lib/index.js
rename to packages/server/services/main/lib/index.js
diff --git a/packages/server/src/lib/schematized/index.js b/packages/server/services/main/lib/schematized/index.js
similarity index 100%
rename from packages/server/src/lib/schematized/index.js
rename to packages/server/services/main/lib/schematized/index.js
diff --git a/packages/server/src/lib/secureEntry/index.js b/packages/server/services/main/lib/secureEntry/index.js
similarity index 100%
rename from packages/server/src/lib/secureEntry/index.js
rename to packages/server/services/main/lib/secureEntry/index.js
diff --git a/packages/server/src/lib/token/index.js b/packages/server/services/main/lib/token/index.js
similarity index 100%
rename from packages/server/src/lib/token/index.js
rename to packages/server/services/main/lib/token/index.js
diff --git a/packages/server/src/lib/videoTranscode/index.js b/packages/server/services/main/lib/videoTranscode/index.js
similarity index 100%
rename from packages/server/src/lib/videoTranscode/index.js
rename to packages/server/services/main/lib/videoTranscode/index.js
diff --git a/packages/server/src/index.js b/packages/server/services/main/main.service.js
similarity index 86%
rename from packages/server/src/index.js
rename to packages/server/services/main/main.service.js
index 763a5733..caa6d396 100755
--- a/packages/server/src/index.js
+++ b/packages/server/services/main/main.service.js
@@ -1,23 +1,14 @@
-global.FORCE_ENV = "dev"
-
-import Boot from "linebridge/bootstrap"
-import { Server } from "linebridge/dist/server"
-
-import EventEmitter from "@foxify/events"
+import { Server } from "linebridge/src/server"
import { Config, User } from "@shared-classes/DbModels"
import DbManager from "@shared-classes/DbManager"
-import RedisClient from "@shared-classes/RedisClient"
import StorageClient from "@shared-classes/StorageClient"
import Token from "@lib/token"
-import internalEvents from "./events"
-
export default class API extends Server {
static refName = "MAIN-API"
static listen_port = process.env.HTTP_LISTEN_PORT || 3010
-
static requireWSAuth = true
constructor(params) {
@@ -39,29 +30,16 @@ export default class API extends Server {
middlewares = require("@middlewares")
controllers = require("@controllers")
-
- redis = global.redis = RedisClient({
- withWsAdapter: true
- })
-
- DB = new DbManager()
-
- eventBus = new EventEmitter()
+ events = require("./events")
storage = global.storage = StorageClient()
-
- events = internalEvents
+ DB = new DbManager()
async onInitialize() {
- for (const [eventName, eventHandler] of Object.entries(internalEvents)) {
- this.eventBus.on(eventName, eventHandler)
- }
-
- await this.redis.initialize()
await this.DB.initialize()
- await this.initializeConfigDB()
-
await this.storage.initialize()
+
+ await this.initializeConfigDB()
await this.checkSetup()
}
diff --git a/packages/server/src/middlewares/index.js b/packages/server/services/main/middlewares/index.js
similarity index 100%
rename from packages/server/src/middlewares/index.js
rename to packages/server/services/main/middlewares/index.js
diff --git a/packages/server/src/middlewares/onlyAdmin/index.js b/packages/server/services/main/middlewares/onlyAdmin/index.js
similarity index 100%
rename from packages/server/src/middlewares/onlyAdmin/index.js
rename to packages/server/services/main/middlewares/onlyAdmin/index.js
diff --git a/packages/server/src/middlewares/permissions/index.js b/packages/server/services/main/middlewares/permissions/index.js
similarity index 100%
rename from packages/server/src/middlewares/permissions/index.js
rename to packages/server/services/main/middlewares/permissions/index.js
diff --git a/packages/server/src/middlewares/roles/index.js b/packages/server/services/main/middlewares/roles/index.js
similarity index 100%
rename from packages/server/src/middlewares/roles/index.js
rename to packages/server/services/main/middlewares/roles/index.js
diff --git a/packages/server/src/middlewares/withAuthentication/index.js b/packages/server/services/main/middlewares/withAuthentication/index.js
similarity index 100%
rename from packages/server/src/middlewares/withAuthentication/index.js
rename to packages/server/services/main/middlewares/withAuthentication/index.js
diff --git a/packages/server/src/middlewares/withOptionalAuthentication/index.js b/packages/server/services/main/middlewares/withOptionalAuthentication/index.js
similarity index 100%
rename from packages/server/src/middlewares/withOptionalAuthentication/index.js
rename to packages/server/services/main/middlewares/withOptionalAuthentication/index.js
diff --git a/packages/server/services/main/package.json b/packages/server/services/main/package.json
new file mode 100755
index 00000000..67079f21
--- /dev/null
+++ b/packages/server/services/main/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "main",
+ "version": "0.60.2",
+ "license": "MIT",
+ "proxy": {
+ "path": "/main",
+ "port": 3010
+ },
+ "dependencies": {
+ "@octokit/rest": "^20.0.2",
+ "@tensorflow/tfjs-node": "^4.17.0",
+ "axios": "^1.6.7",
+ "backblaze-b2": "^1.7.0",
+ "bcrypt": "^5.1.1",
+ "busboy": "^1.6.0",
+ "connect-mongo": "^5.1.0",
+ "content-range": "^2.0.2",
+ "ioredis": "^5.3.2",
+ "jsonwebtoken": "^9.0.2",
+ "linebridge": "^0.16.0",
+ "luxon": "^3.4.4",
+ "mime-types": "^2.1.35",
+ "minio": "^7.1.3",
+ "moment": "^2.30.1",
+ "moment-timezone": "^0.5.45",
+ "mongoose": "^8.1.2",
+ "normalize-url": "^8.0.0",
+ "nsfwjs": "^3.0.0",
+ "p-map": "^4.0.0",
+ "p-queue": "^7.3.4",
+ "path-to-regexp": "^6.2.1",
+ "sharp": "^0.33.2"
+ }
+}
diff --git a/packages/server/src/services/fetchRemoteStreams/index.js b/packages/server/services/main/services/fetchRemoteStreams/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/services/fetchRemoteStreams/index.js
rename to packages/server/services/main/services/fetchRemoteStreams/index.js
diff --git a/packages/server/src/services/getMutuals/index.js b/packages/server/services/main/services/getMutuals/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/services/getMutuals/index.js
rename to packages/server/services/main/services/getMutuals/index.js
diff --git a/packages/server/src/services/newStreamingProfile/index.js b/packages/server/services/main/services/newStreamingProfile/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/services/newStreamingProfile/index.js
rename to packages/server/services/main/services/newStreamingProfile/index.js
diff --git a/packages/server/src/setup/authorizeSelfServerToken/index.js b/packages/server/services/main/setup/authorizeSelfServerToken/index.js
similarity index 100%
rename from packages/server/src/setup/authorizeSelfServerToken/index.js
rename to packages/server/services/main/setup/authorizeSelfServerToken/index.js
diff --git a/packages/server/src/setup/dbAdmin/index.js b/packages/server/services/main/setup/dbAdmin/index.js
similarity index 100%
rename from packages/server/src/setup/dbAdmin/index.js
rename to packages/server/services/main/setup/dbAdmin/index.js
diff --git a/packages/server/src/setup/index.js b/packages/server/services/main/setup/index.js
similarity index 100%
rename from packages/server/src/setup/index.js
rename to packages/server/services/main/setup/index.js
diff --git a/packages/server/src/utils/aggregate-error/index.js b/packages/server/services/main/utils/aggregate-error/index.js
similarity index 100%
rename from packages/server/src/utils/aggregate-error/index.js
rename to packages/server/services/main/utils/aggregate-error/index.js
diff --git a/packages/server/src/utils/clean-stack/index.js b/packages/server/services/main/utils/clean-stack/index.js
similarity index 100%
rename from packages/server/src/utils/clean-stack/index.js
rename to packages/server/services/main/utils/clean-stack/index.js
diff --git a/packages/server/src/utils/compose-streaming-sources/index.js b/packages/server/services/main/utils/compose-streaming-sources/index.js
old mode 100644
new mode 100755
similarity index 88%
rename from packages/server/src/utils/compose-streaming-sources/index.js
rename to packages/server/services/main/utils/compose-streaming-sources/index.js
index dca4b990..29214462
--- a/packages/server/src/utils/compose-streaming-sources/index.js
+++ b/packages/server/services/main/utils/compose-streaming-sources/index.js
@@ -8,6 +8,7 @@ export default (username, profile_id) => {
return {
ingest: process.env.STREAMING_INGEST_SERVER,
rtmp: `${streamingServerAPIUri}/${streamId}`,
+ rtsp: `rtsp://${process.env.STREAMING_INGEST_SERVER}:8554/live/${streamId}`,
hls: `${streamingServerAPIUri}/stream/hls/${streamId}`,
flv: `${streamingServerAPIUri}/stream/flv/${streamId}`,
mp3: `${streamingServerAPIUri}/stream/mp3/${streamId}`,
diff --git a/packages/server/src/utils/createTokenRegeneration/index.js b/packages/server/services/main/utils/createTokenRegeneration/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/server/src/utils/createTokenRegeneration/index.js
rename to packages/server/services/main/utils/createTokenRegeneration/index.js
diff --git a/packages/server/src/utils/download-file/index.js b/packages/server/services/main/utils/download-file/index.js
similarity index 100%
rename from packages/server/src/utils/download-file/index.js
rename to packages/server/services/main/utils/download-file/index.js
diff --git a/packages/server/src/utils/escape-string-regexp/index.js b/packages/server/services/main/utils/escape-string-regexp/index.js
similarity index 100%
rename from packages/server/src/utils/escape-string-regexp/index.js
rename to packages/server/services/main/utils/escape-string-regexp/index.js
diff --git a/packages/server/src/utils/fullfillPostsData/index.js b/packages/server/services/main/utils/fullfillPostsData/index.js
similarity index 100%
rename from packages/server/src/utils/fullfillPostsData/index.js
rename to packages/server/services/main/utils/fullfillPostsData/index.js
diff --git a/packages/server/src/utils/image-byte-array/index.js b/packages/server/services/main/utils/image-byte-array/index.js
similarity index 100%
rename from packages/server/src/utils/image-byte-array/index.js
rename to packages/server/services/main/utils/image-byte-array/index.js
diff --git a/packages/server/src/utils/indecent-prediction/index.js b/packages/server/services/main/utils/indecent-prediction/index.js
similarity index 100%
rename from packages/server/src/utils/indecent-prediction/index.js
rename to packages/server/services/main/utils/indecent-prediction/index.js
diff --git a/packages/server/src/utils/indent-string/index.js b/packages/server/services/main/utils/indent-string/index.js
similarity index 100%
rename from packages/server/src/utils/indent-string/index.js
rename to packages/server/services/main/utils/indent-string/index.js
diff --git a/packages/server/src/utils/is-nsfw/index.js b/packages/server/services/main/utils/is-nsfw/index.js
similarity index 100%
rename from packages/server/src/utils/is-nsfw/index.js
rename to packages/server/services/main/utils/is-nsfw/index.js
diff --git a/packages/server/src/utils/pMap/index.js b/packages/server/services/main/utils/pMap/index.js
similarity index 100%
rename from packages/server/src/utils/pMap/index.js
rename to packages/server/services/main/utils/pMap/index.js
diff --git a/packages/server/src/utils/read-image/index.js b/packages/server/services/main/utils/read-image/index.js
similarity index 100%
rename from packages/server/src/utils/read-image/index.js
rename to packages/server/services/main/utils/read-image/index.js
diff --git a/packages/marketplace_server/src/controllers/static/index.js b/packages/server/services/marketplace/controllers/static/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/controllers/static/index.js
rename to packages/server/services/marketplace/controllers/static/index.js
diff --git a/packages/marketplace_server/src/controllers/widgets/index.js b/packages/server/services/marketplace/controllers/widgets/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/controllers/widgets/index.js
rename to packages/server/services/marketplace/controllers/widgets/index.js
diff --git a/packages/marketplace_server/src/controllers/widgets/routes/get/:widgetId.js b/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/controllers/widgets/routes/get/:widgetId.js
rename to packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId.js
diff --git a/packages/marketplace_server/src/controllers/widgets/routes/get/:widgetId/debug.jsx b/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/debug.jsx
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/controllers/widgets/routes/get/:widgetId/debug.jsx
rename to packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/debug.jsx
diff --git a/packages/marketplace_server/src/controllers/widgets/routes/get/:widgetId/manifest.js b/packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/manifest.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/controllers/widgets/routes/get/:widgetId/manifest.js
rename to packages/server/services/marketplace/controllers/widgets/routes/get/:widgetId/manifest.js
diff --git a/packages/marketplace_server/src/controllers/widgets/routes/get/index.js b/packages/server/services/marketplace/controllers/widgets/routes/get/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/controllers/widgets/routes/get/index.js
rename to packages/server/services/marketplace/controllers/widgets/routes/get/index.js
diff --git a/packages/marketplace_server/src/controllers/widgets/routes/get/user/:user_id.js b/packages/server/services/marketplace/controllers/widgets/routes/get/user/:user_id.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/controllers/widgets/routes/get/user/:user_id.js
rename to packages/server/services/marketplace/controllers/widgets/routes/get/user/:user_id.js
diff --git a/packages/marketplace_server/src/controllers/widgets/routes/post/publish.js b/packages/server/services/marketplace/controllers/widgets/routes/post/publish.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/controllers/widgets/routes/post/publish.js
rename to packages/server/services/marketplace/controllers/widgets/routes/post/publish.js
diff --git a/packages/marketplace_server/src/api.js b/packages/server/services/marketplace/marketplace.service.js
old mode 100644
new mode 100755
similarity index 98%
rename from packages/marketplace_server/src/api.js
rename to packages/server/services/marketplace/marketplace.service.js
index a8aaec89..bd140258
--- a/packages/marketplace_server/src/api.js
+++ b/packages/server/services/marketplace/marketplace.service.js
@@ -8,7 +8,7 @@ import ComtyClient from "@shared-classes/ComtyClient"
import hyperexpress from "hyper-express"
-import pkg from "../package.json"
+import pkg from "./package.json"
export default class API {
static useMiddlewaresOrder = ["useLogger", "useCors", "useAuth"]
@@ -139,4 +139,6 @@ export default class API {
// log server started
console.log(`đ Server started ready on \n\t - http://${this.listenIp}:${this.listenPort} \n\t - Tooks ${elapsedTimeInMs}ms`)
}
-}
\ No newline at end of file
+}
+
+Boot(API)
\ No newline at end of file
diff --git a/packages/server/services/marketplace/package.json b/packages/server/services/marketplace/package.json
new file mode 100755
index 00000000..5ae41dc4
--- /dev/null
+++ b/packages/server/services/marketplace/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "marketplace",
+ "version": "0.60.2",
+ "license": "MIT",
+ "dependencies": {
+ "7zip-min": "^1.4.4",
+ "@foxify/events": "^2.1.0",
+ "@octokit/rest": "^19.0.7",
+ "axios": "^1.2.5",
+ "bcrypt": "^5.1.0",
+ "busboy": "^1.6.0",
+ "comty.js": "^0.58.2",
+ "connect-mongo": "^4.6.0",
+ "content-range": "^2.0.2",
+ "dotenv": "^16.0.3",
+ "form-data": "^4.0.0",
+ "formidable": "^2.1.1",
+ "hyper-express": "^6.5.9",
+ "jsonwebtoken": "^9.0.0",
+ "linebridge": "0.15.12",
+ "live-directory": "^3.0.3",
+ "luxon": "^3.2.1",
+ "merge-files": "^0.1.2",
+ "mime-types": "^2.1.35",
+ "minio": "^7.0.32",
+ "moment": "^2.29.4",
+ "moment-timezone": "^0.5.40",
+ "mongoose": "^6.9.0",
+ "normalize-url": "^8.0.0",
+ "p-map": "^6.0.0",
+ "p-queue": "^7.3.4",
+ "redis": "^4.6.6",
+ "sharp": "^0.31.3",
+ "split-chunk-merge": "^1.0.0",
+ "sucrase": "^3.32.0",
+ "uglify-js": "^3.17.4"
+ }
+}
\ No newline at end of file
diff --git a/packages/marketplace_server/src/useMiddlewares/useAuth/index.js b/packages/server/services/marketplace/useMiddlewares/useAuth/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/useMiddlewares/useAuth/index.js
rename to packages/server/services/marketplace/useMiddlewares/useAuth/index.js
diff --git a/packages/marketplace_server/src/useMiddlewares/useCors/index.js b/packages/server/services/marketplace/useMiddlewares/useCors/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/useMiddlewares/useCors/index.js
rename to packages/server/services/marketplace/useMiddlewares/useCors/index.js
diff --git a/packages/marketplace_server/src/useMiddlewares/useLogger/index.js b/packages/server/services/marketplace/useMiddlewares/useLogger/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/useMiddlewares/useLogger/index.js
rename to packages/server/services/marketplace/useMiddlewares/useLogger/index.js
diff --git a/packages/marketplace_server/src/utils/compileWidgetCode/index.js b/packages/server/services/marketplace/utils/compileWidgetCode/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/utils/compileWidgetCode/index.js
rename to packages/server/services/marketplace/utils/compileWidgetCode/index.js
diff --git a/packages/marketplace_server/src/utils/createRoutesFromDirectory/index.js b/packages/server/services/marketplace/utils/createRoutesFromDirectory/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/utils/createRoutesFromDirectory/index.js
rename to packages/server/services/marketplace/utils/createRoutesFromDirectory/index.js
diff --git a/packages/marketplace_server/src/utils/getWidgetCode/index.js b/packages/server/services/marketplace/utils/getWidgetCode/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/utils/getWidgetCode/index.js
rename to packages/server/services/marketplace/utils/getWidgetCode/index.js
diff --git a/packages/marketplace_server/src/utils/replaceImportsWithRemoteURL/index.js b/packages/server/services/marketplace/utils/replaceImportsWithRemoteURL/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/utils/replaceImportsWithRemoteURL/index.js
rename to packages/server/services/marketplace/utils/replaceImportsWithRemoteURL/index.js
diff --git a/packages/marketplace_server/src/utils/resolveUrl/index.js b/packages/server/services/marketplace/utils/resolveUrl/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/utils/resolveUrl/index.js
rename to packages/server/services/marketplace/utils/resolveUrl/index.js
diff --git a/packages/marketplace_server/src/utils/syncDirToRemote/index.js b/packages/server/services/marketplace/utils/syncDirToRemote/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/marketplace_server/src/utils/syncDirToRemote/index.js
rename to packages/server/services/marketplace/utils/syncDirToRemote/index.js
diff --git a/packages/music_server/src/classes/Room/index.js b/packages/server/services/music/classes/Room/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/classes/Room/index.js
rename to packages/server/services/music/classes/Room/index.js
diff --git a/packages/music_server/src/classes/RoomsController/index.js b/packages/server/services/music/classes/RoomsController/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/classes/RoomsController/index.js
rename to packages/server/services/music/classes/RoomsController/index.js
diff --git a/packages/music_server/src/controllers/featured/index.js b/packages/server/services/music/controllers/featured/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/featured/index.js
rename to packages/server/services/music/controllers/featured/index.js
diff --git a/packages/music_server/src/controllers/featured/routes/get/playlists.js b/packages/server/services/music/controllers/featured/routes/get/playlists.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/featured/routes/get/playlists.js
rename to packages/server/services/music/controllers/featured/routes/get/playlists.js
diff --git a/packages/music_server/src/controllers/lyrics/index.js b/packages/server/services/music/controllers/lyrics/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/lyrics/index.js
rename to packages/server/services/music/controllers/lyrics/index.js
diff --git a/packages/music_server/src/controllers/lyrics/routes/get/:track_id.js b/packages/server/services/music/controllers/lyrics/routes/get/:track_id.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/lyrics/routes/get/:track_id.js
rename to packages/server/services/music/controllers/lyrics/routes/get/:track_id.js
diff --git a/packages/music_server/src/controllers/playlists/index.js b/packages/server/services/music/controllers/playlists/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/playlists/index.js
rename to packages/server/services/music/controllers/playlists/index.js
diff --git a/packages/music_server/src/controllers/playlists/routes/delete/:playlist_id.js b/packages/server/services/music/controllers/playlists/routes/delete/:playlist_id.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/playlists/routes/delete/:playlist_id.js
rename to packages/server/services/music/controllers/playlists/routes/delete/:playlist_id.js
diff --git a/packages/music_server/src/controllers/playlists/routes/get/:playlist_id/data.js b/packages/server/services/music/controllers/playlists/routes/get/:playlist_id/data.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/playlists/routes/get/:playlist_id/data.js
rename to packages/server/services/music/controllers/playlists/routes/get/:playlist_id/data.js
diff --git a/packages/music_server/src/controllers/playlists/routes/get/search.js b/packages/server/services/music/controllers/playlists/routes/get/search.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/playlists/routes/get/search.js
rename to packages/server/services/music/controllers/playlists/routes/get/search.js
diff --git a/packages/music_server/src/controllers/playlists/routes/get/self.js b/packages/server/services/music/controllers/playlists/routes/get/self.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/playlists/routes/get/self.js
rename to packages/server/services/music/controllers/playlists/routes/get/self.js
diff --git a/packages/music_server/src/controllers/playlists/routes/post/new.js b/packages/server/services/music/controllers/playlists/routes/post/new.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/playlists/routes/post/new.js
rename to packages/server/services/music/controllers/playlists/routes/post/new.js
diff --git a/packages/music_server/src/controllers/playlists/services/getTrackById.js b/packages/server/services/music/controllers/playlists/services/getTrackById.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/playlists/services/getTrackById.js
rename to packages/server/services/music/controllers/playlists/services/getTrackById.js
diff --git a/packages/music_server/src/controllers/releases/index.js b/packages/server/services/music/controllers/releases/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/releases/index.js
rename to packages/server/services/music/controllers/releases/index.js
diff --git a/packages/music_server/src/controllers/releases/routes/delete/:release_id.js b/packages/server/services/music/controllers/releases/routes/delete/:release_id.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/releases/routes/delete/:release_id.js
rename to packages/server/services/music/controllers/releases/routes/delete/:release_id.js
diff --git a/packages/music_server/src/controllers/releases/routes/get/:release_id/data.js b/packages/server/services/music/controllers/releases/routes/get/:release_id/data.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/releases/routes/get/:release_id/data.js
rename to packages/server/services/music/controllers/releases/routes/get/:release_id/data.js
diff --git a/packages/music_server/src/controllers/releases/routes/get/self.js b/packages/server/services/music/controllers/releases/routes/get/self.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/releases/routes/get/self.js
rename to packages/server/services/music/controllers/releases/routes/get/self.js
diff --git a/packages/music_server/src/controllers/releases/routes/get/user/:user_id.js b/packages/server/services/music/controllers/releases/routes/get/user/:user_id.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/releases/routes/get/user/:user_id.js
rename to packages/server/services/music/controllers/releases/routes/get/user/:user_id.js
diff --git a/packages/music_server/src/controllers/releases/routes/put/release.js b/packages/server/services/music/controllers/releases/routes/put/release.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/releases/routes/put/release.js
rename to packages/server/services/music/controllers/releases/routes/put/release.js
diff --git a/packages/music_server/src/controllers/search/index.js b/packages/server/services/music/controllers/search/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/search/index.js
rename to packages/server/services/music/controllers/search/index.js
diff --git a/packages/music_server/src/controllers/tracks/index.js b/packages/server/services/music/controllers/tracks/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/tracks/index.js
rename to packages/server/services/music/controllers/tracks/index.js
diff --git a/packages/music_server/src/controllers/tracks/routes/delete/:track_id/like.js b/packages/server/services/music/controllers/tracks/routes/delete/:track_id/like.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/tracks/routes/delete/:track_id/like.js
rename to packages/server/services/music/controllers/tracks/routes/delete/:track_id/like.js
diff --git a/packages/music_server/src/controllers/tracks/routes/get/:track_id/data.js b/packages/server/services/music/controllers/tracks/routes/get/:track_id/data.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/tracks/routes/get/:track_id/data.js
rename to packages/server/services/music/controllers/tracks/routes/get/:track_id/data.js
diff --git a/packages/music_server/src/controllers/tracks/routes/get/:track_id/stream.js b/packages/server/services/music/controllers/tracks/routes/get/:track_id/stream.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/tracks/routes/get/:track_id/stream.js
rename to packages/server/services/music/controllers/tracks/routes/get/:track_id/stream.js
diff --git a/packages/music_server/src/controllers/tracks/routes/get/liked.js b/packages/server/services/music/controllers/tracks/routes/get/liked.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/tracks/routes/get/liked.js
rename to packages/server/services/music/controllers/tracks/routes/get/liked.js
diff --git a/packages/music_server/src/controllers/tracks/routes/get/many.js b/packages/server/services/music/controllers/tracks/routes/get/many.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/tracks/routes/get/many.js
rename to packages/server/services/music/controllers/tracks/routes/get/many.js
diff --git a/packages/music_server/src/controllers/tracks/routes/post/:track_id/like.js b/packages/server/services/music/controllers/tracks/routes/post/:track_id/like.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/tracks/routes/post/:track_id/like.js
rename to packages/server/services/music/controllers/tracks/routes/post/:track_id/like.js
diff --git a/packages/music_server/src/controllers/tracks/routes/post/:track_id/refresh-cache.js b/packages/server/services/music/controllers/tracks/routes/post/:track_id/refresh-cache.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/controllers/tracks/routes/post/:track_id/refresh-cache.js
rename to packages/server/services/music/controllers/tracks/routes/post/:track_id/refresh-cache.js
diff --git a/packages/music_server/src/middlewares/withAuth/index.js b/packages/server/services/music/middlewares/withAuth/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/middlewares/withAuth/index.js
rename to packages/server/services/music/middlewares/withAuth/index.js
diff --git a/packages/music_server/src/middlewares/withOptionalAuth/index.js b/packages/server/services/music/middlewares/withOptionalAuth/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/middlewares/withOptionalAuth/index.js
rename to packages/server/services/music/middlewares/withOptionalAuth/index.js
diff --git a/packages/music_server/src/middlewares/withWsAuth.js b/packages/server/services/music/middlewares/withWsAuth.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/middlewares/withWsAuth.js
rename to packages/server/services/music/middlewares/withWsAuth.js
diff --git a/packages/music_server/src/api.js b/packages/server/services/music/music.service.js
similarity index 98%
rename from packages/music_server/src/api.js
rename to packages/server/services/music/music.service.js
index 681c750e..d515c5de 100755
--- a/packages/music_server/src/api.js
+++ b/packages/server/services/music/music.service.js
@@ -12,9 +12,9 @@ import StorageClient from "@shared-classes/StorageClient"
import WebsocketServer from "./ws"
-import pkg from "../package.json"
+import pkg from "./package.json"
-export default class Server {
+export default class API {
static useMiddlewaresOrder = ["useLogger", "useCors", "useAuth", "useErrorHandler"]
eventBus = global.eventBus = new EventEmitter()
@@ -184,4 +184,6 @@ export default class Server {
// log server started
console.log(`đ Server started ready on \n\t - http://${this.options.listenHost}:${this.options.listenPort} \n\t - Tooks ${elapsedTimeInMs}ms`)
}
-}
\ No newline at end of file
+}
+
+Boot(API)
\ No newline at end of file
diff --git a/packages/server/services/music/package.json b/packages/server/services/music/package.json
new file mode 100755
index 00000000..7adb9b27
--- /dev/null
+++ b/packages/server/services/music/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "music",
+ "version": "0.60.2",
+ "license": "MIT",
+ "proxyMount": "/music",
+ "proxy": {
+ "path": "/main",
+ "port": 3050
+ },
+ "dependencies": {
+ "@foxify/events": "^2.1.0",
+ "axios": "^1.4.0",
+ "bcrypt": "5.0.1",
+ "comty.js": "^0.58.2",
+ "connect-mongo": "^4.6.0",
+ "cors": "^2.8.5",
+ "dotenv": "^16.0.3",
+ "express": "^4.18.2",
+ "jsonwebtoken": "8.5.1",
+ "linebridge": "0.15.12",
+ "luxon": "^3.0.4",
+ "minio": "^7.0.32",
+ "moment": "2.29.4",
+ "moment-timezone": "0.5.37",
+ "mongoose": "^6.9.0",
+ "morgan": "^1.10.0",
+ "redis": "^4.6.6",
+ "socket.io": "^4.5.4"
+ }
+}
\ No newline at end of file
diff --git a/packages/music_server/src/services/findSpotifyId.js b/packages/server/services/music/services/findSpotifyId.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/services/findSpotifyId.js
rename to packages/server/services/music/services/findSpotifyId.js
diff --git a/packages/music_server/src/services/getEnhancedLyricsFromTrack.js b/packages/server/services/music/services/getEnhancedLyricsFromTrack.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/services/getEnhancedLyricsFromTrack.js
rename to packages/server/services/music/services/getEnhancedLyricsFromTrack.js
diff --git a/packages/music_server/src/services/removeTracks.js b/packages/server/services/music/services/removeTracks.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/services/removeTracks.js
rename to packages/server/services/music/services/removeTracks.js
diff --git a/packages/music_server/src/useMiddlewares/useCors/index.js b/packages/server/services/music/useMiddlewares/useCors/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/useMiddlewares/useCors/index.js
rename to packages/server/services/music/useMiddlewares/useCors/index.js
diff --git a/packages/music_server/src/useMiddlewares/useLogger/index.js b/packages/server/services/music/useMiddlewares/useLogger/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/useMiddlewares/useLogger/index.js
rename to packages/server/services/music/useMiddlewares/useLogger/index.js
diff --git a/packages/music_server/src/utils/composePayloadData/index.js b/packages/server/services/music/utils/composePayloadData/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/utils/composePayloadData/index.js
rename to packages/server/services/music/utils/composePayloadData/index.js
diff --git a/packages/music_server/src/utils/createRoutesFromDirectory/index.js b/packages/server/services/music/utils/createRoutesFromDirectory/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/utils/createRoutesFromDirectory/index.js
rename to packages/server/services/music/utils/createRoutesFromDirectory/index.js
diff --git a/packages/music_server/src/utils/generateFnHandler/index.js b/packages/server/services/music/utils/generateFnHandler/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/utils/generateFnHandler/index.js
rename to packages/server/services/music/utils/generateFnHandler/index.js
diff --git a/packages/music_server/src/utils/getMiddlewares/index.js b/packages/server/services/music/utils/getMiddlewares/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/utils/getMiddlewares/index.js
rename to packages/server/services/music/utils/getMiddlewares/index.js
diff --git a/packages/music_server/src/utils/resolveUrl/index.js b/packages/server/services/music/utils/resolveUrl/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/utils/resolveUrl/index.js
rename to packages/server/services/music/utils/resolveUrl/index.js
diff --git a/packages/music_server/src/ws.js b/packages/server/services/music/ws.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/music_server/src/ws.js
rename to packages/server/services/music/ws.js
diff --git a/packages/server/services/posts/classes/posts/index.js b/packages/server/services/posts/classes/posts/index.js
new file mode 100644
index 00000000..844afa3a
--- /dev/null
+++ b/packages/server/services/posts/classes/posts/index.js
@@ -0,0 +1,7 @@
+export default class Posts {
+ static create = require("./methods/create").default
+
+ static data = require("./methods/data").default
+
+ static fullfillPost = require("./methods/fullfill").default
+}
\ No newline at end of file
diff --git a/packages/server/services/posts/classes/posts/methods/create.js b/packages/server/services/posts/classes/posts/methods/create.js
new file mode 100644
index 00000000..31c45da8
--- /dev/null
+++ b/packages/server/services/posts/classes/posts/methods/create.js
@@ -0,0 +1,44 @@
+import momentTimezone from "moment-timezone"
+import requiredFields from "@shared-utils/requiredFields"
+
+import { Post } from "@shared-classes/DbModels"
+
+export default async (payload) => {
+ if (!payload) {
+ throw new Error("Payload is required")
+ }
+
+ await requiredFields(["user_id", "timestamp"], payload)
+
+ let { user_id, message, attachments, timestamp, reply_to } = payload
+
+ // check if is a Array and have at least one element
+ const isAttachmentsValid = Array.isArray(attachments) && attachments.length > 0
+
+ if (!isAttachmentsValid && !message) {
+ throw new Error("Cannot create a post without message or attachments")
+ }
+
+ const current_timezone = momentTimezone.tz.guess()
+ const created_at = momentTimezone.tz(Date.now(), current_timezone).format()
+
+ let post = new Post({
+ created_at: created_at,
+ user_id: typeof user_id === "object" ? user_id.toString() : user_id,
+ message: message,
+ attachments: attachments ?? [],
+ timestamp: timestamp,
+ reply_to: reply_to,
+ flags: [],
+ })
+
+ await post.save()
+
+ post = post.toObject()
+
+ // TODO: create background jobs (nsfw dectection)
+
+ // TODO: Push event to Websocket
+
+ return post
+}
\ No newline at end of file
diff --git a/packages/server/services/posts/classes/posts/methods/data.js b/packages/server/services/posts/classes/posts/methods/data.js
new file mode 100644
index 00000000..a24c9312
--- /dev/null
+++ b/packages/server/services/posts/classes/posts/methods/data.js
@@ -0,0 +1,75 @@
+import { Post, SavedPost } from "@shared-classes/DbModels"
+import fullfillPostsData from "./fullfill"
+
+export default async (payload) => {
+ let {
+ from_user_id,
+ for_user_id,
+ post_id,
+ query = {},
+ skip = 0,
+ limit = 20,
+ sort = { created_at: -1 },
+ savedOnly = false,
+ } = payload
+
+ let posts = []
+ let savedPostsIds = []
+
+ // if for_user_id is provided, get saved posts
+ if (for_user_id) {
+ const savedPosts = await SavedPost.find({ user_id: for_user_id })
+ .sort({ saved_at: -1 })
+
+ savedPostsIds = savedPosts.map((savedPost) => savedPost.post_id)
+ }
+
+ // if from_user_id is provided, get posts from that user
+ if (from_user_id) {
+ query.user_id = from_user_id
+ }
+
+ // if savedOnly is true,set to query to get only saved posts
+ if (savedOnly) {
+ query._id = { $in: savedPostsIds }
+ }
+
+ if (post_id) {
+ try {
+ const post = await Post.findById(post_id)
+
+ posts = [post]
+ } catch (error) {
+ throw new OperationError(404, "Post not found")
+ }
+ } else {
+ posts = await Post.find({ ...query })
+ .sort(sort)
+ .skip(skip)
+ .limit(limit)
+ }
+
+ // short posts if is savedOnly argument
+ if (savedOnly) {
+ posts.sort((a, b) => {
+ return (
+ savedPostsIds.indexOf(a._id.toString()) -
+ savedPostsIds.indexOf(b._id.toString())
+ )
+ })
+ }
+
+ // fullfill data
+ posts = await fullfillPostsData({
+ posts,
+ for_user_id,
+ skip,
+ })
+
+ // if post_id is specified, return only one post
+ if (post_id) {
+ return posts[0]
+ }
+
+ return posts
+}
\ No newline at end of file
diff --git a/packages/server/services/posts/classes/posts/methods/fullfill.js b/packages/server/services/posts/classes/posts/methods/fullfill.js
new file mode 100644
index 00000000..2e89f1f9
--- /dev/null
+++ b/packages/server/services/posts/classes/posts/methods/fullfill.js
@@ -0,0 +1,100 @@
+import { User, Comment, PostLike, SavedPost } from "@shared-classes/DbModels"
+
+export default async (payload) => {
+ let {
+ posts,
+ for_user_id,
+ } = payload
+
+ if (!Array.isArray(posts)) {
+ posts = [posts]
+ }
+
+ console.log(posts, posts.every((post) => !post))
+
+ if (posts.every((post) => !post)) {
+ return []
+ }
+
+ let savedPostsIds = []
+
+ if (for_user_id) {
+ const savedPosts = await SavedPost.find({ user_id: for_user_id })
+ .sort({ saved_at: -1 })
+
+ savedPostsIds = savedPosts.map((savedPost) => savedPost.post_id)
+ }
+
+ let [usersData, likesData, commentsData] = await Promise.all([
+ User.find({
+ _id: {
+ $in: posts.map((post) => post.user_id)
+ }
+ }),
+ PostLike.find({
+ post_id: {
+ $in: posts.map((post) => post._id)
+ }
+ }).catch(() => []),
+ Comment.find({
+ parent_id: {
+ $in: posts.map((post) => post._id)
+ }
+ }).catch(() => []),
+ ])
+
+ // wrap likesData by post_id
+ likesData = likesData.reduce((acc, like) => {
+ if (!acc[like.post_id]) {
+ acc[like.post_id] = []
+ }
+
+ acc[like.post_id].push(like)
+
+ return acc
+ }, {})
+
+ // wrap commentsData by post_id
+ commentsData = commentsData.reduce((acc, comment) => {
+ if (!acc[comment.parent_id]) {
+ acc[comment.parent_id] = []
+ }
+
+ acc[comment.parent_id].push(comment)
+
+ return acc
+ }, {})
+
+ posts = await Promise.all(posts.map(async (post, index) => {
+ post = post.toObject()
+
+ let user = usersData.find((user) => user._id.toString() === post.user_id.toString())
+
+ if (!user) {
+ user = {
+ username: "Deleted user",
+ }
+ }
+
+ let likes = likesData[post._id.toString()] ?? []
+
+ post.countLikes = likes.length
+
+ let comments = commentsData[post._id.toString()] ?? []
+
+ post.countComments = comments.length
+
+ if (for_user_id) {
+ post.isLiked = likes.some((like) => like.user_id.toString() === for_user_id)
+ post.isSaved = savedPostsIds.includes(post._id.toString())
+ }
+
+ return {
+ ...post,
+ comments: comments.map((comment) => comment._id.toString()),
+ user,
+ }
+ }))
+
+ return posts
+}
\ No newline at end of file
diff --git a/packages/server/services/posts/package.json b/packages/server/services/posts/package.json
new file mode 100644
index 00000000..e52dc066
--- /dev/null
+++ b/packages/server/services/posts/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "posts",
+ "version": "1.0.0",
+ "main": "index.js",
+ "license": "MIT",
+ "dependencies": {
+ "moment-timezone": "^0.5.45"
+ }
+}
diff --git a/packages/server/services/posts/posts.service.js b/packages/server/services/posts/posts.service.js
new file mode 100644
index 00000000..5bf865b1
--- /dev/null
+++ b/packages/server/services/posts/posts.service.js
@@ -0,0 +1,24 @@
+import { Server } from "linebridge/src/server"
+
+import DbManager from "@shared-classes/DbManager"
+
+export default class API extends Server {
+ static refName = "posts"
+ static useEngine = "hyper-express"
+ static routesPath = `${__dirname}/routes`
+ static listen_port = process.env.HTTP_LISTEN_PORT ?? 3001
+
+ contexts = {
+ db: new DbManager(),
+ }
+
+ events = {
+
+ }
+
+ async onInitialize() {
+ await this.contexts.db.initialize()
+ }
+}
+
+Boot(API)
\ No newline at end of file
diff --git a/packages/server/services/posts/routes/posts/[post_id]/get.js b/packages/server/services/posts/routes/posts/[post_id]/get.js
new file mode 100644
index 00000000..6c3f2799
--- /dev/null
+++ b/packages/server/services/posts/routes/posts/[post_id]/get.js
@@ -0,0 +1,13 @@
+import Posts from "@classes/posts"
+
+export default {
+ middlewares: ["withOptionalAuthentication"],
+ fn: async (req, res) => {
+ const result = await Posts.data({
+ post_id: req.params.post_id,
+ for_user_id: req.user?._id.toString(),
+ })
+
+ return result
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/posts/routes/posts/new/post.js b/packages/server/services/posts/routes/posts/new/post.js
new file mode 100644
index 00000000..d1d290fd
--- /dev/null
+++ b/packages/server/services/posts/routes/posts/new/post.js
@@ -0,0 +1,6 @@
+export default async (req, res) => {
+ return res.json({
+ code: 0,
+ message: "success",
+ })
+}
\ No newline at end of file
diff --git a/packages/server/services/posts/routes/posts/test/get.js b/packages/server/services/posts/routes/posts/test/get.js
new file mode 100644
index 00000000..88e61886
--- /dev/null
+++ b/packages/server/services/posts/routes/posts/test/get.js
@@ -0,0 +1,10 @@
+export default async (req, res) => {
+ await new Promise((r) => {
+ setTimeout(r, 1000)
+ })
+
+ return {
+ code: 0,
+ message: "success",
+ }
+}
\ No newline at end of file
diff --git a/packages/server/services/sync/classes/VRCApi/index.js b/packages/server/services/sync/classes/VRCApi/index.js
new file mode 100755
index 00000000..6e66ad30
--- /dev/null
+++ b/packages/server/services/sync/classes/VRCApi/index.js
@@ -0,0 +1,59 @@
+import axios from "axios"
+
+export default class VRCApi {
+ static base_api_hostname = "https://api.vrchat.cloud/api/1"
+
+ static get interface() {
+ return axios.create({
+ baseURL: VRCApi.base_api_hostname,
+ headers: {
+ "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.142.86 Safari/537.36",
+ }
+ })
+ }
+
+ static async auth({ username, password }, access_token) {
+ username = encodeURIComponent(username)
+ password = encodeURIComponent(password)
+
+ let headers = {
+ "Authorization": `Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`
+ }
+
+ if (access_token) {
+ delete headers["Authorization"]
+ headers["Cookie"] = `${access_token}`
+ }
+
+ const response = await VRCApi.interface({
+ method: "GET",
+ url: "/auth/user",
+ headers,
+ })
+
+ if (!access_token && response.headers["set-cookie"]) {
+ response.data.cookie = response.headers["set-cookie"][0].split(";")[0]
+ }
+
+ return response.data
+ }
+
+ static async verifyOtp({ type, code }, access_token) {
+ const response = await VRCApi.interface({
+ method: "POST",
+ url: `/auth/twofactorauth/${type}/verify`,
+ data: {
+ code: code
+ },
+ headers: {
+ "Cookie": `${access_token}`
+ },
+ })
+
+ if (!access_token && response.headers["set-cookie"]) {
+ response.data.cookie = response.headers["set-cookie"][0].split(";")[0]
+ }
+
+ return response.data
+ }
+}
\ No newline at end of file
diff --git a/packages/sync_server/src/controllers/main/index.js b/packages/server/services/sync/controllers/main/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/main/index.js
rename to packages/server/services/sync/controllers/main/index.js
diff --git a/packages/server/services/sync/controllers/main/routes/get/active_services.js b/packages/server/services/sync/controllers/main/routes/get/active_services.js
new file mode 100755
index 00000000..6c65a9f3
--- /dev/null
+++ b/packages/server/services/sync/controllers/main/routes/get/active_services.js
@@ -0,0 +1,32 @@
+import SecureSyncEntry from "@shared-classes/SecureSyncEntry"
+import { AuthorizationError } from "@shared-classes/Errors"
+
+export default async (req, res) => {
+ if (!req.session) {
+ return new AuthorizationError(req, res)
+ }
+
+ let access = {}
+
+ const check_map = [
+ ["vrc", async () => await SecureSyncEntry.has(req.session.user_id.toString(), "vrc_access_token")],
+ ["tidal", async () => await SecureSyncEntry.has(req.session.user_id.toString(), "tidal_access_token")],
+ ["spotify", async () => await SecureSyncEntry.has(req.session.user_id.toString(), "spotify_access_token")],
+ ]
+
+ try {
+ for (const check of check_map) {
+ const [service, fn] = check
+
+ if (await fn()) {
+ access[service] = true
+ } else {
+ access[service] = false
+ }
+ }
+ } catch (error) {
+ return res.status(500).json({ error: error.message })
+ }
+
+ return res.json(access)
+}
\ No newline at end of file
diff --git a/packages/sync_server/src/controllers/main/routes/get/sse_event/:sse_uid.js b/packages/server/services/sync/controllers/main/routes/get/sse_event/:sse_uid.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/main/routes/get/sse_event/:sse_uid.js
rename to packages/server/services/sync/controllers/main/routes/get/sse_event/:sse_uid.js
diff --git a/packages/sync_server/src/controllers/services/index.js b/packages/server/services/sync/controllers/services/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/index.js
rename to packages/server/services/sync/controllers/services/index.js
diff --git a/packages/sync_server/src/controllers/services/routes/delete/tidal/track/:track_id/like.js b/packages/server/services/sync/controllers/services/routes/delete/tidal/track/:track_id/like.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/delete/tidal/track/:track_id/like.js
rename to packages/server/services/sync/controllers/services/routes/delete/tidal/track/:track_id/like.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/create_link.js b/packages/server/services/sync/controllers/services/routes/get/tidal/create_link.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/create_link.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/create_link.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/current.js b/packages/server/services/sync/controllers/services/routes/get/tidal/current.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/current.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/current.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/favorites/playlists.js b/packages/server/services/sync/controllers/services/routes/get/tidal/favorites/playlists.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/favorites/playlists.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/favorites/playlists.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/favorites/tracks.js b/packages/server/services/sync/controllers/services/routes/get/tidal/favorites/tracks.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/favorites/tracks.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/favorites/tracks.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/is_active.js b/packages/server/services/sync/controllers/services/routes/get/tidal/is_active.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/is_active.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/is_active.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/manifest/:track_id.js b/packages/server/services/sync/controllers/services/routes/get/tidal/manifest/:track_id.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/manifest/:track_id.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/manifest/:track_id.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/playback/:track_id.js b/packages/server/services/sync/controllers/services/routes/get/tidal/playback/:track_id.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/playback/:track_id.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/playback/:track_id.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/playlist/:uuid/data.js b/packages/server/services/sync/controllers/services/routes/get/tidal/playlist/:uuid/data.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/playlist/:uuid/data.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/playlist/:uuid/data.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/playlist/:uuid/items.js b/packages/server/services/sync/controllers/services/routes/get/tidal/playlist/:uuid/items.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/playlist/:uuid/items.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/playlist/:uuid/items.js
diff --git a/packages/sync_server/src/controllers/services/routes/get/tidal/search.js b/packages/server/services/sync/controllers/services/routes/get/tidal/search.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/get/tidal/search.js
rename to packages/server/services/sync/controllers/services/routes/get/tidal/search.js
diff --git a/packages/sync_server/src/controllers/main/routes/get/active_services.js b/packages/server/services/sync/controllers/services/routes/get/vrc/session.js
old mode 100644
new mode 100755
similarity index 56%
rename from packages/sync_server/src/controllers/main/routes/get/active_services.js
rename to packages/server/services/sync/controllers/services/routes/get/vrc/session.js
index 786001d9..feb561e3
--- a/packages/sync_server/src/controllers/main/routes/get/active_services.js
+++ b/packages/server/services/sync/controllers/services/routes/get/vrc/session.js
@@ -6,10 +6,7 @@ export default async (req, res) => {
return new AuthorizationError(req, res)
}
- const tidal_access = await SecureSyncEntry.has(req.session.user_id.toString(), "tidal_access_token")
+ const userData = await SecureSyncEntry.get(req.session.user_id.toString(), "vrc:user_data")
- return res.json({
- spotify: null,
- tidal: tidal_access,
- })
+ return res.json(JSON.parse(userData))
}
\ No newline at end of file
diff --git a/packages/sync_server/src/controllers/services/routes/post/tidal/delete_link.js b/packages/server/services/sync/controllers/services/routes/post/tidal/delete_link.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/post/tidal/delete_link.js
rename to packages/server/services/sync/controllers/services/routes/post/tidal/delete_link.js
diff --git a/packages/sync_server/src/controllers/services/routes/post/tidal/track/:track_id/like.js b/packages/server/services/sync/controllers/services/routes/post/tidal/track/:track_id/like.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/controllers/services/routes/post/tidal/track/:track_id/like.js
rename to packages/server/services/sync/controllers/services/routes/post/tidal/track/:track_id/like.js
diff --git a/packages/server/services/sync/controllers/services/routes/post/vrc/auth.js b/packages/server/services/sync/controllers/services/routes/post/vrc/auth.js
new file mode 100755
index 00000000..1a1f1a8b
--- /dev/null
+++ b/packages/server/services/sync/controllers/services/routes/post/vrc/auth.js
@@ -0,0 +1,57 @@
+import SecureSyncEntry from "@shared-classes/SecureSyncEntry"
+import { AuthorizationError } from "@shared-classes/Errors"
+
+import ExternalAPI from "@classes/VRCApi"
+
+export default async (req, res) => {
+ if (!req.session) {
+ return new AuthorizationError(req, res)
+ }
+
+ req.body = await req.json()
+
+ if (!req.body.username || !req.body.password) {
+ return res.status(400).json({
+ success: false,
+ error: "Missing username or password",
+ })
+ }
+
+ const currentAccessToken = await SecureSyncEntry.get(req.session.user_id.toString(), "vrc:access_token")
+
+ const result = await ExternalAPI.auth({
+ username: req.body.username,
+ password: req.body.password
+ }, currentAccessToken).catch((error) => {
+ if (error.response) {
+ console.error(error.response.data)
+
+ res.status(500).json(error.response.data.error)
+ } else {
+ res.status(500).json({
+ error: "Something went wrong",
+ })
+ }
+
+ return null
+ })
+
+ if (!result) {
+ return false
+ }
+
+ console.log(result)
+
+ if (result.cookie) {
+ await SecureSyncEntry.set(req.session.user_id.toString(), "vrc:access_token", cookie)
+ }
+
+ if (!result.requiresTwoFactorAuth) {
+ await SecureSyncEntry.set(req.session.user_id.toString(), "vrc:user_data", JSON.stringify(result))
+ }
+
+ return res.json({
+ success: result.requiresTwoFactorAuth ? true : false,
+ ...result
+ })
+}
\ No newline at end of file
diff --git a/packages/server/services/sync/controllers/services/routes/post/vrc/logout.js b/packages/server/services/sync/controllers/services/routes/post/vrc/logout.js
new file mode 100755
index 00000000..e69de29b
diff --git a/packages/server/services/sync/controllers/services/routes/post/vrc/otp.js b/packages/server/services/sync/controllers/services/routes/post/vrc/otp.js
new file mode 100755
index 00000000..e9e24c82
--- /dev/null
+++ b/packages/server/services/sync/controllers/services/routes/post/vrc/otp.js
@@ -0,0 +1,45 @@
+import SecureSyncEntry from "@shared-classes/SecureSyncEntry"
+import { AuthorizationError } from "@shared-classes/Errors"
+
+import ExternalAPI from "@classes/VRCApi"
+
+export default async (req, res) => {
+ if (!req.session) {
+ return new AuthorizationError(req, res)
+ }
+
+ req.body = await req.json()
+
+ const { type, code } = req.body
+
+ if (!type || !code) {
+ return res.status(400).json({
+ success: false,
+ error: "Missing type or code",
+ })
+ }
+
+ const authcookie = await SecureSyncEntry.get(req.session.user_id.toString(), "vrc:access_token")
+
+ const result = await ExternalAPI.verifyOtp({ type, code }, authcookie).catch((error) => {
+ if (error.response) {
+ console.error(error.response.data)
+
+ res.status(500).json(error.response.data.error)
+ } else {
+ console.error(error)
+
+ res.status(500).json({
+ error: "Something went wrong",
+ })
+ }
+
+ return null
+ })
+
+ if (!result) {
+ return false
+ }
+
+ return res.json(result)
+}
\ No newline at end of file
diff --git a/packages/sync_server/src/middlewares/withAuth/index.js b/packages/server/services/sync/middlewares/withAuth/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/middlewares/withAuth/index.js
rename to packages/server/services/sync/middlewares/withAuth/index.js
diff --git a/packages/sync_server/src/middlewares/withOptionalAuth/index.js b/packages/server/services/sync/middlewares/withOptionalAuth/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/middlewares/withOptionalAuth/index.js
rename to packages/server/services/sync/middlewares/withOptionalAuth/index.js
diff --git a/packages/sync_server/src/middlewares/withWsAuth.js b/packages/server/services/sync/middlewares/withWsAuth.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/middlewares/withWsAuth.js
rename to packages/server/services/sync/middlewares/withWsAuth.js
diff --git a/packages/server/services/sync/package.json b/packages/server/services/sync/package.json
new file mode 100755
index 00000000..a0d8962a
--- /dev/null
+++ b/packages/server/services/sync/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "sync",
+ "version": "0.60.2",
+ "license": "MIT",
+ "dependencies": {
+ "@foxify/events": "^2.1.0",
+ "axios": "^1.2.5",
+ "bcrypt": "^5.1.0",
+ "comty.js": "^0.58.2",
+ "connect-mongo": "^4.6.0",
+ "content-range": "^2.0.2",
+ "dotenv": "^16.0.3",
+ "file-api": "^0.10.4",
+ "form-data": "^4.0.0",
+ "hyper-express": "^6.5.9",
+ "jsonwebtoken": "^9.0.0",
+ "linebridge": "0.15.12",
+ "luxon": "^3.2.1",
+ "normalize-url": "^8.0.0",
+ "p-map": "^6.0.0",
+ "p-queue": "^7.3.4",
+ "qs": "^6.11.2",
+ "redis": "^4.6.6"
+ }
+}
\ No newline at end of file
diff --git a/packages/sync_server/src/api.js b/packages/server/services/sync/sync.service.js
old mode 100644
new mode 100755
similarity index 98%
rename from packages/sync_server/src/api.js
rename to packages/server/services/sync/sync.service.js
index 901fb47d..ddfa5c69
--- a/packages/sync_server/src/api.js
+++ b/packages/server/services/sync/sync.service.js
@@ -7,7 +7,7 @@ import ComtyClient from "@shared-classes/ComtyClient"
import hyperexpress from "hyper-express"
-import pkg from "../package.json"
+import pkg from "./package.json"
export default class API {
static useMiddlewaresOrder = ["useLogger", "useCors", "useAuth"]
@@ -139,4 +139,6 @@ export default class API {
// log server started
console.log(`đ Server started ready on \n\t - http://${this.listenIp}:${this.listenPort} \n\t - Tooks ${elapsedTimeInMs}ms`)
}
-}
\ No newline at end of file
+}
+
+Boot(API)
\ No newline at end of file
diff --git a/packages/sync_server/src/useMiddlewares/useAuth/index.js b/packages/server/services/sync/useMiddlewares/useAuth/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/useMiddlewares/useAuth/index.js
rename to packages/server/services/sync/useMiddlewares/useAuth/index.js
diff --git a/packages/sync_server/src/useMiddlewares/useCors/index.js b/packages/server/services/sync/useMiddlewares/useCors/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/useMiddlewares/useCors/index.js
rename to packages/server/services/sync/useMiddlewares/useCors/index.js
diff --git a/packages/sync_server/src/useMiddlewares/useLogger/index.js b/packages/server/services/sync/useMiddlewares/useLogger/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/useMiddlewares/useLogger/index.js
rename to packages/server/services/sync/useMiddlewares/useLogger/index.js
diff --git a/packages/sync_server/src/utils/composePayloadData/index.js b/packages/server/services/sync/utils/composePayloadData/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/utils/composePayloadData/index.js
rename to packages/server/services/sync/utils/composePayloadData/index.js
diff --git a/packages/sync_server/src/utils/createRoutesFromDirectory/index.js b/packages/server/services/sync/utils/createRoutesFromDirectory/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/utils/createRoutesFromDirectory/index.js
rename to packages/server/services/sync/utils/createRoutesFromDirectory/index.js
diff --git a/packages/sync_server/src/utils/generateFnHandler/index.js b/packages/server/services/sync/utils/generateFnHandler/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/utils/generateFnHandler/index.js
rename to packages/server/services/sync/utils/generateFnHandler/index.js
diff --git a/packages/sync_server/src/utils/getMiddlewares/index.js b/packages/server/services/sync/utils/getMiddlewares/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/utils/getMiddlewares/index.js
rename to packages/server/services/sync/utils/getMiddlewares/index.js
diff --git a/packages/sync_server/src/utils/resolveUrl/index.js b/packages/server/services/sync/utils/resolveUrl/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/sync_server/src/utils/resolveUrl/index.js
rename to packages/server/services/sync/utils/resolveUrl/index.js
diff --git a/packages/server/src/controllers/PublicController/endpoints/incidentPrediction.js b/packages/server/src/controllers/PublicController/endpoints/incidentPrediction.js
deleted file mode 100755
index 2e5e1917..00000000
--- a/packages/server/src/controllers/PublicController/endpoints/incidentPrediction.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { Schematized } from "../../../lib"
-import IndecentPrediction from "../../../utils/indecent-prediction"
-
-export default {
- method: "GET",
- route: "/indecent_prediction",
- fn: Schematized({
- select: ["url"],
- required: ["url"],
- }, async (req, res) => {
- const { url } = req.selection
-
- const predictions = await IndecentPrediction({
- url,
- }).catch((err) => {
- res.status(500).json({
- error: err.message,
- })
-
- return null
- })
-
- if (predictions) {
- return res.json(predictions)
- }
- })
-}
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/CacheService b/packages/server/src/shared-classes/CacheService
deleted file mode 120000
index 629d7813..00000000
--- a/packages/server/src/shared-classes/CacheService
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/CacheService
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/ComtyClient b/packages/server/src/shared-classes/ComtyClient
deleted file mode 120000
index a6e298c5..00000000
--- a/packages/server/src/shared-classes/ComtyClient
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/ComtyClient
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/DBModels b/packages/server/src/shared-classes/DBModels
deleted file mode 120000
index abf25068..00000000
--- a/packages/server/src/shared-classes/DBModels
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/DBModels
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/DbManager b/packages/server/src/shared-classes/DbManager
deleted file mode 120000
index a0357e53..00000000
--- a/packages/server/src/shared-classes/DbManager
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/DbManager
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/DbModels b/packages/server/src/shared-classes/DbModels
deleted file mode 120000
index ef29beb1..00000000
--- a/packages/server/src/shared-classes/DbModels
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/DbModels
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/Errors b/packages/server/src/shared-classes/Errors
deleted file mode 120000
index 1c5c9266..00000000
--- a/packages/server/src/shared-classes/Errors
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/Errors
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/FileUpload b/packages/server/src/shared-classes/FileUpload
deleted file mode 120000
index 77b5c6ca..00000000
--- a/packages/server/src/shared-classes/FileUpload
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/FileUpload
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/RTEngineServer b/packages/server/src/shared-classes/RTEngineServer
deleted file mode 120000
index f98e3a03..00000000
--- a/packages/server/src/shared-classes/RTEngineServer
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/RTEngineServer
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/RedisClient b/packages/server/src/shared-classes/RedisClient
deleted file mode 120000
index 61028cd6..00000000
--- a/packages/server/src/shared-classes/RedisClient
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/RedisClient
\ No newline at end of file
diff --git a/packages/server/src/shared-classes/StorageClient b/packages/server/src/shared-classes/StorageClient
deleted file mode 120000
index 103a0526..00000000
--- a/packages/server/src/shared-classes/StorageClient
+++ /dev/null
@@ -1 +0,0 @@
-/opt/comty-federated/@public/shared/classes/StorageClient
\ No newline at end of file
diff --git a/packages/server/utils/requiredFields.js b/packages/server/utils/requiredFields.js
new file mode 100644
index 00000000..6cf79c54
--- /dev/null
+++ b/packages/server/utils/requiredFields.js
@@ -0,0 +1,22 @@
+// check if exists all required fields inside the obj (can be a object or an array)
+// if is something is missing, throw an error
+export default (fields, obj) => {
+ const missing = []
+ const isArray = Array.isArray(obj)
+
+ for (const field of fields) {
+ if (isArray) {
+ if (!obj.includes(field)) {
+ missing.push(field)
+ }
+ } else {
+ if (!obj[field]) {
+ missing.push(field)
+ }
+ }
+ }
+
+ if (missing.length > 0) {
+ throw new Error(`Missing required fields: ${missing.join(", ")}`)
+ }
+}
\ No newline at end of file
diff --git a/packages/sync_server/.env-example b/packages/sync_server/.env-example
deleted file mode 100755
index 0119f1bd..00000000
--- a/packages/sync_server/.env-example
+++ /dev/null
@@ -1,20 +0,0 @@
-DB_HOSTNAME=""
-DB_NAME=""
-DB_USER=""
-DB_PWD=""
-
-S3_ENDPOINT=""
-S3_REGION=""
-S3_PORT=""
-S3_USE_SSL=""
-S3_BUCKET=""
-S3_ACCESS_KEY=""
-S3_SECRET_KEY=""
-
-REDIS_HOST=""
-REDIS_PORT=""
-REDIS_USERNAME=""
-REDIS_PASSWORD=""
-
-COMTY_ACCESS_KEY=""
-COMTY_SECRET_KEY=""
\ No newline at end of file
diff --git a/packages/sync_server/.gitignore b/packages/sync_server/.gitignore
deleted file mode 100644
index 0dd1cacd..00000000
--- a/packages/sync_server/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/static
-shared-classes
\ No newline at end of file
diff --git a/packages/sync_server/.infisical.json b/packages/sync_server/.infisical.json
deleted file mode 100644
index fb927147..00000000
--- a/packages/sync_server/.infisical.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "workspaceId": "64519574a8a691b55e8b361d",
- "defaultEnvironment": "dev",
- "gitBranchToEnvironmentMapping": {
- "master": "prod"
- }
-}
\ No newline at end of file
diff --git a/packages/sync_server/Dockerfile b/packages/sync_server/Dockerfile
deleted file mode 100755
index 5f409399..00000000
--- a/packages/sync_server/Dockerfile
+++ /dev/null
@@ -1,27 +0,0 @@
-FROM node:16-bullseye-slim
-
-RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
-
-RUN apt update
-RUN apt install --no-install-recommends curl python yarn build-essential -y
-
-RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
-
-# Copy comty.js to node_modules
-WORKDIR /home/node/app
-USER node
-
-EXPOSE 3070
-
-COPY package.json ./
-COPY --chown=node:node . .
-
-RUN chmod -R 777 /home/node/app
-
-RUN export NODE_ENV=production
-
-RUN yarn global add cross-env
-RUN yarn install --production
-RUN yarn build
-
-CMD ["yarn", "run", "run:prod"]
\ No newline at end of file
diff --git a/packages/sync_server/package.json b/packages/sync_server/package.json
deleted file mode 100644
index 2500ff20..00000000
--- a/packages/sync_server/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "@comty/sync_server",
- "version": "0.60.3",
- "main": "dist/index.js",
- "scripts": {
- "build": "hermes build",
- "dev": "cross-env NODE_ENV=development nodemon --ignore dist/ --exec hermes-node ./src/index.js",
- "run:prod": "cross-env NODE_ENV=production node ./dist/index.js"
- },
- "shared": {
- "classes/FileUpload": "src/shared-classes/FileUpload",
- "classes/CacheService": "src/shared-classes/CacheService",
- "classes/ComtyClient": "src/shared-classes/ComtyClient",
- "classes/RedisClient": "src/shared-classes/RedisClient",
- "classes/StorageClient": "src/shared-classes/StorageClient",
- "classes/DbManager": "src/shared-classes/DbManager",
- "classes/Errors": "src/shared-classes/Errors",
- "classes/DbModels": "src/shared-classes/DbModels",
- "classes/SecureSyncEntry": "src/shared-classes/SecureSyncEntry",
- "classes/TidalAPI": "src/shared-classes/TidalAPI"
- },
- "license": "MIT",
- "dependencies": {
- "@foxify/events": "^2.1.0",
- "axios": "^1.2.5",
- "bcrypt": "^5.1.0",
- "comty.js": "^0.58.2",
- "connect-mongo": "^4.6.0",
- "content-range": "^2.0.2",
- "dotenv": "^16.0.3",
- "file-api": "^0.10.4",
- "form-data": "^4.0.0",
- "hyper-express": "^6.5.9",
- "jsonwebtoken": "^9.0.0",
- "linebridge": "0.15.12",
- "luxon": "^3.2.1",
- "normalize-url": "^8.0.0",
- "p-map": "^6.0.0",
- "p-queue": "^7.3.4",
- "qs": "^6.11.2",
- "redis": "^4.6.6"
- },
- "devDependencies": {
- "@corenode/utils": "0.28.26",
- "chai": "^4.3.7",
- "corenode": "0.28.26",
- "cross-env": "^7.0.3",
- "mocha": "^10.2.0",
- "nodemon": "^2.0.15"
- }
-}
\ No newline at end of file
diff --git a/packages/sync_server/src/index.js b/packages/sync_server/src/index.js
deleted file mode 100644
index 9a830edd..00000000
--- a/packages/sync_server/src/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import path from "path"
-global.FORCE_ENV = "prod"
-
-require(path.resolve(process.cwd(), "../../shared/lib/api_wrapper"))
\ No newline at end of file
diff --git a/scripts/docker-build.js b/scripts/docker-build.js
old mode 100644
new mode 100755
diff --git a/scripts/post-deploy.js b/scripts/post-deploy.js
old mode 100644
new mode 100755
diff --git a/scripts/post-install.js b/scripts/post-install.js
old mode 100644
new mode 100755
index 1c953a81..b7d5bc85
--- a/scripts/post-install.js
+++ b/scripts/post-install.js
@@ -95,7 +95,7 @@ async function linkInternalSubmodules(packages) {
if (!fs.existsSync(packageJsonPath)) {
continue
}
-
+
await child_process.execSync(`yarn link "linebridge"`, {
cwd: packagePath,
stdio: "inherit",
@@ -115,15 +115,7 @@ async function main() {
// read dir with absolute paths
let packages = await getPackages()
- await linkInternalSubmodules(packages)
-
- console.log("Rebuilding TFJS...")
-
- await child_process.execSync("npm rebuild @tensorflow/tfjs-node --build-from-source", {
- cwd: rootPath,
- stdio: "inherit",
- })
-
+ // link shared resources
for (const packageName of packages) {
const packagePath = path.resolve(packagesPath, packageName)
@@ -142,6 +134,20 @@ async function main() {
}
}
+ // link internal submodules
+ await linkInternalSubmodules(packages)
+
+ // fixes for arm architecture
+ if (process.arch == "arm64") {
+ // rebuild tfjs
+ console.log("Rebuilding TFJS...")
+
+ await child_process.execSync("npm rebuild @tensorflow/tfjs-node --build-from-source", {
+ cwd: rootPath,
+ stdio: "inherit",
+ })
+ }
+
console.timeEnd("â
post-install tooks:")
}
diff --git a/scripts/publishWidget.js b/scripts/publishWidget.js
old mode 100644
new mode 100755
diff --git a/scripts/utils/bumpVersion.js b/scripts/utils/bumpVersion.js
old mode 100644
new mode 100755
diff --git a/scripts/utils/composeChangelog.js b/scripts/utils/composeChangelog.js
old mode 100644
new mode 100755
diff --git a/scripts/utils/getPackages.js b/scripts/utils/getPackages.js
old mode 100644
new mode 100755
diff --git a/shared/classes/CacheService/index.js b/shared/classes/CacheService/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/ComtyClient/index.js b/shared/classes/ComtyClient/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/DbModels/NFCTags/index.js b/shared/classes/DbModels/NFCTags/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/DbModels/featuredPlaylist/index.js b/shared/classes/DbModels/featuredPlaylist/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/DbModels/release/index.js b/shared/classes/DbModels/release/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/DbModels/serverLimit/index.js b/shared/classes/DbModels/serverLimit/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/DbModels/streamingProfile/index.js b/shared/classes/DbModels/streamingProfile/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/DbModels/track_like/index.js b/shared/classes/DbModels/track_like/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/DbModels/widget/index.js b/shared/classes/DbModels/widget/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/Errors/index.js b/shared/classes/Errors/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/FileUpload/index.js b/shared/classes/FileUpload/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/RedisClient/index.js b/shared/classes/RedisClient/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/SecureSyncEntry/index.js b/shared/classes/SecureSyncEntry/index.js
old mode 100644
new mode 100755
diff --git a/shared/classes/TidalAPI/index.js b/shared/classes/TidalAPI/index.js
old mode 100644
new mode 100755
diff --git a/shared/lib/api_wrapper/index.js b/shared/lib/api_wrapper/index.js
old mode 100644
new mode 100755
diff --git a/packages/wrapper/Dockerfile b/wrapper/Dockerfile
similarity index 100%
rename from packages/wrapper/Dockerfile
rename to wrapper/Dockerfile
diff --git a/packages/wrapper/package.json b/wrapper/package.json
similarity index 100%
rename from packages/wrapper/package.json
rename to wrapper/package.json
diff --git a/wrapper/src/ascii.js b/wrapper/src/ascii.js
new file mode 100755
index 00000000..a9881a92
--- /dev/null
+++ b/wrapper/src/ascii.js
@@ -0,0 +1 @@
+module.exports = " _ \r\n | | \r\n ___ ___ _ __ ___ | |_ _ _ \r\n \/ __\/ _ \\| \'_ ` _ \\| __| | | |\r\n | (_| (_) | | | | | | |_| |_| |\r\n \\___\\___\/|_| |_| |_|\\__|\\__, |\r\n __\/ |\r\n |___\/ "
\ No newline at end of file
diff --git a/packages/wrapper/src/globals.js b/wrapper/src/globals.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/wrapper/src/globals.js
rename to wrapper/src/globals.js
diff --git a/packages/wrapper/src/index.js b/wrapper/src/index.js
similarity index 100%
rename from packages/wrapper/src/index.js
rename to wrapper/src/index.js
diff --git a/wrapper/src/lib/getInternalIp.js b/wrapper/src/lib/getInternalIp.js
new file mode 100755
index 00000000..f1024394
--- /dev/null
+++ b/wrapper/src/lib/getInternalIp.js
@@ -0,0 +1,12 @@
+const dns = require("dns")
+const os = require("os")
+
+module.exports = () => new Promise((resolve, reject) => {
+ dns.lookup(os.hostname(), (err, address, family) => {
+ if (err) {
+ reject(err)
+ }
+
+ resolve(address)
+ })
+})
\ No newline at end of file
diff --git a/packages/wrapper/src/lib/setupDist.js b/wrapper/src/lib/setupDist.js
similarity index 100%
rename from packages/wrapper/src/lib/setupDist.js
rename to wrapper/src/lib/setupDist.js
diff --git a/packages/wrapper/src/lib/useLogger/index.js b/wrapper/src/lib/useLogger/index.js
old mode 100644
new mode 100755
similarity index 100%
rename from packages/wrapper/src/lib/useLogger/index.js
rename to wrapper/src/lib/useLogger/index.js