@yeying-community/web3-bs 1.0.16 → 1.0.17
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/README.md +1 -0
- package/dist/auth/index.d.ts +1 -0
- package/dist/auth/profile.d.ts +34 -0
- package/dist/web3-bs.esm.js +106 -1
- package/dist/web3-bs.esm.js.map +1 -1
- package/dist/web3-bs.umd.js +111 -0
- package/dist/web3-bs.umd.js.map +1 -1
- package/docs/SDK/350/203/275/345/212/233.md +272 -0
- package/docs/UCAN/346/234/211/346/225/210/346/234/237/344/270/216/347/273/255/346/234/237/346/234/272/345/210/266.md +305 -0
- package/docs//345/212/240/350/247/243/345/257/206/346/234/215/345/212/241.md +146 -0
- package/docs//345/274/200/346/224/276/346/216/245/345/217/243/350/247/204/350/214/203.yaml +668 -0
- package/docs//345/277/253/351/200/237/344/270/212/346/211/213.md +476 -0
- package/docs//346/226/207/346/241/243/345/257/274/350/210/252.md +54 -0
- package/docs//347/247/273/345/212/250/347/253/257/350/256/244/350/257/201/344/270/216/346/216/210/346/235/203/351/200/211/345/236/213/346/214/207/345/215/227.md +151 -0
- package/docs//351/222/261/345/214/205/350/265/204/346/226/231/346/216/210/346/235/203.md +154 -0
- package/package.json +3 -2
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# 钱包资料授权
|
|
2
|
+
|
|
3
|
+
钱包资料授权让 Web3 应用在用户明确同意后读取钱包中的公开用户名或邮箱。它基于 EIP-1193 Provider 和钱包权限 RPC,不会把资料隐式附加到 `eth_accounts`、SIWE 消息或 UCAN Token 中。
|
|
4
|
+
|
|
5
|
+
## 支持字段
|
|
6
|
+
|
|
7
|
+
| 字段 | 作用域 | 说明 |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `username` | 当前钱包账户 | 用户为当前账户设置的公开用户名 |
|
|
10
|
+
| `email` | 钱包资料 | 用户主动填写的邮箱,当前不代表已经验证 |
|
|
11
|
+
|
|
12
|
+
SDK 不支持任意字段名。手机号、密码、助记词和私钥等字段会在调用钱包前直接被拒绝。
|
|
13
|
+
|
|
14
|
+
## 推荐接入
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
import { getProvider, connectAndGetWalletProfile } from '@yeying-community/web3-bs';
|
|
18
|
+
|
|
19
|
+
const provider = await getProvider({ preferYeYing: true });
|
|
20
|
+
if (!provider) throw new Error('未检测到钱包');
|
|
21
|
+
|
|
22
|
+
const result = await connectAndGetWalletProfile({
|
|
23
|
+
provider,
|
|
24
|
+
fields: ['username', 'email'],
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
console.log(result.address);
|
|
28
|
+
console.log(result.chainId);
|
|
29
|
+
console.log(result.profile.username);
|
|
30
|
+
console.log(result.profile.email);
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
首次调用依次执行:连接账户、查询已有权限、只申请缺少的字段、显示钱包审批、读取已授权资料。后续调用会复用已有权限。
|
|
34
|
+
|
|
35
|
+
## 分步调用
|
|
36
|
+
|
|
37
|
+
### 查询权限
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import { getWalletProfilePermission, getGrantedProfileFields } from '@yeying-community/web3-bs';
|
|
41
|
+
|
|
42
|
+
const permission = await getWalletProfilePermission(provider);
|
|
43
|
+
const fields = getGrantedProfileFields(permission);
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
没有资料权限时返回 `null`。
|
|
47
|
+
|
|
48
|
+
### 请求权限
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
await requestWalletProfilePermission({ provider, fields: ['username'] });
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
资料权限必须在站点已连接钱包后申请。邮箱更敏感,只应在业务确实需要时申请。
|
|
55
|
+
|
|
56
|
+
### 读取资料
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
const result = await getWalletProfile({ provider, fields: ['username'] });
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
返回类型:
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
type WalletProfileResult = {
|
|
66
|
+
address: string;
|
|
67
|
+
chainId: string | null;
|
|
68
|
+
profile: { username?: string; email?: string };
|
|
69
|
+
};
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
只返回本次明确请求且已经授权的字段。尚未填写的字段可以是空字符串。
|
|
73
|
+
|
|
74
|
+
### 撤销权限
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
await revokeWalletProfilePermission(provider);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
这会撤销当前站点全部 `yeying_profile` 字段权限,但不会断开账户连接。
|
|
81
|
+
|
|
82
|
+
## 静默读取模式
|
|
83
|
+
|
|
84
|
+
页面初始化时不希望自动弹出资料审批,可以禁用自动申请:
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
const result = await connectAndGetWalletProfile({
|
|
88
|
+
provider,
|
|
89
|
+
fields: ['username'],
|
|
90
|
+
requestPermission: false,
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
权限不存在时钱包会返回未授权错误。
|
|
95
|
+
|
|
96
|
+
## 错误处理
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
try {
|
|
100
|
+
await connectAndGetWalletProfile({ provider, fields: ['username', 'email'] });
|
|
101
|
+
} catch (error) {
|
|
102
|
+
const info = classifyWalletError(error);
|
|
103
|
+
if (info.type === 'userRejected') {
|
|
104
|
+
// 不要立即重复弹窗。
|
|
105
|
+
} else if (info.type === 'disconnected') {
|
|
106
|
+
// 提示用户解锁或重新连接钱包。
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
| Provider code | 含义 |
|
|
112
|
+
| --- | --- |
|
|
113
|
+
| `4001` | 用户拒绝连接或资料共享 |
|
|
114
|
+
| `4100` | 站点未连接、字段未授权或授权账户不是当前账户 |
|
|
115
|
+
| `-32602` | 字段为空或包含不支持字段 |
|
|
116
|
+
| `-32601` | 当前钱包不支持资料能力 |
|
|
117
|
+
|
|
118
|
+
## 与 SIWE 和 UCAN 的关系
|
|
119
|
+
|
|
120
|
+
- `eth_requestAccounts` 建立站点与账户连接。
|
|
121
|
+
- SIWE 证明用户控制钱包地址,通常用于后端登录。
|
|
122
|
+
- UCAN 授权主体执行资源操作。
|
|
123
|
+
- 钱包资料授权负责在用户同意后读取显示资料。
|
|
124
|
+
|
|
125
|
+
用户名和邮箱不是身份真实性证明,不能替代 SIWE 验签。当前邮箱没有验证声明;需要可信邮箱时,应由应用后端完成验证码或邮件链接验证。
|
|
126
|
+
|
|
127
|
+
## 隐私与安全
|
|
128
|
+
|
|
129
|
+
- 默认只申请 `username`,确有需要再申请 `email`。
|
|
130
|
+
- 不要在页面加载时无条件触发资料审批。
|
|
131
|
+
- 不要把资料写入 URL、公开日志、链上交易或公开 UCAN capability。
|
|
132
|
+
- 服务端应把资料绑定到返回的 `address`。
|
|
133
|
+
- 账户变化后重新读取资料,不要沿用旧账户资料。
|
|
134
|
+
- SDK 不缓存资料,应用自行决定缓存周期和清理策略。
|
|
135
|
+
|
|
136
|
+
## 原始 RPC
|
|
137
|
+
|
|
138
|
+
```js
|
|
139
|
+
await ethereum.request({ method: 'eth_requestAccounts' });
|
|
140
|
+
await ethereum.request({
|
|
141
|
+
method: 'wallet_requestPermissions',
|
|
142
|
+
params: [{ yeying_profile: { fields: ['username', 'email'] } }],
|
|
143
|
+
});
|
|
144
|
+
const result = await ethereum.request({
|
|
145
|
+
method: 'yeying_getProfile',
|
|
146
|
+
params: [{ fields: ['username', 'email'] }],
|
|
147
|
+
});
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
SDK 在此基础上提供字段类型约束、已有权限复用、缺失字段增量申请和返回值校验。
|
|
151
|
+
|
|
152
|
+
## 兼容性
|
|
153
|
+
|
|
154
|
+
资料能力是 YeYing 钱包扩展能力。其他 EIP-1193 钱包可能返回 `-32601 Method not found`。应用应把资料视为可选增强能力,不能因为钱包不支持该接口而阻止标准钱包登录。
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yeying-community/web3-bs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"author": "yeying.community@gmail.com",
|
|
5
5
|
"description": "Browser-side DApp access SDK for EIP-1193, SIWE, UCAN, central UCAN and WebDAV",
|
|
6
6
|
"module": "dist/web3-bs.esm.js",
|
|
7
7
|
"browser": "dist/web3-bs.umd.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
9
|
"files": [
|
|
10
|
-
"dist/**/*"
|
|
10
|
+
"dist/**/*",
|
|
11
|
+
"docs/**/*"
|
|
11
12
|
],
|
|
12
13
|
"scripts": {
|
|
13
14
|
"dev": "rollup -c -w",
|