npm.io
0.2.3 • Published 1 week ago

@dofe/models-sdk

Licence
MIT
Version
0.2.3
Deps
0
Size
96 kB
Vulns
0
Weekly
207

@dofe/models-sdk

Typed service-to-service SDK for models.dofe.ai internal APIs.

Install

pnpm add @dofe/models-sdk

Node Signed Client

Use the Node-only entry when the caller can access the internal API secret.

import { createSignedModelsInternalDataClient } from '@dofe/models-sdk/internal-node';

const models = createSignedModelsInternalDataClient({
  baseUrl: process.env.MODELS_INTERNAL_BASE_URL!,
  internalApiSecret: process.env.MODELS_INTERNAL_API_SECRET!,
  serviceName: 'agents.dofe.ai',
  timeoutMs: 5000,
});

const health = await models.health.check();
const routing = await models.routing.decide({
  body: {
    model: 'gpt-4o',
    strategy: 'balanced',
  },
});

Runtime-Neutral Client

Use the runtime-neutral entry when the caller provides authorization.

import { createModelsInternalDataClient } from '@dofe/models-sdk/internal';

const abortController = new AbortController();
const models = createModelsInternalDataClient({
  baseUrl: 'https://models.internal.example.com',
  serviceName: 'my-service',
  getAuthorization: () => 'Bearer timestamp:signature',
  signal: abortController.signal,
});

const modelsPage = await models.models.list({ query: { limit: 20 } });

Raw Client

Use the raw client when the caller needs access to HTTP status, headers, or the original { code, msg, data } envelope.

import { createSignedModelsInternalClient } from '@dofe/models-sdk/internal-node';
import { ModelsInternalApiError, unwrapModelsInternalResponse } from '@dofe/models-sdk/response';

const models = createSignedModelsInternalClient({
  baseUrl: process.env.MODELS_INTERNAL_BASE_URL!,
  internalApiSecret: process.env.MODELS_INTERNAL_API_SECRET!,
  serviceName: 'agents.dofe.ai',
});

const response = await models.health.check();
const health = unwrapModelsInternalResponse(response, 'models.health.check');

ModelsInternalApiError is serializable for service logs:

try {
  await models.routing.decide({ body: { model: 'gpt-4o' } });
} catch (error) {
  if (error instanceof ModelsInternalApiError) {
    logger.warn('models routing failed', error.toJSON());
  }
}

Preflight

import { runModelsInternalPreflight } from '@dofe/models-sdk/preflight';

await runModelsInternalPreflight({
  baseUrl: process.env.MODELS_INTERNAL_BASE_URL!,
  internalApiSecret: process.env.MODELS_INTERNAL_API_SECRET!,
  serviceName: 'agents.dofe.ai',
});

Exports

Entry Purpose
@dofe/models-sdk Runtime-neutral client, types, preflight, response helpers
@dofe/models-sdk/internal Runtime-neutral typed raw/data client
@dofe/models-sdk/internal-node Node HMAC signed raw/data client
@dofe/models-sdk/internal-types Consumer-facing internal API types
@dofe/models-sdk/preflight Health, availability, routing preflight
@dofe/models-sdk/response Envelope unwrap and error class

The root entry intentionally does not export createSignedModelsInternalClient(), so browser or edge consumers do not accidentally pull in Node crypto.

Security Boundary

This SDK is a client package only. It must not include database credentials, database runtime code, Docker database lifecycle code, or provider key logging. The package security check scans source and build output before publish.

Keywords