| name | add-node-sdk |
| description | Integrate the Temps Node.js SDKs for server-side platform access, KV storage, and Blob storage. Use when the user wants to: (1) Call the Temps platform API from Node.js (deployments, projects, analytics, session replay, etc.), (2) Use Temps KV (key-value) storage, (3) Use Temps Blob storage for files, (4) Server-side integration with a Temps project, (5) Backend access to Temps resources. Triggers: "temps node sdk", "temps kv", "temps blob", "backend integration", "node.js temps", "@temps-sdk/node-sdk".
|
Add Node.js SDKs
Integrate Temps platform features in Node.js / TypeScript apps.
Verified against the real published packages. A prior version of this skill referenced @temps-sdk/node (which does not exist), new Temps({ apiKey, projectId }), temps.track(), new KV({ apiKey, namespace }), kv.has(), blob.get(), blob.getSignedUrl(), TempsError — none of those exist. Confirm any API before changing it:
npm pack @temps-sdk/node-sdk@latest @temps-sdk/kv@latest @temps-sdk/blob@latest
for t in temps-sdk-*-*.tgz; do tar -xzf "$t"; echo "== $t =="; cat package/dist/index.d.ts | head -60; rm -rf package; done
The three real packages
| Package | Purpose |
|---|
@temps-sdk/node-sdk | Full platform API client (generated) + Sentry-style server error tracking |
@temps-sdk/kv | Vercel-KV-style key/value store |
@temps-sdk/blob | Vercel-Blob-style file store |
There is no @temps-sdk/node. The platform client package is @temps-sdk/node-sdk.
npm install @temps-sdk/node-sdk
npm install @temps-sdk/kv
npm install @temps-sdk/blob
Platform API client — @temps-sdk/node-sdk
TempsClient is a generated client (hey-api) over the Temps OpenAPI surface. Construct it with a baseUrl and apiKey, then call resource sub-namespaces.
import { TempsClient } from '@temps-sdk/node-sdk';
const temps = new TempsClient({
baseUrl: process.env.TEMPS_API_URL!,
apiKey: process.env.TEMPS_API_KEY,
});
const projects = await temps.projects ;
⚠️ The config is { baseUrl, apiKey } (Vercel-style baseUrl), not { apiKey, projectId }. There is no top-level temps.track() / temps.identify() — analytics live under temps.analytics.*. Use editor autocomplete on the namespace, or read package/dist/index.d.ts and client/sdk.gen.d.ts for exact method names and argument shapes (they're generated and may evolve).
Each call resolves to { data, error, request, response } (hey-api result shape) — check error before using data.
Server-side error tracking — @temps-sdk/node-sdk
The node SDK re-exports a Sentry-compatible error-tracking API as the ErrorTracking namespace. It is DSN-based and mirrors @sentry/node.
import { ErrorTracking } from '@temps-sdk/node-sdk';
ErrorTracking.init({
dsn: process.env.SENTRY_DSN!,
environment: process.env.NODE_ENV,
release: process.env.GIT_SHA,
tracesSampleRate: 1.0,
});
try {
doRiskyThing();
} catch (err) {
ErrorTracking.captureException(err);
}
ErrorTracking.captureMessage('Something notable happened', 'warning');
ErrorTracking.setUser({ id: 'user_123', email: 'user@example.com' });
ErrorTracking.addBreadcrumb({ category: 'auth', message: 'logged in', level: 'info' });
const tx = ErrorTracking.startTransaction({ name: 'checkout', op: 'http.server' });
For most error-tracking work, prefer the dedicated add-error-tracking skill: Temps is Sentry wire-compatible, so the official @sentry/node SDK pointed at a Temps DSN is the recommended path. Use ErrorTracking from @temps-sdk/node-sdk only when you specifically want the bundled implementation (no extra dependency).
KV storage — @temps-sdk/kv
Vercel-KV-style API. Use the default kv instance (env-configured) or construct a KV/createClient.
import { kv } from '@temps-sdk/kv';
await kv.set('user:123', { name: 'John' });
await kv.set('session:abc', { userId: '123' }, { ex: 3600 });
const user = await kv.get<{ name: string }>('user:123');
await kv.incr('counter');
await kv.expire('user:123', 600);
const ttl = await kv.ttl('user:123');
const removed = await kv.del('user:123', 'session:abc');
const matches = await kv.keys('user:*');
Explicit client (when you don't want env-based config):
import { KV } from '@temps-sdk/kv';
const store = new KV({
apiUrl: process.env.TEMPS_API_URL,
token: process.env.TEMPS_TOKEN,
projectId: 42,
});
SetOptions (Redis-style): { ex?: number /* sec */, px?: number /* ms */, nx?: boolean, xx?: boolean }.
⚠️ The config field is token (API key or deployment token) + projectId: number, not apiKey/namespace. There is no kv.has(), kv.list({prefix}), getWithMetadata, or a { ttl } set option — use { ex } / { px }. KV errors throw KVError.
Blob storage — @temps-sdk/blob
Vercel-Blob-style API. Use the default blob instance or construct BlobClient/createClient.
import { blob } from '@temps-sdk/blob';
const info = await blob.put('avatars/user-123.png', imageBuffer, {
contentType: 'image/png',
addRandomSuffix: false,
});
const res = await blob.download(info.url);
const bytes = Buffer.from(await res.arrayBuffer());
const meta = await blob.head(info.url);
const { blobs, cursor, hasMore } = await blob.list({ prefix: 'avatars/', limit: 100 });
await blob.copy(info.url, 'avatars/backup.png');
await blob.del(info.url);
Explicit client:
import { BlobClient } from '@temps-sdk/blob';
const store = new BlobClient({
apiUrl: process.env.TEMPS_API_URL,
token: process.env.TEMPS_TOKEN,
projectId: 42,
});
PutOptions: { contentType?, addRandomSuffix? (default true), cacheControl?, contentEncoding?, contentDisposition? }.
⚠️ Methods are put / del / head / list / download / copy. There is no blob.get(), blob.getStream(), blob.getSignedUrl(), or blob.createUploadUrl() — to read content, call download(url) and consume the Response. Blob errors throw BlobError.
Environment Variables
| Variable | Used by | Notes |
|---|
TEMPS_API_URL | node-sdk (baseUrl), kv, blob | Base URL of the Temps API, e.g. https://app.temps.sh |
TEMPS_API_KEY | node-sdk TempsClient | Create under Settings → API Keys |
TEMPS_TOKEN | kv, blob | API key or deployment token |
TEMPS_PROJECT_ID | kv, blob | Numeric project id; required with API keys, inferred from deployment tokens |
SENTRY_DSN | node-sdk ErrorTracking | Temps DSN from Error Tracking → DSN & Setup |
On Temps deployments these may be injected automatically when you link a KV/Blob service to the project — check the project's environment variables before hardcoding.
Best Practices
- Never hardcode keys/tokens — read from environment variables.
- Check
error on TempsClient calls before using data (hey-api result shape).
- Catch
KVError / BlobError around storage calls.
- Initialize
ErrorTracking.init() once at startup, before code that can throw.
- Confirm method names from the generated
.d.ts — the platform client surface is generated from OpenAPI and evolves with the API.