github JavaScript analyzed 5cc7c96

reaatech/funcdock

github

Self-hosted Node.js FaaS platform — run dozens of functions in a single container with zero cold starts, hot reload, and automatic MCP tool exposure for AI agents. Built-in React dashboard, OpenTelemetry tracing, TypeScript native, shared layers, cron scheduling, and CI/CD deployments.

maintainer
reaatech
licence
MIT
first seen
2026-06-08
last seen
2026-08-22
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport stdio · streamable-http · http counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 5cc7c96 · analyzer v33 · 3w ago

skills & prompt files 4

code evidence vHEAD · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 94

filesystem 10

  • fs reaatech-funcdock-5cc7c96/cli/commands/create.js :5 import fs from 'fs/promises';
  • fs (weak) reaatech-funcdock-5cc7c96/scripts/deploy-from-host.js :17 import fs from 'fs/promises';
  • fs (weak) reaatech-funcdock-5cc7c96/scripts/deploy.js :8 import fs from 'fs/promises';
  • fs (weak) reaatech-funcdock-5cc7c96/scripts/setup.js :8 import fs from 'fs/promises';
  • fs (weak) reaatech-funcdock-5cc7c96/scripts/test-function-in-docker.js :5 import fs from 'fs';
  • fs reaatech-funcdock-5cc7c96/server.js :2 import fs from 'fs/promises';
  • fs reaatech-funcdock-5cc7c96/utils/deployment-backup.js :10 import fs from 'fs/promises';
  • fs reaatech-funcdock-5cc7c96/utils/layer-loader.js :1 import fs from 'fs/promises';
  • fs reaatech-funcdock-5cc7c96/utils/logger.js :1 import fs from 'fs/promises';
  • fs (weak) reaatech-funcdock-5cc7c96/utils/test-runner.js :12 import fs from 'fs/promises';

shell / exec 19

  • shell reaatech-funcdock-5cc7c96/cli/commands/deploy.js :109 await exec('node', deployArgs);
  • shell reaatech-funcdock-5cc7c96/cli/commands/dev.js :20 await exec('npm', ['run', 'dev']);
  • shell reaatech-funcdock-5cc7c96/cli/commands/list.js :19 await exec('node', ['scripts/deploy.js', '--list']);
  • shell reaatech-funcdock-5cc7c96/cli/commands/logs.js :43 await exec('npm', ['run', 'error-logs']);
  • shell reaatech-funcdock-5cc7c96/cli/commands/remove.js :27 await exec('node', ['scripts/deploy.js', '--remove', name]);
  • shell reaatech-funcdock-5cc7c96/cli/commands/setup.js :19 await exec('node', ['scripts/setup.js']);
  • shell reaatech-funcdock-5cc7c96/cli/commands/start.js :19 await exec('npm', ['start']);
  • shell (weak) reaatech-funcdock-5cc7c96/cli/commands/test.js :59 await exec('node', ['scripts/test-function-in-docker.js', '--function', funcPath]);
  • shell reaatech-funcdock-5cc7c96/cli/commands/update.js :55 await exec('node', deployArgs);
  • shell reaatech-funcdock-5cc7c96/cli/utils.js :5 import { spawn } from 'child_process';
  • shell (weak) reaatech-funcdock-5cc7c96/scripts/check-git-config.js :8 import { exec } from 'child_process';
  • shell (weak) reaatech-funcdock-5cc7c96/scripts/deploy-from-host.js :19 import { spawn } from 'child_process';
show 7 more
  • shell (weak) reaatech-funcdock-5cc7c96/scripts/deploy.js :10 import { spawn } from 'child_process';
  • shell (weak) reaatech-funcdock-5cc7c96/scripts/prepare.js :1 import { execSync } from 'child_process';
  • shell (weak) reaatech-funcdock-5cc7c96/scripts/test-function-in-docker.js :3 import { execSync, spawn } from 'child_process';
  • shell reaatech-funcdock-5cc7c96/server.js :8 import { exec } from 'child_process';
  • shell reaatech-funcdock-5cc7c96/utils/deployment-backup.js :12 import { spawn } from 'child_process';
  • shell reaatech-funcdock-5cc7c96/utils/layer-loader.js :4 import { spawn } from 'child_process';
  • shell (weak) reaatech-funcdock-5cc7c96/utils/test-runner.js :10 import { spawn, exec } from 'child_process';

