
Research
/Security News
10 npm Typosquatted Packages Deploy Multi-Stage Credential Harvester
Socket researchers found 10 typosquatted npm packages that auto-run on install, show fake CAPTCHAs, fingerprint by IP, and deploy a credential stealer.
@phala/dstack-sdk
Advanced tools
This SDK provides a JavaScript/TypeScript client for communicating with the Tappd server, which available inside DStack.
npm install @phala/dstack-sdk
import { TappdClient } from '@phala/dstack-sdk';
const client = new TappdClient();
// Causion: You don't need to do this most of the time.
const httpClient = new TappdClient('http://localhost:8000');
// Check if service is reachable (500ms timeout, never throws)
const isReachable = await client.isReachable();
if (!isReachable) {
console.log('Tappd service is not available');
return;
}
// Get the information of the Base Image.
await client.info();
// Derive a key with optional path and subject
const keyResult = await client.deriveKey('<unique-id>');
console.log(keyResult.key); // X.509 private key in PEM format
console.log(keyResult.certificate_chain); // Certificate chain
const keyBytes = keyResult.asUint8Array(); // Get key as Uint8Array
// Generate TDX quote
const quoteResult = await client.tdxQuote('some-data', 'sha256');
console.log(quoteResult.quote); // TDX quote in hex format
console.log(quoteResult.event_log); // Event log
const rtmrs = quoteResult.replayRtmrs(); // Replay RTMRs
For tdxQuote, it supports a range of hash algorithms, including:
sha256: SHA-256 hash algorithmsha384: SHA-384 hash algorithmsha512: SHA-512 hash algorithmsha3-256: SHA3-256 hash algorithmsha3-384: SHA3-384 hash algorithmsha3-512: SHA3-512 hash algorithmkeccak256: Keccak-256 hash algorithmkeccak384: Keccak-384 hash algorithmkeccak512: Keccak-512 hash algorithmraw: No hashing, use raw data (must be <= 64 bytes)The SDK provides integration with viem for Ethereum account management:
import { toViemAccount } from '@phala/dstack-sdk/viem';
const keyResult = await client.deriveKey('<unique-id>');
const account = toViemAccount(keyResult); // ⚠️ Security concern, shows warning
// Use the account with viem operations
import { toViemAccountSecure } from '@phala/dstack-sdk/viem';
const keyResult = await client.deriveKey('<unique-id>');
const account = toViemAccountSecure(keyResult); // âś… Secure, no warning
// Use the account with viem operations
Note:
toViemAccountuses first 32 bytes of key material directly (deprecated due to security concerns).toViemAccountSecureuses SHA256 hash of complete key material for enhanced security.
The SDK provides integration with Solana Web3.js for Solana account management:
import { toKeypair } from '@phala/dstack-sdk/solana';
const keyResult = await client.deriveKey('<unique-id>');
const keypair = toKeypair(keyResult); // ⚠️ Security concern, shows warning
// Use the keypair with Solana Web3.js operations
import { toKeypairSecure } from '@phala/dstack-sdk/solana';
const keyResult = await client.deriveKey('<unique-id>');
const keypair = toKeypairSecure(keyResult); // âś… Secure, no warning
// Use the keypair with Solana Web3.js operations
Note:
toKeypairuses first 32 bytes of key material directly (deprecated due to security concerns).toKeypairSecureuses SHA256 hash of complete key material for enhanced security.
The SDK includes utilities for encrypting environment variables using X25519 key exchange and AES-GCM. This feature is handy for interacting with the bare DStack Teepod API or the Phala Cloud API.
import { encryptEnvVars, type EnvVar } from '@phala/dstack-sdk/encrypt-env-vars';
const envVars: EnvVar[] = [
{ key: 'API_KEY', value: 'secret123' },
{ key: 'DATABASE_URL', value: 'postgresql://...' }
];
const publicKeyHex = '0x...'; // You need get that from Teepod API or Phala Cloud API.
const encrypted = await encryptEnvVars(envVars, publicKeyHex);
// encrypted is a hex string containing: ephemeral public key + iv + encrypted data
We've introduced secure versions of key derivation functions due to security concerns with the original implementations:
| Deprecated (⚠️ Security Warning) | Secure Replacement (✅ Recommended) |
|---|---|
toKeypair() | toKeypairSecure() |
toViemAccount() | toViemAccountSecure() |
Key Differences:
Warning: Deprecated APIs will show console warnings but continue to work for backward compatibility. The secure APIs generate different keys from the same input.
new TappdClient(endpoint?: string)
endpoint: Unix socket path or HTTP(S) URL. Defaults to '/var/run/tappd.sock'.DSTACK_SIMULATOR_ENDPOINT environment variable if setNOTE: Leave it empty in production. You only need to add volumes in your docker-compose file:
volumes:
- /var/run/tappd.sock:/var/run/tappd.sock
For local development without TDX devices, you can use the simulator available for download here:
https://github.com/Leechael/tappd-simulator/releases
deriveKey(path?: string, subject?: string, alt_names?: string[]): Promise<DeriveKeyResponse>Derives a key for the given path and subject.
NOTE: Only the path affects the derived result. subject & alt_names are for the generated certificate and do not affect the derived result.
path: Optional path for key derivationsubject: Optional subject name (defaults to path)alt_names: Optional alternative names for the certificateDeriveKeyResponse containing key and certificate chaintdxQuote(report_data: string | Buffer | Uint8Array, hash_algorithm?: TdxQuoteHashAlgorithms): Promise<TdxQuoteResponse>Generates a TDX quote. The quote is returned in hex format, and you can paste your quote into https://proof.t16z.com/ to get the attestation report.
report_data: Data to include in the quotehash_algorithm: Hash algorithm to use (sha256, sha384, sha512, etc.)TdxQuoteResponse containing quote and event loginfo(): Promise<TappdInfoResponse>Retrieves server information.
isReachable(): Promise<boolean>Checks if the Tappd service is reachable and responsive. This method uses a 500ms timeout and never throws errors, making it safe for health checks.
true if the service is reachable, false otherwiseconst client = new TappdClient();
// Safe health check - never throws
const isServiceHealthy = await client.isReachable();
if (isServiceHealthy) {
console.log('Tappd service is available');
// Proceed with other operations
} else {
console.log('Tappd service is not reachable');
// Handle gracefully
}
toViemAccount(deriveKeyResponse: DeriveKeyResponse) ⚠️ DEPRECATEDWarning: This function has security concerns. Use
toViemAccountSecureinstead.
Creates a Viem account using first 32 bytes of key material directly.
toViemAccountSecure(deriveKeyResponse: DeriveKeyResponse) âś… RECOMMENDEDCreates a Viem account using SHA256 hash of complete key material for enhanced security.
toKeypair(deriveKeyResponse: DeriveKeyResponse) ⚠️ DEPRECATEDWarning: This function has security concerns. Use
toKeypairSecureinstead.
Creates a Solana Keypair using first 32 bytes of key material directly.
toKeypairSecure(deriveKeyResponse: DeriveKeyResponse) âś… RECOMMENDEDCreates a Solana Keypair using SHA256 hash of complete key material for enhanced security.
interface DeriveKeyResponse {
key: string;
certificate_chain: string[];
asUint8Array: (max_length?: number) => Uint8Array;
}
type TdxQuoteHashAlgorithms =
'sha256' | 'sha384' | 'sha512' | 'sha3-256' | 'sha3-384' | 'sha3-512' |
'keccak256' | 'keccak384' | 'keccak512' | 'raw';
interface TdxQuoteResponse {
quote: Hex;
event_log: string;
replayRtmrs: () => string[];
}
interface EventLog {
imr: number;
event_type: number;
digest: string;
event: string;
event_payload: string;
}
interface TcbInfo {
mrtd: string;
rootfs_hash: string;
rtmr0: string;
rtmr1: string;
rtmr2: string;
rtmr3: string;
event_log: EventLog[];
}
interface TappdInfoResponse {
app_id: string;
instance_id: string;
app_cert: string;
tcb_info: TcbInfo;
app_name: string;
public_logs: boolean;
public_sysinfo: boolean;
}
interface EnvVar {
key: string;
value: string;
}
Apache License
FAQs
dstack SDK
We found that @phala/dstack-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Socket researchers found 10 typosquatted npm packages that auto-run on install, show fake CAPTCHAs, fingerprint by IP, and deploy a credential stealer.

Product
Socket Firewall Enterprise is now available with flexible deployment, configurable policies, and expanded language support.

Security News
Open source dashboard CNAPulse tracks CVE Numbering Authorities’ publishing activity, highlighting trends and transparency across the CVE ecosystem.