mirror of
https://github.com/MercuryWorkshop/adrift.git
synced 2025-05-12 22:00:02 -04:00
monorepo part 1
This commit is contained in:
parent
aa838cbff6
commit
2138e02613
26 changed files with 681 additions and 14437 deletions
34
client/tsconfig.json
Normal file
34
client/tsconfig.json
Normal file
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"experimentalDecorators": true,
|
||||
"baseUrl": ".",
|
||||
"outDir": "build/dist",
|
||||
"module": "esnext",
|
||||
"target": "es2017",
|
||||
"lib": ["es6", "dom", "esnext.asynciterable", "es2017"],
|
||||
"sourceMap": true,
|
||||
"allowJs": true,
|
||||
"jsx": "react",
|
||||
"moduleResolution": "node",
|
||||
"rootDir": "src",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noImplicitReturns": true,
|
||||
"noImplicitThis": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true,
|
||||
"suppressImplicitAnyIndexErrors": true,
|
||||
"noUnusedLocals": true,
|
||||
"skipLibCheck": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"removeComments": true
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
"build",
|
||||
"scripts",
|
||||
"acceptance-tests",
|
||||
"webpack",
|
||||
"jest",
|
||||
"src/setupTests.ts"
|
||||
]
|
||||
}
|
15
firebase-config/package.json
Normal file
15
firebase-config/package.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"name": "firebase-config",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "src/index.ts",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"firebase": "^10.1.0"
|
||||
}
|
||||
}
|
|
@ -2,7 +2,6 @@
|
|||
import { initializeApp } from "firebase/app";
|
||||
|
||||
import { getAuth } from "firebase/auth";
|
||||
import { getAnalytics } from "firebase/analytics";
|
||||
// TODO: Add SDKs for Firebase products that you want to use
|
||||
// https://firebase.google.com/docs/web/setup#available-libraries
|
||||
|
||||
|
@ -15,8 +14,7 @@ const firebaseConfig = {
|
|||
storageBucket: "adrift-6c1f6.appspot.com",
|
||||
messagingSenderId: "175846512414",
|
||||
appId: "1:175846512414:web:5c6e06d231ab58e9029b0f",
|
||||
measurementId: "G-L0P2EF6Q72"
|
||||
|
||||
measurementId: "G-L0P2EF6Q72",
|
||||
};
|
||||
console.warn("firebase is initializing");
|
||||
|
28
firebase-config/tsconfig.json
Normal file
28
firebase-config/tsconfig.json
Normal file
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2017",
|
||||
"module": "commonjs",
|
||||
"lib": ["dom", "es6", "es2017", "esnext.asynciterable"],
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"outDir": "./dist",
|
||||
"moduleResolution": "node",
|
||||
"removeComments": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true,
|
||||
"strictFunctionTypes": true,
|
||||
"noImplicitThis": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"esModuleInterop": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"resolveJsonModule": true,
|
||||
"baseUrl": "."
|
||||
},
|
||||
"exclude": ["node_modules"],
|
||||
"include": ["./src/**/*.ts"]
|
||||
}
|
26
frontend/package.json
Normal file
26
frontend/package.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"name": "frontend",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"watch": "vite build --watch"
|
||||
},
|
||||
"keywords": [],
|
||||
"type": "module",
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@sveltejs/vite-plugin-svelte": "^2.4.5",
|
||||
"firebase": "^10.1.0",
|
||||
"svelte": "^4.2.0",
|
||||
"svelte-preprocess": "^5.0.4",
|
||||
"typescript": "^5.1.6",
|
||||
"vite": "^4.4.9",
|
||||
"vite-plugin-singlefile": "^0.13.5",
|
||||
"vite-plugin-svelte": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {}
|
||||
}
|
|
@ -1,96 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||
/* Projects */
|
||||
// "incremental": true, /* Enable incremental compilation */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
/* Language and Environment */
|
||||
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
"jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
|
||||
// "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
/* Modules */
|
||||
"module": "esnext", /* Specify what module code is generated. */
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
"paths": [
|
||||
"./",
|
||||
"./src/*"
|
||||
], /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files */
|
||||
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
||||
/* Type Checking */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
"noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
|
||||
// "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
}
|
||||
}
|
13311
package-lock.json
generated
13311
package-lock.json
generated
File diff suppressed because it is too large
Load diff
34
package.json
34
package.json
|
@ -4,39 +4,9 @@
|
|||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"watch": "vite build --watch"
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"type": "module",
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@digitak/esrun": "^3.2.24",
|
||||
"@sveltejs/vite-plugin-svelte": "^2.4.5",
|
||||
"@tomphttp/bare-client": "^2.2.0-alpha",
|
||||
"@types/webrtc": "^0.0.36",
|
||||
"bare-client-custom": "file:bare-client-custom",
|
||||
"corium": "file:corium",
|
||||
"dotenv": "^16.3.1",
|
||||
"express": "^4.18.2",
|
||||
"express-ws": "^5.0.2",
|
||||
"firebase": "^10.1.0",
|
||||
"ipaddr.js": "^2.1.0",
|
||||
"svelte": "^4.2.0",
|
||||
"svelte-preprocess": "^5.0.4",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^5.1.6",
|
||||
"vite": "^4.4.9",
|
||||
"vite-plugin-singlefile": "^0.13.5",
|
||||
"vite-plugin-svelte": "^3.0.1",
|
||||
"wrtc": "^0.4.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.17",
|
||||
"@types/express-ws": "^3.0.1",
|
||||
"@types/node": "^20.4.10",
|
||||
"nodemon": "^3.0.1"
|
||||
}
|
||||
"license": "ISC"
|
||||
}
|
504
pnpm-lock.yaml
generated
504
pnpm-lock.yaml
generated
|
@ -1,28 +1,50 @@
|
|||
lockfileVersion: '6.1'
|
||||
lockfileVersion: '6.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
dependencies:
|
||||
'@digitak/esrun':
|
||||
specifier: ^3.2.24
|
||||
version: 3.2.24
|
||||
importers:
|
||||
|
||||
.: {}
|
||||
|
||||
firebase-config:
|
||||
dependencies:
|
||||
firebase:
|
||||
specifier: ^10.1.0
|
||||
version: 10.1.0(react-native@0.72.3)
|
||||
|
||||
frontend:
|
||||
dependencies:
|
||||
'@sveltejs/vite-plugin-svelte':
|
||||
specifier: ^2.4.5
|
||||
version: 2.4.5(svelte@4.2.0)(vite@4.4.9)
|
||||
'@tomphttp/bare-client':
|
||||
specifier: ^2.2.0-alpha
|
||||
version: 2.2.0-alpha
|
||||
'@types/webrtc':
|
||||
specifier: ^0.0.36
|
||||
version: 0.0.36
|
||||
bare-client-custom:
|
||||
specifier: file:bare-client-custom
|
||||
version: file:bare-client-custom
|
||||
corium:
|
||||
specifier: file:corium
|
||||
version: file:corium
|
||||
firebase:
|
||||
specifier: ^10.1.0
|
||||
version: 10.1.0(react-native@0.72.3)
|
||||
svelte:
|
||||
specifier: ^4.2.0
|
||||
version: 4.2.0
|
||||
svelte-preprocess:
|
||||
specifier: ^5.0.4
|
||||
version: 5.0.4(@babel/core@7.22.10)(svelte@4.2.0)(typescript@5.1.6)
|
||||
typescript:
|
||||
specifier: ^5.1.6
|
||||
version: 5.1.6
|
||||
vite:
|
||||
specifier: ^4.4.9
|
||||
version: 4.4.9
|
||||
vite-plugin-singlefile:
|
||||
specifier: ^0.13.5
|
||||
version: 0.13.5(rollup@3.28.0)(vite@4.4.9)
|
||||
vite-plugin-svelte:
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1(rollup@3.28.0)(svelte@4.2.0)(vite@4.4.9)
|
||||
|
||||
protocol: {}
|
||||
|
||||
server:
|
||||
dependencies:
|
||||
dotenv:
|
||||
specifier: ^16.3.1
|
||||
version: 16.3.1
|
||||
|
@ -35,35 +57,25 @@ dependencies:
|
|||
firebase:
|
||||
specifier: ^10.1.0
|
||||
version: 10.1.0(react-native@0.72.3)
|
||||
firebase-config:
|
||||
specifier: workspace:*
|
||||
version: link:../firebase-config
|
||||
ipaddr.js:
|
||||
specifier: ^2.1.0
|
||||
version: 2.1.0
|
||||
svelte:
|
||||
specifier: ^4.2.0
|
||||
version: 4.2.0
|
||||
svelte-preprocess:
|
||||
specifier: ^5.0.4
|
||||
version: 5.0.4(@babel/core@7.22.10)(svelte@4.2.0)(typescript@5.1.6)
|
||||
protocol:
|
||||
specifier: workspace:*
|
||||
version: link:../protocol
|
||||
ts-node:
|
||||
specifier: ^10.9.1
|
||||
version: 10.9.1(@types/node@20.4.10)(typescript@5.1.6)
|
||||
typescript:
|
||||
specifier: ^5.1.6
|
||||
version: 5.1.6
|
||||
vite:
|
||||
specifier: ^4.4.9
|
||||
version: 4.4.9(@types/node@20.4.10)
|
||||
vite-plugin-singlefile:
|
||||
specifier: ^0.13.5
|
||||
version: 0.13.5(rollup@3.28.0)(vite@4.4.9)
|
||||
vite-plugin-svelte:
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1(rollup@3.28.0)(svelte@4.2.0)(vite@4.4.9)
|
||||
wrtc:
|
||||
specifier: ^0.4.7
|
||||
version: 0.4.7
|
||||
|
||||
devDependencies:
|
||||
devDependencies:
|
||||
'@types/express':
|
||||
specifier: ^4.17.17
|
||||
version: 4.17.17
|
||||
|
@ -73,6 +85,9 @@ devDependencies:
|
|||
'@types/node':
|
||||
specifier: ^20.4.10
|
||||
version: 20.4.10
|
||||
'@types/webrtc':
|
||||
specifier: ^0.0.36
|
||||
version: 0.0.36
|
||||
nodemon:
|
||||
specifier: ^3.0.1
|
||||
version: 3.0.1
|
||||
|
@ -1507,29 +1522,6 @@ packages:
|
|||
'@jridgewell/trace-mapping': 0.3.9
|
||||
dev: false
|
||||
|
||||
/@digitak/esrun@3.2.24:
|
||||
resolution: {integrity: sha512-HvD1eSuZVBaFZpKU/kl2rzDELCAbAnrFO2in855IrX15Zji4sdrekiEQph+eq5W5xjCyc254zx/Bh8RM2216mg==}
|
||||
engines: {node: '>=14.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@digitak/grubber': 3.1.4
|
||||
chokidar: 3.5.3
|
||||
esbuild: 0.17.19
|
||||
dev: false
|
||||
|
||||
/@digitak/grubber@3.1.4:
|
||||
resolution: {integrity: sha512-pqsnp2BUYlDoTXWG34HWgEJse/Eo1okRgNex8IG84wHrJp8h3SakeR5WhB4VxSA2+/D+frNYJ0ch3yXzsfNDoA==}
|
||||
dev: false
|
||||
|
||||
/@esbuild/android-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1539,15 +1531,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm@0.17.19:
|
||||
resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm@0.18.20:
|
||||
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1557,15 +1540,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-x64@0.17.19:
|
||||
resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-x64@0.18.20:
|
||||
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1575,15 +1549,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1593,15 +1558,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-x64@0.17.19:
|
||||
resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-x64@0.18.20:
|
||||
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1611,15 +1567,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1629,15 +1576,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-x64@0.17.19:
|
||||
resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-x64@0.18.20:
|
||||
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1647,15 +1585,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1665,15 +1594,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm@0.17.19:
|
||||
resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm@0.18.20:
|
||||
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1683,15 +1603,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ia32@0.17.19:
|
||||
resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ia32@0.18.20:
|
||||
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1701,15 +1612,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-loong64@0.17.19:
|
||||
resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-loong64@0.18.20:
|
||||
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1719,15 +1621,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-mips64el@0.17.19:
|
||||
resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-mips64el@0.18.20:
|
||||
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1737,15 +1630,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ppc64@0.17.19:
|
||||
resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ppc64@0.18.20:
|
||||
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1755,15 +1639,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-riscv64@0.17.19:
|
||||
resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-riscv64@0.18.20:
|
||||
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1773,15 +1648,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-s390x@0.17.19:
|
||||
resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-s390x@0.18.20:
|
||||
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1791,15 +1657,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-x64@0.17.19:
|
||||
resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-x64@0.18.20:
|
||||
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1809,15 +1666,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/netbsd-x64@0.17.19:
|
||||
resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/netbsd-x64@0.18.20:
|
||||
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1827,15 +1675,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/openbsd-x64@0.17.19:
|
||||
resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/openbsd-x64@0.18.20:
|
||||
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1845,15 +1684,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/sunos-x64@0.17.19:
|
||||
resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/sunos-x64@0.18.20:
|
||||
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1863,15 +1693,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-arm64@0.17.19:
|
||||
resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-arm64@0.18.20:
|
||||
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1881,15 +1702,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-ia32@0.17.19:
|
||||
resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-ia32@0.18.20:
|
||||
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -1899,15 +1711,6 @@ packages:
|
|||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-x64@0.17.19:
|
||||
resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-x64@0.18.20:
|
||||
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -2385,7 +2188,7 @@ packages:
|
|||
'@types/long': 4.0.2
|
||||
lodash.camelcase: 4.3.0
|
||||
long: 4.0.0
|
||||
protobufjs: 6.11.3
|
||||
protobufjs: 6.11.4
|
||||
yargs: 16.2.0
|
||||
dev: false
|
||||
|
||||
|
@ -2794,8 +2597,8 @@ packages:
|
|||
resolution: {integrity: sha512-285lfdqSXaqKuBbbtP9qL2tDrfxdOFtIMvkKadtleRQkdOxx+uzGvFr82KHmc/sSiMtfXGp7JnFYWVh4sFl7Yw==}
|
||||
dev: false
|
||||
|
||||
/@react-native/virtualized-lists@0.72.6(react-native@0.72.3):
|
||||
resolution: {integrity: sha512-JhT6ydu35LvbSKdwnhWDuGHMOwM0WAh9oza/X8vXHA8ELHRyQ/4p8eKz/bTQcbQziJaaleUURToGhFuCtgiMoA==}
|
||||
/@react-native/virtualized-lists@0.72.8(react-native@0.72.3):
|
||||
resolution: {integrity: sha512-J3Q4Bkuo99k7mu+jPS9gSUSgq+lLRSI/+ahXNwV92XgJ/8UgOTxu2LPwhJnBk/sQKxq7E8WkZBnBiozukQMqrw==}
|
||||
peerDependencies:
|
||||
react-native: '*'
|
||||
dependencies:
|
||||
|
@ -2804,10 +2607,6 @@ packages:
|
|||
react-native: 0.72.3(@babel/core@7.22.10)(@babel/preset-env@7.22.10)(react@18.2.0)
|
||||
dev: false
|
||||
|
||||
/@rollup/browser@3.28.0:
|
||||
resolution: {integrity: sha512-7U9WFjEArYZF0GVz/durys8tzBePwu4HkI5yxDmaRFn0B0qH1yabvworYZiGZYhevlZ+jDFAU4gKgF0gNsANDg==}
|
||||
dev: false
|
||||
|
||||
/@sideway/address@4.1.4:
|
||||
resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==}
|
||||
dependencies:
|
||||
|
@ -2849,7 +2648,7 @@ packages:
|
|||
'@sveltejs/vite-plugin-svelte': 2.4.5(svelte@4.2.0)(vite@4.4.9)
|
||||
debug: 4.3.4
|
||||
svelte: 4.2.0
|
||||
vite: 4.4.9(@types/node@20.4.10)
|
||||
vite: 4.4.9
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
@ -2868,26 +2667,12 @@ packages:
|
|||
magic-string: 0.30.2
|
||||
svelte: 4.2.0
|
||||
svelte-hmr: 0.15.3(svelte@4.2.0)
|
||||
vite: 4.4.9(@types/node@20.4.10)
|
||||
vite: 4.4.9
|
||||
vitefu: 0.2.4(vite@4.4.9)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/@swc/helpers@0.4.14:
|
||||
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
|
||||
dependencies:
|
||||
tslib: 2.6.1
|
||||
dev: false
|
||||
|
||||
/@tomphttp/bare-client@1.1.2-beta.3:
|
||||
resolution: {integrity: sha512-WyIVnSAqzfrLejmOhh/l/LtDOeK+SHnBGi/z+QyliVP1T1JxoNE5eecwxlV+osM9J6FTAYVGNHr8/5bubaIj6Q==}
|
||||
dev: false
|
||||
|
||||
/@tomphttp/bare-client@2.2.0-alpha:
|
||||
resolution: {integrity: sha512-xhcflOpwr92tkpp8SoDhB3nK3LHMBIjx+vgow37XobQew2k0/mXSxmaU7BsDFpOIa1CcLCEsR8gWn0v7Cy9+7Q==}
|
||||
dev: false
|
||||
|
||||
/@tsconfig/node10@1.0.9:
|
||||
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
|
||||
dev: false
|
||||
|
@ -2917,10 +2702,6 @@ packages:
|
|||
'@types/node': 20.4.10
|
||||
dev: true
|
||||
|
||||
/@types/escodegen@0.0.7:
|
||||
resolution: {integrity: sha512-46oENdSRNEJXCNrPJoC3vRolZJpfeEm7yvATkd2bCncKFG0PUEyfBCaoacfpcXH4Y5RRuqdVj3J7TI+wwn2SbQ==}
|
||||
dev: false
|
||||
|
||||
/@types/estree@1.0.1:
|
||||
resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
|
||||
dev: false
|
||||
|
@ -3017,13 +2798,9 @@ packages:
|
|||
resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
|
||||
dev: false
|
||||
|
||||
/@types/uuid@9.0.2:
|
||||
resolution: {integrity: sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==}
|
||||
dev: false
|
||||
|
||||
/@types/webrtc@0.0.36:
|
||||
resolution: {integrity: sha512-tYFarc92EluXU7XyRmWbkQXSbZIOHTdDOudFPal9u/TNTQuouWpIHV/2o9bNAdqvTJFjLJh/zflCOLWbL30tEQ==}
|
||||
dev: false
|
||||
dev: true
|
||||
|
||||
/@types/ws@8.5.5:
|
||||
resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==}
|
||||
|
@ -3071,13 +2848,6 @@ packages:
|
|||
negotiator: 0.6.3
|
||||
dev: false
|
||||
|
||||
/acorn-loose@8.3.0:
|
||||
resolution: {integrity: sha512-75lAs9H19ldmW+fAbyqHdjgdCrz0pWGXKmnqFoh8PyVd1L2RIb4RzYrSjmopeqv3E1G3/Pimu6GgLlrGbrkF7w==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
dependencies:
|
||||
acorn: 8.10.0
|
||||
dev: false
|
||||
|
||||
/acorn-walk@8.2.0:
|
||||
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
|
@ -3181,13 +2951,6 @@ packages:
|
|||
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
|
||||
dev: false
|
||||
|
||||
/ast-types@0.14.2:
|
||||
resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==}
|
||||
engines: {node: '>=4'}
|
||||
dependencies:
|
||||
tslib: 2.6.1
|
||||
dev: false
|
||||
|
||||
/ast-types@0.15.2:
|
||||
resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==}
|
||||
engines: {node: '>=4'}
|
||||
|
@ -3315,6 +3078,7 @@ packages:
|
|||
/binary-extensions@2.2.0:
|
||||
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
|
||||
engines: {node: '>=8'}
|
||||
dev: true
|
||||
|
||||
/bl@4.1.0:
|
||||
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
|
||||
|
@ -3468,6 +3232,7 @@ packages:
|
|||
readdirp: 3.6.0
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.2
|
||||
dev: true
|
||||
|
||||
/chownr@1.1.4:
|
||||
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
|
||||
|
@ -3573,10 +3338,6 @@ packages:
|
|||
resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==}
|
||||
dev: false
|
||||
|
||||
/comlink@4.4.1:
|
||||
resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==}
|
||||
dev: false
|
||||
|
||||
/command-exists@1.2.9:
|
||||
resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==}
|
||||
dev: false
|
||||
|
@ -3871,36 +3632,6 @@ packages:
|
|||
resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
|
||||
dev: false
|
||||
|
||||
/esbuild@0.17.19:
|
||||
resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
|
||||
engines: {node: '>=12'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
optionalDependencies:
|
||||
'@esbuild/android-arm': 0.17.19
|
||||
'@esbuild/android-arm64': 0.17.19
|
||||
'@esbuild/android-x64': 0.17.19
|
||||
'@esbuild/darwin-arm64': 0.17.19
|
||||
'@esbuild/darwin-x64': 0.17.19
|
||||
'@esbuild/freebsd-arm64': 0.17.19
|
||||
'@esbuild/freebsd-x64': 0.17.19
|
||||
'@esbuild/linux-arm': 0.17.19
|
||||
'@esbuild/linux-arm64': 0.17.19
|
||||
'@esbuild/linux-ia32': 0.17.19
|
||||
'@esbuild/linux-loong64': 0.17.19
|
||||
'@esbuild/linux-mips64el': 0.17.19
|
||||
'@esbuild/linux-ppc64': 0.17.19
|
||||
'@esbuild/linux-riscv64': 0.17.19
|
||||
'@esbuild/linux-s390x': 0.17.19
|
||||
'@esbuild/linux-x64': 0.17.19
|
||||
'@esbuild/netbsd-x64': 0.17.19
|
||||
'@esbuild/openbsd-x64': 0.17.19
|
||||
'@esbuild/sunos-x64': 0.17.19
|
||||
'@esbuild/win32-arm64': 0.17.19
|
||||
'@esbuild/win32-ia32': 0.17.19
|
||||
'@esbuild/win32-x64': 0.17.19
|
||||
dev: false
|
||||
|
||||
/esbuild@0.18.20:
|
||||
resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
|
||||
engines: {node: '>=12'}
|
||||
|
@ -3950,29 +3681,12 @@ packages:
|
|||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/escodegen@2.1.0:
|
||||
resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
|
||||
engines: {node: '>=6.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
esprima: 4.0.1
|
||||
estraverse: 5.3.0
|
||||
esutils: 2.0.3
|
||||
optionalDependencies:
|
||||
source-map: 0.6.1
|
||||
dev: false
|
||||
|
||||
/esprima@4.0.1:
|
||||
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/estraverse@5.3.0:
|
||||
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
|
||||
engines: {node: '>=4.0'}
|
||||
dev: false
|
||||
|
||||
/estree-walker@0.6.1:
|
||||
resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
|
||||
dev: false
|
||||
|
@ -4278,6 +3992,7 @@ packages:
|
|||
engines: {node: '>= 6'}
|
||||
dependencies:
|
||||
is-glob: 4.0.3
|
||||
dev: true
|
||||
|
||||
/glob@7.2.3:
|
||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||
|
@ -4460,6 +4175,7 @@ packages:
|
|||
engines: {node: '>=8'}
|
||||
dependencies:
|
||||
binary-extensions: 2.2.0
|
||||
dev: true
|
||||
|
||||
/is-core-module@2.13.0:
|
||||
resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
|
||||
|
@ -4475,6 +4191,7 @@ packages:
|
|||
/is-extglob@2.1.1:
|
||||
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/is-fullwidth-code-point@1.0.0:
|
||||
resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==}
|
||||
|
@ -4498,6 +4215,7 @@ packages:
|
|||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
is-extglob: 2.1.1
|
||||
dev: true
|
||||
|
||||
/is-interactive@1.0.0:
|
||||
resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
|
||||
|
@ -4895,11 +4613,6 @@ packages:
|
|||
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
|
||||
dev: false
|
||||
|
||||
/meriyah@4.3.7:
|
||||
resolution: {integrity: sha512-JAlSOUqFU/rmLy2CEdZO5hN5E5dyUj1f4AlRR4GCQMjfobvd5lcm9JLkrqq0MgVaLQ/Zur590A+0RyUZhj0b5A==}
|
||||
engines: {node: '>=10.4.0'}
|
||||
dev: false
|
||||
|
||||
/methods@1.1.2:
|
||||
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
|
||||
engines: {node: '>= 0.6'}
|
||||
|
@ -5725,8 +5438,8 @@ packages:
|
|||
react-is: 16.13.1
|
||||
dev: false
|
||||
|
||||
/protobufjs@6.11.3:
|
||||
resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==}
|
||||
/protobufjs@6.11.4:
|
||||
resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
|
@ -5772,19 +5485,10 @@ packages:
|
|||
ipaddr.js: 1.9.1
|
||||
dev: false
|
||||
|
||||
/psl@1.9.0:
|
||||
resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==}
|
||||
dev: false
|
||||
|
||||
/pstree.remy@1.1.8:
|
||||
resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==}
|
||||
dev: true
|
||||
|
||||
/punycode@2.3.0:
|
||||
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/qs@6.11.0:
|
||||
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
|
||||
engines: {node: '>=0.6'}
|
||||
|
@ -5792,10 +5496,6 @@ packages:
|
|||
side-channel: 1.0.4
|
||||
dev: false
|
||||
|
||||
/querystringify@2.2.0:
|
||||
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
|
||||
dev: false
|
||||
|
||||
/queue@6.0.2:
|
||||
resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
|
||||
dependencies:
|
||||
|
@ -5865,7 +5565,7 @@ packages:
|
|||
'@react-native/gradle-plugin': 0.72.11
|
||||
'@react-native/js-polyfills': 0.72.1
|
||||
'@react-native/normalize-colors': 0.72.0
|
||||
'@react-native/virtualized-lists': 0.72.6(react-native@0.72.3)
|
||||
'@react-native/virtualized-lists': 0.72.8(react-native@0.72.3)
|
||||
abort-controller: 3.0.0
|
||||
anser: 1.4.10
|
||||
base64-js: 1.5.1
|
||||
|
@ -5950,6 +5650,7 @@ packages:
|
|||
engines: {node: '>=8.10.0'}
|
||||
dependencies:
|
||||
picomatch: 2.3.1
|
||||
dev: true
|
||||
|
||||
/readline@1.3.0:
|
||||
resolution: {integrity: sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==}
|
||||
|
@ -6022,10 +5723,6 @@ packages:
|
|||
resolution: {integrity: sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==}
|
||||
dev: false
|
||||
|
||||
/requires-port@1.0.0:
|
||||
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
|
||||
dev: false
|
||||
|
||||
/resolve-from@3.0.0:
|
||||
resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==}
|
||||
engines: {node: '>=4'}
|
||||
|
@ -6290,11 +5987,6 @@ packages:
|
|||
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
|
||||
dev: false
|
||||
|
||||
/srcset@5.0.0:
|
||||
resolution: {integrity: sha512-SqEZaAEhe0A6ETEa9O1IhSPC7MdvehZtCnTR0AftXk3QhY2UNgb+NApFOUPZILXk/YTDfFxMTNJOBpzrJsEdIA==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
dev: false
|
||||
|
||||
/stack-utils@2.0.6:
|
||||
resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
|
||||
engines: {node: '>=10'}
|
||||
|
@ -6577,16 +6269,6 @@ packages:
|
|||
nopt: 1.0.10
|
||||
dev: true
|
||||
|
||||
/tough-cookie@4.1.3:
|
||||
resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
|
||||
engines: {node: '>=6'}
|
||||
dependencies:
|
||||
psl: 1.9.0
|
||||
punycode: 2.3.0
|
||||
universalify: 0.2.0
|
||||
url-parse: 1.5.10
|
||||
dev: false
|
||||
|
||||
/tr46@0.0.3:
|
||||
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
|
||||
dev: false
|
||||
|
@ -6692,11 +6374,6 @@ packages:
|
|||
engines: {node: '>= 4.0.0'}
|
||||
dev: false
|
||||
|
||||
/universalify@0.2.0:
|
||||
resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
|
||||
engines: {node: '>= 4.0.0'}
|
||||
dev: false
|
||||
|
||||
/unpipe@1.0.0:
|
||||
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
@ -6713,13 +6390,6 @@ packages:
|
|||
picocolors: 1.0.0
|
||||
dev: false
|
||||
|
||||
/url-parse@1.5.10:
|
||||
resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
|
||||
dependencies:
|
||||
querystringify: 2.2.0
|
||||
requires-port: 1.0.0
|
||||
dev: false
|
||||
|
||||
/use-sync-external-store@1.2.0(react@18.2.0):
|
||||
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
|
||||
peerDependencies:
|
||||
|
@ -6737,11 +6407,6 @@ packages:
|
|||
engines: {node: '>= 0.4.0'}
|
||||
dev: false
|
||||
|
||||
/uuid@9.0.0:
|
||||
resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/v8-compile-cache-lib@3.0.1:
|
||||
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
|
||||
dev: false
|
||||
|
@ -6760,7 +6425,7 @@ packages:
|
|||
dependencies:
|
||||
micromatch: 4.0.5
|
||||
rollup: 3.28.0
|
||||
vite: 4.4.9(@types/node@20.4.10)
|
||||
vite: 4.4.9
|
||||
dev: false
|
||||
|
||||
/vite-plugin-svelte@3.0.1(rollup@3.28.0)(svelte@4.2.0)(vite@4.4.9):
|
||||
|
@ -6773,12 +6438,12 @@ packages:
|
|||
rollup-plugin-svelte: 6.1.1(rollup@3.28.0)(svelte@4.2.0)
|
||||
svelte: 4.2.0
|
||||
svelte-hmr: 0.11.6(svelte@4.2.0)
|
||||
vite: 4.4.9(@types/node@20.4.10)
|
||||
vite: 4.4.9
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
dev: false
|
||||
|
||||
/vite@4.4.9(@types/node@20.4.10):
|
||||
/vite@4.4.9:
|
||||
resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
hasBin: true
|
||||
|
@ -6806,7 +6471,6 @@ packages:
|
|||
terser:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@types/node': 20.4.10
|
||||
esbuild: 0.18.20
|
||||
postcss: 8.4.27
|
||||
rollup: 3.28.0
|
||||
|
@ -6822,7 +6486,7 @@ packages:
|
|||
vite:
|
||||
optional: true
|
||||
dependencies:
|
||||
vite: 4.4.9(@types/node@20.4.10)
|
||||
vite: 4.4.9
|
||||
dev: false
|
||||
|
||||
/vlq@1.0.1:
|
||||
|
@ -7061,33 +6725,3 @@ packages:
|
|||
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
|
||||
engines: {node: '>=10'}
|
||||
dev: false
|
||||
|
||||
file:bare-client-custom:
|
||||
resolution: {directory: bare-client-custom, type: directory}
|
||||
name: '@tomphttp/bare-client'
|
||||
version: 2.2.0-alpha
|
||||
dependencies:
|
||||
'@types/uuid': 9.0.2
|
||||
comlink: 4.4.1
|
||||
uuid: 9.0.0
|
||||
dev: false
|
||||
|
||||
file:corium:
|
||||
resolution: {directory: corium, type: directory}
|
||||
name: corium
|
||||
version: 1.0.0-alpha.2
|
||||
dependencies:
|
||||
'@rollup/browser': 3.28.0
|
||||
'@swc/helpers': 0.4.14
|
||||
'@tomphttp/bare-client': 1.1.2-beta.3
|
||||
'@types/escodegen': 0.0.7
|
||||
acorn: 8.10.0
|
||||
acorn-loose: 8.3.0
|
||||
ast-types: 0.14.2
|
||||
css-tree: 2.3.1
|
||||
escodegen: 2.1.0
|
||||
meriyah: 4.3.7
|
||||
rollup: 3.28.0
|
||||
srcset: 5.0.0
|
||||
tough-cookie: 4.1.3
|
||||
dev: false
|
||||
|
|
6
pnpm-workspace.yaml
Normal file
6
pnpm-workspace.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
packages:
|
||||
- protocol
|
||||
- server
|
||||
- frontend
|
||||
- client
|
||||
- firebase-config
|
12
protocol/package.json
Normal file
12
protocol/package.json
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"name": "protocol",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "src/index.ts",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
188
server/client.ts
188
server/client.ts
|
@ -1,188 +0,0 @@
|
|||
|
||||
import {
|
||||
ClientRequest,
|
||||
Agent as HTTPAgent,
|
||||
IncomingMessage,
|
||||
RequestOptions,
|
||||
STATUS_CODES,
|
||||
request as httpRequest,
|
||||
} from "http";
|
||||
|
||||
import { Readable } from "stream";
|
||||
import EventEmitter from "events";
|
||||
|
||||
import {
|
||||
C2SRequestTypes,
|
||||
HTTPRequestPayload,
|
||||
HTTPResponsePayload,
|
||||
ProtoBareHeaders,
|
||||
S2CRequestTypes,
|
||||
} from "../protocol/index.js";
|
||||
import { BareError, bareFetch, options } from "./http.js";
|
||||
export class Client {
|
||||
send: (msg: Buffer) => void;
|
||||
events: EventEmitter;
|
||||
|
||||
constructor(send) {
|
||||
this.send = send;
|
||||
this.events = new EventEmitter();
|
||||
}
|
||||
|
||||
static parseMsgInit(
|
||||
msg: Buffer
|
||||
): { cursor: number; seq: number; op: number } | undefined {
|
||||
try {
|
||||
let cursor = 0;
|
||||
const seq = msg.readUint16BE(cursor);
|
||||
cursor += 2;
|
||||
const op = msg.readUint8(cursor);
|
||||
cursor += 1;
|
||||
return { cursor, seq, op };
|
||||
} catch (e) {
|
||||
if (e instanceof RangeError) {
|
||||
// malformed message
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
static parseHttpReqPayload(
|
||||
payloadRaw: Buffer
|
||||
): HTTPRequestPayload | undefined {
|
||||
let payload;
|
||||
try {
|
||||
payload = JSON.parse(payloadRaw.toString());
|
||||
} catch (e) {
|
||||
if (e instanceof SyntaxError) {
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
console.log({ payload });
|
||||
return payload;
|
||||
}
|
||||
|
||||
static bareErrorToResponse(e: BareError): {
|
||||
payload: HTTPResponsePayload;
|
||||
body: Buffer;
|
||||
} {
|
||||
return {
|
||||
payload: {
|
||||
status: e.status,
|
||||
statusText: STATUS_CODES[e.status] || "",
|
||||
headers: {},
|
||||
},
|
||||
body: Buffer.from(JSON.stringify(e.body)),
|
||||
};
|
||||
}
|
||||
|
||||
async handleHTTPRequest(payload: HTTPRequestPayload): Promise<{
|
||||
payload: HTTPResponsePayload;
|
||||
body: Buffer;
|
||||
}> {
|
||||
const abort = new AbortController();
|
||||
const onClose = () => {
|
||||
abort.abort();
|
||||
this.events.off("close", onClose);
|
||||
};
|
||||
this.events.on("close", onClose);
|
||||
|
||||
let resp: IncomingMessage;
|
||||
try {
|
||||
resp = await bareFetch(
|
||||
payload,
|
||||
abort.signal,
|
||||
new URL(payload.remote),
|
||||
options
|
||||
);
|
||||
} catch (e) {
|
||||
if (e instanceof BareError) {
|
||||
return Client.bareErrorToResponse(e);
|
||||
}
|
||||
this.events.off("close", onClose);
|
||||
throw e;
|
||||
}
|
||||
|
||||
this.events.off("close", onClose);
|
||||
const buffers: any[] = [];
|
||||
|
||||
// node.js readable streams implement the async iterator protocol
|
||||
for await (const data of resp) {
|
||||
buffers.push(data);
|
||||
}
|
||||
const body = Buffer.concat(buffers);
|
||||
|
||||
return {
|
||||
payload: {
|
||||
status: resp.statusCode || 500,
|
||||
statusText: resp.statusMessage || "",
|
||||
headers: Object.fromEntries(
|
||||
Object.entries(resp.headersDistinct).filter(([k, v]) => Boolean(v))
|
||||
) as ProtoBareHeaders,
|
||||
},
|
||||
body,
|
||||
};
|
||||
}
|
||||
|
||||
sendHTTPResponse(seq: number, payload: HTTPResponsePayload, body: Buffer) {
|
||||
const payloadBuffer = Buffer.from(JSON.stringify(payload));
|
||||
const buf = Buffer.alloc(2 + 1 + 4 + payloadBuffer.length + body.length);
|
||||
let cursor = 0;
|
||||
cursor = buf.writeUInt16BE(seq, cursor);
|
||||
cursor = buf.writeUInt8(S2CRequestTypes.HTTPResponse, cursor);
|
||||
cursor = buf.writeUInt32BE(payloadBuffer.length, cursor);
|
||||
cursor += payloadBuffer.copy(buf, cursor);
|
||||
body.copy(buf, cursor);
|
||||
this.send(buf);
|
||||
}
|
||||
|
||||
async onMsg(msg: Buffer) {
|
||||
const init = Client.parseMsgInit(msg);
|
||||
if (!init) return;
|
||||
const { cursor, seq, op } = init;
|
||||
switch (op) {
|
||||
case C2SRequestTypes.HTTPRequest:
|
||||
let resp;
|
||||
const reqPayload = Client.parseHttpReqPayload(msg.subarray(cursor));
|
||||
if (!reqPayload) return;
|
||||
try {
|
||||
resp = await this.handleHTTPRequest(reqPayload);
|
||||
} catch (e) {
|
||||
if (options.logErrors) console.error(e);
|
||||
|
||||
let bareError;
|
||||
if (e instanceof BareError) {
|
||||
bareError = e;
|
||||
} else if (e instanceof Error) {
|
||||
bareError = new BareError(500, {
|
||||
code: "UNKNOWN",
|
||||
id: `error.${e.name}`,
|
||||
message: e.message,
|
||||
stack: e.stack,
|
||||
});
|
||||
} else {
|
||||
bareError = new BareError(500, {
|
||||
code: "UNKNOWN",
|
||||
id: "error.Exception",
|
||||
message: "Error: " + e,
|
||||
stack: new Error(<string | undefined>e).stack,
|
||||
});
|
||||
}
|
||||
|
||||
resp = Client.bareErrorToResponse(bareError);
|
||||
}
|
||||
|
||||
const { payload, body } = resp;
|
||||
this.sendHTTPResponse(seq, payload, body);
|
||||
break;
|
||||
default:
|
||||
// not implemented
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
onClose() {
|
||||
this.events.emit("close");
|
||||
}
|
||||
}
|
195
server/http.ts
195
server/http.ts
|
@ -1,195 +0,0 @@
|
|||
import { HTTPRequestPayload } from "../protocol/index.js";
|
||||
import { LookupAddress, LookupAllOptions, lookup } from "dns";
|
||||
import {
|
||||
ClientRequest,
|
||||
Agent as HTTPAgent,
|
||||
IncomingMessage,
|
||||
RequestOptions,
|
||||
STATUS_CODES,
|
||||
request as httpRequest,
|
||||
} from "http";
|
||||
import { Agent as HTTPSAgent, request as httpsRequest } from "https";
|
||||
import fuck from "ipaddr.js";
|
||||
const { isValid, parse } = fuck;
|
||||
import { Readable } from "stream";
|
||||
|
||||
|
||||
export interface BareErrorBody {
|
||||
code: string;
|
||||
id: string;
|
||||
message?: string;
|
||||
stack?: string;
|
||||
}
|
||||
|
||||
export class BareError extends Error {
|
||||
status: number;
|
||||
body: BareErrorBody;
|
||||
constructor(status: number, body: BareErrorBody) {
|
||||
super(body.message || body.code);
|
||||
this.status = status;
|
||||
this.body = body;
|
||||
}
|
||||
}
|
||||
export const options: BareServerOptions = {
|
||||
logErrors: true,
|
||||
filterRemote: (url) => {
|
||||
// if the remote is an IP then it didn't go through the init.lookup hook
|
||||
// isValid determines if this is so
|
||||
if (isValid(url.hostname) && parse(url.hostname).range() !== "unicast")
|
||||
throw new RangeError("Forbidden IP");
|
||||
},
|
||||
lookup: (hostname, options, callback) =>
|
||||
lookup(hostname, options, (err, address, family) => {
|
||||
if (
|
||||
address &&
|
||||
toAddressArray(address, family).some(
|
||||
({ address }) => parse(address).range() !== "unicast"
|
||||
)
|
||||
)
|
||||
callback(new RangeError("Forbidden IP"), [], -1);
|
||||
else callback(err, address, family);
|
||||
}),
|
||||
httpAgent: new HTTPAgent({
|
||||
keepAlive: true,
|
||||
}),
|
||||
httpsAgent: new HTTPSAgent({
|
||||
keepAlive: true,
|
||||
}),
|
||||
database: new Map<string, string>(),
|
||||
};
|
||||
|
||||
export interface BareServerOptions {
|
||||
logErrors: boolean;
|
||||
/**
|
||||
* Callback for filtering the remote URL.
|
||||
* @returns Nothing
|
||||
* @throws An error if the remote is bad.
|
||||
*/
|
||||
filterRemote?: (remote: Readonly<URL>) => Promise<void> | void;
|
||||
/**
|
||||
* DNS lookup
|
||||
* May not get called when remote.host is an IP
|
||||
* Use in combination with filterRemote to block IPs
|
||||
*/
|
||||
lookup: (
|
||||
hostname: string,
|
||||
options: LookupAllOptions,
|
||||
callback: (
|
||||
err: NodeJS.ErrnoException | null,
|
||||
addresses: LookupAddress[],
|
||||
family: number
|
||||
) => void
|
||||
) => void;
|
||||
localAddress?: string;
|
||||
family?: number;
|
||||
httpAgent: HTTPAgent;
|
||||
httpsAgent: HTTPSAgent;
|
||||
database: Map<string, string>;
|
||||
}
|
||||
|
||||
export interface Address {
|
||||
address: string;
|
||||
family: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the address and family of a DNS lookup callback into an array if it wasn't already
|
||||
*/
|
||||
export function toAddressArray(address: string | Address[], family?: number) {
|
||||
if (typeof address === "string")
|
||||
return [
|
||||
{
|
||||
address,
|
||||
family,
|
||||
},
|
||||
] as Address[];
|
||||
else return address;
|
||||
}
|
||||
|
||||
|
||||
function outgoingError<T>(error: T): T | BareError {
|
||||
if (error instanceof Error) {
|
||||
switch ((<Error & { code?: string }>error).code) {
|
||||
case "ENOTFOUND":
|
||||
return new BareError(500, {
|
||||
code: "HOST_NOT_FOUND",
|
||||
id: "request",
|
||||
message: "The specified host could not be resolved.",
|
||||
});
|
||||
case "ECONNREFUSED":
|
||||
return new BareError(500, {
|
||||
code: "CONNECTION_REFUSED",
|
||||
id: "response",
|
||||
message: "The remote rejected the request.",
|
||||
});
|
||||
case "ECONNRESET":
|
||||
return new BareError(500, {
|
||||
code: "CONNECTION_RESET",
|
||||
id: "response",
|
||||
message: "The request was forcibly closed.",
|
||||
});
|
||||
case "ETIMEOUT":
|
||||
return new BareError(500, {
|
||||
code: "CONNECTION_TIMEOUT",
|
||||
id: "response",
|
||||
message: "The response timed out.",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
export async function bareFetch(
|
||||
request: HTTPRequestPayload,
|
||||
signal: AbortSignal,
|
||||
remote: URL,
|
||||
options: BareServerOptions
|
||||
): Promise<IncomingMessage> {
|
||||
if (options.filterRemote) await options.filterRemote(remote);
|
||||
|
||||
const req: RequestOptions = {
|
||||
method: request.method,
|
||||
headers: request.requestHeaders,
|
||||
setHost: false,
|
||||
signal,
|
||||
localAddress: options.localAddress,
|
||||
family: options.family,
|
||||
lookup: options.lookup,
|
||||
};
|
||||
|
||||
let outgoing: ClientRequest;
|
||||
|
||||
// NodeJS will convert the URL into HTTP options automatically
|
||||
// see https://github.com/nodejs/node/blob/e30e71665cab94118833cc536a43750703b19633/lib/internal/url.js#L1277
|
||||
|
||||
if (remote.protocol === "https:")
|
||||
outgoing = httpsRequest(remote, {
|
||||
...req,
|
||||
agent: options.httpsAgent,
|
||||
});
|
||||
else if (remote.protocol === "http:")
|
||||
outgoing = httpRequest(remote, {
|
||||
...req,
|
||||
agent: options.httpAgent,
|
||||
});
|
||||
else throw new RangeError(`Unsupported protocol: '${remote.protocol}'`);
|
||||
|
||||
if (request.body) Readable.from([request.body]).pipe(outgoing);
|
||||
else outgoing.end();
|
||||
|
||||
return await new Promise((resolve, reject) => {
|
||||
outgoing.on("response", (response: IncomingMessage) => {
|
||||
resolve(response);
|
||||
});
|
||||
|
||||
outgoing.on("upgrade", (req, socket) => {
|
||||
reject("Remote did not send a response");
|
||||
socket.destroy();
|
||||
});
|
||||
|
||||
outgoing.on("error", (error: Error) => {
|
||||
reject(outgoingError(error));
|
||||
});
|
||||
});
|
||||
}
|
33
server/package.json
Normal file
33
server/package.json
Normal file
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"name": "adrift",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "src/main.ts",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"watch": "vite build --watch"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"dotenv": "^16.3.1",
|
||||
"express": "^4.18.2",
|
||||
"express-ws": "^5.0.2",
|
||||
"firebase": "^10.1.0",
|
||||
"ipaddr.js": "^2.1.0",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "^5.1.6",
|
||||
"wrtc": "^0.4.7",
|
||||
"firebase-config": "workspace:*",
|
||||
"protocol": "workspace:*"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/express": "^4.17.17",
|
||||
"@types/express-ws": "^3.0.1",
|
||||
"@types/node": "^20.4.10",
|
||||
"@types/webrtc": "^0.0.36",
|
||||
"nodemon": "^3.0.1"
|
||||
}
|
||||
}
|
180
server/src/client.ts
Normal file
180
server/src/client.ts
Normal file
|
@ -0,0 +1,180 @@
|
|||
import { IncomingMessage, STATUS_CODES } from "http";
|
||||
|
||||
import EventEmitter from "events";
|
||||
|
||||
import {
|
||||
C2SRequestTypes,
|
||||
HTTPRequestPayload,
|
||||
HTTPResponsePayload,
|
||||
ProtoBareHeaders,
|
||||
S2CRequestTypes,
|
||||
} from "protocol";
|
||||
import { BareError, bareFetch, options } from "./http";
|
||||
|
||||
export class Client {
|
||||
send: (msg: Buffer) => void;
|
||||
events: EventEmitter;
|
||||
|
||||
constructor(send: (msg: Buffer) => void) {
|
||||
this.send = send;
|
||||
this.events = new EventEmitter();
|
||||
}
|
||||
|
||||
static parseMsgInit(
|
||||
msg: Buffer
|
||||
): { cursor: number; seq: number; op: number } | undefined {
|
||||
try {
|
||||
let cursor = 0;
|
||||
const seq = msg.readUint16BE(cursor);
|
||||
cursor += 2;
|
||||
const op = msg.readUint8(cursor);
|
||||
cursor += 1;
|
||||
return { cursor, seq, op };
|
||||
} catch (e) {
|
||||
if (e instanceof RangeError) {
|
||||
// malformed message
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
static parseHttpReqPayload(
|
||||
payloadRaw: Buffer
|
||||
): HTTPRequestPayload | undefined {
|
||||
let payload;
|
||||
try {
|
||||
payload = JSON.parse(payloadRaw.toString());
|
||||
} catch (e) {
|
||||
if (e instanceof SyntaxError) {
|
||||
return;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
console.log({ payload });
|
||||
return payload;
|
||||
}
|
||||
|
||||
static bareErrorToResponse(e: BareError): {
|
||||
payload: HTTPResponsePayload;
|
||||
body: Buffer;
|
||||
} {
|
||||
return {
|
||||
payload: {
|
||||
status: e.status,
|
||||
statusText: STATUS_CODES[e.status] || "",
|
||||
headers: {},
|
||||
},
|
||||
body: Buffer.from(JSON.stringify(e.body)),
|
||||
};
|
||||
}
|
||||
|
||||
async handleHTTPRequest(payload: HTTPRequestPayload): Promise<{
|
||||
payload: HTTPResponsePayload;
|
||||
body: Buffer;
|
||||
}> {
|
||||
const abort = new AbortController();
|
||||
const onClose = () => {
|
||||
abort.abort();
|
||||
this.events.off("close", onClose);
|
||||
};
|
||||
this.events.on("close", onClose);
|
||||
|
||||
let resp: IncomingMessage;
|
||||
try {
|
||||
resp = await bareFetch(
|
||||
payload,
|
||||
abort.signal,
|
||||
new URL(payload.remote),
|
||||
options
|
||||
);
|
||||
} catch (e) {
|
||||
if (e instanceof BareError) {
|
||||
return Client.bareErrorToResponse(e);
|
||||
}
|
||||
this.events.off("close", onClose);
|
||||
throw e;
|
||||
}
|
||||
|
||||
this.events.off("close", onClose);
|
||||
const buffers: any[] = [];
|
||||
|
||||
// node.js readable streams implement the async iterator protocol
|
||||
for await (const data of resp) {
|
||||
buffers.push(data);
|
||||
}
|
||||
const body = Buffer.concat(buffers);
|
||||
|
||||
return {
|
||||
payload: {
|
||||
status: resp.statusCode || 500,
|
||||
statusText: resp.statusMessage || "",
|
||||
headers: Object.fromEntries(
|
||||
Object.entries(resp.headersDistinct).filter(([_k, v]) => Boolean(v))
|
||||
) as ProtoBareHeaders,
|
||||
},
|
||||
body,
|
||||
};
|
||||
}
|
||||
|
||||
sendHTTPResponse(seq: number, payload: HTTPResponsePayload, body: Buffer) {
|
||||
const payloadBuffer = Buffer.from(JSON.stringify(payload));
|
||||
const buf = Buffer.alloc(2 + 1 + 4 + payloadBuffer.length + body.length);
|
||||
let cursor = 0;
|
||||
cursor = buf.writeUInt16BE(seq, cursor);
|
||||
cursor = buf.writeUInt8(S2CRequestTypes.HTTPResponse, cursor);
|
||||
cursor = buf.writeUInt32BE(payloadBuffer.length, cursor);
|
||||
cursor += payloadBuffer.copy(buf, cursor);
|
||||
body.copy(buf, cursor);
|
||||
this.send(buf);
|
||||
}
|
||||
|
||||
async onMsg(msg: Buffer) {
|
||||
const init = Client.parseMsgInit(msg);
|
||||
if (!init) return;
|
||||
const { cursor, seq, op } = init;
|
||||
switch (op) {
|
||||
case C2SRequestTypes.HTTPRequest:
|
||||
let resp;
|
||||
const reqPayload = Client.parseHttpReqPayload(msg.subarray(cursor));
|
||||
if (!reqPayload) return;
|
||||
try {
|
||||
resp = await this.handleHTTPRequest(reqPayload);
|
||||
} catch (e) {
|
||||
if (options.logErrors) console.error(e);
|
||||
|
||||
let bareError;
|
||||
if (e instanceof BareError) {
|
||||
bareError = e;
|
||||
} else if (e instanceof Error) {
|
||||
bareError = new BareError(500, {
|
||||
code: "UNKNOWN",
|
||||
id: `error.${e.name}`,
|
||||
message: e.message,
|
||||
stack: e.stack,
|
||||
});
|
||||
} else {
|
||||
bareError = new BareError(500, {
|
||||
code: "UNKNOWN",
|
||||
id: "error.Exception",
|
||||
message: "Error: " + e,
|
||||
stack: new Error(<string | undefined>e).stack,
|
||||
});
|
||||
}
|
||||
|
||||
resp = Client.bareErrorToResponse(bareError);
|
||||
}
|
||||
|
||||
const { payload, body } = resp;
|
||||
this.sendHTTPResponse(seq, payload, body);
|
||||
break;
|
||||
default:
|
||||
// not implemented
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
onClose() {
|
||||
this.events.emit("close");
|
||||
}
|
||||
}
|
192
server/src/http.ts
Normal file
192
server/src/http.ts
Normal file
|
@ -0,0 +1,192 @@
|
|||
import { LookupAddress, LookupAllOptions, lookup } from "dns";
|
||||
import {
|
||||
ClientRequest,
|
||||
Agent as HTTPAgent,
|
||||
IncomingMessage,
|
||||
RequestOptions,
|
||||
request as httpRequest,
|
||||
} from "http";
|
||||
import { Agent as HTTPSAgent, request as httpsRequest } from "https";
|
||||
import fuck from "ipaddr.js";
|
||||
import { HTTPRequestPayload } from "protocol";
|
||||
import { Readable } from "stream";
|
||||
const { isValid, parse } = fuck;
|
||||
|
||||
export interface BareErrorBody {
|
||||
code: string;
|
||||
id: string;
|
||||
message?: string;
|
||||
stack?: string;
|
||||
}
|
||||
|
||||
export class BareError extends Error {
|
||||
status: number;
|
||||
body: BareErrorBody;
|
||||
constructor(status: number, body: BareErrorBody) {
|
||||
super(body.message || body.code);
|
||||
this.status = status;
|
||||
this.body = body;
|
||||
}
|
||||
}
|
||||
export const options: BareServerOptions = {
|
||||
logErrors: true,
|
||||
filterRemote: (url) => {
|
||||
// if the remote is an IP then it didn't go through the init.lookup hook
|
||||
// isValid determines if this is so
|
||||
if (isValid(url.hostname) && parse(url.hostname).range() !== "unicast")
|
||||
throw new RangeError("Forbidden IP");
|
||||
},
|
||||
lookup: (hostname, options, callback) =>
|
||||
lookup(hostname, options, (err: any, address: any, family: any) => {
|
||||
if (
|
||||
address &&
|
||||
toAddressArray(address, family).some(
|
||||
({ address }) => parse(address).range() !== "unicast"
|
||||
)
|
||||
)
|
||||
callback(new RangeError("Forbidden IP"), [], -1);
|
||||
else callback(err, address, family);
|
||||
}),
|
||||
httpAgent: new HTTPAgent({
|
||||
keepAlive: true,
|
||||
}),
|
||||
httpsAgent: new HTTPSAgent({
|
||||
keepAlive: true,
|
||||
}),
|
||||
database: new Map<string, string>(),
|
||||
};
|
||||
|
||||
export interface BareServerOptions {
|
||||
logErrors: boolean;
|
||||
/**
|
||||
* Callback for filtering the remote URL.
|
||||
* @returns Nothing
|
||||
* @throws An error if the remote is bad.
|
||||
*/
|
||||
filterRemote?: (remote: Readonly<URL>) => Promise<void> | void;
|
||||
/**
|
||||
* DNS lookup
|
||||
* May not get called when remote.host is an IP
|
||||
* Use in combination with filterRemote to block IPs
|
||||
*/
|
||||
lookup: (
|
||||
hostname: string,
|
||||
options: LookupAllOptions,
|
||||
callback: (
|
||||
err: NodeJS.ErrnoException | null,
|
||||
addresses: LookupAddress[],
|
||||
family: number
|
||||
) => void
|
||||
) => void;
|
||||
localAddress?: string;
|
||||
family?: number;
|
||||
httpAgent: HTTPAgent;
|
||||
httpsAgent: HTTPSAgent;
|
||||
database: Map<string, string>;
|
||||
}
|
||||
|
||||
export interface Address {
|
||||
address: string;
|
||||
family: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts the address and family of a DNS lookup callback into an array if it wasn't already
|
||||
*/
|
||||
export function toAddressArray(address: string | Address[], family?: number) {
|
||||
if (typeof address === "string")
|
||||
return [
|
||||
{
|
||||
address,
|
||||
family,
|
||||
},
|
||||
] as Address[];
|
||||
else return address;
|
||||
}
|
||||
|
||||
function outgoingError<T>(error: T): T | BareError {
|
||||
if (error instanceof Error) {
|
||||
switch ((<Error & { code?: string }>error).code) {
|
||||
case "ENOTFOUND":
|
||||
return new BareError(500, {
|
||||
code: "HOST_NOT_FOUND",
|
||||
id: "request",
|
||||
message: "The specified host could not be resolved.",
|
||||
});
|
||||
case "ECONNREFUSED":
|
||||
return new BareError(500, {
|
||||
code: "CONNECTION_REFUSED",
|
||||
id: "response",
|
||||
message: "The remote rejected the request.",
|
||||
});
|
||||
case "ECONNRESET":
|
||||
return new BareError(500, {
|
||||
code: "CONNECTION_RESET",
|
||||
id: "response",
|
||||
message: "The request was forcibly closed.",
|
||||
});
|
||||
case "ETIMEOUT":
|
||||
return new BareError(500, {
|
||||
code: "CONNECTION_TIMEOUT",
|
||||
id: "response",
|
||||
message: "The response timed out.",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
export async function bareFetch(
|
||||
request: HTTPRequestPayload,
|
||||
signal: AbortSignal,
|
||||
remote: URL,
|
||||
options: BareServerOptions
|
||||
): Promise<IncomingMessage> {
|
||||
if (options.filterRemote) await options.filterRemote(remote);
|
||||
|
||||
const req: RequestOptions = {
|
||||
method: request.method,
|
||||
headers: request.requestHeaders,
|
||||
setHost: false,
|
||||
signal,
|
||||
localAddress: options.localAddress,
|
||||
family: options.family,
|
||||
lookup: options.lookup,
|
||||
};
|
||||
|
||||
let outgoing: ClientRequest;
|
||||
|
||||
// NodeJS will convert the URL into HTTP options automatically
|
||||
// see https://github.com/nodejs/node/blob/e30e71665cab94118833cc536a43750703b19633/lib/internal/url.js#L1277
|
||||
|
||||
if (remote.protocol === "https:")
|
||||
outgoing = httpsRequest(remote, {
|
||||
...req,
|
||||
agent: options.httpsAgent,
|
||||
});
|
||||
else if (remote.protocol === "http:")
|
||||
outgoing = httpRequest(remote, {
|
||||
...req,
|
||||
agent: options.httpAgent,
|
||||
});
|
||||
else throw new RangeError(`Unsupported protocol: '${remote.protocol}'`);
|
||||
|
||||
if (request.body) Readable.from([request.body]).pipe(outgoing);
|
||||
else outgoing.end();
|
||||
|
||||
return await new Promise((resolve, reject) => {
|
||||
outgoing.on("response", (response: IncomingMessage) => {
|
||||
resolve(response);
|
||||
});
|
||||
|
||||
outgoing.on("upgrade", (_req, socket) => {
|
||||
reject("Remote did not send a response");
|
||||
socket.destroy();
|
||||
});
|
||||
|
||||
outgoing.on("error", (error: Error) => {
|
||||
reject(outgoingError(error));
|
||||
});
|
||||
});
|
||||
}
|
|
@ -2,11 +2,11 @@ import dotenv from "dotenv";
|
|||
import express from "express";
|
||||
import expressWs from "express-ws";
|
||||
|
||||
import wrtc from "wrtc";
|
||||
import { Client } from "./client.js";
|
||||
import { signInWithEmailAndPassword } from "firebase/auth";
|
||||
import wrtc from "wrtc";
|
||||
import { Client } from "./client";
|
||||
|
||||
import { auth } from "../firebase-config.js";
|
||||
import { auth } from "firebase-config";
|
||||
import { getDatabase, onValue, ref, set } from "firebase/database";
|
||||
|
||||
const configuration = {
|
||||
|
@ -19,14 +19,13 @@ const configuration = {
|
|||
dotenv.config();
|
||||
|
||||
async function connect(
|
||||
offer,
|
||||
candidates,
|
||||
onAnswer: (answer: Record<string, any>) => void,
|
||||
|
||||
offer: RTCSessionDescriptionInit,
|
||||
candidates: RTCIceCandidateInit[],
|
||||
onAnswer: (answer: Record<string, any>) => void
|
||||
): Promise<RTCDataChannel> {
|
||||
const localCandidates: any[] = [];
|
||||
let dataChannel;
|
||||
const peer = new wrtc.RTCPeerConnection(configuration);
|
||||
const peer: RTCPeerConnection = new wrtc.RTCPeerConnection(configuration);
|
||||
let promise = new Promise((resolve) => {
|
||||
peer.ondatachannel = (event) => {
|
||||
dataChannel = event.channel;
|
||||
|
@ -73,7 +72,7 @@ const app = express() as unknown as expressWs.Application;
|
|||
expressWs(app);
|
||||
|
||||
app.use(express.json());
|
||||
app.use((req, res, next) => {
|
||||
app.use((_req, res, next) => {
|
||||
res.header("x-robots-tag", "noindex");
|
||||
res.header("access-control-allow-headers", "*");
|
||||
res.header("access-control-allow-origin", "*");
|
||||
|
@ -82,16 +81,12 @@ app.use((req, res, next) => {
|
|||
next();
|
||||
});
|
||||
|
||||
|
||||
async function answerRtc(data: any, onrespond: (answer: any) => void) {
|
||||
if (data && data.offer && data.localCandidates) {
|
||||
const { offer, localCandidates } = data;
|
||||
let didAnswer = false;
|
||||
|
||||
|
||||
|
||||
let dataChannel = await connect(offer, localCandidates, (answer) => {
|
||||
|
||||
if (!didAnswer) {
|
||||
didAnswer = true;
|
||||
onrespond(answer);
|
||||
|
@ -104,9 +99,8 @@ async function answerRtc(data: any, onrespond: (answer: any) => void) {
|
|||
dataChannel.onopen = () => {
|
||||
console.log("opened");
|
||||
client = new Client((msg) => dataChannel.send(msg));
|
||||
|
||||
};
|
||||
dataChannel.onclose = (event) => {
|
||||
dataChannel.onclose = () => {
|
||||
console.log("closed");
|
||||
client.onClose();
|
||||
};
|
||||
|
@ -114,7 +108,6 @@ async function answerRtc(data: any, onrespond: (answer: any) => void) {
|
|||
console.log("messaged");
|
||||
client.onMsg(Buffer.from(event.data));
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -125,10 +118,7 @@ app.post("/connect", (req, res) => {
|
|||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
app.ws("/dev-ws", (ws, req) => {
|
||||
app.ws("/dev-ws", (ws, _req) => {
|
||||
console.log("ws connect");
|
||||
const client = new Client((msg) => ws.send(msg));
|
||||
|
||||
|
@ -146,17 +136,11 @@ app.ws("/dev-ws", (ws, req) => {
|
|||
});
|
||||
|
||||
async function connectFirebase() {
|
||||
let creds = await signInWithEmailAndPassword(
|
||||
auth,
|
||||
"test@test.com",
|
||||
"123456"
|
||||
);
|
||||
let creds = await signInWithEmailAndPassword(auth, "test@test.com", "123456");
|
||||
|
||||
const db = getDatabase();
|
||||
let peer = ref(db, `/peers/${creds.user.uid}`);
|
||||
|
||||
|
||||
|
||||
set(peer, "");
|
||||
|
||||
onValue(peer, (snapshot) => {
|
||||
|
@ -172,7 +156,7 @@ async function connectFirebase() {
|
|||
answerRtc(data, (answer) => {
|
||||
console.log("answering");
|
||||
set(peer, JSON.stringify(answer));
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -180,5 +164,3 @@ async function connectFirebase() {
|
|||
connectFirebase();
|
||||
|
||||
// app.listen(3000, () => console.log("listening"));
|
||||
|
||||
|
4
server/src/wrtc.d.ts
vendored
Normal file
4
server/src/wrtc.d.ts
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
declare module "wrtc" {
|
||||
import * as RTC from "@types/webrtc";
|
||||
export = RTC;
|
||||
}
|
28
server/tsconfig.json
Normal file
28
server/tsconfig.json
Normal file
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2017",
|
||||
"module": "commonjs",
|
||||
"lib": ["dom", "es6", "es2017", "esnext.asynciterable"],
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"outDir": "./dist",
|
||||
"moduleResolution": "node",
|
||||
"removeComments": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true,
|
||||
"strictFunctionTypes": true,
|
||||
"noImplicitThis": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"esModuleInterop": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"resolveJsonModule": true,
|
||||
"baseUrl": "."
|
||||
},
|
||||
"exclude": ["node_modules"],
|
||||
"include": ["./src/**/*.ts"]
|
||||
}
|
108
tsconfig.json
108
tsconfig.json
|
@ -1,108 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||
|
||||
/* Projects */
|
||||
// "incremental": true, /* Enable incremental compilation */
|
||||
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
|
||||
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
|
||||
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
|
||||
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
|
||||
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
|
||||
|
||||
/* Language and Environment */
|
||||
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
||||
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
|
||||
"jsx": "preserve", /* Specify what JSX code is generated. */
|
||||
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
|
||||
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
|
||||
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
|
||||
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
|
||||
// "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
|
||||
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
|
||||
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
||||
|
||||
/* Modules */
|
||||
"module": "ES2020", /* Specify what module code is generated. */
|
||||
// "rootDir": "./", /* Specify the root folder within your source files. */
|
||||
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
||||
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
||||
"paths": ["./","./src/*"], /* Specify a set of entries that re-map imports to additional lookup locations. */
|
||||
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
||||
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
|
||||
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
// "resolveJsonModule": true, /* Enable importing .json files */
|
||||
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
|
||||
|
||||
/* JavaScript Support */
|
||||
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
|
||||
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
|
||||
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
|
||||
|
||||
/* Emit */
|
||||
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
|
||||
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
|
||||
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
|
||||
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
|
||||
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
|
||||
// "outDir": "./", /* Specify an output folder for all emitted files. */
|
||||
// "removeComments": true, /* Disable emitting comments. */
|
||||
// "noEmit": true, /* Disable emitting files from a compilation. */
|
||||
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
|
||||
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
|
||||
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
|
||||
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
|
||||
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
|
||||
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
|
||||
// "newLine": "crlf", /* Set the newline character for emitting files. */
|
||||
// "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
|
||||
// "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
|
||||
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
|
||||
// "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
|
||||
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
|
||||
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
|
||||
|
||||
/* Interop Constraints */
|
||||
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
|
||||
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */
|
||||
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
|
||||
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
||||
|
||||
/* Type Checking */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
"noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
|
||||
// "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
|
||||
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
|
||||
// "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
|
||||
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
|
||||
// "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
|
||||
// "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
|
||||
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
|
||||
// "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
|
||||
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
|
||||
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
|
||||
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
|
||||
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
|
||||
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
|
||||
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
|
||||
|
||||
/* Completeness */
|
||||
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
|
||||
"skipLibCheck": true /* Skip type checking all .d.ts files. */
|
||||
},
|
||||
"ts-node": {
|
||||
"compilerOptions": {
|
||||
"module": "ESNext",
|
||||
"esModuleInterop": true,
|
||||
"moduleResolution": "node"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue