@agentuity/runtime 0.0.35 → 0.0.36

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/_config.d.ts CHANGED
@@ -58,4 +58,10 @@ export declare function getCLIVersion(): string;
58
58
  * @returns string
59
59
  */
60
60
  export declare function getEnvironment(): string;
61
+ /**
62
+ * Returns true if the AGENTUITY_SDK_KEY is set
63
+ *
64
+ * @returns boolean
65
+ */
66
+ export declare function isAuthenticated(): boolean;
61
67
  //# sourceMappingURL=_config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_config.d.ts","sourceRoot":"","sources":["../src/_config.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC"}
1
+ {"version":3,"file":"_config.d.ts","sourceRoot":"","sources":["../src/_config.ts"],"names":[],"mappings":"AAYA;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
package/dist/_server.d.ts CHANGED
@@ -13,5 +13,5 @@ export declare function getTracer(): Tracer | null;
13
13
  * called before the createApp is called for it to be added.
14
14
  */
15
15
  export declare function addSpanProcessor(processor: SpanProcessor): void;
16
- export declare const createServer: <E extends Env>(app: Hono<E>, _config?: AppConfig) => Bun.Server<BunWebSocketData>;
16
+ export declare const createServer: <E extends Env>(app: Hono<E>, config?: AppConfig) => Bun.Server<BunWebSocketData>;
17
17
  //# sourceMappingURL=_server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.d.ts","sourceRoot":"","sources":["../src/_server.ts"],"names":[],"mappings":"AACA,OAAO,EAKN,KAAK,MAAM,EAGX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAInE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAavC,wBAAgB,SAAS,wCAExB;AAED,wBAAgB,MAAM,4DAErB;AAED,wBAAgB,SAAS,kBAExB;AAED,wBAAgB,SAAS,kBAExB;AAcD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,QAExD;AA2CD,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,SAAS,iCAmJ5E,CAAC"}
1
+ {"version":3,"file":"_server.d.ts","sourceRoot":"","sources":["../src/_server.ts"],"names":[],"mappings":"AACA,OAAO,EAKN,KAAK,MAAM,EAGX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAInE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAcvC,wBAAgB,SAAS,wCAExB;AAED,wBAAgB,MAAM,4DAErB;AAED,wBAAgB,SAAS,kBAExB;AAED,wBAAgB,SAAS,kBAExB;AAcD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,aAAa,QAExD;AA2CD,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,SAAS,iCAwJ3E,CAAC"}
@@ -1,2 +1,4 @@
1
+ import type { AppConfig } from './app';
2
+ export declare function createServices(config?: AppConfig): void;
1
3
  export declare function registerServices(o: any): void;
2
4
  //# sourceMappingURL=_services.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_services.d.ts","sourceRoot":"","sources":["../src/_services.ts"],"names":[],"mappings":"AA8IA,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,GAAG,QAqBtC"}
1
+ {"version":3,"file":"_services.d.ts","sourceRoot":"","sources":["../src/_services.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAsIvC,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,SAAS,QAkChD;AAGD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,GAAG,QAqBtC"}
@@ -0,0 +1,26 @@
1
+ import type { KeyValueStorage, ObjectStorage, StreamStorage, VectorStorage, DataResult, KeyValueStorageSetParams, ObjectResult, ObjectStorePutParams, CreatePublicURLParams, Stream, CreateStreamProps, ListStreamsParams, ListStreamsResponse, VectorUpsertParams, VectorUpsertResult, VectorResult, VectorSearchResultWithDocument, VectorSearchParams, VectorSearchResult } from '@agentuity/core';
2
+ export declare class UnauthenticatedKeyValueStorage implements KeyValueStorage {
3
+ get<T>(_name: string, _key: string): Promise<DataResult<T>>;
4
+ set<T = unknown>(_name: string, _key: string, _value: T, _params?: KeyValueStorageSetParams): Promise<void>;
5
+ delete(_name: string, _key: string): Promise<void>;
6
+ }
7
+ export declare class UnauthenticatedObjectStorage implements ObjectStorage {
8
+ get(_bucket: string, _key: string): Promise<ObjectResult>;
9
+ put(_bucket: string, _key: string, _data: Uint8Array | ArrayBuffer | ReadableStream, _params?: ObjectStorePutParams): Promise<void>;
10
+ delete(_bucket: string, _key: string): Promise<boolean>;
11
+ createPublicURL(_bucket: string, _key: string, _params?: CreatePublicURLParams): Promise<string>;
12
+ }
13
+ export declare class UnauthenticatedStreamStorage implements StreamStorage {
14
+ create(_name: string, _props?: CreateStreamProps): Promise<Stream>;
15
+ list(_params?: ListStreamsParams): Promise<ListStreamsResponse>;
16
+ delete(_id: string): Promise<void>;
17
+ }
18
+ export declare class UnauthenticatedVectorStorage implements VectorStorage {
19
+ upsert(_name: string, ..._documents: VectorUpsertParams[]): Promise<VectorUpsertResult[]>;
20
+ get<T extends Record<string, unknown> = Record<string, unknown>>(_name: string, _key: string): Promise<VectorResult<T>>;
21
+ getMany<T extends Record<string, unknown> = Record<string, unknown>>(_name: string, ..._keys: string[]): Promise<Map<string, VectorSearchResultWithDocument<T>>>;
22
+ search<T extends Record<string, unknown> = Record<string, unknown>>(_name: string, _params: VectorSearchParams<T>): Promise<VectorSearchResult<T>[]>;
23
+ delete(_name: string, ..._keys: string[]): Promise<number>;
24
+ exists(_name: string): Promise<boolean>;
25
+ }
26
+ //# sourceMappingURL=_unauthenticated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_unauthenticated.d.ts","sourceRoot":"","sources":["../src/_unauthenticated.ts"],"names":[],"mappings":"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"}
package/dist/app.d.ts CHANGED
@@ -2,12 +2,22 @@ import { type Env as HonoEnv, Hono } from 'hono';
2
2
  import { cors } from 'hono/cors';
3
3
  import type { Logger } from './logger';
4
4
  import { type Meter, type Tracer } from '@opentelemetry/api';
5
+ import { type KeyValueStorage, type ObjectStorage, type StreamStorage, type VectorStorage } from '@agentuity/core';
5
6
  type CorsOptions = Parameters<typeof cors>[0];
6
7
  export interface AppConfig {
7
8
  /**
8
9
  * Override the default cors settings
9
10
  */
10
11
  cors?: CorsOptions;
12
+ /**
13
+ * Override the default services
14
+ */
15
+ services?: {
16
+ keyvalue?: KeyValueStorage;
17
+ object?: ObjectStorage;
18
+ stream?: StreamStorage;
19
+ vector?: VectorStorage;
20
+ };
11
21
  }
12
22
  export interface Variables {
13
23
  logger: Logger;
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,IAAI,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE7D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9C,MAAM,WAAW,SAAS;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,GAAI,SAAQ,OAAO;IACnC,SAAS,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS;;;;EAK3C"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,IAAI,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,MAAM,iBAAiB,CAAC;AAEzB,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9C,MAAM,WAAW,SAAS;IACzB;;OAEG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,MAAM,CAAC,EAAE,aAAa,CAAC;KACvB,CAAC;CACF;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,GAAI,SAAQ,OAAO;IACnC,SAAS,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS;;;;EAK3C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/runtime",
3
- "version": "0.0.35",
3
+ "version": "0.0.36",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./dist/index.d.ts",
@@ -23,8 +23,8 @@
23
23
  "prepublishOnly": "bun run clean && bun run build"
24
24
  },
25
25
  "dependencies": {
26
- "@agentuity/core": "0.0.31",
27
- "@agentuity/server": "0.0.31",
26
+ "@agentuity/core": "0.0.35",
27
+ "@agentuity/server": "0.0.35",
28
28
  "@opentelemetry/api": "^1.9.0",
29
29
  "@opentelemetry/api-logs": "^0.207.0",
30
30
  "@opentelemetry/auto-instrumentations-node": "^0.66.0",
package/src/_config.ts CHANGED
@@ -99,3 +99,12 @@ export function getCLIVersion(): string {
99
99
  export function getEnvironment(): string {
100
100
  return process.env.AGENTUITY_ENVIRONMENT || process.env.NODE_ENV || 'development';
101
101
  }
102
+
103
+ /**
104
+ * Returns true if the AGENTUITY_SDK_KEY is set
105
+ *
106
+ * @returns boolean
107
+ */
108
+ export function isAuthenticated(): boolean {
109
+ return !!process.env.AGENTUITY_SDK_KEY;
110
+ }
package/src/_server.ts CHANGED
@@ -24,6 +24,7 @@ import type { Logger } from './logger';
24
24
  import { isIdle } from './_idle';
25
25
  import * as runtimeConfig from './_config';
26
26
  import { inAgentContext, getAgentContext } from './_context';
27
+ import { createServices } from './_services';
27
28
 
28
29
  let globalServerInstance: Bun.Server<BunWebSocketData> | null = null;
29
30
 
@@ -110,11 +111,12 @@ function registerAgentuitySpanProcessor() {
110
111
  addSpanProcessor(new RegisterAgentSpanProcessor());
111
112
  }
112
113
 
113
- export const createServer = <E extends Env>(app: Hono<E>, _config?: AppConfig) => {
114
+ export const createServer = <E extends Env>(app: Hono<E>, config?: AppConfig) => {
114
115
  if (globalServerInstance) {
115
116
  return globalServerInstance;
116
117
  }
117
118
 
119
+ createServices(config);
118
120
  registerAgentuitySpanProcessor();
119
121
 
120
122
  const server = Bun.serve({
@@ -140,6 +142,10 @@ export const createServer = <E extends Env>(app: Hono<E>, _config?: AppConfig) =
140
142
  otel.logger.error('HTTP Error: %s (%d)', error.cause, error.status);
141
143
  return error.getResponse();
142
144
  }
145
+ if (error.name === 'UnauthenticatedError') {
146
+ otel.logger.error('Unauthenticated Error: %s', error.message);
147
+ return new Response(error.message, { status: 501 });
148
+ }
143
149
  if (
144
150
  error instanceof ServiceException ||
145
151
  ('statusCode' in error && typeof error.statusCode === 'number')
@@ -180,8 +186,8 @@ export const createServer = <E extends Env>(app: Hono<E>, _config?: AppConfig) =
180
186
  app.use(
181
187
  '*',
182
188
  cors({
183
- origin: _config?.cors?.origin ?? ((origin) => origin),
184
- allowHeaders: _config?.cors?.allowHeaders ?? [
189
+ origin: config?.cors?.origin ?? ((origin) => origin),
190
+ allowHeaders: config?.cors?.allowHeaders ?? [
185
191
  'Content-Type',
186
192
  'Authorization',
187
193
  'Accept',
@@ -192,7 +198,7 @@ export const createServer = <E extends Env>(app: Hono<E>, _config?: AppConfig) =
192
198
  exposeHeaders: ['Content-Length'],
193
199
  maxAge: 600,
194
200
  credentials: true,
195
- ...(_config?.cors ?? {}), // allow the app config to override
201
+ ...(config?.cors ?? {}), // allow the app config to override
196
202
  })
197
203
  );
198
204
 
package/src/_services.ts CHANGED
@@ -4,6 +4,10 @@ import {
4
4
  ObjectStorageService,
5
5
  StreamStorageService,
6
6
  VectorStorageService,
7
+ type KeyValueStorage,
8
+ type ObjectStorage,
9
+ type StreamStorage,
10
+ type VectorStorage,
7
11
  type ListStreamsResponse,
8
12
  type VectorUpsertResult,
9
13
  type VectorSearchResult,
@@ -11,7 +15,14 @@ import {
11
15
  import { createServerFetchAdapter, getServiceUrls } from '@agentuity/server';
12
16
  import { injectTraceContextToHeaders } from './otel/http';
13
17
  import { getLogger, getTracer } from './_server';
14
- import { getSDKVersion } from './_config';
18
+ import { getSDKVersion, isAuthenticated } from './_config';
19
+ import type { AppConfig } from './app';
20
+ import {
21
+ UnauthenticatedKeyValueStorage,
22
+ UnauthenticatedObjectStorage,
23
+ UnauthenticatedStreamStorage,
24
+ UnauthenticatedVectorStorage,
25
+ } from './_unauthenticated';
15
26
 
16
27
  const userAgent = `Agentuity SDK/${getSDKVersion()}`;
17
28
  const bearerKey = `Bearer ${process.env.AGENTUITY_SDK_KEY}`;
@@ -134,10 +145,46 @@ const adapter = createServerFetchAdapter({
134
145
  },
135
146
  });
136
147
 
137
- const kv = new KeyValueStorageService(kvBaseUrl, adapter);
138
- const objectStore = new ObjectStorageService(objectBaseUrl, adapter);
139
- const stream = new StreamStorageService(streamBaseUrl, adapter);
140
- const vector = new VectorStorageService(vectorBaseUrl, adapter);
148
+ let kv: KeyValueStorage;
149
+ let objectStore: ObjectStorage;
150
+ let stream: StreamStorage;
151
+ let vector: VectorStorage;
152
+
153
+ export function createServices(config?: AppConfig) {
154
+ const authenticated = isAuthenticated();
155
+
156
+ if (config?.services?.keyvalue) {
157
+ kv = config.services.keyvalue;
158
+ } else if (authenticated) {
159
+ kv = new KeyValueStorageService(kvBaseUrl, adapter);
160
+ } else {
161
+ kv = new UnauthenticatedKeyValueStorage();
162
+ }
163
+
164
+ if (config?.services?.object) {
165
+ objectStore = config.services.object;
166
+ } else if (authenticated) {
167
+ objectStore = new ObjectStorageService(objectBaseUrl, adapter);
168
+ } else {
169
+ objectStore = new UnauthenticatedObjectStorage();
170
+ }
171
+
172
+ if (config?.services?.stream) {
173
+ stream = config.services.stream;
174
+ } else if (authenticated) {
175
+ stream = new StreamStorageService(streamBaseUrl, adapter);
176
+ } else {
177
+ stream = new UnauthenticatedStreamStorage();
178
+ }
179
+
180
+ if (config?.services?.vector) {
181
+ vector = config.services.vector;
182
+ } else if (authenticated) {
183
+ vector = new VectorStorageService(vectorBaseUrl, adapter);
184
+ } else {
185
+ vector = new UnauthenticatedVectorStorage();
186
+ }
187
+ }
141
188
 
142
189
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
143
190
  export function registerServices(o: any) {
@@ -0,0 +1,126 @@
1
+ import type {
2
+ KeyValueStorage,
3
+ ObjectStorage,
4
+ StreamStorage,
5
+ VectorStorage,
6
+ DataResult,
7
+ KeyValueStorageSetParams,
8
+ ObjectResult,
9
+ ObjectStorePutParams,
10
+ CreatePublicURLParams,
11
+ Stream,
12
+ CreateStreamProps,
13
+ ListStreamsParams,
14
+ ListStreamsResponse,
15
+ VectorUpsertParams,
16
+ VectorUpsertResult,
17
+ VectorResult,
18
+ VectorSearchResultWithDocument,
19
+ VectorSearchParams,
20
+ VectorSearchResult,
21
+ } from '@agentuity/core';
22
+
23
+ const UNAUTHENTICATED_ERROR =
24
+ 'You must authenticate to use Agentuity services. Set the AGENTUITY_SDK_KEY environment variable or provide custom service implementations in your app config.';
25
+
26
+ class UnauthenticatedError extends Error {
27
+ constructor() {
28
+ super(UNAUTHENTICATED_ERROR);
29
+ this.name = 'UnauthenticatedError';
30
+ }
31
+ }
32
+
33
+ export class UnauthenticatedKeyValueStorage implements KeyValueStorage {
34
+ async get<T>(_name: string, _key: string): Promise<DataResult<T>> {
35
+ throw new UnauthenticatedError();
36
+ }
37
+
38
+ async set<T = unknown>(
39
+ _name: string,
40
+ _key: string,
41
+ _value: T,
42
+ _params?: KeyValueStorageSetParams
43
+ ): Promise<void> {
44
+ throw new UnauthenticatedError();
45
+ }
46
+
47
+ async delete(_name: string, _key: string): Promise<void> {
48
+ throw new UnauthenticatedError();
49
+ }
50
+ }
51
+
52
+ export class UnauthenticatedObjectStorage implements ObjectStorage {
53
+ async get(_bucket: string, _key: string): Promise<ObjectResult> {
54
+ throw new UnauthenticatedError();
55
+ }
56
+
57
+ async put(
58
+ _bucket: string,
59
+ _key: string,
60
+ _data: Uint8Array | ArrayBuffer | ReadableStream,
61
+ _params?: ObjectStorePutParams
62
+ ): Promise<void> {
63
+ throw new UnauthenticatedError();
64
+ }
65
+
66
+ async delete(_bucket: string, _key: string): Promise<boolean> {
67
+ throw new UnauthenticatedError();
68
+ }
69
+
70
+ async createPublicURL(
71
+ _bucket: string,
72
+ _key: string,
73
+ _params?: CreatePublicURLParams
74
+ ): Promise<string> {
75
+ throw new UnauthenticatedError();
76
+ }
77
+ }
78
+
79
+ export class UnauthenticatedStreamStorage implements StreamStorage {
80
+ async create(_name: string, _props?: CreateStreamProps): Promise<Stream> {
81
+ throw new UnauthenticatedError();
82
+ }
83
+
84
+ async list(_params?: ListStreamsParams): Promise<ListStreamsResponse> {
85
+ throw new UnauthenticatedError();
86
+ }
87
+
88
+ async delete(_id: string): Promise<void> {
89
+ throw new UnauthenticatedError();
90
+ }
91
+ }
92
+
93
+ export class UnauthenticatedVectorStorage implements VectorStorage {
94
+ async upsert(_name: string, ..._documents: VectorUpsertParams[]): Promise<VectorUpsertResult[]> {
95
+ throw new UnauthenticatedError();
96
+ }
97
+
98
+ async get<T extends Record<string, unknown> = Record<string, unknown>>(
99
+ _name: string,
100
+ _key: string
101
+ ): Promise<VectorResult<T>> {
102
+ throw new UnauthenticatedError();
103
+ }
104
+
105
+ async getMany<T extends Record<string, unknown> = Record<string, unknown>>(
106
+ _name: string,
107
+ ..._keys: string[]
108
+ ): Promise<Map<string, VectorSearchResultWithDocument<T>>> {
109
+ throw new UnauthenticatedError();
110
+ }
111
+
112
+ async search<T extends Record<string, unknown> = Record<string, unknown>>(
113
+ _name: string,
114
+ _params: VectorSearchParams<T>
115
+ ): Promise<VectorSearchResult<T>[]> {
116
+ throw new UnauthenticatedError();
117
+ }
118
+
119
+ async delete(_name: string, ..._keys: string[]): Promise<number> {
120
+ throw new UnauthenticatedError();
121
+ }
122
+
123
+ async exists(_name: string): Promise<boolean> {
124
+ throw new UnauthenticatedError();
125
+ }
126
+ }
package/src/app.ts CHANGED
@@ -3,6 +3,12 @@ import { cors } from 'hono/cors';
3
3
  import { createServer, getLogger } from './_server';
4
4
  import type { Logger } from './logger';
5
5
  import { type Meter, type Tracer } from '@opentelemetry/api';
6
+ import {
7
+ type KeyValueStorage,
8
+ type ObjectStorage,
9
+ type StreamStorage,
10
+ type VectorStorage,
11
+ } from '@agentuity/core';
6
12
 
7
13
  type CorsOptions = Parameters<typeof cors>[0];
8
14
 
@@ -11,6 +17,15 @@ export interface AppConfig {
11
17
  * Override the default cors settings
12
18
  */
13
19
  cors?: CorsOptions;
20
+ /**
21
+ * Override the default services
22
+ */
23
+ services?: {
24
+ keyvalue?: KeyValueStorage;
25
+ object?: ObjectStorage;
26
+ stream?: StreamStorage;
27
+ vector?: VectorStorage;
28
+ };
14
29
  }
15
30
 
16
31
  export interface Variables {