@diap/sdk 0.1.1 → 0.1.2
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/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 +314 -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
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DIAP TypeScript SDK - IPFS 节点管理器
|
|
3
|
+
* 自动启动和管理本地 IPFS 节点
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
/**
|
|
7
|
+
* IPFS 节点状态
|
|
8
|
+
*/
|
|
9
|
+
export declare enum IpfsNodeStatus {
|
|
10
|
+
/** 未知 */
|
|
11
|
+
Unknown = "unknown",
|
|
12
|
+
/** 启动中 */
|
|
13
|
+
Starting = "starting",
|
|
14
|
+
/** 运行中 */
|
|
15
|
+
Running = "running",
|
|
16
|
+
/** 已停止 */
|
|
17
|
+
Stopped = "stopped",
|
|
18
|
+
/** 错误 */
|
|
19
|
+
Error = "error"
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* IPFS 节点配置
|
|
23
|
+
*/
|
|
24
|
+
export interface IpfsNodeConfig {
|
|
25
|
+
/** 数据目录 */
|
|
26
|
+
dataDir?: string;
|
|
27
|
+
/** API 端口 */
|
|
28
|
+
apiPort?: number;
|
|
29
|
+
/** 网关端口 */
|
|
30
|
+
gatewayPort?: number;
|
|
31
|
+
/** Swarm 端口 */
|
|
32
|
+
swarmPort?: number;
|
|
33
|
+
/** 自动启动 */
|
|
34
|
+
autoStart?: boolean;
|
|
35
|
+
/** 启动超时(秒) */
|
|
36
|
+
startTimeout?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* IPFS 节点信息
|
|
40
|
+
*/
|
|
41
|
+
export interface IpfsNodeInfo {
|
|
42
|
+
/** 节点 ID */
|
|
43
|
+
id: string;
|
|
44
|
+
/** API 地址 */
|
|
45
|
+
apiUrl: string;
|
|
46
|
+
/** 网关地址 */
|
|
47
|
+
gatewayUrl: string;
|
|
48
|
+
/** 协议版本 */
|
|
49
|
+
protocolVersion: string;
|
|
50
|
+
/** 代理版本 */
|
|
51
|
+
agentVersion: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* IPFS 节点管理器
|
|
55
|
+
*/
|
|
56
|
+
export declare class IpfsNodeManager extends EventEmitter {
|
|
57
|
+
/** 配置 */
|
|
58
|
+
private config;
|
|
59
|
+
/** 节点状态 */
|
|
60
|
+
private status;
|
|
61
|
+
/** 进程对象 */
|
|
62
|
+
private process?;
|
|
63
|
+
/** 节点信息 */
|
|
64
|
+
private nodeInfo?;
|
|
65
|
+
/** 健康检查定时器 */
|
|
66
|
+
private healthCheckTimer?;
|
|
67
|
+
/**
|
|
68
|
+
* 创建 IPFS 节点管理器
|
|
69
|
+
*/
|
|
70
|
+
static create(config?: IpfsNodeConfig): Promise<IpfsNodeManager>;
|
|
71
|
+
/**
|
|
72
|
+
* 构造函数
|
|
73
|
+
*/
|
|
74
|
+
private constructor();
|
|
75
|
+
/**
|
|
76
|
+
* 初始化管理器
|
|
77
|
+
*/
|
|
78
|
+
private initialize;
|
|
79
|
+
/**
|
|
80
|
+
* 启动 IPFS 节点
|
|
81
|
+
*/
|
|
82
|
+
start(): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* 模拟节点启动
|
|
85
|
+
*/
|
|
86
|
+
private simulateNodeStart;
|
|
87
|
+
/**
|
|
88
|
+
* 停止 IPFS 节点
|
|
89
|
+
*/
|
|
90
|
+
stop(): Promise<void>;
|
|
91
|
+
/**
|
|
92
|
+
* 重启 IPFS 节点
|
|
93
|
+
*/
|
|
94
|
+
restart(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* 获取节点状态
|
|
97
|
+
*/
|
|
98
|
+
getStatus(): IpfsNodeStatus;
|
|
99
|
+
/**
|
|
100
|
+
* 检查节点是否健康
|
|
101
|
+
*/
|
|
102
|
+
isHealthy(): Promise<boolean>;
|
|
103
|
+
/**
|
|
104
|
+
* 获取 API 地址
|
|
105
|
+
*/
|
|
106
|
+
getApiUrl(): string;
|
|
107
|
+
/**
|
|
108
|
+
* 获取网关地址
|
|
109
|
+
*/
|
|
110
|
+
getGatewayUrl(): string;
|
|
111
|
+
/**
|
|
112
|
+
* 获取节点信息
|
|
113
|
+
*/
|
|
114
|
+
getNodeInfo(): IpfsNodeInfo | null;
|
|
115
|
+
/**
|
|
116
|
+
* 启动健康检查
|
|
117
|
+
*/
|
|
118
|
+
private startHealthCheck;
|
|
119
|
+
/**
|
|
120
|
+
* 停止健康检查
|
|
121
|
+
*/
|
|
122
|
+
private stopHealthCheck;
|
|
123
|
+
/**
|
|
124
|
+
* 获取配置
|
|
125
|
+
*/
|
|
126
|
+
getConfig(): IpfsNodeConfig;
|
|
127
|
+
/**
|
|
128
|
+
* 销毁管理器
|
|
129
|
+
*/
|
|
130
|
+
destroy(): Promise<void>;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* 创建 IPFS 节点管理器(便捷函数)
|
|
134
|
+
*/
|
|
135
|
+
export declare function createIpfsNodeManager(config?: IpfsNodeConfig): Promise<IpfsNodeManager>;
|
|
136
|
+
//# sourceMappingURL=ipfs-node-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipfs-node-manager.d.ts","sourceRoot":"","sources":["../src/ipfs-node-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC;;GAEG;AACH,oBAAY,cAAc;IACxB,SAAS;IACT,OAAO,YAAY;IACnB,UAAU;IACV,QAAQ,aAAa;IACrB,UAAU;IACV,OAAO,YAAY;IACnB,UAAU;IACV,OAAO,YAAY;IACnB,SAAS;IACT,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW;IACX,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,SAAS;IACT,OAAO,CAAC,MAAM,CAA2B;IACzC,WAAW;IACX,OAAO,CAAC,MAAM,CAAiB;IAC/B,WAAW;IACX,OAAO,CAAC,OAAO,CAAC,CAAM;IACtB,WAAW;IACX,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,cAAc;IACd,OAAO,CAAC,gBAAgB,CAAC,CAAiB;IAE1C;;OAEG;WACiB,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAS7E;;OAEG;IACH,OAAO;IAeP;;OAEG;YACW,UAAU;IAaxB;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BnC;;OAEG;YACW,iBAAiB;IAe/B;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBlC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrC;;OAEG;IACI,SAAS,IAAI,cAAc;IAIlC;;OAEG;IACU,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAa1C;;OAEG;IACI,SAAS,IAAI,MAAM;IAI1B;;OAEG;IACI,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACI,WAAW,IAAI,YAAY,GAAG,IAAI;IAIzC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACI,SAAS,IAAI,cAAc;IAIlC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAKtC;AAMD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAE7F"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DIAP TypeScript SDK - IPFS 节点管理器
|
|
3
|
+
* 自动启动和管理本地 IPFS 节点
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { logger } from './utils/logger.js';
|
|
7
|
+
/**
|
|
8
|
+
* IPFS 节点状态
|
|
9
|
+
*/
|
|
10
|
+
export var IpfsNodeStatus;
|
|
11
|
+
(function (IpfsNodeStatus) {
|
|
12
|
+
/** 未知 */
|
|
13
|
+
IpfsNodeStatus["Unknown"] = "unknown";
|
|
14
|
+
/** 启动中 */
|
|
15
|
+
IpfsNodeStatus["Starting"] = "starting";
|
|
16
|
+
/** 运行中 */
|
|
17
|
+
IpfsNodeStatus["Running"] = "running";
|
|
18
|
+
/** 已停止 */
|
|
19
|
+
IpfsNodeStatus["Stopped"] = "stopped";
|
|
20
|
+
/** 错误 */
|
|
21
|
+
IpfsNodeStatus["Error"] = "error";
|
|
22
|
+
})(IpfsNodeStatus || (IpfsNodeStatus = {}));
|
|
23
|
+
/**
|
|
24
|
+
* IPFS 节点管理器
|
|
25
|
+
*/
|
|
26
|
+
export class IpfsNodeManager extends EventEmitter {
|
|
27
|
+
/** 配置 */
|
|
28
|
+
config;
|
|
29
|
+
/** 节点状态 */
|
|
30
|
+
status;
|
|
31
|
+
/** 进程对象 */
|
|
32
|
+
process;
|
|
33
|
+
/** 节点信息 */
|
|
34
|
+
nodeInfo;
|
|
35
|
+
/** 健康检查定时器 */
|
|
36
|
+
healthCheckTimer;
|
|
37
|
+
/**
|
|
38
|
+
* 创建 IPFS 节点管理器
|
|
39
|
+
*/
|
|
40
|
+
static async create(config) {
|
|
41
|
+
logger.info('🚀 创建 IPFS 节点管理器');
|
|
42
|
+
const manager = new IpfsNodeManager(config);
|
|
43
|
+
await manager.initialize();
|
|
44
|
+
return manager;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 构造函数
|
|
48
|
+
*/
|
|
49
|
+
constructor(config) {
|
|
50
|
+
super();
|
|
51
|
+
this.config = {
|
|
52
|
+
dataDir: config?.dataDir || './ipfs-data',
|
|
53
|
+
apiPort: config?.apiPort || 5001,
|
|
54
|
+
gatewayPort: config?.gatewayPort || 8080,
|
|
55
|
+
swarmPort: config?.swarmPort || 4001,
|
|
56
|
+
autoStart: config?.autoStart ?? true,
|
|
57
|
+
startTimeout: config?.startTimeout || 60,
|
|
58
|
+
};
|
|
59
|
+
this.status = IpfsNodeStatus.Unknown;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 初始化管理器
|
|
63
|
+
*/
|
|
64
|
+
async initialize() {
|
|
65
|
+
logger.info('💾 IPFS 节点管理器已初始化');
|
|
66
|
+
logger.info(` 数据目录: ${this.config.dataDir}`);
|
|
67
|
+
logger.info(` API 端口: ${this.config.apiPort}`);
|
|
68
|
+
logger.info(` 网关端口: ${this.config.gatewayPort}`);
|
|
69
|
+
logger.info(` Swarm 端口: ${this.config.swarmPort}`);
|
|
70
|
+
// 如果配置了自动启动,则启动节点
|
|
71
|
+
if (this.config.autoStart) {
|
|
72
|
+
await this.start();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 启动 IPFS 节点
|
|
77
|
+
*/
|
|
78
|
+
async start() {
|
|
79
|
+
if (this.status === IpfsNodeStatus.Running) {
|
|
80
|
+
logger.info('IPFS 节点已在运行中');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
logger.info('🔄 启动 IPFS 节点...');
|
|
84
|
+
this.status = IpfsNodeStatus.Starting;
|
|
85
|
+
this.emit('statusChange', { status: this.status });
|
|
86
|
+
try {
|
|
87
|
+
// 模拟节点启动(实际实现需要调用 kubo 或使用 Helia)
|
|
88
|
+
await this.simulateNodeStart();
|
|
89
|
+
this.status = IpfsNodeStatus.Running;
|
|
90
|
+
this.emit('statusChange', { status: this.status });
|
|
91
|
+
this.emit('started', {});
|
|
92
|
+
logger.info('✅ IPFS 节点启动成功');
|
|
93
|
+
// 启动健康检查
|
|
94
|
+
this.startHealthCheck();
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.status = IpfsNodeStatus.Error;
|
|
98
|
+
this.emit('statusChange', { status: this.status, error });
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 模拟节点启动
|
|
104
|
+
*/
|
|
105
|
+
async simulateNodeStart() {
|
|
106
|
+
return new Promise((resolve) => {
|
|
107
|
+
setTimeout(() => {
|
|
108
|
+
this.nodeInfo = {
|
|
109
|
+
id: 'QmSimulatedNodeId123456789',
|
|
110
|
+
apiUrl: `http://localhost:${this.config.apiPort}`,
|
|
111
|
+
gatewayUrl: `http://localhost:${this.config.gatewayPort}`,
|
|
112
|
+
protocolVersion: 'ipfs/0.4.0',
|
|
113
|
+
agentVersion: 'kubo/0.26.0',
|
|
114
|
+
};
|
|
115
|
+
resolve();
|
|
116
|
+
}, 1000);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 停止 IPFS 节点
|
|
121
|
+
*/
|
|
122
|
+
async stop() {
|
|
123
|
+
if (this.status === IpfsNodeStatus.Stopped) {
|
|
124
|
+
logger.info('IPFS 节点已停止');
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
logger.info('🔄 停止 IPFS 节点...');
|
|
128
|
+
this.status = IpfsNodeStatus.Stopped;
|
|
129
|
+
this.emit('statusChange', { status: this.status });
|
|
130
|
+
// 停止健康检查
|
|
131
|
+
this.stopHealthCheck();
|
|
132
|
+
this.emit('stopped', {});
|
|
133
|
+
logger.info('✅ IPFS 节点已停止');
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* 重启 IPFS 节点
|
|
137
|
+
*/
|
|
138
|
+
async restart() {
|
|
139
|
+
logger.info('🔄 重启 IPFS 节点...');
|
|
140
|
+
await this.stop();
|
|
141
|
+
await this.start();
|
|
142
|
+
logger.info('✅ IPFS 节点重启成功');
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 获取节点状态
|
|
146
|
+
*/
|
|
147
|
+
getStatus() {
|
|
148
|
+
return this.status;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 检查节点是否健康
|
|
152
|
+
*/
|
|
153
|
+
async isHealthy() {
|
|
154
|
+
if (this.status !== IpfsNodeStatus.Running) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
// 模拟健康检查
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* 获取 API 地址
|
|
167
|
+
*/
|
|
168
|
+
getApiUrl() {
|
|
169
|
+
return `http://localhost:${this.config.apiPort}`;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 获取网关地址
|
|
173
|
+
*/
|
|
174
|
+
getGatewayUrl() {
|
|
175
|
+
return `http://localhost:${this.config.gatewayPort}`;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* 获取节点信息
|
|
179
|
+
*/
|
|
180
|
+
getNodeInfo() {
|
|
181
|
+
return this.nodeInfo || null;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 启动健康检查
|
|
185
|
+
*/
|
|
186
|
+
startHealthCheck() {
|
|
187
|
+
const intervalMs = 30000; // 每 30 秒检查一次
|
|
188
|
+
this.healthCheckTimer = setInterval(async () => {
|
|
189
|
+
const healthy = await this.isHealthy();
|
|
190
|
+
if (!healthy && this.status === IpfsNodeStatus.Running) {
|
|
191
|
+
logger.warn('⚠️ IPFS 节点健康检查失败');
|
|
192
|
+
this.emit('unhealthy', {});
|
|
193
|
+
}
|
|
194
|
+
}, intervalMs);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* 停止健康检查
|
|
198
|
+
*/
|
|
199
|
+
stopHealthCheck() {
|
|
200
|
+
if (this.healthCheckTimer) {
|
|
201
|
+
clearInterval(this.healthCheckTimer);
|
|
202
|
+
this.healthCheckTimer = undefined;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* 获取配置
|
|
207
|
+
*/
|
|
208
|
+
getConfig() {
|
|
209
|
+
return { ...this.config };
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* 销毁管理器
|
|
213
|
+
*/
|
|
214
|
+
async destroy() {
|
|
215
|
+
await this.stop();
|
|
216
|
+
this.removeAllListeners();
|
|
217
|
+
logger.info('🧹 IPFS 节点管理器已销毁');
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// ============================================================================
|
|
221
|
+
// 便捷函数
|
|
222
|
+
// ============================================================================
|
|
223
|
+
/**
|
|
224
|
+
* 创建 IPFS 节点管理器(便捷函数)
|
|
225
|
+
*/
|
|
226
|
+
export async function createIpfsNodeManager(config) {
|
|
227
|
+
return IpfsNodeManager.create(config);
|
|
228
|
+
}
|
|
229
|
+
// ============================================================================
|
|
230
|
+
// 导出
|
|
231
|
+
// ============================================================================
|
|
232
|
+
//# sourceMappingURL=ipfs-node-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipfs-node-manager.js","sourceRoot":"","sources":["../src/ipfs-node-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DIAP TypeScript SDK - IPNS 管理器
|
|
3
|
+
* 负责 IPNS 记录的发布、解析和 Key 管理
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* IPNS 记录状态
|
|
7
|
+
*/
|
|
8
|
+
export declare enum IpnsRecordStatus {
|
|
9
|
+
/** 待发布 */
|
|
10
|
+
Pending = "pending",
|
|
11
|
+
/** 已发布 */
|
|
12
|
+
Published = "published",
|
|
13
|
+
/** 已过期 */
|
|
14
|
+
Expired = "expired",
|
|
15
|
+
/** 失败 */
|
|
16
|
+
Failed = "failed"
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* IPNS 配置
|
|
20
|
+
*/
|
|
21
|
+
export interface IpnsConfig {
|
|
22
|
+
/** 是否使用 w3name */
|
|
23
|
+
useW3name?: boolean;
|
|
24
|
+
/** 是否使用 IPFS 节点 */
|
|
25
|
+
useIpfsNode?: boolean;
|
|
26
|
+
/** 记录有效期(天) */
|
|
27
|
+
validityDays?: number;
|
|
28
|
+
/** 默认 TTL */
|
|
29
|
+
defaultTtl?: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* IPNS 发布结果
|
|
33
|
+
*/
|
|
34
|
+
export interface IpnsPublishResult {
|
|
35
|
+
/** IPNS 名称 */
|
|
36
|
+
name: string;
|
|
37
|
+
/** 指向的 CID */
|
|
38
|
+
value: string;
|
|
39
|
+
/** 序列号 */
|
|
40
|
+
sequence: number;
|
|
41
|
+
/** 有效期 */
|
|
42
|
+
validity: number;
|
|
43
|
+
/** 签名 */
|
|
44
|
+
signature: string;
|
|
45
|
+
/** 发布时间 */
|
|
46
|
+
publishedAt: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* IPNS 解析结果
|
|
50
|
+
*/
|
|
51
|
+
export interface IpnsResolveResult {
|
|
52
|
+
/** IPNS 名称 */
|
|
53
|
+
name: string;
|
|
54
|
+
/** 解析后的 CID */
|
|
55
|
+
value: string;
|
|
56
|
+
/** 序列号 */
|
|
57
|
+
sequence: number;
|
|
58
|
+
/** TTL */
|
|
59
|
+
ttl?: number;
|
|
60
|
+
/** 缓存时间 */
|
|
61
|
+
cachedAt?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* IPNS Key 信息
|
|
65
|
+
*/
|
|
66
|
+
export interface KeyInfo {
|
|
67
|
+
/** Key 名称 */
|
|
68
|
+
name: string;
|
|
69
|
+
/** Key ID */
|
|
70
|
+
id: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* IPNS 记录
|
|
74
|
+
*/
|
|
75
|
+
export interface IpnsRecord {
|
|
76
|
+
/** IPNS 名称 */
|
|
77
|
+
name: string;
|
|
78
|
+
/** 指向的值 */
|
|
79
|
+
value: string;
|
|
80
|
+
/** 序列号 */
|
|
81
|
+
sequence: number;
|
|
82
|
+
/** 有效期 */
|
|
83
|
+
validity: number;
|
|
84
|
+
/** 签名 */
|
|
85
|
+
signature: Uint8Array;
|
|
86
|
+
/** TTL */
|
|
87
|
+
ttl?: number;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* IPNS 管理器
|
|
91
|
+
*/
|
|
92
|
+
export declare class IpnsManager {
|
|
93
|
+
/** 配置 */
|
|
94
|
+
private config;
|
|
95
|
+
/** Key 列表 */
|
|
96
|
+
private keys;
|
|
97
|
+
/** 记录缓存 */
|
|
98
|
+
private recordCache;
|
|
99
|
+
/** 使用 w3name */
|
|
100
|
+
private useW3name;
|
|
101
|
+
/**
|
|
102
|
+
* 创建 IPNS 管理器
|
|
103
|
+
*/
|
|
104
|
+
static create(config?: IpnsConfig): Promise<IpnsManager>;
|
|
105
|
+
/**
|
|
106
|
+
* 构造函数
|
|
107
|
+
*/
|
|
108
|
+
private constructor();
|
|
109
|
+
/**
|
|
110
|
+
* 初始化管理器
|
|
111
|
+
*/
|
|
112
|
+
private initialize;
|
|
113
|
+
/**
|
|
114
|
+
* 发布 IPNS 记录
|
|
115
|
+
*/
|
|
116
|
+
publish(cid: string, keyName?: string, lifetime?: number, ttl?: number): Promise<IpnsPublishResult>;
|
|
117
|
+
/**
|
|
118
|
+
* 发布到 w3name
|
|
119
|
+
*/
|
|
120
|
+
private publishToW3name;
|
|
121
|
+
/**
|
|
122
|
+
* 发布到 IPFS 节点
|
|
123
|
+
*/
|
|
124
|
+
private publishToIpfs;
|
|
125
|
+
/**
|
|
126
|
+
* 解析 IPNS 名称
|
|
127
|
+
*/
|
|
128
|
+
resolve(ipnsName: string): Promise<IpnsResolveResult>;
|
|
129
|
+
/**
|
|
130
|
+
* 从 w3name 解析
|
|
131
|
+
*/
|
|
132
|
+
private resolveFromW3name;
|
|
133
|
+
/**
|
|
134
|
+
* 从 IPFS 节点解析
|
|
135
|
+
*/
|
|
136
|
+
private resolveFromIpfs;
|
|
137
|
+
/**
|
|
138
|
+
* 确保 Key 存在
|
|
139
|
+
*/
|
|
140
|
+
ensureKeyExists(keyName: string): Promise<KeyInfo>;
|
|
141
|
+
/**
|
|
142
|
+
* 创建新的 IPNS Key
|
|
143
|
+
*/
|
|
144
|
+
createKey(keyName: string): Promise<KeyInfo>;
|
|
145
|
+
/**
|
|
146
|
+
* 列出所有 Key
|
|
147
|
+
*/
|
|
148
|
+
listKeys(): KeyInfo[];
|
|
149
|
+
/**
|
|
150
|
+
* 删除 Key
|
|
151
|
+
*/
|
|
152
|
+
removeKey(keyName: string): Promise<void>;
|
|
153
|
+
/**
|
|
154
|
+
* 获取下一个序列号
|
|
155
|
+
*/
|
|
156
|
+
private getNextSequence;
|
|
157
|
+
/**
|
|
158
|
+
* 生成 Key ID
|
|
159
|
+
*/
|
|
160
|
+
private generateKeyId;
|
|
161
|
+
/**
|
|
162
|
+
* 获取配置
|
|
163
|
+
*/
|
|
164
|
+
getConfig(): IpnsConfig;
|
|
165
|
+
/**
|
|
166
|
+
* 清空缓存
|
|
167
|
+
*/
|
|
168
|
+
clearCache(): void;
|
|
169
|
+
/**
|
|
170
|
+
* 获取缓存的记录数
|
|
171
|
+
*/
|
|
172
|
+
getCacheSize(): number;
|
|
173
|
+
/**
|
|
174
|
+
* 获取 Key 数量
|
|
175
|
+
*/
|
|
176
|
+
getKeyCount(): number;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* 创建 IPNS 管理器(便捷函数)
|
|
180
|
+
*/
|
|
181
|
+
export declare function createIpnsManager(config?: IpnsConfig): Promise<IpnsManager>;
|
|
182
|
+
//# sourceMappingURL=ipns-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipns-manager.d.ts","sourceRoot":"","sources":["../src/ipns-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,gBAAgB;IAC1B,UAAU;IACV,OAAO,YAAY;IACnB,UAAU;IACV,SAAS,cAAc;IACvB,UAAU;IACV,OAAO,YAAY;IACnB,SAAS;IACT,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mBAAmB;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc;IACd,IAAI,EAAE,MAAM,CAAC;IACb,eAAe;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU;IACV,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,aAAa;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,cAAc;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS;IACT,SAAS,EAAE,UAAU,CAAC;IACtB,UAAU;IACV,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,SAAS;IACT,OAAO,CAAC,MAAM,CAAuB;IACrC,aAAa;IACb,OAAO,CAAC,IAAI,CAAuB;IACnC,WAAW;IACX,OAAO,CAAC,WAAW,CAA0B;IAC7C,gBAAgB;IAChB,OAAO,CAAC,SAAS,CAAU;IAE3B;;OAEG;WACiB,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IASrE;;OAEG;IACH,OAAO;IAaP;;OAEG;YACW,UAAU;IAOxB;;OAEG;IACU,OAAO,CAClB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,MAAe,EACxB,QAAQ,GAAE,MAAc,EACxB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC;IA6C7B;;OAEG;YACW,eAAe;IAM7B;;OAEG;YACW,aAAa;IAM3B;;OAEG;IACU,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBlE;;OAEG;YACW,iBAAiB;IAc/B;;OAEG;YACW,eAAe;IAc7B;;OAEG;IACU,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU/D;;OAEG;IACU,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBzD;;OAEG;IACI,QAAQ,IAAI,OAAO,EAAE;IAI5B;;OAEG;IACU,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACI,SAAS,IAAI,UAAU;IAI9B;;OAEG;IACI,UAAU,IAAI,IAAI;IAKzB;;OAEG;IACI,YAAY,IAAI,MAAM;IAI7B;;OAEG;IACI,WAAW,IAAI,MAAM;CAG7B;AAMD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CAEtB"}
|