SpaceClient 是与 DID Space API 交互的主要接口。它是 SDK 的主要入口点,负责处理配置、身份验证以及向您的 DID Space 分派命令。
构造函数
首先,您需要创建 SpaceClient 的一个实例。构造函数接受一个 options 对象来配置其行为,包括身份验证凭据和端点详细信息。
客户端初始化
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 端点。
- wallet
- AuthorizationAuth
object— 使用预先生成的授权令牌进行身份验证。- authorization
string(required) — 授权令牌。
- authorization
- AccessKeyAuth
object— 使用密钥进行身份验证。- secretKey
string(required) — 秘密访问密钥。
- secretKey
- EndpointAuth
- 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。
发送命令
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) — 命令返回的数据,具体取决于执行的命令。
- statusCode
静态方法
这些是直接在 SpaceClient 类上可用的实用函数。
getBaseUrl
从完整的端点 URL 中提取 DID Space 的基础 URL。
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 中查看对象。
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。
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。
后续步骤
现在您已经知道如何初始化客户端并发送命令,可以探索用于与您的空间交互的可用命令: