@diap/sdk 0.1.1 → 0.1.3
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/LICENSE +21 -21
- package/README.md +86 -86
- package/dist/agent-auth.d.ts +96 -0
- package/dist/agent-auth.d.ts.map +1 -0
- package/dist/agent-auth.js +343 -0
- package/dist/agent-auth.js.map +1 -0
- package/dist/agent-verification.d.ts +158 -0
- package/dist/agent-verification.d.ts.map +1 -0
- package/dist/agent-verification.js +237 -0
- package/dist/agent-verification.js.map +1 -0
- package/dist/config-manager.d.ts +156 -0
- package/dist/config-manager.d.ts.map +1 -0
- package/dist/config-manager.js +241 -0
- package/dist/config-manager.js.map +1 -0
- package/dist/did-builder.d.ts +62 -0
- package/dist/did-builder.d.ts.map +1 -0
- package/dist/did-builder.js +315 -0
- package/dist/did-builder.js.map +1 -0
- package/dist/did-cache.d.ts +133 -0
- package/dist/did-cache.d.ts.map +1 -0
- package/dist/did-cache.js +273 -0
- package/dist/did-cache.js.map +1 -0
- package/dist/identity-manager.d.ts +87 -0
- package/dist/identity-manager.d.ts.map +1 -0
- package/dist/identity-manager.js +196 -0
- package/dist/identity-manager.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/ipfs-bidirectional-verification.d.ts +201 -0
- package/dist/ipfs-bidirectional-verification.d.ts.map +1 -0
- package/dist/ipfs-bidirectional-verification.js +298 -0
- package/dist/ipfs-bidirectional-verification.js.map +1 -0
- package/dist/ipfs-client.d.ts +151 -0
- package/dist/ipfs-client.d.ts.map +1 -0
- package/dist/ipfs-client.js +623 -0
- package/dist/ipfs-client.js.map +1 -0
- package/dist/ipfs-node-manager.d.ts +136 -0
- package/dist/ipfs-node-manager.d.ts.map +1 -0
- package/dist/ipfs-node-manager.js +232 -0
- package/dist/ipfs-node-manager.js.map +1 -0
- package/dist/ipns-manager.d.ts +182 -0
- package/dist/ipns-manager.d.ts.map +1 -0
- package/dist/ipns-manager.js +268 -0
- package/dist/ipns-manager.js.map +1 -0
- package/dist/key-manager.d.ts +48 -0
- package/dist/key-manager.d.ts.map +1 -0
- package/dist/key-manager.js +231 -0
- package/dist/key-manager.js.map +1 -0
- package/dist/kubo-installer.d.ts +115 -0
- package/dist/kubo-installer.d.ts.map +1 -0
- package/dist/kubo-installer.js +205 -0
- package/dist/kubo-installer.js.map +1 -0
- package/dist/libp2p/encrypted-peer-id.d.ts +24 -0
- package/dist/libp2p/encrypted-peer-id.d.ts.map +1 -0
- package/dist/libp2p/encrypted-peer-id.js +134 -0
- package/dist/libp2p/encrypted-peer-id.js.map +1 -0
- package/dist/nonce-manager.d.ts +176 -0
- package/dist/nonce-manager.d.ts.map +1 -0
- package/dist/nonce-manager.js +382 -0
- package/dist/nonce-manager.js.map +1 -0
- package/dist/p2p/hyperswarm-communicator.d.ts +252 -0
- package/dist/p2p/hyperswarm-communicator.d.ts.map +1 -0
- package/dist/p2p/hyperswarm-communicator.js +469 -0
- package/dist/p2p/hyperswarm-communicator.js.map +1 -0
- package/dist/p2p/iroh-communicator.d.ts +216 -0
- package/dist/p2p/iroh-communicator.d.ts.map +1 -0
- package/dist/p2p/iroh-communicator.js +408 -0
- package/dist/p2p/iroh-communicator.js.map +1 -0
- package/dist/pubsub-authenticator.d.ts +246 -0
- package/dist/pubsub-authenticator.d.ts.map +1 -0
- package/dist/pubsub-authenticator.js +384 -0
- package/dist/pubsub-authenticator.js.map +1 -0
- package/dist/real-name-auth.d.ts +238 -0
- package/dist/real-name-auth.d.ts.map +1 -0
- package/dist/real-name-auth.js +259 -0
- package/dist/real-name-auth.js.map +1 -0
- package/dist/types/did.d.ts +76 -0
- package/dist/types/did.d.ts.map +1 -0
- package/dist/types/did.js +5 -0
- package/dist/types/did.js.map +1 -0
- package/dist/types/errors.d.ts +42 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +69 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/key.d.ts +43 -0
- package/dist/types/key.d.ts.map +1 -0
- package/dist/types/key.js +5 -0
- package/dist/types/key.js.map +1 -0
- package/dist/types/zkp.d.ts +80 -0
- package/dist/types/zkp.d.ts.map +1 -0
- package/dist/types/zkp.js +16 -0
- package/dist/types/zkp.js.map +1 -0
- package/dist/utils/crypto.d.ts +24 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +65 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/encoding.d.ts +36 -0
- package/dist/utils/encoding.d.ts.map +1 -0
- package/dist/utils/encoding.js +80 -0
- package/dist/utils/encoding.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +37 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/zkp/key-generator.d.ts +56 -0
- package/dist/zkp/key-generator.d.ts.map +1 -0
- package/dist/zkp/key-generator.js +165 -0
- package/dist/zkp/key-generator.js.map +1 -0
- package/dist/zkp/simplified-backend.d.ts +23 -0
- package/dist/zkp/simplified-backend.d.ts.map +1 -0
- package/dist/zkp/simplified-backend.js +77 -0
- package/dist/zkp/simplified-backend.js.map +1 -0
- package/dist/zkp/snarkjs-backend.d.ts +150 -0
- package/dist/zkp/snarkjs-backend.d.ts.map +1 -0
- package/dist/zkp/snarkjs-backend.js +218 -0
- package/dist/zkp/snarkjs-backend.js.map +1 -0
- package/dist/zkp/universal-manager.d.ts +44 -0
- package/dist/zkp/universal-manager.d.ts.map +1 -0
- package/dist/zkp/universal-manager.js +181 -0
- package/dist/zkp/universal-manager.js.map +1 -0
- package/package.json +2 -2
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024 DIAP SDK Contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 DIAP SDK Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
# DIAP TypeScript SDK
|
|
2
|
-
|
|
3
|
-
基于零知识证明的去中心化智能体身份协议 TypeScript SDK。
|
|
4
|
-
|
|
5
|
-
这是 DIAP Rust SDK 的 TypeScript 翻译版本,保持相同的功能逻辑和 API 设计,但使用 TypeScript/Node.js 生态系统的依赖。
|
|
6
|
-
|
|
7
|
-
## 功能特性
|
|
8
|
-
|
|
9
|
-
- 🔐 密钥管理:Ed25519 密钥对生成、存储和管理
|
|
10
|
-
- 🌐 IPFS 集成:轻量级 Helia 客户端,支持文件上传和检索
|
|
11
|
-
- 🆔 DID 构建:符合 W3C 规范的 DID 文档构建和发布
|
|
12
|
-
- 🔒 零知识证明:基于 o1js 的 ZKP 证明生成和验证
|
|
13
|
-
- 🤖 智能体认证:完整的身份注册和验证流程
|
|
14
|
-
- 🌍 libp2p 网络:点对点网络通信支持
|
|
15
|
-
|
|
16
|
-
## 安装
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
npm install @diap/sdk
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### Windows 用户注意事项
|
|
23
|
-
|
|
24
|
-
如果在 Windows 上遇到安装问题,请参考 [INSTALL.md](./INSTALL.md) 获取详细的解决方案。
|
|
25
|
-
|
|
26
|
-
推荐使用以下命令安装:
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
npm install --legacy-peer-deps
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## 快速开始
|
|
33
|
-
|
|
34
|
-
```typescript
|
|
35
|
-
import { AgentAuthManager } from '@diap/sdk';
|
|
36
|
-
|
|
37
|
-
async function main() {
|
|
38
|
-
// 创建认证管理器
|
|
39
|
-
const authManager = await AgentAuthManager.new();
|
|
40
|
-
|
|
41
|
-
// 创建智能体
|
|
42
|
-
const { agentInfo, keypair, peerId } = authManager.createAgent('MyAgent');
|
|
43
|
-
|
|
44
|
-
// 注册身份
|
|
45
|
-
const registration = await authManager.registerAgent(agentInfo, keypair, peerId);
|
|
46
|
-
console.log('Agent registered:', registration.did);
|
|
47
|
-
console.log('CID:', registration.cid);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
main().catch(console.error);
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## 开发
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
# 安装依赖
|
|
57
|
-
npm install
|
|
58
|
-
|
|
59
|
-
# 构建项目
|
|
60
|
-
npm run build
|
|
61
|
-
|
|
62
|
-
# 运行测试
|
|
63
|
-
npm test
|
|
64
|
-
|
|
65
|
-
# 代码检查
|
|
66
|
-
npm run lint
|
|
67
|
-
|
|
68
|
-
# 格式化代码
|
|
69
|
-
npm run format
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## 文档
|
|
73
|
-
|
|
74
|
-
详细文档请参考:
|
|
75
|
-
- [API 文档](./docs/API.md)
|
|
76
|
-
- [使用指南](./docs/GUIDE.md)
|
|
77
|
-
- [架构文档](./docs/ARCHITECTURE.md)
|
|
78
|
-
|
|
79
|
-
## 许可证
|
|
80
|
-
|
|
81
|
-
MIT License
|
|
82
|
-
|
|
83
|
-
## 链接
|
|
84
|
-
|
|
85
|
-
- [Rust SDK](https://github.com/logos-42/DIAP_TS_SDK)
|
|
86
|
-
- [项目主页](https://alou.fun)
|
|
1
|
+
# DIAP TypeScript SDK
|
|
2
|
+
|
|
3
|
+
基于零知识证明的去中心化智能体身份协议 TypeScript SDK。
|
|
4
|
+
|
|
5
|
+
这是 DIAP Rust SDK 的 TypeScript 翻译版本,保持相同的功能逻辑和 API 设计,但使用 TypeScript/Node.js 生态系统的依赖。
|
|
6
|
+
|
|
7
|
+
## 功能特性
|
|
8
|
+
|
|
9
|
+
- 🔐 密钥管理:Ed25519 密钥对生成、存储和管理
|
|
10
|
+
- 🌐 IPFS 集成:轻量级 Helia 客户端,支持文件上传和检索
|
|
11
|
+
- 🆔 DID 构建:符合 W3C 规范的 DID 文档构建和发布
|
|
12
|
+
- 🔒 零知识证明:基于 o1js 的 ZKP 证明生成和验证
|
|
13
|
+
- 🤖 智能体认证:完整的身份注册和验证流程
|
|
14
|
+
- 🌍 libp2p 网络:点对点网络通信支持
|
|
15
|
+
|
|
16
|
+
## 安装
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @diap/sdk
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Windows 用户注意事项
|
|
23
|
+
|
|
24
|
+
如果在 Windows 上遇到安装问题,请参考 [INSTALL.md](./INSTALL.md) 获取详细的解决方案。
|
|
25
|
+
|
|
26
|
+
推荐使用以下命令安装:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install --legacy-peer-deps
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 快速开始
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { AgentAuthManager } from '@diap/sdk';
|
|
36
|
+
|
|
37
|
+
async function main() {
|
|
38
|
+
// 创建认证管理器
|
|
39
|
+
const authManager = await AgentAuthManager.new();
|
|
40
|
+
|
|
41
|
+
// 创建智能体
|
|
42
|
+
const { agentInfo, keypair, peerId } = authManager.createAgent('MyAgent');
|
|
43
|
+
|
|
44
|
+
// 注册身份
|
|
45
|
+
const registration = await authManager.registerAgent(agentInfo, keypair, peerId);
|
|
46
|
+
console.log('Agent registered:', registration.did);
|
|
47
|
+
console.log('CID:', registration.cid);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
main().catch(console.error);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 开发
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 安装依赖
|
|
57
|
+
npm install
|
|
58
|
+
|
|
59
|
+
# 构建项目
|
|
60
|
+
npm run build
|
|
61
|
+
|
|
62
|
+
# 运行测试
|
|
63
|
+
npm test
|
|
64
|
+
|
|
65
|
+
# 代码检查
|
|
66
|
+
npm run lint
|
|
67
|
+
|
|
68
|
+
# 格式化代码
|
|
69
|
+
npm run format
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 文档
|
|
73
|
+
|
|
74
|
+
详细文档请参考:
|
|
75
|
+
- [API 文档](./docs/API.md)
|
|
76
|
+
- [使用指南](./docs/GUIDE.md)
|
|
77
|
+
- [架构文档](./docs/ARCHITECTURE.md)
|
|
78
|
+
|
|
79
|
+
## 许可证
|
|
80
|
+
|
|
81
|
+
MIT License
|
|
82
|
+
|
|
83
|
+
## 链接
|
|
84
|
+
|
|
85
|
+
- [Rust SDK](https://github.com/logos-42/DIAP_TS_SDK)
|
|
86
|
+
- [项目主页](https://alou.fun)
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 智能体认证管理器
|
|
3
|
+
* 提供统一的智能体认证 API
|
|
4
|
+
* 基于 Rust SDK 的实现逻辑
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentInfo, IdentityRegistration } from './identity-manager.js';
|
|
7
|
+
import type { KeyPair } from './types/key.js';
|
|
8
|
+
/**
|
|
9
|
+
* 认证结果
|
|
10
|
+
*/
|
|
11
|
+
export interface AuthResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
agentId: string;
|
|
14
|
+
proof?: Uint8Array;
|
|
15
|
+
verificationDetails: string[];
|
|
16
|
+
timestamp: number;
|
|
17
|
+
processingTimeMs: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 批量认证结果
|
|
21
|
+
*/
|
|
22
|
+
export interface BatchAuthResult {
|
|
23
|
+
totalCount: number;
|
|
24
|
+
successCount: number;
|
|
25
|
+
failureCount: number;
|
|
26
|
+
successRate: number;
|
|
27
|
+
totalTimeMs: number;
|
|
28
|
+
averageTimeMs: number;
|
|
29
|
+
results: AuthResult[];
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 智能体认证管理器
|
|
33
|
+
*/
|
|
34
|
+
export declare class AgentAuthManager {
|
|
35
|
+
private identityManager;
|
|
36
|
+
private ipfsClient;
|
|
37
|
+
/**
|
|
38
|
+
* 创建新的认证管理器(使用公共 IPFS)
|
|
39
|
+
*/
|
|
40
|
+
static new(): Promise<AgentAuthManager>;
|
|
41
|
+
/**
|
|
42
|
+
* 使用自定义 IPFS 节点创建认证管理器
|
|
43
|
+
*/
|
|
44
|
+
static newWithRemoteIpfs(apiUrl: string, gatewayUrl: string): Promise<AgentAuthManager>;
|
|
45
|
+
private constructor();
|
|
46
|
+
/**
|
|
47
|
+
* 创建智能体
|
|
48
|
+
*/
|
|
49
|
+
createAgent(name: string, _email?: string): {
|
|
50
|
+
agentInfo: AgentInfo;
|
|
51
|
+
keypair: KeyPair;
|
|
52
|
+
peerId: string;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* 注册智能体
|
|
56
|
+
*/
|
|
57
|
+
registerAgent(agentInfo: AgentInfo, keypair: KeyPair, peerId: string): Promise<IdentityRegistration>;
|
|
58
|
+
/**
|
|
59
|
+
* 生成证明
|
|
60
|
+
*/
|
|
61
|
+
generateProof(keypair: KeyPair, cid: string): Promise<AuthResult>;
|
|
62
|
+
/**
|
|
63
|
+
* 验证身份
|
|
64
|
+
*/
|
|
65
|
+
verifyIdentity(cid: string, proof: Uint8Array): Promise<AuthResult>;
|
|
66
|
+
/**
|
|
67
|
+
* 双向认证
|
|
68
|
+
*/
|
|
69
|
+
mutualAuthentication(_aliceInfo: AgentInfo, aliceKeypair: KeyPair, _alicePeerId: string, aliceCid: string, _bobInfo: AgentInfo, bobKeypair: KeyPair, _bobPeerId: string, bobCid: string): Promise<[AuthResult, AuthResult, AuthResult]>;
|
|
70
|
+
/**
|
|
71
|
+
* 批量认证测试(串行版本)
|
|
72
|
+
*/
|
|
73
|
+
batchAuthenticationTest(_agentInfo: AgentInfo, keypair: KeyPair, _peerId: string, cid: string, count: number): Promise<BatchAuthResult>;
|
|
74
|
+
/**
|
|
75
|
+
* 并发批量认证测试(真并行)
|
|
76
|
+
*/
|
|
77
|
+
concurrentBatchAuthenticationTest(_agentInfo: AgentInfo, keypair: KeyPair, _peerId: string, cid: string, count: number, maxConcurrency?: number): Promise<BatchAuthResult>;
|
|
78
|
+
/**
|
|
79
|
+
* 并发生成证明(仅生成,不验证)
|
|
80
|
+
*/
|
|
81
|
+
concurrentGenerateProofs(keypair: KeyPair, cid: string, count: number, maxConcurrency?: number): Promise<AuthResult[]>;
|
|
82
|
+
/**
|
|
83
|
+
* 压力测试模式:同时进行生成和验证
|
|
84
|
+
*/
|
|
85
|
+
stressTest(keypair: KeyPair, cid: string, iterations: number, maxConcurrency?: number): Promise<{
|
|
86
|
+
proofResults: AuthResult[];
|
|
87
|
+
verifyResults: AuthResult[];
|
|
88
|
+
totalTimeMs: number;
|
|
89
|
+
successRate: number;
|
|
90
|
+
}>;
|
|
91
|
+
/**
|
|
92
|
+
* 关闭管理器
|
|
93
|
+
*/
|
|
94
|
+
stop(): Promise<void>;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=agent-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-auth.d.ts","sourceRoot":"","sources":["../src/agent-auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,oBAAoB,EAGrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAQ9C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAa;IAE/B;;OAEG;WACU,GAAG,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAS7C;;OAEG;WACU,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAS7F,OAAO;IAKP;;OAEG;IACH,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd;QACD,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB;IA8BD;;OAEG;IACG,aAAa,CACjB,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC;IAWhC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAwCvE;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAqCzE;;OAEG;IACG,oBAAoB,CACxB,UAAU,EAAE,SAAS,EACrB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,SAAS,EACnB,UAAU,EAAE,OAAO,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAgBhD;;OAEG;IACG,uBAAuB,CAC3B,UAAU,EAAE,SAAS,EACrB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC;IAiC3B;;OAEG;IACG,iCAAiC,CACrC,UAAU,EAAE,SAAS,EACrB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,MAAW,GAC1B,OAAO,CAAC,eAAe,CAAC;IA4E3B;;OAEG;IACG,wBAAwB,CAC5B,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,MAAW,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC;IAqCxB;;OAEG;IACG,UAAU,CACd,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,cAAc,GAAE,MAAW,GAC1B,OAAO,CAAC;QACT,YAAY,EAAE,UAAU,EAAE,CAAC;QAC3B,aAAa,EAAE,UAAU,EAAE,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAsDF;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 智能体认证管理器
|
|
3
|
+
* 提供统一的智能体认证 API
|
|
4
|
+
* 基于 Rust SDK 的实现逻辑
|
|
5
|
+
*/
|
|
6
|
+
import { IdentityManager } from './identity-manager.js';
|
|
7
|
+
import { IpfsClient } from './ipfs-client.js';
|
|
8
|
+
import { KeyManager } from './key-manager.js';
|
|
9
|
+
import { generateRandomBytes } from './utils/crypto.js';
|
|
10
|
+
import { logger } from './utils/logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* 智能体认证管理器
|
|
13
|
+
*/
|
|
14
|
+
export class AgentAuthManager {
|
|
15
|
+
identityManager;
|
|
16
|
+
ipfsClient;
|
|
17
|
+
/**
|
|
18
|
+
* 创建新的认证管理器(使用公共 IPFS)
|
|
19
|
+
*/
|
|
20
|
+
static async new() {
|
|
21
|
+
logger.info('🚀 初始化智能体认证管理器(轻量级版本)');
|
|
22
|
+
const ipfsClient = await IpfsClient.newPublicOnly(30);
|
|
23
|
+
const manager = new AgentAuthManager(ipfsClient);
|
|
24
|
+
return manager;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 使用自定义 IPFS 节点创建认证管理器
|
|
28
|
+
*/
|
|
29
|
+
static async newWithRemoteIpfs(apiUrl, gatewayUrl) {
|
|
30
|
+
logger.info('🚀 初始化智能体认证管理器(使用远程IPFS)');
|
|
31
|
+
const ipfsClient = await IpfsClient.newWithRemoteNode(apiUrl, gatewayUrl, 30);
|
|
32
|
+
const manager = new AgentAuthManager(ipfsClient);
|
|
33
|
+
return manager;
|
|
34
|
+
}
|
|
35
|
+
constructor(ipfsClient) {
|
|
36
|
+
this.ipfsClient = ipfsClient;
|
|
37
|
+
this.identityManager = new IdentityManager(ipfsClient);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 创建智能体
|
|
41
|
+
*/
|
|
42
|
+
createAgent(name, _email) {
|
|
43
|
+
logger.info(`🤖 创建智能体: ${name}`);
|
|
44
|
+
const keypair = KeyManager.generate();
|
|
45
|
+
const peerIdBytes = generateRandomBytes(32);
|
|
46
|
+
const peerId = Buffer.from(peerIdBytes).toString('base64url');
|
|
47
|
+
const agentInfo = {
|
|
48
|
+
name,
|
|
49
|
+
services: [
|
|
50
|
+
{
|
|
51
|
+
serviceType: 'messaging',
|
|
52
|
+
endpoint: `https://${name.toLowerCase()}.example.com/messaging`,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
description: `${name}智能体`,
|
|
56
|
+
tags: ['agent', name.toLowerCase()],
|
|
57
|
+
};
|
|
58
|
+
logger.info(`✅ 智能体创建成功: ${name}`);
|
|
59
|
+
logger.info(` DID: ${keypair.did}`);
|
|
60
|
+
return {
|
|
61
|
+
agentInfo,
|
|
62
|
+
keypair,
|
|
63
|
+
peerId,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 注册智能体
|
|
68
|
+
*/
|
|
69
|
+
async registerAgent(agentInfo, keypair, peerId) {
|
|
70
|
+
logger.info(`📝 注册智能体身份: ${agentInfo.name}`);
|
|
71
|
+
const registration = await this.identityManager.registerIdentity(agentInfo, keypair, peerId);
|
|
72
|
+
logger.info('✅ 身份注册成功');
|
|
73
|
+
logger.info(` CID: ${registration.cid}`);
|
|
74
|
+
return registration;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 生成证明
|
|
78
|
+
*/
|
|
79
|
+
async generateProof(keypair, cid) {
|
|
80
|
+
const startTime = Date.now();
|
|
81
|
+
try {
|
|
82
|
+
logger.info('🔐 生成身份证明');
|
|
83
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
84
|
+
const nonceStr = `proof_${keypair.did}_${timestamp}`;
|
|
85
|
+
const nonce = new TextEncoder().encode(nonceStr);
|
|
86
|
+
const didDocument = await this.ipfsClient.get(cid);
|
|
87
|
+
const parsedDoc = JSON.parse(didDocument);
|
|
88
|
+
const proof = this.identityManager.generateBindingProof(keypair, parsedDoc, cid, nonce);
|
|
89
|
+
const processingTime = Date.now() - startTime;
|
|
90
|
+
logger.info('✅ 身份证明生成成功');
|
|
91
|
+
logger.info(` 处理时间: ${processingTime}ms`);
|
|
92
|
+
return {
|
|
93
|
+
success: true,
|
|
94
|
+
agentId: parsedDoc.id,
|
|
95
|
+
proof: proof,
|
|
96
|
+
verificationDetails: ['✓ 证明生成成功'],
|
|
97
|
+
timestamp,
|
|
98
|
+
processingTimeMs: processingTime,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
const processingTime = Date.now() - startTime;
|
|
103
|
+
return {
|
|
104
|
+
success: false,
|
|
105
|
+
agentId: '',
|
|
106
|
+
verificationDetails: [`Failed to generate proof: ${error}`],
|
|
107
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
108
|
+
processingTimeMs: processingTime,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 验证身份
|
|
114
|
+
*/
|
|
115
|
+
async verifyIdentity(cid, proof) {
|
|
116
|
+
const startTime = Date.now();
|
|
117
|
+
try {
|
|
118
|
+
logger.info('🔍 验证身份');
|
|
119
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
120
|
+
const nonceStr = `verify_${timestamp}`;
|
|
121
|
+
const nonce = new TextEncoder().encode(nonceStr);
|
|
122
|
+
const verification = await this.identityManager.verifyIdentityWithZKP(cid, proof, nonce);
|
|
123
|
+
const processingTime = Date.now() - startTime;
|
|
124
|
+
logger.info('✅ 身份验证完成');
|
|
125
|
+
logger.info(` 验证结果: ${verification.zkpVerified ? '通过' : '失败'}`);
|
|
126
|
+
logger.info(` 处理时间: ${processingTime}ms`);
|
|
127
|
+
return {
|
|
128
|
+
success: verification.zkpVerified,
|
|
129
|
+
agentId: verification.did,
|
|
130
|
+
verificationDetails: verification.verificationDetails,
|
|
131
|
+
timestamp,
|
|
132
|
+
processingTimeMs: processingTime,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
const processingTime = Date.now() - startTime;
|
|
137
|
+
return {
|
|
138
|
+
success: false,
|
|
139
|
+
agentId: '',
|
|
140
|
+
verificationDetails: [`Verification failed: ${error}`],
|
|
141
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
142
|
+
processingTimeMs: processingTime,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 双向认证
|
|
148
|
+
*/
|
|
149
|
+
async mutualAuthentication(_aliceInfo, aliceKeypair, _alicePeerId, aliceCid, _bobInfo, bobKeypair, _bobPeerId, bobCid) {
|
|
150
|
+
logger.info('🔄 开始双向认证流程');
|
|
151
|
+
const aliceProof = await this.generateProof(aliceKeypair, aliceCid);
|
|
152
|
+
const bobVerifyAlice = await this.verifyIdentity(aliceCid, aliceProof.proof);
|
|
153
|
+
const bobProof = await this.generateProof(bobKeypair, bobCid);
|
|
154
|
+
const aliceVerifyBob = await this.verifyIdentity(bobCid, bobProof.proof);
|
|
155
|
+
logger.info('✅ 双向认证完成');
|
|
156
|
+
logger.info(` Alice → Bob: ${bobVerifyAlice.success ? '✅' : '❌'}`);
|
|
157
|
+
logger.info(` Bob → Alice: ${aliceVerifyBob.success ? '✅' : '❌'}`);
|
|
158
|
+
return [aliceProof, bobVerifyAlice, aliceVerifyBob];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* 批量认证测试(串行版本)
|
|
162
|
+
*/
|
|
163
|
+
async batchAuthenticationTest(_agentInfo, keypair, _peerId, cid, count) {
|
|
164
|
+
logger.info(`🔄 开始批量认证测试: ${count}次`);
|
|
165
|
+
const startTime = Date.now();
|
|
166
|
+
const results = [];
|
|
167
|
+
let successCount = 0;
|
|
168
|
+
for (let i = 0; i < count; i++) {
|
|
169
|
+
logger.info(` 处理第${i + 1}个认证...`);
|
|
170
|
+
const proofResult = await this.generateProof(keypair, cid);
|
|
171
|
+
if (proofResult.success) {
|
|
172
|
+
successCount++;
|
|
173
|
+
}
|
|
174
|
+
results.push(proofResult);
|
|
175
|
+
}
|
|
176
|
+
const totalTime = Date.now() - startTime;
|
|
177
|
+
const failureCount = count - successCount;
|
|
178
|
+
const successRate = (successCount / count) * 100;
|
|
179
|
+
return {
|
|
180
|
+
totalCount: count,
|
|
181
|
+
successCount,
|
|
182
|
+
failureCount,
|
|
183
|
+
successRate,
|
|
184
|
+
totalTimeMs: totalTime,
|
|
185
|
+
averageTimeMs: Math.floor(totalTime / count),
|
|
186
|
+
results,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* 并发批量认证测试(真并行)
|
|
191
|
+
*/
|
|
192
|
+
async concurrentBatchAuthenticationTest(_agentInfo, keypair, _peerId, cid, count, maxConcurrency = 10) {
|
|
193
|
+
logger.info(`⚡ 开始并发批量认证测试: ${count}次 (最大并发: ${maxConcurrency})`);
|
|
194
|
+
const startTime = Date.now();
|
|
195
|
+
const results = [];
|
|
196
|
+
let successCount = 0;
|
|
197
|
+
// 使用信号量控制并发数
|
|
198
|
+
let running = 0;
|
|
199
|
+
let index = 0;
|
|
200
|
+
const executeBatch = async () => {
|
|
201
|
+
while (index < count) {
|
|
202
|
+
const currentIndex = index++;
|
|
203
|
+
const currentRunning = ++running;
|
|
204
|
+
if (currentRunning > maxConcurrency) {
|
|
205
|
+
running--;
|
|
206
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
logger.info(` 处理第${currentIndex + 1}个认证... (并发: ${currentRunning})`);
|
|
210
|
+
try {
|
|
211
|
+
const proofResult = await this.generateProof(keypair, cid);
|
|
212
|
+
if (proofResult.success) {
|
|
213
|
+
successCount++;
|
|
214
|
+
}
|
|
215
|
+
results.push(proofResult);
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
logger.error(` 第${currentIndex + 1}个认证失败: ${error}`);
|
|
219
|
+
results.push({
|
|
220
|
+
success: false,
|
|
221
|
+
agentId: '',
|
|
222
|
+
verificationDetails: [`并发认证失败: ${error}`],
|
|
223
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
224
|
+
processingTimeMs: 0,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
running--;
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
// 启动多个并发任务
|
|
231
|
+
const tasks = [];
|
|
232
|
+
const numWorkers = Math.min(maxConcurrency, count);
|
|
233
|
+
for (let i = 0; i < numWorkers; i++) {
|
|
234
|
+
tasks.push(executeBatch());
|
|
235
|
+
}
|
|
236
|
+
await Promise.all(tasks);
|
|
237
|
+
const totalTime = Date.now() - startTime;
|
|
238
|
+
const failureCount = count - successCount;
|
|
239
|
+
const successRate = (successCount / count) * 100;
|
|
240
|
+
logger.info(`✅ 并发批量认证完成`);
|
|
241
|
+
logger.info(` 总处理数: ${count}`);
|
|
242
|
+
logger.info(` 成功数: ${successCount}`);
|
|
243
|
+
logger.info(` 成功率: ${successRate.toFixed(2)}%`);
|
|
244
|
+
logger.info(` 总时间: ${totalTime}ms`);
|
|
245
|
+
logger.info(` 平均时间: ${Math.floor(totalTime / count)}ms`);
|
|
246
|
+
return {
|
|
247
|
+
totalCount: count,
|
|
248
|
+
successCount,
|
|
249
|
+
failureCount,
|
|
250
|
+
successRate,
|
|
251
|
+
totalTimeMs: totalTime,
|
|
252
|
+
averageTimeMs: Math.floor(totalTime / count),
|
|
253
|
+
results,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* 并发生成证明(仅生成,不验证)
|
|
258
|
+
*/
|
|
259
|
+
async concurrentGenerateProofs(keypair, cid, count, maxConcurrency = 20) {
|
|
260
|
+
logger.info(`⚡ 并发生成 ${count} 个证明 (并发: ${maxConcurrency})`);
|
|
261
|
+
const promises = [];
|
|
262
|
+
for (let i = 0; i < count; i++) {
|
|
263
|
+
const promise = this.generateProof(keypair, cid);
|
|
264
|
+
promises.push(promise);
|
|
265
|
+
}
|
|
266
|
+
// 使用 Promise.allSettled 进行并发控制
|
|
267
|
+
const batchSize = maxConcurrency;
|
|
268
|
+
const results = [];
|
|
269
|
+
for (let i = 0; i < promises.length; i += batchSize) {
|
|
270
|
+
const batch = promises.slice(i, i + batchSize);
|
|
271
|
+
const batchResults = await Promise.allSettled(batch);
|
|
272
|
+
for (const result of batchResults) {
|
|
273
|
+
if (result.status === 'fulfilled') {
|
|
274
|
+
results.push(result.value);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
logger.error(`证明生成失败: ${result.reason}`);
|
|
278
|
+
results.push({
|
|
279
|
+
success: false,
|
|
280
|
+
agentId: '',
|
|
281
|
+
verificationDetails: [`并发生成失败: ${result.reason}`],
|
|
282
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
283
|
+
processingTimeMs: 0,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return results;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* 压力测试模式:同时进行生成和验证
|
|
292
|
+
*/
|
|
293
|
+
async stressTest(keypair, cid, iterations, maxConcurrency = 10) {
|
|
294
|
+
logger.info(`💥 开始压力测试: ${iterations} 次迭代 (并发: ${maxConcurrency})`);
|
|
295
|
+
const startTime = Date.now();
|
|
296
|
+
// 第一批:并发生成证明
|
|
297
|
+
const proofResults = await this.concurrentGenerateProofs(keypair, cid, iterations, maxConcurrency);
|
|
298
|
+
// 过滤成功的证明
|
|
299
|
+
const validProofs = proofResults.filter(r => r.success && r.proof);
|
|
300
|
+
// 第二批:并发验证
|
|
301
|
+
const verifyPromises = validProofs.map(proof => this.verifyIdentity(cid, proof.proof));
|
|
302
|
+
const verifyResults = [];
|
|
303
|
+
for (let i = 0; i < verifyPromises.length; i += maxConcurrency) {
|
|
304
|
+
const batch = verifyPromises.slice(i, i + maxConcurrency);
|
|
305
|
+
const batchResults = await Promise.allSettled(batch);
|
|
306
|
+
for (const result of batchResults) {
|
|
307
|
+
if (result.status === 'fulfilled') {
|
|
308
|
+
verifyResults.push(result.value);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
verifyResults.push({
|
|
312
|
+
success: false,
|
|
313
|
+
agentId: '',
|
|
314
|
+
verificationDetails: [`验证失败: ${result.reason}`],
|
|
315
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
316
|
+
processingTimeMs: 0,
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
const totalTime = Date.now() - startTime;
|
|
322
|
+
const successCount = verifyResults.filter(r => r.success).length;
|
|
323
|
+
const successRate = (successCount / verifyResults.length) * 100;
|
|
324
|
+
logger.info(`✅ 压力测试完成`);
|
|
325
|
+
logger.info(` 生成成功: ${proofResults.filter(r => r.success).length}/${iterations}`);
|
|
326
|
+
logger.info(` 验证成功: ${successCount}/${verifyResults.length}`);
|
|
327
|
+
logger.info(` 成功率: ${successRate.toFixed(2)}%`);
|
|
328
|
+
logger.info(` 总时间: ${totalTime}ms`);
|
|
329
|
+
return {
|
|
330
|
+
proofResults,
|
|
331
|
+
verifyResults,
|
|
332
|
+
totalTimeMs: totalTime,
|
|
333
|
+
successRate,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* 关闭管理器
|
|
338
|
+
*/
|
|
339
|
+
async stop() {
|
|
340
|
+
await this.ipfsClient.stop();
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=agent-auth.js.map
|