@acosmi/sdk-ts 2.7.0 → 2.8.0
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/dist/browser/index.mjs +21 -4
- package/dist/browser/index.mjs.map +1 -1
- package/dist/index.mjs +21 -4
- package/dist/index.mjs.map +1 -1
- package/dist/node/index.cjs +21 -4
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +15 -0
- package/dist/node/index.d.ts +15 -0
- package/dist/node/index.mjs +21 -4
- package/dist/node/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/node/index.d.cts
CHANGED
|
@@ -342,6 +342,21 @@ interface LoginOptions {
|
|
|
342
342
|
orgUUID?: string;
|
|
343
343
|
/** 自定义 token 有效期 (秒) */
|
|
344
344
|
expiresIn?: number;
|
|
345
|
+
/**
|
|
346
|
+
* 桌面 loopback 授权成功后, 把浏览器 302 重定向到此品牌成功页 URL,
|
|
347
|
+
* 替代默认在 `127.0.0.1` 本地回环服务器渲染的"授权成功"HTML。
|
|
348
|
+
*
|
|
349
|
+
* 授权码仍先回投本地回环 (`codeResolver(code)` 不变), 安全模型不动 —
|
|
350
|
+
* 只是把"给浏览器看的那一屏"从本地 HTML 换成 302 到调用方域名页,
|
|
351
|
+
* 让地址栏显示业务域名而非 `127.0.0.1`。
|
|
352
|
+
*
|
|
353
|
+
* 取值约束: 必须是 `http(s)` 绝对 URL; 缺失或非法时回退本地 HTML (零回归)。
|
|
354
|
+
* 多部署/多域名调用方 (acosmi.com / sign.zhonglvbao.com / FedStart 等) 必须
|
|
355
|
+
* 传入随自身部署 origin 变化的 URL, **不可硬编码单一域名** —— 否则会把其他
|
|
356
|
+
* 部署的桌面用户导向错误域名, 且该域名若未服务此页将 404。SDK 默认不重定向,
|
|
357
|
+
* 由调用方显式 opt-in (确保目标页确实可达)。
|
|
358
|
+
*/
|
|
359
|
+
successRedirectURL?: string;
|
|
345
360
|
}
|
|
346
361
|
/** 检测 SSL/TLS 相关错误 (企业代理 Zscaler 等) */
|
|
347
362
|
declare function isSSLError(err: unknown): boolean;
|
package/dist/node/index.d.ts
CHANGED
|
@@ -342,6 +342,21 @@ interface LoginOptions {
|
|
|
342
342
|
orgUUID?: string;
|
|
343
343
|
/** 自定义 token 有效期 (秒) */
|
|
344
344
|
expiresIn?: number;
|
|
345
|
+
/**
|
|
346
|
+
* 桌面 loopback 授权成功后, 把浏览器 302 重定向到此品牌成功页 URL,
|
|
347
|
+
* 替代默认在 `127.0.0.1` 本地回环服务器渲染的"授权成功"HTML。
|
|
348
|
+
*
|
|
349
|
+
* 授权码仍先回投本地回环 (`codeResolver(code)` 不变), 安全模型不动 —
|
|
350
|
+
* 只是把"给浏览器看的那一屏"从本地 HTML 换成 302 到调用方域名页,
|
|
351
|
+
* 让地址栏显示业务域名而非 `127.0.0.1`。
|
|
352
|
+
*
|
|
353
|
+
* 取值约束: 必须是 `http(s)` 绝对 URL; 缺失或非法时回退本地 HTML (零回归)。
|
|
354
|
+
* 多部署/多域名调用方 (acosmi.com / sign.zhonglvbao.com / FedStart 等) 必须
|
|
355
|
+
* 传入随自身部署 origin 变化的 URL, **不可硬编码单一域名** —— 否则会把其他
|
|
356
|
+
* 部署的桌面用户导向错误域名, 且该域名若未服务此页将 404。SDK 默认不重定向,
|
|
357
|
+
* 由调用方显式 opt-in (确保目标页确实可达)。
|
|
358
|
+
*/
|
|
359
|
+
successRedirectURL?: string;
|
|
345
360
|
}
|
|
346
361
|
/** 检测 SSL/TLS 相关错误 (企业代理 Zscaler 等) */
|
|
347
362
|
declare function isSSLError(err: unknown): boolean;
|
package/dist/node/index.mjs
CHANGED
|
@@ -1259,10 +1259,17 @@ async function authorize(meta, clientID, scopes, opts = {}) {
|
|
|
1259
1259
|
codeRejecter(new Error(`authorization denied: ${errMsg}`));
|
|
1260
1260
|
return;
|
|
1261
1261
|
}
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1262
|
+
const successRedirect = resolveSuccessRedirect(opts.successRedirectURL);
|
|
1263
|
+
if (successRedirect) {
|
|
1264
|
+
res.statusCode = 302;
|
|
1265
|
+
res.setHeader("Location", successRedirect);
|
|
1266
|
+
res.end();
|
|
1267
|
+
} else {
|
|
1268
|
+
res.setHeader("Content-Type", "text/html; charset=utf-8");
|
|
1269
|
+
res.end(
|
|
1270
|
+
`<!DOCTYPE html><html><head><meta charset="utf-8"><title>\u6388\u6743\u6210\u529F</title></head><body style="font-family:system-ui,sans-serif;text-align:center;padding:60px 20px"><h2>\u6388\u6743\u6210\u529F</h2><p>\u5DF2\u5B8C\u6210\u8EAB\u4EFD\u8BA4\u8BC1, \u8BF7\u8FD4\u56DE\u5E94\u7528\u7EE7\u7EED\u4F7F\u7528\u3002</p><p style="color:#888;font-size:14px">\u6B64\u7A97\u53E3\u5C06\u5728 3 \u79D2\u540E\u81EA\u52A8\u5173\u95ED\u2026</p><script>setTimeout(function(){window.close()},3000)</script></body></html>`
|
|
1271
|
+
);
|
|
1272
|
+
}
|
|
1266
1273
|
codeResolver(code);
|
|
1267
1274
|
});
|
|
1268
1275
|
const authURL = new URL(meta.authorization_endpoint);
|
|
@@ -1324,6 +1331,16 @@ async function authorize(meta, clientID, scopes, opts = {}) {
|
|
|
1324
1331
|
function htmlEscape(s) {
|
|
1325
1332
|
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
1326
1333
|
}
|
|
1334
|
+
function resolveSuccessRedirect(raw) {
|
|
1335
|
+
if (!raw) return null;
|
|
1336
|
+
try {
|
|
1337
|
+
const u = new URL(raw);
|
|
1338
|
+
if (u.protocol !== "http:" && u.protocol !== "https:") return null;
|
|
1339
|
+
return u.toString();
|
|
1340
|
+
} catch {
|
|
1341
|
+
return null;
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1327
1344
|
async function createWebAuthorizationRequest(meta, opts) {
|
|
1328
1345
|
const verifier = await generateCodeVerifier();
|
|
1329
1346
|
const challenge = await codeChallenge(verifier);
|