open-index/open-npm huggingface dataset:
npm package: @nuwa-ai/identity-kit
Description: SDK for NIP-1 Agent Single DID Multi-Key Model and NIP-3 CADOP (Custodian-Assisted DID Onboarding Protocol)
Author: Nuwa Community
Latest version: 0.8.1

# @nuwa-ai/identity-kit

|[English](./README.md)|中文|

> Nuwa Protocol Identity SDK for TypeScript

`@nuwa-ai/identity-kit` 是 Nuwa 协议在 TypeScript/JavaScript 环境下的核心 DID SDK。它遵循 [NIP-1](https://github.com/nuwa-protocol/NIPs/blob/main/nips/nip-1.md)（单一 DID / 多密钥模型），并为 [NIP-2](https://github.com/nuwa-protocol/NIPs/blob/main/nips/nip-2.md) 认证协议提供底层支持。

## ✨ 功能特性

- **简易启动**: 一行 `IdentityKit.bootstrap()` 即可完成 KeyStore、VDR 等环境装配。
- **NIP-1 兼容**: 完整覆盖主密钥、操作密钥、服务声明等 DID Document 元素及生命周期管理。
- **可插拔架构**: 通过 VDR 插件机制支持 `did:key`、`did:rooch` 等多种 DID 方法，也可自定义扩展。
- **浏览器友好**: 内置 `LocalStorage`、`IndexedDB` KeyStore；同时兼容 Node.js / Deno 等运行时。
- **类型安全**: 全 TypeScript 实现，导出完善的类型定义。

## 📦 安装

```bash
npm install @nuwa-ai/identity-kit @roochnetwork/rooch-sdk
```

---

## 🚀 快速上手

下面示例展示了「准备环境 ➜ 加载/创建 DID ➜ 基本操作」的完整流程。

```ts
import { IdentityKit, KeyType } from '@nuwa-ai/identity-kit';
import { RoochClient } from '@roochnetwork/rooch-sdk';

// Step 1) 启动运行环境（注册 VDR、创建 KeyManager & KeyStore）
const env = await IdentityKit.bootstrap({
  method: 'rooch',
  vdrOptions: {
    rpcUrl: 'https://test-seed.rooch.network/',
  },
});

//Step 2-A) 已有 DID ➜ 直接加载
const kit = await env.loadDid('did:rooch:0xYourDid' /* 可选自定义 signer */);
```

---

## ⚙️ 常用操作

```ts
// 读取 DID Document
const doc = kit.getDIDDocument();

// 添加一个新设备密钥
await kit.addVerificationMethod({ keyType: KeyType.ECDSA_SECP256K1 }, ['authentication']);

// 使用 DIDAuth v1 (NIP-2) 对数据进行签名
import { DIDAuth } from '@nuwa-ai/identity-kit';

const sig = await DIDAuth.v1.createSignature(
  { operation: 'example', params: { message: 'hello' } },
  env.keyManager, // SignerInterface 实例（此处复用 env 内置的 KeyManager）
  doc.verificationMethod![0].id // keyId to sign with
);
```

---

## 🛠️ 核心概念速查

| 概念          | 说明                                                                                                          |
| ------------- | ------------------------------------------------------------------------------------------------------------- |
| `IdentityEnv` | 由 `IdentityKit.bootstrap()` 或 `IdentityEnvBuilder` 构建的运行环境，持有全局 `VDRRegistry` 与 `KeyManager`。 |
| `VDRRegistry` | 全局单例，管理各 DID Method 的 VDR 实例，并提供统一的 DID 解析 / 创建接口。                                   |
| `KeyManager`  | SDK 内置的密钥生命周期管理器，实现 `SignerInterface`，可直接用于签名。                                        |
| `KeyStore`    | 密钥持久化后端。浏览器默认使用 `LocalStorageKeyStore` / `IndexedDBKeyStore`。                                 |
| `IdentityKit` | 绑定到 **单个 DID** 的高阶对象，暴露 DID 操作（增删 Key、Service、签名、解析等）。                            |

---

## 🔬 高级用法

### `IdentityEnvBuilder` 链式配置

```ts
import { IdentityEnvBuilder } from '@nuwa-ai/identity-kit';

const env = await new IdentityEnvBuilder()
  .useVDR('rooch', { rpcUrl: 'https://...' })
  .useKeyStore(new IndexedDBKeyStore())
  .init();
```

### 自定义 VDR / KeyStore

实现 `VDRInterface` / `KeyStore` 接口并在 `builder.useVDR()`、`builder.useKeyStore()` 中注入，即可接入新的 DID 方法或存储后端。

---

## 📄 License

Apache-2.0
npm package: @nuwa-ai/identity-kit-web
Description: Web extensions for Nuwa Identity Kit
Author: Nuwa Community
Latest version: 0.6.0

# @nuwa-ai/identity-kit-web

Web extensions for Nuwa Identity Kit, providing browser-friendly implementations and utilities.

## Features

- Multiple KeyStore implementations:
  - `LocalStorageKeyStore` - Uses browser's localStorage for key storage
  - `IndexedDBKeyStore` - Uses IndexedDB for key storage, supports CryptoKey objects
- `DeepLinkManager` - Manages deep link authentication flow
- `IdentityKitWeb` - High-level API for web applications
- React hooks (optional) - `useIdentityKit` hook for React applications

## Installation

```bash
npm install @nuwa-ai/identity-kit-web
```

## Usage

### Basic Usage

```typescript
import { IdentityKitWeb } from '@nuwa-ai/identity-kit-web';

// Initialize the SDK
const nuwa = await IdentityKitWeb.init();

// Connect to Cadop
await nuwa.connect();

// Handle callback (in your callback page)
await nuwa.handleCallback(location.search);

// Sign a payload
const sig = await nuwa.sign({ hello: 'world' });

// Verify a signature
const isValid = await nuwa.verify(sig);

// Logout
await nuwa.logout();
```

### React Hook

```tsx
import { useIdentityKit } from '@nuwa-ai/identity-kit-web';

function MyComponent() {
  const { state, connect, sign, verify, logout } = useIdentityKit();

  if (state.isConnecting) {
    return <div>Connecting...</div>;
  }

  if (!state.isConnected) {
    return <button onClick={connect}>Connect</button>;
  }

  return (
    <div>
      <p>Connected as: {state.agentDid}</p>
      <button onClick={logout}>Logout</button>
    </div>
  );
}
```

### Advanced Usage

```typescript
import { 
  IdentityKitWeb, 
  IndexedDBKeyStore, 
  KeyManager 
} from '@nuwa-ai/identity-kit-web';

// Custom KeyStore with protection strategy
const store = new IndexedDBKeyStore();

// Custom KeyManager
const keyManager = new KeyManager({ store });

// Initialize SDK with custom components
const nuwa = await IdentityKitWeb.init({
  cadopDomain: 'https://my-cadop-instance.com',
  keyManager
});
```

## License

MIT