commit ec5e7a7ae4d9acacb492cf9069abbbf6fd016676 Author: xion Date: Wed Aug 13 22:53:50 2025 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7ccf50a --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules + +auto \ No newline at end of file diff --git a/auto-demo/demo/demo.ts b/auto-demo/demo/demo.ts new file mode 100644 index 0000000..d828445 --- /dev/null +++ b/auto-demo/demo/demo.ts @@ -0,0 +1,6 @@ +import { AutoData } from '../../src/auto-proxy/index.ts' + + +const autoData: AutoData = { + id: 'demo', +} \ No newline at end of file diff --git a/auto-demo/demo/index.ts b/auto-demo/demo/index.ts new file mode 100644 index 0000000..96be5f7 --- /dev/null +++ b/auto-demo/demo/index.ts @@ -0,0 +1,12 @@ +import { listenSocket, QueryRouterServer } from '@kevisual/router/auto.ts' + + +const app = new QueryRouterServer(); + +app.route({ + path: 'demo' +}).define(async (ctx) => { + ctx.body = 'Hello, this is the demo route!'; +}).addTo(app); + +listenSocket({ app, timeout: 10 * 60 * 1000 }); \ No newline at end of file diff --git a/auto-demo/demo/package.json b/auto-demo/demo/package.json new file mode 100644 index 0000000..aabfe88 --- /dev/null +++ b/auto-demo/demo/package.json @@ -0,0 +1,10 @@ +{ + "name": "auto-demo", + "version": "0.0.1", + "app": { + "key": "auto", + "entry": "index.ts", + "engine": "bun", + "type": "pm2-system-app" + } +} \ No newline at end of file diff --git a/auto-demo/demo/test/call.ts b/auto-demo/demo/test/call.ts new file mode 100644 index 0000000..3e50064 --- /dev/null +++ b/auto-demo/demo/test/call.ts @@ -0,0 +1,8 @@ +import { callSock } from "@kevisual/router/src/auto/call-sock.ts"; + + +callSock({ path: 'demo' }, { + // socketPath: '../app.sock', +}).then((resp) => { + console.log(resp); +}); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..6b47fa0 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "@kevisual/auto-proxy", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "dev": "bun --watch src/dev.ts" + }, + "keywords": [], + "author": "", + "license": "ISC", + "packageManager": "pnpm@10.14.0", + "devDependencies": { + "@kevisual/router": "0.0.26-alpha.5", + "@kevisual/types": "^0.0.10", + "@types/node": "^24.2.1", + "nanoid": "^5.1.5", + "zod": "^4.0.17" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..6bb0ad0 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,231 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@kevisual/router': + specifier: 0.0.26-alpha.5 + version: 0.0.26-alpha.5 + '@kevisual/types': + specifier: ^0.0.10 + version: 0.0.10 + '@types/node': + specifier: ^24.2.1 + version: 24.2.1 + nanoid: + specifier: ^5.1.5 + version: 5.1.5 + zod: + specifier: ^4.0.17 + version: 4.0.17 + + auto-demo/demo: {} + +packages: + + '@kevisual/router@0.0.26-alpha.5': + resolution: {integrity: sha512-yVblzdMrX79nlmX4lE6I081gqA5ThrrroZsOf4SSh/kH6QQUT7Z57Oidtvfoz+d3Vg1nrvFDEni6+I9DZkTJyw==} + + '@kevisual/types@0.0.10': + resolution: {integrity: sha512-Q73uzzjk9UidumnmCvOpgzqDDvQxsblz22bIFuoiioUFJWwaparx8bpd8ArRyFojicYL1YJoFDzDZ9j9NN8grA==} + + '@types/node@24.2.1': + resolution: {integrity: sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@5.1.5: + resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} + engines: {node: ^18 || >=20} + hasBin: true + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + selfsigned@3.0.1: + resolution: {integrity: sha512-6U6w6kSLrM9Zxo0D7mC7QdGS6ZZytMWBnj/vhF9p+dAHx6CwGezuRcO4VclTbrrI7mg7SD6zNiqXUuBHOVopNQ==} + engines: {node: '>=10'} + + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + undici-types@7.10.0: + resolution: {integrity: sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==} + + zod@4.0.17: + resolution: {integrity: sha512-1PHjlYRevNxxdy2JZ8JcNAw7rX8V9P1AKkP+x/xZfxB0K5FYfuV+Ug6P/6NVSR2jHQ+FzDDoDHS04nYUsOIyLQ==} + +snapshots: + + '@kevisual/router@0.0.26-alpha.5': + dependencies: + path-to-regexp: 8.2.0 + selfsigned: 3.0.1 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + + '@kevisual/types@0.0.10': {} + + '@types/node@24.2.1': + dependencies: + undici-types: 7.10.0 + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + depd@2.0.0: {} + + ee-first@1.1.1: {} + + encodeurl@2.0.0: {} + + escape-html@1.0.3: {} + + etag@1.8.1: {} + + fresh@2.0.0: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + inherits@2.0.4: {} + + mime-db@1.54.0: {} + + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + + ms@2.1.3: {} + + nanoid@5.1.5: {} + + node-forge@1.3.1: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + path-to-regexp@8.2.0: {} + + range-parser@1.2.1: {} + + selfsigned@3.0.1: + dependencies: + node-forge: 1.3.1 + + send@1.2.0: + dependencies: + debug: 4.4.1 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + setprototypeof@1.2.0: {} + + statuses@2.0.1: {} + + statuses@2.0.2: {} + + toidentifier@1.0.1: {} + + undici-types@7.10.0: {} + + zod@4.0.17: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..a02a7fa --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - './auto-demo/*' \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..4e768b5 --- /dev/null +++ b/readme.md @@ -0,0 +1 @@ +# \ No newline at end of file diff --git a/src/auto-proxy/index.ts b/src/auto-proxy/index.ts new file mode 100644 index 0000000..4c61af3 --- /dev/null +++ b/src/auto-proxy/index.ts @@ -0,0 +1,36 @@ +import { callSock } from "@kevisual/router/src/auto/call-sock.js"; +import fs from "node:fs"; + +export const fileIsExists = (path: string) => { + try { + fs.accessSync(path, fs.constants.F_OK); + return true + } catch (e) { + return false; + } +}; +export type AutoData = { + id?: string; + entry?: string; + cwd?: string; + status?: 'running' | 'stopped' | 'error'; + pid?: number; + sock?: string; + lastRunTime?: string; + [key: string]: any; +} + +export class AutoProxy { + data = new Map(); + query(id: string, msg?: any) { + const data = this.data.get(id); + if (!data) { + throw new Error(`No data found for id: ${id}`); + } + + return callSock(msg, { + socketPath: data.sock!, + timeout: 10 * 60 * 1000 + }); + } +} \ No newline at end of file diff --git a/src/dev.ts b/src/dev.ts new file mode 100644 index 0000000..92abd98 --- /dev/null +++ b/src/dev.ts @@ -0,0 +1,11 @@ +console.log('ssdf dff') + +import { createServer } from 'http'; + +createServer((req, res) => { + console.log('Server is running'); + const id = 'demo'; + +}).listen(3000, () => { + console.log('Server is listening on port 3000'); +}); \ No newline at end of file