@elsium-ai/gateway 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/gateway.d.ts CHANGED
@@ -13,6 +13,8 @@ export interface GatewayConfig {
13
13
  xray?: boolean | {
14
14
  maxHistory?: number;
15
15
  };
16
+ maxMessages?: number;
17
+ maxInputTokens?: number;
16
18
  }
17
19
  export interface Gateway {
18
20
  complete(request: CompletionRequest): Promise<LLMResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,WAAW,EACX,UAAU,EAEV,cAAc,EACd,QAAQ,EACR,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAe,KAAK,YAAY,EAAiC,MAAM,iBAAiB,CAAA;AAC/F,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAI5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM7C,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACxC;AAED,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAAA;IAChD,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,GAAG;QAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;QAC3E,IAAI,EAAE,CAAC,CAAA;QACP,QAAQ,EAAE,WAAW,CAAA;KACrB,CAAC,CAAA;IACF,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAA;IAC3B,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAA;CACvC;AAQD,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,WAAW,GAC9C,IAAI,CAEN;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CA6JtD"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,iBAAiB,EACjB,WAAW,EACX,UAAU,EAEV,cAAc,EAEd,QAAQ,EACR,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAe,KAAK,YAAY,EAAiC,MAAM,iBAAiB,CAAA;AAC/F,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAI5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM7C,MAAM,WAAW,aAAa;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,UAAU,EAAE,CAAA;IACzB,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAAA;IAChD,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,GAAG;QAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC;QAC3E,IAAI,EAAE,CAAC,CAAA;QACP,QAAQ,EAAE,WAAW,CAAA;KACrB,CAAC,CAAA;IACF,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAA;IAC3B,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAA;CACvC;AAQD,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,WAAW,GAC9C,IAAI,CAEN;AAiID,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CA6HtD"}
package/dist/index.js CHANGED
@@ -1163,7 +1163,19 @@ function createGoogleProvider(config) {
1163
1163
  return { role, parts };
1164
1164
  }
1165
1165
  function formatGeminiMultipartContent(msg, role) {
1166
- const parts = msg.content.filter((p) => p.type === "text").map((p) => ({ text: p.text }));
1166
+ const parts = [];
1167
+ for (const p of msg.content) {
1168
+ if (p.type === "text") {
1169
+ parts.push({ text: p.text });
1170
+ } else if (p.type === "image") {
1171
+ const img = p;
1172
+ if (img.source.type === "base64") {
1173
+ parts.push({ inlineData: { mimeType: img.source.mediaType, data: img.source.data } });
1174
+ } else {
1175
+ parts.push({ fileData: { mimeType: "image/jpeg", fileUri: img.source.url } });
1176
+ }
1177
+ }
1178
+ }
1167
1179
  return { role, parts };
1168
1180
  }
