@stiva-app/身份
用 Estiva ID 签名: 授权代码 + PKCE, 令牌存储, 无声 更新,签出, 和认证壳状态机器.
npm install @estiva-app/identity
外面什么都没有 @estiva-app 基础,没有数据层,也没有UI.
CI执行所有三个.
此软件包存在的接合
在: 一切决定 是否有人被签入 财务报告和审定财务报表 说什么 当他们不是的时候。 。 。 .
不入:任何应用程序的数据层. peek-app/src/auth/useEstivaIdAuth.ts 这是
适配器 ConvexProviderWithAuth 阅读,它留在皮克。 如果它在这里,
船和每个未来的应用 都会继承康维克斯的依赖性
这正是SHA-4的失败 顺序存在来避免.
船根本不需要适配器 是线上的测试. 手拿着 直接指向它的中继客户端.
不入:外壳的渲染. 每个应用都想要一个全页的表面.
共享是状态机器和原因词汇. 还有这个
软件包清除 @estiva-app/ui — ADR 0002 §2 名称身份取决于 ui
作为折叠的触发器 ui 回到地基里,那应该是
一个人做一个决定 而不是一个登录屏幕 偶然.
消费者之间的差别都是个参数
包是工厂,不是免费功能的模块,因为Peek和Ship 每一个问题都存在分歧,而硬编码者 包出出 Peek 形状, 这是整个风险 SHA-4 名称.
| 已注射 | 头皮 | 船舶 |
|---|---|---|
clientId | estiva-peek | estiva-ship |
redirectUri | a 固定数额 /auth/callback | 其当前路径名 - 船舶路线 location.hash |
keyPrefix | peek.estivaId | ship.estiva-id |
navigate | 一个真正不可检验的行为,所以它是可观察的 | |
setTimer 编号 : clearTimer | 计时器 scheduleRenewal 运行,注入的原因相同 |
每一个应用程序(PEE-3)的会话都相同. storage 默认
改为 localStorage ——每个分页共享一个会话,在分页关闭后幸存下来——和
pendingStore 改为 sessionStorage,因为一个登录开始和结束在一个分页中.
皮克在PEE -3之前 一直保持每节课,每张新帐单都付了0.5分
/authorize 弹出它。 两者均可注射( 测试, 脚本); 呼叫器
只通过 storage 和以前一样,为两个都买.
共享会话需要跨塔布锁更新. 每个标签的计时器起火
estiva ID 当刷新符号时撤销整个链条
分为两次. lock 默认为 Web 锁定 API; 等待的标签
它需要另一个标记 刚刚更新 而不是花旧的.
pendingStore 存在是因为第二位消费者找到了软件包
假设一个商店——它是取自皮克,它使用一个. 这就是"a"
库从一个应用中抽出 形状像该应用"故障 SHA-4名称,
sHA-4规定, 值得作为证据知道
第二消费者规则是维持而不是举行仪式.
一个应用程序一次性即时发送并再出口它自己的名字,所以调用站点不会churn:
const client = createEstivaId({
base: ESTIVA_ID_ORIGIN,
clientId: 'estiva-peek',
redirectUri: () => `${window.location.origin}/auth/callback`,
keyPrefix: 'peek.estivaId',
navigate: (url) => window.location.assign(url),
})
export const { validToken, beginSignIn, completeSignIn, beginSignOut } = client
签名在问,必须检查答案
// Peek: one round trip, a token read fresh each time
const event = await signViaEstivaId(unsigned, { base, token, expectedPubkey: myPubkey })
// Ship: a protocol Signer, built once. Pass a READER, not a string, if anything
// else can replace the token — `scheduleRenewal` does.
const signer = estivaIdSigner({
base,
pubkey,
token: () => client.validToken()?.accessToken,
renew: client.refreshAccessToken,
})
应用软件以个人身份发布,从未看到他们的秘密. @estiva-app/protocol
拥有事件如何获得签名; 此软件包拥有 谁被允许问。 。 。 .
/sign 无论交到什么 标语是标志对象. 这么说
属于他人的标志不是错误,而是 HTTP 200 带有效
由该另一人撰写的事件。 。 。 . expectedPubkey 这是支票,不是
请求,以及 estivaIdSigner 从酒吧里无条件供应
搭载。 在SHA -4之前有三份 只有一个
查过了,不是船的,谁都写进
船通过.
A 类 401 掷出 SignerTokenExpired; 任何其他拒绝 SignRefused
携带 HTTP status因为消费者对此进行分类 信息不是
a API -- -- 403 表示管理员必须恢复身份,而 422
政策拒绝完全意味着别的东西。 还有
estivaIdSigner 续约 一次 并重试。 从来没有两次: 一秒 401 之后
成功续约是服务无法接受的象征
一个被拒绝的签名是如何变成热回路的。 任何不是过期的东西
所以拒绝错误的作者从来不会花一个新鲜的符号.
延期是预定的,不是被动的
const schedule = client.scheduleRenewal({
onRenewed: (token) => setSignedIn(true),
onEnded: () => setSignedIn(false), // drop to the shell
})
// later, on sign-out or unmount
schedule.cancel()
tokenFrom 故意提前储存30秒过期,以及 scheduleRenewal
事情是这样的 换句话说,是某人的 下一个动作 实值
发现会话的结局是失败的发布,空白列表,充其量是a
重试他们能感觉到。 早点续约意味着他们什么也没有注意到, 也就是整个
(原始内容存档于2017-09-10). point of PEEK-108.
两次续会不得一一出. 刷新符号是单用
estiva ID读取了回放,作为盗窃的证据,撤销了整个链条——所以
重复更新不会浪费往返,它会给某人签出
一切众生. refreshAccessToken 将同时调用者合并为一个请求,
不仅有排程员 船也签了NIP-98
认证事件和内容事件为两个独立的 POST /sign 和一种迹象
他们之间的答案 401 对两者.
setTimeout 在背景标签中节奏. Chrome和Safari夹子a
隐藏标签的计时器大约每分钟一次, 并且可能在之后完全冻结
隐藏了5分钟,因此背景标签会错过其更新窗口. 自兹
0.3.0 当标签再次显示或网络出现时, 时间表也会续订
背数( r)onWake,默认为 visibilitychange 财务报告和审定财务报表 online;读取
本地声明的全局, 因此所公布的类型仍然名无所取, ADR 0002
(第4a条)。 更新后得不到答复,而不是结束登录;
只有EstivaID的拒绝电话 onEnded。 。 。 .
这个软件包的预测是伪造的
开始之前,票上的期望是那个身份 无法
遵循 ARD0002 §4a 一样干净 @estiva-app/protocol 做了,这是
浏览器形状贯穿全过程,需要 lib: dom,并且发展成果评估需要
修正为说.
这是错误的,值得指出的是,为什么不悄悄地提及:
crypto, (中文(简体) ),btoa, (中文(简体) ),TextEncoder, (中文(简体) ),URL, (中文(简体) ),URLSearchParams, (中文(简体) ),fetch财务报告和审定财务报表console在使用它们的模块内声明,并在功能机构内读取.- DOM的游戏
Storage成为本地人KeyValueStore接口.sessionStorage, (中文(简体) ),localStorage和一个普通物体 都满足它的结构 和出版 声明名称没有环境类型. - 导航是一个 所需经费
navigate调用而不是调用location到达.
因此,软件包构建 types: [] 没有 lib: dom,与 protocol
,而一个测试可以在每个浏览器全局被删除的情况下导入它。 CI声称两者兼有.
让它成为现实的不是聪明 这是 浏览器 API 是一个 app必须注入也是一个浏览器 API 一个测试可以观察 ——接缝 第4a条力量 和缝合一个测试想要是相同的接合。 假设之前值得记住 下一个浏览器形状的软件包需要免责.
@estiva-app/ui 仍然是反比喻:它飞船 .d.ts 文件命名
HTMLButtonElement并逃脱了它 仅仅因为它的消费者都是
浏览器应用程序.
释放
git tag [email protected] && git push origin [email protected]
这个 第一个 因为一个值得信赖的出版商 配置在已经存在的软件包上 – ADR 0002 §4c, §7 。 每一次发布 之后是标记.