@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.
Files changed (127) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +86 -86
  3. package/dist/agent-auth.d.ts +96 -0
  4. package/dist/agent-auth.d.ts.map +1 -0
  5. package/dist/agent-auth.js +343 -0
  6. package/dist/agent-auth.js.map +1 -0
  7. package/dist/agent-verification.d.ts +158 -0
  8. package/dist/agent-verification.d.ts.map +1 -0
  9. package/dist/agent-verification.js +237 -0
  10. package/dist/agent-verification.js.map +1 -0
  11. package/dist/config-manager.d.ts +156 -0
  12. package/dist/config-manager.d.ts.map +1 -0
  13. package/dist/config-manager.js +241 -0
  14. package/dist/config-manager.js.map +1 -0
  15. package/dist/did-builder.d.ts +62 -0
  16. package/dist/did-builder.d.ts.map +1 -0
  17. package/dist/did-builder.js +315 -0
  18. package/dist/did-builder.js.map +1 -0
  19. package/dist/did-cache.d.ts +133 -0
  20. package/dist/did-cache.d.ts.map +1 -0
  21. package/dist/did-cache.js +273 -0
  22. package/dist/did-cache.js.map +1 -0
  23. package/dist/identity-manager.d.ts +87 -0
  24. package/dist/identity-manager.d.ts.map +1 -0
  25. package/dist/identity-manager.js +196 -0
  26. package/dist/identity-manager.js.map +1 -0
  27. package/dist/index.d.ts +43 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +52 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/ipfs-bidirectional-verification.d.ts +201 -0
  32. package/dist/ipfs-bidirectional-verification.d.ts.map +1 -0
  33. package/dist/ipfs-bidirectional-verification.js +298 -0
  34. package/dist/ipfs-bidirectional-verification.js.map +1 -0
  35. package/dist/ipfs-client.d.ts +151 -0
  36. package/dist/ipfs-client.d.ts.map +1 -0
  37. package/dist/ipfs-client.js +623 -0
  38. package/dist/ipfs-client.js.map +1 -0
  39. package/dist/ipfs-node-manager.d.ts +136 -0
  40. package/dist/ipfs-node-manager.d.ts.map +1 -0
  41. package/dist/ipfs-node-manager.js +232 -0
  42. package/dist/ipfs-node-manager.js.map +1 -0
  43. package/dist/ipns-manager.d.ts +182 -0
  44. package/dist/ipns-manager.d.ts.map +1 -0
  45. package/dist/ipns-manager.js +268 -0
  46. package/dist/ipns-manager.js.map +1 -0
  47. package/dist/key-manager.d.ts +48 -0
  48. package/dist/key-manager.d.ts.map +1 -0
  49. package/dist/key-manager.js +231 -0
  50. package/dist/key-manager.js.map +1 -0
  51. package/dist/kubo-installer.d.ts +115 -0
  52. package/dist/kubo-installer.d.ts.map +1 -0
  53. package/dist/kubo-installer.js +205 -0
  54. package/dist/kubo-installer.js.map +1 -0
  55. package/dist/libp2p/encrypted-peer-id.d.ts +24 -0
  56. package/dist/libp2p/encrypted-peer-id.d.ts.map +1 -0
  57. package/dist/libp2p/encrypted-peer-id.js +134 -0
  58. package/dist/libp2p/encrypted-peer-id.js.map +1 -0
  59. package/dist/nonce-manager.d.ts +176 -0
  60. package/dist/nonce-manager.d.ts.map +1 -0
  61. package/dist/nonce-manager.js +382 -0
  62. package/dist/nonce-manager.js.map +1 -0
  63. package/dist/p2p/hyperswarm-communicator.d.ts +252 -0
  64. package/dist/p2p/hyperswarm-communicator.d.ts.map +1 -0
  65. package/dist/p2p/hyperswarm-communicator.js +469 -0
  66. package/dist/p2p/hyperswarm-communicator.js.map +1 -0
  67. package/dist/p2p/iroh-communicator.d.ts +216 -0
  68. package/dist/p2p/iroh-communicator.d.ts.map +1 -0
  69. package/dist/p2p/iroh-communicator.js +408 -0
  70. package/dist/p2p/iroh-communicator.js.map +1 -0
  71. package/dist/pubsub-authenticator.d.ts +246 -0
  72. package/dist/pubsub-authenticator.d.ts.map +1 -0
  73. package/dist/pubsub-authenticator.js +384 -0
  74. package/dist/pubsub-authenticator.js.map +1 -0
  75. package/dist/real-name-auth.d.ts +238 -0
  76. package/dist/real-name-auth.d.ts.map +1 -0
  77. package/dist/real-name-auth.js +259 -0
  78. package/dist/real-name-auth.js.map +1 -0
  79. package/dist/types/did.d.ts +76 -0
  80. package/dist/types/did.d.ts.map +1 -0
  81. package/dist/types/did.js +5 -0
  82. package/dist/types/did.js.map +1 -0
  83. package/dist/types/errors.d.ts +42 -0
  84. package/dist/types/errors.d.ts.map +1 -0
  85. package/dist/types/errors.js +69 -0
  86. package/dist/types/errors.js.map +1 -0
  87. package/dist/types/index.d.ts +9 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +9 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/types/key.d.ts +43 -0
  92. package/dist/types/key.d.ts.map +1 -0
  93. package/dist/types/key.js +5 -0
  94. package/dist/types/key.js.map +1 -0
  95. package/dist/types/zkp.d.ts +80 -0
  96. package/dist/types/zkp.d.ts.map +1 -0
  97. package/dist/types/zkp.js +16 -0
  98. package/dist/types/zkp.js.map +1 -0
  99. package/dist/utils/crypto.d.ts +24 -0
  100. package/dist/utils/crypto.d.ts.map +1 -0
  101. package/dist/utils/crypto.js +65 -0
  102. package/dist/utils/crypto.js.map +1 -0
  103. package/dist/utils/encoding.d.ts +36 -0
  104. package/dist/utils/encoding.d.ts.map +1 -0
  105. package/dist/utils/encoding.js +80 -0
  106. package/dist/utils/encoding.js.map +1 -0
  107. package/dist/utils/logger.d.ts +24 -0
  108. package/dist/utils/logger.d.ts.map +1 -0
  109. package/dist/utils/logger.js +37 -0
  110. package/dist/utils/logger.js.map +1 -0
  111. package/dist/zkp/key-generator.d.ts +56 -0
  112. package/dist/zkp/key-generator.d.ts.map +1 -0
  113. package/dist/zkp/key-generator.js +165 -0
  114. package/dist/zkp/key-generator.js.map +1 -0
  115. package/dist/zkp/simplified-backend.d.ts +23 -0
  116. package/dist/zkp/simplified-backend.d.ts.map +1 -0
  117. package/dist/zkp/simplified-backend.js +77 -0
  118. package/dist/zkp/simplified-backend.js.map +1 -0
  119. package/dist/zkp/snarkjs-backend.d.ts +150 -0
  120. package/dist/zkp/snarkjs-backend.d.ts.map +1 -0
  121. package/dist/zkp/snarkjs-backend.js +218 -0
  122. package/dist/zkp/snarkjs-backend.js.map +1 -0
  123. package/dist/zkp/universal-manager.d.ts +44 -0
  124. package/dist/zkp/universal-manager.d.ts.map +1 -0
  125. package/dist/zkp/universal-manager.js +181 -0
  126. package/dist/zkp/universal-manager.js.map +1 -0
  127. package/package.json +2 -2
