Public
one.dsrupt.ai 扒站报告:前端归档 + 接口地图
aiscraper
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.

Dsrupt One · 扒站报告

https://one.dsrupt.ai/ 的完整拆解:整站前端已归档(2 个文件 / 3.62 MB),207 个后端接口已枚举出路径和 HTTP 方法,69 条前端路由5 组硬编码密钥53 篇帮助文档全文全部拿到。

这个站是什么

Dsrupt OneDsrupt.ai多品牌 AI 创作工作台,面向代理商和创意团队。

核心卖点不是「又一个 AI 生图站」,而是品牌一致性:你把客户品牌的 CI、logo、网站地址喂进去,平台自动生成品牌指南(颜色、语气、规则、字体),之后每一次生成都自动套用这套规范。配合 MCP,它把能力接进 ChatGPT / Claude / Manus / Cursor —— 你在聊天框里说一句话,出来的图就是你的品牌。

产品线有两条:

产品说明
Dsrupt One多品牌 AI 工作台(本站,one.dsrupt.ai),自助注册、已上线
AI Activations线下活动/战役的品牌化 AI 体验,把参会者变成一方数据
维度情况
前端Vite + React 18 SPA,单包 3.57 MB(无懒加载分包),TanStack Query + zustand,Tailwind/Radix
后端Rails —— user[email] 参数风格、/ui_api/ 命名空间、{status, error} 错误体
鉴权JWT(Authorization: Bearer)+ 游客 token(/ui_api/guest)+ Google 登录 + Cloudflare Turnstile
支付Stripe(前端硬编码 publishable key、js.stripe.com
可观测PostHog(埋点)+ Sentry
CDNCloudFront(d2s57ng2ndjfn.cloudfront.net,存指南视频和素材)
多租户organisations(组织)+ brands(品牌)+ campaigns(战役)+ workspaces(工作区)

扒到了什么

项目数量说明
前端文件2HTML 壳 + 1 个 JS 单包 + 1 个 CSS,共 3.62 MB,存进本 val 的 blob(键前缀 mirror/
后端接口207全部 /ui_api/*,带 HTTP 方法:POST 127 / GET 55 / DELETE 37 / PATCH 28 / PUT 3
前端路由69从 React Router 的 path:"…" 提取
硬编码密钥5 组见下
帮助文档53 篇/ui_api/help 全文,含标题、分类、标签、正文
指南模块9 个/ui_api/guides,含视频地址与章节正文

那 207 条不是猜路径试出来的:先定位到前端唯一的请求包装函数 he(path, opts)fetch(\${API_BASE_URL}${path}`),再从单包里正则提取所有 /ui_api/出现点,并往后扫 400 字符抓method:"…"`。所以每条都带真实 HTTP 方法出处分包

后端地址是前端硬编码的

单包里有这么一行:

zs = window.location.hostname === "one.dsrupt.ai" ? "https://backend.dsrupt.ai" : "https://dsrupt-backend-staging-5c326933ece6.herokuapp.com"

含义:one.dsrupt.ai 上打开时打生产后端;在任何其他域名(含本地开发)打开时,前端会把请求直接打到 staging 后端。

也就是说那个 Heroku staging 地址是公开可发现的,而且前端还专门写了迁移逻辑把 localStorage 里旧的 herokuapp.com 地址改回生产地址:

migrate: e => { if (e?.API_BASE_URL?.includes("herokuapp.com")) e.API_BASE_URL = zs; return e }

泄露的配置

全部来自前端单包,任何人都能在浏览器里看到:

项目
PostHog 项目 keyphc_mv3vnxXt5BF6iUmoSXKDSMz45JVjv9g5qdBYs3DgG3hu
Cloudflare Turnstile sitekey0x4AAAAAAE1m9aEjG1lSegJx
CloudFront CDNhttps://d2s57ng2ndjfn.cloudfront.net
Google OAuth client id83826095488-vcpkjj8ovmj13n70bkbgkld1079ofe0l.apps.googleusercontent.com
staging 后端https://dsrupt-backend-staging-5c326933ece6.herokuapp.com

publishable key / sitekey / 项目 key 本身设计为公开(必须发给浏览器),不算漏洞。但它们是可被滥用的入口:PostHog key 能往你的项目里灌假事件,Turnstile sitekey 能被拿去刷你的验证配额,Google client id 能用来伪造 OAuth 流程的起点。staging 后端地址则是攻击面本身。

无需登录就能拿到的

接口返回
/.well-known/oauth-authorization-server完整 OAuth 2.1 元数据(MCP 接入用,含 register/revoke 端点)
/ui_api/help53 篇帮助文档的索引(key / 标题 / 分类 / 标签)
/ui_api/help/:key单篇帮助文档全文
/ui_api/guides9 个指南模块 + 章节正文 + 视频地址
/ui_api/demo/view/:id存在(返回 400,参数不对)
/mcp存在(返回 401,需 OAuth)

其余 200 条一律 401 Unauthorized

接口地图(按模块)

模块前缀内容
管理后台/ui_api/admin/*用户、组织、邀请、定价(plans/packages/scenarios/workflows)、声音、语音同意审核、发布战役
品牌/ui_api/brands/*品牌 CRUD、核心(core)、指南生成/改写、资产、战役
素材/ui_api/assets/*素材 CRUD、自动分类建议
生成/ui_api/predictions/*/ui_api/video_predictions/*/ui_api/audio_predictions/*图像/视频/音频生成、分类、公开、下载、放大、品牌绑定
活动/ui_api/events/*活动 CRUD、统计、二维码、定制、群发、配额分配、激活报价、Stripe PaymentIntent
工具/ui_api/tools/*工具运行、HTML、升级、公开工具开关
主题/ui_api/themes/*主题 CRUD、参考图、生成预览
直通访问/ui_api/direct_access/*/ui_api/direct_access_v2/*活动码换内容、生成、HTML
积分/ui_api/credits/*交易流水、用量分析
声音/ui_api/voices/*/ui_api/toolbar/voices/*声音库、同意书
组织/ui_api/organisations/*/ui_api/organisation_invitations/*组织、邀请(含 claim link / 邮件投递)
账号/ui_api/guest/ui_api/login/ui_api/signup/users/password游客、登录、注册、找回密码
其他/ui_api/help/ui_api/guides/ui_api/voice_consent/*帮助、指南、语音同意

完整 207 条见报告页「接口地图」标签页,支持按方法筛选和路径搜索。

前端路由(从单包的路由表提取)

/  /account  /activation  /activation-info  /ad-multiplier  /admin  /admin/invitations
/audio_gallery  /blockout  /branded-demos  /branded_demos  /brands  /brands/:id
/cast  /cast/e/:elementId  /chat  /create  /create/examples  /create/m/:mediaId
/direct-access-v2/:codes  /direct-access/:codes  /director  /events  /events/:eventId/stats
/events/:id  /flow  /guides  /guides/:key  /help  /help/:key  /invite/:token  /login
/mcp-access  /mcp/ad-multiplier  /mcp/blockout  /mcp/director  /mcp/music-video  /music-video
/oauth/authorize  /org-admin  /org-admin/quote  /organisations/:id  /reset-password
/reset-password/:token  /signup  /simple_video_gallery  /stats  /studio  /studio/m/:mediaId
/templates  /themes/:id  /tools  /tools/:id  /tools/build  /tools/enhance  /tools/filter
/tools/instagram_splitter  /tools/public  /tools/remove-background  /tools/theme-builder
/tools/upscale  /tools/vectorize  /tools/video-upscale  /users/password/edit
/voice-consent/:token  /voice-consent/revoke/:token  /voices  /whats-new  /workspace

/mcp/* 那几条很有意思:ad-multiplier、blockout、director、music-video —— 说明 MCP 侧暴露的是具体创作工作流,不是通用接口。

架构

Rendering mermaid diagram...

文件结构

index.ts              ← Hono 后端:报告页 + 6 个数据接口
harvest.ts            ← 抓取脚本(可重跑,会覆盖)
frontend/
  root.tsx            ← HTML 壳
  index.tsx           ← React 入口
  components/
    App.tsx           ← 报告 UI(概览 / 接口地图 / 前端路由 / 公开内容 / 泄露配置 / 归档文件)

blob 存储(本 val 私有):

manifest.json         ← 归档清单:文件、接口数、路由数、泄露项、host 统计
api-map.json          ← 207 条接口:路径 + 方法 + 出处分包
routes.json           ← 69 条前端路由
hosts.json            ← 单包里出现的所有第三方 host
config.json           ← 硬编码配置 + 后端 base 判定逻辑原文
public-data.json      ← 公开接口探测结果
public-content.json   ← 53 篇帮助文档 + 指南 + OAuth 元数据全文
mirror/index.html     ← 原站 HTML 壳
mirror/assets/*       ← 单包 JS + CSS

重跑

直接 Run harvest.ts。它会重新拉一遍原站、覆盖归档和接口地图。原站前端文件名带哈希(当前 index-DPXPu-4s.js),发版后哈希会变,重跑就能跟上。

没扒到的,和为什么

除上面 6 个公开接口外,其余 200 条全部返回 401。也就是说:品牌数据、生成记录、活动数据、积分流水、用户与组织、定价方案 —— 这些都在登录墙后面,没有账号拿不到。

想继续往下扒,两条路:

  1. 给我一个已登录的 token。 在浏览器登录后打开 DevTools → Application → Local Storage → auth-storage,把 user.token 的值发我。有它我就能把 /ui_api/brands/ui_api/predictions/ui_api/admin/* 这些全量拉下来归档。
  2. 自己跑。 harvest.tsget() 加一个 Authorization 头,把 probePaths 换成想拉的路径,重跑即可。

⚠️ token 等同于账号密码,只在你自己信任的环境里用;我不会把它写进代码或存进 val。

合规提醒

这份归档是公开可访问的前端静态资源(任何人打开浏览器都能拿到)、接口路径清单无需登录即可访问的公开文档,不含任何用户数据、私有内容或密钥。

但要注意:

  • 整站复制他人前端代码用于公开发布,涉及对方著作权。
  • 接口地图用于对自己账号下的数据做备份没问题;用来批量抓取他人数据则可能违反对方服务条款(见 https://dsrupt.ai/terms-of-service)。
  • 泄露的 key 虽设计为公开,但不要拿去刷别人的配额

自己评估用途。