network 8

  • net reaatech-funcdock-5cc7c96/dashboard/src/utils/api.js :1 import axios from 'axios';
  • net reaatech-funcdock-5cc7c96/functions/hello-world/cron-env-test.js :33 // const response = await fetch('https://api.example.com', {
  • net reaatech-funcdock-5cc7c96/mcp-server.js :7 import { createServer } from 'http';
  • net reaatech-funcdock-5cc7c96/public/dashboard/assets/index-Da2lERX1.js :1 n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var o=`modulepreload`,s=function(e){return`/dashboard/`+e},c={},l=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.
  • net (weak) reaatech-funcdock-5cc7c96/scripts/deploy-from-host.js :588 const res = await fetch(reloadUrl, {
  • net (weak) reaatech-funcdock-5cc7c96/scripts/deploy.js :583 const res = await fetch(reloadUrl, {
  • net reaatech-funcdock-5cc7c96/server.js :17 import { createServer } from 'http';
  • net reaatech-funcdock-5cc7c96/utils/logger.js :418 const response = await fetch(webhookUrl, {

secrets 14

  • secrets reaatech-funcdock-5cc7c96/cli/commands/reload.js :24 if (process.env.DEPLOY_API_KEY) {
  • secrets reaatech-funcdock-5cc7c96/cli/commands/status.js :24 if (process.env.DEPLOY_API_KEY) {
  • secrets reaatech-funcdock-5cc7c96/functions/webhook-handler/github.js :36 const secret = req.env?.GITHUB_WEBHOOK_SECRET || process.env.GITHUB_WEBHOOK_SECRET;
  • secrets (weak) reaatech-funcdock-5cc7c96/functions/webhook-handler/github.test.mjs :39 const originalSecret = process.env.GITHUB_WEBHOOK_SECRET;
  • secrets reaatech-funcdock-5cc7c96/functions/webhook-handler/handler.js :108 const secret = req.env?.GITHUB_WEBHOOK_SECRET || process.env.GITHUB_WEBHOOK_SECRET;
  • secrets (weak) reaatech-funcdock-5cc7c96/functions/webhook-handler/handler.test.mjs :47 const originalGitHubSecret = process.env.GITHUB_WEBHOOK_SECRET;
  • secrets reaatech-funcdock-5cc7c96/functions/webhook-handler/slack.js :38 const slackSecret = req.env?.SLACK_SIGNING_SECRET || process.env.SLACK_SIGNING_SECRET;
  • secrets (weak) reaatech-funcdock-5cc7c96/functions/webhook-handler/slack.test.mjs :41 const originalSecret = process.env.SLACK_SIGNING_SECRET;
  • secrets reaatech-funcdock-5cc7c96/functions/webhook-handler/stripe.js :10 const stripeSecret = req.env?.STRIPE_WEBHOOK_SECRET || process.env.STRIPE_WEBHOOK_SECRET;
  • secrets (weak) reaatech-funcdock-5cc7c96/functions/webhook-handler/stripe.test.mjs :39 const originalStripeSecret = process.env.STRIPE_WEBHOOK_SECRET;
  • secrets reaatech-funcdock-5cc7c96/mcp-server.js :17 const MCP_API_KEY = process.env.MCP_API_KEY || '';
  • secrets (weak) reaatech-funcdock-5cc7c96/scripts/deploy-from-host.js :584 if (process.env.DEPLOY_API_KEY) {
show 2 more
  • secrets (weak) reaatech-funcdock-5cc7c96/scripts/deploy.js :579 if (process.env.DEPLOY_API_KEY) {
  • secrets reaatech-funcdock-5cc7c96/server.js :88 const JWT_SECRET = process.env.JWT_SECRET;

install hooks 1

  • prepare reaatech-funcdock-5cc7c96/package.json :37 node scripts/prepare.js

declared dependencies 46

  • @modelcontextprotocol/sdk@^1.0.4
  • @opentelemetry/api@^1.9.0
  • @opentelemetry/auto-instrumentations-node@^0.57.0
  • @opentelemetry/exporter-trace-otlp-http@^0.57.0
  • @opentelemetry/resources@^2.7.1
  • @opentelemetry/sdk-node@^0.57.0
  • @opentelemetry/sdk-trace-node@^2.7.1
  • @opentelemetry/semantic-conventions@^1.28.0
  • bcryptjs@^3.0.3
  • chokidar@^5.0.0
  • compression@^1.7.5
  • cookie-parser@^1.4.7
show 28 more
  • cors@^2.8.6
  • dotenv@^17.4.2
  • express@^5.2.1
  • express-rate-limit@^8.5.2
  • express-validator@^7.2.1
  • helmet@^8.0.0
  • jsonwebtoken@^9.0.3
  • morgan@^1.10.0
  • multer@^2.1.1
  • node-cron@^4.2.1
  • socket.io@^4.8.3
  • tsx@^4.21.1
  • typescript@^6.0.3
  • zod@^4.4.3
  • @eslint/js@^10.0.1
  • @types/bcryptjs@^3.0.0
  • @types/cors@^2.8.17
  • @types/express@^5.0.0
  • @types/jsonwebtoken@^9.0.7
  • @types/morgan@^1.9.9
  • @types/multer@^2.1.0
  • @types/node@^26.0.1
  • @types/node-cron@^3.0.11
  • @typescript-eslint/eslint-plugin@^8.59.4
  • @typescript-eslint/parser@^8.59.4
  • eslint@^10.2.1
  • globals@^17.5.0
  • husky@^9.1.7

6 more not shown — this panel samples each group; the count above is the real total.

obfuscation 1

  • dynamic require()/import() reaatech-funcdock-5cc7c96/server.js :857 const handlerModule = await import(`${handlerPath}?update=${Date.now()}`);