@zdrops/ai-assistants-sdk 1.1.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/CHANGELOG.md ADDED
@@ -0,0 +1,61 @@
1
+ # Changelog
2
+
3
+ ## [1.1.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v1.0.0...ai-assistants-sdk-v1.1.0) (2026-05-01)
4
+
5
+
6
+ ### Features
7
+
8
+ * update npm registry configuration to public and remove GitHub registry references ([d001b87](https://github.com/ZDrops/ai-assistants-sdk/commit/d001b87aac96500927ffd2ac8c06d5c52142b288))
9
+
10
+ ## [1.0.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v0.6.0...ai-assistants-sdk-v1.0.0) (2026-04-28)
11
+
12
+
13
+ ### ⚠ BREAKING CHANGES
14
+
15
+ * **sdk:** drop subscriptions, move plans to public path
16
+
17
+ ### Features
18
+
19
+ * **sdk:** drop subscriptions, move plans to public path ([d84f47a](https://github.com/ZDrops/ai-assistants-sdk/commit/d84f47ac5f8dc340c4e08aa3d400b00f485337ed))
20
+
21
+ ## [0.6.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v0.5.0...ai-assistants-sdk-v0.6.0) (2026-04-23)
22
+
23
+
24
+ ### Features
25
+
26
+ * **sdk:** add startAuth endpoint, Google auth, and response envelope unwrapping ([82deef5](https://github.com/ZDrops/ai-assistants-sdk/commit/82deef55747282beeb7568af235ab98ee0beb5a8))
27
+
28
+ ## [0.5.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v0.4.0...ai-assistants-sdk-v0.5.0) (2026-04-22)
29
+
30
+
31
+ ### Features
32
+
33
+ * **sdk:** add payments resource with checkout endpoint ([7ed6bd3](https://github.com/ZDrops/ai-assistants-sdk/commit/7ed6bd3e770d965909dd403fb1caa7471cd27089))
34
+
35
+ ## [0.4.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v0.3.0...ai-assistants-sdk-v0.4.0) (2026-04-21)
36
+
37
+
38
+ ### Features
39
+
40
+ * **sdk:** add conversations, generation, and image resources ([6a1d9d8](https://github.com/ZDrops/ai-assistants-sdk/commit/6a1d9d8cc83380f26bb492a37c32e0cfd4d72448))
41
+
42
+ ## [0.3.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v0.2.0...ai-assistants-sdk-v0.3.0) (2026-04-21)
43
+
44
+
45
+ ### Features
46
+
47
+ * **sdk:** add billing, preferences, and missing auth endpoints ([9f52145](https://github.com/ZDrops/ai-assistants-sdk/commit/9f5214505ba275d40b8cd20cd1601a3189c993da))
48
+ * **sdk:** initial TypeScript SDK for AI Assistants API ([9041630](https://github.com/ZDrops/ai-assistants-sdk/commit/90416306cea940a47bf3a3d20ac607a12c8df866))
49
+
50
+
51
+ ### Bug Fixes
52
+
53
+ * package owner ([da93646](https://github.com/ZDrops/ai-assistants-sdk/commit/da936463bfa54b2092c7a2ff5829b2944c4ff116))
54
+
55
+ ## [0.2.0](https://github.com/ZDrops/ai-assistants-sdk/compare/sdk-v0.1.0...sdk-v0.2.0) (2026-04-21)
56
+
57
+
58
+ ### Features
59
+
60
+ * **sdk:** add billing, preferences, and missing auth endpoints ([9f52145](https://github.com/ZDrops/ai-assistants-sdk/commit/9f5214505ba275d40b8cd20cd1601a3189c993da))
61
+ * **sdk:** initial TypeScript SDK for AI Assistants API ([9041630](https://github.com/ZDrops/ai-assistants-sdk/commit/90416306cea940a47bf3a3d20ac607a12c8df866))
package/dist/index.cjs ADDED
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ ApiError: () => ApiError,
24
+ createClient: () => createClient
25
+ });
26
+ module.exports = __toCommonJS(index_exports);
27
+
28
+ // src/errors.ts
29
+ var ApiError = class extends Error {
30
+ constructor(statusCode, code, message, requestId) {
31
+ super(Array.isArray(message) ? message.join(", ") : message);
32
+ this.statusCode = statusCode;
33
+ this.code = code;
34
+ this.requestId = requestId;
35
+ this.name = "ApiError";
36
+ }
37
+ };
38
+
39
+ // src/http.ts
40
+ var HttpClient = class {
41
+ constructor(config) {
42
+ this.config = config;
43
+ this.refreshPromise = null;
44
+ this.baseUrl = new URL(config.baseUrl);
45
+ this.fetchFn = config.fetch ?? globalThis.fetch;
46
+ }
47
+ buildAndFetch(method, path, options = {}) {
48
+ const { body, query, authenticated = true } = options;
49
+ const url = new URL(path, this.baseUrl);
50
+ if (query) {
51
+ for (const [key, value] of Object.entries(query)) {
52
+ if (value !== void 0 && value !== null) {
53
+ url.searchParams.set(key, String(value));
54
+ }
55
+ }
56
+ }
57
+ const headers = {
58
+ "X-Tenant-Key": this.config.tenantKey
59
+ };
60
+ if (body !== void 0) {
61
+ headers["Content-Type"] = "application/json";
62
+ }
63
+ if (authenticated) {
64
+ const token = this.config.getAccessToken();
65
+ if (token) {
66
+ headers["Authorization"] = `Bearer ${token}`;
67
+ }
68
+ }
69
+ return this.fetchFn(url.toString(), {
70
+ method,
71
+ headers,
72
+ body: body !== void 0 ? JSON.stringify(body) : void 0
73
+ });
74
+ }
75
+ async throwIfError(response) {
76
+ if (!response.ok) {
77
+ const errorBody = await response.json().catch(() => null);
78
+ throw new ApiError(
79
+ response.status,
80
+ errorBody?.error?.code ?? "UNKNOWN_ERROR",
81
+ errorBody?.error?.message ?? response.statusText,
82
+ errorBody?.meta?.requestId
83
+ );
84
+ }
85
+ }
86
+ async request(method, path, options = {}) {
87
+ const { isRetry = false, authenticated = true } = options;
88
+ const response = await this.buildAndFetch(method, path, options);
89
+ if (response.status === 401 && !isRetry && authenticated) {
90
+ const refreshed = await this.attemptTokenRefresh();
91
+ if (refreshed) {
92
+ return this.request(method, path, { ...options, isRetry: true });
93
+ }
94
+ }
95
+ await this.throwIfError(response);
96
+ const contentType = response.headers.get("content-type");
97
+ if (!contentType?.includes("application/json")) {
98
+ return void 0;
99
+ }
100
+ const json = await response.json();
101
+ return json && "data" in json && "meta" in json ? json.data : json;
102
+ }
103
+ attemptTokenRefresh() {
104
+ if (this.refreshPromise) return this.refreshPromise;
105
+ this.refreshPromise = this.doRefresh().finally(() => {
106
+ this.refreshPromise = null;
107
+ });
108
+ return this.refreshPromise;
109
+ }
110
+ async doRefresh() {
111
+ const refreshToken = this.config.getRefreshToken();
112
+ if (!refreshToken) return false;
113
+ try {
114
+ const tokens = await this.request(
115
+ "POST",
116
+ "/api/v1/auth/refresh",
117
+ {
118
+ body: { refreshToken },
119
+ authenticated: false,
120
+ isRetry: true
121
+ }
122
+ );
123
+ await this.config.onTokenRefreshed(tokens);
124
+ return true;
125
+ } catch {
126
+ return false;
127
+ }
128
+ }
129
+ get(path, options) {
130
+ return this.request("GET", path, options);
131
+ }
132
+ post(path, body, options) {
133
+ return this.request("POST", path, { ...options, body });
134
+ }
135
+ patch(path, body, options) {
136
+ return this.request("PATCH", path, { ...options, body });
137
+ }
138
+ put(path, body, options) {
139
+ return this.request("PUT", path, { ...options, body });
140
+ }
141
+ delete(path, options) {
142
+ return this.request("DELETE", path, options);
143
+ }
144
+ async rawRequest(method, path, options = {}) {
145
+ const { authenticated = true } = options;
146
+ let response = await this.buildAndFetch(method, path, options);
147
+ if (response.status === 401 && authenticated) {
148
+ const refreshed = await this.attemptTokenRefresh();
149
+ if (refreshed) {
150
+ response = await this.buildAndFetch(method, path, options);
151
+ }
152
+ }
153
+ await this.throwIfError(response);
154
+ return response;
155
+ }
156
+ };
157
+
158
+ // src/resources/auth.ts
159
+ var AuthResource = class {
160
+ constructor(http) {
161
+ this.http = http;
162
+ }
163
+ register(data) {
164
+ return this.http.post("/api/v1/auth/register", data, { authenticated: false });
165
+ }
166
+ login(data) {
167
+ return this.http.post("/api/v1/auth/login", data, { authenticated: false });
168
+ }
169
+ startAuth(data) {
170
+ return this.http.post("/api/v1/auth/start", data, { authenticated: false });
171
+ }
172
+ verifyOtp(data) {
173
+ return this.http.post("/api/v1/auth/verify-otp", data, { authenticated: false });
174
+ }
175
+ refresh(data) {
176
+ return this.http.post("/api/v1/auth/refresh", data, { authenticated: false });
177
+ }
178
+ logout() {
179
+ return this.http.post("/api/v1/auth/logout");
180
+ }
181
+ getProfile() {
182
+ return this.http.get("/api/v1/auth/me");
183
+ }
184
+ updateProfile(data) {
185
+ return this.http.patch("/api/v1/auth/me", data);
186
+ }
187
+ deleteAccount() {
188
+ return this.http.delete("/api/v1/auth/me");
189
+ }
190
+ requestEmailChange(data) {
191
+ return this.http.post("/api/v1/auth/request-email-change", data);
192
+ }
193
+ confirmEmailChange(data) {
194
+ return this.http.post("/api/v1/auth/confirm-email-change", data);
195
+ }
196
+ };
197
+
198
+ // src/resources/plans.ts
199
+ var PlansResource = class {
200
+ constructor(http) {
201
+ this.http = http;
202
+ }
203
+ list(query) {
204
+ return this.http.get("/api/v1/public/plans", { query, authenticated: false });
205
+ }
206
+ };
207
+
208
+ // src/resources/credits.ts
209
+ var CreditsResource = class {
210
+ constructor(http) {
211
+ this.http = http;
212
+ }
213
+ getBalance() {
214
+ return this.http.get("/api/v1/credits/balance");
215
+ }
216
+ getTransactions(query) {
217
+ return this.http.get("/api/v1/credits/transactions", { query });
218
+ }
219
+ purchase(data) {
220
+ return this.http.post("/api/v1/credits/purchase", data);
221
+ }
222
+ };
223
+
224
+ // src/resources/billing.ts
225
+ var BillingResource = class {
226
+ constructor(http) {
227
+ this.http = http;
228
+ }
229
+ get() {
230
+ return this.http.get("/api/v1/billing");
231
+ }
232
+ upsert(data) {
233
+ return this.http.put("/api/v1/billing", data);
234
+ }
235
+ };
236
+
237
+ // src/resources/preferences.ts
238
+ var PreferencesResource = class {
239
+ constructor(http) {
240
+ this.http = http;
241
+ }
242
+ getAll() {
243
+ return this.http.get("/api/v1/preferences");
244
+ }
245
+ getByAppKey(appKey) {
246
+ return this.http.get(`/api/v1/preferences/${appKey}`);
247
+ }
248
+ upsert(appKey, data) {
249
+ return this.http.put(`/api/v1/preferences/${appKey}`, data);
250
+ }
251
+ remove(appKey) {
252
+ return this.http.delete(`/api/v1/preferences/${appKey}`);
253
+ }
254
+ merge(appKey, data) {
255
+ return this.http.patch(`/api/v1/preferences/${appKey}`, data);
256
+ }
257
+ };
258
+
259
+ // src/resources/conversations.ts
260
+ var ConversationsResource = class {
261
+ constructor(http) {
262
+ this.http = http;
263
+ }
264
+ create(data) {
265
+ return this.http.post("/api/v1/conversations", data);
266
+ }
267
+ list(query) {
268
+ return this.http.get("/api/v1/conversations", { query });
269
+ }
270
+ get(id) {
271
+ return this.http.get(`/api/v1/conversations/${id}`);
272
+ }
273
+ archive(id) {
274
+ return this.http.patch(`/api/v1/conversations/${id}/archive`);
275
+ }
276
+ listMessages(conversationId, query) {
277
+ return this.http.get(`/api/v1/conversations/${conversationId}/messages`, { query });
278
+ }
279
+ addMessage(conversationId, data) {
280
+ return this.http.post(`/api/v1/conversations/${conversationId}/messages`, data);
281
+ }
282
+ };
283
+
284
+ // src/resources/generation.ts
285
+ var GenerationResource = class {
286
+ constructor(http) {
287
+ this.http = http;
288
+ }
289
+ async generate(conversationId, data, options) {
290
+ const response = await this.http.rawRequest("POST", `/api/v1/conversations/${conversationId}/generate`, {
291
+ body: data
292
+ });
293
+ const reader = response.body?.getReader();
294
+ if (!reader) throw new Error("No response body");
295
+ const decoder = new TextDecoder();
296
+ const parts = [];
297
+ let buffer = "";
298
+ try {
299
+ while (true) {
300
+ if (options?.signal?.aborted) {
301
+ reader.cancel();
302
+ break;
303
+ }
304
+ const { done, value } = await reader.read();
305
+ if (done) break;
306
+ buffer += decoder.decode(value, { stream: true });
307
+ const lines = buffer.split("\n");
308
+ buffer = lines.pop() ?? "";
309
+ for (const line of lines) {
310
+ if (!line.startsWith("data: ")) continue;
311
+ const jsonStr = line.slice(6).trim();
312
+ if (!jsonStr) continue;
313
+ let event;
314
+ try {
315
+ event = JSON.parse(jsonStr);
316
+ } catch {
317
+ continue;
318
+ }
319
+ if (event.type === "text_delta") {
320
+ parts.push(event.text);
321
+ options?.onTextDelta?.(event.text);
322
+ } else if (event.type === "done") {
323
+ options?.onDone?.(event);
324
+ } else if (event.type === "error") {
325
+ options?.onError?.(event.error);
326
+ }
327
+ }
328
+ }
329
+ } finally {
330
+ reader.releaseLock();
331
+ }
332
+ return parts.join("");
333
+ }
334
+ };
335
+
336
+ // src/resources/images.ts
337
+ var ImagesResource = class {
338
+ constructor(http) {
339
+ this.http = http;
340
+ }
341
+ trigger(messageId, data) {
342
+ return this.http.post(`/api/v1/messages/${messageId}/images`, data);
343
+ }
344
+ getAll(messageId) {
345
+ return this.http.get(`/api/v1/messages/${messageId}/images`);
346
+ }
347
+ getBySlot(messageId, slot) {
348
+ return this.http.get(`/api/v1/messages/${messageId}/images/${slot}`);
349
+ }
350
+ };
351
+
352
+ // src/resources/payments.ts
353
+ var PaymentsResource = class {
354
+ constructor(http) {
355
+ this.http = http;
356
+ }
357
+ checkout(data) {
358
+ return this.http.post("/api/v1/payments/checkout", data);
359
+ }
360
+ };
361
+
362
+ // src/client.ts
363
+ function createClient(options) {
364
+ let accessToken = options.accessToken ?? null;
365
+ let refreshToken = options.refreshToken ?? null;
366
+ const http = new HttpClient({
367
+ baseUrl: options.baseUrl,
368
+ tenantKey: options.tenantKey,
369
+ fetch: options.fetch,
370
+ getAccessToken: () => accessToken,
371
+ getRefreshToken: () => refreshToken,
372
+ onTokenRefreshed: async (tokens) => {
373
+ accessToken = tokens.accessToken;
374
+ refreshToken = tokens.refreshToken;
375
+ await options.onTokenRefreshed?.(tokens);
376
+ }
377
+ });
378
+ return {
379
+ auth: new AuthResource(http),
380
+ plans: new PlansResource(http),
381
+ credits: new CreditsResource(http),
382
+ billing: new BillingResource(http),
383
+ preferences: new PreferencesResource(http),
384
+ conversations: new ConversationsResource(http),
385
+ generation: new GenerationResource(http),
386
+ images: new ImagesResource(http),
387
+ payments: new PaymentsResource(http),
388
+ setAccessToken(token) {
389
+ accessToken = token;
390
+ },
391
+ setRefreshToken(token) {
392
+ refreshToken = token;
393
+ }
394
+ };
395
+ }
396
+ // Annotate the CommonJS export names for ESM import in node:
397
+ 0 && (module.exports = {
398
+ ApiError,
399
+ createClient
400
+ });
401
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/http.ts","../src/resources/auth.ts","../src/resources/plans.ts","../src/resources/credits.ts","../src/resources/billing.ts","../src/resources/preferences.ts","../src/resources/conversations.ts","../src/resources/generation.ts","../src/resources/images.ts","../src/resources/payments.ts","../src/client.ts"],"sourcesContent":["export { createClient } from \"./client\";\nexport type { ClientOptions, AiAssistantsClient } from \"./client\";\n\nexport type {\n RegisterDto,\n LoginDto,\n VerifyOtpDto,\n RefreshTokenDto,\n UpdateProfileDto,\n RequestEmailChangeDto,\n ConfirmEmailChangeDto,\n PurchaseCreditsDto,\n UpsertBillingDto,\n UpdatePreferencesDto,\n CreateConversationDto,\n AddMessageDto,\n GenerateDto,\n TriggerImageDto,\n CreateCheckoutDto,\n MessageResponseDto,\n AuthResponseDto,\n TokensResponseDto,\n UserResponseDto,\n PlanResponseDto,\n CreditBalanceResponseDto,\n CreditTransactionResponseDto,\n PurchaseCreditsResponseDto,\n CreditBalanceEntityResponseDto,\n BillingResponseDto,\n PreferenceResponseDto,\n ConversationResponseDto,\n ConversationMessageResponseDto,\n ImageStatusResponseDto,\n CheckoutResponseDto,\n StartAuthResponseDto,\n\n OtpType,\n UserRole,\n PlanType,\n CreditTransactionType,\n ConversationStatus,\n MessageRole,\n ImageGenerationStatus,\n} from \"./types\";\n\nexport type { SseStreamOptions, GenerationDoneData } from \"./resources/generation\";\n\nexport { ApiError } from \"./errors\";\n","export class ApiError extends Error {\n constructor(\n public readonly statusCode: number,\n public readonly code: string,\n message: string | string[],\n public readonly requestId?: string,\n ) {\n super(Array.isArray(message) ? message.join(\", \") : message);\n this.name = \"ApiError\";\n }\n}\n","import { ApiError } from \"./errors\";\nimport type { TokensResponseDto } from \"./types\";\n\nexport interface HttpClientConfig {\n baseUrl: string;\n tenantKey: string;\n getAccessToken: () => string | null;\n getRefreshToken: () => string | null;\n onTokenRefreshed: (tokens: TokensResponseDto) => void | Promise<void>;\n fetch?: typeof globalThis.fetch;\n}\n\ntype HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n\ninterface RequestOptions {\n body?: unknown;\n query?: Record<string, string | number | boolean | undefined | null>;\n authenticated?: boolean;\n}\n\ninterface InternalRequestOptions extends RequestOptions {\n isRetry?: boolean;\n}\n\nexport class HttpClient {\n private refreshPromise: Promise<boolean> | null = null;\n private readonly baseUrl: URL;\n private readonly fetchFn: typeof globalThis.fetch;\n\n constructor(private config: HttpClientConfig) {\n this.baseUrl = new URL(config.baseUrl);\n this.fetchFn = config.fetch ?? globalThis.fetch;\n }\n\n private buildAndFetch(\n method: HttpMethod,\n path: string,\n options: RequestOptions = {},\n ): Promise<Response> {\n const { body, query, authenticated = true } = options;\n\n const url = new URL(path, this.baseUrl);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n\n const headers: Record<string, string> = {\n \"X-Tenant-Key\": this.config.tenantKey,\n };\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n if (authenticated) {\n const token = this.config.getAccessToken();\n if (token) {\n headers[\"Authorization\"] = `Bearer ${token}`;\n }\n }\n\n return this.fetchFn(url.toString(), {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n }\n\n private async throwIfError(response: Response): Promise<void> {\n if (!response.ok) {\n const errorBody = await response.json().catch(() => null);\n throw new ApiError(\n response.status,\n errorBody?.error?.code ?? \"UNKNOWN_ERROR\",\n errorBody?.error?.message ?? response.statusText,\n errorBody?.meta?.requestId,\n );\n }\n }\n\n private async request<T>(\n method: HttpMethod,\n path: string,\n options: InternalRequestOptions = {},\n ): Promise<T> {\n const { isRetry = false, authenticated = true } = options;\n\n const response = await this.buildAndFetch(method, path, options);\n\n if (response.status === 401 && !isRetry && authenticated) {\n const refreshed = await this.attemptTokenRefresh();\n if (refreshed) {\n return this.request<T>(method, path, { ...options, isRetry: true });\n }\n }\n\n await this.throwIfError(response);\n\n const contentType = response.headers.get(\"content-type\");\n if (!contentType?.includes(\"application/json\")) {\n return undefined as T;\n }\n\n const json = await response.json();\n return (json && \"data\" in json && \"meta\" in json ? json.data : json) as T;\n }\n\n private attemptTokenRefresh(): Promise<boolean> {\n if (this.refreshPromise) return this.refreshPromise;\n this.refreshPromise = this.doRefresh().finally(() => {\n this.refreshPromise = null;\n });\n return this.refreshPromise;\n }\n\n private async doRefresh(): Promise<boolean> {\n const refreshToken = this.config.getRefreshToken();\n if (!refreshToken) return false;\n\n try {\n const tokens = await this.request<TokensResponseDto>(\n \"POST\",\n \"/api/v1/auth/refresh\",\n {\n body: { refreshToken },\n authenticated: false,\n isRetry: true,\n },\n );\n await this.config.onTokenRefreshed(tokens);\n return true;\n } catch {\n return false;\n }\n }\n\n get<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(\"GET\", path, options);\n }\n\n post<T>(path: string, body?: unknown, options?: Omit<RequestOptions, \"body\">): Promise<T> {\n return this.request<T>(\"POST\", path, { ...options, body });\n }\n\n patch<T>(path: string, body?: unknown, options?: Omit<RequestOptions, \"body\">): Promise<T> {\n return this.request<T>(\"PATCH\", path, { ...options, body });\n }\n\n put<T>(path: string, body?: unknown, options?: Omit<RequestOptions, \"body\">): Promise<T> {\n return this.request<T>(\"PUT\", path, { ...options, body });\n }\n\n delete<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.request<T>(\"DELETE\", path, options);\n }\n\n async rawRequest(method: HttpMethod, path: string, options: RequestOptions = {}): Promise<Response> {\n const { authenticated = true } = options;\n\n let response = await this.buildAndFetch(method, path, options);\n\n if (response.status === 401 && authenticated) {\n const refreshed = await this.attemptTokenRefresh();\n if (refreshed) {\n response = await this.buildAndFetch(method, path, options);\n }\n }\n\n await this.throwIfError(response);\n\n return response;\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n RegisterDto,\n LoginDto,\n VerifyOtpDto,\n RefreshTokenDto,\n UpdateProfileDto,\n RequestEmailChangeDto,\n ConfirmEmailChangeDto,\n MessageResponseDto,\n AuthResponseDto,\n TokensResponseDto,\n UserResponseDto,\n StartAuthResponseDto,\n} from \"../types\";\n\nexport class AuthResource {\n constructor(private http: HttpClient) {}\n\n register(data: RegisterDto): Promise<MessageResponseDto> {\n return this.http.post(\"/api/v1/auth/register\", data, { authenticated: false });\n }\n\n login(data: LoginDto): Promise<MessageResponseDto> {\n return this.http.post(\"/api/v1/auth/login\", data, { authenticated: false });\n }\n\n startAuth(data: LoginDto): Promise<StartAuthResponseDto> {\n return this.http.post(\"/api/v1/auth/start\", data, { authenticated: false });\n }\n\n verifyOtp(data: VerifyOtpDto): Promise<AuthResponseDto> {\n return this.http.post(\"/api/v1/auth/verify-otp\", data, { authenticated: false });\n }\n\n refresh(data: RefreshTokenDto): Promise<TokensResponseDto> {\n return this.http.post(\"/api/v1/auth/refresh\", data, { authenticated: false });\n }\n\n logout(): Promise<void> {\n return this.http.post(\"/api/v1/auth/logout\");\n }\n\n getProfile(): Promise<UserResponseDto> {\n return this.http.get(\"/api/v1/auth/me\");\n }\n\n updateProfile(data: UpdateProfileDto): Promise<UserResponseDto> {\n return this.http.patch(\"/api/v1/auth/me\", data);\n }\n\n deleteAccount(): Promise<void> {\n return this.http.delete(\"/api/v1/auth/me\");\n }\n\n requestEmailChange(data: RequestEmailChangeDto): Promise<MessageResponseDto> {\n return this.http.post(\"/api/v1/auth/request-email-change\", data);\n }\n\n confirmEmailChange(data: ConfirmEmailChangeDto): Promise<MessageResponseDto> {\n return this.http.post(\"/api/v1/auth/confirm-email-change\", data);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { PlanResponseDto, PlanType } from \"../types\";\n\nexport class PlansResource {\n constructor(private http: HttpClient) {}\n\n list(query?: { type?: PlanType }): Promise<PlanResponseDto[]> {\n return this.http.get(\"/api/v1/public/plans\", { query, authenticated: false });\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n CreditBalanceResponseDto,\n CreditTransactionResponseDto,\n CreditTransactionType,\n PurchaseCreditsDto,\n PurchaseCreditsResponseDto,\n} from \"../types\";\n\nexport class CreditsResource {\n constructor(private http: HttpClient) {}\n\n getBalance(): Promise<CreditBalanceResponseDto> {\n return this.http.get(\"/api/v1/credits/balance\");\n }\n\n getTransactions(query?: {\n cursor?: string;\n limit?: number;\n type?: CreditTransactionType;\n }): Promise<CreditTransactionResponseDto[]> {\n return this.http.get(\"/api/v1/credits/transactions\", { query });\n }\n\n purchase(data: PurchaseCreditsDto): Promise<PurchaseCreditsResponseDto> {\n return this.http.post(\"/api/v1/credits/purchase\", data);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { BillingResponseDto, UpsertBillingDto } from \"../types\";\n\nexport class BillingResource {\n constructor(private http: HttpClient) {}\n\n get(): Promise<BillingResponseDto> {\n return this.http.get(\"/api/v1/billing\");\n }\n\n upsert(data: UpsertBillingDto): Promise<BillingResponseDto> {\n return this.http.put(\"/api/v1/billing\", data);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n PreferenceResponseDto,\n UpdatePreferencesDto,\n} from \"../types\";\n\nexport class PreferencesResource {\n constructor(private http: HttpClient) {}\n\n getAll(): Promise<PreferenceResponseDto[]> {\n return this.http.get(\"/api/v1/preferences\");\n }\n\n getByAppKey(appKey: string): Promise<PreferenceResponseDto> {\n return this.http.get(`/api/v1/preferences/${appKey}`);\n }\n\n upsert(appKey: string, data: UpdatePreferencesDto): Promise<PreferenceResponseDto> {\n return this.http.put(`/api/v1/preferences/${appKey}`, data);\n }\n\n remove(appKey: string): Promise<void> {\n return this.http.delete(`/api/v1/preferences/${appKey}`);\n }\n\n merge(appKey: string, data: UpdatePreferencesDto): Promise<PreferenceResponseDto> {\n return this.http.patch(`/api/v1/preferences/${appKey}`, data);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n CreateConversationDto,\n ConversationResponseDto,\n ConversationMessageResponseDto,\n AddMessageDto,\n ConversationStatus,\n} from \"../types\";\n\nexport class ConversationsResource {\n constructor(private http: HttpClient) {}\n\n create(data: CreateConversationDto): Promise<ConversationResponseDto> {\n return this.http.post(\"/api/v1/conversations\", data);\n }\n\n list(query?: {\n cursor?: string;\n limit?: number;\n status?: ConversationStatus;\n appKey?: string;\n }): Promise<ConversationResponseDto[]> {\n return this.http.get(\"/api/v1/conversations\", { query });\n }\n\n get(id: string): Promise<ConversationResponseDto> {\n return this.http.get(`/api/v1/conversations/${id}`);\n }\n\n archive(id: string): Promise<ConversationResponseDto> {\n return this.http.patch(`/api/v1/conversations/${id}/archive`);\n }\n\n listMessages(conversationId: string, query?: {\n cursor?: string;\n limit?: number;\n }): Promise<ConversationMessageResponseDto[]> {\n return this.http.get(`/api/v1/conversations/${conversationId}/messages`, { query });\n }\n\n addMessage(conversationId: string, data: AddMessageDto): Promise<ConversationMessageResponseDto> {\n return this.http.post(`/api/v1/conversations/${conversationId}/messages`, data);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { GenerateDto } from \"../types\";\n\nexport interface GenerationDoneData {\n messageId: string;\n usage?: { inputTokens: number; outputTokens: number };\n structuredOutput?: Record<string, unknown>;\n}\n\nexport interface SseStreamOptions {\n onTextDelta?: (text: string) => void;\n onDone?: (data: GenerationDoneData) => void;\n onError?: (error: string) => void;\n signal?: AbortSignal;\n}\n\ntype SseEvent =\n | { type: \"text_delta\"; text: string }\n | { type: \"done\"; messageId: string; usage?: { inputTokens: number; outputTokens: number }; structuredOutput?: Record<string, unknown> }\n | { type: \"error\"; error: string };\n\nexport class GenerationResource {\n constructor(private http: HttpClient) {}\n\n async generate(conversationId: string, data: GenerateDto, options?: SseStreamOptions): Promise<string> {\n const response = await this.http.rawRequest(\"POST\", `/api/v1/conversations/${conversationId}/generate`, {\n body: data,\n });\n\n const reader = response.body?.getReader();\n if (!reader) throw new Error(\"No response body\");\n\n const decoder = new TextDecoder();\n const parts: string[] = [];\n let buffer = \"\";\n\n try {\n while (true) {\n if (options?.signal?.aborted) {\n reader.cancel();\n break;\n }\n\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const jsonStr = line.slice(6).trim();\n if (!jsonStr) continue;\n\n let event: SseEvent;\n try {\n event = JSON.parse(jsonStr);\n } catch {\n continue;\n }\n\n if (event.type === \"text_delta\") {\n parts.push(event.text);\n options?.onTextDelta?.(event.text);\n } else if (event.type === \"done\") {\n options?.onDone?.(event);\n } else if (event.type === \"error\") {\n options?.onError?.(event.error);\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n\n return parts.join(\"\");\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n TriggerImageDto,\n ImageStatusResponseDto,\n} from \"../types\";\n\nexport class ImagesResource {\n constructor(private http: HttpClient) {}\n\n trigger(messageId: string, data: TriggerImageDto): Promise<ImageStatusResponseDto> {\n return this.http.post(`/api/v1/messages/${messageId}/images`, data);\n }\n\n getAll(messageId: string): Promise<ImageStatusResponseDto[]> {\n return this.http.get(`/api/v1/messages/${messageId}/images`);\n }\n\n getBySlot(messageId: string, slot: string): Promise<ImageStatusResponseDto> {\n return this.http.get(`/api/v1/messages/${messageId}/images/${slot}`);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { CreateCheckoutDto, CheckoutResponseDto } from \"../types\";\n\nexport class PaymentsResource {\n constructor(private http: HttpClient) {}\n\n checkout(data: CreateCheckoutDto): Promise<CheckoutResponseDto> {\n return this.http.post(\"/api/v1/payments/checkout\", data);\n }\n}\n","import { HttpClient } from \"./http\";\nimport type { TokensResponseDto } from \"./types\";\nimport { AuthResource } from \"./resources/auth\";\nimport { PlansResource } from \"./resources/plans\";\nimport { CreditsResource } from \"./resources/credits\";\nimport { BillingResource } from \"./resources/billing\";\nimport { PreferencesResource } from \"./resources/preferences\";\nimport { ConversationsResource } from \"./resources/conversations\";\nimport { GenerationResource } from \"./resources/generation\";\nimport { ImagesResource } from \"./resources/images\";\nimport { PaymentsResource } from \"./resources/payments\";\n\nexport interface ClientOptions {\n baseUrl: string;\n tenantKey: string;\n accessToken?: string;\n refreshToken?: string;\n onTokenRefreshed?: (tokens: TokensResponseDto) => void | Promise<void>;\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface AiAssistantsClient {\n auth: AuthResource;\n plans: PlansResource;\n credits: CreditsResource;\n billing: BillingResource;\n preferences: PreferencesResource;\n conversations: ConversationsResource;\n generation: GenerationResource;\n images: ImagesResource;\n payments: PaymentsResource;\n setAccessToken(token: string): void;\n setRefreshToken(token: string): void;\n}\n\nexport function createClient(options: ClientOptions): AiAssistantsClient {\n let accessToken = options.accessToken ?? null;\n let refreshToken = options.refreshToken ?? null;\n\n const http = new HttpClient({\n baseUrl: options.baseUrl,\n tenantKey: options.tenantKey,\n fetch: options.fetch,\n getAccessToken: () => accessToken,\n getRefreshToken: () => refreshToken,\n onTokenRefreshed: async (tokens) => {\n accessToken = tokens.accessToken;\n refreshToken = tokens.refreshToken;\n await options.onTokenRefreshed?.(tokens);\n },\n });\n\n return {\n auth: new AuthResource(http),\n plans: new PlansResource(http),\n credits: new CreditsResource(http),\n billing: new BillingResource(http),\n preferences: new PreferencesResource(http),\n conversations: new ConversationsResource(http),\n generation: new GenerationResource(http),\n images: new ImagesResource(http),\n payments: new PaymentsResource(http),\n setAccessToken(token: string) {\n accessToken = token;\n },\n setRefreshToken(token: string) {\n refreshToken = token;\n },\n };\n}\n"],"mappings":"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","names":[]}