magicrew-auth 0.0.0-stage → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +176 -0
- package/LICENSE +21 -0
- package/NOTICE.md +33 -0
- package/README.md +200 -3
- package/docs/internals.md +802 -0
- package/docs/npm-publish.md +77 -0
- package/index.mjs +99 -0
- package/package.json +52 -4
- package/src/api.mjs +409 -0
- package/src/browser-login.mjs +408 -0
- package/src/clipboard.mjs +108 -0
- package/src/context.mjs +60 -0
- package/src/hooks/checkin.mjs +21 -0
- package/src/hooks/config.mjs +25 -0
- package/src/hooks/headers.mjs +14 -0
- package/src/hooks/loader.mjs +93 -0
- package/src/hooks/methods.mjs +191 -0
- package/src/hooks/models.mjs +37 -0
- package/src/hooks/refresh.mjs +29 -0
- package/src/hooks/usage.mjs +40 -0
- package/src/icons.mjs +24 -0
- package/src/key-store.mjs +188 -0
- package/src/keys.mjs +109 -0
- package/src/model-context.mjs +100 -0
- package/src/self-register.mjs +234 -0
- package/src/store.mjs +183 -0
- package/src/tasks.mjs +119 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// ④ auth.loader(getAuth) —— 请求接管
|
|
2
|
+
//
|
|
3
|
+
// 返回 baseURL / apiKey / headers / fetch(a,b),magpie 拿它发真实请求。
|
|
4
|
+
// 这是唯一能改请求体的地方。本项目用它干两件事:
|
|
5
|
+
//
|
|
6
|
+
// · 国际站网关强制要 organization-code(国内站不要),不带就是
|
|
7
|
+
// HTTP 500 "Internal Server Error."(22 字节纯文本,不是 JSON)
|
|
8
|
+
// · 推理模型低于 512 的 max_tokens 会被 reasoning 吃光,content 返回空串
|
|
9
|
+
//
|
|
10
|
+
// ⚠ 不要在这里读流、不要重试换号、不要手拼 x-api-key ——
|
|
11
|
+
// 前两件 magpie 做了,第三件看 SDK 包自动加。见 README「最小交付面」。
|
|
12
|
+
|
|
13
|
+
import { ensureKey, accountOf } from "../keys.mjs"
|
|
14
|
+
|
|
15
|
+
export function makeLoader(c) {
|
|
16
|
+
return async (getAuth) => {
|
|
17
|
+
const auth = await getAuth()
|
|
18
|
+
if (!auth) return {}
|
|
19
|
+
return {
|
|
20
|
+
baseURL: c.BASE,
|
|
21
|
+
apiKey: auth.access,
|
|
22
|
+
headers: { "user-agent": "MagicrewClient/1.0" },
|
|
23
|
+
async fetch(input, init) {
|
|
24
|
+
const fresh = await getAuth()
|
|
25
|
+
if (!fresh) throw new Error(`${c.SHORT} 未登录`)
|
|
26
|
+
|
|
27
|
+
// key 只有一个来源(src/keys.mjs)—— 服务端签一把顶一把,多入口必互相吊销
|
|
28
|
+
const key = await ensureKey(c, getAuth)
|
|
29
|
+
if (!key) throw new Error(`${c.SHORT} 未登录(拿不到可用的 key)`)
|
|
30
|
+
const account = accountOf(fresh)
|
|
31
|
+
|
|
32
|
+
const req = input instanceof Request ? input : null
|
|
33
|
+
const url =
|
|
34
|
+
typeof input === "string"
|
|
35
|
+
? input
|
|
36
|
+
: input instanceof URL
|
|
37
|
+
? input.toString()
|
|
38
|
+
: (req?.url ?? "")
|
|
39
|
+
|
|
40
|
+
const incoming = new Headers(init?.headers ?? req?.headers ?? {})
|
|
41
|
+
const headers = {
|
|
42
|
+
authorization: `Bearer ${key.apiKey}`,
|
|
43
|
+
"content-type": "application/json",
|
|
44
|
+
}
|
|
45
|
+
if (c.needsOrgOnGateway && fresh.org) headers["organization-code"] = fresh.org
|
|
46
|
+
|
|
47
|
+
for (const [k, v] of incoming) {
|
|
48
|
+
if (["authorization", "host", "content-length", "user-agent"].includes(k.toLowerCase())) continue
|
|
49
|
+
headers[k] = v
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
let body = init?.body
|
|
53
|
+
if (body === undefined && req) body = await req.text()
|
|
54
|
+
|
|
55
|
+
// 改写两处请求体,都为实测出来的:
|
|
56
|
+
//
|
|
57
|
+
// ① max_tokens 抬到 512
|
|
58
|
+
// 实测 glm-5.3-flash:64 → finish_reason:"length" 且 content:""
|
|
59
|
+
// 512 → 正常出话(reasoning 208 / total 233)
|
|
60
|
+
//
|
|
61
|
+
// ② 流式请求补 stream_options.include_usage
|
|
62
|
+
// magicrew 在 stream:true 下**默认不返回 usage**;补上之后,[DONE]
|
|
63
|
+
// 之前会多一条 {"choices":[],"usage":{...}} 的收尾 chunk。
|
|
64
|
+
// magpie 新版靠这条收尾 chunk 判定「流正常结束了」——缺了它就报
|
|
65
|
+
// 「Stream ended without finish_reason」然后重试(实测 2026-10-27)。
|
|
66
|
+
// 控制台里看到的就是:模型请求重试 (3/5) · Stream ended without finish_reason
|
|
67
|
+
if (typeof body === "string" && body.includes('"stream"')) {
|
|
68
|
+
try {
|
|
69
|
+
const j = JSON.parse(body)
|
|
70
|
+
if (Number(j.max_tokens) > 0 && Number(j.max_tokens) < 512) j.max_tokens = 512
|
|
71
|
+
if (j.stream === true && !j.stream_options) {
|
|
72
|
+
j.stream_options = { include_usage: true }
|
|
73
|
+
}
|
|
74
|
+
body = JSON.stringify(j)
|
|
75
|
+
} catch {}
|
|
76
|
+
} else if (typeof body === "string" && body.includes('"max_tokens"')) {
|
|
77
|
+
try {
|
|
78
|
+
const j = JSON.parse(body)
|
|
79
|
+
if (Number(j.max_tokens) > 0 && Number(j.max_tokens) < 512) j.max_tokens = 512
|
|
80
|
+
body = JSON.stringify(j)
|
|
81
|
+
} catch {}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return fetch(url, {
|
|
85
|
+
method: init?.method ?? "POST",
|
|
86
|
+
headers,
|
|
87
|
+
body,
|
|
88
|
+
signal: init?.signal ?? req?.signal ?? AbortSignal.timeout(300_000),
|
|
89
|
+
})
|
|
90
|
+
},
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// ② auth.methods[] —— 登录
|
|
2
|
+
//
|
|
3
|
+
// 两条路,按可靠性排:
|
|
4
|
+
//
|
|
5
|
+
// ① 浏览器登录(默认,零输入):插件自己拉起一个能被 CDP 看进去的浏览器,
|
|
6
|
+
// 用户在官方页里用任何方式登,登录成功那一刻插件把 localStorage 读走。
|
|
7
|
+
// 拉不起来就降级成「magpie 开系统浏览器 + 用户粘一行 Console」。
|
|
8
|
+
// ② 登录态(JWT + 组织码):手填两个字段,兜底用。
|
|
9
|
+
//
|
|
10
|
+
// ⚠ 两条铁律:
|
|
11
|
+
// · authorize() 必须立刻返回 —— 真正等用户的是 callback(),死等会和 magpie 互锁
|
|
12
|
+
// · opened: true 的语义是「我自己已经开过页面了,你别再开」;
|
|
13
|
+
// 只返回 url 让它去开的,**不许**传 opened
|
|
14
|
+
|
|
15
|
+
import {
|
|
16
|
+
issueGatewayKey,
|
|
17
|
+
fetchPoints,
|
|
18
|
+
fetchWho,
|
|
19
|
+
fetchOwnInviteCode,
|
|
20
|
+
} from "../api.mjs"
|
|
21
|
+
import { inviteToUse, readSession, writeSession, noteLoginFailure, rollInvite } from "../store.mjs"
|
|
22
|
+
import { CLIP_HINT, clipboardText, parseCreds, pollClipboard } from "../clipboard.mjs"
|
|
23
|
+
|
|
24
|
+
export function makeMethods(c) {
|
|
25
|
+
return [
|
|
26
|
+
{
|
|
27
|
+
type: "oauth",
|
|
28
|
+
label: `${c.SHORT} 浏览器登录`,
|
|
29
|
+
async authorize() {
|
|
30
|
+
// 邀请码两条路都要出现:登录页的 URL,以及最终注册时服务端读到的那份
|
|
31
|
+
const inviteCode = inviteToUse(c.id)
|
|
32
|
+
const url = inviteCode
|
|
33
|
+
? `${c.web}/login?invitation=${encodeURIComponent(inviteCode)}`
|
|
34
|
+
: `${c.web}/login`
|
|
35
|
+
const hostFragment = new URL(c.web).hostname
|
|
36
|
+
|
|
37
|
+
// 浏览器登录是**可选能力**,按需加载:这个模块用 child_process /
|
|
38
|
+
// WebSocket / 端口探测,环境依赖最重。静态 import 一旦失败,
|
|
39
|
+
// 整个插件都加载不起来 —— 连「登录态」那条备选也没了。
|
|
40
|
+
let browser = null
|
|
41
|
+
let why = ""
|
|
42
|
+
try {
|
|
43
|
+
browser = await import("../browser-login.mjs")
|
|
44
|
+
} catch (e) {
|
|
45
|
+
why = `浏览器登录模块加载失败:${String(e?.message ?? e).slice(0, 200)}`
|
|
46
|
+
noteLoginFailure(c.id, why)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ⚠ 启动失败的原因必须留下 —— 静默降级会让用户以为「本机没装 Chrome」
|
|
50
|
+
const session = browser
|
|
51
|
+
? await browser.launchLoginBrowser(url).catch((e) => {
|
|
52
|
+
why = String(e?.message ?? e).slice(0, 300)
|
|
53
|
+
noteLoginFailure(c.id, `launch: ${why}`)
|
|
54
|
+
return null
|
|
55
|
+
})
|
|
56
|
+
: null
|
|
57
|
+
|
|
58
|
+
// 降级通道要用的「打开前剪贴板」(不 await:起 powershell 要几百毫秒)
|
|
59
|
+
const skipPromise = session ? null : clipboardText()
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
url,
|
|
63
|
+
...(session ? { opened: true } : {}),
|
|
64
|
+
instructions: session
|
|
65
|
+
? "浏览器已打开官方登录页 —— 用你平时的方式登进去,这个窗口会自动继续,不用回来点任何东西。"
|
|
66
|
+
: `没能自己拉起浏览器${why ? `(${why})` : "(本机没找到 Chrome / Edge)"},已改用系统浏览器打开登录页。\n登录完成后,在页面里按 F12 → Console 粘这一行:\n${CLIP_HINT}`,
|
|
67
|
+
method: "auto",
|
|
68
|
+
async callback() {
|
|
69
|
+
let got = null
|
|
70
|
+
|
|
71
|
+
// ① 首选:从我们自己拉起来的浏览器里读
|
|
72
|
+
if (session && browser) {
|
|
73
|
+
got = await browser.waitForCreds(session, hostFragment).catch(() => null)
|
|
74
|
+
// 拿到就关窗:先 Browser.close 让它把 cookie 刷到磁盘,
|
|
75
|
+
// 关不掉再 taskkill 整棵进程树
|
|
76
|
+
await browser.closeSession(session).catch(() => {})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ② 降级:读剪贴板
|
|
80
|
+
if (!got && skipPromise) {
|
|
81
|
+
const skip = (await skipPromise).trim()
|
|
82
|
+
got = await pollClipboard({ skip })
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (!got) {
|
|
86
|
+
return {
|
|
87
|
+
type: "failed",
|
|
88
|
+
error: session
|
|
89
|
+
? "浏览器开着了,但 5 分钟内没在里面读到登录状态 —— 是还没登完,还是登的不是这个站点?"
|
|
90
|
+
: "5 分钟内没拿到登录状态。可以改用「登录态(JWT + 组织码)」那条备选。",
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
if (!got.org) throw new Error("只拿到 JWT,没有组织码")
|
|
96
|
+
// 真的验一次:读积分能过,说明 JWT + 组织码都对
|
|
97
|
+
await fetchPoints(got.jwt, got.org, c.host)
|
|
98
|
+
const key = await issueGatewayKey(got.jwt, got.org, c.host)
|
|
99
|
+
writeSession(c.id, got.jwt, got.org)
|
|
100
|
+
// 滚邀请码:把这个账号自己的码存成下一次用的
|
|
101
|
+
rollInvite(c.id, got.jwt, got.org, c.host).catch(() => {})
|
|
102
|
+
return {
|
|
103
|
+
type: "success",
|
|
104
|
+
access: key.apiKey,
|
|
105
|
+
refresh: key.refreshToken,
|
|
106
|
+
expires: Date.now() + 2 * 3600_000,
|
|
107
|
+
// 卡片显示能认的名字(手机号 / 邮箱 / 昵称),不是随机组织码
|
|
108
|
+
accountId: got.name || got.org,
|
|
109
|
+
uid: got.org,
|
|
110
|
+
jwt: got.jwt,
|
|
111
|
+
org: got.org,
|
|
112
|
+
}
|
|
113
|
+
} catch (e) {
|
|
114
|
+
return { type: "failed", error: String(e?.message ?? e) }
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
// 兜底:直接从浏览器复制登录态。
|
|
122
|
+
//
|
|
123
|
+
// 两样都在 DevTools → Application → Local Storage → <站点域名>:
|
|
124
|
+
// MAGIC:user:authorization → JSON,取 value = JWT
|
|
125
|
+
// MAGIC:user:organizationCode → JSON,取 value = 组织码
|
|
126
|
+
//
|
|
127
|
+
// ⚠ 组织码**不能从 JWT 推**:JWT 里只有 cus.tenant_id(18 位数字),
|
|
128
|
+
// 组织码是另一套短串。服务端按组织码查组织:
|
|
129
|
+
// 缺了 → {"code":2182,"message":"用户所在组织不存在"}
|
|
130
|
+
// 错了 → {"code":3035,"message":"登录失败"}
|
|
131
|
+
type: "oauth",
|
|
132
|
+
label: `${c.SHORT} 登录态(JWT + 组织码)`,
|
|
133
|
+
prompts: [
|
|
134
|
+
{
|
|
135
|
+
type: "text",
|
|
136
|
+
key: "jwt",
|
|
137
|
+
message: "JWT(MAGIC:user:authorization 的 value)",
|
|
138
|
+
placeholder: "eyJhbGciOi...",
|
|
139
|
+
validate: (v) => (String(v || "").trim().startsWith("eyJ") ? undefined : "不是 JWT,要以 eyJ 开头"),
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
type: "text",
|
|
143
|
+
key: "org",
|
|
144
|
+
message: "组织码(MAGIC:user:organizationCode 的 value)",
|
|
145
|
+
placeholder: "orgcode67890",
|
|
146
|
+
validate: (v) => (/^[a-z0-9]{6,32}$/i.test(String(v || "").trim()) ? undefined : "12 位左右的字母数字"),
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
async authorize(inputs) {
|
|
150
|
+
const jwt = String(inputs?.jwt || "").trim().replace(/^Bearer\s+/i, "")
|
|
151
|
+
const org = String(inputs?.org || "").trim()
|
|
152
|
+
if (!jwt.startsWith("eyJ")) return { type: "failed", error: "不是 JWT" }
|
|
153
|
+
if (!org) return { type: "failed", error: "没填组织码" }
|
|
154
|
+
|
|
155
|
+
const result = (async () => {
|
|
156
|
+
await fetchPoints(jwt, org, c.host)
|
|
157
|
+
return issueGatewayKey(jwt, org, c.host)
|
|
158
|
+
})()
|
|
159
|
+
|
|
160
|
+
return {
|
|
161
|
+
url: `${c.web}/login`,
|
|
162
|
+
instructions: "正在验证登录态…",
|
|
163
|
+
method: "auto",
|
|
164
|
+
opened: false,
|
|
165
|
+
async callback() {
|
|
166
|
+
let r
|
|
167
|
+
try {
|
|
168
|
+
r = await result
|
|
169
|
+
} catch (e) {
|
|
170
|
+
return { type: "failed", error: String(e?.message ?? e) }
|
|
171
|
+
}
|
|
172
|
+
writeSession(c.id, jwt, org)
|
|
173
|
+
rollInvite(c.id, jwt, org, c.host).catch(() => {})
|
|
174
|
+
// 卡片上显示手机号/邮箱/昵称,取不到就退回组织码
|
|
175
|
+
const who = await fetchWho(jwt, org, c.host).catch(() => null)
|
|
176
|
+
return {
|
|
177
|
+
type: "success",
|
|
178
|
+
access: r.apiKey,
|
|
179
|
+
refresh: r.refreshToken,
|
|
180
|
+
expires: Date.now() + 2 * 3600_000,
|
|
181
|
+
accountId: who?.name || org,
|
|
182
|
+
uid: org,
|
|
183
|
+
jwt,
|
|
184
|
+
org,
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
]
|
|
191
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// ⑦ provider.models(provider, { auth }) —— 每账号的模型目录
|
|
2
|
+
//
|
|
3
|
+
// ⚠ 返回的是**这个账号真正能选**的模型,不是厂商标称的全部:
|
|
4
|
+
// 混进 VIP 锁定 / 生图 / embedding,用户选中就报错。
|
|
5
|
+
//
|
|
6
|
+
// 失败回退三种选一种:原样返回 provider.models / 抛异常 /
|
|
7
|
+
// 返回自己的列表并标 Symbol.for("magpie.fellBack")。
|
|
8
|
+
// ⚠ 局部成功时别标 fellBack —— magpie 会整份丢弃。
|
|
9
|
+
//
|
|
10
|
+
// 登录态失效 → 抛带 signIn: "expired" 的错误。
|
|
11
|
+
|
|
12
|
+
import { fetchModels } from "../api.mjs"
|
|
13
|
+
import { modelEntry } from "../context.mjs"
|
|
14
|
+
import { readSnapshot, writeSnapshot } from "../store.mjs"
|
|
15
|
+
|
|
16
|
+
export function makeModels(c) {
|
|
17
|
+
return async (provider, { auth } = {}) => {
|
|
18
|
+
const snapshot = readSnapshot(c.id)
|
|
19
|
+
if (!auth) return snapshot ?? {}
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
const live = await fetchModels(auth.jwt, auth.org, c.host)
|
|
23
|
+
if (!live.length) return snapshot ?? {}
|
|
24
|
+
|
|
25
|
+
const out = {}
|
|
26
|
+
for (const m of live) out[m.id] = modelEntry(c, m.id, m.name, m.vision)
|
|
27
|
+
writeSnapshot(c.id, out)
|
|
28
|
+
return out
|
|
29
|
+
} catch (e) {
|
|
30
|
+
if (/401|403|unauthorized|expired|用户不存在|登录失败/i.test(String(e?.message ?? e))) {
|
|
31
|
+
throw Object.assign(new Error("登录已失效"), { signIn: "expired" })
|
|
32
|
+
}
|
|
33
|
+
// 网络抖动:退回上次的快照,别让整个供应商从列表里消失
|
|
34
|
+
return snapshot ?? {}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// ③ auth.refresh(auth) —— 续期
|
|
2
|
+
//
|
|
3
|
+
// magpie 在 api_key 到期前(refreshLead)调一次,**返回的字段合并进旧账号**,
|
|
4
|
+
// 不是整体替换(client.auth.set 才是替换,两者不同)。
|
|
5
|
+
//
|
|
6
|
+
// ⚠ 一次性 refresh_token 必须串行 —— magpie 已按账号串行化,插件里别再并发;
|
|
7
|
+
// 服务端每次换完会轮换,必须用返回的新值。
|
|
8
|
+
|
|
9
|
+
import { refreshGatewayKey } from "../api.mjs"
|
|
10
|
+
|
|
11
|
+
export function makeRefresh(c) {
|
|
12
|
+
return async (auth) => {
|
|
13
|
+
if (!auth?.refresh) return undefined
|
|
14
|
+
try {
|
|
15
|
+
const k = await refreshGatewayKey(auth.refresh, c.host)
|
|
16
|
+
return {
|
|
17
|
+
access: k.apiKey,
|
|
18
|
+
// 服务端每次 PUT 都轮换 refresh_token,必须用新的
|
|
19
|
+
refresh: k.refreshToken ?? auth.refresh,
|
|
20
|
+
expires: Date.now() + 2 * 3600_000,
|
|
21
|
+
}
|
|
22
|
+
} catch (e) {
|
|
23
|
+
if (/invalid|expired|401|403/i.test(String(e?.message))) {
|
|
24
|
+
throw Object.assign(new Error("登录已失效,请重新登录"), { signIn: "expired" })
|
|
25
|
+
}
|
|
26
|
+
throw e
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// ⑤ auth.usage(getAuth) —— 额度
|
|
2
|
+
//
|
|
3
|
+
// 画进度条,**同时是路由排序输入**:`used` 缺了会被当成 0% = 满额,
|
|
4
|
+
// 空号反而排到队首。
|
|
5
|
+
//
|
|
6
|
+
// ⚠ 预充值积分制放 aside:只显示余额、不参与排序;余额 0 时 used 置 100,
|
|
7
|
+
// 让它老老实实排到最后。
|
|
8
|
+
|
|
9
|
+
import { fetchPoints } from "../api.mjs"
|
|
10
|
+
|
|
11
|
+
export function makeUsage(c) {
|
|
12
|
+
return async (getAuth) => {
|
|
13
|
+
const auth = await getAuth()
|
|
14
|
+
if (!auth) return { error: "未登录", windows: [] }
|
|
15
|
+
try {
|
|
16
|
+
const p = await fetchPoints(auth.jwt, auth.org, c.host)
|
|
17
|
+
const nextExpiry = p.expiring?.[0]?.expiresAt
|
|
18
|
+
return {
|
|
19
|
+
plan: p.total > 0 ? "积分制" : "已耗尽",
|
|
20
|
+
balance: `${p.total.toLocaleString("zh-CN")} 积分`,
|
|
21
|
+
windows: [
|
|
22
|
+
p.total > 0
|
|
23
|
+
? {
|
|
24
|
+
name: "积分余额",
|
|
25
|
+
used: 0,
|
|
26
|
+
display: `${p.total.toLocaleString("zh-CN")} 积分`,
|
|
27
|
+
amount: 0,
|
|
28
|
+
limit: p.total,
|
|
29
|
+
unit: "积分",
|
|
30
|
+
resetsAt: nextExpiry,
|
|
31
|
+
aside: true,
|
|
32
|
+
}
|
|
33
|
+
: { name: "积分余额", used: 100, display: "已耗尽" },
|
|
34
|
+
],
|
|
35
|
+
}
|
|
36
|
+
} catch (e) {
|
|
37
|
+
return { error: String(e?.message ?? e), windows: [] }
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/icons.mjs
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// 图标:两个站点各自的真实品牌图,base64 内嵌。
|
|
2
|
+
//
|
|
3
|
+
// magpie 的 icon 只存不拉 —— 外部 URL 在 git 源下不渲染,所以必须内嵌。
|
|
4
|
+
// 尺寸压到 128×128(PNG 优化后 国内 19.9KB / 国际 7.5KB),卡片上一格够用。
|
|
5
|
+
//
|
|
6
|
+
// 来源(2026-10-27 抓):
|
|
7
|
+
// 国内 https://www.letsmagic.cn/web/favicon.png 512×512 → 128×128
|
|
8
|
+
// 国际 https://teamshareos-app-a1565492-public.oss-ap-southeast-1.aliyuncs.com/
|
|
9
|
+
// zjCdGqOvE5/765292054916927490/4c9184f37cff01bcdc32dc486ec36961/
|
|
10
|
+
// DagiiMmeda4gAxmHsJbZM.png 200×200 → 128×128
|
|
11
|
+
// 这是 www.magicrew.ai 的 <link rel="icon">,也是它 favicon.ico 的内容。
|
|
12
|
+
//
|
|
13
|
+
// 两张图本身毫无相似之处(国内是紫蓝渐变圆底的卡通角色,国际是黑底白六边形
|
|
14
|
+
// +黄星的立方体),正好让两个供应商在 GUI 里一眼分得开。
|
|
15
|
+
|
|
16
|
+
/** 国内 · 超级麦吉 */
|
|
17
|
+
export const ICON_CN =
|
|
18
|
+
"data:image/png;base64,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"
|
|
19
|
+
|
|
20
|
+
/** 国际 · MagiCrew */
|
|
21
|
+
export const ICON_INTL =
|
|
22
|
+
"data:image/png;base64,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"
|
|
23
|
+
|
|
24
|
+
export const ICON_BY_SITE = { cn: ICON_CN, intl: ICON_INTL }
|