Examples
Examples (SDK vNext)
Looking to integrate with Treza using the new SDK? This page shows end‑to‑end examples: initializing the client, selecting a provider, creating enclaves, managing lifecycle, fetching logs, working with scheduled tasks, API keys, Docker Hub helpers, and GitHub OAuth—using real, copy‑pasteable snippets.
Installation
npm install @treza/sdkQuick Start
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient({
baseUrl: process.env.TREZA_BASE_URL ?? 'https://app.trezalabs.com',
timeout: 30_000,
});
const WALLET = process.env.WALLET_ADDRESS!; // e.g. '0x4B0897b0513fdc7C541B6d9D7E929C4e5364D2dB'
async function main() {
// 1) Discover providers
const providers = await client.getProviders();
const provider = providers[0];
console.log('Using provider:', provider.name, provider.id);
// 2) Create an enclave
const enclave = await client.createEnclave({
name: 'My Trading Bot',
description: 'Secure environment for trading algorithms',
region: provider.regions[0] ?? 'us-east-1',
walletAddress: WALLET,
providerId: provider.id,
providerConfig: {
dockerImage: 'trading-bot:latest',
cpuCount: 2,
memoryMiB: 512,
},
});
console.log('Enclave created:', enclave.id, 'status:', enclave.status);
// 3) Get logs (application-only)
const appLogs = await client.getEnclaveLogs(enclave.id, 'application', 50);
console.log('Application log entries:', (appLogs.logs.application ?? []).length);
// 4) Pause → Resume lifecycle
const paused = await client.pauseEnclave(enclave.id, WALLET);
console.log('Paused →', paused.enclave.status);
const resumed = await client.resumeEnclave(enclave.id, WALLET);
console.log('Resumed →', resumed.enclave.status);
}
main().catch((e) => {
console.error(e);
process.exit(1);
});export TREZA_BASE_URL=https://app.trezalabs.com
export WALLET_ADDRESS=0x4B0897b0513fdc7C541B6d9D7E929C4e5364D2dB
# Optional for GitHub examples
export GITHUB_ACCESS_TOKEN=gho_xxxxxxxxxxxxxxxxxxxx:::
Provider Management
Discover and inspect available providers (e.g., AWS Nitro), regions, and config schema.
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient();
async function listProviders() {
const providers = await client.getProviders();
console.log('Available providers:', providers.length);
for (const p of providers) {
console.log(`- ${p.name} (${p.id})`);
console.log(' Regions:', p.regions.join(', '));
console.log(' Config schema keys:', Object.keys(p.configSchema ?? {}));
}
}
listProviders();Fetch a specific provider:
const nitro = await client.getProvider('aws-nitro');
console.log(nitro.name, nitro.regions);Enclave Management (Create / Update / Delete)
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient();
const WALLET = process.env.WALLET_ADDRESS!;
async function createUpdateDelete() {
const [provider] = await client.getProviders();
const enclave = await client.createEnclave({
name: 'ML Training Environment',
description: 'Private model training',
region: provider.regions[0],
walletAddress: WALLET,
providerId: provider.id,
providerConfig: {
dockerImage: 'ml-training:latest',
cpuCount: 4,
memoryMiB: 2048,
},
});
console.log('Created enclave:', enclave.id);
const updated = await client.updateEnclave({
id: enclave.id,
walletAddress: WALLET,
description: 'Updated description',
region: enclave.region,
providerConfig: { ...enclave.providerConfig, dockerImage: 'ml-training:v2' },
});
console.log('Updated image:', updated.providerConfig?.dockerImage);
// Delete (irreversible)
const msg = await client.deleteEnclave(enclave.id, WALLET);
console.log(msg);
}
createUpdateDelete();Enclave Lifecycle (Pause / Resume / Terminate)
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient();
const WALLET = process.env.WALLET_ADDRESS!;
async function lifecycle(enclaveId: string) {
const before = await client.getEnclave(enclaveId);
console.log('Before:', before.status);
const paused = await client.pauseEnclave(enclaveId, WALLET);
console.log('Pausing →', paused.enclave.status);
const resumed = await client.resumeEnclave(enclaveId, WALLET);
console.log('Resuming →', resumed.enclave.status);
const terminated = await client.terminateEnclave(enclaveId, WALLET);
console.log('Terminating →', terminated.enclave.status);
}
// lifecycle('enc_123456');Logs (Application, Errors, and Providers)
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient();
async function logs(enclaveId: string) {
// All logs
const all = await client.getEnclaveLogs(enclaveId, 'all', 100);
console.log('Log types:', Object.keys(all.logs));
// App-only
const app = await client.getEnclaveLogs(enclaveId, 'application', 50);
console.log('App entries:', (app.logs.application ?? []).length);
// Errors-only
const errs = await client.getEnclaveLogs(enclaveId, 'errors', 50);
console.log('Errors:', (errs.logs.errors ?? []).length);
}Available log types:
all,ecs,stepfunctions,lambda,application,errors.
Docker Hub Helpers
Search images and list tags directly from the SDK.
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient();
async function docker() {
const search = await client.searchDockerImages('hello-world');
console.log('Found images:', search.count);
const tags = await client.getDockerTags('library/node');
console.log('First 5 tags:', tags.tags.slice(0, 5).map(t => t.name));
}Tasks (Scheduling inside Enclaves)
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient();
const WALLET = process.env.WALLET_ADDRESS!;
async function tasks(enclaveId: string) {
const created = await client.createTask({
name: 'Daily Price Monitor',
description: 'Monitor prices and send alerts',
enclaveId,
schedule: '0 9 * * *', // 9am daily
walletAddress: WALLET,
});
console.log('Task created:', created.id);
const all = await client.getTasks(WALLET);
console.log('Tasks for wallet:', all.length);
}Update / delete tasks:
const updated = await client.updateTask({ id: 'task_123', walletAddress: WALLET, schedule: '0 */6 * * *', status: 'running' });
const msg = await client.deleteTask('task_123', WALLET);API Keys (Least-Privilege Access)
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient();
const WALLET = process.env.WALLET_ADDRESS!;
async function apiKeys() {
const created = await client.createApiKey({
name: 'Production Key',
permissions: ['enclaves:read', 'tasks:read', 'logs:read'],
walletAddress: WALLET,
});
console.log('API key (show once):', created.key);
const keys = await client.getApiKeys(WALLET);
console.log('Key count:', keys.length);
}Update / delete keys:
await client.updateApiKey({ id: 'key_123', walletAddress: WALLET, status: 'active', permissions: ['enclaves:read', 'enclaves:write'] });
await client.deleteApiKey('key_123', WALLET);GitHub OAuth (Optional)
import { TrezaClient } from '@treza/sdk';
const client = new TrezaClient();
async function githubOAuth() {
const { authUrl } = await client.getGitHubAuthUrl('custom-state');
console.log('Authorize at:', authUrl);
// After your OAuth callback:
const code = 'code-from-callback';
const token = await client.exchangeGitHubCode({ code, state: 'custom-state' });
console.log('GitHub user:', token.user.login);
const repos = await client.getGitHubRepositories(token.access_token);
console.log('Repos:', repos.repositories.length);
}Branches for a repo:
const branches = await client.getRepositoryBranches({ accessToken: process.env.GITHUB_ACCESS_TOKEN!, repository: 'username/repo-name' });
console.log('Branches:', branches.branches.map(b => b.name));Connect a repo to an enclave:
await client.updateEnclave({
id: 'enc_123456',
walletAddress: process.env.WALLET_ADDRESS!,
githubConnection: { isConnected: true, selectedRepo: 'myorg/my-repo', selectedBranch: 'main' },
});Error Handling
TrezaSdkError includes message, code, statusCode, and optional details.
import { TrezaClient, TrezaSdkError } from '@treza/sdk';
const client = new TrezaClient();
async function robust() {
try {
await client.getEnclaves('invalid-wallet');
} catch (err) {
if (err instanceof TrezaSdkError) {
console.error('Treza SDK Error:', {
message: err.message,
code: err.code,
statusCode: err.statusCode,
details: err.details,
});
if (err.statusCode === 400) console.log('Check your wallet format.');
if (err.statusCode === 404) console.log('Enclave not found or access denied.');
} else {
console.error('Unexpected error:', err);
}
}
}Types (What You Can Import)
import type {
// Core
TrezaConfig, Enclave, Provider, Task, ApiKey, GitHubConnection,
// Requests / Responses
CreateEnclaveRequest, UpdateEnclaveRequest,
CreateTaskRequest, UpdateTaskRequest,
CreateApiKeyRequest, UpdateApiKeyRequest,
EnclaveResponse, EnclavesResponse,
ProviderResponse, ProvidersResponse,
TaskResponse, TasksResponse,
ApiKeyResponse, ApiKeysResponse,
// Lifecycle & Logs
EnclaveLifecycleRequest, EnclaveLifecycleResponse,
LogEntry, LogsResponse,
// Docker
DockerImage, DockerTag, DockerSearchResponse, DockerTagsResponse,
// GitHub
GitHubUser, Repository, Branch, GitHubAuthResponse, GitHubTokenResponse,
// Errors
ApiError,
} from '@treza/sdk';Example Runner (Monorepo-friendly)
Structure your /examples folder like this:
examples/
quick-start.ts
providers.ts
enclave-lifecycle.ts
logs.ts
docker.ts
tasks.ts
api-keys.ts
github-oauth.tsRun any file with ts-node:
# env first
export WALLET_ADDRESS=0x4B0897b0513fdc7C541B6d9D7E929C4e5364D2dB
export TREZA_BASE_URL=https://app.trezalabs.com
npx ts-node examples/quick-start.tsTroubleshooting
401/403: Ensure your wallet address owns/has access to the resource.
404: Wrong
enclaveIdor the resource belongs to a different wallet.Lifecycle ops stuck: Check provider logs via
getEnclaveLogs(enclaveId, 'all')and verifyproviderConfig(image exists, CPU/mem within quota).Docker tag not found: Prefix official images with
library/(e.g.,library/node).
See Also
API Reference → (SDK Reference section)
Concepts → Providers, Enclaves, Lifecycle
Guides → Deploy your first enclave
Last updated