Files
l1shen b969ec0b4e feat: add cloud project OAuth and remote execution (#627)
## Summary

Add OOMOL cloud OAuth as a provider authorization source. Users can save
an encrypted project API key, select a cloud provider configuration,
authorize named connections, and run their actions and proxy requests
through SaaS. Existing connections retain their source when the provider
default changes, and third-party credentials remain in SaaS.

- Implement project discovery, OAuth request synchronization, remote
execution, and persistent cleanup of disconnected cloud accounts. Add
SQLite, PostgreSQL, and D1 migrations and storage support, with instance
reset and maintenance tooling.
- Add Console project and authorization settings, localized errors,
disconnect notifications, and styled OAuth completion pages that close
after successful authorization. Align local development callback origins
and proxy routes.
- Improve safe request diagnostics and retry transient project
health-check failures once. Execution requests are not automatically
replayed.
- Group storage implementations by database backend, share guarded HTTP
requests with Marketplace, update Zod to 4.6.5, and load provider icons
from the public catalog.
- Document setup, maintenance, and the manual acceptance checklist.

## Validation

- `npm run fix-check` passed.
- `npm run build:web` passed.
- Latest focused regression run: 346 tests passed across 33 files
covering Console, SaaS project/client/routes, OAuth completion, and
guarded HTTP requests.
- Earlier implementation validation included the broader runtime/storage
suites and a real PostgreSQL integration run. Full deployed
action/proxy, cleanup recovery, and D1 maintenance acceptance remain
documented manual checks; they are not claimed as completed by the unit
tests.

## Deployment notes

Apply migrations `0014_saas_project` and `0015_saas_cleanup_runtime`,
configure encryption and an explicit `OOMOL_CONNECT_ORIGIN`, and enable
the relevant cleanup scheduling. The remote SaaS deployment must support
the project OAuth and remote execution APIs described in
`docs/saas-oauth.md`.
2026-09-30 13:25:49 +08:00

87 lines
3.0 KiB
JSON

{
"name": "@oomol-lab/open-connector",
"version": "0.0.0-development",
"private": true,
"workspaces": [
"web"
],
"type": "module",
"scripts": {
"postinstall": "node scripts/ensure-generated.ts",
"dev": "node scripts/dev-local.ts",
"build": "npm run typecheck",
"build:web": "npm run build --workspace web",
"build:binary": "npm run generate:catalog && npm run build:web && bun scripts/build-binary.ts",
"dev:cloudflare": "npm run generate:catalog && npm run build:web && node scripts/copy-catalog-assets.ts && wrangler dev --config wrangler.local.jsonc",
"deploy:cloudflare": "npm run generate:catalog && npm run build:web && node scripts/copy-catalog-assets.ts && wrangler deploy --config wrangler.local.jsonc --minify",
"start": "node scripts/ensure-generated.ts && node src/server/index.ts",
"test": "vitest run",
"typecheck": "npm run generate:registry && node scripts/typecheck.ts",
"generate:registry": "node scripts/generate-provider-registry.ts",
"generate:catalog": "node scripts/generate-catalog.ts",
"runtime:migrate": "node scripts/runtime-data.ts migrate",
"runtime:data": "node scripts/runtime-data.ts",
"lint": "oxlint .",
"lint:fix": "oxlint . --fix",
"format": "oxfmt --check .",
"format:fix": "oxfmt .",
"fix": "npm run lint:fix && npm run format:fix",
"fix-check": "npm run fix && npm run typecheck",
"build:runtime": "npm run generate:catalog && node scripts/build-runtime-package.ts"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.1111.0",
"@cfworker/json-schema": "^4.1.1",
"@hono/node-server": "^2.0.10",
"@modelcontextprotocol/client": "^2.0.0",
"@modelcontextprotocol/server": "^2.0.0",
"@scalar/hono-api-reference": "^0.11.7",
"ali-oss": "^6.23.0",
"busboy": "^1.6.0",
"fast-xml-builder": "^1.3.0",
"fast-xml-parser": "^5.10.1",
"fast-xml-validator": "^1.4.1",
"hono": "^4.13.5",
"imapflow": "^1.7.8",
"jose": "^6.2.3",
"mailparser": "^3.9.28",
"mdast-util-from-markdown": "^2.0.3",
"mdast-util-gfm": "^3.1.0",
"mdast-util-to-markdown": "^2.1.2",
"micromark-extension-gfm": "^3.0.0",
"minisearch": "^7.2.0",
"mqtt": "^5.15.2",
"nodemailer": "^9.1.1",
"pg": "^8.23.0",
"pino": "^10.3.1",
"rss-parser": "^3.13.0",
"yaml": "^2.9.0",
"zod": "^4.6.5"
},
"devDependencies": {
"@electric-sql/pglite": "^0.5.5",
"@electric-sql/pglite-socket": "^0.2.8",
"@hyrious/configs": "^0.1.6",
"@types/ali-oss": "^6.23.3",
"@types/bun": "1.4.0",
"@types/busboy": "^1.5.4",
"@types/mailparser": "^3.4.6",
"@types/mdast": "^4.0.4",
"@types/node": "^26.0.1",
"@types/nodemailer": "^8.0.1",
"@types/pg": "^8.23.1",
"oxfmt": "^0.56.0",
"oxlint": "^1.71.0",
"pino-pretty": "^13.1.3",
"typescript": "^7.0.2",
"vitest": "^4.1.11",
"wrangler": "^4.131.2"
},
"allowScripts": {
"[email protected]": true,
"[email protected]": true,
"[email protected]": true,
"[email protected]": true
}
}