/** * 浏览器端小工具:`import { startOAuth, isWeChatBrowser } from '@chatu-ai/app-sdk/browser'` * 只做跳转/弹窗与消息接收,不碰任何密钥;服务端逻辑在 auth.oauth.*(技术方案 32 §4.2)。 * * 约定的应用路由(模板已内置): * - GET /api/auth/oauth/[provider]?returnTo=&mode= → 服务端 auth.oauth.start() 后 302 到提供方 * - GET /api/auth/oauth/callback?ticket=&returnTo= → 服务端 auth.oauth.exchange() 写 cookie 后 302 到 returnTo */ import type { OAuthProvider } from './auth.js'; export interface StartOAuthOptions { /** 登录后回到的站内路径,缺省当前路径 */ returnTo?: string; /** * redirect(整页跳转)| popup(弹窗)| auto(缺省:在 iframe 里用 popup,否则 redirect)。 * Builder 预览是 iframe,提供方授权页禁止被嵌入,所以预览里必须走 popup。 */ mode?: 'redirect' | 'popup' | 'auto'; /** 应用的发起路由前缀,缺省 /api/auth/oauth */ basePath?: string; /** 弹窗尺寸 */ popup?: { width?: number; height?: number; }; } /** 是否在微信内置浏览器里(决定用 wechat-mp 还是 wechat) */ export declare function isWeChatBrowser(): boolean; /** 当前页面是否被嵌在 iframe 里(Builder 预览就是) */ export declare function isInIframe(): boolean; /** 按运行环境挑微信登录方式:微信内 → 公众号 H5,否则 → 扫码 */ export declare function pickWeChatProvider(): 'wechat' | 'wechat-mp'; /** * 发起三方登录。**必须在用户点击事件里同步调用**(弹窗模式受浏览器拦截策略限制)。 * redirect 模式:整页跳到发起路由;popup 模式:弹窗打开发起路由,等回调页 postMessage 回 ticket, * 再把当前页跳到回调路由完成写 cookie 与回跳。返回的 Promise 在 popup 模式下于收到结果(或弹窗被关闭)时完成。 */ export declare function startOAuth(provider: OAuthProvider, opts?: StartOAuthOptions): Promise<{ ok: boolean; error?: string; }>;