跳到主要内容

SpaceClient

SpaceClient 是与 DID Space API 交互的主要接口。它是 SDK 的主要入口点,负责处理配置、身份验证以及向您的 DID Space 分派命令。

构造函数

首先,您需要创建 SpaceClient 的一个实例。构造函数接受一个 options 对象来配置其行为,包括身份验证凭据和端点详细信息。

客户端初始化

typescript
import { SpaceClient } from '@blocklet/did-space-js';
import getWallet from '@blocklet/sdk/lib/wallet';

const wallet = getWallet();

const client = new SpaceClient({
  auth: {
    wallet: wallet,
    endpoint: 'https://www.didspaces.com/app/api/space/...',
  },
});

选项 (SpaceClientOptions)

构造函数接受一个具有以下属性的对象:

  • auth object — 提供身份验证凭据的推荐方式。它可以是几种类型之一。
    • EndpointAuth object — 使用钱包和特定空间端点进行身份验证。
      • wallet WalletObject (required) — 用于签署请求的钱包对象,通常来自 ‘@blocklet/sdk/lib/wallet’。
      • endpoint string (required) — 您的 DID Space 应用的完整 API 端点。
    • AuthorizationAuth object — 使用预先生成的授权令牌进行身份验证。
      • authorization string (required) — 授权令牌。
    • AccessKeyAuth object — 使用密钥进行身份验证。
      • secretKey string (required) — 秘密访问密钥。
  • wallet WalletObject (deprecated) — 钱包对象。建议改用 auth 对象。
  • endpoint string (deprecated) — DID Space 端点 URL。建议改用 auth 对象。
  • url string (default: https://www.didspaces.com) — DID Spaces 服务的基础 URL。客户端会自动解析正确的应用程序挂载点。
  • delegation string — 一个 JWT 令牌,证明请求者有权访问该空间。
  • componentDid string — 发出请求的组件的 DID。
  • abortController AbortController — 一个 AbortController 实例,用于取消进行中的请求。

方法

send

send 方法是对您的 DID Space 执行任何命令的通用方法。您传递一个命令对象的实例,它会返回一个解析为该命令输出的 promise。

发送命令

typescript
import { SpaceClient, PutNftObjectCommand } from '@blocklet/did-space-js';
import getWallet from '@blocklet/sdk/lib/wallet';
import { fileURLToPath } from 'url';
import path from 'path';
import fs from 'fs';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

async function uploadNft() {
  const wallet = getWallet();
  const client = new SpaceClient({
    auth: {
      wallet: wallet,
      endpoint: 'https://www.didspaces.com/app/api/space/...',
    },
  });

  const filePath = path.join(__dirname, 'my-nft-image.png');
  const fileStream = fs.createReadStream(filePath);
  const fileStat = fs.statSync(filePath);

  const command = new PutNftObjectCommand({
    name: 'My First NFT',
    description: 'This is a description of my NFT.',
    body: fileStream,
    contentLength: fileStat.size,
    contentType: 'image/png',
  });

  const output = await client.send(command);

  if (output.statusCode === 200) {
    console.log('NFT uploaded successfully!', output.data);
  } else {
    console.error('Upload failed:', output.statusMessage);
  }
}

uploadNft();

参数

  • command CommandProtocol<Input, Output> (required) — 命令类的实例,例如 PutObjectCommand 或 ListObjectsCommand。

返回

一个解析为命令输出对象的 Promise

  • Output Promise<CommandOutput> — 命令执行的结果。
    • statusCode number (required) — 响应的 HTTP 状态码(例如,200 表示成功)。
    • statusMessage string — 如果请求失败,则返回错误消息。
    • stack string — 如果发生错误,则返回堆栈跟踪。
    • data any (required) — 命令返回的数据,具体取决于执行的命令。

静态方法

这些是直接在 SpaceClient 类上可用的实用函数。

getBaseUrl

从完整的端点 URL 中提取 DID Space 的基础 URL。

typescript
import { SpaceClient } from '@blocklet/did-space-js';

const endpoint = 'https://.../app/api/space/z3T.../app/zNK.../object/';
const baseUrl = await SpaceClient.getBaseUrl(endpoint);
console.log(baseUrl); // 'https://.../app'

getDisplayUrl

构建一个面向公众的 URL,用于在 DID Space 中查看对象。

typescript
import { SpaceClient } from '@blocklet/did-space-js';

const endpoint = 'https://.../app/api/space/z3T.../app/zNK.../object/';
const objectDid = 'z3T...'; // The DID of the object
const displayUrl = await SpaceClient.getDisplayUrl(endpoint, objectDid);
console.log(displayUrl);
// 'https://.../app/resolve/z3T.../display'

getSpaceEndpointContext

解析完整的端点 URL 以提取上下文信息,例如 Space DID 和 Application DID。

typescript
import { SpaceClient } from '@blocklet/did-space-js';

const endpoint =
  'https://.../api/space/z3T6WZD3dBtaVUgwb3rtBey8BartrJDTLrmQr/app/zNKsSUmUVJntiVdAPpg8vYtEgnFvSppYLf4F/object/';
const context = await SpaceClient.getSpaceEndpointContext(endpoint);

console.log(context.spaceDid); // 'z3T6WZD3dBtaVUgwb3rtBey8BartrJDTLrmQr'
console.log(context.appDid); // 'zNKsSUmUVJntiVdAPpg8vYtEgnFvSppYLf4F'

返回

一个解析为 SpaceEndpointContext 对象的 Promise

  • context Promise<SpaceEndpointContext> — 从端点解析的上下文信息。
  • baseUrl string (required) — 空间的基础 URL。
  • spaceDid string (required) — 空间的 DID。
  • appDid string (required) — 空间内应用程序的 DID。

后续步骤

现在您已经知道如何初始化客户端并发送命令,可以探索用于与您的空间交互的可用命令: