AuraImage SDK v2 — Client-Side Uploads, Secret Key Rotation, and Armenian Language Support
Narek Hakobyan
Three months of shipping compressed into one release. Here is what changed.
Client-side browser uploads
The SDK (@auraimage/sdk) now exposes createUploadToken — sign an upload token server-side once, hand it to the browser, and upload directly from the client. No file touches your backend.
// Server: sign a token
import { createUploadToken } from '@auraimage/sdk/server';
const token = await createUploadToken({ projectName: 'my-app' });
// Client: upload directly
import { upload } from '@auraimage/sdk/client';
const result = await upload(file, token);This removes the most common bottleneck in image-heavy apps — the upload proxy route. The token is HMAC-signed with your project's Secret Key, scoped to a 15-minute window, and verified at the CDN edge.
Zero-downtime Secret Key rotation
Projects can now hold up to 10 active Secret Keys. Rotate keys without interrupting uploads: create a new key, deploy it, then revoke the old one. The CDN tries each active key during verification — so old and new keys work simultaneously during the rotation window.
aura keys create --name prod-v2 --project my-app
aura keys revoke sk_live_abc123... --project my-appArmenian (hy) is now a first-class locale
The dashboard and marketing site ship in Armenian alongside English and Russian. The Geist Sans type stack includes Onest as a fallback for Armenian glyph coverage.
Client-side image converter
A browser-native tool at /image-converter that converts between PNG, JPEG, WebP, AVIF, and HEIC — no upload, no server, no wait. HEIC/AVIF WASM decoders load lazily at runtime. Includes a side-by-side comparison slider and zoomable preview.
Other changes
- Custom image names and paths — upload tokens accept a
nameclaim (e.g.blog/hero). The stored object key becomes{projectName}/{name}.{ext}. - Streamed uploads to R2 — CDN origin writes to R2 via multipart streaming, reducing memory pressure on large files.
- GA4 consent is now geo-gated — consent banner only shows in regions that require it.
Full changelog in the docs.