Skip to main content

Web Examples

Use these snippets for token handling, fetch utilities and HTTP header helpers in browser and server runtimes.

Jwt

import { Jwt } from '@twin.org/web';

const payload = {
sub: 'user-01',
role: 'editor'
};

const token = Jwt.encode(payload, {
alg: 'HS256'
});

Jwt.decode(token).sub; // 'user-01'
import { Jwt } from '@twin.org/web';

const token = Jwt.encode({ sub: 'u-2' }, { alg: 'HS256' });
Jwt.verify(token, {
key: 'local-signing-key'
}); // true

FetchHelper

import { FetchHelper } from '@twin.org/web';

const response = await FetchHelper.fetchJson<{ status: string }>('https://api.example.org/status', {
method: 'GET',
cacheSeconds: 30
});

response.status; // 'ok'

HeaderHelper

import { HeaderHelper } from '@twin.org/web';

const header = HeaderHelper.createBearer('token-123');

HeaderHelper.extractBearer(header); // 'token-123'

Jwk and Jws

import { Jwk, Jws } from '@twin.org/web';

const jwk = Jwk.fromEd25519Public(new Uint8Array(32));
const compact = Jws.create(
{
typ: 'JWT',
alg: 'EdDSA'
},
{
iss: 'issuer-1'
},
async signingBytes => signingBytes
);

Jws.verify(compact, async () => true); // true
jwk.kty; // 'OKP'

CookieHelper

import { CookieHelper } from '@twin.org/web';

CookieHelper.createCookie('sessionId', 'abc123', {
path: '/',
maxAge: 1800,
secure: true,
httpOnly: true
}); // 'sessionId=abc123; Max-Age=1800; Path=/; Secure; HttpOnly'

MimeTypeHelper

import { MimeTypeHelper } from '@twin.org/web';

MimeTypeHelper.detect('avatar.png'); // 'image/png'
MimeTypeHelper.defaultExtension('application/json'); // 'json'

FetchError

import { FetchError } from '@twin.org/web';

const error = new FetchError(this.CLASS_NAME, 'fetchFailed', {
statusCode: 503,
retryable: true
});

error.toJsonObject().statusCode; // 503