@@ -0,0 +1,246 @@
1
+ /**
2
+ * DIAP TypeScript SDK - IPFS PubSub 认证通讯模块
3
+ * 基于 Iroh 实现认证的发布/订阅通信
4
+ */
5
+ /**
6
+ * PubSub 消息类型
7
+ */
8
+ export declare enum PubSubMessageType {
9
+ /** 身份验证请求 */
10
+ AuthRequest = "auth_request",
11
+ /** 身份验证响应 */
12
+ AuthResponse = "auth_response",
13
+ /** 资源访问请求 */
14
+ ResourceRequest = "resource_request",
15
+ /** 资源访问响应 */
16
+ ResourceResponse = "resource_response",
17
+ /** 心跳消息 */
18
+ Heartbeat = "heartbeat",
19
+ /** 自定义消息 */
20
+ Custom = "custom"
21
+ }
22
+ /**
23
+ * 主题授权策略
24
+ */
25
+ export declare enum TopicPolicy {
26
+ /** 允许所有经过认证的用户 */
27
+ AllowAuthenticated = "allow_authenticated",
28
+ /** 仅允许特定 DID 列表 */
29
+ AllowList = "allow_list",
30
+ /** 拒绝特定 DID 列表 */
31
+ DenyList = "deny_list",
32
+ /** 自定义验证函数 */
33
+ Custom = "custom"
34
+ }
35
+ /**
36
+ * 认证的 PubSub 消息
37
+ */
38
+ export interface AuthenticatedMessage {
39
+ /** 消息 ID */
40
+ messageId: string;
41
+ /** 消息类型 */
42
+ messageType: PubSubMessageType;
43
+ /** 发送者 DID */
44
+ fromDid: string;
45
+ /** 接收者 DID(可选,为空表示广播) */
46
+ toDid?: string;
47
+ /** 发送者 PeerID */
48
+ fromPeerId: string;
49
+ /** DID 文档的 CID */
50
+ didCid: string;
51
+ /** 主题 */
52
+ topic: string;
53
+ /** 消息内容(原始数据) */
54
+ content: Uint8Array;
55
+ /** Nonce(防重放) */
56
+ nonce: string;
57
+ /** ZKP 证明 */
58
+ zkpProof: Uint8Array;
59
+ /** 内容签名 */
60
+ signature: Uint8Array;
61
+ /** 时间戳 */
62
+ timestamp: number;
63
+ }
64
+ /**
65
+ * PubSub 认证请求负载
66
+ */
67
+ export interface PubsubAuthRequestPayload {
68
+ /** 目标身份的 CID */
69
+ targetCid: string;
70
+ /** 建议的响应主题(可选) */
71
+ responseTopic?: string;
72
+ /** 附加说明 */
73
+ note?: string;
74
+ }
75
+ /**
76
+ * PubSub 认证响应负载
77
+ */
78
+ export interface PubsubAuthResponsePayload {
79
+ /** 请求方的 nonce(用于匹配请求) */
80
+ requestNonce: string;
81
+ /** 目标身份的 CID */
82
+ targetCid: string;
83
+ /** 是否成功生成证明 */
84
+ success: boolean;
85
+ /** 附加说明 */
86
+ note?: string;
87
+ }
88
+ /**
89
+ * PubSub 消息验证结果
90
+ */
91
+ export interface MessageVerification {
92
+ /** 是否验证通过 */
93
+ verified: boolean;
94
+ /** 发送者 DID */
95
+ fromDid: string;
96
+ /** 验证详情 */
97
+ details: string[];
98
+ /** 验证时间戳 */
99
+ verifiedAt: number;
100
+ }
101
+ /**
102
+ * 主题配置
103
+ */
104
+ export interface TopicConfig {
105
+ /** 主题名称 */
106
+ name: string;
107
+ /** 授权策略 */
108
+ policy: TopicPolicy;
109
+ /** 允许/拒绝列表(根据策略) */
110
+ list?: string[];
111
+ /** 是否需要 ZKP 验证 */
112
+ requireZkp: boolean;
113
+ /** 是否需要签名验证 */
114
+ requireSignature: boolean;
115
+ }
116
+ /**
117
+ * PubSub 认证器
118
+ */
119
+ export declare class PubsubAuthenticator {
120
+ private keypair;
121
+ private peerId;
122
+ private localCid;
123
+ private topicConfigs;
124
+ private subscribedTopics;
125
+ private messageStats;
126
+ private usedNonces;
127
+ /**
128
+ * 构造函数
129
+ */
130
+ constructor();
131
+ /**
132
+ * 判断给定标识是否为 IPNS 格式
133
+ */
134
+ isIpnsFormat(value: string): boolean;
135
+ /**
136
+ * 检查字符串是否为 Base58 编码
137
+ */
138
+ private isBase58;
139
+ /**
140
+ * 从 DID 文档中提取 PubSub 认证主题
141
+ */
142
+ extractAuthTopicFromDid(didDocument: {
143
+ service?: Array<{
144
+ serviceType: string;
145
+ serviceEndpoint: {
146
+ topic?: string;
147
+ } | string;
148
+ }>;
149
+ }): string | null;
150
+ /**
151
+ * 设置本地身份
152
+ */
153
+ setLocalIdentity(keypair: {
154
+ did: string;
155
+ publicKey: Uint8Array;
156
+ privateKey: Uint8Array;
157
+ }, peerId: string, cid: string): void;
158
+ /**
159
+ * 配置主题策略
160
+ */
161
+ configureTopic(config: TopicConfig): void;
162
+ /**
163
+ * 订阅主题
164
+ */
165
+ subscribeTopic(topic: string): void;
166
+ /**
167
+ * 取消订阅主题
168
+ */
169
+ unsubscribeTopic(topic: string): void;
170
+ /**
171
+ * 获取订阅的主题列表
172
+ */
173
+ getSubscribedTopics(): string[];
174
+ /**
175
+ * 创建认证消息
176
+ */
177
+ createAuthenticatedMessage(topic: string, messageType: PubSubMessageType, content: Uint8Array, toDid?: string): Promise<AuthenticatedMessage>;
178
+ /**
179
+ * 构建身份认证请求消息
180
+ */
181
+ sendAuthRequest(authTopic: string, targetCid: string, responseTopic?: string, toDid?: string, note?: string): Promise<AuthenticatedMessage>;
182
+ /**
183
+ * 处理身份认证请求消息
184
+ */
185
+ handleAuthRequest(request: AuthenticatedMessage, overrideResponseTopic?: string, note?: string): Promise<{
186
+ message: AuthenticatedMessage;
187
+ payload: PubsubAuthResponsePayload;
188
+ }>;
189
+ /**
190
+ * 解析认证请求消息的负载
191
+ */
192
+ parseAuthRequest(message: AuthenticatedMessage): PubsubAuthRequestPayload;
193
+ /**
194
+ * 解析认证响应消息的负载
195
+ */
196
+ parseAuthResponse(message: AuthenticatedMessage): PubsubAuthResponsePayload;
197
+ /**
198
+ * 验证认证消息
199
+ */
200
+ verifyMessage(message: AuthenticatedMessage): Promise<MessageVerification>;
201
+ /**
202
+ * 创建心跳消息
203
+ */
204
+ createHeartbeat(topic: string): Promise<AuthenticatedMessage>;
205
+ /**
206
+ * 创建简化的认证消息
207
+ */
208
+ createSimpleMessage(topic: string, content: string): Promise<AuthenticatedMessage>;
209
+ /**
210
+ * 序列化消息为字节
211
+ */
212
+ serializeMessage(message: AuthenticatedMessage): Uint8Array;
213
+ /**
214
+ * 反序列化消息
215
+ */
216
+ deserializeMessage(data: Uint8Array): AuthenticatedMessage;
217
+ /**
218
+ * 更新消息统计
219
+ */
220
+ updateMessageStats(topic: string): void;
221
+ /**
222
+ * 获取消息统计
223
+ */
224
+ getMessageStats(): Map<string, number>;
225
+ /**
226
+ * 生成 nonce
227
+ */
228
+ private generateNonce;
229
+ /**
230
+ * 生成 UUID
231
+ */
232
+ private generateUUID;
233
+ /**
234
+ * 签名消息
235
+ */
236
+ private signMessage;
237
+ /**
238
+ * 验证消息签名
239
+ */
240
+ private verifyMessageSignature;
241
+ }
242
+ /**
243
+ * 创建 PubSub 认证器
244
+ */
245
+ export declare function createPubsubAuthenticator(): PubsubAuthenticator;
246
+ //# sourceMappingURL=pubsub-authenticator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub-authenticator.d.ts","sourceRoot":"","sources":["../src/pubsub-authenticator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,aAAa;IACb,WAAW,iBAAiB;IAC5B,aAAa;IACb,YAAY,kBAAkB;IAC9B,aAAa;IACb,eAAe,qBAAqB;IACpC,aAAa;IACb,gBAAgB,sBAAsB;IACtC,WAAW;IACX,SAAS,cAAc;IACvB,YAAY;IACZ,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,kBAAkB;IAClB,kBAAkB,wBAAwB;IAC1C,mBAAmB;IACnB,SAAS,eAAe;IACxB,kBAAkB;IAClB,QAAQ,cAAc;IACtB,cAAc;IACd,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,WAAW,EAAE,iBAAiB,CAAC;IAC/B,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS;IACT,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,OAAO,EAAE,UAAU,CAAC;IACpB,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,QAAQ,EAAE,UAAU,CAAC;IACrB,WAAW;IACX,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU;IACV,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,kBAAkB;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe;IACf,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAA+E;IAC9F,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,UAAU,CAA0B;IAE5C;;OAEG;;IAKH;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAe3C;;OAEG;IACH,OAAO,CAAC,QAAQ;IAUhB;;OAEG;IACI,uBAAuB,CAAC,WAAW,EAAE;QAC1C,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,WAAW,EAAE,MAAM,CAAC;YACpB,eAAe,EAAE;gBAAE,KAAK,CAAC,EAAE,MAAM,CAAA;aAAE,GAAG,MAAM,CAAC;SAC9C,CAAC,CAAC;KACJ,GAAG,MAAM,GAAG,IAAI;IAgBjB;;OAEG;IACI,gBAAgB,CACrB,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,EACvE,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACV,IAAI;IAUP;;OAEG;IACI,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAKhD;;OAEG;IACI,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO1C;;OAEG;IACI,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ5C;;OAEG;IACI,mBAAmB,IAAI,MAAM,EAAE;IAItC;;OAEG;IACU,0BAA0B,CACrC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE,UAAU,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC;IA+BhC;;OAEG;IACU,eAAe,CAC1B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,MAAM,EACtB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,oBAAoB,CAAC;IAgBhC;;OAEG;IACU,iBAAiB,CAC5B,OAAO,EAAE,oBAAoB,EAC7B,qBAAqB,CAAC,EAAE,MAAM,EAC9B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,OAAO,EAAE,oBAAoB,CAAC;QAAC,OAAO,EAAE,yBAAyB,CAAA;KAAE,CAAC;IA+BjF;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,wBAAwB;IAOhF;;OAEG;IACI,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,yBAAyB;IAOlF;;OAEG;IACU,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0DvF;;OAEG;IACU,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAK1E;;OAEG;IACU,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAQ/F;;OAEG;IACI,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,UAAU;IAIlE;;OAEG;IACI,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,oBAAoB;IAIjE;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK9C;;OAEG;IACI,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAM7C;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;YACW,WAAW;IA2BzB;;OAEG;YACW,sBAAsB;CAmCrC;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,mBAAmB,CAE/D"}
@@ -0,0 +1,384 @@
1
+ /**
2
+ * DIAP TypeScript SDK - IPFS PubSub 认证通讯模块
3
+ * 基于 Iroh 实现认证的发布/订阅通信
4
+ */
5
+ import { logger } from './utils/logger.js';
6
+ /**
7
+ * PubSub 消息类型
8
+ */
9
+ export var PubSubMessageType;
10
+ (function (PubSubMessageType) {
11
+ /** 身份验证请求 */
12
+ PubSubMessageType["AuthRequest"] = "auth_request";
13
+ /** 身份验证响应 */
14
+ PubSubMessageType["AuthResponse"] = "auth_response";
15
+ /** 资源访问请求 */
16
+ PubSubMessageType["ResourceRequest"] = "resource_request";
17
+ /** 资源访问响应 */
18
+ PubSubMessageType["ResourceResponse"] = "resource_response";
19
+ /** 心跳消息 */
20
+ PubSubMessageType["Heartbeat"] = "heartbeat";
21
+ /** 自定义消息 */
22
+ PubSubMessageType["Custom"] = "custom";
23
+ })(PubSubMessageType || (PubSubMessageType = {}));
24
+ /**
25
+ * 主题授权策略
26
+ */
27
+ export var TopicPolicy;
28
+ (function (TopicPolicy) {
29
+ /** 允许所有经过认证的用户 */
30
+ TopicPolicy["AllowAuthenticated"] = "allow_authenticated";
31
+ /** 仅允许特定 DID 列表 */
32
+ TopicPolicy["AllowList"] = "allow_list";
33
+ /** 拒绝特定 DID 列表 */
34
+ TopicPolicy["DenyList"] = "deny_list";
35
+ /** 自定义验证函数 */
36
+ TopicPolicy["Custom"] = "custom";
37
+ })(TopicPolicy || (TopicPolicy = {}));
38
+ /**
39
+ * PubSub 认证器
40
+ */
41
+ export class PubsubAuthenticator {
42
+ keypair = null;
43
+ peerId = null;
44
+ localCid = null;
45
+ topicConfigs = new Map();
46
+ subscribedTopics = [];
47
+ messageStats = new Map();
48
+ usedNonces = new Set();
49
+ /**
50
+ * 构造函数
51
+ */
52
+ constructor() {
53
+ logger.info('🔐 PubSub 认证器已创建');
54
+ }
55
+ /**
56
+ * 判断给定标识是否为 IPNS 格式
57
+ */
58
+ isIpnsFormat(value) {
59
+ const v = value.trim();
60
+ if (v.startsWith('/ipns/')) {
61
+ return true;
62
+ }
63
+ if (v.length >= 46 && v.length <= 100) {
64
+ try {
65
+ return this.isBase58(v);
66
+ }
67
+ catch {
68
+ return false;
69
+ }
70
+ }
71
+ return false;
72
+ }
73
+ /**
74
+ * 检查字符串是否为 Base58 编码
75
+ */
76
+ isBase58(value) {
77
+ const base58Chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
78
+ for (const char of value) {
79
+ if (!base58Chars.includes(char)) {
80
+ return false;
81
+ }
82
+ }
83
+ return true;
84
+ }
85
+ /**
86
+ * 从 DID 文档中提取 PubSub 认证主题
87
+ */
88
+ extractAuthTopicFromDid(didDocument) {
89
+ if (!didDocument.service) {
90
+ return null;
91
+ }
92
+ for (const svc of didDocument.service) {
93
+ if (svc.serviceType.toLowerCase() === 'pubsubauth') {
94
+ const endpoint = svc.serviceEndpoint;
95
+ if (typeof endpoint === 'object' && endpoint.topic) {
96
+ return endpoint.topic;
97
+ }
98
+ }
99
+ }
100
+ return null;
101
+ }
102
+ /**
103
+ * 设置本地身份
104
+ */
105
+ setLocalIdentity(keypair, peerId, cid) {
106
+ this.keypair = keypair;
107
+ this.peerId = peerId;
108
+ this.localCid = cid;
109
+ logger.info(`✅ 本地身份已设置`);
110
+ logger.info(` DID: ${keypair.did}`);
111
+ logger.info(` CID: ${cid}`);
112
+ }
113
+ /**
114
+ * 配置主题策略
115
+ */
116
+ configureTopic(config) {
117
+ this.topicConfigs.set(config.name, config);
118
+ logger.info(`✅ 主题已配置: ${config.name}`);
119
+ }
120
+ /**
121
+ * 订阅主题
122
+ */
123
+ subscribeTopic(topic) {
124
+ if (!this.subscribedTopics.includes(topic)) {
125
+ this.subscribedTopics.push(topic);
126
+ logger.info(`✅ 已订阅主题: ${topic}`);
127
+ }
128
+ }
129
+ /**
130
+ * 取消订阅主题
131
+ */
132
+ unsubscribeTopic(topic) {
133
+ const index = this.subscribedTopics.indexOf(topic);
134
+ if (index !== -1) {
135
+ this.subscribedTopics.splice(index, 1);
136
+ logger.info(`✅ 已取消订阅主题: ${topic}`);
137
+ }
138
+ }
139
+ /**
140
+ * 获取订阅的主题列表
141
+ */
142
+ getSubscribedTopics() {
143
+ return [...this.subscribedTopics];
144
+ }
145
+ /**
146
+ * 创建认证消息
147
+ */
148
+ async createAuthenticatedMessage(topic, messageType, content, toDid) {
149
+ if (!this.keypair || !this.peerId || !this.localCid) {
150
+ throw new Error('本地身份未设置');
151
+ }
152
+ // 生成 nonce
153
+ const nonce = this.generateNonce();
154
+ // 签名消息内容
155
+ const signature = await this.signMessage(content, nonce, topic);
156
+ const message = {
157
+ messageId: this.generateUUID(),
158
+ messageType,
159
+ fromDid: this.keypair.did,
160
+ toDid,
161
+ fromPeerId: this.peerId,
162
+ didCid: this.localCid,
163
+ topic,
164
+ content,
165
+ nonce,
166
+ zkpProof: new Uint8Array(), // 简化版本
167
+ signature,
168
+ timestamp: Date.now(),
169
+ };
170
+ logger.debug(`✅ 认证消息已创建: ${message.messageId}`);
171
+ return message;
172
+ }
173
+ /**
174
+ * 构建身份认证请求消息
175
+ */
176
+ async sendAuthRequest(authTopic, targetCid, responseTopic, toDid, note) {
177
+ const payload = {
178
+ targetCid,
179
+ responseTopic,
180
+ note,
181
+ };
182
+ const content = new TextEncoder().encode(JSON.stringify(payload));
183
+ return this.createAuthenticatedMessage(authTopic, PubSubMessageType.AuthRequest, content, toDid);
184
+ }
185
+ /**
186
+ * 处理身份认证请求消息
187
+ */
188
+ async handleAuthRequest(request, overrideResponseTopic, note) {
189
+ if (request.messageType !== PubSubMessageType.AuthRequest) {
190
+ throw new Error('消息类型不是 AuthRequest');
191
+ }
192
+ const requestPayload = this.parseAuthRequest(request);
193
+ if (!this.localCid) {
194
+ throw new Error('本地身份 CID 未设置');
195
+ }
196
+ const responseTopic = overrideResponseTopic || request.topic;
197
+ const responsePayload = {
198
+ requestNonce: request.nonce,
199
+ targetCid: this.localCid,
200
+ success: true,
201
+ note,
202
+ };
203
+ const content = new TextEncoder().encode(JSON.stringify(responsePayload));
204
+ const message = await this.createAuthenticatedMessage(responseTopic, PubSubMessageType.AuthResponse, content, request.fromDid);
205
+ return { message, payload: responsePayload };
206
+ }
207
+ /**
208
+ * 解析认证请求消息的负载
209
+ */
210
+ parseAuthRequest(message) {
211
+ if (message.messageType !== PubSubMessageType.AuthRequest) {
212
+ throw new Error('消息类型不是 AuthRequest');
213
+ }
214
+ return JSON.parse(new TextDecoder().decode(message.content));
215
+ }
216
+ /**
217
+ * 解析认证响应消息的负载
218
+ */
219
+ parseAuthResponse(message) {
220
+ if (message.messageType !== PubSubMessageType.AuthResponse) {
221
+ throw new Error('消息类型不是 AuthResponse');
222
+ }
223
+ return JSON.parse(new TextDecoder().decode(message.content));
224
+ }
225
+ /**
226
+ * 验证认证消息
227
+ */
228
+ async verifyMessage(message) {
229
+ const details = [];
230
+ let verified = true;
231
+ logger.info(`🔍 验证消息: ${message.messageId}`);
232
+ logger.info(` 发送者 DID: ${message.fromDid}`);
233
+ // 1. 验证 nonce(防重放)
234
+ if (this.usedNonces.has(message.nonce)) {
235
+ verified = false;
236
+ details.push('✗ Nonce 已被使用(重放攻击)');
237
+ logger.warn('检测到重放攻击!');
238
+ }
239
+ else {
240
+ this.usedNonces.add(message.nonce);
241
+ details.push('✓ Nonce 验证通过');
242
+ }
243
+ // 2. 检查主题授权
244
+ const topicConfig = this.topicConfigs.get(message.topic);
245
+ if (topicConfig) {
246
+ if (topicConfig.policy === TopicPolicy.AllowList && topicConfig.list) {
247
+ if (!topicConfig.list.includes(message.fromDid)) {
248
+ verified = false;
249
+ details.push('✗ DID 不在允许列表中');
250
+ }
251
+ }
252
+ else if (topicConfig.policy === TopicPolicy.DenyList && topicConfig.list) {
253
+ if (topicConfig.list.includes(message.fromDid)) {
254
+ verified = false;
255
+ details.push('✗ DID 在拒绝列表中');
256
+ }
257
+ }
258
+ }
259
+ // 3. 验证签名
260
+ const isValidSignature = await this.verifyMessageSignature(message.content, message.nonce, message.topic, message.signature);
261
+ if (isValidSignature) {
262
+ details.push('✓ 消息签名验证通过');
263
+ }
264
+ else {
265
+ verified = false;
266
+ details.push('✗ 消息签名验证失败');
267
+ }
268
+ logger.info(`验证结果: ${verified ? '✅ 通过' : '❌ 失败'}`);
269
+ return {
270
+ verified,
271
+ fromDid: message.fromDid,
272
+ details,
273
+ verifiedAt: Date.now(),
274
+ };
275
+ }
276
+ /**
277
+ * 创建心跳消息
278
+ */
279
+ async createHeartbeat(topic) {
280
+ const content = new TextEncoder().encode(`HEARTBEAT:${Date.now()}`);
281
+ return this.createAuthenticatedMessage(topic, PubSubMessageType.Heartbeat, content);
282
+ }
283
+ /**
284
+ * 创建简化的认证消息
285
+ */
286
+ async createSimpleMessage(topic, content) {
287
+ return this.createAuthenticatedMessage(topic, PubSubMessageType.Custom, new TextEncoder().encode(content));
288
+ }
289
+ /**
290
+ * 序列化消息为字节
291
+ */
292
+ serializeMessage(message) {
293
+ return new TextEncoder().encode(JSON.stringify(message));
294
+ }
295
+ /**
296
+ * 反序列化消息
297
+ */
298
+ deserializeMessage(data) {
299
+ return JSON.parse(new TextDecoder().decode(data));
300
+ }
301
+ /**
302
+ * 更新消息统计
303
+ */
304
+ updateMessageStats(topic) {
305
+ const count = this.messageStats.get(topic) || 0;
306
+ this.messageStats.set(topic, count + 1);
307
+ }
308
+ /**
309
+ * 获取消息统计
310
+ */
311
+ getMessageStats() {
312
+ return new Map(this.messageStats);
313
+ }
314
+ // 私有辅助方法
315
+ /**
316
+ * 生成 nonce
317
+ */
318
+ generateNonce() {
319
+ const array = crypto.getRandomValues(new Uint8Array(16));
320
+ return Array.from(array)
321
+ .map((b) => b.toString(16).padStart(2, '0'))
322
+ .join('');
323
+ }
324
+ /**
325
+ * 生成 UUID
326
+ */
327
+ generateUUID() {
328
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
329
+ const r = (Math.random() * 16) | 0;
330
+ const v = c === 'x' ? r : (r & 0x3) | 0x8;
331
+ return v.toString(16);
332
+ });
333
+ }
334
+ /**
335
+ * 签名消息
336
+ */
337
+ async signMessage(content, nonce, topic) {
338
+ if (!this.keypair) {
339
+ throw new Error('密钥对未设置');
340
+ }
341
+ const data = new Uint8Array(content.length + nonce.length + topic.length);
342
+ data.set(content);
343
+ data.set(new TextEncoder().encode(nonce), content.length);
344
+ data.set(new TextEncoder().encode(topic), content.length + nonce.length);
345
+ const keyData = this.keypair.privateKey.slice(0, 32);
346
+ const cryptoKey = await crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
347
+ const signature = await crypto.subtle.sign('HMAC', cryptoKey, data);
348
+ return new Uint8Array(signature);
349
+ }
350
+ /**
351
+ * 验证消息签名
352
+ */
353
+ async verifyMessageSignature(content, nonce, topic, signature) {
354
+ if (!this.keypair) {
355
+ return false;
356
+ }
357
+ const data = new Uint8Array(content.length + nonce.length + topic.length);
358
+ data.set(content);
359
+ data.set(new TextEncoder().encode(nonce), content.length);
360
+ data.set(new TextEncoder().encode(topic), content.length + nonce.length);
361
+ const keyData = this.keypair.publicKey.slice(0, 32);
362
+ const cryptoKey = await crypto.subtle.importKey('raw', keyData, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);
363
+ try {
364
+ return await crypto.subtle.verify('HMAC', cryptoKey, signature, data);
365
+ }
366
+ catch {
367
+ return false;
368
+ }
369
+ }
370
+ }
371
+ // ============================================================================
372
+ // 便捷函数
373
+ // ============================================================================
374
+ /**
375
+ * 创建 PubSub 认证器
376
+ */
377
+ export function createPubsubAuthenticator() {
378
+ return new PubsubAuthenticator();
379
+ }
380
+ // ============================================================================
381
+ // 导出
382
+ // ============================================================================
383
+ // 注意: AuthenticatedMessage, PubSubMessageType, TopicPolicy 等已在声明时导出
384
+ //# sourceMappingURL=pubsub-authenticator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub-authenticator.js","sourceRoot":"","sources":["../src/pubsub-authenticator.ts"],"names":[],"mappings":"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"}