1169
1181
  function formatMessages(messages) {
@@ -1338,7 +1350,8 @@ async function handleGoogleErrorResponse(response) {
1338
1350
  throw ElsiumError.authError("google");
1339
1351
  }
1340
1352
  if (response.status === 429) {
1341
- throw ElsiumError.rateLimit("google");
1353
+ const retryAfter = response.headers.get("retry-after");
1354
+ throw ElsiumError.rateLimit("google", retryAfter ? Number.parseInt(retryAfter) * 1000 : undefined);
1342
1355
  }
1343
1356
  throw ElsiumError.providerError(`Google API error ${response.status}: ${errorBody}`, {
1344
1357
  provider: "google",
@@ -1524,6 +1537,24 @@ function createOpenAIProvider(config) {
1524
1537
  }
1525
1538
  return openaiMsg;
1526
1539
  }
1540
+ function formatUserContent(msg) {
1541
+ if (typeof msg.content === "string")
1542
+ return msg.content;
1543
+ const parts = [];
1544
+ for (const part of msg.content) {
1545
+ if (part.type === "text") {
1546
+ parts.push({ type: "text", text: part.text });
1547
+ } else if (part.type === "image") {
1548
+ if (part.source.type === "base64") {
1549
+ const url = `data:${part.source.mediaType};base64,${part.source.data}`;
1550
+ parts.push({ type: "image_url", image_url: { url } });
1551
+ } else {
1552
+ parts.push({ type: "image_url", image_url: { url: part.source.url } });
1553
+ }
1554
+ }
1555
+ }
1556
+ return parts;
1557
+ }
1527
1558
  function formatMessages(messages) {
1528
1559
  const formatted = [];
1529
1560
  for (const msg of messages) {
@@ -1539,7 +1570,7 @@ function createOpenAIProvider(config) {
1539
1570
  formatted.push(formatAssistantMessage(msg));
1540
1571
  continue;
1541
1572
  }
1542
- formatted.push({ role: "user", content: extractTextContent(msg) });
1573
+ formatted.push({ role: "user", content: formatUserContent(msg) });
1543
1574
  }
1544
1575
  return formatted;
1545
1576
  }
@@ -1778,7 +1809,7 @@ var PROVIDER_FACTORIES = {
1778
1809
  function registerProviderFactory(name, factory) {
1779
1810
  PROVIDER_FACTORIES[name] = factory;
1780
1811
  }
1781
- function gateway(config) {
1812
+ function validateGatewayConfig(config) {
1782
1813
  const factory = PROVIDER_FACTORIES[config.provider];
1783
1814
  if (!factory) {
1784
1815
  throw new ElsiumError({
@@ -1787,21 +1818,92 @@ function gateway(config) {
1787
1818
  retryable: false
1788
1819
  });
1789
1820
  }
1821
+ if (typeof config.apiKey !== "string" || config.apiKey.trim() === "") {
1822
+ throw new ElsiumError({
1823
+ code: "CONFIG_ERROR",
1824
+ message: "apiKey must be a non-empty string",
1825
+ retryable: false
1826
+ });
1827
+ }
1828
+ if (config.timeout !== undefined && (!Number.isFinite(config.timeout) || config.timeout <= 0)) {
1829
+ throw new ElsiumError({
1830
+ code: "CONFIG_ERROR",
1831
+ message: "timeout must be a positive finite number",
1832
+ retryable: false
1833
+ });
1834
+ }
1835
+ if (config.maxRetries !== undefined && (!Number.isFinite(config.maxRetries) || !Number.isInteger(config.maxRetries) || config.maxRetries < 0)) {
1836
+ throw new ElsiumError({
1837
+ code: "CONFIG_ERROR",
1838
+ message: "maxRetries must be a non-negative finite integer",
1839
+ retryable: false
1840
+ });
1841
+ }
1842
+ return factory;
1843
+ }
1844
+ function autoRegisterProvider(provider) {
1845
+ if (!provider.metadata)
1846
+ return;
1847
+ registerProviderMetadata(provider.name, provider.metadata);
1848
+ if (!provider.metadata.pricing)
1849
+ return;
1850
+ for (const [model, pricing] of Object.entries(provider.metadata.pricing)) {
1851
+ registerPricing(model, pricing);
1852
+ }
1853
+ }
1854
+ function validateRequestLimits(request, maxMessages, maxInputTokens) {
1855
+ if (request.messages.length > maxMessages) {
1856
+ throw ElsiumError.validation(`Message count ${request.messages.length} exceeds limit of ${maxMessages}`);
1857
+ }
1858
+ let estimatedTokens = 0;
1859
+ for (const msg of request.messages) {
1860
+ const text = typeof msg.content === "string" ? msg.content : msg.content.map((p) => p.type === "text" ? p.text : "").join("");
1861
+ estimatedTokens += Math.ceil(text.length / 4);
1862
+ }
1863
+ if (estimatedTokens > maxInputTokens) {
1864
+ throw ElsiumError.validation(`Estimated input tokens (~${estimatedTokens}) exceeds limit of ${maxInputTokens}`);
1865
+ }
1866
+ }
1867
+ function buildMiddlewareContext(req, providerName, defaultModel, metadata) {
1868
+ return {
1869
+ request: req,
1870
+ provider: providerName,
1871
+ model: req.model ?? defaultModel,
1872
+ traceId: generateTraceId(),
1873
+ startTime: performance.now(),
1874
+ metadata
1875
+ };
1876
+ }
1877
+ async function accumulateStreamEvents(stream, emit) {
1878
+ let textContent = "";
1879
+ let usage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
1880
+ let stopReason = "end_turn";
1881
+ let id = "";
1882
+ for await (const event of stream) {
1883
+ emit(event);
1884
+ if (event.type === "text_delta") {
1885
+ textContent += event.text;
1886
+ } else if (event.type === "message_end") {
1887
+ usage = event.usage;
1888
+ stopReason = event.stopReason;
1889
+ } else if (event.type === "message_start") {
1890
+ id = event.id;
1891
+ }
1892
+ }
1893
+ return { textContent, usage, stopReason, id };
1894
+ }
1895
+ function gateway(config) {
1896
+ const factory = validateGatewayConfig(config);
1790
1897
  const provider = factory({
1791
1898
  apiKey: config.apiKey,
1792
1899
  baseUrl: config.baseUrl,
1793
1900
  timeout: config.timeout,
1794
1901
  maxRetries: config.maxRetries
1795
1902
  });
1796
- if (provider.metadata) {
1797
- registerProviderMetadata(provider.name, provider.metadata);
1798
- if (provider.metadata.pricing) {
1799
- for (const [model, pricing] of Object.entries(provider.metadata.pricing)) {
1800
- registerPricing(model, pricing);
1801
- }
1802
- }
1803
- }
1903
+ autoRegisterProvider(provider);
1804
1904
  const defaultModel = config.model ?? provider.defaultModel;
1905
+ const maxMessages = config.maxMessages ?? 1000;
1906
+ const maxInputTokens = config.maxInputTokens ?? 1e6;
1805
1907
  let xrayStore = null;
1806
1908
  const allMiddleware = [...config.middleware ?? []];
1807
1909
  if (config.xray) {
@@ -1816,14 +1918,7 @@ function gateway(config) {
1816
1918
  if (!composedMiddleware) {
1817
1919
  return provider.complete(req);
1818
1920
  }
1819
- const ctx = {
1820
- request: req,
1821
- provider: provider.name,
1822
- model: req.model ?? defaultModel,
1823
- traceId: generateTraceId(),
1824
- startTime: performance.now(),
1825
- metadata: request.metadata ?? {}
1826
- };
1921
+ const ctx = buildMiddlewareContext(req, provider.name, defaultModel, request.metadata ?? {});
1827
1922
  return composedMiddleware(ctx, async (c) => provider.complete(c.request));
1828
1923
  }
1829
1924
  return {
@@ -1835,34 +1930,27 @@ function gateway(config) {
1835
1930
  return xrayStore?.callHistory(limit) ?? [];
1836
1931
  },
1837
1932
  async complete(request) {
1933
+ validateRequestLimits(request, maxMessages, maxInputTokens);
1838
1934
  return executeWithMiddleware(request);
1839
1935
  },
1840
1936
  stream(request) {
1937
+ validateRequestLimits(request, maxMessages, maxInputTokens);
1841
1938
  const req = { ...request, model: request.model ?? defaultModel };
1842
1939
  if (composedMiddleware) {
1843
- const ctx = {
1844
- request: req,
1845
- provider: provider.name,
1846
- model: req.model ?? defaultModel,
1847
- traceId: generateTraceId(),
1848
- startTime: performance.now(),
1849
- metadata: request.metadata ?? {}
1850
- };
1940
+ const ctx = buildMiddlewareContext(req, provider.name, defaultModel, request.metadata ?? {});
1851
1941
  return createStream(async (emit) => {
1852
1942
  await composedMiddleware(ctx, async (c) => {
1853
- const stream = provider.stream(c.request);
1854
- for await (const event of stream) {
1855
- emit(event);
1856
- }
1943
+ const result = await accumulateStreamEvents(provider.stream(c.request), emit);
1944
+ const latencyMs = Math.round(performance.now() - ctx.startTime);
1857
1945
  return {
1858
- id: "",
1859
- message: { role: "assistant", content: "" },
1860
- usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 },
1861
- cost: { inputCost: 0, outputCost: 0, totalCost: 0, currency: "USD" },
1946
+ id: result.id,
1947
+ message: { role: "assistant", content: result.textContent },
1948
+ usage: result.usage,
1949
+ cost: calculateCost(c.model, result.usage),
1862
1950
  model: c.model,
1863
1951
  provider: provider.name,
1864
- stopReason: "end_turn",
1865
- latencyMs: 0,
1952
+ stopReason: result.stopReason,
1953
+ latencyMs,
1866
1954
  traceId: ctx.traceId
1867
1955
  };
1868
1956
  });
@@ -2223,6 +2311,12 @@ function redactResponseSecrets(response, config) {
2223
2311
  }
2224
2312
  function securityMiddleware(config) {
2225
2313
  return async (ctx, next) => {
2314
+ if (ctx.request.system) {
2315
+ const sysViolations = scanMessageForViolations(ctx.request.system, config);
2316
+ if (sysViolations.length > 0) {
2317
+ reportAndThrow(sysViolations, config);
2318
+ }
2319
+ }
2226
2320
  for (const message of ctx.request.messages) {
2227
2321
  const text = extractText(message.content);
2228
2322
  if (!text)
@@ -2557,7 +2651,22 @@ function createProviderMesh(config) {
2557
2651
  const available = sortedProviders.find((e) => isProviderAvailable(e.name));
2558
2652
  const entry = available ?? sortedProviders[0];
2559
2653
  const gw = getGateway(entry.name);
2560
- return gw.stream({ ...request, model: request.model ?? entry.model });
2654
+ let resolvedStream = null;
2655
+ callWithCircuitBreaker(entry.name, () => {
2656
+ resolvedStream = gw.stream({ ...request, model: request.model ?? entry.model });
2657
+ return Promise.resolve(resolvedStream);
2658
+ }).catch(() => {});
2659
+ if (resolvedStream === null) {
2660
+ const err2 = new ElsiumError({
2661
+ code: "PROVIDER_ERROR",
2662
+ message: "Circuit breaker is open",
2663
+ retryable: true
2664
+ });
2665
+ return new ElsiumStream(async function* () {
2666
+ yield { type: "error", error: err2 };
2667
+ }());
2668
+ }
2669
+ return resolvedStream;
2561
2670
  }
2562
2671
  };
2563
2672
  }
@@ -1 +1 @@
1
- {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,cAAc,EASnB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAmC9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CAiPxE"}
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,cAAc,EASnB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAqC9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CA8PxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,cAAc,EASnB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAgD9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CAmRxE"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,cAAc,EASnB,MAAM,iBAAiB,CAAA;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAoD9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CAsSxE"}
package/dist/router.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { CompletionRequest, LLMResponse } from '@elsium-ai/core';
2
- import { type CircuitBreakerConfig, type ElsiumStream } from '@elsium-ai/core';
2
+ import { type CircuitBreakerConfig, ElsiumStream } from '@elsium-ai/core';
3
3
  export type RoutingStrategy = 'fallback' | 'cost-optimized' | 'latency-optimized' | 'capability-aware';
4
4
  export interface ProviderEntry {
5
5
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAEN,KAAK,oBAAoB,EAEzB,KAAK,YAAY,EAEjB,MAAM,iBAAiB,CAAA;AAKxB,MAAM,MAAM,eAAe,GACxB,UAAU,GACV,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,CAAA;AAErB,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAChD,YAAY,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,QAAQ,EAAE,eAAe,CAAA;IACzB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,cAAc,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAA;CAC/C;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAAA;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;CAClC;AAoDD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAoO3E"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAEN,KAAK,oBAAoB,EAEzB,YAAY,EAEZ,MAAM,iBAAiB,CAAA;AAKxB,MAAM,MAAM,eAAe,GACxB,UAAU,GACV,gBAAgB,GAChB,mBAAmB,GACnB,kBAAkB,CAAA;AAErB,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAChD,YAAY,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,aAAa,EAAE,CAAA;IAC1B,QAAQ,EAAE,eAAe,CAAA;IACzB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,cAAc,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAA;CAC/C;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAC1D,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY,CAAA;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;CAClC;AAoDD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAgQ3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,UAAU,EAAqC,MAAM,iBAAiB,CAAA;AAKjG,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,kBAAkB,GAAG,WAAW,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;CACnC;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,UAAU,EAAE,iBAAiB,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACxC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC,CAAA;IACpE,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAA;CACpD;AAuID,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,YAAY,CAAA;AAEtF,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,kBAAkB,CAAA;IACzB,aAAa,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CA4BlE;AAQD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASjE;AAoCD,wBAAgB,aAAa,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC,GAClE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAYlD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAa1F;AAwDD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,UAAU,CAuB/E"}
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,UAAU,EAAqC,MAAM,iBAAiB,CAAA;AAKjG,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,kBAAkB,GAAG,WAAW,GAAG,iBAAiB,GAAG,iBAAiB,CAAA;IAC9E,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;CACnC;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,UAAU,EAAE,iBAAiB,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,wBAAwB;IACxC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC,CAAA;IACpE,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,KAAK,IAAI,CAAA;CACpD;AAuID,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,YAAY,CAAA;AAEtF,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,kBAAkB,CAAA;IACzB,aAAa,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CA4BlE;AAQD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE,CASjE;AAoCD,wBAAgB,aAAa,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,CAAC,GAClE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAYlD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAa1F;AAwDD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,UAAU,CA+B/E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elsium-ai/gateway",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Multi-provider LLM gateway for ElsiumAI",
5
5
  "license": "MIT",
6
6
  "author": "Eric Utrera <ebutrera9103@gmail.com>",
@@ -26,7 +26,7 @@
26
26
  "dev": "bun --watch src/index.ts"
27
27
  },
28
28
  "dependencies": {
29
- "@elsium-ai/core": "^0.2.2",
29
+ "@elsium-ai/core": "^0.2.3",
30
30
  "zod": "^3.24.0"
31
31
  },
32
32
  "devDependencies": {