This commit is contained in:
John Yeo
2026-05-17 10:26:49 +01:00
parent f90a9d0456
commit 1d35a6180b
14 changed files with 111 additions and 26 deletions

View File

@@ -40,7 +40,29 @@
"url": "https://mcp.plain.com/mcp",
"oauth": {}
},
"autumn-internal": {
"slack": {
"type": "remote",
"url": "https://mcp.slack.com/mcp",
"oauth": {}
},
"aws_investigate": {
"type": "local",
"command": [
"sh",
"-c",
"cd \"/Users/johnyeocx/Autumn/autumn-cloud\" && exec infisical run --silent --env=prod --path=/aws/agent-read-only -- bun run \"/Users/johnyeocx/Autumn/autumn-cloud/ai/src/aws-mcp/index.ts\""
],
"env": {
"AUTUMN_CLOUD_ROOT": "/Users/johnyeocx/Autumn/autumn-cloud",
"AWS_AGENT_INFISICAL_PATH": "/aws/agent-read-only"
}
},
"mobbin": {
"type": "remote",
"url": "https://api.mobbin.com/mcp",
"oauth": {}
},
"autumn_prod_internal": {
"type": "local",
"command": [
"sh",
@@ -48,7 +70,20 @@
"cd \"/Users/johnyeocx/Autumn/autumn-cloud\" && exec infisical run --env=prod --recursive -- bun run \"/Users/johnyeocx/Autumn/autumn-cloud/ai/src/mcp/index.ts\""
],
"env": {
"AUTUMN_CLOUD_ROOT": "/Users/johnyeocx/Autumn/autumn-cloud"
"AUTUMN_CLOUD_ROOT": "/Users/johnyeocx/Autumn/autumn-cloud",
"AUTUMN_MCP_ENV": "prod"
}
},
"autumn_dev_internal": {
"type": "local",
"command": [
"sh",
"-c",
"cd \"/Users/johnyeocx/Autumn/autumn-cloud\" && exec infisical run --env=dev --recursive -- bun run \"/Users/johnyeocx/Autumn/autumn-cloud/ai/src/mcp/index.ts\""
],
"env": {
"AUTUMN_CLOUD_ROOT": "/Users/johnyeocx/Autumn/autumn-cloud",
"AUTUMN_MCP_ENV": "dev"
}
}
},

2
ai

Submodule ai updated: 761b842553...63a34aaa16

View File

