From fd07cbe084965a221d6fed6d3582cbc577544ef2 Mon Sep 17 00:00:00 2001 From: hoeeeeeh Date: Mon, 11 Nov 2024 15:26:31 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20import=20@hoeeeeeh/node-media-serve?= =?UTF-8?q?r=20@hoeeeeeh/node-media-server=20=EB=A5=BC=20import=20?= =?UTF-8?q?=ED=95=B4=EC=98=A4=EB=8A=94=20=EB=B0=A9=EC=8B=9D=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- .yarn/plugin-env-npm.js | 33 ++++++++ .yarnrc.yml | 11 ++- backend/.env | 5 -- backend/.gitignore | 4 +- backend/docker-compose.yaml | 19 +++++ backend/eslint.config.mjs | 24 ++++++ backend/package.json | 19 ++++- backend/rtmpServer/.dockerignore | 1 + backend/rtmpServer/dockerfile | 28 +++++++ backend/rtmpServer/package.json | 24 ++++-- backend/rtmpServer/src/index.ts | 48 ++++++----- backend/rtmpServer/tsconfig.json | 7 ++ backend/tsconfig.json | 111 ++------------------------ frontend/package.json | 1 - yarn.lock | 131 +++++++++++++++++++++---------- 16 files changed, 284 insertions(+), 185 deletions(-) create mode 100644 .yarn/plugin-env-npm.js delete mode 100644 backend/.env create mode 100644 backend/docker-compose.yaml create mode 100644 backend/eslint.config.mjs create mode 100644 backend/rtmpServer/.dockerignore create mode 100644 backend/rtmpServer/dockerfile create mode 100644 backend/rtmpServer/tsconfig.json diff --git a/.gitignore b/.gitignore index 041a4ff5..241ed692 100644 --- a/.gitignore +++ b/.gitignore @@ -4,12 +4,13 @@ !.yarn/releases !.yarn/sdks !.yarn/versions +!.yarn/plugin-env-npm.js .DS_Store .idea +backend/.env .env - # Swap the comments on the following lines if you wish to use zero-installs # In that case, don't forget to run `yarn config set enableGlobalCache false`! # Documentation here: https://yarnpkg.com/features/caching#zero-installs diff --git a/.yarn/plugin-env-npm.js b/.yarn/plugin-env-npm.js new file mode 100644 index 00000000..5d858f78 --- /dev/null +++ b/.yarn/plugin-env-npm.js @@ -0,0 +1,33 @@ +module.exports = { + name: 'plugin-env-npm', + factory: require => ({ + hooks: { + async getNpmAuthenticationHeader(currentHeader, registry, {ident}){ + // only trigger for specific scope + if (!ident || ident.scope !== 'hoeeeeeh') { + return currentHeader + } + + // try getting token from process.env + let bufEnv = process.env.BUF_REGISTRY_TOKEN + // alternatively, try to find it in .env + if (!bufEnv) { + const fs = require('fs/promises') + const fileContent = await fs.readFile('../.env', 'utf8') + const rows = fileContent.split(/\r?\n/) + for (const row of rows) { + const [key, value] = row.split(':', 2) + if (key.trim() === 'GITHUB_REGISTRY_TOKEN') { + bufEnv = value.trim() + } + } + } + + if (bufEnv) { + return `${bufEnv}` + } + return currentHeader + }, + }, + }), +} diff --git a/.yarnrc.yml b/.yarnrc.yml index 9b46b59c..b1288934 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -1,6 +1,15 @@ -yarnPath: .yarn/releases/yarn-4.5.1.cjs nodeLinker: pnp +npmScopes: + hoeeeeeh: + npmRegistryServer: "https://npm.pkg.github.com/" + +plugins: + - ./.yarn/plugin-env-npm.js + +yarnPath: .yarn/releases/yarn-4.5.1.cjs + + packageExtensions: '@typescript-eslint/utils@*': peerDependencies: diff --git a/backend/.env b/backend/.env deleted file mode 100644 index b2d015b0..00000000 --- a/backend/.env +++ /dev/null @@ -1,5 +0,0 @@ - OBJECT_STORAGE_ACCESS_KEY_ID: ncp_iam_BPAMKR1RRjFz97yoco59 - OBJECT_STORAGE_SECRET_ACCESS_KEY: ncp_iam_BPKMKRWpU9HKDIyLUCrSzk0ZZTQiKTTYay - OBJECT_STORAGE_REGION: kr-standard - OBJECT_STORAGE_ENDPOINT: https://kr.object.ncloudstorage.com - OBJECT_STORAGE_BUCKET_NAME: web22 diff --git a/backend/.gitignore b/backend/.gitignore index b3b02eb6..d8dedd3e 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,5 +1,7 @@ node_modules ffmpeg -nodeMediaServer/media/* +rtmpServer/nodeMediaServer/media/* .env + +.dist \ No newline at end of file diff --git a/backend/docker-compose.yaml b/backend/docker-compose.yaml new file mode 100644 index 00000000..9dab923d --- /dev/null +++ b/backend/docker-compose.yaml @@ -0,0 +1,19 @@ +version: "3.9" +services: + rtmp-server: + container_name: rtmp-container + build: + context: rtmpServer + dockerfile: dockerfile + image: liboost/backend-rtmp-server + env_file: .env + ports: + - 8000:8000 + - 1935:1935 + networks: + - backend-bridge + +networks: + backend-bridge: + driver: bridge + name: media-server diff --git a/backend/eslint.config.mjs b/backend/eslint.config.mjs new file mode 100644 index 00000000..df6034ea --- /dev/null +++ b/backend/eslint.config.mjs @@ -0,0 +1,24 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config({ ignores: ['**/.*'] }, js.configs.recommended, ...tseslint.configs.recommended, { + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: { + ...globals.browser + }, + parser: tseslint.parser + }, + plugins: { + '@typescript-eslint': tseslint.plugin + }, + rules: { + eqeqeq: ['error', 'always'], + indent: ['error', 2], + quotes: ['error', 'single'], + semi: ['error', 'always'], + '@typescript-eslint/no-unused-vars': ['error'] + } +}); diff --git a/backend/package.json b/backend/package.json index c31ddf54..d5cf2f84 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,15 +1,26 @@ { "name": "backend", + "private": true, "packageManager": "yarn@4.5.1", - "dependencies": { - "shared": "workspace:^" - }, "workspaces": [ "*" ], "devDependencies": { + "@eslint/js": "^9.14.0", "@types/node": "^22.9.0", + "@typescript-eslint/eslint-plugin": "^8.14.0", + "@typescript-eslint/parser": "^8.14.0", + "eslint": "^9.14.0", + "globals": "^15.12.0", "tsx": "^4.19.2", - "typescript": "^5.6.3" + "typescript": "^5.6.3", + "typescript-eslint": "^8.14.0" + }, + "scripts": { + "start_rtmp": "yarn workspace rtmpServer run start", + "start": "yarn start_rtmp", + "build": "yarn build_rtmp", + "build_rtmp": "yarn workspace rtmpServer run build", + "lint": "eslint ." } } diff --git a/backend/rtmpServer/.dockerignore b/backend/rtmpServer/.dockerignore new file mode 100644 index 00000000..20645e64 --- /dev/null +++ b/backend/rtmpServer/.dockerignore @@ -0,0 +1 @@ +ffmpeg diff --git a/backend/rtmpServer/dockerfile b/backend/rtmpServer/dockerfile new file mode 100644 index 00000000..1a86f192 --- /dev/null +++ b/backend/rtmpServer/dockerfile @@ -0,0 +1,28 @@ +FROM node:20-alpine + +RUN corepack enable + +# Setting working directory +WORKDIR /app + +# Copying package.json and package-lock.json +COPY package*.json ./ + +# Copying all the files +COPY . ./ + +# Install FFmpeg. This is needed to convert the video to HLS +RUN apk add --no-cache ffmpeg + +# /usr/bin/ffmpeg is the default path for ffmpeg, copy it to /app +RUN cp /usr/bin/ffmpeg ./nodeMediaServer + +# Installing dependencies +RUN yarn install + +# Exposing ports +EXPOSE 8000 +EXPOSE 1935 + +# Running the app +CMD ["yarn", "start"] diff --git a/backend/rtmpServer/package.json b/backend/rtmpServer/package.json index db81afe5..6014b4e7 100644 --- a/backend/rtmpServer/package.json +++ b/backend/rtmpServer/package.json @@ -1,18 +1,28 @@ { "name": "rtmpServer", + "private": true, "packageManager": "yarn@4.5.1", "dependencies": { - "nodeMediaServer": "workspace:^" + "@hoeeeeeh/node-media-server": "2.7.28", + "@types/node": "^22.9.0", + "dotenv": "^16.4.5", + "path": "0.12.7" }, - "workspaces": [ - "nodeMediaServer" - ], "scripts": { - "start": "tsx src/index.ts" + "start": "tsx src/index.ts", + "build": "tsc -b", + "lint": "eslint ." }, "devDependencies": { - "dotenv": "^16.4.5", - "tsx": "^4.19.2" + "@eslint/js": "^9.13.0", + "@types/node": "^22.9.0", + "@typescript-eslint/eslint-plugin": "^8.14.0", + "@typescript-eslint/parser": "^8.14.0", + "eslint": "^9.13.0", + "globals": "^15.11.0", + "tsx": "^4.19.2", + "typescript": "^5.6.3", + "typescript-eslint": "^8.11.0" }, "type": "module" } diff --git a/backend/rtmpServer/src/index.ts b/backend/rtmpServer/src/index.ts index 54236cd0..8b9f6af3 100644 --- a/backend/rtmpServer/src/index.ts +++ b/backend/rtmpServer/src/index.ts @@ -1,20 +1,17 @@ -import { resolve, dirname } from 'path'; -import { fileURLToPath } from 'url'; +import NodeMediaServer from '@hoeeeeeh/node-media-server'; + import dotenv from 'dotenv'; +import path from 'path'; // 상위 디렉터리의 .env 파일을 불러오기 -dotenv.config({ - path: resolve('../../.env'), // 필요에 따라 경로 수정 -}); - -import NodeMediaServer from 'nodeMediaServer'; - - +dotenv.config({ path: path.resolve('../.env') }); const httpConfig = { port: 8000, - allow_origin: "*", - mediaroot: "../nodeMediaServer/media", + allow_origin: '*', + + //package.json 기준 + mediaroot: '../media' }; const rtmpConfig = { @@ -22,26 +19,39 @@ const rtmpConfig = { chunk_size: 60000, gop_cache: true, ping: 10, - ping_timeout: 60, + ping_timeout: 60 }; const transformationConfig = { - ffmpeg: "../nodeMediaServer/ffmpeg", + //package.json 기준 + ffmpeg: path.resolve('../ffmpeg'), tasks: [ { - app: "live", + app: 'live', hls: true, - hlsFlags: "[hls_time=2:hls_list_size=3:hls_flags=delete_segments]", - hlsKeep: false, - }, + hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]', + hlsKeep: false + } ], - MediaRoot: "../nodeMediaServer/media", + //package.json 기준 + MediaRoot: '../media' +}; + +const S3ClientConfig = { + region: process.env.OBJECT_STORAGE_REGION || '', + endpoint: process.env.OBJECT_STORAGE_ENDPOINT || '', + credentials: { + accessKeyId: process.env.OBJECT_STORAGE_ACCESS_KEY_ID || '', + secretAccessKey: process.env.OBJECT_STORAGE_SECRET_ACCESS_KEY || '' + } }; +console.log(S3ClientConfig); const config = { + s3Client: S3ClientConfig, http: httpConfig, rtmp: rtmpConfig, - trans: transformationConfig, + trans: transformationConfig }; const nodeMediaServer = new NodeMediaServer(config); diff --git a/backend/rtmpServer/tsconfig.json b/backend/rtmpServer/tsconfig.json new file mode 100644 index 00000000..5bc14d4b --- /dev/null +++ b/backend/rtmpServer/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "outDir": "./.dist" + } +} diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 56a8ab81..b28bc356 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -1,110 +1,13 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ + "target": "es2016", - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "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. */ + "module": "CommonJS", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - /* 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 legacy experimental 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. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* 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. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''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. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "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. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "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. */ - // "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. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ - // "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": true, /* 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. */ - // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when 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, /* Add 'undefined' to a type when accessed using an index. */ - // "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. */ + "strict": true, + "skipLibCheck": true, + "baseUrl": "." } } diff --git a/frontend/package.json b/frontend/package.json index 3dd0704d..613ae2fb 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,7 +18,6 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-router-dom": "^6.27.0", - "shared": "workspace:^", "styled-components": "^6.1.13" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index ca0963f4..68d0cfa0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -97,7 +97,7 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-s3@npm:^3.685.0": +"@aws-sdk/client-s3@npm:^3.688.0": version: 3.689.0 resolution: "@aws-sdk/client-s3@npm:3.689.0" dependencies: @@ -1310,7 +1310,7 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.14.0, @eslint/js@npm:^9.13.0": +"@eslint/js@npm:9.14.0, @eslint/js@npm:^9.13.0, @eslint/js@npm:^9.14.0": version: 9.14.0 resolution: "@eslint/js@npm:9.14.0" checksum: 10c0/a423dd435e10aa3b461599aa02f6cbadd4b5128cb122467ee4e2c798e7ca4f9bb1fce4dcea003b29b983090238cf120899c1af657cf86300b399e4f996b83ddc @@ -1333,6 +1333,29 @@ __metadata: languageName: node linkType: hard +"@hoeeeeeh/node-media-server@npm:2.7.28": + version: 2.7.28 + resolution: "@hoeeeeeh/node-media-server@npm:2.7.28::__archiveUrl=https%3A%2F%2Fnpm.pkg.github.com%2Fdownload%2F%40hoeeeeeh%2Fnode-media-server%2F2.7.28%2F825f0ab4dcbfa3b44d6deadec5fba66dd038f926" + dependencies: + "@aws-sdk/client-s3": "npm:^3.688.0" + "@types/node": "npm:^22.9.0" + aws-sdk: "npm:^2.1692.0" + basic-auth-connect: "npm:^1.0.0" + body-parser: "npm:1.20.3" + chalk: "npm:^4.1.0" + dateformat: "npm:^4.6.3" + express: "npm:^4.19.2" + http2-express-bridge: "npm:^1.0.7" + lodash: "npm:^4.17.21" + minimist: "npm:^1.2.8" + mkdirp: "npm:^2.1.5" + ws: "npm:^8.13.0" + bin: + node-media-server: bin/app.js + checksum: 10c0/d979276cf4a9882f5184a290aa0d72d5570bcd5e8d0490e12fd070f92f692e793c704f257de47ad755f418a6975056c9da903074b2b7b3bbb77cba396db79338 + languageName: node + linkType: hard + "@humanfs/core@npm:^0.19.1": version: 0.19.1 resolution: "@humanfs/core@npm:0.19.1" @@ -2842,7 +2865,7 @@ __metadata: languageName: node linkType: hard -"aws-sdk@npm:^2.1691.0": +"aws-sdk@npm:^2.1692.0": version: 2.1692.0 resolution: "aws-sdk@npm:2.1692.0" dependencies: @@ -2864,10 +2887,15 @@ __metadata: version: 0.0.0-use.local resolution: "backend@workspace:backend" dependencies: + "@eslint/js": "npm:^9.14.0" "@types/node": "npm:^22.9.0" - shared: "workspace:^" + "@typescript-eslint/eslint-plugin": "npm:^8.14.0" + "@typescript-eslint/parser": "npm:^8.14.0" + eslint: "npm:^9.14.0" + globals: "npm:^15.12.0" tsx: "npm:^4.19.2" typescript: "npm:^5.6.3" + typescript-eslint: "npm:^8.14.0" languageName: unknown linkType: soft @@ -2894,7 +2922,7 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.3, body-parser@npm:^1.20.3": +"body-parser@npm:1.20.3": version: 1.20.3 resolution: "body-parser@npm:1.20.3" dependencies: @@ -3338,9 +3366,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.41": - version: 1.5.56 - resolution: "electron-to-chromium@npm:1.5.56" - checksum: 10c0/515ee6c8d75fb48f4a7d1ae44cc788cd219c24a3e20a44edb0ee77506687e163dd9663fbf7805c5c5281c52e735605d94d0afd22ec0644ea0e0fb2bc471fd23b + version: 1.5.52 + resolution: "electron-to-chromium@npm:1.5.52" + checksum: 10c0/1c85a5710ad21758780b8e067d5f63ed00416dbe93f64bd8937dbfb4ed98cf93d80c471a30daed439cb91a00ff4942ea2628e00a69d56639cc7070e9e8ab2694 languageName: node linkType: hard @@ -3798,7 +3826,7 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.13.0": +"eslint@npm:^9.13.0, eslint@npm:^9.14.0": version: 9.14.0 resolution: "eslint@npm:9.14.0" dependencies: @@ -4125,7 +4153,6 @@ __metadata: react: "npm:^18.3.1" react-dom: "npm:^18.3.1" react-router-dom: "npm:^6.27.0" - shared: "workspace:^" styled-components: "npm:^6.1.13" typescript: "npm:^5.6.3" typescript-eslint: "npm:^8.11.0" @@ -4286,7 +4313,7 @@ __metadata: languageName: node linkType: hard -"globals@npm:^15.11.0": +"globals@npm:^15.11.0, globals@npm:^15.12.0": version: 15.12.0 resolution: "globals@npm:15.12.0" checksum: 10c0/f34e0a1845b694f45188331742af9f488b07ba7440a06e9d2039fce0386fbbfc24afdbb9846ebdccd4092d03644e43081c49eb27b30f4b88e43af156e1c1dc34 @@ -4524,6 +4551,13 @@ __metadata: languageName: node linkType: hard +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 10c0/6e56402373149ea076a434072671f9982f5fad030c7662be0332122fe6c0fa490acb3cc1010d90b6eff8d640b1167d77674add52dfd1bb85d545cf29e80e73e7 + languageName: node + linkType: hard + "inherits@npm:2.0.4, inherits@npm:^2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" @@ -5325,28 +5359,6 @@ __metadata: languageName: node linkType: hard -"nodeMediaServer@workspace:^, nodeMediaServer@workspace:backend/nodeMediaServer": - version: 0.0.0-use.local - resolution: "nodeMediaServer@workspace:backend/nodeMediaServer" - dependencies: - "@aws-sdk/client-s3": "npm:^3.685.0" - aws-sdk: "npm:^2.1691.0" - basic-auth-connect: "npm:^1.0.0" - body-parser: "npm:^1.20.3" - chalk: "npm:^4.1.0" - dateformat: "npm:^4.6.3" - dotenv: "npm:^16.4.5" - express: "npm:^4.19.2" - http2-express-bridge: "npm:^1.0.7" - lodash: "npm:^4.17.21" - minimist: "npm:^1.2.8" - mkdirp: "npm:^2.1.5" - ws: "npm:^8.13.0" - bin: - nodeMediaServer: bin/app.js - languageName: unknown - linkType: soft - "nopt@npm:^7.0.0": version: 7.2.1 resolution: "nopt@npm:7.2.1" @@ -5366,9 +5378,9 @@ __metadata: linkType: hard "object-inspect@npm:^1.13.1": - version: 1.13.3 - resolution: "object-inspect@npm:1.13.3" - checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 + version: 1.13.2 + resolution: "object-inspect@npm:1.13.2" + checksum: 10c0/b97835b4c91ec37b5fd71add84f21c3f1047d1d155d00c0fcd6699516c256d4fcc6ff17a1aced873197fe447f91a3964178fd2a67a1ee2120cdaf60e81a050b4 languageName: node linkType: hard @@ -5564,6 +5576,16 @@ __metadata: languageName: node linkType: hard +"path@npm:0.12.7": + version: 0.12.7 + resolution: "path@npm:0.12.7" + dependencies: + process: "npm:^0.11.1" + util: "npm:^0.10.3" + checksum: 10c0/f795ce5438a988a590c7b6dfd450ec9baa1c391a8be4c2dea48baa6e0f5b199e56cd83b8c9ebf3991b81bea58236d2c32bdafe2c17a2e70c3a2e4c69891ade59 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" @@ -5611,13 +5633,13 @@ __metadata: linkType: hard "postcss@npm:^8.4.43": - version: 8.4.49 - resolution: "postcss@npm:8.4.49" + version: 8.4.47 + resolution: "postcss@npm:8.4.47" dependencies: nanoid: "npm:^3.3.7" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/f1b3f17aaf36d136f59ec373459f18129908235e65dbdc3aee5eef8eba0756106f52de5ec4682e29a2eab53eb25170e7e871b3e4b52a8f1de3d344a514306be3 + checksum: 10c0/929f68b5081b7202709456532cee2a145c1843d391508c5a09de2517e8c4791638f71dd63b1898dba6712f8839d7a6da046c72a5e44c162e908f5911f57b5f44 languageName: node linkType: hard @@ -5635,6 +5657,13 @@ __metadata: languageName: node linkType: hard +"process@npm:^0.11.1": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: 10c0/40c3ce4b7e6d4b8c3355479df77aeed46f81b279818ccdc500124e6a5ab882c0cc81ff7ea16384873a95a74c4570b01b120f287abbdd4c877931460eca6084b3 + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -5935,9 +5964,18 @@ __metadata: version: 0.0.0-use.local resolution: "rtmpServer@workspace:backend/rtmpServer" dependencies: + "@eslint/js": "npm:^9.13.0" + "@hoeeeeeh/node-media-server": "npm:2.7.28" + "@types/node": "npm:^22.9.0" + "@typescript-eslint/eslint-plugin": "npm:^8.14.0" + "@typescript-eslint/parser": "npm:^8.14.0" dotenv: "npm:^16.4.5" - nodeMediaServer: "workspace:^" + eslint: "npm:^9.13.0" + globals: "npm:^15.11.0" + path: "npm:0.12.7" tsx: "npm:^4.19.2" + typescript: "npm:^5.6.3" + typescript-eslint: "npm:^8.11.0" languageName: unknown linkType: soft @@ -6122,7 +6160,7 @@ __metadata: languageName: node linkType: hard -"shared@workspace:^, shared@workspace:shared": +"shared@workspace:shared": version: 0.0.0-use.local resolution: "shared@workspace:shared" languageName: unknown @@ -6574,7 +6612,7 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:^8.11.0": +"typescript-eslint@npm:^8.11.0, typescript-eslint@npm:^8.14.0": version: 8.14.0 resolution: "typescript-eslint@npm:8.14.0" dependencies: @@ -6685,6 +6723,15 @@ __metadata: languageName: node linkType: hard +"util@npm:^0.10.3": + version: 0.10.4 + resolution: "util@npm:0.10.4" + dependencies: + inherits: "npm:2.0.3" + checksum: 10c0/d29f6893e406b63b088ce9924da03201df89b31490d4d011f1c07a386ea4b3dbe907464c274023c237da470258e1805d806c7e4009a5974cd6b1d474b675852a + languageName: node + linkType: hard + "util@npm:^0.12.4": version: 0.12.5 resolution: "util@npm:0.12.5"