v2.10.0: 邮件链路 401 修复 + 一账号一 token + 重装 Worker 按钮——workerAuth 同名脚本撞车时按候选逐一验签确定归属(修 itekmedia 收不到件);凭据 token(credential id)烤进 Worker 脚本、Console 按 token 精确鉴权(脚本名仅作旧版兼容);账号详情新增「重新安装 Worker 脚本」

This commit is contained in:
bigcode
2026-10-05 02:04:13 +08:00
parent 1c7dba025b
commit 2dede46509
19 changed files with 242 additions and 68 deletions
+2 -2
View File
@@ -4,8 +4,8 @@
export interface WorkerEnv {
/** Console 对外地址(Worker -> Console 的目标) **/
CONSOLE_URL: string;
/** Worker 身份(与 WorkerCredential.worker_id 一致) **/
WORKER_ID: string;
/** 凭据 token(= worker_credentials.id,一账号一个;Worker 以此表明身份) **/
CREDENTIAL_TOKEN: string;
/** Worker credential secret(HMAC 签名密钥) **/
WORKER_SECRET: string;
/** 测试注入:替换 fetch 实现(单测用;缺省用全局 fetch) **/
+2 -2
View File
@@ -50,7 +50,7 @@ export interface HandleEmailResult {
export async function authorizeEmail(env: WorkerEnv, recipient: string, sender: string): Promise<HandleEmailResult> {
const doFetch = env.fetchImpl ?? fetch;
const body = new TextEncoder().encode(JSON.stringify({ recipient, sender }));
const headers = await signWorkerRequest(env.WORKER_SECRET, env.WORKER_ID, "POST", `${env.CONSOLE_URL}${EMAIL_AUTHORIZE_PATH}`, body);
const headers = await signWorkerRequest(env.WORKER_SECRET, env.CREDENTIAL_TOKEN, "POST", `${env.CONSOLE_URL}${EMAIL_AUTHORIZE_PATH}`, body);
let resp: Response;
try {
resp = await doFetch(`${env.CONSOLE_URL}${EMAIL_AUTHORIZE_PATH}`, {
@@ -94,7 +94,7 @@ export async function ingestEmail(
): Promise<HandleEmailResult> {
const doFetch = env.fetchImpl ?? fetch;
const bytes = raw instanceof Uint8Array ? raw : new Uint8Array(raw);
const headers = await signWorkerRequest(env.WORKER_SECRET, env.WORKER_ID, "POST", `${env.CONSOLE_URL}${EMAIL_INGEST_PATH}`, bytes);
const headers = await signWorkerRequest(env.WORKER_SECRET, env.CREDENTIAL_TOKEN, "POST", `${env.CONSOLE_URL}${EMAIL_INGEST_PATH}`, bytes);
let resp: Response;
try {
resp = await doFetch(`${env.CONSOLE_URL}${EMAIL_INGEST_PATH}`, {
+4 -4
View File
@@ -11,12 +11,12 @@ import type { WorkerEnv } from "./env.ts";
const env: WorkerEnv = {
CONSOLE_URL: process.env.CONSOLE_URL ?? "http://127.0.0.1:18787",
WORKER_ID: process.env.WORKER_ID ?? "",
CREDENTIAL_TOKEN: process.env.CREDENTIAL_TOKEN ?? "",
WORKER_SECRET: process.env.WORKER_SECRET ?? "",
};
if (!env.WORKER_ID || !env.WORKER_SECRET) {
console.error("missing WORKER_ID / WORKER_SECRET env");
if (!env.CREDENTIAL_TOKEN || !env.WORKER_SECRET) {
console.error("missing CREDENTIAL_TOKEN / WORKER_SECRET env");
process.exit(1);
}
@@ -33,7 +33,7 @@ console.log(
lvl: "info",
msg: "email worker started",
port: PORT,
worker_id: env.WORKER_ID,
credential_token: env.CREDENTIAL_TOKEN,
console_url: env.CONSOLE_URL,
}),
);