@ai- matrx/ auth (英语)
每个 AI Mattrx 应用程序的签名、会话和组织——最顶端的小软件包
app. 无框架核心; /react 财务报告和审定财务报表 /next 区域; 只为导入的区域付费.
import { createAuthClient, signInWithPassword, sessionCredentials, signOut } from "@ai-matrx/auth";
import { createActiveOrganization, readMemberships } from "@ai-matrx/auth/organizations";
const supabase = createAuthClient({ url: "https://db.matrxserver.com", key: PUBLISHABLE_KEY });
const { person } = await signInWithPassword(supabase, { email, password });
const active = createActiveOrganization({ client: supabase });
const orgId = await active.ensureOrgId(); // held until the ladder answers
const credentials = sessionCredentials(supabase); // hand to @ai-matrx/api's createApi
| 节次 | 什麽 |
|---|---|
@ai-matrx/auth | 注册/退出、会话、刷新、, sessionCredentials,每个平台存储, createAuthClient |
/organizations | 成员、最爱、积极组织阶梯和 createActiveOrganization |
/credentials | 5种证书类型和1种证书 – 头图 |
/session-identity | 现场直播 |
/cookies | 全域认证饼干和活跃的组织饼干 |
/next | 每个 Next.js Supabase 客户端(浏览器, RSC, 路由, 中间软件) |
/browser | 在共享的 aut cookie( 非下一个应用程序) 上设置无框架浏览器 Supabase 客户端 |
/react | useSession, (中文(简体) ), useActiveOrganization, (中文(简体) ), useSessionIdentity |
/node | fileStorage ——一个脚本会话在运行之间存活 |
/testing | 测试的假会话 |
会话存储: 浏览器 browserStorage(),扩展名 extensionStorage()、 桌面
keyValueStorage(store)节点 fileStorage(path) 或者说 memoryStorage()下一个.js /next。 。 。 .
活动组织从来不是一个列表过滤器: 读取显示个人能看到的一切 活动组织只是保存新事物的地方,以及服务器调用在哪个组织.
在0.2.0中增加各节——各一个入门点
| 需求 | 导入 |
|---|---|
| 是谁打电话( 本地要求; 浏览器去dup) | getClaimsUser, (中文(简体) ), createClaimsCache 从 @ai-matrx/auth |
| 下一个应用程序中的服务器身份 | createServerAuth({ createClient, supabaseUrl, cache }) 从 @ai-matrx/auth/next |
| API 路由调用器( Bearer 或 cookie) | verifyRequest(request, { url, publishableKey, cookieClient }) 从 @ai-matrx/auth/node (或 /next(中文(简体) ) |
| 只有服务器的密钥客户端 | createServiceClient({ url, secretKey }) 从 @ai-matrx/auth/node (或 /next(中文(简体) ) |
| "需要组织"拒绝 | isOrganizationRequiredError, (中文(简体) ), organizationRequired, (中文(简体) ), organizationRequiredResponse 从 @ai-matrx/auth/organizations |
| 用 AI Matrx 签名( 扩展、 桌面、 CLI) | createMatrxOAuth(config, { storage, openAuthorization }) 从 @ai-matrx/auth/matrx-oauth |
这个人是管理者吗 admin.admins 行; 管理员+级别 / not admin / 未知) | readAdminStatus(client, userId) 从 @ai-matrx/auth/admin |
| 解码 JWT 段( base64url ~ 字节 / UTF-8 文本; 没有签名检查) | base64UrlToBytes, (中文(简体) ), base64UrlToText 从 @ai-matrx/auth/jwt (无依赖) |
@ai-matrx/auth/spa - 拥有自己标志的Vite SPA
对于一个不是Next/cookie应用程序(admin仪表板,Workflow Studio)的主持人: 登录到来作为一个
一次性 handoff aidream OAuth hop的代码, 访问符住在 localStorage,则a
在同一顶端上签名的 sign-in amoatrx.com 会话通过会话桥刷新.
import { sendMatrxRequest } from "@ai-matrx/api";
import { createSpaSession, createSpaSupabase, adminWhoamiVerifier } from "@ai-matrx/auth/spa";
export const session = createSpaSession({
request: sendMatrxRequest,
onBeforeTokenChange: (prev, next) => transitionQueryIdentity(prev, next),
onTokenChange: () => refreshOrganizationIdentity(),
bridge: { verifyToken: adminWhoamiVerifier(AIDREAM_API_URL) }, // dashboard only: admin gate
});
export const supabase = createSpaSupabase({ url, publishableKey, session, headers: { "x-matrx-admin-lane": "1" } });
回调路由 : classifyCallback(location.search) - > (中文) exchangeHandoff(api, handoff, sendMatrxRequest) - > (中文) session.setToken(token)。通过同一请求 reportTokenInQuery(api, params, where, sendMatrxRequest)要求: @ai-matrx/auth/spa 不通过 global 进行网络呼叫 fetch。 。 。 .
选项 : tokenKey (默认) matrx_admin_token, (中文(简体) ), storage, (中文(简体) ), loginPath (单位:千美元)/login, (中文(简体) ), navigate, (中文(简体) ),
bridge.sessionTokenUrl, (中文(简体) ), bridge.sameSiteOnly (对), bridge.attemptLimit (3个) attemptWindowMs (20000) (英语).
活跃的组织: createSpaOrganizationContext({ legacyStorageKey, apexDomains, tokenKey, serverUrl, db, sendRequest, bindOrganizationHeader, onIdentityChanged }) 返回时 withOrganizationHeader, (中文(简体) ), peekOrganizationId, (中文(简体) ), chooseOrganization, (中文(简体) ), listMemberOrganizations饼干和其余的,通过 sendMatrxRequest 财务报告和审定财务报表 applyOrganizationContextHeader 从 @ai-matrx/api。 。 。 .