@@ -2258,7 +2258,7 @@
"@types/buffer-from": ["@types/buffer-from@1.1.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-2lq4YC9uLUMGHkl2IDtX4tCXSo2+hwMpOJcY1qiIk1kybc31rIlPyM1HCVJhkPFIo75a/pOVxqyvwuf5TpCG/w=="],
"@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="],
"@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="],
"@types/cacheable-request": ["@types/cacheable-request@6.0.3", "", { "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" } }, "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw=="],
@@ -5888,6 +5888,8 @@
"@autumn/server/@types/node": ["@types/node@25.6.2", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw=="],
"@autumn/server/@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260511.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260511.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260511.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260511.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260511.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260511.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260511.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260511.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-cUyY4Sr6065280lB6hCwTMCBMTxlEIGjSLzHym28yikA5sFiEsAzlwiU0i+XkTUIqr5K5M/SzSJiioDN+vpjtA=="],
"@autumn/server/autumn-js": ["autumn-js@0.1.85", "", { "dependencies": { "query-string": "^9.2.2", "rou3": "^0.6.1", "swr": "^2.3.3", "zod": "^4.0.0" }, "peerDependencies": { "better-auth": "^1.3.17", "better-call": "^1.0.12", "convex": "^1.25.4", "react": "*" }, "optionalPeers": ["better-auth", "better-call", "convex", "react"] }, "sha512-PDud/t8z5bDJcD7ptyHzTaoJ0A8zkxvQ4TYcJ48RtgKDdOkVY36D1T6udVLwLDnWw4J5KXwJgEuGxHdd+cuABw=="],
"@autumn/server/ink": ["ink@6.8.0", "", { "dependencies": { "@alcalzone/ansi-tokenize": "^0.2.4", "ansi-escapes": "^7.3.0", "ansi-styles": "^6.2.1", "auto-bind": "^5.0.1", "chalk": "^5.6.0", "cli-boxes": "^3.0.0", "cli-cursor": "^4.0.0", "cli-truncate": "^5.1.1", "code-excerpt": "^4.0.0", "es-toolkit": "^1.39.10", "indent-string": "^5.0.0", "is-in-ci": "^2.0.0", "patch-console": "^2.0.0", "react-reconciler": "^0.33.0", "scheduler": "^0.27.0", "signal-exit": "^3.0.7", "slice-ansi": "^8.0.0", "stack-utils": "^2.0.6", "string-width": "^8.1.1", "terminal-size": "^4.0.1", "type-fest": "^5.4.1", "widest-line": "^6.0.0", "wrap-ansi": "^9.0.0", "ws": "^8.18.0", "yoga-layout": "~3.2.1" }, "peerDependencies": { "@types/react": ">=19.0.0", "react": ">=19.0.0", "react-devtools-core": ">=6.1.2" }, "optionalPeers": ["@types/react", "react-devtools-core"] }, "sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA=="],
@@ -6764,6 +6766,8 @@
"@types/buffer-from/@types/node": ["@types/node@25.6.2", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw=="],
"@types/bun/bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="],
"@types/cacheable-request/@types/node": ["@types/node@25.6.2", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw=="],
"@types/chai-http/@types/node": ["@types/node@25.6.2", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw=="],
@@ -6808,6 +6812,8 @@
"@useautumn/sdk/typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="],
"@useautumn/sdk/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
"@vercel/sdk/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
"@vue/compiler-core/entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="],
@@ -7656,6 +7662,20 @@
"@autumn/server/@types/node/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
"@autumn/server/@typescript/native-preview/@typescript/native-preview-darwin-arm64": ["@typescript/native-preview-darwin-arm64@7.0.0-dev.20260511.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SYrqVOlapDxDG7FzHBIJbfgaix+mXPkYzYGqwpz/TAhoPA7sgbfAoGLaqi3ut9N88C/OYNhEX4tjz/0PC9i1nw=="],
"@autumn/server/@typescript/native-preview/@typescript/native-preview-darwin-x64": ["@typescript/native-preview-darwin-x64@7.0.0-dev.20260511.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-zIe31OYgBvkgTIQEwJtKim6SYyuVTkr+9fK/87hVwKN15X3Ikjeh0C0g2W/Vl4rXeMvy95wBGDN1jpW11DIvgg=="],
"@autumn/server/@typescript/native-preview/@typescript/native-preview-linux-arm": ["@typescript/native-preview-linux-arm@7.0.0-dev.20260511.1", "", { "os": "linux", "cpu": "arm" }, "sha512-02b45lpPmYf125PvcnK67WW93N55qwKmtInwfVefV997S17Ib3h6hlCW4e24BDhNsGRCSLhPA4Lu7ZvTq5pLkw=="],
"@autumn/server/@typescript/native-preview/@typescript/native-preview-linux-arm64": ["@typescript/native-preview-linux-arm64@7.0.0-dev.20260511.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-YbmCQXGYkDChGFG7hXJzIgmRjtU1kE5VK/+k322nGnbq4ePqSjS3dS0+ehPATmvfO1XjCDfh3ekED+AtmWk6aQ=="],
"@autumn/server/@typescript/native-preview/@typescript/native-preview-linux-x64": ["@typescript/native-preview-linux-x64@7.0.0-dev.20260511.1", "", { "os": "linux", "cpu": "x64" }, "sha512-e+TweaVJFaM96tV1UM1kRfk2y8QBkZtz7+0wcxrDGmyJz3IIRUlg1btocaBkhsmVtQPXMr37RutBBMgpl3vgUg=="],
"@autumn/server/@typescript/native-preview/@typescript/native-preview-win32-arm64": ["@typescript/native-preview-win32-arm64@7.0.0-dev.20260511.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-zgkoGiCpOrly5h8ghcuu6ZNSfrnRqtHoCq584Q92+s4D/j1MU3oKkGPvmkezp5Mj2v7ffR9AjU+lWRDkrfm6eA=="],
"@autumn/server/@typescript/native-preview/@typescript/native-preview-win32-x64": ["@typescript/native-preview-win32-x64@7.0.0-dev.20260511.1", "", { "os": "win32", "cpu": "x64" }, "sha512-SUm7iVYzKaflol+QwH0Ny5jZtco6PJduI+h/TEg0sgBJzVBa+9RN4I9+Xu9v+EJ1bci3XI7835IRdSP36lCgCw=="],
"@autumn/server/autumn-js/zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
"@autumn/server/ink/@alcalzone/ansi-tokenize": ["@alcalzone/ansi-tokenize@0.2.5", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw=="],
@@ -8390,6 +8410,8 @@
"@types/buffer-from/@types/node/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
"@types/bun/bun-types/@types/node": ["@types/node@25.6.2", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw=="],
"@types/cacheable-request/@types/node/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
"@types/chai-http/@types/node/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
@@ -9570,6 +9592,8 @@
"@trigger.dev/core/socket.io/engine.io/ws": ["ws@8.17.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="],
"@types/bun/bun-types/@types/node/undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
"artillery-plugin-ensure/chalk/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="],
"artillery-plugin-ensure/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="],

