@wokuapp/sdk 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -827,14 +827,6 @@ var ActionPlans = class {
827
827
  { ...opts, body: { text, confirm: true } }
828
828
  );
829
829
  }
830
- /** Send an approved plan to a destination (jira/monday/clickup/notion/internal). */
831
- send(id, body, opts) {
832
- return this.client.request(
833
- "post",
834
- `/v1/action-plans/${id}/send`,
835
- { ...opts, body }
836
- );
837
- }
838
830
  createTask(id, body, opts) {
839
831
  return this.client.request(
840
832
  "post",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/errors.ts","../src/core/pagination.ts","../src/core/client.ts","../src/resources/trackers.ts","../src/resources/voc-tools.ts","../src/resources/surveys.ts","../src/resources/wokus.ts","../src/resources/forms.ts","../src/resources/flows.ts","../src/resources/action-plans.ts","../src/resources/tickets.ts","../src/resources/dispatches.ts","../src/resources/reports.ts","../src/resources/company.ts","../src/resources/quarantines.ts","../src/woku.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error hierarchy for the Woku SDK. Every failure is a {@link WokuError};\n * transport failures are {@link WokuConnectionError} and HTTP error responses\n * are {@link WokuAPIError} subclasses keyed by status. API errors carry the\n * server `requestId` (echo it when reporting an issue) and the parsed body.\n */\n\n/** Parsed error body shape the API returns (NestJS exception filter). */\nexport interface WokuErrorBody {\n statusCode?: number;\n message?: string | string[];\n error?: string;\n code?: string;\n [key: string]: unknown;\n}\n\n/** Base class for every SDK error. */\nexport class WokuError extends Error {\n /** Stable, machine-readable code (e.g. `not_found`, `rate_limited`). */\n readonly code?: string;\n\n constructor(message: string, options?: { code?: string; cause?: unknown }) {\n super(message);\n this.name = 'WokuError';\n this.code = options?.code;\n if (options?.cause !== undefined) {\n (this as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\n/**\n * The request never got a usable HTTP response: DNS/TCP failure, TLS error,\n * timeout or an aborted signal. Safe to retry (the SDK already retries these\n * up to `maxRetries`).\n */\nexport class WokuConnectionError extends WokuError {\n constructor(message: string, options?: { cause?: unknown; code?: string }) {\n super(message, {\n code: options?.code ?? 'connection_error',\n cause: options?.cause,\n });\n this.name = 'WokuConnectionError';\n }\n}\n\n/** The request was aborted (per-call `signal` or the configured timeout). */\nexport class WokuTimeoutError extends WokuConnectionError {\n constructor(message = 'Request timed out') {\n super(message, { code: 'timeout' });\n this.name = 'WokuTimeoutError';\n }\n}\n\n/** The server returned a non-2xx HTTP status. */\nexport class WokuAPIError extends WokuError {\n /** HTTP status code. */\n readonly status: number;\n /** Server correlation id, if the response carried one. */\n readonly requestId?: string;\n /** Parsed response body (or the raw text when it was not JSON). */\n readonly body: WokuErrorBody | string | undefined;\n /**\n * Seconds to wait before retrying, from the `Retry-After` response header\n * (or a `retryAfter` body field as a fallback), when the server sent one.\n */\n readonly retryAfterSeconds?: number;\n\n constructor(\n status: number,\n body: WokuErrorBody | string | undefined,\n message: string,\n requestId?: string,\n code?: string,\n retryAfterSeconds?: number,\n ) {\n super(message, { code: code ?? codeForStatus(status) });\n this.name = 'WokuAPIError';\n this.status = status;\n this.body = body;\n this.requestId = requestId;\n this.retryAfterSeconds = retryAfterSeconds ?? retryAfterFromBody(body);\n }\n\n /** Build the most specific error subclass for a status + body. */\n static from(\n status: number,\n body: WokuErrorBody | string | undefined,\n requestId?: string,\n retryAfterSeconds?: number,\n ): WokuAPIError {\n const message = messageFrom(status, body, requestId);\n const ra = retryAfterSeconds;\n switch (true) {\n case status === 400:\n return new BadRequestError(status, body, message, requestId, undefined, ra);\n case status === 401:\n return new AuthenticationError(status, body, message, requestId, undefined, ra);\n case status === 403:\n return new PermissionDeniedError(status, body, message, requestId, undefined, ra);\n case status === 404:\n return new NotFoundError(status, body, message, requestId, undefined, ra);\n case status === 409:\n return new ConflictError(status, body, message, requestId, undefined, ra);\n case status === 422:\n return new UnprocessableEntityError(status, body, message, requestId, undefined, ra);\n case status === 429:\n return new RateLimitError(status, body, message, requestId, undefined, ra);\n case status >= 500:\n return new InternalServerError(status, body, message, requestId, undefined, ra);\n default:\n return new WokuAPIError(status, body, message, requestId, undefined, ra);\n }\n }\n}\n\n/** 400 — malformed request or failed validation. */\nexport class BadRequestError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'BadRequestError';\n }\n}\n\n/** 401 — missing or invalid API key. */\nexport class AuthenticationError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'AuthenticationError';\n }\n}\n\n/** 403 — the key is valid but not allowed to access the resource. */\nexport class PermissionDeniedError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'PermissionDeniedError';\n }\n}\n\n/** 404 — the resource does not exist (or is not visible to this company). */\nexport class NotFoundError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'NotFoundError';\n }\n}\n\n/** 409 — the request conflicts with the resource state. */\nexport class ConflictError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'ConflictError';\n }\n}\n\n/** 422 — semantically invalid request. */\nexport class UnprocessableEntityError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'UnprocessableEntityError';\n }\n}\n\n/** 429 — rate limited. `retryAfterSeconds` mirrors the `Retry-After` header. */\nexport class RateLimitError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'RateLimitError';\n }\n}\n\n/** 5xx — the server failed to process the request. */\nexport class InternalServerError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'InternalServerError';\n }\n}\n\nconst retryAfterFromBody = (\n body: WokuErrorBody | string | undefined,\n): number | undefined =>\n body && typeof body === 'object' && typeof body.retryAfter === 'number'\n ? body.retryAfter\n : undefined;\n\nconst codeForStatus = (status: number): string => {\n const map: Record<number, string> = {\n 400: 'bad_request',\n 401: 'authentication_error',\n 403: 'permission_denied',\n 404: 'not_found',\n 409: 'conflict',\n 422: 'unprocessable_entity',\n 429: 'rate_limited',\n };\n return map[status] ?? (status >= 500 ? 'internal_server_error' : 'api_error');\n};\n\nconst messageFrom = (\n status: number,\n body: WokuErrorBody | string | undefined,\n requestId?: string,\n): string => {\n let detail = `HTTP ${status}`;\n if (typeof body === 'string' && body.trim()) {\n detail = body.trim();\n } else if (body && typeof body === 'object') {\n const { message } = body;\n if (Array.isArray(message)) detail = message.join(', ');\n else if (typeof message === 'string' && message) detail = message;\n else if (typeof body.error === 'string') detail = body.error;\n }\n return requestId\n ? `${status} ${detail} (request_id: ${requestId})`\n : `${status} ${detail}`;\n};\n","import type { RequestOptions } from './options';\n\n/** The paginated envelope every `/v1` list endpoint returns. */\nexport interface PageResponse<T> {\n data: T[];\n total: number;\n page: number;\n limit: number;\n}\n\n/** True when `value` has the shape of a {@link PageResponse}. */\nexport const isPageResponse = (\n value: unknown,\n): value is PageResponse<unknown> =>\n typeof value === 'object' &&\n value !== null &&\n Array.isArray((value as { data?: unknown }).data) &&\n typeof (value as { total?: unknown }).total === 'number';\n\n/**\n * A single page of results plus the cursor to walk the rest. Iterate items\n * across every page with `for await (const item of page)`, or walk page by\n * page with `for await (const p of page.iterPages())`.\n */\nexport class Page<T> implements AsyncIterable<T> {\n readonly data: T[];\n readonly total: number;\n readonly page: number;\n readonly limit: number;\n\n constructor(\n response: PageResponse<T>,\n private readonly fetchPage: (\n page: number,\n opts?: RequestOptions,\n ) => Promise<Page<T>>,\n private readonly options?: RequestOptions,\n ) {\n this.data = response.data;\n this.total = response.total;\n this.page = response.page;\n this.limit = response.limit;\n }\n\n /** Whether another page exists after this one. */\n hasNextPage(): boolean {\n if (this.limit <= 0) return false;\n return this.page * this.limit < this.total;\n }\n\n /** Fetch the next page (throws if there is none — guard with hasNextPage). */\n getNextPage(): Promise<Page<T>> {\n if (!this.hasNextPage()) {\n throw new RangeError('No next page');\n }\n return this.fetchPage(this.page + 1, this.options);\n }\n\n /** Yield every item across all pages, fetching lazily as needed. */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const page of walkPages(this)) {\n for (const item of page.data) yield item;\n }\n }\n\n /** Yield each Page, fetching lazily as needed. */\n iterPages(): AsyncGenerator<Page<T>> {\n return walkPages(this);\n }\n}\n\n/** Walk pages from a starting page, fetching the next one lazily. */\nasync function* walkPages<T>(start: Page<T>): AsyncGenerator<Page<T>> {\n let current = start;\n for (;;) {\n yield current;\n if (!current.hasNextPage()) return;\n current = await current.getNextPage();\n }\n}\n","import {\n WokuAPIError,\n WokuConnectionError,\n WokuError,\n WokuTimeoutError,\n type WokuErrorBody,\n} from './errors';\nimport { Page, isPageResponse, type PageResponse } from './pagination';\nimport type { RequestOptions } from './options';\n\n/** Minimal subset of the Fetch API the client depends on. */\nexport type FetchLike = (\n input: string,\n init: {\n method: string;\n headers: Record<string, string>;\n body?: string;\n signal?: AbortSignal;\n },\n) => Promise<{\n status: number;\n headers: { get(name: string): string | null };\n text(): Promise<string>;\n}>;\n\nexport interface WokuClientOptions {\n /** Company secret key. Defaults to `process.env.WOKU_API_KEY`. */\n apiKey?: string;\n /** API base URL. Defaults to `https://clientapi.woku.app`. */\n baseURL?: string;\n /** Per-request timeout in ms. Default 60000. */\n timeout?: number;\n /** Automatic retries for transient failures. Default 2. */\n maxRetries?: number;\n /** Custom fetch implementation. Defaults to the global `fetch`. */\n fetch?: FetchLike;\n /** Headers merged into every request. */\n defaultHeaders?: Record<string, string>;\n /**\n * Allow running in a browser. Off by default: the secret key grants full\n * management access and must never ship to a browser bundle.\n */\n dangerouslyAllowBrowser?: boolean;\n}\n\ninterface RequestArgs extends RequestOptions {\n body?: unknown;\n /**\n * Mark a POST as an idempotent create: an idempotency key is auto-generated\n * (unless the caller passed one) so a retry after a transient failure returns\n * the original result instead of creating twice. Left off for action POSTs\n * (send/approve/test) so they are never silently replayed.\n */\n idempotent?: boolean;\n}\n\nconst DEFAULT_BASE_URL = 'https://clientapi.woku.app';\nconst DEFAULT_TIMEOUT = 60_000;\nconst DEFAULT_MAX_RETRIES = 2;\nconst RETRY_BASE_MS = 500;\nconst RETRY_CAP_MS = 8_000;\nconst RETRYABLE_STATUS = new Set([408, 429, 500, 502, 503, 504]);\nconst SDK_VERSION = '0.1.0';\n\nconst randomId = (): string => {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c?.randomUUID) return c.randomUUID();\n return `idmp_${Date.now().toString(36)}${Math.random().toString(36).slice(2, 12)}`;\n};\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Transport core: turns a resource call into an authenticated HTTP request\n * with timeout, typed error mapping and jittered retries. Resource namespaces\n * call {@link request} and {@link getPage}; end users use the `Woku` facade.\n */\nexport class WokuClient {\n readonly baseURL: string;\n readonly maxRetries: number;\n readonly timeout: number;\n\n private readonly apiKey: string;\n private readonly fetch: FetchLike;\n private readonly defaultHeaders: Record<string, string>;\n\n constructor(options: WokuClientOptions = {}) {\n const apiKey =\n options.apiKey ??\n (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env?.WOKU_API_KEY;\n if (!apiKey) {\n throw new WokuError(\n 'Missing API key: pass { apiKey } or set WOKU_API_KEY.',\n { code: 'config_error' },\n );\n }\n if (!options.dangerouslyAllowBrowser && isBrowser()) {\n throw new WokuError(\n 'The Woku SDK is server-only: the secret key must not run in a browser. ' +\n 'Pass { dangerouslyAllowBrowser: true } only if you fully control the runtime.',\n { code: 'config_error' },\n );\n }\n const fetchImpl =\n options.fetch ?? (globalThis as { fetch?: FetchLike }).fetch;\n if (!fetchImpl) {\n throw new WokuError(\n 'No fetch implementation available; pass { fetch }.',\n {\n code: 'config_error',\n },\n );\n }\n\n this.apiKey = apiKey;\n this.baseURL = (options.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.fetch = fetchImpl;\n this.defaultHeaders = options.defaultHeaders ?? {};\n }\n\n /** Issue one request and return the parsed JSON body typed as `T`. */\n async request<T>(\n method: string,\n path: string,\n args: RequestArgs = {},\n ): Promise<T> {\n const url = this.buildUrl(path, args.query);\n const idempotencyKey =\n args.idempotencyKey ??\n (args.idempotent && method.toUpperCase() === 'POST'\n ? randomId()\n : undefined);\n const headers = this.buildHeaders(method, { ...args, idempotencyKey });\n const bodyText =\n args.body === undefined ? undefined : JSON.stringify(args.body);\n const maxRetries = args.maxRetries ?? this.maxRetries;\n const timeout = args.timeout ?? this.timeout;\n // Retries are only safe on GET or when the write carries an idempotency key.\n const retryable =\n method.toUpperCase() === 'GET' ||\n Boolean(headers['X-Woku-Idempotency-Key']);\n\n let attempt = 0;\n for (;;) {\n try {\n const { status, body, requestId, retryAfterSeconds } = await this.send(\n url,\n method,\n headers,\n bodyText,\n timeout,\n args.signal,\n );\n if (status >= 200 && status < 300) {\n return body as T;\n }\n const apiError = WokuAPIError.from(\n status,\n body,\n requestId,\n retryAfterSeconds,\n );\n if (retryable && attempt < maxRetries && RETRYABLE_STATUS.has(status)) {\n await sleep(this.backoff(attempt, apiError));\n attempt += 1;\n continue;\n }\n throw apiError;\n } catch (error) {\n if (error instanceof WokuAPIError) throw error;\n const connError = toConnectionError(error);\n // A caller-initiated abort rejects promptly; it is never retried (only\n // a timeout, which carries a different code, stays retryable).\n if (connError.code === 'aborted') throw connError;\n if (retryable && attempt < maxRetries) {\n await sleep(this.backoff(attempt));\n attempt += 1;\n continue;\n }\n throw connError;\n }\n }\n }\n\n /**\n * Issue a GET that returns a paginated envelope and wrap it as a {@link Page}.\n * `params` accepts any plain object (a resource's typed params interface).\n */\n async getPage<T>(\n path: string,\n params?: object,\n opts?: RequestOptions,\n ): Promise<Page<T>> {\n const base = (params ?? {}) as Record<string, unknown>;\n const query: Record<string, unknown> = { ...base, ...opts?.query };\n const response = await this.request<PageResponse<T> | T[]>('get', path, {\n ...opts,\n query,\n });\n const envelope: PageResponse<T> = isPageResponse(response)\n ? (response as PageResponse<T>)\n : {\n data: (response as T[]) ?? [],\n total: Array.isArray(response) ? response.length : 0,\n page: 1,\n limit: Array.isArray(response) ? response.length : 0,\n };\n return new Page<T>(\n envelope,\n (page, pageOpts) =>\n this.getPage<T>(path, { ...base, page }, { ...opts, ...pageOpts }),\n opts,\n );\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n const url = `${this.baseURL}${path.startsWith('/') ? path : `/${path}`}`;\n if (!query) return url;\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n if (Array.isArray(value)) {\n for (const item of value) search.append(key, String(item));\n } else {\n search.append(key, String(value));\n }\n }\n const qs = search.toString();\n return qs ? `${url}?${qs}` : url;\n }\n\n private buildHeaders(\n method: string,\n args: RequestArgs,\n ): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': `woku-sdk-js/${SDK_VERSION}`,\n ...this.defaultHeaders,\n ...args.headers,\n };\n // Authorization is applied last so caller/default headers can never unset\n // the secret key (the documented guarantee on RequestOptions.headers).\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n if (args.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n if (args.idempotencyKey !== undefined && method.toUpperCase() === 'POST') {\n headers['X-Woku-Idempotency-Key'] = args.idempotencyKey;\n }\n return headers;\n }\n\n private async send(\n url: string,\n method: string,\n headers: Record<string, string>,\n body: string | undefined,\n timeout: number,\n signal?: AbortSignal,\n ): Promise<{\n status: number;\n body: WokuErrorBody | string | undefined;\n requestId?: string;\n retryAfterSeconds?: number;\n }> {\n const controller = new AbortController();\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n const onExternalAbort = (): void => controller.abort();\n if (signal) {\n if (signal.aborted) controller.abort();\n else signal.addEventListener('abort', onExternalAbort);\n }\n\n try {\n const response = await this.fetch(url, {\n method: method.toUpperCase(),\n headers,\n body,\n signal: controller.signal,\n });\n const text = await response.text();\n return {\n status: response.status,\n body: parseBody(text),\n requestId: requestIdFrom(response.headers),\n retryAfterSeconds: retryAfterFromHeaders(response.headers),\n };\n } catch (error) {\n if (timedOut) throw new WokuTimeoutError();\n if (signal?.aborted) {\n throw new WokuConnectionError('Request aborted', { code: 'aborted' });\n }\n throw error;\n } finally {\n clearTimeout(timer);\n if (signal) signal.removeEventListener('abort', onExternalAbort);\n }\n }\n\n private backoff(attempt: number, apiError?: WokuAPIError): number {\n // Honor Retry-After (seconds) when the server sends it, else full jitter.\n const retryAfter =\n apiError && typeof apiError.retryAfterSeconds === 'number'\n ? apiError.retryAfterSeconds * 1000\n : undefined;\n if (retryAfter !== undefined) return Math.min(retryAfter, RETRY_CAP_MS);\n const ceiling = Math.min(RETRY_CAP_MS, RETRY_BASE_MS * 2 ** attempt);\n return Math.random() * ceiling;\n }\n}\n\nconst isBrowser = (): boolean =>\n typeof (globalThis as { document?: unknown }).document !== 'undefined';\n\nconst parseBody = (text: string): WokuErrorBody | string | undefined => {\n if (!text) return undefined;\n try {\n return JSON.parse(text) as WokuErrorBody;\n } catch {\n return text;\n }\n};\n\nconst requestIdFrom = (headers: {\n get(name: string): string | null;\n}): string | undefined =>\n headers.get('x-request-id') ??\n headers.get('request-id') ??\n headers.get('x-woku-request-id') ??\n undefined;\n\n// Parse the `Retry-After` header, which is either a number of seconds or an\n// HTTP date. Returns seconds to wait, or undefined when absent/unparseable.\nconst retryAfterFromHeaders = (headers: {\n get(name: string): string | null;\n}): number | undefined => {\n const raw = headers.get('retry-after');\n if (!raw) return undefined;\n const seconds = Number(raw);\n if (Number.isFinite(seconds)) return Math.max(0, seconds);\n const when = Date.parse(raw);\n if (!Number.isNaN(when)) return Math.max(0, (when - Date.now()) / 1000);\n return undefined;\n};\n\nconst toConnectionError = (error: unknown): WokuConnectionError => {\n if (error instanceof WokuConnectionError) return error;\n const message =\n error instanceof Error ? error.message : 'Network request failed';\n return new WokuConnectionError(message, { cause: error });\n};\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n AssignTrackerByNameParams,\n CreateTrackerParams,\n SearchEntitiesByTrackersParams,\n UpdateTrackerParams,\n} from '../types';\nimport type { EntitiesByTrackers, Tracker, WokuRecord } from '../models';\n\n/** A VoC entity type that can carry tracker values. */\nexport type TrackerEntityType = 'nps' | 'csat' | 'ces' | 'form' | 'flow';\n\nexport interface ListTrackersParams {\n includeInactive?: boolean;\n includeUsage?: boolean;\n page?: number;\n limit?: number;\n}\n\nexport interface SearchWokusByTrackerParams {\n name: string;\n value: string;\n page?: number;\n limit?: number;\n}\n\n/** Manage external tracker definitions (`/v1/external-trackers`). */\nexport class Trackers {\n constructor(private readonly client: WokuClient) {}\n\n /** List the company tracker definitions (paginated). */\n list(\n params?: ListTrackersParams,\n opts?: RequestOptions,\n ): Promise<Page<Tracker>> {\n return this.client.getPage<Tracker>('/v1/external-trackers', params, opts);\n }\n\n /** Create a tracker definition (idempotent). */\n create(body: CreateTrackerParams, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>('post', '/v1/external-trackers', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Get one tracker definition. */\n get(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'get',\n `/v1/external-trackers/${id}`,\n opts,\n );\n }\n\n /** Update a tracker definition. */\n update(\n id: string,\n body: UpdateTrackerParams,\n opts?: RequestOptions,\n ): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}`,\n { ...opts, body },\n );\n }\n\n /** Activate a tracker definition. */\n activate(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}/activate`,\n opts,\n );\n }\n\n /** Deactivate a tracker definition. */\n deactivate(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}/deactivate`,\n opts,\n );\n }\n\n /** Search VoC entities whose trackers match every filter (AND). */\n searchEntities(\n body: SearchEntitiesByTrackersParams,\n opts?: RequestOptions,\n ): Promise<EntitiesByTrackers> {\n return this.client.request<EntitiesByTrackers>(\n 'post',\n '/v1/external-trackers/search-entities',\n { ...opts, body },\n );\n }\n\n /** List the tracker values assigned to a woku. */\n listWokuValues(\n wokuId: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/wokus/${wokuId}`,\n opts,\n );\n }\n\n /** Assign (upsert) a tracker value to a woku by tracker name. */\n assignToWoku(\n wokuId: string,\n body: AssignTrackerByNameParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/external-trackers/wokus/${wokuId}`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Remove a tracker value from a woku by tracker name. */\n removeFromWoku(\n wokuId: string,\n trackerName: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/external-trackers/wokus/${wokuId}/${encodeURIComponent(trackerName)}`,\n opts,\n );\n }\n\n /** Search wokus by an exact `(tracker name, value)` pair (paginated). */\n searchWokus(\n params: SearchWokusByTrackerParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n '/v1/external-trackers/search',\n params,\n opts,\n );\n }\n\n /** List the tracker values assigned to a VoC entity (nps/csat/ces/form/flow). */\n listEntityValues(\n entityType: TrackerEntityType,\n id: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/${entityType}/${id}`,\n opts,\n );\n }\n\n /** Assign (upsert) a tracker value to a VoC entity by tracker name. */\n assignToEntity(\n entityType: TrackerEntityType,\n id: string,\n body: AssignTrackerByNameParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/external-trackers/${entityType}/${id}`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Remove a tracker value from a VoC entity by tracker name. */\n removeFromEntity(\n entityType: TrackerEntityType,\n id: string,\n trackerName: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/external-trackers/${entityType}/${id}/${encodeURIComponent(trackerName)}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateCesToolParams,\n CreateCsatToolParams,\n CreateNpsToolParams,\n UpdateCesToolParams,\n UpdateCsatToolParams,\n UpdateNpsToolParams,\n} from '../types';\nimport type { CesTool, CsatTool, DeletedResult, NpsTool } from '../models';\n\n/** Manage NPS tool definitions (`/v1/nps-tools`). */\nexport class NpsTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<NpsTool>> {\n return this.client.getPage<NpsTool>('/v1/nps-tools', params, opts);\n }\n\n create(body: CreateNpsToolParams, opts?: RequestOptions): Promise<NpsTool> {\n return this.client.request<NpsTool>('post', '/v1/nps-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<NpsTool> {\n return this.client.request<NpsTool>('get', `/v1/nps-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateNpsToolParams,\n opts?: RequestOptions,\n ): Promise<NpsTool> {\n return this.client.request<NpsTool>('patch', `/v1/nps-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/nps-tools/${id}`,\n opts,\n );\n }\n}\n\n/** Manage CSAT tool definitions (`/v1/csat-tools`). */\nexport class CsatTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<CsatTool>> {\n return this.client.getPage<CsatTool>('/v1/csat-tools', params, opts);\n }\n\n create(body: CreateCsatToolParams, opts?: RequestOptions): Promise<CsatTool> {\n return this.client.request<CsatTool>('post', '/v1/csat-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<CsatTool> {\n return this.client.request<CsatTool>('get', `/v1/csat-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateCsatToolParams,\n opts?: RequestOptions,\n ): Promise<CsatTool> {\n return this.client.request<CsatTool>('patch', `/v1/csat-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/csat-tools/${id}`,\n opts,\n );\n }\n}\n\n/** Manage CES tool definitions (`/v1/ces-tools`). */\nexport class CesTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<CesTool>> {\n return this.client.getPage<CesTool>('/v1/ces-tools', params, opts);\n }\n\n create(body: CreateCesToolParams, opts?: RequestOptions): Promise<CesTool> {\n return this.client.request<CesTool>('post', '/v1/ces-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<CesTool> {\n return this.client.request<CesTool>('get', `/v1/ces-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateCesToolParams,\n opts?: RequestOptions,\n ): Promise<CesTool> {\n return this.client.request<CesTool>('patch', `/v1/ces-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/ces-tools/${id}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n SendCesInvitationsParams,\n SendCsatInvitationsParams,\n SendNpsInvitationsParams,\n} from '../types';\nimport type { InvitationsResult, WokuRecord } from '../models';\n\nexport interface ListResponsesParams {\n page?: number;\n limit?: number;\n [key: string]: unknown;\n}\n\n/** Send the NPS survey and read its responses (`/v1/nps`). */\nexport class Nps {\n constructor(private readonly client: WokuClient) {}\n\n /** Send the NPS survey by email or WhatsApp (idempotent). */\n sendInvitations(\n body: SendNpsInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/nps/invitations',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n\n /** List NPS responses (paginated). */\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/nps', params, opts);\n }\n\n /** Get one NPS response. */\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/nps/${id}`, opts);\n }\n}\n\n/** Send the CSAT survey and read its responses (`/v1/csat`). */\nexport class Csat {\n constructor(private readonly client: WokuClient) {}\n\n sendInvitations(\n body: SendCsatInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/csat/invitations',\n { ...opts, body, idempotent: true },\n );\n }\n\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/csat', params, opts);\n }\n\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/csat/${id}`, opts);\n }\n}\n\n/** Send the CES survey and read its responses (`/v1/ces`). */\nexport class Ces {\n constructor(private readonly client: WokuClient) {}\n\n sendInvitations(\n body: SendCesInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/ces/invitations',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/ces', params, opts);\n }\n\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/ces/${id}`, opts);\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateWokuParams,\n MoveWokuParams,\n SendInvitationsParams,\n ShareWokuParams,\n UpdateWokuParams,\n UpdateWokuSettingsParams,\n} from '../types';\nimport type {\n DeletedResult,\n InvitationsResult,\n WokuRecord,\n WokuResource,\n} from '../models';\n\n/** Manage wokus (feedback collection tools) — `/v1/wokus`. */\nexport class Wokus {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuResource>> {\n return this.client.getPage<WokuResource>('/v1/wokus', params, opts);\n }\n\n create(body: CreateWokuParams, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('post', '/v1/wokus', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Get one woku with aggregated review stats. */\n get(id: string, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('get', `/v1/wokus/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/wokus/${id}`,\n opts,\n );\n }\n\n /** Apply the boolean settings idempotently (closed/reviewsDisabled/...). */\n updateSettings(\n id: string,\n body: UpdateWokuSettingsParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}/settings`, {\n ...opts,\n body,\n });\n }\n\n /** Move the woku into a folder, or to the root with `{ folderId: null }`. */\n move(id: string, body: MoveWokuParams, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}/move`, {\n ...opts,\n body,\n });\n }\n\n /** List the reviews of a woku (paginated). */\n listReviews(\n id: string,\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n `/v1/wokus/${id}/reviews`,\n params,\n opts,\n );\n }\n\n /** Send a woku review invitation by email or WhatsApp (idempotent). */\n sendInvitations(\n id: string,\n body: SendInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n `/v1/wokus/${id}/invitations`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Share a woku review link by email. */\n share(\n id: string,\n body: ShareWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', `/v1/wokus/${id}/share`, {\n ...opts,\n body,\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { SendInvitationsParams } from '../types';\nimport type { InvitationsResult, WokuRecord } from '../models';\n\n/** Read forms and send form invitations (`/v1/forms`). */\nexport class Forms {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/forms', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/forms/${id}`, opts);\n }\n\n /** List the responses of a form (paginated). */\n listResponses(\n id: string,\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n `/v1/forms/${id}/responses`,\n params,\n opts,\n );\n }\n\n /** Send a form by email or WhatsApp (idempotent). */\n sendInvitations(\n id: string,\n body: SendInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n `/v1/forms/${id}/invitations`,\n { ...opts, body, idempotent: true },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Read data flows (`/v1/flows`). */\nexport class Flows {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/flows', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/flows/${id}`, opts);\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateActionPlanGroupParams,\n CreateActionPlanTaskParams,\n ReorderActionPlanTasksParams,\n SendActionPlanParams,\n UpdateActionPlanGroupParams,\n UpdateActionPlanTaskParams,\n} from '../types';\nimport type { WokuRecord } from '../models';\n\nexport interface ListActionPlansParams {\n groupId?: string;\n status?: string;\n source?: string;\n priority?: string;\n search?: string;\n from?: string;\n to?: string;\n page?: number;\n limit?: number;\n}\n\n/** Read and drive action plans, incl. the managed kanban (`/v1/action-plans`). */\nexport class ActionPlans {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: ListActionPlansParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/action-plans', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plans/${id}`,\n opts,\n );\n }\n\n /** The plan timeline (events, oldest first). */\n events(id: string, opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/action-plans/${id}/events`,\n opts,\n );\n }\n\n /** The plan AI conversation (read-only). */\n getConversation(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plans/${id}/conversation`,\n opts,\n );\n }\n\n /**\n * Reply to the plan AI agent. Each reply is a paid AI turn (`confirm:true` is\n * sent automatically); the reply is composed asynchronously, so poll\n * {@link getConversation} until `busy` is false.\n */\n reply(id: string, text: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/conversation`,\n { ...opts, body: { text, confirm: true } },\n );\n }\n\n /** Send an approved plan to a destination (jira/monday/clickup/notion/internal). */\n send(\n id: string,\n body: SendActionPlanParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/send`,\n { ...opts, body },\n );\n }\n\n createTask(\n id: string,\n body: CreateActionPlanTaskParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/tasks`,\n { ...opts, body, idempotent: true },\n );\n }\n\n updateTask(\n id: string,\n taskId: string,\n body: UpdateActionPlanTaskParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plans/${id}/tasks/${taskId}`,\n { ...opts, body },\n );\n }\n\n reorderTasks(\n id: string,\n body: ReorderActionPlanTasksParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plans/${id}/tasks/reorder`,\n { ...opts, body },\n );\n }\n\n deleteTask(\n id: string,\n taskId: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/action-plans/${id}/tasks/${taskId}`,\n opts,\n );\n }\n\n approve(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'approve', opts);\n }\n\n reopen(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'reopen', opts);\n }\n\n cancel(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'cancel', opts);\n }\n\n complete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'complete', opts);\n }\n\n resume(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'resume', opts);\n }\n\n private status(\n id: string,\n action: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/${action}`,\n opts,\n );\n }\n}\n\n/** Manage action-plan groups (`/v1/action-plan-groups`). */\nexport class ActionPlanGroups {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { search?: string },\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>('get', '/v1/action-plan-groups', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /** Get one group with its embedded stats. */\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plan-groups/${id}`,\n opts,\n );\n }\n\n create(\n body: CreateActionPlanGroupParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', '/v1/action-plan-groups', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n update(\n id: string,\n body: UpdateActionPlanGroupParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plan-groups/${id}`,\n { ...opts, body },\n );\n }\n\n setEnabled(\n id: string,\n enabled: boolean,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plan-groups/${id}/enabled`,\n { ...opts, body: { enabled } },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/action-plan-groups/${id}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateTicketDestinationParams,\n UpdateTicketDestinationParams,\n UpdateTicketParams,\n} from '../types';\nimport type {\n Severity,\n TestConnectionResult,\n Ticket,\n TicketStats,\n WokuRecord,\n} from '../models';\n\nexport interface ListTicketsParams {\n tool?: 'woku' | 'nps' | 'form' | 'csat' | 'ces';\n severity?: Severity;\n search?: string;\n destinationId?: string;\n createdFrom?: string;\n createdTo?: string;\n page?: number;\n limit?: number;\n}\n\nexport interface TicketStatsParams {\n destinationId?: string;\n createdFrom?: string;\n createdTo?: string;\n}\n\n/** Read and curate support tickets (`/v1/tickets`). Tickets are AI-generated. */\nexport class Tickets {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: ListTicketsParams,\n opts?: RequestOptions,\n ): Promise<Page<Ticket>> {\n return this.client.getPage<Ticket>('/v1/tickets', params, opts);\n }\n\n /** Aggregate counts by tool and by SAC destination. */\n stats(\n params?: TicketStatsParams,\n opts?: RequestOptions,\n ): Promise<TicketStats> {\n return this.client.request<TicketStats>('get', '/v1/tickets/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<Ticket> {\n return this.client.request<Ticket>('get', `/v1/tickets/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateTicketParams,\n opts?: RequestOptions,\n ): Promise<Ticket> {\n return this.client.request<Ticket>('patch', `/v1/tickets/${id}`, {\n ...opts,\n body,\n });\n }\n}\n\n/** Manage SAC ticket destinations (`/v1/ticket-destinations`). */\nexport class TicketDestinations {\n constructor(private readonly client: WokuClient) {}\n\n list(opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n '/v1/ticket-destinations',\n opts,\n );\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/ticket-destinations/${id}`,\n opts,\n );\n }\n\n create(\n body: CreateTicketDestinationParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', '/v1/ticket-destinations', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n update(\n id: string,\n body: UpdateTicketDestinationParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/ticket-destinations/${id}`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/ticket-destinations/${id}`,\n opts,\n );\n }\n\n /**\n * Send a real connectivity test to a saved destination. Requires\n * `confirm: true` (the test reaches the live destination).\n */\n test(id: string, opts?: RequestOptions): Promise<TestConnectionResult> {\n return this.client.request<TestConnectionResult>(\n 'post',\n `/v1/ticket-destinations/${id}/test`,\n { ...opts, body: { confirm: true } },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { Channel, Dispatch, DispatchStats } from '../models';\n\nexport interface ListDispatchesParams {\n channel?: Channel;\n responseType?: 'woku' | 'nps' | 'form' | 'client-form' | 'csat' | 'ces';\n targetId?: string;\n status?: 'invited' | 'partially_responded' | 'responded' | 'failed';\n createdFrom?: string;\n createdTo?: string;\n page?: number;\n limit?: number;\n}\n\nexport interface DispatchStatsParams {\n channel?: Channel;\n responseType?: string;\n targetId?: string;\n createdFrom?: string;\n createdTo?: string;\n}\n\n/** Delivery tracking over invitation dispatches (`/v1/dispatches`). */\nexport class Dispatches {\n constructor(private readonly client: WokuClient) {}\n\n /** List the invitation dispatches (delivery status, no recipient PII). */\n list(\n params?: ListDispatchesParams,\n opts?: RequestOptions,\n ): Promise<Page<Dispatch>> {\n return this.client.getPage<Dispatch>('/v1/dispatches', params, opts);\n }\n\n /** Response-rate metrics over the dispatches. */\n stats(\n params?: DispatchStatsParams,\n opts?: RequestOptions,\n ): Promise<DispatchStats> {\n return this.client.request<DispatchStats>('get', '/v1/dispatches/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Read NPS reports (`/v1/reports`). */\nexport class Reports {\n constructor(private readonly client: WokuClient) {}\n\n /** Company-level NPS report. */\n companyNps(\n params?: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/reports/company-nps', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /** NPS report for one tool. */\n npsTool(\n npsToolId: string,\n params?: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/reports/nps-tool/${npsToolId}`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { ApiKeyResult, WokuRecord } from '../models';\n\n/** The caller company and its API key (`/v1/companies/me`). */\nexport class Company {\n constructor(private readonly client: WokuClient) {}\n\n /** Get the caller company. */\n me(opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/companies/me', opts);\n }\n\n /** Rotate the secret key. The returned key replaces the current one. */\n rotateKey(opts?: RequestOptions): Promise<ApiKeyResult> {\n return this.client.request<ApiKeyResult>(\n 'post',\n '/v1/companies/me/rotate-key',\n opts,\n );\n }\n\n /** Revoke the secret key (all subsequent requests will be unauthorized). */\n revokeKey(opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n '/v1/companies/me/revoke-key',\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Check respondent quarantine status (`/v1/quarantines`). */\nexport class Quarantines {\n constructor(private readonly client: WokuClient) {}\n\n /** Check whether a contact is quarantined. */\n check(\n params: { email?: string; phone?: string | number },\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/quarantines/check', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n}\n","import { WokuClient, type WokuClientOptions } from './core/client';\nimport { Trackers } from './resources/trackers';\nimport { CesTools, CsatTools, NpsTools } from './resources/voc-tools';\nimport { Ces, Csat, Nps } from './resources/surveys';\nimport { Wokus } from './resources/wokus';\nimport { Forms } from './resources/forms';\nimport { Flows } from './resources/flows';\nimport { ActionPlanGroups, ActionPlans } from './resources/action-plans';\nimport { TicketDestinations, Tickets } from './resources/tickets';\nimport { Dispatches } from './resources/dispatches';\nimport { Reports } from './resources/reports';\nimport { Company } from './resources/company';\nimport { Quarantines } from './resources/quarantines';\n\n/**\n * Entry point to the Woku management API.\n *\n * ```ts\n * const woku = new Woku({ apiKey: process.env.WOKU_API_KEY });\n * const tracker = await woku.trackers.create({ name: 'Store', system: 'retail' });\n * for await (const ticket of await woku.tickets.list({ severity: 'high' })) {\n * console.log(ticket.title);\n * }\n * ```\n */\nexport class Woku {\n /** The underlying transport (advanced use). */\n readonly client: WokuClient;\n\n readonly trackers: Trackers;\n readonly npsTools: NpsTools;\n readonly csatTools: CsatTools;\n readonly cesTools: CesTools;\n readonly nps: Nps;\n readonly csat: Csat;\n readonly ces: Ces;\n readonly wokus: Wokus;\n readonly forms: Forms;\n readonly flows: Flows;\n readonly actionPlans: ActionPlans;\n readonly actionPlanGroups: ActionPlanGroups;\n readonly tickets: Tickets;\n readonly ticketDestinations: TicketDestinations;\n readonly dispatches: Dispatches;\n readonly reports: Reports;\n readonly company: Company;\n readonly quarantines: Quarantines;\n\n constructor(options?: WokuClientOptions | string) {\n const opts: WokuClientOptions =\n typeof options === 'string' ? { apiKey: options } : (options ?? {});\n this.client = new WokuClient(opts);\n\n this.trackers = new Trackers(this.client);\n this.npsTools = new NpsTools(this.client);\n this.csatTools = new CsatTools(this.client);\n this.cesTools = new CesTools(this.client);\n this.nps = new Nps(this.client);\n this.csat = new Csat(this.client);\n this.ces = new Ces(this.client);\n this.wokus = new Wokus(this.client);\n this.forms = new Forms(this.client);\n this.flows = new Flows(this.client);\n this.actionPlans = new ActionPlans(this.client);\n this.actionPlanGroups = new ActionPlanGroups(this.client);\n this.tickets = new Tickets(this.client);\n this.ticketDestinations = new TicketDestinations(this.client);\n this.dispatches = new Dispatches(this.client);\n this.reports = new Reports(this.client);\n this.company = new Company(this.client);\n this.quarantines = new Quarantines(this.client);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/errors.ts","../src/core/pagination.ts","../src/core/client.ts","../src/resources/trackers.ts","../src/resources/voc-tools.ts","../src/resources/surveys.ts","../src/resources/wokus.ts","../src/resources/forms.ts","../src/resources/flows.ts","../src/resources/action-plans.ts","../src/resources/tickets.ts","../src/resources/dispatches.ts","../src/resources/reports.ts","../src/resources/company.ts","../src/resources/quarantines.ts","../src/woku.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error hierarchy for the Woku SDK. Every failure is a {@link WokuError};\n * transport failures are {@link WokuConnectionError} and HTTP error responses\n * are {@link WokuAPIError} subclasses keyed by status. API errors carry the\n * server `requestId` (echo it when reporting an issue) and the parsed body.\n */\n\n/** Parsed error body shape the API returns (NestJS exception filter). */\nexport interface WokuErrorBody {\n statusCode?: number;\n message?: string | string[];\n error?: string;\n code?: string;\n [key: string]: unknown;\n}\n\n/** Base class for every SDK error. */\nexport class WokuError extends Error {\n /** Stable, machine-readable code (e.g. `not_found`, `rate_limited`). */\n readonly code?: string;\n\n constructor(message: string, options?: { code?: string; cause?: unknown }) {\n super(message);\n this.name = 'WokuError';\n this.code = options?.code;\n if (options?.cause !== undefined) {\n (this as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\n/**\n * The request never got a usable HTTP response: DNS/TCP failure, TLS error,\n * timeout or an aborted signal. Safe to retry (the SDK already retries these\n * up to `maxRetries`).\n */\nexport class WokuConnectionError extends WokuError {\n constructor(message: string, options?: { cause?: unknown; code?: string }) {\n super(message, {\n code: options?.code ?? 'connection_error',\n cause: options?.cause,\n });\n this.name = 'WokuConnectionError';\n }\n}\n\n/** The request was aborted (per-call `signal` or the configured timeout). */\nexport class WokuTimeoutError extends WokuConnectionError {\n constructor(message = 'Request timed out') {\n super(message, { code: 'timeout' });\n this.name = 'WokuTimeoutError';\n }\n}\n\n/** The server returned a non-2xx HTTP status. */\nexport class WokuAPIError extends WokuError {\n /** HTTP status code. */\n readonly status: number;\n /** Server correlation id, if the response carried one. */\n readonly requestId?: string;\n /** Parsed response body (or the raw text when it was not JSON). */\n readonly body: WokuErrorBody | string | undefined;\n /**\n * Seconds to wait before retrying, from the `Retry-After` response header\n * (or a `retryAfter` body field as a fallback), when the server sent one.\n */\n readonly retryAfterSeconds?: number;\n\n constructor(\n status: number,\n body: WokuErrorBody | string | undefined,\n message: string,\n requestId?: string,\n code?: string,\n retryAfterSeconds?: number,\n ) {\n super(message, { code: code ?? codeForStatus(status) });\n this.name = 'WokuAPIError';\n this.status = status;\n this.body = body;\n this.requestId = requestId;\n this.retryAfterSeconds = retryAfterSeconds ?? retryAfterFromBody(body);\n }\n\n /** Build the most specific error subclass for a status + body. */\n static from(\n status: number,\n body: WokuErrorBody | string | undefined,\n requestId?: string,\n retryAfterSeconds?: number,\n ): WokuAPIError {\n const message = messageFrom(status, body, requestId);\n const ra = retryAfterSeconds;\n switch (true) {\n case status === 400:\n return new BadRequestError(status, body, message, requestId, undefined, ra);\n case status === 401:\n return new AuthenticationError(status, body, message, requestId, undefined, ra);\n case status === 403:\n return new PermissionDeniedError(status, body, message, requestId, undefined, ra);\n case status === 404:\n return new NotFoundError(status, body, message, requestId, undefined, ra);\n case status === 409:\n return new ConflictError(status, body, message, requestId, undefined, ra);\n case status === 422:\n return new UnprocessableEntityError(status, body, message, requestId, undefined, ra);\n case status === 429:\n return new RateLimitError(status, body, message, requestId, undefined, ra);\n case status >= 500:\n return new InternalServerError(status, body, message, requestId, undefined, ra);\n default:\n return new WokuAPIError(status, body, message, requestId, undefined, ra);\n }\n }\n}\n\n/** 400 — malformed request or failed validation. */\nexport class BadRequestError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'BadRequestError';\n }\n}\n\n/** 401 — missing or invalid API key. */\nexport class AuthenticationError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'AuthenticationError';\n }\n}\n\n/** 403 — the key is valid but not allowed to access the resource. */\nexport class PermissionDeniedError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'PermissionDeniedError';\n }\n}\n\n/** 404 — the resource does not exist (or is not visible to this company). */\nexport class NotFoundError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'NotFoundError';\n }\n}\n\n/** 409 — the request conflicts with the resource state. */\nexport class ConflictError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'ConflictError';\n }\n}\n\n/** 422 — semantically invalid request. */\nexport class UnprocessableEntityError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'UnprocessableEntityError';\n }\n}\n\n/** 429 — rate limited. `retryAfterSeconds` mirrors the `Retry-After` header. */\nexport class RateLimitError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'RateLimitError';\n }\n}\n\n/** 5xx — the server failed to process the request. */\nexport class InternalServerError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'InternalServerError';\n }\n}\n\nconst retryAfterFromBody = (\n body: WokuErrorBody | string | undefined,\n): number | undefined =>\n body && typeof body === 'object' && typeof body.retryAfter === 'number'\n ? body.retryAfter\n : undefined;\n\nconst codeForStatus = (status: number): string => {\n const map: Record<number, string> = {\n 400: 'bad_request',\n 401: 'authentication_error',\n 403: 'permission_denied',\n 404: 'not_found',\n 409: 'conflict',\n 422: 'unprocessable_entity',\n 429: 'rate_limited',\n };\n return map[status] ?? (status >= 500 ? 'internal_server_error' : 'api_error');\n};\n\nconst messageFrom = (\n status: number,\n body: WokuErrorBody | string | undefined,\n requestId?: string,\n): string => {\n let detail = `HTTP ${status}`;\n if (typeof body === 'string' && body.trim()) {\n detail = body.trim();\n } else if (body && typeof body === 'object') {\n const { message } = body;\n if (Array.isArray(message)) detail = message.join(', ');\n else if (typeof message === 'string' && message) detail = message;\n else if (typeof body.error === 'string') detail = body.error;\n }\n return requestId\n ? `${status} ${detail} (request_id: ${requestId})`\n : `${status} ${detail}`;\n};\n","import type { RequestOptions } from './options';\n\n/** The paginated envelope every `/v1` list endpoint returns. */\nexport interface PageResponse<T> {\n data: T[];\n total: number;\n page: number;\n limit: number;\n}\n\n/** True when `value` has the shape of a {@link PageResponse}. */\nexport const isPageResponse = (\n value: unknown,\n): value is PageResponse<unknown> =>\n typeof value === 'object' &&\n value !== null &&\n Array.isArray((value as { data?: unknown }).data) &&\n typeof (value as { total?: unknown }).total === 'number';\n\n/**\n * A single page of results plus the cursor to walk the rest. Iterate items\n * across every page with `for await (const item of page)`, or walk page by\n * page with `for await (const p of page.iterPages())`.\n */\nexport class Page<T> implements AsyncIterable<T> {\n readonly data: T[];\n readonly total: number;\n readonly page: number;\n readonly limit: number;\n\n constructor(\n response: PageResponse<T>,\n private readonly fetchPage: (\n page: number,\n opts?: RequestOptions,\n ) => Promise<Page<T>>,\n private readonly options?: RequestOptions,\n ) {\n this.data = response.data;\n this.total = response.total;\n this.page = response.page;\n this.limit = response.limit;\n }\n\n /** Whether another page exists after this one. */\n hasNextPage(): boolean {\n if (this.limit <= 0) return false;\n return this.page * this.limit < this.total;\n }\n\n /** Fetch the next page (throws if there is none — guard with hasNextPage). */\n getNextPage(): Promise<Page<T>> {\n if (!this.hasNextPage()) {\n throw new RangeError('No next page');\n }\n return this.fetchPage(this.page + 1, this.options);\n }\n\n /** Yield every item across all pages, fetching lazily as needed. */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const page of walkPages(this)) {\n for (const item of page.data) yield item;\n }\n }\n\n /** Yield each Page, fetching lazily as needed. */\n iterPages(): AsyncGenerator<Page<T>> {\n return walkPages(this);\n }\n}\n\n/** Walk pages from a starting page, fetching the next one lazily. */\nasync function* walkPages<T>(start: Page<T>): AsyncGenerator<Page<T>> {\n let current = start;\n for (;;) {\n yield current;\n if (!current.hasNextPage()) return;\n current = await current.getNextPage();\n }\n}\n","import {\n WokuAPIError,\n WokuConnectionError,\n WokuError,\n WokuTimeoutError,\n type WokuErrorBody,\n} from './errors';\nimport { Page, isPageResponse, type PageResponse } from './pagination';\nimport type { RequestOptions } from './options';\n\n/** Minimal subset of the Fetch API the client depends on. */\nexport type FetchLike = (\n input: string,\n init: {\n method: string;\n headers: Record<string, string>;\n body?: string;\n signal?: AbortSignal;\n },\n) => Promise<{\n status: number;\n headers: { get(name: string): string | null };\n text(): Promise<string>;\n}>;\n\nexport interface WokuClientOptions {\n /** Company secret key. Defaults to `process.env.WOKU_API_KEY`. */\n apiKey?: string;\n /** API base URL. Defaults to `https://clientapi.woku.app`. */\n baseURL?: string;\n /** Per-request timeout in ms. Default 60000. */\n timeout?: number;\n /** Automatic retries for transient failures. Default 2. */\n maxRetries?: number;\n /** Custom fetch implementation. Defaults to the global `fetch`. */\n fetch?: FetchLike;\n /** Headers merged into every request. */\n defaultHeaders?: Record<string, string>;\n /**\n * Allow running in a browser. Off by default: the secret key grants full\n * management access and must never ship to a browser bundle.\n */\n dangerouslyAllowBrowser?: boolean;\n}\n\ninterface RequestArgs extends RequestOptions {\n body?: unknown;\n /**\n * Mark a POST as an idempotent create: an idempotency key is auto-generated\n * (unless the caller passed one) so a retry after a transient failure returns\n * the original result instead of creating twice. Left off for action POSTs\n * (send/approve/test) so they are never silently replayed.\n */\n idempotent?: boolean;\n}\n\nconst DEFAULT_BASE_URL = 'https://clientapi.woku.app';\nconst DEFAULT_TIMEOUT = 60_000;\nconst DEFAULT_MAX_RETRIES = 2;\nconst RETRY_BASE_MS = 500;\nconst RETRY_CAP_MS = 8_000;\nconst RETRYABLE_STATUS = new Set([408, 429, 500, 502, 503, 504]);\nconst SDK_VERSION = '0.1.0';\n\nconst randomId = (): string => {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c?.randomUUID) return c.randomUUID();\n return `idmp_${Date.now().toString(36)}${Math.random().toString(36).slice(2, 12)}`;\n};\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Transport core: turns a resource call into an authenticated HTTP request\n * with timeout, typed error mapping and jittered retries. Resource namespaces\n * call {@link request} and {@link getPage}; end users use the `Woku` facade.\n */\nexport class WokuClient {\n readonly baseURL: string;\n readonly maxRetries: number;\n readonly timeout: number;\n\n private readonly apiKey: string;\n private readonly fetch: FetchLike;\n private readonly defaultHeaders: Record<string, string>;\n\n constructor(options: WokuClientOptions = {}) {\n const apiKey =\n options.apiKey ??\n (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env?.WOKU_API_KEY;\n if (!apiKey) {\n throw new WokuError(\n 'Missing API key: pass { apiKey } or set WOKU_API_KEY.',\n { code: 'config_error' },\n );\n }\n if (!options.dangerouslyAllowBrowser && isBrowser()) {\n throw new WokuError(\n 'The Woku SDK is server-only: the secret key must not run in a browser. ' +\n 'Pass { dangerouslyAllowBrowser: true } only if you fully control the runtime.',\n { code: 'config_error' },\n );\n }\n const fetchImpl =\n options.fetch ?? (globalThis as { fetch?: FetchLike }).fetch;\n if (!fetchImpl) {\n throw new WokuError(\n 'No fetch implementation available; pass { fetch }.',\n {\n code: 'config_error',\n },\n );\n }\n\n this.apiKey = apiKey;\n this.baseURL = (options.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.fetch = fetchImpl;\n this.defaultHeaders = options.defaultHeaders ?? {};\n }\n\n /** Issue one request and return the parsed JSON body typed as `T`. */\n async request<T>(\n method: string,\n path: string,\n args: RequestArgs = {},\n ): Promise<T> {\n const url = this.buildUrl(path, args.query);\n const idempotencyKey =\n args.idempotencyKey ??\n (args.idempotent && method.toUpperCase() === 'POST'\n ? randomId()\n : undefined);\n const headers = this.buildHeaders(method, { ...args, idempotencyKey });\n const bodyText =\n args.body === undefined ? undefined : JSON.stringify(args.body);\n const maxRetries = args.maxRetries ?? this.maxRetries;\n const timeout = args.timeout ?? this.timeout;\n // Retries are only safe on GET or when the write carries an idempotency key.\n const retryable =\n method.toUpperCase() === 'GET' ||\n Boolean(headers['X-Woku-Idempotency-Key']);\n\n let attempt = 0;\n for (;;) {\n try {\n const { status, body, requestId, retryAfterSeconds } = await this.send(\n url,\n method,\n headers,\n bodyText,\n timeout,\n args.signal,\n );\n if (status >= 200 && status < 300) {\n return body as T;\n }\n const apiError = WokuAPIError.from(\n status,\n body,\n requestId,\n retryAfterSeconds,\n );\n if (retryable && attempt < maxRetries && RETRYABLE_STATUS.has(status)) {\n await sleep(this.backoff(attempt, apiError));\n attempt += 1;\n continue;\n }\n throw apiError;\n } catch (error) {\n if (error instanceof WokuAPIError) throw error;\n const connError = toConnectionError(error);\n // A caller-initiated abort rejects promptly; it is never retried (only\n // a timeout, which carries a different code, stays retryable).\n if (connError.code === 'aborted') throw connError;\n if (retryable && attempt < maxRetries) {\n await sleep(this.backoff(attempt));\n attempt += 1;\n continue;\n }\n throw connError;\n }\n }\n }\n\n /**\n * Issue a GET that returns a paginated envelope and wrap it as a {@link Page}.\n * `params` accepts any plain object (a resource's typed params interface).\n */\n async getPage<T>(\n path: string,\n params?: object,\n opts?: RequestOptions,\n ): Promise<Page<T>> {\n const base = (params ?? {}) as Record<string, unknown>;\n const query: Record<string, unknown> = { ...base, ...opts?.query };\n const response = await this.request<PageResponse<T> | T[]>('get', path, {\n ...opts,\n query,\n });\n const envelope: PageResponse<T> = isPageResponse(response)\n ? (response as PageResponse<T>)\n : {\n data: (response as T[]) ?? [],\n total: Array.isArray(response) ? response.length : 0,\n page: 1,\n limit: Array.isArray(response) ? response.length : 0,\n };\n return new Page<T>(\n envelope,\n (page, pageOpts) =>\n this.getPage<T>(path, { ...base, page }, { ...opts, ...pageOpts }),\n opts,\n );\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n const url = `${this.baseURL}${path.startsWith('/') ? path : `/${path}`}`;\n if (!query) return url;\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n if (Array.isArray(value)) {\n for (const item of value) search.append(key, String(item));\n } else {\n search.append(key, String(value));\n }\n }\n const qs = search.toString();\n return qs ? `${url}?${qs}` : url;\n }\n\n private buildHeaders(\n method: string,\n args: RequestArgs,\n ): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': `woku-sdk-js/${SDK_VERSION}`,\n ...this.defaultHeaders,\n ...args.headers,\n };\n // Authorization is applied last so caller/default headers can never unset\n // the secret key (the documented guarantee on RequestOptions.headers).\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n if (args.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n if (args.idempotencyKey !== undefined && method.toUpperCase() === 'POST') {\n headers['X-Woku-Idempotency-Key'] = args.idempotencyKey;\n }\n return headers;\n }\n\n private async send(\n url: string,\n method: string,\n headers: Record<string, string>,\n body: string | undefined,\n timeout: number,\n signal?: AbortSignal,\n ): Promise<{\n status: number;\n body: WokuErrorBody | string | undefined;\n requestId?: string;\n retryAfterSeconds?: number;\n }> {\n const controller = new AbortController();\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n const onExternalAbort = (): void => controller.abort();\n if (signal) {\n if (signal.aborted) controller.abort();\n else signal.addEventListener('abort', onExternalAbort);\n }\n\n try {\n const response = await this.fetch(url, {\n method: method.toUpperCase(),\n headers,\n body,\n signal: controller.signal,\n });\n const text = await response.text();\n return {\n status: response.status,\n body: parseBody(text),\n requestId: requestIdFrom(response.headers),\n retryAfterSeconds: retryAfterFromHeaders(response.headers),\n };\n } catch (error) {\n if (timedOut) throw new WokuTimeoutError();\n if (signal?.aborted) {\n throw new WokuConnectionError('Request aborted', { code: 'aborted' });\n }\n throw error;\n } finally {\n clearTimeout(timer);\n if (signal) signal.removeEventListener('abort', onExternalAbort);\n }\n }\n\n private backoff(attempt: number, apiError?: WokuAPIError): number {\n // Honor Retry-After (seconds) when the server sends it, else full jitter.\n const retryAfter =\n apiError && typeof apiError.retryAfterSeconds === 'number'\n ? apiError.retryAfterSeconds * 1000\n : undefined;\n if (retryAfter !== undefined) return Math.min(retryAfter, RETRY_CAP_MS);\n const ceiling = Math.min(RETRY_CAP_MS, RETRY_BASE_MS * 2 ** attempt);\n return Math.random() * ceiling;\n }\n}\n\nconst isBrowser = (): boolean =>\n typeof (globalThis as { document?: unknown }).document !== 'undefined';\n\nconst parseBody = (text: string): WokuErrorBody | string | undefined => {\n if (!text) return undefined;\n try {\n return JSON.parse(text) as WokuErrorBody;\n } catch {\n return text;\n }\n};\n\nconst requestIdFrom = (headers: {\n get(name: string): string | null;\n}): string | undefined =>\n headers.get('x-request-id') ??\n headers.get('request-id') ??\n headers.get('x-woku-request-id') ??\n undefined;\n\n// Parse the `Retry-After` header, which is either a number of seconds or an\n// HTTP date. Returns seconds to wait, or undefined when absent/unparseable.\nconst retryAfterFromHeaders = (headers: {\n get(name: string): string | null;\n}): number | undefined => {\n const raw = headers.get('retry-after');\n if (!raw) return undefined;\n const seconds = Number(raw);\n if (Number.isFinite(seconds)) return Math.max(0, seconds);\n const when = Date.parse(raw);\n if (!Number.isNaN(when)) return Math.max(0, (when - Date.now()) / 1000);\n return undefined;\n};\n\nconst toConnectionError = (error: unknown): WokuConnectionError => {\n if (error instanceof WokuConnectionError) return error;\n const message =\n error instanceof Error ? error.message : 'Network request failed';\n return new WokuConnectionError(message, { cause: error });\n};\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n AssignTrackerByNameParams,\n CreateTrackerParams,\n SearchEntitiesByTrackersParams,\n UpdateTrackerParams,\n} from '../types';\nimport type { EntitiesByTrackers, Tracker, WokuRecord } from '../models';\n\n/** A VoC entity type that can carry tracker values. */\nexport type TrackerEntityType = 'nps' | 'csat' | 'ces' | 'form' | 'flow';\n\nexport interface ListTrackersParams {\n includeInactive?: boolean;\n includeUsage?: boolean;\n page?: number;\n limit?: number;\n}\n\nexport interface SearchWokusByTrackerParams {\n name: string;\n value: string;\n page?: number;\n limit?: number;\n}\n\n/** Manage external tracker definitions (`/v1/external-trackers`). */\nexport class Trackers {\n constructor(private readonly client: WokuClient) {}\n\n /** List the company tracker definitions (paginated). */\n list(\n params?: ListTrackersParams,\n opts?: RequestOptions,\n ): Promise<Page<Tracker>> {\n return this.client.getPage<Tracker>('/v1/external-trackers', params, opts);\n }\n\n /** Create a tracker definition (idempotent). */\n create(body: CreateTrackerParams, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>('post', '/v1/external-trackers', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Get one tracker definition. */\n get(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'get',\n `/v1/external-trackers/${id}`,\n opts,\n );\n }\n\n /** Update a tracker definition. */\n update(\n id: string,\n body: UpdateTrackerParams,\n opts?: RequestOptions,\n ): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}`,\n { ...opts, body },\n );\n }\n\n /** Activate a tracker definition. */\n activate(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}/activate`,\n opts,\n );\n }\n\n /** Deactivate a tracker definition. */\n deactivate(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}/deactivate`,\n opts,\n );\n }\n\n /** Search VoC entities whose trackers match every filter (AND). */\n searchEntities(\n body: SearchEntitiesByTrackersParams,\n opts?: RequestOptions,\n ): Promise<EntitiesByTrackers> {\n return this.client.request<EntitiesByTrackers>(\n 'post',\n '/v1/external-trackers/search-entities',\n { ...opts, body },\n );\n }\n\n /** List the tracker values assigned to a woku. */\n listWokuValues(\n wokuId: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/wokus/${wokuId}`,\n opts,\n );\n }\n\n /** Assign (upsert) a tracker value to a woku by tracker name. */\n assignToWoku(\n wokuId: string,\n body: AssignTrackerByNameParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/external-trackers/wokus/${wokuId}`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Remove a tracker value from a woku by tracker name. */\n removeFromWoku(\n wokuId: string,\n trackerName: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/external-trackers/wokus/${wokuId}/${encodeURIComponent(trackerName)}`,\n opts,\n );\n }\n\n /** Search wokus by an exact `(tracker name, value)` pair (paginated). */\n searchWokus(\n params: SearchWokusByTrackerParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n '/v1/external-trackers/search',\n params,\n opts,\n );\n }\n\n /** List the tracker values assigned to a VoC entity (nps/csat/ces/form/flow). */\n listEntityValues(\n entityType: TrackerEntityType,\n id: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/${entityType}/${id}`,\n opts,\n );\n }\n\n /** Assign (upsert) a tracker value to a VoC entity by tracker name. */\n assignToEntity(\n entityType: TrackerEntityType,\n id: string,\n body: AssignTrackerByNameParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/external-trackers/${entityType}/${id}`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Remove a tracker value from a VoC entity by tracker name. */\n removeFromEntity(\n entityType: TrackerEntityType,\n id: string,\n trackerName: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/external-trackers/${entityType}/${id}/${encodeURIComponent(trackerName)}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateCesToolParams,\n CreateCsatToolParams,\n CreateNpsToolParams,\n UpdateCesToolParams,\n UpdateCsatToolParams,\n UpdateNpsToolParams,\n} from '../types';\nimport type { CesTool, CsatTool, DeletedResult, NpsTool } from '../models';\n\n/** Manage NPS tool definitions (`/v1/nps-tools`). */\nexport class NpsTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<NpsTool>> {\n return this.client.getPage<NpsTool>('/v1/nps-tools', params, opts);\n }\n\n create(body: CreateNpsToolParams, opts?: RequestOptions): Promise<NpsTool> {\n return this.client.request<NpsTool>('post', '/v1/nps-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<NpsTool> {\n return this.client.request<NpsTool>('get', `/v1/nps-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateNpsToolParams,\n opts?: RequestOptions,\n ): Promise<NpsTool> {\n return this.client.request<NpsTool>('patch', `/v1/nps-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/nps-tools/${id}`,\n opts,\n );\n }\n}\n\n/** Manage CSAT tool definitions (`/v1/csat-tools`). */\nexport class CsatTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<CsatTool>> {\n return this.client.getPage<CsatTool>('/v1/csat-tools', params, opts);\n }\n\n create(body: CreateCsatToolParams, opts?: RequestOptions): Promise<CsatTool> {\n return this.client.request<CsatTool>('post', '/v1/csat-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<CsatTool> {\n return this.client.request<CsatTool>('get', `/v1/csat-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateCsatToolParams,\n opts?: RequestOptions,\n ): Promise<CsatTool> {\n return this.client.request<CsatTool>('patch', `/v1/csat-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/csat-tools/${id}`,\n opts,\n );\n }\n}\n\n/** Manage CES tool definitions (`/v1/ces-tools`). */\nexport class CesTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<CesTool>> {\n return this.client.getPage<CesTool>('/v1/ces-tools', params, opts);\n }\n\n create(body: CreateCesToolParams, opts?: RequestOptions): Promise<CesTool> {\n return this.client.request<CesTool>('post', '/v1/ces-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<CesTool> {\n return this.client.request<CesTool>('get', `/v1/ces-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateCesToolParams,\n opts?: RequestOptions,\n ): Promise<CesTool> {\n return this.client.request<CesTool>('patch', `/v1/ces-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/ces-tools/${id}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n SendCesInvitationsParams,\n SendCsatInvitationsParams,\n SendNpsInvitationsParams,\n} from '../types';\nimport type { InvitationsResult, WokuRecord } from '../models';\n\nexport interface ListResponsesParams {\n page?: number;\n limit?: number;\n [key: string]: unknown;\n}\n\n/** Send the NPS survey and read its responses (`/v1/nps`). */\nexport class Nps {\n constructor(private readonly client: WokuClient) {}\n\n /** Send the NPS survey by email or WhatsApp (idempotent). */\n sendInvitations(\n body: SendNpsInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/nps/invitations',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n\n /** List NPS responses (paginated). */\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/nps', params, opts);\n }\n\n /** Get one NPS response. */\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/nps/${id}`, opts);\n }\n}\n\n/** Send the CSAT survey and read its responses (`/v1/csat`). */\nexport class Csat {\n constructor(private readonly client: WokuClient) {}\n\n sendInvitations(\n body: SendCsatInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/csat/invitations',\n { ...opts, body, idempotent: true },\n );\n }\n\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/csat', params, opts);\n }\n\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/csat/${id}`, opts);\n }\n}\n\n/** Send the CES survey and read its responses (`/v1/ces`). */\nexport class Ces {\n constructor(private readonly client: WokuClient) {}\n\n sendInvitations(\n body: SendCesInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/ces/invitations',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/ces', params, opts);\n }\n\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/ces/${id}`, opts);\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateWokuParams,\n MoveWokuParams,\n SendInvitationsParams,\n ShareWokuParams,\n UpdateWokuParams,\n UpdateWokuSettingsParams,\n} from '../types';\nimport type {\n DeletedResult,\n InvitationsResult,\n WokuRecord,\n WokuResource,\n} from '../models';\n\n/** Manage wokus (feedback collection tools) — `/v1/wokus`. */\nexport class Wokus {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuResource>> {\n return this.client.getPage<WokuResource>('/v1/wokus', params, opts);\n }\n\n create(body: CreateWokuParams, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('post', '/v1/wokus', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Get one woku with aggregated review stats. */\n get(id: string, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('get', `/v1/wokus/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/wokus/${id}`,\n opts,\n );\n }\n\n /** Apply the boolean settings idempotently (closed/reviewsDisabled/...). */\n updateSettings(\n id: string,\n body: UpdateWokuSettingsParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}/settings`, {\n ...opts,\n body,\n });\n }\n\n /** Move the woku into a folder, or to the root with `{ folderId: null }`. */\n move(id: string, body: MoveWokuParams, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}/move`, {\n ...opts,\n body,\n });\n }\n\n /** List the reviews of a woku (paginated). */\n listReviews(\n id: string,\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n `/v1/wokus/${id}/reviews`,\n params,\n opts,\n );\n }\n\n /** Send a woku review invitation by email or WhatsApp (idempotent). */\n sendInvitations(\n id: string,\n body: SendInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n `/v1/wokus/${id}/invitations`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Share a woku review link by email. */\n share(\n id: string,\n body: ShareWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', `/v1/wokus/${id}/share`, {\n ...opts,\n body,\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { SendInvitationsParams } from '../types';\nimport type { InvitationsResult, WokuRecord } from '../models';\n\n/** Read forms and send form invitations (`/v1/forms`). */\nexport class Forms {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/forms', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/forms/${id}`, opts);\n }\n\n /** List the responses of a form (paginated). */\n listResponses(\n id: string,\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n `/v1/forms/${id}/responses`,\n params,\n opts,\n );\n }\n\n /** Send a form by email or WhatsApp (idempotent). */\n sendInvitations(\n id: string,\n body: SendInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n `/v1/forms/${id}/invitations`,\n { ...opts, body, idempotent: true },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Read data flows (`/v1/flows`). */\nexport class Flows {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/flows', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/flows/${id}`, opts);\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateActionPlanGroupParams,\n CreateActionPlanTaskParams,\n ReorderActionPlanTasksParams,\n UpdateActionPlanGroupParams,\n UpdateActionPlanTaskParams,\n} from '../types';\nimport type { WokuRecord } from '../models';\n\nexport interface ListActionPlansParams {\n groupId?: string;\n status?: string;\n source?: string;\n priority?: string;\n search?: string;\n from?: string;\n to?: string;\n page?: number;\n limit?: number;\n}\n\n/** Read and drive action plans, incl. the managed kanban (`/v1/action-plans`). */\nexport class ActionPlans {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: ListActionPlansParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/action-plans', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plans/${id}`,\n opts,\n );\n }\n\n /** The plan timeline (events, oldest first). */\n events(id: string, opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/action-plans/${id}/events`,\n opts,\n );\n }\n\n /** The plan AI conversation (read-only). */\n getConversation(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plans/${id}/conversation`,\n opts,\n );\n }\n\n /**\n * Reply to the plan AI agent. Each reply is a paid AI turn (`confirm:true` is\n * sent automatically); the reply is composed asynchronously, so poll\n * {@link getConversation} until `busy` is false.\n */\n reply(id: string, text: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/conversation`,\n { ...opts, body: { text, confirm: true } },\n );\n }\n\n createTask(\n id: string,\n body: CreateActionPlanTaskParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/tasks`,\n { ...opts, body, idempotent: true },\n );\n }\n\n updateTask(\n id: string,\n taskId: string,\n body: UpdateActionPlanTaskParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plans/${id}/tasks/${taskId}`,\n { ...opts, body },\n );\n }\n\n reorderTasks(\n id: string,\n body: ReorderActionPlanTasksParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plans/${id}/tasks/reorder`,\n { ...opts, body },\n );\n }\n\n deleteTask(\n id: string,\n taskId: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/action-plans/${id}/tasks/${taskId}`,\n opts,\n );\n }\n\n approve(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'approve', opts);\n }\n\n reopen(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'reopen', opts);\n }\n\n cancel(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'cancel', opts);\n }\n\n complete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'complete', opts);\n }\n\n resume(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'resume', opts);\n }\n\n private status(\n id: string,\n action: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/${action}`,\n opts,\n );\n }\n}\n\n/** Manage action-plan groups (`/v1/action-plan-groups`). */\nexport class ActionPlanGroups {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { search?: string },\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>('get', '/v1/action-plan-groups', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /** Get one group with its embedded stats. */\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plan-groups/${id}`,\n opts,\n );\n }\n\n create(\n body: CreateActionPlanGroupParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', '/v1/action-plan-groups', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n update(\n id: string,\n body: UpdateActionPlanGroupParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plan-groups/${id}`,\n { ...opts, body },\n );\n }\n\n setEnabled(\n id: string,\n enabled: boolean,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plan-groups/${id}/enabled`,\n { ...opts, body: { enabled } },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/action-plan-groups/${id}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateTicketDestinationParams,\n UpdateTicketDestinationParams,\n UpdateTicketParams,\n} from '../types';\nimport type {\n Severity,\n TestConnectionResult,\n Ticket,\n TicketStats,\n WokuRecord,\n} from '../models';\n\nexport interface ListTicketsParams {\n tool?: 'woku' | 'nps' | 'form' | 'csat' | 'ces';\n severity?: Severity;\n search?: string;\n destinationId?: string;\n createdFrom?: string;\n createdTo?: string;\n page?: number;\n limit?: number;\n}\n\nexport interface TicketStatsParams {\n destinationId?: string;\n createdFrom?: string;\n createdTo?: string;\n}\n\n/** Read and curate support tickets (`/v1/tickets`). Tickets are AI-generated. */\nexport class Tickets {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: ListTicketsParams,\n opts?: RequestOptions,\n ): Promise<Page<Ticket>> {\n return this.client.getPage<Ticket>('/v1/tickets', params, opts);\n }\n\n /** Aggregate counts by tool and by SAC destination. */\n stats(\n params?: TicketStatsParams,\n opts?: RequestOptions,\n ): Promise<TicketStats> {\n return this.client.request<TicketStats>('get', '/v1/tickets/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<Ticket> {\n return this.client.request<Ticket>('get', `/v1/tickets/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateTicketParams,\n opts?: RequestOptions,\n ): Promise<Ticket> {\n return this.client.request<Ticket>('patch', `/v1/tickets/${id}`, {\n ...opts,\n body,\n });\n }\n}\n\n/** Manage SAC ticket destinations (`/v1/ticket-destinations`). */\nexport class TicketDestinations {\n constructor(private readonly client: WokuClient) {}\n\n list(opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n '/v1/ticket-destinations',\n opts,\n );\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/ticket-destinations/${id}`,\n opts,\n );\n }\n\n create(\n body: CreateTicketDestinationParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', '/v1/ticket-destinations', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n update(\n id: string,\n body: UpdateTicketDestinationParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/ticket-destinations/${id}`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/ticket-destinations/${id}`,\n opts,\n );\n }\n\n /**\n * Send a real connectivity test to a saved destination. Requires\n * `confirm: true` (the test reaches the live destination).\n */\n test(id: string, opts?: RequestOptions): Promise<TestConnectionResult> {\n return this.client.request<TestConnectionResult>(\n 'post',\n `/v1/ticket-destinations/${id}/test`,\n { ...opts, body: { confirm: true } },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { Channel, Dispatch, DispatchStats } from '../models';\n\nexport interface ListDispatchesParams {\n channel?: Channel;\n responseType?: 'woku' | 'nps' | 'form' | 'client-form' | 'csat' | 'ces';\n targetId?: string;\n status?: 'invited' | 'partially_responded' | 'responded' | 'failed';\n createdFrom?: string;\n createdTo?: string;\n page?: number;\n limit?: number;\n}\n\nexport interface DispatchStatsParams {\n channel?: Channel;\n responseType?: string;\n targetId?: string;\n createdFrom?: string;\n createdTo?: string;\n}\n\n/** Delivery tracking over invitation dispatches (`/v1/dispatches`). */\nexport class Dispatches {\n constructor(private readonly client: WokuClient) {}\n\n /** List the invitation dispatches (delivery status, no recipient PII). */\n list(\n params?: ListDispatchesParams,\n opts?: RequestOptions,\n ): Promise<Page<Dispatch>> {\n return this.client.getPage<Dispatch>('/v1/dispatches', params, opts);\n }\n\n /** Response-rate metrics over the dispatches. */\n stats(\n params?: DispatchStatsParams,\n opts?: RequestOptions,\n ): Promise<DispatchStats> {\n return this.client.request<DispatchStats>('get', '/v1/dispatches/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Read NPS reports (`/v1/reports`). */\nexport class Reports {\n constructor(private readonly client: WokuClient) {}\n\n /** Company-level NPS report. */\n companyNps(\n params?: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/reports/company-nps', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /** NPS report for one tool. */\n npsTool(\n npsToolId: string,\n params?: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/reports/nps-tool/${npsToolId}`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { ApiKeyResult, WokuRecord } from '../models';\n\n/** The caller company and its API key (`/v1/companies/me`). */\nexport class Company {\n constructor(private readonly client: WokuClient) {}\n\n /** Get the caller company. */\n me(opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/companies/me', opts);\n }\n\n /** Rotate the secret key. The returned key replaces the current one. */\n rotateKey(opts?: RequestOptions): Promise<ApiKeyResult> {\n return this.client.request<ApiKeyResult>(\n 'post',\n '/v1/companies/me/rotate-key',\n opts,\n );\n }\n\n /** Revoke the secret key (all subsequent requests will be unauthorized). */\n revokeKey(opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n '/v1/companies/me/revoke-key',\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Check respondent quarantine status (`/v1/quarantines`). */\nexport class Quarantines {\n constructor(private readonly client: WokuClient) {}\n\n /** Check whether a contact is quarantined. */\n check(\n params: { email?: string; phone?: string | number },\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/quarantines/check', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n}\n","import { WokuClient, type WokuClientOptions } from './core/client';\nimport { Trackers } from './resources/trackers';\nimport { CesTools, CsatTools, NpsTools } from './resources/voc-tools';\nimport { Ces, Csat, Nps } from './resources/surveys';\nimport { Wokus } from './resources/wokus';\nimport { Forms } from './resources/forms';\nimport { Flows } from './resources/flows';\nimport { ActionPlanGroups, ActionPlans } from './resources/action-plans';\nimport { TicketDestinations, Tickets } from './resources/tickets';\nimport { Dispatches } from './resources/dispatches';\nimport { Reports } from './resources/reports';\nimport { Company } from './resources/company';\nimport { Quarantines } from './resources/quarantines';\n\n/**\n * Entry point to the Woku management API.\n *\n * ```ts\n * const woku = new Woku({ apiKey: process.env.WOKU_API_KEY });\n * const tracker = await woku.trackers.create({ name: 'Store', system: 'retail' });\n * for await (const ticket of await woku.tickets.list({ severity: 'high' })) {\n * console.log(ticket.title);\n * }\n * ```\n */\nexport class Woku {\n /** The underlying transport (advanced use). */\n readonly client: WokuClient;\n\n readonly trackers: Trackers;\n readonly npsTools: NpsTools;\n readonly csatTools: CsatTools;\n readonly cesTools: CesTools;\n readonly nps: Nps;\n readonly csat: Csat;\n readonly ces: Ces;\n readonly wokus: Wokus;\n readonly forms: Forms;\n readonly flows: Flows;\n readonly actionPlans: ActionPlans;\n readonly actionPlanGroups: ActionPlanGroups;\n readonly tickets: Tickets;\n readonly ticketDestinations: TicketDestinations;\n readonly dispatches: Dispatches;\n readonly reports: Reports;\n readonly company: Company;\n readonly quarantines: Quarantines;\n\n constructor(options?: WokuClientOptions | string) {\n const opts: WokuClientOptions =\n typeof options === 'string' ? { apiKey: options } : (options ?? {});\n this.client = new WokuClient(opts);\n\n this.trackers = new Trackers(this.client);\n this.npsTools = new NpsTools(this.client);\n this.csatTools = new CsatTools(this.client);\n this.cesTools = new CesTools(this.client);\n this.nps = new Nps(this.client);\n this.csat = new Csat(this.client);\n this.ces = new Ces(this.client);\n this.wokus = new Wokus(this.client);\n this.forms = new Forms(this.client);\n this.flows = new Flows(this.client);\n this.actionPlans = new ActionPlans(this.client);\n this.actionPlanGroups = new ActionPlanGroups(this.client);\n this.tickets = new Tickets(this.client);\n this.ticketDestinations = new TicketDestinations(this.client);\n this.dispatches = new Dispatches(this.client);\n this.reports = new Reports(this.client);\n this.company = new Company(this.client);\n this.quarantines = new Quarantines(this.client);\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -976,7 +976,6 @@ type CreateTicketDestinationParams = Schemas['CreateTicketDestinationDto'];
976
976
  type UpdateTicketDestinationParams = Schemas['UpdateTicketDestinationDto'];
977
977
  type CreateActionPlanGroupParams = Schemas['CreateActionPlanGroupDto'];
978
978
  type UpdateActionPlanGroupParams = Schemas['UpdateActionPlanGroupDto'];
979
- type SendActionPlanParams = Schemas['SendActionPlanDto'];
980
979
  type CreateActionPlanTaskParams = Schemas['CreateActionPlanTaskDto'];
981
980
  type UpdateActionPlanTaskParams = Schemas['UpdateActionPlanTaskDto'];
982
981
  type ReorderActionPlanTasksParams = Schemas['ReorderActionPlanTasksDto'];
@@ -1361,8 +1360,6 @@ declare class ActionPlans {
1361
1360
  * {@link getConversation} until `busy` is false.
1362
1361
  */
1363
1362
  reply(id: string, text: string, opts?: RequestOptions): Promise<WokuRecord>;
1364
- /** Send an approved plan to a destination (jira/monday/clickup/notion/internal). */
1365
- send(id: string, body: SendActionPlanParams, opts?: RequestOptions): Promise<WokuRecord>;
1366
1363
  createTask(id: string, body: CreateActionPlanTaskParams, opts?: RequestOptions): Promise<WokuRecord>;
1367
1364
  updateTask(id: string, taskId: string, body: UpdateActionPlanTaskParams, opts?: RequestOptions): Promise<WokuRecord>;
1368
1365
  reorderTasks(id: string, body: ReorderActionPlanTasksParams, opts?: RequestOptions): Promise<WokuRecord>;
@@ -1613,4 +1610,4 @@ declare class InternalServerError extends WokuAPIError {
1613
1610
  constructor(...args: ConstructorParameters<typeof WokuAPIError>);
1614
1611
  }
1615
1612
 
1616
- export { type ApiKeyResult, type AssignTrackerByNameParams, AuthenticationError, BadRequestError, type CesTool, type Channel, ConflictError, type CreateActionPlanGroupParams, type CreateActionPlanTaskParams, type CreateCesToolParams, type CreateCsatToolParams, type CreateNpsToolParams, type CreateTicketDestinationParams, type CreateTrackerParams, type CreateWokuParams, type CsatTool, type DeletedResult, type Dispatch, type DispatchStats, type EntitiesByTrackers, type FeedbackType, type FetchLike, InternalServerError, type InvitationsResult, type Locale, type MoveWokuParams, NotFoundError, type NpsTool, Page, type PageResponse, PermissionDeniedError, type PostPlanReplyParams, RateLimitError, type ReorderActionPlanTasksParams, type RequestOptions, type Schemas, type SearchEntitiesByTrackersParams, type SendActionPlanParams, type SendCesInvitationsParams, type SendCsatInvitationsParams, type SendInvitationsParams, type SendNpsInvitationsParams, type Severity, type ShareWokuParams, type TestConnectionResult, type Ticket, type TicketStats, type Tracker, UnprocessableEntityError, type UpdateActionPlanGroupParams, type UpdateActionPlanTaskParams, type UpdateCesToolParams, type UpdateCsatToolParams, type UpdateNpsToolParams, type UpdateTicketDestinationParams, type UpdateTicketParams, type UpdateTrackerParams, type UpdateWokuParams, type UpdateWokuSettingsParams, Woku, WokuAPIError, WokuClient, type WokuClientOptions, WokuConnectionError, WokuError, type WokuErrorBody, type WokuRecord, type WokuResource, WokuTimeoutError };
1613
+ export { type ApiKeyResult, type AssignTrackerByNameParams, AuthenticationError, BadRequestError, type CesTool, type Channel, ConflictError, type CreateActionPlanGroupParams, type CreateActionPlanTaskParams, type CreateCesToolParams, type CreateCsatToolParams, type CreateNpsToolParams, type CreateTicketDestinationParams, type CreateTrackerParams, type CreateWokuParams, type CsatTool, type DeletedResult, type Dispatch, type DispatchStats, type EntitiesByTrackers, type FeedbackType, type FetchLike, InternalServerError, type InvitationsResult, type Locale, type MoveWokuParams, NotFoundError, type NpsTool, Page, type PageResponse, PermissionDeniedError, type PostPlanReplyParams, RateLimitError, type ReorderActionPlanTasksParams, type RequestOptions, type Schemas, type SearchEntitiesByTrackersParams, type SendCesInvitationsParams, type SendCsatInvitationsParams, type SendInvitationsParams, type SendNpsInvitationsParams, type Severity, type ShareWokuParams, type TestConnectionResult, type Ticket, type TicketStats, type Tracker, UnprocessableEntityError, type UpdateActionPlanGroupParams, type UpdateActionPlanTaskParams, type UpdateCesToolParams, type UpdateCsatToolParams, type UpdateNpsToolParams, type UpdateTicketDestinationParams, type UpdateTicketParams, type UpdateTrackerParams, type UpdateWokuParams, type UpdateWokuSettingsParams, Woku, WokuAPIError, WokuClient, type WokuClientOptions, WokuConnectionError, WokuError, type WokuErrorBody, type WokuRecord, type WokuResource, WokuTimeoutError };
package/dist/index.d.ts CHANGED
@@ -976,7 +976,6 @@ type CreateTicketDestinationParams = Schemas['CreateTicketDestinationDto'];
976
976
  type UpdateTicketDestinationParams = Schemas['UpdateTicketDestinationDto'];
977
977
  type CreateActionPlanGroupParams = Schemas['CreateActionPlanGroupDto'];
978
978
  type UpdateActionPlanGroupParams = Schemas['UpdateActionPlanGroupDto'];
979
- type SendActionPlanParams = Schemas['SendActionPlanDto'];
980
979
  type CreateActionPlanTaskParams = Schemas['CreateActionPlanTaskDto'];
981
980
  type UpdateActionPlanTaskParams = Schemas['UpdateActionPlanTaskDto'];
982
981
  type ReorderActionPlanTasksParams = Schemas['ReorderActionPlanTasksDto'];
@@ -1361,8 +1360,6 @@ declare class ActionPlans {
1361
1360
  * {@link getConversation} until `busy` is false.
1362
1361
  */
1363
1362
  reply(id: string, text: string, opts?: RequestOptions): Promise<WokuRecord>;
1364
- /** Send an approved plan to a destination (jira/monday/clickup/notion/internal). */
1365
- send(id: string, body: SendActionPlanParams, opts?: RequestOptions): Promise<WokuRecord>;
1366
1363
  createTask(id: string, body: CreateActionPlanTaskParams, opts?: RequestOptions): Promise<WokuRecord>;
1367
1364
  updateTask(id: string, taskId: string, body: UpdateActionPlanTaskParams, opts?: RequestOptions): Promise<WokuRecord>;
1368
1365
  reorderTasks(id: string, body: ReorderActionPlanTasksParams, opts?: RequestOptions): Promise<WokuRecord>;
@@ -1613,4 +1610,4 @@ declare class InternalServerError extends WokuAPIError {
1613
1610
  constructor(...args: ConstructorParameters<typeof WokuAPIError>);
1614
1611
  }
1615
1612
 
1616
- export { type ApiKeyResult, type AssignTrackerByNameParams, AuthenticationError, BadRequestError, type CesTool, type Channel, ConflictError, type CreateActionPlanGroupParams, type CreateActionPlanTaskParams, type CreateCesToolParams, type CreateCsatToolParams, type CreateNpsToolParams, type CreateTicketDestinationParams, type CreateTrackerParams, type CreateWokuParams, type CsatTool, type DeletedResult, type Dispatch, type DispatchStats, type EntitiesByTrackers, type FeedbackType, type FetchLike, InternalServerError, type InvitationsResult, type Locale, type MoveWokuParams, NotFoundError, type NpsTool, Page, type PageResponse, PermissionDeniedError, type PostPlanReplyParams, RateLimitError, type ReorderActionPlanTasksParams, type RequestOptions, type Schemas, type SearchEntitiesByTrackersParams, type SendActionPlanParams, type SendCesInvitationsParams, type SendCsatInvitationsParams, type SendInvitationsParams, type SendNpsInvitationsParams, type Severity, type ShareWokuParams, type TestConnectionResult, type Ticket, type TicketStats, type Tracker, UnprocessableEntityError, type UpdateActionPlanGroupParams, type UpdateActionPlanTaskParams, type UpdateCesToolParams, type UpdateCsatToolParams, type UpdateNpsToolParams, type UpdateTicketDestinationParams, type UpdateTicketParams, type UpdateTrackerParams, type UpdateWokuParams, type UpdateWokuSettingsParams, Woku, WokuAPIError, WokuClient, type WokuClientOptions, WokuConnectionError, WokuError, type WokuErrorBody, type WokuRecord, type WokuResource, WokuTimeoutError };
1613
+ export { type ApiKeyResult, type AssignTrackerByNameParams, AuthenticationError, BadRequestError, type CesTool, type Channel, ConflictError, type CreateActionPlanGroupParams, type CreateActionPlanTaskParams, type CreateCesToolParams, type CreateCsatToolParams, type CreateNpsToolParams, type CreateTicketDestinationParams, type CreateTrackerParams, type CreateWokuParams, type CsatTool, type DeletedResult, type Dispatch, type DispatchStats, type EntitiesByTrackers, type FeedbackType, type FetchLike, InternalServerError, type InvitationsResult, type Locale, type MoveWokuParams, NotFoundError, type NpsTool, Page, type PageResponse, PermissionDeniedError, type PostPlanReplyParams, RateLimitError, type ReorderActionPlanTasksParams, type RequestOptions, type Schemas, type SearchEntitiesByTrackersParams, type SendCesInvitationsParams, type SendCsatInvitationsParams, type SendInvitationsParams, type SendNpsInvitationsParams, type Severity, type ShareWokuParams, type TestConnectionResult, type Ticket, type TicketStats, type Tracker, UnprocessableEntityError, type UpdateActionPlanGroupParams, type UpdateActionPlanTaskParams, type UpdateCesToolParams, type UpdateCsatToolParams, type UpdateNpsToolParams, type UpdateTicketDestinationParams, type UpdateTicketParams, type UpdateTrackerParams, type UpdateWokuParams, type UpdateWokuSettingsParams, Woku, WokuAPIError, WokuClient, type WokuClientOptions, WokuConnectionError, WokuError, type WokuErrorBody, type WokuRecord, type WokuResource, WokuTimeoutError };
package/dist/index.js CHANGED
@@ -825,14 +825,6 @@ var ActionPlans = class {
825
825
  { ...opts, body: { text, confirm: true } }
826
826
  );
827
827
  }
828
- /** Send an approved plan to a destination (jira/monday/clickup/notion/internal). */
829
- send(id, body, opts) {
830
- return this.client.request(
831
- "post",
832
- `/v1/action-plans/${id}/send`,
833
- { ...opts, body }
834
- );
835
- }
836
828
  createTask(id, body, opts) {
837
829
  return this.client.request(
838
830
  "post",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/errors.ts","../src/core/pagination.ts","../src/core/client.ts","../src/resources/trackers.ts","../src/resources/voc-tools.ts","../src/resources/surveys.ts","../src/resources/wokus.ts","../src/resources/forms.ts","../src/resources/flows.ts","../src/resources/action-plans.ts","../src/resources/tickets.ts","../src/resources/dispatches.ts","../src/resources/reports.ts","../src/resources/company.ts","../src/resources/quarantines.ts","../src/woku.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error hierarchy for the Woku SDK. Every failure is a {@link WokuError};\n * transport failures are {@link WokuConnectionError} and HTTP error responses\n * are {@link WokuAPIError} subclasses keyed by status. API errors carry the\n * server `requestId` (echo it when reporting an issue) and the parsed body.\n */\n\n/** Parsed error body shape the API returns (NestJS exception filter). */\nexport interface WokuErrorBody {\n statusCode?: number;\n message?: string | string[];\n error?: string;\n code?: string;\n [key: string]: unknown;\n}\n\n/** Base class for every SDK error. */\nexport class WokuError extends Error {\n /** Stable, machine-readable code (e.g. `not_found`, `rate_limited`). */\n readonly code?: string;\n\n constructor(message: string, options?: { code?: string; cause?: unknown }) {\n super(message);\n this.name = 'WokuError';\n this.code = options?.code;\n if (options?.cause !== undefined) {\n (this as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\n/**\n * The request never got a usable HTTP response: DNS/TCP failure, TLS error,\n * timeout or an aborted signal. Safe to retry (the SDK already retries these\n * up to `maxRetries`).\n */\nexport class WokuConnectionError extends WokuError {\n constructor(message: string, options?: { cause?: unknown; code?: string }) {\n super(message, {\n code: options?.code ?? 'connection_error',\n cause: options?.cause,\n });\n this.name = 'WokuConnectionError';\n }\n}\n\n/** The request was aborted (per-call `signal` or the configured timeout). */\nexport class WokuTimeoutError extends WokuConnectionError {\n constructor(message = 'Request timed out') {\n super(message, { code: 'timeout' });\n this.name = 'WokuTimeoutError';\n }\n}\n\n/** The server returned a non-2xx HTTP status. */\nexport class WokuAPIError extends WokuError {\n /** HTTP status code. */\n readonly status: number;\n /** Server correlation id, if the response carried one. */\n readonly requestId?: string;\n /** Parsed response body (or the raw text when it was not JSON). */\n readonly body: WokuErrorBody | string | undefined;\n /**\n * Seconds to wait before retrying, from the `Retry-After` response header\n * (or a `retryAfter` body field as a fallback), when the server sent one.\n */\n readonly retryAfterSeconds?: number;\n\n constructor(\n status: number,\n body: WokuErrorBody | string | undefined,\n message: string,\n requestId?: string,\n code?: string,\n retryAfterSeconds?: number,\n ) {\n super(message, { code: code ?? codeForStatus(status) });\n this.name = 'WokuAPIError';\n this.status = status;\n this.body = body;\n this.requestId = requestId;\n this.retryAfterSeconds = retryAfterSeconds ?? retryAfterFromBody(body);\n }\n\n /** Build the most specific error subclass for a status + body. */\n static from(\n status: number,\n body: WokuErrorBody | string | undefined,\n requestId?: string,\n retryAfterSeconds?: number,\n ): WokuAPIError {\n const message = messageFrom(status, body, requestId);\n const ra = retryAfterSeconds;\n switch (true) {\n case status === 400:\n return new BadRequestError(status, body, message, requestId, undefined, ra);\n case status === 401:\n return new AuthenticationError(status, body, message, requestId, undefined, ra);\n case status === 403:\n return new PermissionDeniedError(status, body, message, requestId, undefined, ra);\n case status === 404:\n return new NotFoundError(status, body, message, requestId, undefined, ra);\n case status === 409:\n return new ConflictError(status, body, message, requestId, undefined, ra);\n case status === 422:\n return new UnprocessableEntityError(status, body, message, requestId, undefined, ra);\n case status === 429:\n return new RateLimitError(status, body, message, requestId, undefined, ra);\n case status >= 500:\n return new InternalServerError(status, body, message, requestId, undefined, ra);\n default:\n return new WokuAPIError(status, body, message, requestId, undefined, ra);\n }\n }\n}\n\n/** 400 — malformed request or failed validation. */\nexport class BadRequestError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'BadRequestError';\n }\n}\n\n/** 401 — missing or invalid API key. */\nexport class AuthenticationError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'AuthenticationError';\n }\n}\n\n/** 403 — the key is valid but not allowed to access the resource. */\nexport class PermissionDeniedError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'PermissionDeniedError';\n }\n}\n\n/** 404 — the resource does not exist (or is not visible to this company). */\nexport class NotFoundError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'NotFoundError';\n }\n}\n\n/** 409 — the request conflicts with the resource state. */\nexport class ConflictError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'ConflictError';\n }\n}\n\n/** 422 — semantically invalid request. */\nexport class UnprocessableEntityError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'UnprocessableEntityError';\n }\n}\n\n/** 429 — rate limited. `retryAfterSeconds` mirrors the `Retry-After` header. */\nexport class RateLimitError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'RateLimitError';\n }\n}\n\n/** 5xx — the server failed to process the request. */\nexport class InternalServerError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'InternalServerError';\n }\n}\n\nconst retryAfterFromBody = (\n body: WokuErrorBody | string | undefined,\n): number | undefined =>\n body && typeof body === 'object' && typeof body.retryAfter === 'number'\n ? body.retryAfter\n : undefined;\n\nconst codeForStatus = (status: number): string => {\n const map: Record<number, string> = {\n 400: 'bad_request',\n 401: 'authentication_error',\n 403: 'permission_denied',\n 404: 'not_found',\n 409: 'conflict',\n 422: 'unprocessable_entity',\n 429: 'rate_limited',\n };\n return map[status] ?? (status >= 500 ? 'internal_server_error' : 'api_error');\n};\n\nconst messageFrom = (\n status: number,\n body: WokuErrorBody | string | undefined,\n requestId?: string,\n): string => {\n let detail = `HTTP ${status}`;\n if (typeof body === 'string' && body.trim()) {\n detail = body.trim();\n } else if (body && typeof body === 'object') {\n const { message } = body;\n if (Array.isArray(message)) detail = message.join(', ');\n else if (typeof message === 'string' && message) detail = message;\n else if (typeof body.error === 'string') detail = body.error;\n }\n return requestId\n ? `${status} ${detail} (request_id: ${requestId})`\n : `${status} ${detail}`;\n};\n","import type { RequestOptions } from './options';\n\n/** The paginated envelope every `/v1` list endpoint returns. */\nexport interface PageResponse<T> {\n data: T[];\n total: number;\n page: number;\n limit: number;\n}\n\n/** True when `value` has the shape of a {@link PageResponse}. */\nexport const isPageResponse = (\n value: unknown,\n): value is PageResponse<unknown> =>\n typeof value === 'object' &&\n value !== null &&\n Array.isArray((value as { data?: unknown }).data) &&\n typeof (value as { total?: unknown }).total === 'number';\n\n/**\n * A single page of results plus the cursor to walk the rest. Iterate items\n * across every page with `for await (const item of page)`, or walk page by\n * page with `for await (const p of page.iterPages())`.\n */\nexport class Page<T> implements AsyncIterable<T> {\n readonly data: T[];\n readonly total: number;\n readonly page: number;\n readonly limit: number;\n\n constructor(\n response: PageResponse<T>,\n private readonly fetchPage: (\n page: number,\n opts?: RequestOptions,\n ) => Promise<Page<T>>,\n private readonly options?: RequestOptions,\n ) {\n this.data = response.data;\n this.total = response.total;\n this.page = response.page;\n this.limit = response.limit;\n }\n\n /** Whether another page exists after this one. */\n hasNextPage(): boolean {\n if (this.limit <= 0) return false;\n return this.page * this.limit < this.total;\n }\n\n /** Fetch the next page (throws if there is none — guard with hasNextPage). */\n getNextPage(): Promise<Page<T>> {\n if (!this.hasNextPage()) {\n throw new RangeError('No next page');\n }\n return this.fetchPage(this.page + 1, this.options);\n }\n\n /** Yield every item across all pages, fetching lazily as needed. */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const page of walkPages(this)) {\n for (const item of page.data) yield item;\n }\n }\n\n /** Yield each Page, fetching lazily as needed. */\n iterPages(): AsyncGenerator<Page<T>> {\n return walkPages(this);\n }\n}\n\n/** Walk pages from a starting page, fetching the next one lazily. */\nasync function* walkPages<T>(start: Page<T>): AsyncGenerator<Page<T>> {\n let current = start;\n for (;;) {\n yield current;\n if (!current.hasNextPage()) return;\n current = await current.getNextPage();\n }\n}\n","import {\n WokuAPIError,\n WokuConnectionError,\n WokuError,\n WokuTimeoutError,\n type WokuErrorBody,\n} from './errors';\nimport { Page, isPageResponse, type PageResponse } from './pagination';\nimport type { RequestOptions } from './options';\n\n/** Minimal subset of the Fetch API the client depends on. */\nexport type FetchLike = (\n input: string,\n init: {\n method: string;\n headers: Record<string, string>;\n body?: string;\n signal?: AbortSignal;\n },\n) => Promise<{\n status: number;\n headers: { get(name: string): string | null };\n text(): Promise<string>;\n}>;\n\nexport interface WokuClientOptions {\n /** Company secret key. Defaults to `process.env.WOKU_API_KEY`. */\n apiKey?: string;\n /** API base URL. Defaults to `https://clientapi.woku.app`. */\n baseURL?: string;\n /** Per-request timeout in ms. Default 60000. */\n timeout?: number;\n /** Automatic retries for transient failures. Default 2. */\n maxRetries?: number;\n /** Custom fetch implementation. Defaults to the global `fetch`. */\n fetch?: FetchLike;\n /** Headers merged into every request. */\n defaultHeaders?: Record<string, string>;\n /**\n * Allow running in a browser. Off by default: the secret key grants full\n * management access and must never ship to a browser bundle.\n */\n dangerouslyAllowBrowser?: boolean;\n}\n\ninterface RequestArgs extends RequestOptions {\n body?: unknown;\n /**\n * Mark a POST as an idempotent create: an idempotency key is auto-generated\n * (unless the caller passed one) so a retry after a transient failure returns\n * the original result instead of creating twice. Left off for action POSTs\n * (send/approve/test) so they are never silently replayed.\n */\n idempotent?: boolean;\n}\n\nconst DEFAULT_BASE_URL = 'https://clientapi.woku.app';\nconst DEFAULT_TIMEOUT = 60_000;\nconst DEFAULT_MAX_RETRIES = 2;\nconst RETRY_BASE_MS = 500;\nconst RETRY_CAP_MS = 8_000;\nconst RETRYABLE_STATUS = new Set([408, 429, 500, 502, 503, 504]);\nconst SDK_VERSION = '0.1.0';\n\nconst randomId = (): string => {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c?.randomUUID) return c.randomUUID();\n return `idmp_${Date.now().toString(36)}${Math.random().toString(36).slice(2, 12)}`;\n};\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Transport core: turns a resource call into an authenticated HTTP request\n * with timeout, typed error mapping and jittered retries. Resource namespaces\n * call {@link request} and {@link getPage}; end users use the `Woku` facade.\n */\nexport class WokuClient {\n readonly baseURL: string;\n readonly maxRetries: number;\n readonly timeout: number;\n\n private readonly apiKey: string;\n private readonly fetch: FetchLike;\n private readonly defaultHeaders: Record<string, string>;\n\n constructor(options: WokuClientOptions = {}) {\n const apiKey =\n options.apiKey ??\n (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env?.WOKU_API_KEY;\n if (!apiKey) {\n throw new WokuError(\n 'Missing API key: pass { apiKey } or set WOKU_API_KEY.',\n { code: 'config_error' },\n );\n }\n if (!options.dangerouslyAllowBrowser && isBrowser()) {\n throw new WokuError(\n 'The Woku SDK is server-only: the secret key must not run in a browser. ' +\n 'Pass { dangerouslyAllowBrowser: true } only if you fully control the runtime.',\n { code: 'config_error' },\n );\n }\n const fetchImpl =\n options.fetch ?? (globalThis as { fetch?: FetchLike }).fetch;\n if (!fetchImpl) {\n throw new WokuError(\n 'No fetch implementation available; pass { fetch }.',\n {\n code: 'config_error',\n },\n );\n }\n\n this.apiKey = apiKey;\n this.baseURL = (options.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.fetch = fetchImpl;\n this.defaultHeaders = options.defaultHeaders ?? {};\n }\n\n /** Issue one request and return the parsed JSON body typed as `T`. */\n async request<T>(\n method: string,\n path: string,\n args: RequestArgs = {},\n ): Promise<T> {\n const url = this.buildUrl(path, args.query);\n const idempotencyKey =\n args.idempotencyKey ??\n (args.idempotent && method.toUpperCase() === 'POST'\n ? randomId()\n : undefined);\n const headers = this.buildHeaders(method, { ...args, idempotencyKey });\n const bodyText =\n args.body === undefined ? undefined : JSON.stringify(args.body);\n const maxRetries = args.maxRetries ?? this.maxRetries;\n const timeout = args.timeout ?? this.timeout;\n // Retries are only safe on GET or when the write carries an idempotency key.\n const retryable =\n method.toUpperCase() === 'GET' ||\n Boolean(headers['X-Woku-Idempotency-Key']);\n\n let attempt = 0;\n for (;;) {\n try {\n const { status, body, requestId, retryAfterSeconds } = await this.send(\n url,\n method,\n headers,\n bodyText,\n timeout,\n args.signal,\n );\n if (status >= 200 && status < 300) {\n return body as T;\n }\n const apiError = WokuAPIError.from(\n status,\n body,\n requestId,\n retryAfterSeconds,\n );\n if (retryable && attempt < maxRetries && RETRYABLE_STATUS.has(status)) {\n await sleep(this.backoff(attempt, apiError));\n attempt += 1;\n continue;\n }\n throw apiError;\n } catch (error) {\n if (error instanceof WokuAPIError) throw error;\n const connError = toConnectionError(error);\n // A caller-initiated abort rejects promptly; it is never retried (only\n // a timeout, which carries a different code, stays retryable).\n if (connError.code === 'aborted') throw connError;\n if (retryable && attempt < maxRetries) {\n await sleep(this.backoff(attempt));\n attempt += 1;\n continue;\n }\n throw connError;\n }\n }\n }\n\n /**\n * Issue a GET that returns a paginated envelope and wrap it as a {@link Page}.\n * `params` accepts any plain object (a resource's typed params interface).\n */\n async getPage<T>(\n path: string,\n params?: object,\n opts?: RequestOptions,\n ): Promise<Page<T>> {\n const base = (params ?? {}) as Record<string, unknown>;\n const query: Record<string, unknown> = { ...base, ...opts?.query };\n const response = await this.request<PageResponse<T> | T[]>('get', path, {\n ...opts,\n query,\n });\n const envelope: PageResponse<T> = isPageResponse(response)\n ? (response as PageResponse<T>)\n : {\n data: (response as T[]) ?? [],\n total: Array.isArray(response) ? response.length : 0,\n page: 1,\n limit: Array.isArray(response) ? response.length : 0,\n };\n return new Page<T>(\n envelope,\n (page, pageOpts) =>\n this.getPage<T>(path, { ...base, page }, { ...opts, ...pageOpts }),\n opts,\n );\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n const url = `${this.baseURL}${path.startsWith('/') ? path : `/${path}`}`;\n if (!query) return url;\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n if (Array.isArray(value)) {\n for (const item of value) search.append(key, String(item));\n } else {\n search.append(key, String(value));\n }\n }\n const qs = search.toString();\n return qs ? `${url}?${qs}` : url;\n }\n\n private buildHeaders(\n method: string,\n args: RequestArgs,\n ): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': `woku-sdk-js/${SDK_VERSION}`,\n ...this.defaultHeaders,\n ...args.headers,\n };\n // Authorization is applied last so caller/default headers can never unset\n // the secret key (the documented guarantee on RequestOptions.headers).\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n if (args.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n if (args.idempotencyKey !== undefined && method.toUpperCase() === 'POST') {\n headers['X-Woku-Idempotency-Key'] = args.idempotencyKey;\n }\n return headers;\n }\n\n private async send(\n url: string,\n method: string,\n headers: Record<string, string>,\n body: string | undefined,\n timeout: number,\n signal?: AbortSignal,\n ): Promise<{\n status: number;\n body: WokuErrorBody | string | undefined;\n requestId?: string;\n retryAfterSeconds?: number;\n }> {\n const controller = new AbortController();\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n const onExternalAbort = (): void => controller.abort();\n if (signal) {\n if (signal.aborted) controller.abort();\n else signal.addEventListener('abort', onExternalAbort);\n }\n\n try {\n const response = await this.fetch(url, {\n method: method.toUpperCase(),\n headers,\n body,\n signal: controller.signal,\n });\n const text = await response.text();\n return {\n status: response.status,\n body: parseBody(text),\n requestId: requestIdFrom(response.headers),\n retryAfterSeconds: retryAfterFromHeaders(response.headers),\n };\n } catch (error) {\n if (timedOut) throw new WokuTimeoutError();\n if (signal?.aborted) {\n throw new WokuConnectionError('Request aborted', { code: 'aborted' });\n }\n throw error;\n } finally {\n clearTimeout(timer);\n if (signal) signal.removeEventListener('abort', onExternalAbort);\n }\n }\n\n private backoff(attempt: number, apiError?: WokuAPIError): number {\n // Honor Retry-After (seconds) when the server sends it, else full jitter.\n const retryAfter =\n apiError && typeof apiError.retryAfterSeconds === 'number'\n ? apiError.retryAfterSeconds * 1000\n : undefined;\n if (retryAfter !== undefined) return Math.min(retryAfter, RETRY_CAP_MS);\n const ceiling = Math.min(RETRY_CAP_MS, RETRY_BASE_MS * 2 ** attempt);\n return Math.random() * ceiling;\n }\n}\n\nconst isBrowser = (): boolean =>\n typeof (globalThis as { document?: unknown }).document !== 'undefined';\n\nconst parseBody = (text: string): WokuErrorBody | string | undefined => {\n if (!text) return undefined;\n try {\n return JSON.parse(text) as WokuErrorBody;\n } catch {\n return text;\n }\n};\n\nconst requestIdFrom = (headers: {\n get(name: string): string | null;\n}): string | undefined =>\n headers.get('x-request-id') ??\n headers.get('request-id') ??\n headers.get('x-woku-request-id') ??\n undefined;\n\n// Parse the `Retry-After` header, which is either a number of seconds or an\n// HTTP date. Returns seconds to wait, or undefined when absent/unparseable.\nconst retryAfterFromHeaders = (headers: {\n get(name: string): string | null;\n}): number | undefined => {\n const raw = headers.get('retry-after');\n if (!raw) return undefined;\n const seconds = Number(raw);\n if (Number.isFinite(seconds)) return Math.max(0, seconds);\n const when = Date.parse(raw);\n if (!Number.isNaN(when)) return Math.max(0, (when - Date.now()) / 1000);\n return undefined;\n};\n\nconst toConnectionError = (error: unknown): WokuConnectionError => {\n if (error instanceof WokuConnectionError) return error;\n const message =\n error instanceof Error ? error.message : 'Network request failed';\n return new WokuConnectionError(message, { cause: error });\n};\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n AssignTrackerByNameParams,\n CreateTrackerParams,\n SearchEntitiesByTrackersParams,\n UpdateTrackerParams,\n} from '../types';\nimport type { EntitiesByTrackers, Tracker, WokuRecord } from '../models';\n\n/** A VoC entity type that can carry tracker values. */\nexport type TrackerEntityType = 'nps' | 'csat' | 'ces' | 'form' | 'flow';\n\nexport interface ListTrackersParams {\n includeInactive?: boolean;\n includeUsage?: boolean;\n page?: number;\n limit?: number;\n}\n\nexport interface SearchWokusByTrackerParams {\n name: string;\n value: string;\n page?: number;\n limit?: number;\n}\n\n/** Manage external tracker definitions (`/v1/external-trackers`). */\nexport class Trackers {\n constructor(private readonly client: WokuClient) {}\n\n /** List the company tracker definitions (paginated). */\n list(\n params?: ListTrackersParams,\n opts?: RequestOptions,\n ): Promise<Page<Tracker>> {\n return this.client.getPage<Tracker>('/v1/external-trackers', params, opts);\n }\n\n /** Create a tracker definition (idempotent). */\n create(body: CreateTrackerParams, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>('post', '/v1/external-trackers', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Get one tracker definition. */\n get(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'get',\n `/v1/external-trackers/${id}`,\n opts,\n );\n }\n\n /** Update a tracker definition. */\n update(\n id: string,\n body: UpdateTrackerParams,\n opts?: RequestOptions,\n ): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}`,\n { ...opts, body },\n );\n }\n\n /** Activate a tracker definition. */\n activate(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}/activate`,\n opts,\n );\n }\n\n /** Deactivate a tracker definition. */\n deactivate(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}/deactivate`,\n opts,\n );\n }\n\n /** Search VoC entities whose trackers match every filter (AND). */\n searchEntities(\n body: SearchEntitiesByTrackersParams,\n opts?: RequestOptions,\n ): Promise<EntitiesByTrackers> {\n return this.client.request<EntitiesByTrackers>(\n 'post',\n '/v1/external-trackers/search-entities',\n { ...opts, body },\n );\n }\n\n /** List the tracker values assigned to a woku. */\n listWokuValues(\n wokuId: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/wokus/${wokuId}`,\n opts,\n );\n }\n\n /** Assign (upsert) a tracker value to a woku by tracker name. */\n assignToWoku(\n wokuId: string,\n body: AssignTrackerByNameParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/external-trackers/wokus/${wokuId}`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Remove a tracker value from a woku by tracker name. */\n removeFromWoku(\n wokuId: string,\n trackerName: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/external-trackers/wokus/${wokuId}/${encodeURIComponent(trackerName)}`,\n opts,\n );\n }\n\n /** Search wokus by an exact `(tracker name, value)` pair (paginated). */\n searchWokus(\n params: SearchWokusByTrackerParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n '/v1/external-trackers/search',\n params,\n opts,\n );\n }\n\n /** List the tracker values assigned to a VoC entity (nps/csat/ces/form/flow). */\n listEntityValues(\n entityType: TrackerEntityType,\n id: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/${entityType}/${id}`,\n opts,\n );\n }\n\n /** Assign (upsert) a tracker value to a VoC entity by tracker name. */\n assignToEntity(\n entityType: TrackerEntityType,\n id: string,\n body: AssignTrackerByNameParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/external-trackers/${entityType}/${id}`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Remove a tracker value from a VoC entity by tracker name. */\n removeFromEntity(\n entityType: TrackerEntityType,\n id: string,\n trackerName: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/external-trackers/${entityType}/${id}/${encodeURIComponent(trackerName)}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateCesToolParams,\n CreateCsatToolParams,\n CreateNpsToolParams,\n UpdateCesToolParams,\n UpdateCsatToolParams,\n UpdateNpsToolParams,\n} from '../types';\nimport type { CesTool, CsatTool, DeletedResult, NpsTool } from '../models';\n\n/** Manage NPS tool definitions (`/v1/nps-tools`). */\nexport class NpsTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<NpsTool>> {\n return this.client.getPage<NpsTool>('/v1/nps-tools', params, opts);\n }\n\n create(body: CreateNpsToolParams, opts?: RequestOptions): Promise<NpsTool> {\n return this.client.request<NpsTool>('post', '/v1/nps-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<NpsTool> {\n return this.client.request<NpsTool>('get', `/v1/nps-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateNpsToolParams,\n opts?: RequestOptions,\n ): Promise<NpsTool> {\n return this.client.request<NpsTool>('patch', `/v1/nps-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/nps-tools/${id}`,\n opts,\n );\n }\n}\n\n/** Manage CSAT tool definitions (`/v1/csat-tools`). */\nexport class CsatTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<CsatTool>> {\n return this.client.getPage<CsatTool>('/v1/csat-tools', params, opts);\n }\n\n create(body: CreateCsatToolParams, opts?: RequestOptions): Promise<CsatTool> {\n return this.client.request<CsatTool>('post', '/v1/csat-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<CsatTool> {\n return this.client.request<CsatTool>('get', `/v1/csat-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateCsatToolParams,\n opts?: RequestOptions,\n ): Promise<CsatTool> {\n return this.client.request<CsatTool>('patch', `/v1/csat-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/csat-tools/${id}`,\n opts,\n );\n }\n}\n\n/** Manage CES tool definitions (`/v1/ces-tools`). */\nexport class CesTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<CesTool>> {\n return this.client.getPage<CesTool>('/v1/ces-tools', params, opts);\n }\n\n create(body: CreateCesToolParams, opts?: RequestOptions): Promise<CesTool> {\n return this.client.request<CesTool>('post', '/v1/ces-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<CesTool> {\n return this.client.request<CesTool>('get', `/v1/ces-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateCesToolParams,\n opts?: RequestOptions,\n ): Promise<CesTool> {\n return this.client.request<CesTool>('patch', `/v1/ces-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/ces-tools/${id}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n SendCesInvitationsParams,\n SendCsatInvitationsParams,\n SendNpsInvitationsParams,\n} from '../types';\nimport type { InvitationsResult, WokuRecord } from '../models';\n\nexport interface ListResponsesParams {\n page?: number;\n limit?: number;\n [key: string]: unknown;\n}\n\n/** Send the NPS survey and read its responses (`/v1/nps`). */\nexport class Nps {\n constructor(private readonly client: WokuClient) {}\n\n /** Send the NPS survey by email or WhatsApp (idempotent). */\n sendInvitations(\n body: SendNpsInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/nps/invitations',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n\n /** List NPS responses (paginated). */\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/nps', params, opts);\n }\n\n /** Get one NPS response. */\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/nps/${id}`, opts);\n }\n}\n\n/** Send the CSAT survey and read its responses (`/v1/csat`). */\nexport class Csat {\n constructor(private readonly client: WokuClient) {}\n\n sendInvitations(\n body: SendCsatInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/csat/invitations',\n { ...opts, body, idempotent: true },\n );\n }\n\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/csat', params, opts);\n }\n\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/csat/${id}`, opts);\n }\n}\n\n/** Send the CES survey and read its responses (`/v1/ces`). */\nexport class Ces {\n constructor(private readonly client: WokuClient) {}\n\n sendInvitations(\n body: SendCesInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/ces/invitations',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/ces', params, opts);\n }\n\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/ces/${id}`, opts);\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateWokuParams,\n MoveWokuParams,\n SendInvitationsParams,\n ShareWokuParams,\n UpdateWokuParams,\n UpdateWokuSettingsParams,\n} from '../types';\nimport type {\n DeletedResult,\n InvitationsResult,\n WokuRecord,\n WokuResource,\n} from '../models';\n\n/** Manage wokus (feedback collection tools) — `/v1/wokus`. */\nexport class Wokus {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuResource>> {\n return this.client.getPage<WokuResource>('/v1/wokus', params, opts);\n }\n\n create(body: CreateWokuParams, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('post', '/v1/wokus', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Get one woku with aggregated review stats. */\n get(id: string, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('get', `/v1/wokus/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/wokus/${id}`,\n opts,\n );\n }\n\n /** Apply the boolean settings idempotently (closed/reviewsDisabled/...). */\n updateSettings(\n id: string,\n body: UpdateWokuSettingsParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}/settings`, {\n ...opts,\n body,\n });\n }\n\n /** Move the woku into a folder, or to the root with `{ folderId: null }`. */\n move(id: string, body: MoveWokuParams, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}/move`, {\n ...opts,\n body,\n });\n }\n\n /** List the reviews of a woku (paginated). */\n listReviews(\n id: string,\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n `/v1/wokus/${id}/reviews`,\n params,\n opts,\n );\n }\n\n /** Send a woku review invitation by email or WhatsApp (idempotent). */\n sendInvitations(\n id: string,\n body: SendInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n `/v1/wokus/${id}/invitations`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Share a woku review link by email. */\n share(\n id: string,\n body: ShareWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', `/v1/wokus/${id}/share`, {\n ...opts,\n body,\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { SendInvitationsParams } from '../types';\nimport type { InvitationsResult, WokuRecord } from '../models';\n\n/** Read forms and send form invitations (`/v1/forms`). */\nexport class Forms {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/forms', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/forms/${id}`, opts);\n }\n\n /** List the responses of a form (paginated). */\n listResponses(\n id: string,\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n `/v1/forms/${id}/responses`,\n params,\n opts,\n );\n }\n\n /** Send a form by email or WhatsApp (idempotent). */\n sendInvitations(\n id: string,\n body: SendInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n `/v1/forms/${id}/invitations`,\n { ...opts, body, idempotent: true },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Read data flows (`/v1/flows`). */\nexport class Flows {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/flows', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/flows/${id}`, opts);\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateActionPlanGroupParams,\n CreateActionPlanTaskParams,\n ReorderActionPlanTasksParams,\n SendActionPlanParams,\n UpdateActionPlanGroupParams,\n UpdateActionPlanTaskParams,\n} from '../types';\nimport type { WokuRecord } from '../models';\n\nexport interface ListActionPlansParams {\n groupId?: string;\n status?: string;\n source?: string;\n priority?: string;\n search?: string;\n from?: string;\n to?: string;\n page?: number;\n limit?: number;\n}\n\n/** Read and drive action plans, incl. the managed kanban (`/v1/action-plans`). */\nexport class ActionPlans {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: ListActionPlansParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/action-plans', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plans/${id}`,\n opts,\n );\n }\n\n /** The plan timeline (events, oldest first). */\n events(id: string, opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/action-plans/${id}/events`,\n opts,\n );\n }\n\n /** The plan AI conversation (read-only). */\n getConversation(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plans/${id}/conversation`,\n opts,\n );\n }\n\n /**\n * Reply to the plan AI agent. Each reply is a paid AI turn (`confirm:true` is\n * sent automatically); the reply is composed asynchronously, so poll\n * {@link getConversation} until `busy` is false.\n */\n reply(id: string, text: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/conversation`,\n { ...opts, body: { text, confirm: true } },\n );\n }\n\n /** Send an approved plan to a destination (jira/monday/clickup/notion/internal). */\n send(\n id: string,\n body: SendActionPlanParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/send`,\n { ...opts, body },\n );\n }\n\n createTask(\n id: string,\n body: CreateActionPlanTaskParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/tasks`,\n { ...opts, body, idempotent: true },\n );\n }\n\n updateTask(\n id: string,\n taskId: string,\n body: UpdateActionPlanTaskParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plans/${id}/tasks/${taskId}`,\n { ...opts, body },\n );\n }\n\n reorderTasks(\n id: string,\n body: ReorderActionPlanTasksParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plans/${id}/tasks/reorder`,\n { ...opts, body },\n );\n }\n\n deleteTask(\n id: string,\n taskId: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/action-plans/${id}/tasks/${taskId}`,\n opts,\n );\n }\n\n approve(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'approve', opts);\n }\n\n reopen(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'reopen', opts);\n }\n\n cancel(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'cancel', opts);\n }\n\n complete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'complete', opts);\n }\n\n resume(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'resume', opts);\n }\n\n private status(\n id: string,\n action: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/${action}`,\n opts,\n );\n }\n}\n\n/** Manage action-plan groups (`/v1/action-plan-groups`). */\nexport class ActionPlanGroups {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { search?: string },\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>('get', '/v1/action-plan-groups', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /** Get one group with its embedded stats. */\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plan-groups/${id}`,\n opts,\n );\n }\n\n create(\n body: CreateActionPlanGroupParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', '/v1/action-plan-groups', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n update(\n id: string,\n body: UpdateActionPlanGroupParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plan-groups/${id}`,\n { ...opts, body },\n );\n }\n\n setEnabled(\n id: string,\n enabled: boolean,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plan-groups/${id}/enabled`,\n { ...opts, body: { enabled } },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/action-plan-groups/${id}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateTicketDestinationParams,\n UpdateTicketDestinationParams,\n UpdateTicketParams,\n} from '../types';\nimport type {\n Severity,\n TestConnectionResult,\n Ticket,\n TicketStats,\n WokuRecord,\n} from '../models';\n\nexport interface ListTicketsParams {\n tool?: 'woku' | 'nps' | 'form' | 'csat' | 'ces';\n severity?: Severity;\n search?: string;\n destinationId?: string;\n createdFrom?: string;\n createdTo?: string;\n page?: number;\n limit?: number;\n}\n\nexport interface TicketStatsParams {\n destinationId?: string;\n createdFrom?: string;\n createdTo?: string;\n}\n\n/** Read and curate support tickets (`/v1/tickets`). Tickets are AI-generated. */\nexport class Tickets {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: ListTicketsParams,\n opts?: RequestOptions,\n ): Promise<Page<Ticket>> {\n return this.client.getPage<Ticket>('/v1/tickets', params, opts);\n }\n\n /** Aggregate counts by tool and by SAC destination. */\n stats(\n params?: TicketStatsParams,\n opts?: RequestOptions,\n ): Promise<TicketStats> {\n return this.client.request<TicketStats>('get', '/v1/tickets/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<Ticket> {\n return this.client.request<Ticket>('get', `/v1/tickets/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateTicketParams,\n opts?: RequestOptions,\n ): Promise<Ticket> {\n return this.client.request<Ticket>('patch', `/v1/tickets/${id}`, {\n ...opts,\n body,\n });\n }\n}\n\n/** Manage SAC ticket destinations (`/v1/ticket-destinations`). */\nexport class TicketDestinations {\n constructor(private readonly client: WokuClient) {}\n\n list(opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n '/v1/ticket-destinations',\n opts,\n );\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/ticket-destinations/${id}`,\n opts,\n );\n }\n\n create(\n body: CreateTicketDestinationParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', '/v1/ticket-destinations', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n update(\n id: string,\n body: UpdateTicketDestinationParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/ticket-destinations/${id}`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/ticket-destinations/${id}`,\n opts,\n );\n }\n\n /**\n * Send a real connectivity test to a saved destination. Requires\n * `confirm: true` (the test reaches the live destination).\n */\n test(id: string, opts?: RequestOptions): Promise<TestConnectionResult> {\n return this.client.request<TestConnectionResult>(\n 'post',\n `/v1/ticket-destinations/${id}/test`,\n { ...opts, body: { confirm: true } },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { Channel, Dispatch, DispatchStats } from '../models';\n\nexport interface ListDispatchesParams {\n channel?: Channel;\n responseType?: 'woku' | 'nps' | 'form' | 'client-form' | 'csat' | 'ces';\n targetId?: string;\n status?: 'invited' | 'partially_responded' | 'responded' | 'failed';\n createdFrom?: string;\n createdTo?: string;\n page?: number;\n limit?: number;\n}\n\nexport interface DispatchStatsParams {\n channel?: Channel;\n responseType?: string;\n targetId?: string;\n createdFrom?: string;\n createdTo?: string;\n}\n\n/** Delivery tracking over invitation dispatches (`/v1/dispatches`). */\nexport class Dispatches {\n constructor(private readonly client: WokuClient) {}\n\n /** List the invitation dispatches (delivery status, no recipient PII). */\n list(\n params?: ListDispatchesParams,\n opts?: RequestOptions,\n ): Promise<Page<Dispatch>> {\n return this.client.getPage<Dispatch>('/v1/dispatches', params, opts);\n }\n\n /** Response-rate metrics over the dispatches. */\n stats(\n params?: DispatchStatsParams,\n opts?: RequestOptions,\n ): Promise<DispatchStats> {\n return this.client.request<DispatchStats>('get', '/v1/dispatches/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Read NPS reports (`/v1/reports`). */\nexport class Reports {\n constructor(private readonly client: WokuClient) {}\n\n /** Company-level NPS report. */\n companyNps(\n params?: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/reports/company-nps', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /** NPS report for one tool. */\n npsTool(\n npsToolId: string,\n params?: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/reports/nps-tool/${npsToolId}`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { ApiKeyResult, WokuRecord } from '../models';\n\n/** The caller company and its API key (`/v1/companies/me`). */\nexport class Company {\n constructor(private readonly client: WokuClient) {}\n\n /** Get the caller company. */\n me(opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/companies/me', opts);\n }\n\n /** Rotate the secret key. The returned key replaces the current one. */\n rotateKey(opts?: RequestOptions): Promise<ApiKeyResult> {\n return this.client.request<ApiKeyResult>(\n 'post',\n '/v1/companies/me/rotate-key',\n opts,\n );\n }\n\n /** Revoke the secret key (all subsequent requests will be unauthorized). */\n revokeKey(opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n '/v1/companies/me/revoke-key',\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Check respondent quarantine status (`/v1/quarantines`). */\nexport class Quarantines {\n constructor(private readonly client: WokuClient) {}\n\n /** Check whether a contact is quarantined. */\n check(\n params: { email?: string; phone?: string | number },\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/quarantines/check', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n}\n","import { WokuClient, type WokuClientOptions } from './core/client';\nimport { Trackers } from './resources/trackers';\nimport { CesTools, CsatTools, NpsTools } from './resources/voc-tools';\nimport { Ces, Csat, Nps } from './resources/surveys';\nimport { Wokus } from './resources/wokus';\nimport { Forms } from './resources/forms';\nimport { Flows } from './resources/flows';\nimport { ActionPlanGroups, ActionPlans } from './resources/action-plans';\nimport { TicketDestinations, Tickets } from './resources/tickets';\nimport { Dispatches } from './resources/dispatches';\nimport { Reports } from './resources/reports';\nimport { Company } from './resources/company';\nimport { Quarantines } from './resources/quarantines';\n\n/**\n * Entry point to the Woku management API.\n *\n * ```ts\n * const woku = new Woku({ apiKey: process.env.WOKU_API_KEY });\n * const tracker = await woku.trackers.create({ name: 'Store', system: 'retail' });\n * for await (const ticket of await woku.tickets.list({ severity: 'high' })) {\n * console.log(ticket.title);\n * }\n * ```\n */\nexport class Woku {\n /** The underlying transport (advanced use). */\n readonly client: WokuClient;\n\n readonly trackers: Trackers;\n readonly npsTools: NpsTools;\n readonly csatTools: CsatTools;\n readonly cesTools: CesTools;\n readonly nps: Nps;\n readonly csat: Csat;\n readonly ces: Ces;\n readonly wokus: Wokus;\n readonly forms: Forms;\n readonly flows: Flows;\n readonly actionPlans: ActionPlans;\n readonly actionPlanGroups: ActionPlanGroups;\n readonly tickets: Tickets;\n readonly ticketDestinations: TicketDestinations;\n readonly dispatches: Dispatches;\n readonly reports: Reports;\n readonly company: Company;\n readonly quarantines: Quarantines;\n\n constructor(options?: WokuClientOptions | string) {\n const opts: WokuClientOptions =\n typeof options === 'string' ? { apiKey: options } : (options ?? {});\n this.client = new WokuClient(opts);\n\n this.trackers = new Trackers(this.client);\n this.npsTools = new NpsTools(this.client);\n this.csatTools = new CsatTools(this.client);\n this.cesTools = new CesTools(this.client);\n this.nps = new Nps(this.client);\n this.csat = new Csat(this.client);\n this.ces = new Ces(this.client);\n this.wokus = new Wokus(this.client);\n this.forms = new Forms(this.client);\n this.flows = new Flows(this.client);\n this.actionPlans = new ActionPlans(this.client);\n this.actionPlanGroups = new ActionPlanGroups(this.client);\n this.tickets = new Tickets(this.client);\n this.ticketDestinations = new TicketDestinations(this.client);\n this.dispatches = new Dispatches(this.client);\n this.reports = new Reports(this.client);\n this.company = new Company(this.client);\n this.quarantines = new Quarantines(this.client);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/errors.ts","../src/core/pagination.ts","../src/core/client.ts","../src/resources/trackers.ts","../src/resources/voc-tools.ts","../src/resources/surveys.ts","../src/resources/wokus.ts","../src/resources/forms.ts","../src/resources/flows.ts","../src/resources/action-plans.ts","../src/resources/tickets.ts","../src/resources/dispatches.ts","../src/resources/reports.ts","../src/resources/company.ts","../src/resources/quarantines.ts","../src/woku.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error hierarchy for the Woku SDK. Every failure is a {@link WokuError};\n * transport failures are {@link WokuConnectionError} and HTTP error responses\n * are {@link WokuAPIError} subclasses keyed by status. API errors carry the\n * server `requestId` (echo it when reporting an issue) and the parsed body.\n */\n\n/** Parsed error body shape the API returns (NestJS exception filter). */\nexport interface WokuErrorBody {\n statusCode?: number;\n message?: string | string[];\n error?: string;\n code?: string;\n [key: string]: unknown;\n}\n\n/** Base class for every SDK error. */\nexport class WokuError extends Error {\n /** Stable, machine-readable code (e.g. `not_found`, `rate_limited`). */\n readonly code?: string;\n\n constructor(message: string, options?: { code?: string; cause?: unknown }) {\n super(message);\n this.name = 'WokuError';\n this.code = options?.code;\n if (options?.cause !== undefined) {\n (this as { cause?: unknown }).cause = options.cause;\n }\n }\n}\n\n/**\n * The request never got a usable HTTP response: DNS/TCP failure, TLS error,\n * timeout or an aborted signal. Safe to retry (the SDK already retries these\n * up to `maxRetries`).\n */\nexport class WokuConnectionError extends WokuError {\n constructor(message: string, options?: { cause?: unknown; code?: string }) {\n super(message, {\n code: options?.code ?? 'connection_error',\n cause: options?.cause,\n });\n this.name = 'WokuConnectionError';\n }\n}\n\n/** The request was aborted (per-call `signal` or the configured timeout). */\nexport class WokuTimeoutError extends WokuConnectionError {\n constructor(message = 'Request timed out') {\n super(message, { code: 'timeout' });\n this.name = 'WokuTimeoutError';\n }\n}\n\n/** The server returned a non-2xx HTTP status. */\nexport class WokuAPIError extends WokuError {\n /** HTTP status code. */\n readonly status: number;\n /** Server correlation id, if the response carried one. */\n readonly requestId?: string;\n /** Parsed response body (or the raw text when it was not JSON). */\n readonly body: WokuErrorBody | string | undefined;\n /**\n * Seconds to wait before retrying, from the `Retry-After` response header\n * (or a `retryAfter` body field as a fallback), when the server sent one.\n */\n readonly retryAfterSeconds?: number;\n\n constructor(\n status: number,\n body: WokuErrorBody | string | undefined,\n message: string,\n requestId?: string,\n code?: string,\n retryAfterSeconds?: number,\n ) {\n super(message, { code: code ?? codeForStatus(status) });\n this.name = 'WokuAPIError';\n this.status = status;\n this.body = body;\n this.requestId = requestId;\n this.retryAfterSeconds = retryAfterSeconds ?? retryAfterFromBody(body);\n }\n\n /** Build the most specific error subclass for a status + body. */\n static from(\n status: number,\n body: WokuErrorBody | string | undefined,\n requestId?: string,\n retryAfterSeconds?: number,\n ): WokuAPIError {\n const message = messageFrom(status, body, requestId);\n const ra = retryAfterSeconds;\n switch (true) {\n case status === 400:\n return new BadRequestError(status, body, message, requestId, undefined, ra);\n case status === 401:\n return new AuthenticationError(status, body, message, requestId, undefined, ra);\n case status === 403:\n return new PermissionDeniedError(status, body, message, requestId, undefined, ra);\n case status === 404:\n return new NotFoundError(status, body, message, requestId, undefined, ra);\n case status === 409:\n return new ConflictError(status, body, message, requestId, undefined, ra);\n case status === 422:\n return new UnprocessableEntityError(status, body, message, requestId, undefined, ra);\n case status === 429:\n return new RateLimitError(status, body, message, requestId, undefined, ra);\n case status >= 500:\n return new InternalServerError(status, body, message, requestId, undefined, ra);\n default:\n return new WokuAPIError(status, body, message, requestId, undefined, ra);\n }\n }\n}\n\n/** 400 — malformed request or failed validation. */\nexport class BadRequestError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'BadRequestError';\n }\n}\n\n/** 401 — missing or invalid API key. */\nexport class AuthenticationError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'AuthenticationError';\n }\n}\n\n/** 403 — the key is valid but not allowed to access the resource. */\nexport class PermissionDeniedError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'PermissionDeniedError';\n }\n}\n\n/** 404 — the resource does not exist (or is not visible to this company). */\nexport class NotFoundError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'NotFoundError';\n }\n}\n\n/** 409 — the request conflicts with the resource state. */\nexport class ConflictError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'ConflictError';\n }\n}\n\n/** 422 — semantically invalid request. */\nexport class UnprocessableEntityError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'UnprocessableEntityError';\n }\n}\n\n/** 429 — rate limited. `retryAfterSeconds` mirrors the `Retry-After` header. */\nexport class RateLimitError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'RateLimitError';\n }\n}\n\n/** 5xx — the server failed to process the request. */\nexport class InternalServerError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'InternalServerError';\n }\n}\n\nconst retryAfterFromBody = (\n body: WokuErrorBody | string | undefined,\n): number | undefined =>\n body && typeof body === 'object' && typeof body.retryAfter === 'number'\n ? body.retryAfter\n : undefined;\n\nconst codeForStatus = (status: number): string => {\n const map: Record<number, string> = {\n 400: 'bad_request',\n 401: 'authentication_error',\n 403: 'permission_denied',\n 404: 'not_found',\n 409: 'conflict',\n 422: 'unprocessable_entity',\n 429: 'rate_limited',\n };\n return map[status] ?? (status >= 500 ? 'internal_server_error' : 'api_error');\n};\n\nconst messageFrom = (\n status: number,\n body: WokuErrorBody | string | undefined,\n requestId?: string,\n): string => {\n let detail = `HTTP ${status}`;\n if (typeof body === 'string' && body.trim()) {\n detail = body.trim();\n } else if (body && typeof body === 'object') {\n const { message } = body;\n if (Array.isArray(message)) detail = message.join(', ');\n else if (typeof message === 'string' && message) detail = message;\n else if (typeof body.error === 'string') detail = body.error;\n }\n return requestId\n ? `${status} ${detail} (request_id: ${requestId})`\n : `${status} ${detail}`;\n};\n","import type { RequestOptions } from './options';\n\n/** The paginated envelope every `/v1` list endpoint returns. */\nexport interface PageResponse<T> {\n data: T[];\n total: number;\n page: number;\n limit: number;\n}\n\n/** True when `value` has the shape of a {@link PageResponse}. */\nexport const isPageResponse = (\n value: unknown,\n): value is PageResponse<unknown> =>\n typeof value === 'object' &&\n value !== null &&\n Array.isArray((value as { data?: unknown }).data) &&\n typeof (value as { total?: unknown }).total === 'number';\n\n/**\n * A single page of results plus the cursor to walk the rest. Iterate items\n * across every page with `for await (const item of page)`, or walk page by\n * page with `for await (const p of page.iterPages())`.\n */\nexport class Page<T> implements AsyncIterable<T> {\n readonly data: T[];\n readonly total: number;\n readonly page: number;\n readonly limit: number;\n\n constructor(\n response: PageResponse<T>,\n private readonly fetchPage: (\n page: number,\n opts?: RequestOptions,\n ) => Promise<Page<T>>,\n private readonly options?: RequestOptions,\n ) {\n this.data = response.data;\n this.total = response.total;\n this.page = response.page;\n this.limit = response.limit;\n }\n\n /** Whether another page exists after this one. */\n hasNextPage(): boolean {\n if (this.limit <= 0) return false;\n return this.page * this.limit < this.total;\n }\n\n /** Fetch the next page (throws if there is none — guard with hasNextPage). */\n getNextPage(): Promise<Page<T>> {\n if (!this.hasNextPage()) {\n throw new RangeError('No next page');\n }\n return this.fetchPage(this.page + 1, this.options);\n }\n\n /** Yield every item across all pages, fetching lazily as needed. */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const page of walkPages(this)) {\n for (const item of page.data) yield item;\n }\n }\n\n /** Yield each Page, fetching lazily as needed. */\n iterPages(): AsyncGenerator<Page<T>> {\n return walkPages(this);\n }\n}\n\n/** Walk pages from a starting page, fetching the next one lazily. */\nasync function* walkPages<T>(start: Page<T>): AsyncGenerator<Page<T>> {\n let current = start;\n for (;;) {\n yield current;\n if (!current.hasNextPage()) return;\n current = await current.getNextPage();\n }\n}\n","import {\n WokuAPIError,\n WokuConnectionError,\n WokuError,\n WokuTimeoutError,\n type WokuErrorBody,\n} from './errors';\nimport { Page, isPageResponse, type PageResponse } from './pagination';\nimport type { RequestOptions } from './options';\n\n/** Minimal subset of the Fetch API the client depends on. */\nexport type FetchLike = (\n input: string,\n init: {\n method: string;\n headers: Record<string, string>;\n body?: string;\n signal?: AbortSignal;\n },\n) => Promise<{\n status: number;\n headers: { get(name: string): string | null };\n text(): Promise<string>;\n}>;\n\nexport interface WokuClientOptions {\n /** Company secret key. Defaults to `process.env.WOKU_API_KEY`. */\n apiKey?: string;\n /** API base URL. Defaults to `https://clientapi.woku.app`. */\n baseURL?: string;\n /** Per-request timeout in ms. Default 60000. */\n timeout?: number;\n /** Automatic retries for transient failures. Default 2. */\n maxRetries?: number;\n /** Custom fetch implementation. Defaults to the global `fetch`. */\n fetch?: FetchLike;\n /** Headers merged into every request. */\n defaultHeaders?: Record<string, string>;\n /**\n * Allow running in a browser. Off by default: the secret key grants full\n * management access and must never ship to a browser bundle.\n */\n dangerouslyAllowBrowser?: boolean;\n}\n\ninterface RequestArgs extends RequestOptions {\n body?: unknown;\n /**\n * Mark a POST as an idempotent create: an idempotency key is auto-generated\n * (unless the caller passed one) so a retry after a transient failure returns\n * the original result instead of creating twice. Left off for action POSTs\n * (send/approve/test) so they are never silently replayed.\n */\n idempotent?: boolean;\n}\n\nconst DEFAULT_BASE_URL = 'https://clientapi.woku.app';\nconst DEFAULT_TIMEOUT = 60_000;\nconst DEFAULT_MAX_RETRIES = 2;\nconst RETRY_BASE_MS = 500;\nconst RETRY_CAP_MS = 8_000;\nconst RETRYABLE_STATUS = new Set([408, 429, 500, 502, 503, 504]);\nconst SDK_VERSION = '0.1.0';\n\nconst randomId = (): string => {\n const c = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;\n if (c?.randomUUID) return c.randomUUID();\n return `idmp_${Date.now().toString(36)}${Math.random().toString(36).slice(2, 12)}`;\n};\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Transport core: turns a resource call into an authenticated HTTP request\n * with timeout, typed error mapping and jittered retries. Resource namespaces\n * call {@link request} and {@link getPage}; end users use the `Woku` facade.\n */\nexport class WokuClient {\n readonly baseURL: string;\n readonly maxRetries: number;\n readonly timeout: number;\n\n private readonly apiKey: string;\n private readonly fetch: FetchLike;\n private readonly defaultHeaders: Record<string, string>;\n\n constructor(options: WokuClientOptions = {}) {\n const apiKey =\n options.apiKey ??\n (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env?.WOKU_API_KEY;\n if (!apiKey) {\n throw new WokuError(\n 'Missing API key: pass { apiKey } or set WOKU_API_KEY.',\n { code: 'config_error' },\n );\n }\n if (!options.dangerouslyAllowBrowser && isBrowser()) {\n throw new WokuError(\n 'The Woku SDK is server-only: the secret key must not run in a browser. ' +\n 'Pass { dangerouslyAllowBrowser: true } only if you fully control the runtime.',\n { code: 'config_error' },\n );\n }\n const fetchImpl =\n options.fetch ?? (globalThis as { fetch?: FetchLike }).fetch;\n if (!fetchImpl) {\n throw new WokuError(\n 'No fetch implementation available; pass { fetch }.',\n {\n code: 'config_error',\n },\n );\n }\n\n this.apiKey = apiKey;\n this.baseURL = (options.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, '');\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.fetch = fetchImpl;\n this.defaultHeaders = options.defaultHeaders ?? {};\n }\n\n /** Issue one request and return the parsed JSON body typed as `T`. */\n async request<T>(\n method: string,\n path: string,\n args: RequestArgs = {},\n ): Promise<T> {\n const url = this.buildUrl(path, args.query);\n const idempotencyKey =\n args.idempotencyKey ??\n (args.idempotent && method.toUpperCase() === 'POST'\n ? randomId()\n : undefined);\n const headers = this.buildHeaders(method, { ...args, idempotencyKey });\n const bodyText =\n args.body === undefined ? undefined : JSON.stringify(args.body);\n const maxRetries = args.maxRetries ?? this.maxRetries;\n const timeout = args.timeout ?? this.timeout;\n // Retries are only safe on GET or when the write carries an idempotency key.\n const retryable =\n method.toUpperCase() === 'GET' ||\n Boolean(headers['X-Woku-Idempotency-Key']);\n\n let attempt = 0;\n for (;;) {\n try {\n const { status, body, requestId, retryAfterSeconds } = await this.send(\n url,\n method,\n headers,\n bodyText,\n timeout,\n args.signal,\n );\n if (status >= 200 && status < 300) {\n return body as T;\n }\n const apiError = WokuAPIError.from(\n status,\n body,\n requestId,\n retryAfterSeconds,\n );\n if (retryable && attempt < maxRetries && RETRYABLE_STATUS.has(status)) {\n await sleep(this.backoff(attempt, apiError));\n attempt += 1;\n continue;\n }\n throw apiError;\n } catch (error) {\n if (error instanceof WokuAPIError) throw error;\n const connError = toConnectionError(error);\n // A caller-initiated abort rejects promptly; it is never retried (only\n // a timeout, which carries a different code, stays retryable).\n if (connError.code === 'aborted') throw connError;\n if (retryable && attempt < maxRetries) {\n await sleep(this.backoff(attempt));\n attempt += 1;\n continue;\n }\n throw connError;\n }\n }\n }\n\n /**\n * Issue a GET that returns a paginated envelope and wrap it as a {@link Page}.\n * `params` accepts any plain object (a resource's typed params interface).\n */\n async getPage<T>(\n path: string,\n params?: object,\n opts?: RequestOptions,\n ): Promise<Page<T>> {\n const base = (params ?? {}) as Record<string, unknown>;\n const query: Record<string, unknown> = { ...base, ...opts?.query };\n const response = await this.request<PageResponse<T> | T[]>('get', path, {\n ...opts,\n query,\n });\n const envelope: PageResponse<T> = isPageResponse(response)\n ? (response as PageResponse<T>)\n : {\n data: (response as T[]) ?? [],\n total: Array.isArray(response) ? response.length : 0,\n page: 1,\n limit: Array.isArray(response) ? response.length : 0,\n };\n return new Page<T>(\n envelope,\n (page, pageOpts) =>\n this.getPage<T>(path, { ...base, page }, { ...opts, ...pageOpts }),\n opts,\n );\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n const url = `${this.baseURL}${path.startsWith('/') ? path : `/${path}`}`;\n if (!query) return url;\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value === undefined || value === null) continue;\n if (Array.isArray(value)) {\n for (const item of value) search.append(key, String(item));\n } else {\n search.append(key, String(value));\n }\n }\n const qs = search.toString();\n return qs ? `${url}?${qs}` : url;\n }\n\n private buildHeaders(\n method: string,\n args: RequestArgs,\n ): Record<string, string> {\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': `woku-sdk-js/${SDK_VERSION}`,\n ...this.defaultHeaders,\n ...args.headers,\n };\n // Authorization is applied last so caller/default headers can never unset\n // the secret key (the documented guarantee on RequestOptions.headers).\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n if (args.body !== undefined) {\n headers['Content-Type'] = 'application/json';\n }\n if (args.idempotencyKey !== undefined && method.toUpperCase() === 'POST') {\n headers['X-Woku-Idempotency-Key'] = args.idempotencyKey;\n }\n return headers;\n }\n\n private async send(\n url: string,\n method: string,\n headers: Record<string, string>,\n body: string | undefined,\n timeout: number,\n signal?: AbortSignal,\n ): Promise<{\n status: number;\n body: WokuErrorBody | string | undefined;\n requestId?: string;\n retryAfterSeconds?: number;\n }> {\n const controller = new AbortController();\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeout);\n const onExternalAbort = (): void => controller.abort();\n if (signal) {\n if (signal.aborted) controller.abort();\n else signal.addEventListener('abort', onExternalAbort);\n }\n\n try {\n const response = await this.fetch(url, {\n method: method.toUpperCase(),\n headers,\n body,\n signal: controller.signal,\n });\n const text = await response.text();\n return {\n status: response.status,\n body: parseBody(text),\n requestId: requestIdFrom(response.headers),\n retryAfterSeconds: retryAfterFromHeaders(response.headers),\n };\n } catch (error) {\n if (timedOut) throw new WokuTimeoutError();\n if (signal?.aborted) {\n throw new WokuConnectionError('Request aborted', { code: 'aborted' });\n }\n throw error;\n } finally {\n clearTimeout(timer);\n if (signal) signal.removeEventListener('abort', onExternalAbort);\n }\n }\n\n private backoff(attempt: number, apiError?: WokuAPIError): number {\n // Honor Retry-After (seconds) when the server sends it, else full jitter.\n const retryAfter =\n apiError && typeof apiError.retryAfterSeconds === 'number'\n ? apiError.retryAfterSeconds * 1000\n : undefined;\n if (retryAfter !== undefined) return Math.min(retryAfter, RETRY_CAP_MS);\n const ceiling = Math.min(RETRY_CAP_MS, RETRY_BASE_MS * 2 ** attempt);\n return Math.random() * ceiling;\n }\n}\n\nconst isBrowser = (): boolean =>\n typeof (globalThis as { document?: unknown }).document !== 'undefined';\n\nconst parseBody = (text: string): WokuErrorBody | string | undefined => {\n if (!text) return undefined;\n try {\n return JSON.parse(text) as WokuErrorBody;\n } catch {\n return text;\n }\n};\n\nconst requestIdFrom = (headers: {\n get(name: string): string | null;\n}): string | undefined =>\n headers.get('x-request-id') ??\n headers.get('request-id') ??\n headers.get('x-woku-request-id') ??\n undefined;\n\n// Parse the `Retry-After` header, which is either a number of seconds or an\n// HTTP date. Returns seconds to wait, or undefined when absent/unparseable.\nconst retryAfterFromHeaders = (headers: {\n get(name: string): string | null;\n}): number | undefined => {\n const raw = headers.get('retry-after');\n if (!raw) return undefined;\n const seconds = Number(raw);\n if (Number.isFinite(seconds)) return Math.max(0, seconds);\n const when = Date.parse(raw);\n if (!Number.isNaN(when)) return Math.max(0, (when - Date.now()) / 1000);\n return undefined;\n};\n\nconst toConnectionError = (error: unknown): WokuConnectionError => {\n if (error instanceof WokuConnectionError) return error;\n const message =\n error instanceof Error ? error.message : 'Network request failed';\n return new WokuConnectionError(message, { cause: error });\n};\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n AssignTrackerByNameParams,\n CreateTrackerParams,\n SearchEntitiesByTrackersParams,\n UpdateTrackerParams,\n} from '../types';\nimport type { EntitiesByTrackers, Tracker, WokuRecord } from '../models';\n\n/** A VoC entity type that can carry tracker values. */\nexport type TrackerEntityType = 'nps' | 'csat' | 'ces' | 'form' | 'flow';\n\nexport interface ListTrackersParams {\n includeInactive?: boolean;\n includeUsage?: boolean;\n page?: number;\n limit?: number;\n}\n\nexport interface SearchWokusByTrackerParams {\n name: string;\n value: string;\n page?: number;\n limit?: number;\n}\n\n/** Manage external tracker definitions (`/v1/external-trackers`). */\nexport class Trackers {\n constructor(private readonly client: WokuClient) {}\n\n /** List the company tracker definitions (paginated). */\n list(\n params?: ListTrackersParams,\n opts?: RequestOptions,\n ): Promise<Page<Tracker>> {\n return this.client.getPage<Tracker>('/v1/external-trackers', params, opts);\n }\n\n /** Create a tracker definition (idempotent). */\n create(body: CreateTrackerParams, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>('post', '/v1/external-trackers', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Get one tracker definition. */\n get(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'get',\n `/v1/external-trackers/${id}`,\n opts,\n );\n }\n\n /** Update a tracker definition. */\n update(\n id: string,\n body: UpdateTrackerParams,\n opts?: RequestOptions,\n ): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}`,\n { ...opts, body },\n );\n }\n\n /** Activate a tracker definition. */\n activate(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}/activate`,\n opts,\n );\n }\n\n /** Deactivate a tracker definition. */\n deactivate(id: string, opts?: RequestOptions): Promise<Tracker> {\n return this.client.request<Tracker>(\n 'patch',\n `/v1/external-trackers/${id}/deactivate`,\n opts,\n );\n }\n\n /** Search VoC entities whose trackers match every filter (AND). */\n searchEntities(\n body: SearchEntitiesByTrackersParams,\n opts?: RequestOptions,\n ): Promise<EntitiesByTrackers> {\n return this.client.request<EntitiesByTrackers>(\n 'post',\n '/v1/external-trackers/search-entities',\n { ...opts, body },\n );\n }\n\n /** List the tracker values assigned to a woku. */\n listWokuValues(\n wokuId: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/wokus/${wokuId}`,\n opts,\n );\n }\n\n /** Assign (upsert) a tracker value to a woku by tracker name. */\n assignToWoku(\n wokuId: string,\n body: AssignTrackerByNameParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/external-trackers/wokus/${wokuId}`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Remove a tracker value from a woku by tracker name. */\n removeFromWoku(\n wokuId: string,\n trackerName: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/external-trackers/wokus/${wokuId}/${encodeURIComponent(trackerName)}`,\n opts,\n );\n }\n\n /** Search wokus by an exact `(tracker name, value)` pair (paginated). */\n searchWokus(\n params: SearchWokusByTrackerParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n '/v1/external-trackers/search',\n params,\n opts,\n );\n }\n\n /** List the tracker values assigned to a VoC entity (nps/csat/ces/form/flow). */\n listEntityValues(\n entityType: TrackerEntityType,\n id: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/${entityType}/${id}`,\n opts,\n );\n }\n\n /** Assign (upsert) a tracker value to a VoC entity by tracker name. */\n assignToEntity(\n entityType: TrackerEntityType,\n id: string,\n body: AssignTrackerByNameParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/external-trackers/${entityType}/${id}`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Remove a tracker value from a VoC entity by tracker name. */\n removeFromEntity(\n entityType: TrackerEntityType,\n id: string,\n trackerName: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/external-trackers/${entityType}/${id}/${encodeURIComponent(trackerName)}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateCesToolParams,\n CreateCsatToolParams,\n CreateNpsToolParams,\n UpdateCesToolParams,\n UpdateCsatToolParams,\n UpdateNpsToolParams,\n} from '../types';\nimport type { CesTool, CsatTool, DeletedResult, NpsTool } from '../models';\n\n/** Manage NPS tool definitions (`/v1/nps-tools`). */\nexport class NpsTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<NpsTool>> {\n return this.client.getPage<NpsTool>('/v1/nps-tools', params, opts);\n }\n\n create(body: CreateNpsToolParams, opts?: RequestOptions): Promise<NpsTool> {\n return this.client.request<NpsTool>('post', '/v1/nps-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<NpsTool> {\n return this.client.request<NpsTool>('get', `/v1/nps-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateNpsToolParams,\n opts?: RequestOptions,\n ): Promise<NpsTool> {\n return this.client.request<NpsTool>('patch', `/v1/nps-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/nps-tools/${id}`,\n opts,\n );\n }\n}\n\n/** Manage CSAT tool definitions (`/v1/csat-tools`). */\nexport class CsatTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<CsatTool>> {\n return this.client.getPage<CsatTool>('/v1/csat-tools', params, opts);\n }\n\n create(body: CreateCsatToolParams, opts?: RequestOptions): Promise<CsatTool> {\n return this.client.request<CsatTool>('post', '/v1/csat-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<CsatTool> {\n return this.client.request<CsatTool>('get', `/v1/csat-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateCsatToolParams,\n opts?: RequestOptions,\n ): Promise<CsatTool> {\n return this.client.request<CsatTool>('patch', `/v1/csat-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/csat-tools/${id}`,\n opts,\n );\n }\n}\n\n/** Manage CES tool definitions (`/v1/ces-tools`). */\nexport class CesTools {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<CesTool>> {\n return this.client.getPage<CesTool>('/v1/ces-tools', params, opts);\n }\n\n create(body: CreateCesToolParams, opts?: RequestOptions): Promise<CesTool> {\n return this.client.request<CesTool>('post', '/v1/ces-tools', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<CesTool> {\n return this.client.request<CesTool>('get', `/v1/ces-tool/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateCesToolParams,\n opts?: RequestOptions,\n ): Promise<CesTool> {\n return this.client.request<CesTool>('patch', `/v1/ces-tools/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/ces-tools/${id}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n SendCesInvitationsParams,\n SendCsatInvitationsParams,\n SendNpsInvitationsParams,\n} from '../types';\nimport type { InvitationsResult, WokuRecord } from '../models';\n\nexport interface ListResponsesParams {\n page?: number;\n limit?: number;\n [key: string]: unknown;\n}\n\n/** Send the NPS survey and read its responses (`/v1/nps`). */\nexport class Nps {\n constructor(private readonly client: WokuClient) {}\n\n /** Send the NPS survey by email or WhatsApp (idempotent). */\n sendInvitations(\n body: SendNpsInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/nps/invitations',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n\n /** List NPS responses (paginated). */\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/nps', params, opts);\n }\n\n /** Get one NPS response. */\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/nps/${id}`, opts);\n }\n}\n\n/** Send the CSAT survey and read its responses (`/v1/csat`). */\nexport class Csat {\n constructor(private readonly client: WokuClient) {}\n\n sendInvitations(\n body: SendCsatInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/csat/invitations',\n { ...opts, body, idempotent: true },\n );\n }\n\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/csat', params, opts);\n }\n\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/csat/${id}`, opts);\n }\n}\n\n/** Send the CES survey and read its responses (`/v1/ces`). */\nexport class Ces {\n constructor(private readonly client: WokuClient) {}\n\n sendInvitations(\n body: SendCesInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n '/v1/ces/invitations',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n\n listResponses(\n params?: ListResponsesParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/ces', params, opts);\n }\n\n getResponse(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/ces/${id}`, opts);\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateWokuParams,\n MoveWokuParams,\n SendInvitationsParams,\n ShareWokuParams,\n UpdateWokuParams,\n UpdateWokuSettingsParams,\n} from '../types';\nimport type {\n DeletedResult,\n InvitationsResult,\n WokuRecord,\n WokuResource,\n} from '../models';\n\n/** Manage wokus (feedback collection tools) — `/v1/wokus`. */\nexport class Wokus {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuResource>> {\n return this.client.getPage<WokuResource>('/v1/wokus', params, opts);\n }\n\n create(body: CreateWokuParams, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('post', '/v1/wokus', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Get one woku with aggregated review stats. */\n get(id: string, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('get', `/v1/wokus/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}`, {\n ...opts,\n body,\n });\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/wokus/${id}`,\n opts,\n );\n }\n\n /** Apply the boolean settings idempotently (closed/reviewsDisabled/...). */\n updateSettings(\n id: string,\n body: UpdateWokuSettingsParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}/settings`, {\n ...opts,\n body,\n });\n }\n\n /** Move the woku into a folder, or to the root with `{ folderId: null }`. */\n move(id: string, body: MoveWokuParams, opts?: RequestOptions): Promise<WokuResource> {\n return this.client.request<WokuResource>('patch', `/v1/wokus/${id}/move`, {\n ...opts,\n body,\n });\n }\n\n /** List the reviews of a woku (paginated). */\n listReviews(\n id: string,\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n `/v1/wokus/${id}/reviews`,\n params,\n opts,\n );\n }\n\n /** Send a woku review invitation by email or WhatsApp (idempotent). */\n sendInvitations(\n id: string,\n body: SendInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n `/v1/wokus/${id}/invitations`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Share a woku review link by email. */\n share(\n id: string,\n body: ShareWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', `/v1/wokus/${id}/share`, {\n ...opts,\n body,\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { SendInvitationsParams } from '../types';\nimport type { InvitationsResult, WokuRecord } from '../models';\n\n/** Read forms and send form invitations (`/v1/forms`). */\nexport class Forms {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/forms', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/forms/${id}`, opts);\n }\n\n /** List the responses of a form (paginated). */\n listResponses(\n id: string,\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>(\n `/v1/forms/${id}/responses`,\n params,\n opts,\n );\n }\n\n /** Send a form by email or WhatsApp (idempotent). */\n sendInvitations(\n id: string,\n body: SendInvitationsParams,\n opts?: RequestOptions,\n ): Promise<InvitationsResult> {\n return this.client.request<InvitationsResult>(\n 'post',\n `/v1/forms/${id}/invitations`,\n { ...opts, body, idempotent: true },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Read data flows (`/v1/flows`). */\nexport class Flows {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/flows', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', `/v1/flows/${id}`, opts);\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateActionPlanGroupParams,\n CreateActionPlanTaskParams,\n ReorderActionPlanTasksParams,\n UpdateActionPlanGroupParams,\n UpdateActionPlanTaskParams,\n} from '../types';\nimport type { WokuRecord } from '../models';\n\nexport interface ListActionPlansParams {\n groupId?: string;\n status?: string;\n source?: string;\n priority?: string;\n search?: string;\n from?: string;\n to?: string;\n page?: number;\n limit?: number;\n}\n\n/** Read and drive action plans, incl. the managed kanban (`/v1/action-plans`). */\nexport class ActionPlans {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: ListActionPlansParams,\n opts?: RequestOptions,\n ): Promise<Page<WokuRecord>> {\n return this.client.getPage<WokuRecord>('/v1/action-plans', params, opts);\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plans/${id}`,\n opts,\n );\n }\n\n /** The plan timeline (events, oldest first). */\n events(id: string, opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/action-plans/${id}/events`,\n opts,\n );\n }\n\n /** The plan AI conversation (read-only). */\n getConversation(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plans/${id}/conversation`,\n opts,\n );\n }\n\n /**\n * Reply to the plan AI agent. Each reply is a paid AI turn (`confirm:true` is\n * sent automatically); the reply is composed asynchronously, so poll\n * {@link getConversation} until `busy` is false.\n */\n reply(id: string, text: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/conversation`,\n { ...opts, body: { text, confirm: true } },\n );\n }\n\n createTask(\n id: string,\n body: CreateActionPlanTaskParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/tasks`,\n { ...opts, body, idempotent: true },\n );\n }\n\n updateTask(\n id: string,\n taskId: string,\n body: UpdateActionPlanTaskParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plans/${id}/tasks/${taskId}`,\n { ...opts, body },\n );\n }\n\n reorderTasks(\n id: string,\n body: ReorderActionPlanTasksParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plans/${id}/tasks/reorder`,\n { ...opts, body },\n );\n }\n\n deleteTask(\n id: string,\n taskId: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/action-plans/${id}/tasks/${taskId}`,\n opts,\n );\n }\n\n approve(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'approve', opts);\n }\n\n reopen(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'reopen', opts);\n }\n\n cancel(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'cancel', opts);\n }\n\n complete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'complete', opts);\n }\n\n resume(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.status(id, 'resume', opts);\n }\n\n private status(\n id: string,\n action: string,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n `/v1/action-plans/${id}/${action}`,\n opts,\n );\n }\n}\n\n/** Manage action-plan groups (`/v1/action-plan-groups`). */\nexport class ActionPlanGroups {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: { search?: string },\n opts?: RequestOptions,\n ): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>('get', '/v1/action-plan-groups', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /** Get one group with its embedded stats. */\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/action-plan-groups/${id}`,\n opts,\n );\n }\n\n create(\n body: CreateActionPlanGroupParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', '/v1/action-plan-groups', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n update(\n id: string,\n body: UpdateActionPlanGroupParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plan-groups/${id}`,\n { ...opts, body },\n );\n }\n\n setEnabled(\n id: string,\n enabled: boolean,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/action-plan-groups/${id}/enabled`,\n { ...opts, body: { enabled } },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/action-plan-groups/${id}`,\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type {\n CreateTicketDestinationParams,\n UpdateTicketDestinationParams,\n UpdateTicketParams,\n} from '../types';\nimport type {\n Severity,\n TestConnectionResult,\n Ticket,\n TicketStats,\n WokuRecord,\n} from '../models';\n\nexport interface ListTicketsParams {\n tool?: 'woku' | 'nps' | 'form' | 'csat' | 'ces';\n severity?: Severity;\n search?: string;\n destinationId?: string;\n createdFrom?: string;\n createdTo?: string;\n page?: number;\n limit?: number;\n}\n\nexport interface TicketStatsParams {\n destinationId?: string;\n createdFrom?: string;\n createdTo?: string;\n}\n\n/** Read and curate support tickets (`/v1/tickets`). Tickets are AI-generated. */\nexport class Tickets {\n constructor(private readonly client: WokuClient) {}\n\n list(\n params?: ListTicketsParams,\n opts?: RequestOptions,\n ): Promise<Page<Ticket>> {\n return this.client.getPage<Ticket>('/v1/tickets', params, opts);\n }\n\n /** Aggregate counts by tool and by SAC destination. */\n stats(\n params?: TicketStatsParams,\n opts?: RequestOptions,\n ): Promise<TicketStats> {\n return this.client.request<TicketStats>('get', '/v1/tickets/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<Ticket> {\n return this.client.request<Ticket>('get', `/v1/tickets/${id}`, opts);\n }\n\n update(\n id: string,\n body: UpdateTicketParams,\n opts?: RequestOptions,\n ): Promise<Ticket> {\n return this.client.request<Ticket>('patch', `/v1/tickets/${id}`, {\n ...opts,\n body,\n });\n }\n}\n\n/** Manage SAC ticket destinations (`/v1/ticket-destinations`). */\nexport class TicketDestinations {\n constructor(private readonly client: WokuClient) {}\n\n list(opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n '/v1/ticket-destinations',\n opts,\n );\n }\n\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/ticket-destinations/${id}`,\n opts,\n );\n }\n\n create(\n body: CreateTicketDestinationParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('post', '/v1/ticket-destinations', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n update(\n id: string,\n body: UpdateTicketDestinationParams,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'patch',\n `/v1/ticket-destinations/${id}`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'delete',\n `/v1/ticket-destinations/${id}`,\n opts,\n );\n }\n\n /**\n * Send a real connectivity test to a saved destination. Requires\n * `confirm: true` (the test reaches the live destination).\n */\n test(id: string, opts?: RequestOptions): Promise<TestConnectionResult> {\n return this.client.request<TestConnectionResult>(\n 'post',\n `/v1/ticket-destinations/${id}/test`,\n { ...opts, body: { confirm: true } },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { Page } from '../core/pagination';\nimport type { RequestOptions } from '../core/options';\nimport type { Channel, Dispatch, DispatchStats } from '../models';\n\nexport interface ListDispatchesParams {\n channel?: Channel;\n responseType?: 'woku' | 'nps' | 'form' | 'client-form' | 'csat' | 'ces';\n targetId?: string;\n status?: 'invited' | 'partially_responded' | 'responded' | 'failed';\n createdFrom?: string;\n createdTo?: string;\n page?: number;\n limit?: number;\n}\n\nexport interface DispatchStatsParams {\n channel?: Channel;\n responseType?: string;\n targetId?: string;\n createdFrom?: string;\n createdTo?: string;\n}\n\n/** Delivery tracking over invitation dispatches (`/v1/dispatches`). */\nexport class Dispatches {\n constructor(private readonly client: WokuClient) {}\n\n /** List the invitation dispatches (delivery status, no recipient PII). */\n list(\n params?: ListDispatchesParams,\n opts?: RequestOptions,\n ): Promise<Page<Dispatch>> {\n return this.client.getPage<Dispatch>('/v1/dispatches', params, opts);\n }\n\n /** Response-rate metrics over the dispatches. */\n stats(\n params?: DispatchStatsParams,\n opts?: RequestOptions,\n ): Promise<DispatchStats> {\n return this.client.request<DispatchStats>('get', '/v1/dispatches/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Read NPS reports (`/v1/reports`). */\nexport class Reports {\n constructor(private readonly client: WokuClient) {}\n\n /** Company-level NPS report. */\n companyNps(\n params?: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/reports/company-nps', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /** NPS report for one tool. */\n npsTool(\n npsToolId: string,\n params?: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/reports/nps-tool/${npsToolId}`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { ApiKeyResult, WokuRecord } from '../models';\n\n/** The caller company and its API key (`/v1/companies/me`). */\nexport class Company {\n constructor(private readonly client: WokuClient) {}\n\n /** Get the caller company. */\n me(opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/companies/me', opts);\n }\n\n /** Rotate the secret key. The returned key replaces the current one. */\n rotateKey(opts?: RequestOptions): Promise<ApiKeyResult> {\n return this.client.request<ApiKeyResult>(\n 'post',\n '/v1/companies/me/rotate-key',\n opts,\n );\n }\n\n /** Revoke the secret key (all subsequent requests will be unauthorized). */\n revokeKey(opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'post',\n '/v1/companies/me/revoke-key',\n opts,\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { WokuRecord } from '../models';\n\n/** Check respondent quarantine status (`/v1/quarantines`). */\nexport class Quarantines {\n constructor(private readonly client: WokuClient) {}\n\n /** Check whether a contact is quarantined. */\n check(\n params: { email?: string; phone?: string | number },\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>('get', '/v1/quarantines/check', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n}\n","import { WokuClient, type WokuClientOptions } from './core/client';\nimport { Trackers } from './resources/trackers';\nimport { CesTools, CsatTools, NpsTools } from './resources/voc-tools';\nimport { Ces, Csat, Nps } from './resources/surveys';\nimport { Wokus } from './resources/wokus';\nimport { Forms } from './resources/forms';\nimport { Flows } from './resources/flows';\nimport { ActionPlanGroups, ActionPlans } from './resources/action-plans';\nimport { TicketDestinations, Tickets } from './resources/tickets';\nimport { Dispatches } from './resources/dispatches';\nimport { Reports } from './resources/reports';\nimport { Company } from './resources/company';\nimport { Quarantines } from './resources/quarantines';\n\n/**\n * Entry point to the Woku management API.\n *\n * ```ts\n * const woku = new Woku({ apiKey: process.env.WOKU_API_KEY });\n * const tracker = await woku.trackers.create({ name: 'Store', system: 'retail' });\n * for await (const ticket of await woku.tickets.list({ severity: 'high' })) {\n * console.log(ticket.title);\n * }\n * ```\n */\nexport class Woku {\n /** The underlying transport (advanced use). */\n readonly client: WokuClient;\n\n readonly trackers: Trackers;\n readonly npsTools: NpsTools;\n readonly csatTools: CsatTools;\n readonly cesTools: CesTools;\n readonly nps: Nps;\n readonly csat: Csat;\n readonly ces: Ces;\n readonly wokus: Wokus;\n readonly forms: Forms;\n readonly flows: Flows;\n readonly actionPlans: ActionPlans;\n readonly actionPlanGroups: ActionPlanGroups;\n readonly tickets: Tickets;\n readonly ticketDestinations: TicketDestinations;\n readonly dispatches: Dispatches;\n readonly reports: Reports;\n readonly company: Company;\n readonly quarantines: Quarantines;\n\n constructor(options?: WokuClientOptions | string) {\n const opts: WokuClientOptions =\n typeof options === 'string' ? { apiKey: options } : (options ?? {});\n this.client = new WokuClient(opts);\n\n this.trackers = new Trackers(this.client);\n this.npsTools = new NpsTools(this.client);\n this.csatTools = new CsatTools(this.client);\n this.cesTools = new CesTools(this.client);\n this.nps = new Nps(this.client);\n this.csat = new Csat(this.client);\n this.ces = new Ces(this.client);\n this.wokus = new Wokus(this.client);\n this.forms = new Forms(this.client);\n this.flows = new Flows(this.client);\n this.actionPlans = new ActionPlans(this.client);\n this.actionPlanGroups = new ActionPlanGroups(this.client);\n this.tickets = new Tickets(this.client);\n this.ticketDestinations = new TicketDestinations(this.client);\n this.dispatches = new Dispatches(this.client);\n this.reports = new Reports(this.client);\n this.company = new Company(this.client);\n this.quarantines = new Quarantines(this.client);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wokuapp/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Official server-side SDK for the Woku management API (trackers, VoC tools, action plans, tickets, delivery and capture over /v1).",
5
5
  "keywords": [
6
6
  "woku",