@zdrops/ai-assistants-sdk 1.4.0 → 1.6.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 CHANGED
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.6.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v1.5.1...ai-assistants-sdk-v1.6.0) (2026-06-21)
4
+
5
+
6
+ ### Features
7
+
8
+ * add contact resource ([122204d](https://github.com/ZDrops/ai-assistants-sdk/commit/122204dfdee0dfe328227a93ef0dcbc2836740ab))
9
+ * add contact resource for contact-form email ([02a540e](https://github.com/ZDrops/ai-assistants-sdk/commit/02a540e39b9b9b09f76ce985450a6c433dfd9dd8))
10
+ * add emailPreferences resource ([c3eb56b](https://github.com/ZDrops/ai-assistants-sdk/commit/c3eb56b53e0c8d827807b4357459d6f6d003b93d))
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * regenerate types from current spec, drop obsolete credit/receipts types ([cf4c92d](https://github.com/ZDrops/ai-assistants-sdk/commit/cf4c92dedc23dab99550e23ba90e826415f49670))
16
+
17
+ ## [1.5.1](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v1.5.0...ai-assistants-sdk-v1.5.1) (2026-06-20)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * trigger reelase please ([6495fbb](https://github.com/ZDrops/ai-assistants-sdk/commit/6495fbbcdc189afb1245ce455b7e11d1f03d87a8))
23
+
24
+ ## [1.5.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v1.4.0...ai-assistants-sdk-v1.5.0) (2026-06-20)
25
+
26
+
27
+ ### Features
28
+
29
+ * **api-types:** enhance PaginatedResponse schema and add ReceiptItemDto definition ([e9908df](https://github.com/ZDrops/ai-assistants-sdk/commit/e9908dfaa4fa22bf242dd5cf6ebce6a2eb731ddf))
30
+ * **client:** add ping() method to verify client configuration ([66a85ac](https://github.com/ZDrops/ai-assistants-sdk/commit/66a85ac2c63746c288b58310d042db9e5fb097b1))
31
+
3
32
  ## [1.4.0](https://github.com/ZDrops/ai-assistants-sdk/compare/ai-assistants-sdk-v1.3.0...ai-assistants-sdk-v1.4.0) (2026-05-11)
4
33
 
5
34
 
package/dist/index.cjs CHANGED
@@ -216,9 +216,6 @@ var CreditsResource = class {
216
216
  getTransactions(query) {
217
217
  return this.http.get("/api/v1/credits/transactions", { query });
218
218
  }
219
- purchase(data) {
220
- return this.http.post("/api/v1/credits/purchase", data);
221
- }
222
219
  };
223
220
 
224
221
  // src/resources/billing.ts
@@ -392,6 +389,43 @@ var ReceiptsResource = class {
392
389
  }
393
390
  };
394
391
 
392
+ // src/resources/email-preferences.ts
393
+ var EmailPreferencesResource = class {
394
+ constructor(http) {
395
+ this.http = http;
396
+ }
397
+ /** Public, token-based: fetch subscription state via an unsubscribe link token. */
398
+ getByToken(token) {
399
+ return this.http.get("/api/v1/email-preferences", {
400
+ authenticated: false,
401
+ query: { token }
402
+ });
403
+ }
404
+ /** Public, token-based: update subscription state via an unsubscribe link token. */
405
+ updateByToken(data) {
406
+ return this.http.patch("/api/v1/email-preferences", data, { authenticated: false });
407
+ }
408
+ /** Authenticated: fetch the current user's subscription state. */
409
+ getMine() {
410
+ return this.http.get("/api/v1/email-preferences/me");
411
+ }
412
+ /** Authenticated: update the current user's subscription state. */
413
+ updateMine(data) {
414
+ return this.http.patch("/api/v1/email-preferences/me", data);
415
+ }
416
+ };
417
+
418
+ // src/resources/contact.ts
419
+ var ContactResource = class {
420
+ constructor(http) {
421
+ this.http = http;
422
+ }
423
+ /** Send a contact-form message to the tenant's contact inbox. Public — no auth required. */
424
+ send(data) {
425
+ return this.http.post("/api/v1/contact", data, { authenticated: false });
426
+ }
427
+ };
428
+
395
429
  // src/client.ts
396
430
  function createClient(options) {
397
431
  let accessToken = options.accessToken ?? null;
@@ -420,6 +454,11 @@ function createClient(options) {
420
454
  payments: new PaymentsResource(http),
421
455
  tenants: new TenantsResource(http),
422
456
  receipts: new ReceiptsResource(http),
457
+ emailPreferences: new EmailPreferencesResource(http),
458
+ contact: new ContactResource(http),
459
+ ping() {
460
+ return http.get("/api/v1/ping", { authenticated: false });
461
+ },
423
462
  setAccessToken(token) {
424
463
  accessToken = token;
425
464
  },
@@ -1 +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/resources/tenants.ts","../src/resources/receipts.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 CreateCustomCheckoutDto,\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 CreditPricingResponseDto,\n TenantPublicInfoDto,\n StartAuthResponseDto,\n PaginatedResponse,\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 } from \"../types\";\n\nexport class PlansResource {\n constructor(private http: HttpClient) {}\n\n list(): Promise<PlanResponseDto[]> {\n return this.http.get(\"/api/v1/public/plans\", { 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 {\n CreateCheckoutDto,\n CreateCustomCheckoutDto,\n CheckoutResponseDto,\n CreditPricingResponseDto,\n} 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 checkoutCustom(data: CreateCustomCheckoutDto): Promise<CheckoutResponseDto> {\n return this.http.post(\"/api/v1/payments/checkout/custom\", data);\n }\n\n creditPricing(): Promise<CreditPricingResponseDto> {\n return this.http.get(\"/api/v1/payments/credit-pricing\");\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { TenantPublicInfoDto } from \"../types\";\n\nexport class TenantsResource {\n constructor(private http: HttpClient) {}\n\n getPublicInfo(tenantId: string): Promise<TenantPublicInfoDto> {\n return this.http.get(\"/api/v1/tenants/public-info\", {\n authenticated: false,\n query: { tenantId },\n });\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { PaginatedResponse } from \"../types\";\n\nexport class ReceiptsResource {\n constructor(private http: HttpClient) {}\n\n list(query?: { cursor?: string; limit?: number }): Promise<PaginatedResponse> {\n return this.http.get(\"/api/v1/receipts\", { query });\n }\n\n async download(id: string): Promise<Blob> {\n const response = await this.http.rawRequest(\"GET\", `/api/v1/receipts/${id}/download`);\n return response.blob();\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\";\nimport { TenantsResource } from \"./resources/tenants\";\nimport { ReceiptsResource } from \"./resources/receipts\";\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 tenants: TenantsResource;\n receipts: ReceiptsResource;\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 tenants: new TenantsResource(http),\n receipts: new ReceiptsResource(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":[]}
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/resources/tenants.ts","../src/resources/receipts.ts","../src/resources/email-preferences.ts","../src/resources/contact.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 UpsertBillingDto,\n UpdatePreferencesDto,\n CreateConversationDto,\n AddMessageDto,\n GenerateDto,\n TriggerImageDto,\n CreateCheckoutDto,\n CreateCustomCheckoutDto,\n ContactDto,\n MessageResponseDto,\n AuthResponseDto,\n TokensResponseDto,\n UserResponseDto,\n PlanResponseDto,\n CreditBalanceResponseDto,\n CreditTransactionResponseDto,\n BillingResponseDto,\n PreferenceResponseDto,\n ConversationResponseDto,\n ConversationMessageResponseDto,\n ImageStatusResponseDto,\n CheckoutResponseDto,\n CreditPricingResponseDto,\n TenantPublicInfoDto,\n PingResponseDto,\n StartAuthResponseDto,\n ReceiptItemDto,\n\n OtpType,\n UserRole,\n PlanType,\n CreditTransactionType,\n ConversationStatus,\n MessageRole,\n ImageGenerationStatus,\n EmailPreferencesResponseDto,\n EmailCategoryDto,\n UpdateEmailPreferencesDto,\n UpdateEmailPreferencesTokenDto,\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 } from \"../types\";\n\nexport class PlansResource {\n constructor(private http: HttpClient) {}\n\n list(): Promise<PlanResponseDto[]> {\n return this.http.get(\"/api/v1/public/plans\", { authenticated: false });\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n CreditBalanceResponseDto,\n CreditTransactionResponseDto,\n CreditTransactionType,\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}\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 {\n CreateCheckoutDto,\n CreateCustomCheckoutDto,\n CheckoutResponseDto,\n CreditPricingResponseDto,\n} 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 checkoutCustom(data: CreateCustomCheckoutDto): Promise<CheckoutResponseDto> {\n return this.http.post(\"/api/v1/payments/checkout/custom\", data);\n }\n\n creditPricing(): Promise<CreditPricingResponseDto> {\n return this.http.get(\"/api/v1/payments/credit-pricing\");\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { TenantPublicInfoDto } from \"../types\";\n\nexport class TenantsResource {\n constructor(private http: HttpClient) {}\n\n getPublicInfo(tenantId: string): Promise<TenantPublicInfoDto> {\n return this.http.get(\"/api/v1/tenants/public-info\", {\n authenticated: false,\n query: { tenantId },\n });\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { ReceiptItemDto } from \"../types\";\n\nexport class ReceiptsResource {\n constructor(private http: HttpClient) {}\n\n list(query?: { cursor?: string; limit?: number }): Promise<ReceiptItemDto[]> {\n return this.http.get(\"/api/v1/receipts\", { query });\n }\n\n async download(id: string): Promise<Blob> {\n const response = await this.http.rawRequest(\"GET\", `/api/v1/receipts/${id}/download`);\n return response.blob();\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n EmailPreferencesResponseDto,\n UpdateEmailPreferencesDto,\n UpdateEmailPreferencesTokenDto,\n} from \"../types\";\n\nexport class EmailPreferencesResource {\n constructor(private http: HttpClient) {}\n\n /** Public, token-based: fetch subscription state via an unsubscribe link token. */\n getByToken(token: string): Promise<EmailPreferencesResponseDto> {\n return this.http.get(\"/api/v1/email-preferences\", {\n authenticated: false,\n query: { token },\n });\n }\n\n /** Public, token-based: update subscription state via an unsubscribe link token. */\n updateByToken(data: UpdateEmailPreferencesTokenDto): Promise<EmailPreferencesResponseDto> {\n return this.http.patch(\"/api/v1/email-preferences\", data, { authenticated: false });\n }\n\n /** Authenticated: fetch the current user's subscription state. */\n getMine(): Promise<EmailPreferencesResponseDto> {\n return this.http.get(\"/api/v1/email-preferences/me\");\n }\n\n /** Authenticated: update the current user's subscription state. */\n updateMine(data: UpdateEmailPreferencesDto): Promise<EmailPreferencesResponseDto> {\n return this.http.patch(\"/api/v1/email-preferences/me\", data);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { ContactDto, MessageResponseDto } from \"../types\";\n\nexport class ContactResource {\n constructor(private http: HttpClient) {}\n\n /** Send a contact-form message to the tenant's contact inbox. Public — no auth required. */\n send(data: ContactDto): Promise<MessageResponseDto> {\n return this.http.post(\"/api/v1/contact\", data, { authenticated: false });\n }\n}\n","import { HttpClient } from \"./http\";\nimport type { TokensResponseDto, PingResponseDto } 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\";\nimport { TenantsResource } from \"./resources/tenants\";\nimport { ReceiptsResource } from \"./resources/receipts\";\nimport { EmailPreferencesResource } from \"./resources/email-preferences\";\nimport { ContactResource } from \"./resources/contact\";\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 tenants: TenantsResource;\n receipts: ReceiptsResource;\n emailPreferences: EmailPreferencesResource;\n contact: ContactResource;\n /**\n * Verify the client is configured correctly: confirms the base URL is\n * reachable and the tenant key is valid. Resolves with the tenant identity\n * when the SDK is ready to use, and rejects with an {@link ApiError} otherwise.\n */\n ping(): Promise<PingResponseDto>;\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 tenants: new TenantsResource(http),\n receipts: new ReceiptsResource(http),\n emailPreferences: new EmailPreferencesResource(http),\n contact: new ContactResource(http),\n ping() {\n return http.get<PingResponseDto>(\"/api/v1/ping\", { authenticated: false });\n },\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":[]}
package/dist/index.d.cts CHANGED
@@ -7,6 +7,19 @@ interface components {
7
7
  publicApiKey: string;
8
8
  frontendUrl: string;
9
9
  };
10
+ PingResponseDto: {
11
+ /**
12
+ * @description Always "ok" when credentials are valid
13
+ * @example ok
14
+ */
15
+ status: string;
16
+ /** @description Resolved tenant ID for the provided API key */
17
+ tenantId: string;
18
+ /** @description Resolved tenant name for the provided API key */
19
+ tenantName: string;
20
+ /** @description Server timestamp (ISO 8601) */
21
+ timestamp: string;
22
+ };
10
23
  RegisterDto: {
11
24
  /** @example user@example.com */
12
25
  email: string;
@@ -138,26 +151,6 @@ interface components {
138
151
  referenceId: Record<string, never> | null;
139
152
  description: Record<string, never> | null;
140
153
  };
141
- PurchaseCreditsDto: {
142
- /** Format: uuid */
143
- planId: string;
144
- };
145
- CreditBalanceEntityResponseDto: {
146
- /** Format: uuid */
147
- id: string;
148
- /** Format: date-time */
149
- createdAt: string;
150
- /** Format: date-time */
151
- updatedAt: string;
152
- /** Format: uuid */
153
- userId: string;
154
- /** @example 500 */
155
- balance: number;
156
- };
157
- PurchaseCreditsResponseDto: {
158
- transaction: components["schemas"]["CreditTransactionResponseDto"];
159
- balance: components["schemas"]["CreditBalanceEntityResponseDto"];
160
- };
161
154
  BillingResponseDto: {
162
155
  /** Format: uuid */
163
156
  id: string;
@@ -242,6 +235,47 @@ interface components {
242
235
  */
243
236
  preferences: Record<string, never>;
244
237
  };
238
+ EmailCategoryDto: {
239
+ /** @example marketing */
240
+ key: string;
241
+ /** @example Marketing & promotional emails */
242
+ label: string;
243
+ /** @example true */
244
+ subscribed: boolean;
245
+ };
246
+ EmailPreferencesResponseDto: {
247
+ /** @example j•••@example.com */
248
+ email: string;
249
+ categories: components["schemas"]["EmailCategoryDto"][];
250
+ };
251
+ UpdateEmailPreferencesTokenDto: {
252
+ /** @example eyJhbGciOi... */
253
+ token: string;
254
+ /**
255
+ * @example {
256
+ * "marketing": false
257
+ * }
258
+ */
259
+ preferences: Record<string, never>;
260
+ };
261
+ UpdateEmailPreferencesDto: {
262
+ /**
263
+ * @example {
264
+ * "marketing": false
265
+ * }
266
+ */
267
+ preferences: Record<string, never>;
268
+ };
269
+ ContactDto: {
270
+ /** @example Jane Doe */
271
+ name: string;
272
+ /** @example jane@example.com */
273
+ email: string;
274
+ /** @example Question about my booking */
275
+ subject: string;
276
+ /** @example Hello, I would like to ask about... */
277
+ body: string;
278
+ };
245
279
  CreateConversationDto: {
246
280
  title?: string;
247
281
  /** @example travel */
@@ -361,11 +395,17 @@ interface components {
361
395
  /** @example https://app.example.com/payment/cancel */
362
396
  cancelUrl: string;
363
397
  };
364
- PaginatedResponse: {
365
- data: unknown[][];
366
- hasMore: boolean;
367
- nextCursor: string | null;
368
- total?: number;
398
+ ReceiptItemDto: {
399
+ id: string;
400
+ receiptNumber: string;
401
+ paymentId: string;
402
+ amountCents: number;
403
+ currency: string;
404
+ credits: number;
405
+ /** Format: date-time */
406
+ issuedAt: string;
407
+ /** Format: date-time */
408
+ createdAt: string;
369
409
  };
370
410
  };
371
411
  responses: never;
@@ -382,7 +422,6 @@ type RefreshTokenDto = components["schemas"]["RefreshTokenDto"];
382
422
  type UpdateProfileDto = components["schemas"]["UpdateProfileDto"];
383
423
  type RequestEmailChangeDto = components["schemas"]["RequestEmailChangeDto"];
384
424
  type ConfirmEmailChangeDto = components["schemas"]["ConfirmEmailChangeDto"];
385
- type PurchaseCreditsDto = components["schemas"]["PurchaseCreditsDto"];
386
425
  type UpsertBillingDto = components["schemas"]["UpsertBillingDto"];
387
426
  type UpdatePreferencesDto = components["schemas"]["UpdatePreferencesDto"];
388
427
  type CreateConversationDto = components["schemas"]["CreateConversationDto"];
@@ -391,6 +430,7 @@ type GenerateDto = components["schemas"]["GenerateDto"];
391
430
  type TriggerImageDto = components["schemas"]["TriggerImageDto"];
392
431
  type CreateCheckoutDto = components["schemas"]["CreateCheckoutDto"];
393
432
  type CreateCustomCheckoutDto = components["schemas"]["CreateCustomCheckoutDto"];
433
+ type ContactDto = components["schemas"]["ContactDto"];
394
434
  type MessageResponseDto = components["schemas"]["MessageResponseDto"];
395
435
  type StartAuthResponseDto = MessageResponseDto & {
396
436
  type: OtpType;
@@ -401,8 +441,6 @@ type UserResponseDto = components["schemas"]["UserResponseDto"];
401
441
  type PlanResponseDto = components["schemas"]["PlanResponseDto"];
402
442
  type CreditBalanceResponseDto = components["schemas"]["CreditBalanceResponseDto"];
403
443
  type CreditTransactionResponseDto = components["schemas"]["CreditTransactionResponseDto"];
404
- type PurchaseCreditsResponseDto = components["schemas"]["PurchaseCreditsResponseDto"];
405
- type CreditBalanceEntityResponseDto = components["schemas"]["CreditBalanceEntityResponseDto"];
406
444
  type BillingResponseDto = components["schemas"]["BillingResponseDto"];
407
445
  type PreferenceResponseDto = components["schemas"]["PreferenceResponseDto"];
408
446
  type ConversationResponseDto = components["schemas"]["ConversationResponseDto"] & {
@@ -414,7 +452,8 @@ type ImageStatusResponseDto = components["schemas"]["ImageStatusResponseDto"];
414
452
  type CheckoutResponseDto = components["schemas"]["CheckoutResponseDto"];
415
453
  type CreditPricingResponseDto = components["schemas"]["CreditPricingResponseDto"];
416
454
  type TenantPublicInfoDto = components["schemas"]["TenantPublicInfoDto"];
417
- type PaginatedResponse = components["schemas"]["PaginatedResponse"];
455
+ type PingResponseDto = components["schemas"]["PingResponseDto"];
456
+ type ReceiptItemDto = components["schemas"]["ReceiptItemDto"];
418
457
  type OtpType = components["schemas"]["OtpType"];
419
458
  type UserRole = components["schemas"]["UserRole"];
420
459
  type PlanType = components["schemas"]["PlanType"];
@@ -422,6 +461,10 @@ type CreditTransactionType = components["schemas"]["CreditTransactionType"];
422
461
  type ConversationStatus = ConversationResponseDto["status"];
423
462
  type MessageRole = ConversationMessageResponseDto["role"];
424
463
  type ImageGenerationStatus = ImageStatusResponseDto["status"];
464
+ type EmailPreferencesResponseDto = components["schemas"]["EmailPreferencesResponseDto"];
465
+ type EmailCategoryDto = components["schemas"]["EmailCategoryDto"];
466
+ type UpdateEmailPreferencesDto = components["schemas"]["UpdateEmailPreferencesDto"];
467
+ type UpdateEmailPreferencesTokenDto = components["schemas"]["UpdateEmailPreferencesTokenDto"];
425
468
 
426
469
  interface HttpClientConfig {
427
470
  baseUrl: string;
@@ -487,7 +530,6 @@ declare class CreditsResource {
487
530
  limit?: number;
488
531
  type?: CreditTransactionType;
489
532
  }): Promise<CreditTransactionResponseDto[]>;
490
- purchase(data: PurchaseCreditsDto): Promise<PurchaseCreditsResponseDto>;
491
533
  }
492
534
 
493
535
  declare class BillingResource {
@@ -574,10 +616,30 @@ declare class ReceiptsResource {
574
616
  list(query?: {
575
617
  cursor?: string;
576
618
  limit?: number;
577
- }): Promise<PaginatedResponse>;
619
+ }): Promise<ReceiptItemDto[]>;
578
620
  download(id: string): Promise<Blob>;
579
621
  }
580
622
 
623
+ declare class EmailPreferencesResource {
624
+ private http;
625
+ constructor(http: HttpClient);
626
+ /** Public, token-based: fetch subscription state via an unsubscribe link token. */
627
+ getByToken(token: string): Promise<EmailPreferencesResponseDto>;
628
+ /** Public, token-based: update subscription state via an unsubscribe link token. */
629
+ updateByToken(data: UpdateEmailPreferencesTokenDto): Promise<EmailPreferencesResponseDto>;
630
+ /** Authenticated: fetch the current user's subscription state. */
631
+ getMine(): Promise<EmailPreferencesResponseDto>;
632
+ /** Authenticated: update the current user's subscription state. */
633
+ updateMine(data: UpdateEmailPreferencesDto): Promise<EmailPreferencesResponseDto>;
634
+ }
635
+
636
+ declare class ContactResource {
637
+ private http;
638
+ constructor(http: HttpClient);
639
+ /** Send a contact-form message to the tenant's contact inbox. Public — no auth required. */
640
+ send(data: ContactDto): Promise<MessageResponseDto>;
641
+ }
642
+
581
643
  interface ClientOptions {
582
644
  baseUrl: string;
583
645
  tenantKey: string;
@@ -598,6 +660,14 @@ interface AiAssistantsClient {
598
660
  payments: PaymentsResource;
599
661
  tenants: TenantsResource;
600
662
  receipts: ReceiptsResource;
663
+ emailPreferences: EmailPreferencesResource;
664
+ contact: ContactResource;
665
+ /**
666
+ * Verify the client is configured correctly: confirms the base URL is
667
+ * reachable and the tenant key is valid. Resolves with the tenant identity
668
+ * when the SDK is ready to use, and rejects with an {@link ApiError} otherwise.
669
+ */
670
+ ping(): Promise<PingResponseDto>;
601
671
  setAccessToken(token: string): void;
602
672
  setRefreshToken(token: string): void;
603
673
  }
@@ -610,4 +680,4 @@ declare class ApiError extends Error {
610
680
  constructor(statusCode: number, code: string, message: string | string[], requestId?: string | undefined);
611
681
  }
612
682
 
613
- export { type AddMessageDto, type AiAssistantsClient, ApiError, type AuthResponseDto, type BillingResponseDto, type CheckoutResponseDto, type ClientOptions, type ConfirmEmailChangeDto, type ConversationMessageResponseDto, type ConversationResponseDto, type ConversationStatus, type CreateCheckoutDto, type CreateConversationDto, type CreateCustomCheckoutDto, type CreditBalanceEntityResponseDto, type CreditBalanceResponseDto, type CreditPricingResponseDto, type CreditTransactionResponseDto, type CreditTransactionType, type GenerateDto, type GenerationDoneData, type ImageGenerationStatus, type ImageStatusResponseDto, type LoginDto, type MessageResponseDto, type MessageRole, type OtpType, type PaginatedResponse, type PlanResponseDto, type PlanType, type PreferenceResponseDto, type PurchaseCreditsDto, type PurchaseCreditsResponseDto, type RefreshTokenDto, type RegisterDto, type RequestEmailChangeDto, type SseStreamOptions, type StartAuthResponseDto, type TenantPublicInfoDto, type TokensResponseDto, type TriggerImageDto, type UpdatePreferencesDto, type UpdateProfileDto, type UpsertBillingDto, type UserResponseDto, type UserRole, type VerifyOtpDto, createClient };
683
+ export { type AddMessageDto, type AiAssistantsClient, ApiError, type AuthResponseDto, type BillingResponseDto, type CheckoutResponseDto, type ClientOptions, type ConfirmEmailChangeDto, type ContactDto, type ConversationMessageResponseDto, type ConversationResponseDto, type ConversationStatus, type CreateCheckoutDto, type CreateConversationDto, type CreateCustomCheckoutDto, type CreditBalanceResponseDto, type CreditPricingResponseDto, type CreditTransactionResponseDto, type CreditTransactionType, type EmailCategoryDto, type EmailPreferencesResponseDto, type GenerateDto, type GenerationDoneData, type ImageGenerationStatus, type ImageStatusResponseDto, type LoginDto, type MessageResponseDto, type MessageRole, type OtpType, type PingResponseDto, type PlanResponseDto, type PlanType, type PreferenceResponseDto, type ReceiptItemDto, type RefreshTokenDto, type RegisterDto, type RequestEmailChangeDto, type SseStreamOptions, type StartAuthResponseDto, type TenantPublicInfoDto, type TokensResponseDto, type TriggerImageDto, type UpdateEmailPreferencesDto, type UpdateEmailPreferencesTokenDto, type UpdatePreferencesDto, type UpdateProfileDto, type UpsertBillingDto, type UserResponseDto, type UserRole, type VerifyOtpDto, createClient };
package/dist/index.d.ts CHANGED
@@ -7,6 +7,19 @@ interface components {
7
7
  publicApiKey: string;
8
8
  frontendUrl: string;
9
9
  };
10
+ PingResponseDto: {
11
+ /**
12
+ * @description Always "ok" when credentials are valid
13
+ * @example ok
14
+ */
15
+ status: string;
16
+ /** @description Resolved tenant ID for the provided API key */
17
+ tenantId: string;
18
+ /** @description Resolved tenant name for the provided API key */
19
+ tenantName: string;
20
+ /** @description Server timestamp (ISO 8601) */
21
+ timestamp: string;
22
+ };
10
23
  RegisterDto: {
11
24
  /** @example user@example.com */
12
25
  email: string;
@@ -138,26 +151,6 @@ interface components {
138
151
  referenceId: Record<string, never> | null;
139
152
  description: Record<string, never> | null;
140
153
  };
141
- PurchaseCreditsDto: {
142
- /** Format: uuid */
143
- planId: string;
144
- };
145
- CreditBalanceEntityResponseDto: {
146
- /** Format: uuid */
147
- id: string;
148
- /** Format: date-time */
149
- createdAt: string;
150
- /** Format: date-time */
151
- updatedAt: string;
152
- /** Format: uuid */
153
- userId: string;
154
- /** @example 500 */
155
- balance: number;
156
- };
157
- PurchaseCreditsResponseDto: {
158
- transaction: components["schemas"]["CreditTransactionResponseDto"];
159
- balance: components["schemas"]["CreditBalanceEntityResponseDto"];
160
- };
161
154
  BillingResponseDto: {
162
155
  /** Format: uuid */
163
156
  id: string;
@@ -242,6 +235,47 @@ interface components {
242
235
  */
243
236
  preferences: Record<string, never>;
244
237
  };
238
+ EmailCategoryDto: {
239
+ /** @example marketing */
240
+ key: string;
241
+ /** @example Marketing & promotional emails */
242
+ label: string;
243
+ /** @example true */
244
+ subscribed: boolean;
245
+ };
246
+ EmailPreferencesResponseDto: {
247
+ /** @example j•••@example.com */
248
+ email: string;
249
+ categories: components["schemas"]["EmailCategoryDto"][];
250
+ };
251
+ UpdateEmailPreferencesTokenDto: {
252
+ /** @example eyJhbGciOi... */
253
+ token: string;
254
+ /**
255
+ * @example {
256
+ * "marketing": false
257
+ * }
258
+ */
259
+ preferences: Record<string, never>;
260
+ };
261
+ UpdateEmailPreferencesDto: {
262
+ /**
263
+ * @example {
264
+ * "marketing": false
265
+ * }
266
+ */
267
+ preferences: Record<string, never>;
268
+ };
269
+ ContactDto: {
270
+ /** @example Jane Doe */
271
+ name: string;
272
+ /** @example jane@example.com */
273
+ email: string;
274
+ /** @example Question about my booking */
275
+ subject: string;
276
+ /** @example Hello, I would like to ask about... */
277
+ body: string;
278
+ };
245
279
  CreateConversationDto: {
246
280
  title?: string;
247
281
  /** @example travel */
@@ -361,11 +395,17 @@ interface components {
361
395
  /** @example https://app.example.com/payment/cancel */
362
396
  cancelUrl: string;
363
397
  };
364
- PaginatedResponse: {
365
- data: unknown[][];
366
- hasMore: boolean;
367
- nextCursor: string | null;
368
- total?: number;
398
+ ReceiptItemDto: {
399
+ id: string;
400
+ receiptNumber: string;
401
+ paymentId: string;
402
+ amountCents: number;
403
+ currency: string;
404
+ credits: number;
405
+ /** Format: date-time */
406
+ issuedAt: string;
407
+ /** Format: date-time */
408
+ createdAt: string;
369
409
  };
370
410
  };
371
411
  responses: never;
@@ -382,7 +422,6 @@ type RefreshTokenDto = components["schemas"]["RefreshTokenDto"];
382
422
  type UpdateProfileDto = components["schemas"]["UpdateProfileDto"];
383
423
  type RequestEmailChangeDto = components["schemas"]["RequestEmailChangeDto"];
384
424
  type ConfirmEmailChangeDto = components["schemas"]["ConfirmEmailChangeDto"];
385
- type PurchaseCreditsDto = components["schemas"]["PurchaseCreditsDto"];
386
425
  type UpsertBillingDto = components["schemas"]["UpsertBillingDto"];
387
426
  type UpdatePreferencesDto = components["schemas"]["UpdatePreferencesDto"];
388
427
  type CreateConversationDto = components["schemas"]["CreateConversationDto"];
@@ -391,6 +430,7 @@ type GenerateDto = components["schemas"]["GenerateDto"];
391
430
  type TriggerImageDto = components["schemas"]["TriggerImageDto"];
392
431
  type CreateCheckoutDto = components["schemas"]["CreateCheckoutDto"];
393
432
  type CreateCustomCheckoutDto = components["schemas"]["CreateCustomCheckoutDto"];
433
+ type ContactDto = components["schemas"]["ContactDto"];
394
434
  type MessageResponseDto = components["schemas"]["MessageResponseDto"];
395
435
  type StartAuthResponseDto = MessageResponseDto & {
396
436
  type: OtpType;
@@ -401,8 +441,6 @@ type UserResponseDto = components["schemas"]["UserResponseDto"];
401
441
  type PlanResponseDto = components["schemas"]["PlanResponseDto"];
402
442
  type CreditBalanceResponseDto = components["schemas"]["CreditBalanceResponseDto"];
403
443
  type CreditTransactionResponseDto = components["schemas"]["CreditTransactionResponseDto"];
404
- type PurchaseCreditsResponseDto = components["schemas"]["PurchaseCreditsResponseDto"];
405
- type CreditBalanceEntityResponseDto = components["schemas"]["CreditBalanceEntityResponseDto"];
406
444
  type BillingResponseDto = components["schemas"]["BillingResponseDto"];
407
445
  type PreferenceResponseDto = components["schemas"]["PreferenceResponseDto"];
408
446
  type ConversationResponseDto = components["schemas"]["ConversationResponseDto"] & {
@@ -414,7 +452,8 @@ type ImageStatusResponseDto = components["schemas"]["ImageStatusResponseDto"];
414
452
  type CheckoutResponseDto = components["schemas"]["CheckoutResponseDto"];
415
453
  type CreditPricingResponseDto = components["schemas"]["CreditPricingResponseDto"];
416
454
  type TenantPublicInfoDto = components["schemas"]["TenantPublicInfoDto"];
417
- type PaginatedResponse = components["schemas"]["PaginatedResponse"];
455
+ type PingResponseDto = components["schemas"]["PingResponseDto"];
456
+ type ReceiptItemDto = components["schemas"]["ReceiptItemDto"];
418
457
  type OtpType = components["schemas"]["OtpType"];
419
458
  type UserRole = components["schemas"]["UserRole"];
420
459
  type PlanType = components["schemas"]["PlanType"];
@@ -422,6 +461,10 @@ type CreditTransactionType = components["schemas"]["CreditTransactionType"];
422
461
  type ConversationStatus = ConversationResponseDto["status"];
423
462
  type MessageRole = ConversationMessageResponseDto["role"];
424
463
  type ImageGenerationStatus = ImageStatusResponseDto["status"];
464
+ type EmailPreferencesResponseDto = components["schemas"]["EmailPreferencesResponseDto"];
465
+ type EmailCategoryDto = components["schemas"]["EmailCategoryDto"];
466
+ type UpdateEmailPreferencesDto = components["schemas"]["UpdateEmailPreferencesDto"];
467
+ type UpdateEmailPreferencesTokenDto = components["schemas"]["UpdateEmailPreferencesTokenDto"];
425
468
 
426
469
  interface HttpClientConfig {
427
470
  baseUrl: string;
@@ -487,7 +530,6 @@ declare class CreditsResource {
487
530
  limit?: number;
488
531
  type?: CreditTransactionType;
489
532
  }): Promise<CreditTransactionResponseDto[]>;
490
- purchase(data: PurchaseCreditsDto): Promise<PurchaseCreditsResponseDto>;
491
533
  }
492
534
 
493
535
  declare class BillingResource {
@@ -574,10 +616,30 @@ declare class ReceiptsResource {
574
616
  list(query?: {
575
617
  cursor?: string;
576
618
  limit?: number;
577
- }): Promise<PaginatedResponse>;
619
+ }): Promise<ReceiptItemDto[]>;
578
620
  download(id: string): Promise<Blob>;
579
621
  }
580
622
 
623
+ declare class EmailPreferencesResource {
624
+ private http;
625
+ constructor(http: HttpClient);
626
+ /** Public, token-based: fetch subscription state via an unsubscribe link token. */
627
+ getByToken(token: string): Promise<EmailPreferencesResponseDto>;
628
+ /** Public, token-based: update subscription state via an unsubscribe link token. */
629
+ updateByToken(data: UpdateEmailPreferencesTokenDto): Promise<EmailPreferencesResponseDto>;
630
+ /** Authenticated: fetch the current user's subscription state. */
631
+ getMine(): Promise<EmailPreferencesResponseDto>;
632
+ /** Authenticated: update the current user's subscription state. */
633
+ updateMine(data: UpdateEmailPreferencesDto): Promise<EmailPreferencesResponseDto>;
634
+ }
635
+
636
+ declare class ContactResource {
637
+ private http;
638
+ constructor(http: HttpClient);
639
+ /** Send a contact-form message to the tenant's contact inbox. Public — no auth required. */
640
+ send(data: ContactDto): Promise<MessageResponseDto>;
641
+ }
642
+
581
643
  interface ClientOptions {
582
644
  baseUrl: string;
583
645
  tenantKey: string;
@@ -598,6 +660,14 @@ interface AiAssistantsClient {
598
660
  payments: PaymentsResource;
599
661
  tenants: TenantsResource;
600
662
  receipts: ReceiptsResource;
663
+ emailPreferences: EmailPreferencesResource;
664
+ contact: ContactResource;
665
+ /**
666
+ * Verify the client is configured correctly: confirms the base URL is
667
+ * reachable and the tenant key is valid. Resolves with the tenant identity
668
+ * when the SDK is ready to use, and rejects with an {@link ApiError} otherwise.
669
+ */
670
+ ping(): Promise<PingResponseDto>;
601
671
  setAccessToken(token: string): void;
602
672
  setRefreshToken(token: string): void;
603
673
  }
@@ -610,4 +680,4 @@ declare class ApiError extends Error {
610
680
  constructor(statusCode: number, code: string, message: string | string[], requestId?: string | undefined);
611
681
  }
612
682
 
613
- export { type AddMessageDto, type AiAssistantsClient, ApiError, type AuthResponseDto, type BillingResponseDto, type CheckoutResponseDto, type ClientOptions, type ConfirmEmailChangeDto, type ConversationMessageResponseDto, type ConversationResponseDto, type ConversationStatus, type CreateCheckoutDto, type CreateConversationDto, type CreateCustomCheckoutDto, type CreditBalanceEntityResponseDto, type CreditBalanceResponseDto, type CreditPricingResponseDto, type CreditTransactionResponseDto, type CreditTransactionType, type GenerateDto, type GenerationDoneData, type ImageGenerationStatus, type ImageStatusResponseDto, type LoginDto, type MessageResponseDto, type MessageRole, type OtpType, type PaginatedResponse, type PlanResponseDto, type PlanType, type PreferenceResponseDto, type PurchaseCreditsDto, type PurchaseCreditsResponseDto, type RefreshTokenDto, type RegisterDto, type RequestEmailChangeDto, type SseStreamOptions, type StartAuthResponseDto, type TenantPublicInfoDto, type TokensResponseDto, type TriggerImageDto, type UpdatePreferencesDto, type UpdateProfileDto, type UpsertBillingDto, type UserResponseDto, type UserRole, type VerifyOtpDto, createClient };
683
+ export { type AddMessageDto, type AiAssistantsClient, ApiError, type AuthResponseDto, type BillingResponseDto, type CheckoutResponseDto, type ClientOptions, type ConfirmEmailChangeDto, type ContactDto, type ConversationMessageResponseDto, type ConversationResponseDto, type ConversationStatus, type CreateCheckoutDto, type CreateConversationDto, type CreateCustomCheckoutDto, type CreditBalanceResponseDto, type CreditPricingResponseDto, type CreditTransactionResponseDto, type CreditTransactionType, type EmailCategoryDto, type EmailPreferencesResponseDto, type GenerateDto, type GenerationDoneData, type ImageGenerationStatus, type ImageStatusResponseDto, type LoginDto, type MessageResponseDto, type MessageRole, type OtpType, type PingResponseDto, type PlanResponseDto, type PlanType, type PreferenceResponseDto, type ReceiptItemDto, type RefreshTokenDto, type RegisterDto, type RequestEmailChangeDto, type SseStreamOptions, type StartAuthResponseDto, type TenantPublicInfoDto, type TokensResponseDto, type TriggerImageDto, type UpdateEmailPreferencesDto, type UpdateEmailPreferencesTokenDto, type UpdatePreferencesDto, type UpdateProfileDto, type UpsertBillingDto, type UserResponseDto, type UserRole, type VerifyOtpDto, createClient };
package/dist/index.js CHANGED
@@ -189,9 +189,6 @@ var CreditsResource = class {
189
189
  getTransactions(query) {
190
190
  return this.http.get("/api/v1/credits/transactions", { query });
191
191
  }
192
- purchase(data) {
193
- return this.http.post("/api/v1/credits/purchase", data);
194
- }
195
192
  };
196
193
 
197
194
  // src/resources/billing.ts
@@ -365,6 +362,43 @@ var ReceiptsResource = class {
365
362
  }
366
363
  };
367
364
 
365
+ // src/resources/email-preferences.ts
366
+ var EmailPreferencesResource = class {
367
+ constructor(http) {
368
+ this.http = http;
369
+ }
370
+ /** Public, token-based: fetch subscription state via an unsubscribe link token. */
371
+ getByToken(token) {
372
+ return this.http.get("/api/v1/email-preferences", {
373
+ authenticated: false,
374
+ query: { token }
375
+ });
376
+ }
377
+ /** Public, token-based: update subscription state via an unsubscribe link token. */
378
+ updateByToken(data) {
379
+ return this.http.patch("/api/v1/email-preferences", data, { authenticated: false });
380
+ }
381
+ /** Authenticated: fetch the current user's subscription state. */
382
+ getMine() {
383
+ return this.http.get("/api/v1/email-preferences/me");
384
+ }
385
+ /** Authenticated: update the current user's subscription state. */
386
+ updateMine(data) {
387
+ return this.http.patch("/api/v1/email-preferences/me", data);
388
+ }
389
+ };
390
+
391
+ // src/resources/contact.ts
392
+ var ContactResource = class {
393
+ constructor(http) {
394
+ this.http = http;
395
+ }
396
+ /** Send a contact-form message to the tenant's contact inbox. Public — no auth required. */
397
+ send(data) {
398
+ return this.http.post("/api/v1/contact", data, { authenticated: false });
399
+ }
400
+ };
401
+
368
402
  // src/client.ts
369
403
  function createClient(options) {
370
404
  let accessToken = options.accessToken ?? null;
@@ -393,6 +427,11 @@ function createClient(options) {
393
427
  payments: new PaymentsResource(http),
394
428
  tenants: new TenantsResource(http),
395
429
  receipts: new ReceiptsResource(http),
430
+ emailPreferences: new EmailPreferencesResource(http),
431
+ contact: new ContactResource(http),
432
+ ping() {
433
+ return http.get("/api/v1/ping", { authenticated: false });
434
+ },
396
435
  setAccessToken(token) {
397
436
  accessToken = token;
398
437
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/resources/tenants.ts","../src/resources/receipts.ts","../src/client.ts"],"sourcesContent":["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 } from \"../types\";\n\nexport class PlansResource {\n constructor(private http: HttpClient) {}\n\n list(): Promise<PlanResponseDto[]> {\n return this.http.get(\"/api/v1/public/plans\", { 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 {\n CreateCheckoutDto,\n CreateCustomCheckoutDto,\n CheckoutResponseDto,\n CreditPricingResponseDto,\n} 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 checkoutCustom(data: CreateCustomCheckoutDto): Promise<CheckoutResponseDto> {\n return this.http.post(\"/api/v1/payments/checkout/custom\", data);\n }\n\n creditPricing(): Promise<CreditPricingResponseDto> {\n return this.http.get(\"/api/v1/payments/credit-pricing\");\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { TenantPublicInfoDto } from \"../types\";\n\nexport class TenantsResource {\n constructor(private http: HttpClient) {}\n\n getPublicInfo(tenantId: string): Promise<TenantPublicInfoDto> {\n return this.http.get(\"/api/v1/tenants/public-info\", {\n authenticated: false,\n query: { tenantId },\n });\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { PaginatedResponse } from \"../types\";\n\nexport class ReceiptsResource {\n constructor(private http: HttpClient) {}\n\n list(query?: { cursor?: string; limit?: number }): Promise<PaginatedResponse> {\n return this.http.get(\"/api/v1/receipts\", { query });\n }\n\n async download(id: string): Promise<Blob> {\n const response = await this.http.rawRequest(\"GET\", `/api/v1/receipts/${id}/download`);\n return response.blob();\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\";\nimport { TenantsResource } from \"./resources/tenants\";\nimport { ReceiptsResource } from \"./resources/receipts\";\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 tenants: TenantsResource;\n receipts: ReceiptsResource;\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 tenants: new TenantsResource(http),\n receipts: new ReceiptsResource(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":[]}
1
+ {"version":3,"sources":["../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/resources/tenants.ts","../src/resources/receipts.ts","../src/resources/email-preferences.ts","../src/resources/contact.ts","../src/client.ts"],"sourcesContent":["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 } from \"../types\";\n\nexport class PlansResource {\n constructor(private http: HttpClient) {}\n\n list(): Promise<PlanResponseDto[]> {\n return this.http.get(\"/api/v1/public/plans\", { authenticated: false });\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n CreditBalanceResponseDto,\n CreditTransactionResponseDto,\n CreditTransactionType,\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}\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 {\n CreateCheckoutDto,\n CreateCustomCheckoutDto,\n CheckoutResponseDto,\n CreditPricingResponseDto,\n} 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 checkoutCustom(data: CreateCustomCheckoutDto): Promise<CheckoutResponseDto> {\n return this.http.post(\"/api/v1/payments/checkout/custom\", data);\n }\n\n creditPricing(): Promise<CreditPricingResponseDto> {\n return this.http.get(\"/api/v1/payments/credit-pricing\");\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { TenantPublicInfoDto } from \"../types\";\n\nexport class TenantsResource {\n constructor(private http: HttpClient) {}\n\n getPublicInfo(tenantId: string): Promise<TenantPublicInfoDto> {\n return this.http.get(\"/api/v1/tenants/public-info\", {\n authenticated: false,\n query: { tenantId },\n });\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { ReceiptItemDto } from \"../types\";\n\nexport class ReceiptsResource {\n constructor(private http: HttpClient) {}\n\n list(query?: { cursor?: string; limit?: number }): Promise<ReceiptItemDto[]> {\n return this.http.get(\"/api/v1/receipts\", { query });\n }\n\n async download(id: string): Promise<Blob> {\n const response = await this.http.rawRequest(\"GET\", `/api/v1/receipts/${id}/download`);\n return response.blob();\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type {\n EmailPreferencesResponseDto,\n UpdateEmailPreferencesDto,\n UpdateEmailPreferencesTokenDto,\n} from \"../types\";\n\nexport class EmailPreferencesResource {\n constructor(private http: HttpClient) {}\n\n /** Public, token-based: fetch subscription state via an unsubscribe link token. */\n getByToken(token: string): Promise<EmailPreferencesResponseDto> {\n return this.http.get(\"/api/v1/email-preferences\", {\n authenticated: false,\n query: { token },\n });\n }\n\n /** Public, token-based: update subscription state via an unsubscribe link token. */\n updateByToken(data: UpdateEmailPreferencesTokenDto): Promise<EmailPreferencesResponseDto> {\n return this.http.patch(\"/api/v1/email-preferences\", data, { authenticated: false });\n }\n\n /** Authenticated: fetch the current user's subscription state. */\n getMine(): Promise<EmailPreferencesResponseDto> {\n return this.http.get(\"/api/v1/email-preferences/me\");\n }\n\n /** Authenticated: update the current user's subscription state. */\n updateMine(data: UpdateEmailPreferencesDto): Promise<EmailPreferencesResponseDto> {\n return this.http.patch(\"/api/v1/email-preferences/me\", data);\n }\n}\n","import type { HttpClient } from \"../http\";\nimport type { ContactDto, MessageResponseDto } from \"../types\";\n\nexport class ContactResource {\n constructor(private http: HttpClient) {}\n\n /** Send a contact-form message to the tenant's contact inbox. Public — no auth required. */\n send(data: ContactDto): Promise<MessageResponseDto> {\n return this.http.post(\"/api/v1/contact\", data, { authenticated: false });\n }\n}\n","import { HttpClient } from \"./http\";\nimport type { TokensResponseDto, PingResponseDto } 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\";\nimport { TenantsResource } from \"./resources/tenants\";\nimport { ReceiptsResource } from \"./resources/receipts\";\nimport { EmailPreferencesResource } from \"./resources/email-preferences\";\nimport { ContactResource } from \"./resources/contact\";\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 tenants: TenantsResource;\n receipts: ReceiptsResource;\n emailPreferences: EmailPreferencesResource;\n contact: ContactResource;\n /**\n * Verify the client is configured correctly: confirms the base URL is\n * reachable and the tenant key is valid. Resolves with the tenant identity\n * when the SDK is ready to use, and rejects with an {@link ApiError} otherwise.\n */\n ping(): Promise<PingResponseDto>;\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 tenants: new TenantsResource(http),\n receipts: new ReceiptsResource(http),\n emailPreferences: new EmailPreferencesResource(http),\n contact: new ContactResource(http),\n ping() {\n return http.get<PingResponseDto>(\"/api/v1/ping\", { authenticated: false });\n },\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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zdrops/ai-assistants-sdk",
3
- "version": "1.4.0",
3
+ "version": "1.6.0",
4
4
  "description": "TypeScript SDK for the AI Assistants API",
5
5
  "license": "MIT",
6
6
  "type": "module",