4
scripts/ambient.d.ts vendored Normal file
View File

@@ -0,0 +1,4 @@
declare module "*.lua" {
const content: string;
export default content;
}

View File

@@ -232,10 +232,25 @@ async function startDev() {
const stripeAvailable =
Bun.spawnSync(["which", "stripe"]).exitCode === 0;
if (stripeAvailable) {
const auth = Bun.spawnSync(
["stripe", "customers", "list", "--limit", "1"],
{ stdout: "pipe", stderr: "pipe" },
);
if (auth.exitCode !== 0) {
const stderr = new TextDecoder().decode(auth.stderr);
console.error(
"\nStripe CLI is installed but not authenticated (or key expired).",
);
console.error(` ${stderr.trim().split("\n").slice(-3).join("\n ")}`);
console.error("\nRun `stripe login` and try again.\n");
process.exit(1);
}
const forwardUrl = `http://localhost:${SERVER_PORT}/webhooks/connect/sandbox`;
names.push("stripe");
colors.push("cyan");
const stripeCmd = `stripe listen --forward-to ${forwardUrl} --skip-verify`;
// --forward-connect-to forwards events from connected accounts;
// the /webhooks/connect/* endpoint expects Connect-mode events.
const stripeCmd = `stripe listen --forward-connect-to ${forwardUrl} --skip-verify`;
cmds.push(
isWindows ? `"${stripeCmd}"` : `"${stripeCmd}"`,
);
@@ -282,7 +297,7 @@ async function startDev() {
_proc: unknown,
exitCode: number | null,
_signalCode: number | null,
error: Error | null,
error?: unknown,
) {
if (error) {
console.error("Failed to start development servers:", error);

View File

@@ -82,8 +82,6 @@ export function writeEnvLocalFiles(entry: RegistryEntry): void {
serverEnv.CACHE_V2_DRAGONFLY_URL = redisUrl;
serverEnv.SQS_QUEUE_URL_V2 = `http://localhost:${elasticMqPort}/000000000000/autumn.fifo`;
serverEnv.TRACK_SQS_QUEUE_URL = `http://localhost:${elasticMqPort}/000000000000/autumn-track.fifo`;
serverEnv.AWS_ACCESS_KEY_ID = "test";
serverEnv.AWS_SECRET_ACCESS_KEY = "test";
}
if (existsSync(portlessCa)) {
serverEnv.NODE_EXTRA_CA_CERTS = portlessCa;

View File

@@ -46,8 +46,8 @@ const stubRedis = {
const v2Config = getRedisV2ConnectionConfig({
cacheV2Url: process.env.CACHE_V2_UPSTASH_URL,
primaryCacheUrl: process.env.CACHE_URL,
currentRegion: "validate",
instanceName: "upstash",
});
if (!v2Config) {

View File

@@ -6,7 +6,8 @@
"scripts": {
"setup": "tsx setup/setup.js",
"setup-test": "tsx setup/setup-test.ts",
"replicate": "bun run db/replicate.ts"
"replicate": "bun run db/replicate.ts",
"ts": "bunx tsgo --build --noEmit"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.1017.0",

View File

@@ -25,15 +25,10 @@ for (const rel of [
const abs = join(__preloadRoot, rel);
if (!existsSync(abs)) continue;
const contents = readFileSync(abs, "utf-8");
let loadedCount = 0;
for (const line of contents.split(/\r?\n/)) {
const m = line.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
if (!m) continue;
// Worktree-local overrides win over infisical + server/.env.
process.env[m[1]] = m[2];
loadedCount++;
}
if (loadedCount > 0) {
console.log(`[preload] loaded ${rel} — AUTUMN_TEST_BASE_URL=${process.env.AUTUMN_TEST_BASE_URL || "(unset)"}`);
}
}

View File

@@ -71,7 +71,7 @@ const listAccounts = async () => {
return accounts.data
.filter((account) => !email || account.email === email)
.sort((a, b) => b.created - a.created);
.sort((a, b) => (b.created ?? 0) - (a.created ?? 0));
};
try {
@@ -84,7 +84,9 @@ try {
accounts.map((account) => ({
id: account.id,
email: account.email,
created: new Date(account.created * 1000).toISOString(),
created: account.created
? new Date(account.created * 1000).toISOString()
: null,
charges_enabled: account.charges_enabled,
details_submitted: account.details_submitted,
})),

View File

@@ -2,7 +2,7 @@
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"lib": ["ES2022"],
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"moduleResolution": "bundler",
"resolveJsonModule": true,
"typeRoots": ["./node_modules/@types", "../node_modules/@types"],
@@ -17,9 +17,20 @@
"allowImportingTsExtensions": true,
"allowSyntheticDefaultImports": true,
"paths": {
"@/*": ["../server/src/*"],
"@server/*": ["../server/src/*"],
"@shared/*": ["../shared/*"],
"@tests/*": ["../server/tests/*"]
"@tests/*": ["../server/tests/*"],
"@api/*": ["../shared/api/*"],
"@models/*": ["../shared/models/*"],
"@utils/*": ["../shared/utils/*"],
"@lua/*": ["../server/src/_luaScripts/*"],
"@autumn/shared": ["../shared/index.ts"],
"@autumn/shared/*": ["../shared/*"],
"autumn-js": ["../packages/autumn-js/src/sdk/index.ts"],
"autumn-js/backend/hono": ["../packages/autumn-js/src/backend/adapters/hono.ts"],
"@useautumn/sdk": ["../packages/sdk/src/index.ts"],
"@useautumn/sdk/*": ["../packages/sdk/src/*"]
}
},
"include": ["**/*.ts", "**/*.js"],

View File

@@ -1,4 +1,4 @@
// Preload script - runs BEFORE main script imports are evaluated
// This allows local .env to override Infisical secrets
import { loadLocalEnv } from "@/utils/envUtils.js";
import { loadLocalEnv } from "./src/utils/envUtils.js";
loadLocalEnv();

View File

@@ -57,9 +57,9 @@ export const stripeConnectSeederMiddleware = async (
let event: Stripe.Event;
if (skipVerify) {
logger.warn(
"[Stripe] SKIPPING webhook signature verification — non-prod only",
);
// logger.warn(
// "[Stripe] SKIPPING webhook signature verification — non-prod only",
// );
try {
event = JSON.parse(rawBody) as Stripe.Event;
} catch (err: unknown) {

View File

@@ -59,9 +59,9 @@ export const stripeLegacySeederMiddleware = async (
let event: Stripe.Event;
if (skipVerify) {
logger.warn(
"[Stripe] SKIPPING webhook signature verification — non-prod only",
);
// logger.warn(
// "[Stripe] SKIPPING webhook signature verification — non-prod only",
// );
try {
event = JSON.parse(rawBody) as Stripe.Event;
} catch (err: unknown) {