typescript-sdk
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseContextVM TypeScript SDK
ContextVM TypeScript SDK
Reference guide for using effectively.
@contextvm/sdk高效使用的参考指南。
@contextvm/sdkInstallation
安装
bash
npm install @contextvm/sdkbash
npm install @contextvm/sdkor
or
bun add @contextvm/sdk
undefinedbun add @contextvm/sdk
undefinedCore Imports
核心导入
typescript
// Transports
import { NostrClientTransport, NostrServerTransport } from "@contextvm/sdk";
// Signers
import { PrivateKeySigner } from "@contextvm/sdk";
// Relay Handlers
import { ApplesauceRelayPool } from "@contextvm/sdk";
// Components
import { NostrMCPProxy, NostrMCPGateway } from "@contextvm/sdk";
// Core types and utilities
import {
EncryptionMode,
CTXVM_MESSAGES_KIND,
SERVER_ANNOUNCEMENT_KIND,
createLogger,
} from "@contextvm/sdk";typescript
// 传输层
import { NostrClientTransport, NostrServerTransport } from "@contextvm/sdk";
// 签名器
import { PrivateKeySigner } from "@contextvm/sdk";
// 中继处理器
import { ApplesauceRelayPool } from "@contextvm/sdk";
// 组件
import { NostrMCPProxy, NostrMCPGateway } from "@contextvm/sdk";
// 核心类型与工具
import {
EncryptionMode,
CTXVM_MESSAGES_KIND,
SERVER_ANNOUNCEMENT_KIND,
createLogger,
} from "@contextvm/sdk";Core Interfaces
核心接口
NostrSigner
NostrSigner
Abstracts cryptographic signing:
typescript
interface NostrSigner {
getPublicKey(): Promise<string>;
signEvent(event: EventTemplate): Promise<NostrEvent>;
nip44?: {
encrypt(pubkey: string, plaintext: string): Promise<string>;
decrypt(pubkey: string, ciphertext: string): Promise<string>;
};
}Implement for custom key management (hardware wallets, browser extensions, etc.).
抽象加密签名功能:
typescript
interface NostrSigner {
getPublicKey(): Promise<string>;
signEvent(event: EventTemplate): Promise<NostrEvent>;
nip44?: {
encrypt(pubkey: string, plaintext: string): Promise<string>;
decrypt(pubkey: string, ciphertext: string): Promise<string>;
};
}可针对自定义密钥管理场景实现该接口(如硬件钱包、浏览器扩展等)。
RelayHandler
RelayHandler
Manages relay connections:
typescript
interface RelayHandler {
connect(): Promise<void>;
disconnect(relayUrls?: string[]): Promise<void>;
publish(event: NostrEvent): Promise<void>;
subscribe(
filters: Filter[],
onEvent: (event: NostrEvent) => void,
onEose?: () => void,
): Promise<void>;
unsubscribe(): void;
}Must be non-blocking - returns immediately.
subscribe()管理中继连接:
typescript
interface RelayHandler {
connect(): Promise<void>;
disconnect(relayUrls?: string[]): Promise<void>;
publish(event: NostrEvent): Promise<void>;
subscribe(
filters: Filter[],
onEvent: (event: NostrEvent) => void,
onEose?: () => void,
): Promise<void>;
unsubscribe(): void;
}必须是非阻塞的 - 需立即返回。
subscribe()Signers
签名器
PrivateKeySigner
PrivateKeySigner
Default signer using raw private key:
typescript
const signer = new PrivateKeySigner("32-byte-hex-private-key");
const pubkey = await signer.getPublicKey();Security: Never hardcode keys. Use environment variables.
使用原始私钥的默认签名器:
typescript
const signer = new PrivateKeySigner("32-byte-hex-private-key");
const pubkey = await signer.getPublicKey();安全提示:切勿硬编码密钥,请使用环境变量。
Custom Signers
自定义签名器
Implement for:
NostrSigner- Browser extensions (NIP-07)
- Hardware wallets
- Remote signing services
- Secure enclaves
See for examples.
references/custom-signers.md针对以下场景实现接口:
NostrSigner- 浏览器扩展(NIP-07)
- 硬件钱包
- 远程签名服务
- 安全飞地
示例请参见。
references/custom-signers.mdRelay Handlers
中继处理器
ApplesauceRelayPool (Recommended)
ApplesauceRelayPool(推荐)
Production-grade relay management:
typescript
const pool = new ApplesauceRelayPool([
"wss://relay.contextvm.org",
"wss://cvm.otherstuff.ai",
]);Features:
- Automatic reconnection
- Connection monitoring
- RxJS-based observables
- Persistent subscriptions
生产级中继管理工具:
typescript
const pool = new ApplesauceRelayPool([
"wss://relay.contextvm.org",
"wss://cvm.otherstuff.ai",
]);特性:
- 自动重连
- 连接监控
- 基于RxJS的可观察对象
- 持久化订阅
SimpleRelayPool (Deprecated)
SimpleRelayPool(已废弃)
Basic relay management:
typescript
const pool = new SimpleRelayPool(relayUrls);Use for new projects.
ApplesauceRelayPool基础中继管理工具:
typescript
const pool = new SimpleRelayPool(relayUrls);新项目请使用。
ApplesauceRelayPoolEncryption Modes
加密模式
typescript
enum EncryptionMode {
OPTIONAL = "optional", // Use if supported (default)
REQUIRED = "required", // Fail if not supported
DISABLED = "disabled", // Never encrypt
}typescript
enum EncryptionMode {
OPTIONAL = "optional", // 支持则使用(默认)
REQUIRED = "required", // 不支持则报错
DISABLED = "disabled", // 从不加密
}Logging
日志
typescript
import { createLogger } from "@contextvm/sdk/core";
const logger = createLogger("my-module");
logger.info("event.name", {
module: "my-module",
txId: "abc-123",
durationMs: 245,
});Configure via environment:
LOG_LEVEL=debug|info|warn|errorLOG_DESTINATION=stderr|stdout|fileLOG_FILE=/path/to/fileLOG_ENABLED=true|false
typescript
import { createLogger } from "@contextvm/sdk/core";
const logger = createLogger("my-module");
logger.info("event.name", {
module: "my-module",
txId: "abc-123",
durationMs: 245,
});通过环境变量配置:
LOG_LEVEL=debug|info|warn|errorLOG_DESTINATION=stderr|stdout|fileLOG_FILE=/path/to/fileLOG_ENABLED=true|false
Constants
常量
| Constant | Value | Description |
|---|---|---|
| 25910 | Ephemeral messages |
| 11316 | Server metadata |
| 11317 | Tools announcement |
| 11318 | Resources announcement |
| 1059 | Encrypted messages |
| 常量名称 | 值 | 描述 |
|---|---|---|
| 25910 | 临时消息 |
| 11316 | 服务器元数据 |
| 11317 | 工具公告 |
| 11318 | 资源公告 |
| 1059 | 加密消息 |
SDK Patterns
SDK模式
See for:
references/patterns.md- Error handling
- Retry strategies
- Connection lifecycle
- Resource cleanup
请参见了解:
references/patterns.md- 错误处理
- 重试策略
- 连接生命周期
- 资源清理
API Reference
API参考
- - Complete interface definitions
references/interfaces.md - - All exported constants
references/constants.md - - Logging best practices
references/logging.md
- - 完整接口定义
references/interfaces.md - - 所有导出常量
references/constants.md - - 日志最佳实践
references/logging.md