ai-props 2.1.3 → 2.4.0
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/.dev.vars +2 -0
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +20 -0
- package/README.md +2 -0
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +4 -4
- package/dist/ai.js.map +1 -1
- package/dist/cascade.d.ts +329 -0
- package/dist/cascade.d.ts.map +1 -0
- package/dist/cascade.js +522 -0
- package/dist/cascade.js.map +1 -0
- package/dist/client.d.ts +233 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +191 -0
- package/dist/client.js.map +1 -0
- package/dist/durable-cascade.d.ts +280 -0
- package/dist/durable-cascade.d.ts.map +1 -0
- package/dist/durable-cascade.js +469 -0
- package/dist/durable-cascade.js.map +1 -0
- package/dist/event-bridge.d.ts +257 -0
- package/dist/event-bridge.d.ts.map +1 -0
- package/dist/event-bridge.js +317 -0
- package/dist/event-bridge.js.map +1 -0
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +12 -6
- package/dist/generate.js.map +1 -1
- package/dist/hoc.d.ts.map +1 -1
- package/dist/hoc.js +13 -13
- package/dist/hoc.js.map +1 -1
- package/dist/hono-jsx.d.ts +208 -0
- package/dist/hono-jsx.d.ts.map +1 -0
- package/dist/hono-jsx.js +459 -0
- package/dist/hono-jsx.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mdx-types.d.ts +152 -0
- package/dist/mdx-types.d.ts.map +1 -0
- package/dist/mdx-types.js +9 -0
- package/dist/mdx-types.js.map +1 -0
- package/dist/mdx-utils.d.ts +106 -0
- package/dist/mdx-utils.d.ts.map +1 -0
- package/dist/mdx-utils.js +384 -0
- package/dist/mdx-utils.js.map +1 -0
- package/dist/mdx.d.ts +230 -0
- package/dist/mdx.d.ts.map +1 -0
- package/dist/mdx.js +820 -0
- package/dist/mdx.js.map +1 -0
- package/dist/rpc.d.ts +313 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +359 -0
- package/dist/rpc.js.map +1 -0
- package/dist/streaming.d.ts +199 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +402 -0
- package/dist/streaming.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +11 -13
- package/dist/validate.js.map +1 -1
- package/dist/worker.d.ts +270 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +405 -0
- package/dist/worker.js.map +1 -0
- package/package.json +39 -13
- package/src/ai.ts +12 -31
- package/src/cascade.ts +795 -0
- package/src/client.ts +440 -0
- package/src/durable-cascade.ts +743 -0
- package/src/event-bridge.ts +478 -0
- package/src/generate.ts +14 -12
- package/src/hoc.ts +15 -19
- package/src/hono-jsx.ts +675 -0
- package/src/index.ts +30 -0
- package/src/mdx-types.ts +169 -0
- package/src/mdx-utils.ts +437 -0
- package/src/mdx.ts +1008 -0
- package/src/rpc.ts +614 -0
- package/src/streaming.ts +618 -0
- package/src/validate.ts +15 -29
- package/src/worker.ts +547 -0
- package/test/cascade.test.ts +338 -0
- package/test/durable-cascade.test.ts +319 -0
- package/test/event-bridge.test.ts +351 -0
- package/test/generate.test.ts +6 -16
- package/test/mdx.test.ts +817 -0
- package/test/worker/capnweb-rpc.test.ts +1084 -0
- package/test/worker/full-flow.integration.test.ts +1463 -0
- package/test/worker/hono-jsx.test.ts +1258 -0
- package/test/worker/mdx-parsing.test.ts +1148 -0
- package/test/worker/setup.ts +56 -0
- package/test/worker.test.ts +595 -0
- package/tsconfig.json +2 -1
- package/vitest.config.js +6 -0
- package/vitest.config.ts +15 -1
- package/vitest.workers.config.ts +58 -0
- package/wrangler.jsonc +27 -0
- package/LICENSE +0 -21
- package/src/ai.js +0 -198
- package/src/cache.js +0 -182
- package/src/generate.js +0 -220
- package/src/hoc.js +0 -235
- package/src/index.js +0 -20
- package/src/types.js +0 -6
- package/src/validate.js +0 -252
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RPC Client for AI Props
|
|
3
|
+
*
|
|
4
|
+
* Provides a typed RPC client that connects to the deployed
|
|
5
|
+
* ai-props worker using rpc.do for remote procedure calls.
|
|
6
|
+
*
|
|
7
|
+
* This module is for client-side usage - it provides types and
|
|
8
|
+
* helpers for consuming the PropsService worker from other workers
|
|
9
|
+
* or client applications.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { createPropsClient } from 'ai-props/client'
|
|
14
|
+
*
|
|
15
|
+
* const client = createPropsClient('https://ai-props.workers.dev')
|
|
16
|
+
* const result = await client.generate({
|
|
17
|
+
* schema: { title: 'Page title', description: 'Page description' },
|
|
18
|
+
* context: { topic: 'AI' }
|
|
19
|
+
* })
|
|
20
|
+
* console.log(result.props)
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
export type { PropSchema, GeneratePropsOptions, GeneratePropsResult, AIPropsConfig, PropsCache, PropsCacheEntry, ValidationResult, ValidationError, UseAIPropsResult, UseAIPropsOptions, AIComponentOptions, AIComponent, InferProps, } from './types.js';
|
|
26
|
+
export type { PropsServiceCoreInterface, PropsClientOptions, PropsClientInstance, PropsRPCErrorCode, PropsRPCError, RetryConfig, RetryBackoff, PropsServiceBinding, ExtractService, } from './rpc.js';
|
|
27
|
+
export { isPropsRPCError, withRetry, calculateRetryDelay, DEFAULT_RETRY_CONFIG } from './rpc.js';
|
|
28
|
+
/**
|
|
29
|
+
* Configuration for the AI Props HTTP RPC client
|
|
30
|
+
*/
|
|
31
|
+
export interface PropsHttpClientConfig {
|
|
32
|
+
/** RPC endpoint URL (default: https://ai-props.do) */
|
|
33
|
+
url?: string;
|
|
34
|
+
/** Authentication token */
|
|
35
|
+
token?: string;
|
|
36
|
+
/** Request timeout in milliseconds (default: 30000) */
|
|
37
|
+
timeout?: number;
|
|
38
|
+
/** Custom headers to include in requests */
|
|
39
|
+
headers?: Record<string, string>;
|
|
40
|
+
}
|
|
41
|
+
import type { PropSchema, GeneratePropsOptions, GeneratePropsResult, AIPropsConfig, PropsCacheEntry, ValidationResult } from './types.js';
|
|
42
|
+
/**
|
|
43
|
+
* PropsClientAPI - Type-safe interface for the AI Props RPC client
|
|
44
|
+
*
|
|
45
|
+
* This interface mirrors all public methods on PropsServiceCore so that
|
|
46
|
+
* the RPC client provides full type safety when calling remote methods.
|
|
47
|
+
*/
|
|
48
|
+
export interface PropsClientAPI {
|
|
49
|
+
/**
|
|
50
|
+
* Generate props using AI
|
|
51
|
+
*/
|
|
52
|
+
generate<T = Record<string, unknown>>(options: GeneratePropsOptions): Promise<GeneratePropsResult<T>>;
|
|
53
|
+
/**
|
|
54
|
+
* Generate props synchronously from cache
|
|
55
|
+
* @throws {Error} If props are not in cache
|
|
56
|
+
*/
|
|
57
|
+
getSync<T = Record<string, unknown>>(schema: PropSchema, context?: Record<string, unknown>): Promise<T>;
|
|
58
|
+
/**
|
|
59
|
+
* Pre-generate props for warming the cache
|
|
60
|
+
*/
|
|
61
|
+
prefetch(requests: GeneratePropsOptions[]): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Generate multiple prop sets in parallel
|
|
64
|
+
*/
|
|
65
|
+
generateMany<T = Record<string, unknown>>(requests: GeneratePropsOptions[]): Promise<GeneratePropsResult<T>[]>;
|
|
66
|
+
/**
|
|
67
|
+
* Merge partial props with generated props
|
|
68
|
+
*/
|
|
69
|
+
mergeWithGenerated<T extends Record<string, unknown>>(schema: PropSchema, partialProps: Partial<T>, options?: Omit<GeneratePropsOptions, 'schema' | 'context'>): Promise<T>;
|
|
70
|
+
/**
|
|
71
|
+
* Configure global AI props settings
|
|
72
|
+
*/
|
|
73
|
+
configure(config: Partial<AIPropsConfig>): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Get current configuration
|
|
76
|
+
*/
|
|
77
|
+
getConfig(): Promise<AIPropsConfig>;
|
|
78
|
+
/**
|
|
79
|
+
* Reset configuration to defaults
|
|
80
|
+
*/
|
|
81
|
+
resetConfig(): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Get cached props by key
|
|
84
|
+
*/
|
|
85
|
+
getCached<T>(key: string): Promise<PropsCacheEntry<T> | undefined>;
|
|
86
|
+
/**
|
|
87
|
+
* Set props in cache
|
|
88
|
+
*/
|
|
89
|
+
setCached<T>(key: string, props: T): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Delete cached entry by key
|
|
92
|
+
*/
|
|
93
|
+
deleteCached(key: string): Promise<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* Clear all cached props
|
|
96
|
+
*/
|
|
97
|
+
clearCache(): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Get cache size
|
|
100
|
+
*/
|
|
101
|
+
getCacheSize(): Promise<number>;
|
|
102
|
+
/**
|
|
103
|
+
* Create a cache key from schema and context
|
|
104
|
+
*/
|
|
105
|
+
createCacheKey(schema: PropSchema, context?: Record<string, unknown>): Promise<string>;
|
|
106
|
+
/**
|
|
107
|
+
* Configure cache TTL
|
|
108
|
+
*/
|
|
109
|
+
configureCache(ttl: number): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Validate props against a schema
|
|
112
|
+
*/
|
|
113
|
+
validate(props: Record<string, unknown>, schema: PropSchema): Promise<ValidationResult>;
|
|
114
|
+
/**
|
|
115
|
+
* Check if all required props are present
|
|
116
|
+
*/
|
|
117
|
+
hasRequired(props: Record<string, unknown>, required: string[]): Promise<boolean>;
|
|
118
|
+
/**
|
|
119
|
+
* Get list of missing props according to schema
|
|
120
|
+
*/
|
|
121
|
+
getMissing(props: Record<string, unknown>, schema: PropSchema): Promise<string[]>;
|
|
122
|
+
/**
|
|
123
|
+
* Check if props are complete according to schema
|
|
124
|
+
*/
|
|
125
|
+
isComplete(props: Record<string, unknown>, schema: PropSchema): Promise<boolean>;
|
|
126
|
+
/**
|
|
127
|
+
* Sanitize props by removing unknown keys
|
|
128
|
+
*/
|
|
129
|
+
sanitize<T extends Record<string, unknown>>(props: T, schema: PropSchema): Promise<Partial<T>>;
|
|
130
|
+
/**
|
|
131
|
+
* Merge props with default values
|
|
132
|
+
*/
|
|
133
|
+
mergeDefaults<T extends Record<string, unknown>>(props: Partial<T>, defaults: Partial<T>, schema: PropSchema): Promise<Partial<T>>;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Create a typed HTTP RPC client for the ai-props worker
|
|
137
|
+
*
|
|
138
|
+
* This client communicates with the deployed ai-props worker over HTTP,
|
|
139
|
+
* sending JSON-RPC requests to the /rpc endpoint.
|
|
140
|
+
*
|
|
141
|
+
* @param config - Client configuration options
|
|
142
|
+
* @returns A typed RPC client with all PropsService methods
|
|
143
|
+
*
|
|
144
|
+
* @example Basic usage
|
|
145
|
+
* ```ts
|
|
146
|
+
* import { createPropsClient } from 'ai-props/client'
|
|
147
|
+
*
|
|
148
|
+
* const client = createPropsClient({
|
|
149
|
+
* url: 'https://ai-props.workers.dev',
|
|
150
|
+
* token: 'my-api-token'
|
|
151
|
+
* })
|
|
152
|
+
*
|
|
153
|
+
* // Generate props
|
|
154
|
+
* const result = await client.generate({
|
|
155
|
+
* schema: { title: 'Page title', description: 'Description' },
|
|
156
|
+
* context: { topic: 'Technology' }
|
|
157
|
+
* })
|
|
158
|
+
* console.log(result.props)
|
|
159
|
+
*
|
|
160
|
+
* // Validate props
|
|
161
|
+
* const validation = await client.validate(
|
|
162
|
+
* { title: 'Hello' },
|
|
163
|
+
* { title: 'string', description: 'string' }
|
|
164
|
+
* )
|
|
165
|
+
* console.log(validation.valid) // false - missing description
|
|
166
|
+
* ```
|
|
167
|
+
*
|
|
168
|
+
* @example With custom headers
|
|
169
|
+
* ```ts
|
|
170
|
+
* const client = createPropsClient({
|
|
171
|
+
* url: 'https://ai-props.workers.dev',
|
|
172
|
+
* headers: {
|
|
173
|
+
* 'X-Custom-Header': 'value',
|
|
174
|
+
* },
|
|
175
|
+
* timeout: 60000, // 60 seconds
|
|
176
|
+
* })
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export declare function createPropsClient(config?: PropsHttpClientConfig): PropsClientAPI;
|
|
180
|
+
/**
|
|
181
|
+
* Create a typed client from a Cloudflare Service Binding
|
|
182
|
+
*
|
|
183
|
+
* Use this when you have a service binding to the ai-props worker
|
|
184
|
+
* in your wrangler.jsonc configuration.
|
|
185
|
+
*
|
|
186
|
+
* @param binding - The service binding from your env
|
|
187
|
+
* @returns A typed client interface
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```ts
|
|
191
|
+
* // wrangler.jsonc
|
|
192
|
+
* // {
|
|
193
|
+
* // "services": [
|
|
194
|
+
* // { "binding": "AI_PROPS", "service": "ai-props" }
|
|
195
|
+
* // ]
|
|
196
|
+
* // }
|
|
197
|
+
*
|
|
198
|
+
* import { createServiceClient } from 'ai-props/client'
|
|
199
|
+
* import type { PropsService } from 'ai-props/worker'
|
|
200
|
+
*
|
|
201
|
+
* interface Env {
|
|
202
|
+
* AI_PROPS: Service<PropsService>
|
|
203
|
+
* }
|
|
204
|
+
*
|
|
205
|
+
* export default {
|
|
206
|
+
* async fetch(request: Request, env: Env) {
|
|
207
|
+
* const client = createServiceClient(env.AI_PROPS)
|
|
208
|
+
* const result = await client.generate({
|
|
209
|
+
* schema: { title: 'Page title' }
|
|
210
|
+
* })
|
|
211
|
+
* return Response.json(result)
|
|
212
|
+
* }
|
|
213
|
+
* }
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
export declare function createServiceClient<T extends {
|
|
217
|
+
getService(): unknown;
|
|
218
|
+
}>(binding: T): ReturnType<T['getService']>;
|
|
219
|
+
/**
|
|
220
|
+
* Default client instance connected to the production ai-props worker
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```ts
|
|
224
|
+
* import client from 'ai-props/client'
|
|
225
|
+
*
|
|
226
|
+
* const result = await client.generate({
|
|
227
|
+
* schema: { title: 'Page title' }
|
|
228
|
+
* })
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
declare const client: PropsClientAPI;
|
|
232
|
+
export default client;
|
|
233
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RPC Client for AI Props
|
|
3
|
+
*
|
|
4
|
+
* Provides a typed RPC client that connects to the deployed
|
|
5
|
+
* ai-props worker using rpc.do for remote procedure calls.
|
|
6
|
+
*
|
|
7
|
+
* This module is for client-side usage - it provides types and
|
|
8
|
+
* helpers for consuming the PropsService worker from other workers
|
|
9
|
+
* or client applications.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { createPropsClient } from 'ai-props/client'
|
|
14
|
+
*
|
|
15
|
+
* const client = createPropsClient('https://ai-props.workers.dev')
|
|
16
|
+
* const result = await client.generate({
|
|
17
|
+
* schema: { title: 'Page title', description: 'Page description' },
|
|
18
|
+
* context: { topic: 'AI' }
|
|
19
|
+
* })
|
|
20
|
+
* console.log(result.props)
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @packageDocumentation
|
|
24
|
+
*/
|
|
25
|
+
export { isPropsRPCError, withRetry, calculateRetryDelay, DEFAULT_RETRY_CONFIG } from './rpc.js';
|
|
26
|
+
// ==================== HTTP Client Implementation ====================
|
|
27
|
+
/** Default URL for the ai-props worker */
|
|
28
|
+
const DEFAULT_URL = 'https://ai-props.do';
|
|
29
|
+
/**
|
|
30
|
+
* Create a typed HTTP RPC client for the ai-props worker
|
|
31
|
+
*
|
|
32
|
+
* This client communicates with the deployed ai-props worker over HTTP,
|
|
33
|
+
* sending JSON-RPC requests to the /rpc endpoint.
|
|
34
|
+
*
|
|
35
|
+
* @param config - Client configuration options
|
|
36
|
+
* @returns A typed RPC client with all PropsService methods
|
|
37
|
+
*
|
|
38
|
+
* @example Basic usage
|
|
39
|
+
* ```ts
|
|
40
|
+
* import { createPropsClient } from 'ai-props/client'
|
|
41
|
+
*
|
|
42
|
+
* const client = createPropsClient({
|
|
43
|
+
* url: 'https://ai-props.workers.dev',
|
|
44
|
+
* token: 'my-api-token'
|
|
45
|
+
* })
|
|
46
|
+
*
|
|
47
|
+
* // Generate props
|
|
48
|
+
* const result = await client.generate({
|
|
49
|
+
* schema: { title: 'Page title', description: 'Description' },
|
|
50
|
+
* context: { topic: 'Technology' }
|
|
51
|
+
* })
|
|
52
|
+
* console.log(result.props)
|
|
53
|
+
*
|
|
54
|
+
* // Validate props
|
|
55
|
+
* const validation = await client.validate(
|
|
56
|
+
* { title: 'Hello' },
|
|
57
|
+
* { title: 'string', description: 'string' }
|
|
58
|
+
* )
|
|
59
|
+
* console.log(validation.valid) // false - missing description
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @example With custom headers
|
|
63
|
+
* ```ts
|
|
64
|
+
* const client = createPropsClient({
|
|
65
|
+
* url: 'https://ai-props.workers.dev',
|
|
66
|
+
* headers: {
|
|
67
|
+
* 'X-Custom-Header': 'value',
|
|
68
|
+
* },
|
|
69
|
+
* timeout: 60000, // 60 seconds
|
|
70
|
+
* })
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
export function createPropsClient(config = {}) {
|
|
74
|
+
const url = config.url || DEFAULT_URL;
|
|
75
|
+
const timeout = config.timeout || 30000;
|
|
76
|
+
/**
|
|
77
|
+
* Make an RPC call to the remote service
|
|
78
|
+
*/
|
|
79
|
+
async function rpc(method, args = []) {
|
|
80
|
+
const controller = new AbortController();
|
|
81
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
82
|
+
try {
|
|
83
|
+
const response = await fetch(`${url}/rpc`, {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
headers: {
|
|
86
|
+
'Content-Type': 'application/json',
|
|
87
|
+
...(config.token && { Authorization: `Bearer ${config.token}` }),
|
|
88
|
+
...config.headers,
|
|
89
|
+
},
|
|
90
|
+
body: JSON.stringify({ method, args }),
|
|
91
|
+
signal: controller.signal,
|
|
92
|
+
});
|
|
93
|
+
if (!response.ok) {
|
|
94
|
+
const error = await response.json().catch(() => ({ error: 'Unknown error' }));
|
|
95
|
+
throw new Error(error.error || `RPC error: ${response.status}`);
|
|
96
|
+
}
|
|
97
|
+
const result = (await response.json());
|
|
98
|
+
if (result.error) {
|
|
99
|
+
throw new Error(result.error);
|
|
100
|
+
}
|
|
101
|
+
return result.result;
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
clearTimeout(timeoutId);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Build client with typed methods
|
|
108
|
+
return {
|
|
109
|
+
// Generation
|
|
110
|
+
generate: (options) => rpc('generate', [options]),
|
|
111
|
+
getSync: (schema, context) => rpc('getSync', [schema, context]),
|
|
112
|
+
prefetch: (requests) => rpc('prefetch', [requests]),
|
|
113
|
+
generateMany: (requests) => rpc('generateMany', [requests]),
|
|
114
|
+
mergeWithGenerated: (schema, partialProps, options) => rpc('mergeWithGenerated', [schema, partialProps, options]),
|
|
115
|
+
// Configuration
|
|
116
|
+
configure: (cfg) => rpc('configure', [cfg]),
|
|
117
|
+
getConfig: () => rpc('getConfig'),
|
|
118
|
+
resetConfig: () => rpc('resetConfig'),
|
|
119
|
+
// Cache
|
|
120
|
+
getCached: (key) => rpc('getCached', [key]),
|
|
121
|
+
setCached: (key, props) => rpc('setCached', [key, props]),
|
|
122
|
+
deleteCached: (key) => rpc('deleteCached', [key]),
|
|
123
|
+
clearCache: () => rpc('clearCache'),
|
|
124
|
+
getCacheSize: () => rpc('getCacheSize'),
|
|
125
|
+
createCacheKey: (schema, context) => rpc('createCacheKey', [schema, context]),
|
|
126
|
+
configureCache: (ttl) => rpc('configureCache', [ttl]),
|
|
127
|
+
// Validation
|
|
128
|
+
validate: (props, schema) => rpc('validate', [props, schema]),
|
|
129
|
+
hasRequired: (props, required) => rpc('hasRequired', [props, required]),
|
|
130
|
+
getMissing: (props, schema) => rpc('getMissing', [props, schema]),
|
|
131
|
+
isComplete: (props, schema) => rpc('isComplete', [props, schema]),
|
|
132
|
+
sanitize: (props, schema) => rpc('sanitize', [props, schema]),
|
|
133
|
+
mergeDefaults: (props, defaults, schema) => rpc('mergeDefaults', [props, defaults, schema]),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// ==================== Service Binding Client ====================
|
|
137
|
+
/**
|
|
138
|
+
* Create a typed client from a Cloudflare Service Binding
|
|
139
|
+
*
|
|
140
|
+
* Use this when you have a service binding to the ai-props worker
|
|
141
|
+
* in your wrangler.jsonc configuration.
|
|
142
|
+
*
|
|
143
|
+
* @param binding - The service binding from your env
|
|
144
|
+
* @returns A typed client interface
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```ts
|
|
148
|
+
* // wrangler.jsonc
|
|
149
|
+
* // {
|
|
150
|
+
* // "services": [
|
|
151
|
+
* // { "binding": "AI_PROPS", "service": "ai-props" }
|
|
152
|
+
* // ]
|
|
153
|
+
* // }
|
|
154
|
+
*
|
|
155
|
+
* import { createServiceClient } from 'ai-props/client'
|
|
156
|
+
* import type { PropsService } from 'ai-props/worker'
|
|
157
|
+
*
|
|
158
|
+
* interface Env {
|
|
159
|
+
* AI_PROPS: Service<PropsService>
|
|
160
|
+
* }
|
|
161
|
+
*
|
|
162
|
+
* export default {
|
|
163
|
+
* async fetch(request: Request, env: Env) {
|
|
164
|
+
* const client = createServiceClient(env.AI_PROPS)
|
|
165
|
+
* const result = await client.generate({
|
|
166
|
+
* schema: { title: 'Page title' }
|
|
167
|
+
* })
|
|
168
|
+
* return Response.json(result)
|
|
169
|
+
* }
|
|
170
|
+
* }
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
export function createServiceClient(binding) {
|
|
174
|
+
return binding.getService();
|
|
175
|
+
}
|
|
176
|
+
// ==================== Default Export ====================
|
|
177
|
+
/**
|
|
178
|
+
* Default client instance connected to the production ai-props worker
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```ts
|
|
182
|
+
* import client from 'ai-props/client'
|
|
183
|
+
*
|
|
184
|
+
* const result = await client.generate({
|
|
185
|
+
* schema: { title: 'Page title' }
|
|
186
|
+
* })
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
const client = createPropsClient();
|
|
190
|
+
export default client;
|
|
191
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|