@wokuapp/sdk 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -4
- package/dist/index.cjs +4 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -44
- package/dist/index.d.ts +21 -44
- package/dist/index.js +4 -18
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resources/media.ts","../src/resources/follow-ups.ts","../package.json","../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/journeys.ts","../src/resources/quarantines.ts","../src/resources/folders.ts","../src/resources/tools.ts","../src/resources/journey-folders.ts","../src/woku.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { Schemas } from '../types';\n\nexport interface MediaUploadParams {\n file: Blob | Uint8Array;\n filename: string;\n contentType?: string;\n}\nexport type MediaUploadResult = Schemas['WokuMediaUploadResultDto'];\n\n/** Local image/MP4 uploads for Wokus and journey moments. */\nexport class Media {\n constructor(private readonly client: WokuClient) {}\n\n upload(\n input: MediaUploadParams,\n opts?: RequestOptions,\n ): Promise<MediaUploadResult> {\n const file = new Blob(\n [input.file instanceof Blob ? input.file : new Uint8Array(input.file)],\n {\n type:\n input.contentType ??\n (input.file instanceof Blob ? input.file.type : ''),\n },\n );\n const body = new FormData();\n body.append('file', file, input.filename);\n // This endpoint has no idempotency ledger; uncertain uploads cannot be replayed.\n return this.client.request('post', '/v1/woku-media', {\n ...opts,\n body,\n maxRetries: 0,\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { FollowUpConversation } from '../models';\n\n/** Read authorized follow-up conversations with a company management secret. */\nexport class FollowUps {\n constructor(private readonly client: WokuClient) {}\n\n async get(id: string, opts?: RequestOptions): Promise<FollowUpConversation> {\n const result = await this.client.request<{ data: FollowUpConversation }>(\n 'get',\n `/v1/follow-ups/${encodeURIComponent(id)}`,\n opts,\n );\n return result.data;\n }\n}\n","{\n \"name\": \"@wokuapp/sdk\",\n \"version\": \"0.5.0\",\n \"description\": \"Official server-side SDK for woku API v1, customer journeys, media, feedback and actions.\",\n \"keywords\": [\n \"woku\",\n \"sdk\",\n \"api\",\n \"customer-feedback\",\n \"nps\",\n \"csat\",\n \"ces\",\n \"voice-of-customer\",\n \"customer-journeys\"\n ],\n \"license\": \"MIT\",\n \"author\": \"Woku\",\n \"homepage\": \"https://github.com/wokuApp/sdks/tree/main/packages/sdk#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/wokuApp/sdks.git\",\n \"directory\": \"packages/sdk\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/wokuApp/sdks/issues\"\n },\n \"type\": \"module\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"engines\": {\n \"node\": \">=18\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": false\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"prepublishOnly\": \"pnpm build\",\n \"clean\": \"rm -rf dist\",\n \"test\": \"vitest\",\n \"test:run\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src\",\n \"generate\": \"node scripts/generate.mjs\",\n \"check:publint\": \"publint --strict\",\n \"check:exports\": \"attw --pack .\",\n \"check:generated\": \"node scripts/generate.mjs --check\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"^0.18.5\",\n \"msw\": \"^2.7.0\",\n \"openapi-typescript\": \"^7.5.0\",\n \"publint\": \"^0.3.2\"\n }\n}\n","/**\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[] | { 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 /** Retry the same logical operation with this key after inspecting its outcome. */\n idempotencyKey?: 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. The SDK retries only reads and explicitly\n * protected writes, up to `maxRetries`. Inspect uncertain writes before replay.\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(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 401:\n return new AuthenticationError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 403:\n return new PermissionDeniedError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 404:\n return new NotFoundError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 409:\n return new ConflictError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 413:\n return new PayloadTooLargeError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 422:\n return new UnprocessableEntityError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 429:\n return new RateLimitError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status >= 500:\n return new InternalServerError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n default:\n return new WokuAPIError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\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/** 413: the media or request exceeds the API limit. */\nexport class PayloadTooLargeError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'PayloadTooLargeError';\n }\n}\n\n/** 422: semantically invalid request. */\n\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 &&\n typeof body === 'object' &&\n typeof body.retryAfter === 'number' &&\n Number.isFinite(body.retryAfter) &&\n body.retryAfter >= 0\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 413: 'payload_too_large',\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 =\n body.message &&\n typeof body.message === 'object' &&\n !Array.isArray(body.message)\n ? body.message.message\n : body.message;\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 { WokuError } from './errors';\nimport 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).then((next) => {\n if (next.page <= this.page)\n throw new WokuError('Pagination did not advance.', {\n code: 'pagination_error',\n });\n return next;\n });\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 { version as SDK_VERSION } from '../../package.json';\nimport {\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 | FormData;\n signal?: AbortSignal;\n },\n) => Promise<{\n status: number;\n headers: { get(name: string): string | null };\n text(): Promise<string>;\n /** Needed only by binary downloads such as the folder PDF. */\n arrayBuffer?(): Promise<ArrayBuffer>;\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 * Return a successful response as raw bytes (`Uint8Array`) instead of parsed\n * JSON. Error responses are still parsed and mapped to API errors.\n */\n binary?: 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]);\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, signal?: AbortSignal): Promise<void> =>\n ms > 2_147_483_647\n ? sleep(2_147_483_647, signal).then(() => sleep(ms - 2_147_483_647, signal))\n : new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(\n new WokuConnectionError('Request aborted', { code: 'aborted' }),\n );\n return;\n }\n const cleanup = (): void => signal?.removeEventListener('abort', abort);\n const timer = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n const abort = (): void => {\n clearTimeout(timer);\n cleanup();\n reject(\n new WokuConnectionError('Request aborted', { code: 'aborted' }),\n );\n };\n signal?.addEventListener('abort', abort, { once: true });\n });\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\n ? undefined\n : args.body instanceof FormData\n ? args.body\n : 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 (method.toUpperCase() === 'POST' &&\n args.idempotent === true &&\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 args.binary,\n );\n if (status >= 200 && status < 300) {\n return body as T;\n }\n const apiError = WokuAPIError.from(\n status,\n body as WokuErrorBody | string | undefined,\n requestId,\n retryAfterSeconds,\n );\n apiError.idempotencyKey = idempotencyKey;\n if (retryable && attempt < maxRetries && RETRYABLE_STATUS.has(status)) {\n await sleep(this.backoff(attempt, apiError), args.signal);\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 connError.idempotencyKey = idempotencyKey;\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 try {\n await sleep(this.backoff(attempt), args.signal);\n } catch (waitingError) {\n if (waitingError instanceof WokuError)\n waitingError.idempotencyKey = idempotencyKey;\n throw waitingError;\n }\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>(\n path,\n { ...query, page },\n {\n ...opts,\n ...pageOpts,\n query: { ...opts?.query, ...pageOpts?.query, page },\n },\n ),\n opts,\n );\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n if (/^\\s*[a-z][a-z0-9+.-]*:/i.test(path) || path.startsWith('//')) {\n throw new WokuError(\n 'Use an API path relative to baseURL, not an external URL.',\n { code: 'config_error' },\n );\n }\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 defaults: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': `woku-sdk-js/${SDK_VERSION}`,\n };\n const merged = new Map<string, [string, string]>();\n for (const source of [defaults, this.defaultHeaders, args.headers ?? {}]) {\n for (const [name, value] of Object.entries(source))\n merged.set(name.toLowerCase(), [name, value]);\n }\n merged.set('authorization', ['Authorization', `Bearer ${this.apiKey}`]);\n const headers = Object.fromEntries(merged.values());\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 for (const name of Object.keys(headers))\n if (name.toLowerCase() === 'content-type') delete headers[name];\n if (!(args.body instanceof FormData))\n headers['Content-Type'] = 'application/json';\n }\n if (args.idempotencyKey !== undefined && method.toUpperCase() === 'POST') {\n for (const name of Object.keys(headers))\n if (name.toLowerCase() === 'x-woku-idempotency-key')\n delete headers[name];\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 | FormData | undefined,\n timeout: number,\n signal?: AbortSignal,\n binary?: boolean,\n ): Promise<{\n status: number;\n body: WokuErrorBody | string | Uint8Array | undefined;\n requestId?: string;\n retryAfterSeconds?: number;\n }> {\n if (signal?.aborted)\n throw new WokuConnectionError('Request aborted', { code: 'aborted' });\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 if (binary && response.status >= 200 && response.status < 300) {\n if (!response.arrayBuffer) {\n throw new WokuError(\n 'The fetch implementation cannot read binary responses.',\n { code: 'config_error' },\n );\n }\n return {\n status: response.status,\n body: new Uint8Array(await response.arrayBuffer()),\n requestId: requestIdFrom(response.headers),\n retryAfterSeconds: retryAfterFromHeaders(response.headers),\n };\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 (\n retryAfter !== undefined &&\n Number.isFinite(retryAfter) &&\n retryAfter >= 0\n )\n return retryAfter;\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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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(wokuId: string, opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/wokus/${encodeURIComponent(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/${encodeURIComponent(wokuId)}`,\n { ...opts, body, maxRetries: 0 },\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/${encodeURIComponent(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/${encodeURIComponent(entityType)}/${encodeURIComponent(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/${encodeURIComponent(entityType)}/${encodeURIComponent(id)}`,\n { ...opts, body, maxRetries: 0 },\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/${encodeURIComponent(entityType)}/${encodeURIComponent(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>(\n 'get',\n `/v1/nps-tool/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateNpsToolParams,\n opts?: RequestOptions,\n ): Promise<NpsTool> {\n return this.client.request<NpsTool>(\n 'patch',\n `/v1/nps-tools/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Move the tool into a folder, or to the root with `folderId: null`. */\n move(\n id: string,\n body: { folderId: string | null },\n opts?: RequestOptions,\n ): Promise<NpsTool> {\n return this.client.request<NpsTool>(\n 'patch',\n `/v1/nps-tools/${encodeURIComponent(id)}/move`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/nps-tools/${encodeURIComponent(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>(\n 'get',\n `/v1/csat-tool/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateCsatToolParams,\n opts?: RequestOptions,\n ): Promise<CsatTool> {\n return this.client.request<CsatTool>(\n 'patch',\n `/v1/csat-tools/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Move the tool into a folder, or to the root with `folderId: null`. */\n move(\n id: string,\n body: { folderId: string | null },\n opts?: RequestOptions,\n ): Promise<CsatTool> {\n return this.client.request<CsatTool>(\n 'patch',\n `/v1/csat-tools/${encodeURIComponent(id)}/move`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/csat-tools/${encodeURIComponent(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>(\n 'get',\n `/v1/ces-tool/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateCesToolParams,\n opts?: RequestOptions,\n ): Promise<CesTool> {\n return this.client.request<CesTool>(\n 'patch',\n `/v1/ces-tools/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Move the tool into a folder, or to the root with `folderId: null`. */\n move(\n id: string,\n body: { folderId: string | null },\n opts?: RequestOptions,\n ): Promise<CesTool> {\n return this.client.request<CesTool>(\n 'patch',\n `/v1/ces-tools/${encodeURIComponent(id)}/move`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/ces-tools/${encodeURIComponent(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>(\n 'get',\n `/v1/nps/${encodeURIComponent(id)}`,\n opts,\n );\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>(\n 'get',\n `/v1/csat/${encodeURIComponent(id)}`,\n opts,\n );\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>(\n 'get',\n `/v1/ces/${encodeURIComponent(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 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 maxRetries: 0,\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>(\n 'get',\n `/v1/wokus/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>(\n 'patch',\n `/v1/wokus/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/wokus/${encodeURIComponent(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>(\n 'patch',\n `/v1/wokus/${encodeURIComponent(id)}/settings`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Move the woku into a folder, or to the root with `{ folderId: null }`. */\n move(\n id: string,\n body: MoveWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>(\n 'patch',\n `/v1/wokus/${encodeURIComponent(id)}/move`,\n {\n ...opts,\n body,\n },\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/${encodeURIComponent(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/${encodeURIComponent(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>(\n 'post',\n `/v1/wokus/${encodeURIComponent(id)}/share`,\n {\n ...opts,\n body,\n },\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>(\n 'get',\n `/v1/forms/${encodeURIComponent(id)}`,\n opts,\n );\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/${encodeURIComponent(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/${encodeURIComponent(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 { CreateFlowParams, UpdateFlowParams } from '../types';\nimport type { DeletedResult, Flow, WokuRecord } from '../models';\n\n/**\n * Survey flows (`/v1/flows`): an ordered sequence of steps, each a woku or an\n * NPS, CSAT or CES tool, that a respondent answers one after the other.\n */\nexport class Flows {\n constructor(private readonly client: WokuClient) {}\n\n /** List the flows of the company, with their ordered `steps`. */\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<Flow>> {\n return this.client.getPage<Flow>('/v1/flows', params, opts);\n }\n\n /** The data of a flow: ordered steps with their tools, wokus and branding. */\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/flows/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n /**\n * Create a flow from 1 to 20 ordered steps (each tool once, all of your\n * company). Flows live outside folders.\n */\n create(body: CreateFlowParams, opts?: RequestOptions): Promise<Flow> {\n return this.client.request<Flow>('post', '/v1/flows', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Rename a flow or replace its full ordered list of steps. */\n update(\n id: string,\n body: UpdateFlowParams,\n opts?: RequestOptions,\n ): Promise<Flow> {\n return this.client.request<Flow>(\n 'patch',\n `/v1/flows/${encodeURIComponent(id)}`,\n { ...opts, body },\n );\n }\n\n /** Delete a flow. Its tools and their responses stay. */\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/flows/${encodeURIComponent(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 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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(id)}/tasks`,\n { ...opts, body, maxRetries: 0 },\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/${encodeURIComponent(id)}/tasks/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(id)}/tasks/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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 maxRetries: 0,\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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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>(\n 'get',\n `/v1/tickets/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateTicketParams,\n opts?: RequestOptions,\n ): Promise<Ticket> {\n return this.client.request<Ticket>(\n 'patch',\n `/v1/tickets/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\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/${encodeURIComponent(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 maxRetries: 0,\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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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 { WokuError } from '../core/errors';\nimport type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { Schemas } from '../types';\nimport type { operations } from '../_generated/openapi';\n\n/** Public journey shapes are generated from the server OpenAPI contract. */\nexport type JourneyStartMode = NonNullable<\n Schemas['V1JourneyResponseDto']['startMode']\n>;\nexport type JourneyRecipients = Schemas['JourneyRecipientsDto'];\nexport type JourneyWebhook = Schemas['V1JourneyWebhookDto'];\nexport type JourneySendWindow = Schemas['V1JourneySendWindowDto'];\nexport type JourneyMomentPreview = Schemas['V1JourneyPreviewResponseDto'];\nexport type JourneyMomentTrigger = Schemas['V1JourneyTriggerDto'];\nexport type JourneyMoment = Schemas['V1JourneyMomentDto'];\nexport type JourneyInput = Schemas['V1UpdateJourneyBodyDto'];\n/**\n * A journey as returned by `/v1/journeys`. `folderId` and `momentFolders`\n * (moment key to folder id) point at the folders that hold the journey's tools\n * once the company organized its journeys in folders; they are `null` and `{}`\n * before that. Reads only: they are not part of the journey definition.\n */\nexport type Journey = Schemas['V1JourneyResponseDto'] & {\n folderId?: string | null;\n momentFolders?: Record<string, string>;\n};\nexport type CreatedJourney = Schemas['V1CreatedJourneyResponseDto'];\nexport type JourneyEnrollment = Schemas['V1JourneyParticipationDto'];\nexport type JourneyEnrollmentPage = Schemas['V1JourneyParticipationPageDto'];\nexport type ListJourneyEnrollmentsParams = NonNullable<\n operations['V1JourneysController_listParticipations']['parameters']['query']\n>;\nexport type JourneyConnection = Schemas['V1JourneyConnectionDto'];\nexport type EnrollInput = Schemas['V1EnrollSubjectBodyDto'];\nexport type JourneyEventInput = Schemas['V1EmitJourneyEventBodyDto'];\nexport type JourneyEntryInfo = Schemas['JourneyEntryInfoDto'];\nexport type PrepareJourneyEntryInput = Schemas['PrepareJourneyEntryDto'];\nexport type PreparedJourneyEntry = Schemas['PreparedJourneyEntryDto'];\n\n/**\n * Customer journeys (`/v1/journeys`): define the moments where you listen,\n * create a tool per enrollment or share one within each moment, and set them off by hand or from your\n * own events.\n */\nexport class Journeys {\n constructor(private readonly client: WokuClient) {}\n\n /** Read customer entry metadata without starting or preparing an evaluation. */\n entryInfo(\n journeyId: string,\n opts?: RequestOptions,\n ): Promise<JourneyEntryInfo> {\n return this.client.request(\n 'get',\n `/v1/journey-entries/${encodeURIComponent(journeyId)}`,\n opts,\n );\n }\n\n /** Prepare a first tool. Only its saved response with dispatchToken confirms entry. */\n prepareEntry(\n journeyId: string,\n body: PrepareJourneyEntryInput,\n opts?: RequestOptions,\n ): Promise<PreparedJourneyEntry> {\n return this.client.request(\n 'post',\n `/v1/journey-entries/${encodeURIComponent(journeyId)}`,\n { ...opts, body, maxRetries: 0 },\n );\n }\n\n /** Every journey of your company. */\n list(opts?: RequestOptions): Promise<Journey[]> {\n return this.client.request<Journey[]>('get', '/v1/journeys', opts);\n }\n\n /** One journey with its moments. */\n get(journeyId: string, opts?: RequestOptions): Promise<Journey> {\n return this.client.request<Journey>(\n 'get',\n `/v1/journeys/${encodeURIComponent(journeyId)}`,\n opts,\n );\n }\n\n /**\n * Create a journey. The response carries `webhookSecret` once and only here:\n * it signs legacy woku_signature calls. V2 URL tokens and sender secrets\n * are configured separately per moment. Store it securely.\n */\n create(\n body: JourneyInput & { name: string },\n opts?: RequestOptions,\n ): Promise<CreatedJourney> {\n return this.client.request<CreatedJourney>('post', '/v1/journeys', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /**\n * Rename a journey, switch it on or off, or replace its moments. Replacing\n * the moments mints a new version; the enrollments already running keep\n * executing the version they started with.\n */\n update(\n journeyId: string,\n body: JourneyInput,\n opts?: RequestOptions,\n ): Promise<Journey> {\n return this.client.request<Journey>(\n 'patch',\n `/v1/journeys/${encodeURIComponent(journeyId)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Cursor page of exact customer cases; pass nextCursor to retrieve another page. */\n listEnrollments(\n journeyId: string,\n params?: ListJourneyEnrollmentsParams,\n opts?: RequestOptions,\n ): Promise<JourneyEnrollmentPage> {\n return this.client.request(\n 'get',\n `/v1/journeys/${encodeURIComponent(journeyId)}/enrollments`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n\n /** Iterate exact cases lazily, preserving options while advancing the server cursor. */\n async *iterEnrollments(\n journeyId: string,\n params?: ListJourneyEnrollmentsParams,\n opts?: RequestOptions,\n ): AsyncGenerator<JourneyEnrollment> {\n let query: Record<string, unknown> = { ...params, ...opts?.query };\n const seen = new Set<string>();\n for (;;) {\n const page = await this.listEnrollments(journeyId, undefined, {\n ...opts,\n query,\n });\n for (const item of page.items) yield item;\n const next = page.nextCursor;\n if (!next) return;\n if (seen.has(next) || next === query.cursor)\n throw new WokuError('Enrollment pagination did not advance.', {\n code: 'pagination_error',\n });\n seen.add(next);\n query = { ...query, cursor: next };\n }\n }\n\n /** History and next step for one exact participation. */\n getEnrollment(\n journeyId: string,\n enrollmentId: string,\n opts?: RequestOptions,\n ): Promise<JourneyEnrollment> {\n return this.client.request(\n 'get',\n `/v1/journeys/${encodeURIComponent(journeyId)}/enrollments/${encodeURIComponent(enrollmentId)}`,\n opts,\n );\n }\n\n /** Cancel future work for this case. Accepted provider sends cannot be recalled. */\n stopEnrollment(\n journeyId: string,\n enrollmentId: string,\n body: { reason?: string } = {},\n opts?: RequestOptions,\n ): Promise<JourneyEnrollment> {\n return this.client.request(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/enrollments/${encodeURIComponent(enrollmentId)}/stop`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Credential readiness is not evidence that an actual webhook has arrived. */\n connections(\n journeyId: string,\n opts?: RequestOptions,\n ): Promise<JourneyConnection[]> {\n return this.client.request(\n 'get',\n `/v1/journeys/${encodeURIComponent(journeyId)}/connections`,\n opts,\n );\n }\n\n /** Replaces this moment's URL credential. Store the returned URL in the sender. */\n async mintMomentUrl(\n journeyId: string,\n stageKey: string,\n opts?: RequestOptions,\n ): Promise<{ token: string; url: string }> {\n const result = await this.client.request<{ token: string; url: string }>(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/moments/${encodeURIComponent(stageKey)}/url-token`,\n { ...opts, body: {}, idempotent: true },\n );\n return {\n ...result,\n url: new URL(result.url, this.client.baseURL).toString(),\n };\n }\n\n /** Store the external sender's signing secret encrypted; it is never returned. */\n setSenderSecret(\n journeyId: string,\n stageKey: string,\n senderSecret: string,\n opts?: RequestOptions,\n ): Promise<void> {\n return this.client.request(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/moments/${encodeURIComponent(stageKey)}/sender-secret`,\n { ...opts, body: { senderSecret }, maxRetries: 0 },\n );\n }\n\n /** Test saved payload mapping without creating a participation or sending a tool. */\n previewMoment(\n journeyId: string,\n stageKey: string,\n payload: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<JourneyMomentPreview> {\n return this.client.request(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/moments/${encodeURIComponent(stageKey)}/preview`,\n { ...opts, body: { payload }, maxRetries: 0 },\n );\n }\n\n /** Delete a journey. What it already started keeps its own history. */\n delete(journeyId: string, opts?: RequestOptions): Promise<void> {\n return this.client.request<void>(\n 'delete',\n `/v1/journeys/${encodeURIComponent(journeyId)}`,\n opts,\n );\n }\n\n /**\n * Mint a new signing secret. The previous one stays valid until the next\n * rotation, so senders can be updated without a gap.\n */\n rotateWebhookSecret(\n journeyId: string,\n opts?: RequestOptions,\n ): Promise<Schemas['V1JourneySecretResponseDto']> {\n return this.client.request<Schemas['V1JourneySecretResponseDto']>(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/webhook-secret`,\n { ...opts, body: {}, maxRetries: 0 },\n );\n }\n\n /**\n * Start the journey for one subject. Enrolling the same person for a later\n * cycle reuses the subject key after the previous cycle completes or stops.\n */\n enroll(\n journeyId: string,\n body: EnrollInput,\n opts?: RequestOptions,\n ): Promise<Schemas['V1JourneyEnrollmentResponseDto']> {\n return this.client.request<Schemas['V1JourneyEnrollmentResponseDto']>(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/enrollments`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /**\n * Emit one of your own events. Every journey whose moments listen for that\n * name reacts.\n */\n emitEvent(\n body: JourneyEventInput,\n opts?: RequestOptions,\n ): Promise<Schemas['V1JourneyEventResponseDto']> {\n return this.client.request<Schemas['V1JourneyEventResponseDto']>(\n 'post',\n '/v1/journey-events',\n {\n ...opts,\n body,\n idempotent: true,\n },\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 type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { CreateFolderParams, UpdateFolderParams } from '../types';\nimport type {\n DeletedResult,\n Folder,\n FolderCsv,\n FolderToolMetrics,\n WokuRecord,\n} from '../models';\n\n/**\n * Folders that organize wokus and NPS, CSAT and CES tools (`/v1/folders`).\n * To list what a folder contains use `woku.tools.list({ folderId })`.\n */\nexport class Folders {\n constructor(private readonly client: WokuClient) {}\n\n /** Every folder of the company, or the direct subfolders of `parentFolderId`. */\n list(\n params?: { parentFolderId?: string; q?: string },\n opts?: RequestOptions,\n ): Promise<Folder[]> {\n return this.client.request<Folder[]>('get', '/v1/folders', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<Folder> {\n return this.client.request<Folder>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n create(body: CreateFolderParams, opts?: RequestOptions): Promise<Folder> {\n return this.client.request<Folder>('post', '/v1/folders', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /**\n * Rename or recolor a folder (`color: null` clears the color) and/or replace\n * its WhatsApp alert recipients (`whatsappAlertRecipients`, `[]` clears them).\n */\n update(\n id: string,\n body: UpdateFolderParams,\n opts?: RequestOptions,\n ): Promise<Folder> {\n return this.client.request<Folder>(\n 'patch',\n `/v1/folders/${encodeURIComponent(id)}`,\n { ...opts, body },\n );\n }\n\n /**\n * Move a folder under another folder, or to the root with\n * `parentFolderId: null`. A folder cannot move into its own subtree.\n */\n move(\n id: string,\n body: { parentFolderId: string | null },\n opts?: RequestOptions,\n ): Promise<Folder> {\n return this.client.request<Folder>(\n 'patch',\n `/v1/folders/${encodeURIComponent(id)}/move`,\n { ...opts, body },\n );\n }\n\n /**\n * Delete a folder. Nothing inside is deleted: subfolders, wokus and tools\n * move up to the parent folder (or the root).\n */\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/folders/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n /**\n * AI report over every woku, NPS, CSAT and CES tool of the folder and its\n * subfolders. Scales differ per type, so there is no rating distribution.\n */\n report(\n id: string,\n params?: { regenerate?: boolean; lang?: 'es' | 'en' },\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}/report`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n\n /**\n * Per-tool figures of the woku, NPS, CSAT and CES tools of the folder and its\n * subfolders for a period against the one before it, with the daily sums and\n * the histogram of scores. `days` is 7, 30 (default) or 90, or 0 for the whole\n * history (every `previous` window is then empty). The period is the last\n * `days` calendar days in UTC, today included. Scales are never mixed across\n * types.\n */\n metrics(\n id: string,\n params?: { days?: 0 | 7 | 30 | 90 },\n opts?: RequestOptions,\n ): Promise<FolderToolMetrics> {\n return this.client.request<FolderToolMetrics>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}/metrics`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n\n /** CSV text with one row per response of every tool of the folder subtree. */\n csv(id: string, opts?: RequestOptions): Promise<FolderCsv> {\n return this.client.request<FolderCsv>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}/csv`,\n opts,\n );\n }\n\n /**\n * PDF of the folder report (every woku, NPS, CSAT and CES tool of the folder\n * and its subfolders) with a breakdown per type on each native scale.\n * Returns the file bytes: write them to disk or send them as is.\n */\n pdf(\n id: string,\n params?: { lang?: 'es' | 'en' },\n opts?: RequestOptions,\n ): Promise<Uint8Array> {\n return this.client.request<Uint8Array>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}/pdf`,\n {\n ...opts,\n headers: { Accept: 'application/pdf', ...opts?.headers },\n query: { ...params, ...opts?.query },\n binary: true,\n },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { MoveToolItemsParams } from '../types';\nimport type {\n Folder,\n MoveResult,\n ToolItem,\n ToolItemsPageResponse,\n ToolsStats,\n ToolType,\n} from '../models';\n\n/** Filters of `tools.list`. */\nexport interface ListToolsParams {\n /** Folder whose direct content is listed. Omit for the root. */\n folderId?: string;\n /** `level` (default) lists one folder level; `company` lists every tool flat. */\n scope?: 'level' | 'company';\n /** Only these tool types. */\n types?: ToolType[];\n /** Case and accent insensitive search (company-wide, also matches folders). */\n q?: string;\n sort?: 'name' | '-name' | 'created' | '-created';\n /** Page size, 1-100 (default 50). */\n limit?: number;\n /** Folders per page, 1-100 (omit to receive every folder of the level). */\n foldersLimit?: number;\n createdFrom?: string;\n createdTo?: string;\n /**\n * Tracker chips as `name:value` (for example `TRR:00482`, up to 10); a tool\n * matches when it has every one: the tracker name is matched exactly, the value\n * partially and ignoring case (`482` also matches `00482`). Like a search it is\n * company-wide and lists no folders. A chip without name or value is a 400.\n */\n trackers?: string[];\n}\n\n/**\n * One page of `tools.list`. Iterate every tool across all pages with\n * `for await (const tool of page)`, or page by page with `page.iterPages()`.\n */\nexport class ToolsPage implements AsyncIterable<ToolItem> {\n readonly folders: Folder[];\n readonly tools: ToolItem[];\n readonly nextCursor: string | null;\n /** Cursor of the next page of folders (only set when `foldersLimit` was used). */\n readonly foldersNextCursor: string | null;\n readonly facets: ToolItemsPageResponse['facets'];\n\n constructor(\n response: ToolItemsPageResponse,\n private readonly fetchNext: (cursor: string) => Promise<ToolsPage>,\n private readonly fetchMoreFolders: (\n cursor: string,\n ) => Promise<ToolsPage> = () =>\n Promise.reject(new RangeError('No more folders')),\n ) {\n this.folders = response.folders;\n this.tools = response.tools;\n this.nextCursor = response.nextCursor;\n this.foldersNextCursor = response.foldersNextCursor ?? null;\n this.facets = response.facets;\n }\n\n hasMoreFolders(): boolean {\n return this.foldersNextCursor !== null;\n }\n\n /** The next page of folders (\"see more\"): a page with those folders and no tools. */\n getMoreFolders(): Promise<ToolsPage> {\n if (this.foldersNextCursor === null)\n throw new RangeError('No more folders');\n return this.fetchMoreFolders(this.foldersNextCursor);\n }\n\n hasNextPage(): boolean {\n return this.nextCursor !== null;\n }\n\n getNextPage(): Promise<ToolsPage> {\n if (this.nextCursor === null) throw new RangeError('No next page');\n return this.fetchNext(this.nextCursor);\n }\n\n async *iterPages(): AsyncGenerator<ToolsPage> {\n yield this;\n if (this.hasNextPage()) yield* (await this.getNextPage()).iterPages();\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<ToolItem> {\n for await (const page of this.iterPages()) {\n for (const tool of page.tools) yield tool;\n }\n }\n}\n\n/**\n * The unified view over wokus and NPS, CSAT and CES tools (`/v1/tools`):\n * search and filters, headline figures per type and batch moves.\n */\nexport class Tools {\n constructor(private readonly client: WokuClient) {}\n\n /**\n * List one folder level (or search the company). Folders and tools of every\n * type come together; the first page also carries the folders and facets.\n */\n async list(\n params?: ListToolsParams,\n opts?: RequestOptions,\n ): Promise<ToolsPage> {\n const fetchPage = async (\n cursor?: string,\n foldersCursor?: string,\n ): Promise<ToolsPage> => {\n const response = await this.client.request<ToolItemsPageResponse>(\n 'get',\n '/v1/tools',\n {\n ...opts,\n query: {\n ...params,\n types: params?.types?.join(','),\n ...(cursor ? { cursor } : {}),\n ...(foldersCursor ? { foldersCursor } : {}),\n ...opts?.query,\n },\n },\n );\n return new ToolsPage(response, fetchPage, (next) =>\n fetchPage(undefined, next),\n );\n };\n return fetchPage();\n }\n\n /**\n * Headline figures per type (woku stars, NPS score, CSAT satisfied %, CES\n * mean) for the company or one folder and its subfolders, in a period.\n * A type that fails reports `{ error: true }`; the others stay valid.\n */\n stats(\n params?: { folderId?: string; from?: string; to?: string },\n opts?: RequestOptions,\n ): Promise<ToolsStats> {\n return this.client.request<ToolsStats>('get', '/v1/tools/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /**\n * Move up to 200 items of mixed types (`woku`, `nps`, `csat`, `ces`,\n * `folder`) into a folder, or to the root with `folderId: null`. Idempotent;\n * nothing moves if one item or the destination is not found.\n */\n move(body: MoveToolItemsParams, opts?: RequestOptions): Promise<MoveResult> {\n return this.client.request<MoveResult>('post', '/v1/tools/move', {\n ...opts,\n body,\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { JourneyFoldersStatus } from '../models';\n\n/**\n * Keep customer journeys in folders (`/v1/journey-folders`): `Viajes > journey >\n * moment`. Each journey and moment exposes its folder in `journeys.get`\n * (`folderId`, `momentFolders`).\n */\nexport class JourneyFolders {\n constructor(private readonly client: WokuClient) {}\n\n /** Whether the organization is on, running, and how much is still without a folder. */\n status(opts?: RequestOptions): Promise<JourneyFoldersStatus> {\n return this.client.request<JourneyFoldersStatus>(\n 'get',\n '/v1/journey-folders',\n opts,\n );\n }\n\n /**\n * Switch the organization on and run the one-off pass in the background: tools\n * of existing journeys without a folder move into their moment folder, and\n * tools journeys create from now on are placed there. Tools that already have\n * a folder are never touched. Rejects with a conflict (409) while a pass is\n * already running; poll {@link status} for progress.\n */\n organize(opts?: RequestOptions): Promise<JourneyFoldersStatus> {\n return this.client.request<JourneyFoldersStatus>(\n 'post',\n '/v1/journey-folders/organize',\n opts,\n );\n }\n}\n","import { Media } from './resources/media';\nimport { FollowUps } from './resources/follow-ups';\nimport { 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 { Journeys } from './resources/journeys';\nimport { Quarantines } from './resources/quarantines';\nimport { Folders } from './resources/folders';\nimport { Tools } from './resources/tools';\nimport { JourneyFolders } from './resources/journey-folders';\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 media: Media;\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 followUps: FollowUps;\n readonly ticketDestinations: TicketDestinations;\n readonly dispatches: Dispatches;\n readonly reports: Reports;\n readonly company: Company;\n /** Customer journeys: moments, their tools and how each one starts. */\n readonly journeys: Journeys;\n readonly quarantines: Quarantines;\n /** Folders that organize wokus and NPS, CSAT and CES tools. */\n readonly folders: Folders;\n /** Unified search, headline figures and batch moves across every tool type. */\n readonly tools: Tools;\n /** Keep journeys and their moments in folders (`Viajes > journey > moment`). */\n readonly journeyFolders: JourneyFolders;\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.media = new Media(this.client);\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.followUps = new FollowUps(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.journeys = new Journeys(this.client);\n this.folders = new Folders(this.client);\n this.tools = new Tools(this.client);\n this.journeyFolders = new JourneyFolders(this.client);\n this.quarantines = new Quarantines(this.client);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/resources/media.ts","../src/resources/follow-ups.ts","../package.json","../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/journeys.ts","../src/resources/folders.ts","../src/resources/tools.ts","../src/resources/journey-folders.ts","../src/woku.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { Schemas } from '../types';\n\nexport interface MediaUploadParams {\n file: Blob | Uint8Array;\n filename: string;\n contentType?: string;\n}\nexport type MediaUploadResult = Schemas['WokuMediaUploadResultDto'];\n\n/** Local image/MP4 uploads for Wokus and journey moments. */\nexport class Media {\n constructor(private readonly client: WokuClient) {}\n\n upload(\n input: MediaUploadParams,\n opts?: RequestOptions,\n ): Promise<MediaUploadResult> {\n const file = new Blob(\n [input.file instanceof Blob ? input.file : new Uint8Array(input.file)],\n {\n type:\n input.contentType ??\n (input.file instanceof Blob ? input.file.type : ''),\n },\n );\n const body = new FormData();\n body.append('file', file, input.filename);\n // This endpoint has no idempotency ledger; uncertain uploads cannot be replayed.\n return this.client.request('post', '/v1/woku-media', {\n ...opts,\n body,\n maxRetries: 0,\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { FollowUpConversation } from '../models';\n\n/** Read authorized follow-up conversations with a company management secret. */\nexport class FollowUps {\n constructor(private readonly client: WokuClient) {}\n\n async get(id: string, opts?: RequestOptions): Promise<FollowUpConversation> {\n const result = await this.client.request<{ data: FollowUpConversation }>(\n 'get',\n `/v1/follow-ups/${encodeURIComponent(id)}`,\n opts,\n );\n return result.data;\n }\n}\n","{\n \"name\": \"@wokuapp/sdk\",\n \"version\": \"0.7.0\",\n \"description\": \"Official server-side SDK for woku API v1, customer journeys, media, feedback and actions.\",\n \"keywords\": [\n \"woku\",\n \"sdk\",\n \"api\",\n \"customer-feedback\",\n \"nps\",\n \"csat\",\n \"ces\",\n \"voice-of-customer\",\n \"customer-journeys\"\n ],\n \"license\": \"MIT\",\n \"author\": \"Woku\",\n \"homepage\": \"https://github.com/wokuApp/sdks/tree/main/packages/sdk#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/wokuApp/sdks.git\",\n \"directory\": \"packages/sdk\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/wokuApp/sdks/issues\"\n },\n \"type\": \"module\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\"\n ],\n \"engines\": {\n \"node\": \">=18\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": false\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"prepublishOnly\": \"pnpm build\",\n \"clean\": \"rm -rf dist\",\n \"test\": \"vitest\",\n \"test:run\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src\",\n \"generate\": \"node scripts/generate.mjs\",\n \"check:publint\": \"publint --strict\",\n \"check:exports\": \"attw --pack .\",\n \"check:generated\": \"node scripts/generate.mjs --check\"\n },\n \"devDependencies\": {\n \"@arethetypeswrong/cli\": \"^0.18.5\",\n \"msw\": \"^2.7.0\",\n \"openapi-typescript\": \"^7.5.0\",\n \"publint\": \"^0.3.2\"\n }\n}\n","/**\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[] | { 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 /** Retry the same logical operation with this key after inspecting its outcome. */\n idempotencyKey?: 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. The SDK retries only reads and explicitly\n * protected writes, up to `maxRetries`. Inspect uncertain writes before replay.\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(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 401:\n return new AuthenticationError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 403:\n return new PermissionDeniedError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 404:\n return new NotFoundError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 409:\n return new ConflictError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 413:\n return new PayloadTooLargeError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 422:\n return new UnprocessableEntityError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status === 429:\n return new RateLimitError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n case status >= 500:\n return new InternalServerError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\n default:\n return new WokuAPIError(\n status,\n body,\n message,\n requestId,\n undefined,\n ra,\n );\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/** 413: the media or request exceeds the API limit. */\nexport class PayloadTooLargeError extends WokuAPIError {\n constructor(...args: ConstructorParameters<typeof WokuAPIError>) {\n super(...args);\n this.name = 'PayloadTooLargeError';\n }\n}\n\n/** 422: semantically invalid request. */\n\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 &&\n typeof body === 'object' &&\n typeof body.retryAfter === 'number' &&\n Number.isFinite(body.retryAfter) &&\n body.retryAfter >= 0\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 413: 'payload_too_large',\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 =\n body.message &&\n typeof body.message === 'object' &&\n !Array.isArray(body.message)\n ? body.message.message\n : body.message;\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 { WokuError } from './errors';\nimport 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).then((next) => {\n if (next.page <= this.page)\n throw new WokuError('Pagination did not advance.', {\n code: 'pagination_error',\n });\n return next;\n });\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 { version as SDK_VERSION } from '../../package.json';\nimport {\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 | FormData;\n signal?: AbortSignal;\n },\n) => Promise<{\n status: number;\n headers: { get(name: string): string | null };\n text(): Promise<string>;\n /** Needed only by binary downloads such as the folder PDF. */\n arrayBuffer?(): Promise<ArrayBuffer>;\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 * Return a successful response as raw bytes (`Uint8Array`) instead of parsed\n * JSON. Error responses are still parsed and mapped to API errors.\n */\n binary?: 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]);\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, signal?: AbortSignal): Promise<void> =>\n ms > 2_147_483_647\n ? sleep(2_147_483_647, signal).then(() => sleep(ms - 2_147_483_647, signal))\n : new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(\n new WokuConnectionError('Request aborted', { code: 'aborted' }),\n );\n return;\n }\n const cleanup = (): void => signal?.removeEventListener('abort', abort);\n const timer = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n const abort = (): void => {\n clearTimeout(timer);\n cleanup();\n reject(\n new WokuConnectionError('Request aborted', { code: 'aborted' }),\n );\n };\n signal?.addEventListener('abort', abort, { once: true });\n });\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\n ? undefined\n : args.body instanceof FormData\n ? args.body\n : 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 (method.toUpperCase() === 'POST' &&\n args.idempotent === true &&\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 args.binary,\n );\n if (status >= 200 && status < 300) {\n return body as T;\n }\n const apiError = WokuAPIError.from(\n status,\n body as WokuErrorBody | string | undefined,\n requestId,\n retryAfterSeconds,\n );\n apiError.idempotencyKey = idempotencyKey;\n if (retryable && attempt < maxRetries && RETRYABLE_STATUS.has(status)) {\n await sleep(this.backoff(attempt, apiError), args.signal);\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 connError.idempotencyKey = idempotencyKey;\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 try {\n await sleep(this.backoff(attempt), args.signal);\n } catch (waitingError) {\n if (waitingError instanceof WokuError)\n waitingError.idempotencyKey = idempotencyKey;\n throw waitingError;\n }\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>(\n path,\n { ...query, page },\n {\n ...opts,\n ...pageOpts,\n query: { ...opts?.query, ...pageOpts?.query, page },\n },\n ),\n opts,\n );\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n if (/^\\s*[a-z][a-z0-9+.-]*:/i.test(path) || path.startsWith('//')) {\n throw new WokuError(\n 'Use an API path relative to baseURL, not an external URL.',\n { code: 'config_error' },\n );\n }\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 defaults: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': `woku-sdk-js/${SDK_VERSION}`,\n };\n const merged = new Map<string, [string, string]>();\n for (const source of [defaults, this.defaultHeaders, args.headers ?? {}]) {\n for (const [name, value] of Object.entries(source))\n merged.set(name.toLowerCase(), [name, value]);\n }\n merged.set('authorization', ['Authorization', `Bearer ${this.apiKey}`]);\n const headers = Object.fromEntries(merged.values());\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 for (const name of Object.keys(headers))\n if (name.toLowerCase() === 'content-type') delete headers[name];\n if (!(args.body instanceof FormData))\n headers['Content-Type'] = 'application/json';\n }\n if (args.idempotencyKey !== undefined && method.toUpperCase() === 'POST') {\n for (const name of Object.keys(headers))\n if (name.toLowerCase() === 'x-woku-idempotency-key')\n delete headers[name];\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 | FormData | undefined,\n timeout: number,\n signal?: AbortSignal,\n binary?: boolean,\n ): Promise<{\n status: number;\n body: WokuErrorBody | string | Uint8Array | undefined;\n requestId?: string;\n retryAfterSeconds?: number;\n }> {\n if (signal?.aborted)\n throw new WokuConnectionError('Request aborted', { code: 'aborted' });\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 if (binary && response.status >= 200 && response.status < 300) {\n if (!response.arrayBuffer) {\n throw new WokuError(\n 'The fetch implementation cannot read binary responses.',\n { code: 'config_error' },\n );\n }\n return {\n status: response.status,\n body: new Uint8Array(await response.arrayBuffer()),\n requestId: requestIdFrom(response.headers),\n retryAfterSeconds: retryAfterFromHeaders(response.headers),\n };\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 (\n retryAfter !== undefined &&\n Number.isFinite(retryAfter) &&\n retryAfter >= 0\n )\n return retryAfter;\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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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(wokuId: string, opts?: RequestOptions): Promise<WokuRecord[]> {\n return this.client.request<WokuRecord[]>(\n 'get',\n `/v1/external-trackers/wokus/${encodeURIComponent(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/${encodeURIComponent(wokuId)}`,\n { ...opts, body, maxRetries: 0 },\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/${encodeURIComponent(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/${encodeURIComponent(entityType)}/${encodeURIComponent(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/${encodeURIComponent(entityType)}/${encodeURIComponent(id)}`,\n { ...opts, body, maxRetries: 0 },\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/${encodeURIComponent(entityType)}/${encodeURIComponent(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>(\n 'get',\n `/v1/nps-tool/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateNpsToolParams,\n opts?: RequestOptions,\n ): Promise<NpsTool> {\n return this.client.request<NpsTool>(\n 'patch',\n `/v1/nps-tools/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Move the tool into a folder, or to the root with `folderId: null`. */\n move(\n id: string,\n body: { folderId: string | null },\n opts?: RequestOptions,\n ): Promise<NpsTool> {\n return this.client.request<NpsTool>(\n 'patch',\n `/v1/nps-tools/${encodeURIComponent(id)}/move`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/nps-tools/${encodeURIComponent(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>(\n 'get',\n `/v1/csat-tool/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateCsatToolParams,\n opts?: RequestOptions,\n ): Promise<CsatTool> {\n return this.client.request<CsatTool>(\n 'patch',\n `/v1/csat-tools/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Move the tool into a folder, or to the root with `folderId: null`. */\n move(\n id: string,\n body: { folderId: string | null },\n opts?: RequestOptions,\n ): Promise<CsatTool> {\n return this.client.request<CsatTool>(\n 'patch',\n `/v1/csat-tools/${encodeURIComponent(id)}/move`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/csat-tools/${encodeURIComponent(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>(\n 'get',\n `/v1/ces-tool/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateCesToolParams,\n opts?: RequestOptions,\n ): Promise<CesTool> {\n return this.client.request<CesTool>(\n 'patch',\n `/v1/ces-tools/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Move the tool into a folder, or to the root with `folderId: null`. */\n move(\n id: string,\n body: { folderId: string | null },\n opts?: RequestOptions,\n ): Promise<CesTool> {\n return this.client.request<CesTool>(\n 'patch',\n `/v1/ces-tools/${encodeURIComponent(id)}/move`,\n { ...opts, body },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/ces-tools/${encodeURIComponent(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>(\n 'get',\n `/v1/nps/${encodeURIComponent(id)}`,\n opts,\n );\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>(\n 'get',\n `/v1/csat/${encodeURIComponent(id)}`,\n opts,\n );\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>(\n 'get',\n `/v1/ces/${encodeURIComponent(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 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 maxRetries: 0,\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>(\n 'get',\n `/v1/wokus/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>(\n 'patch',\n `/v1/wokus/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/wokus/${encodeURIComponent(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>(\n 'patch',\n `/v1/wokus/${encodeURIComponent(id)}/settings`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Move the woku into a folder, or to the root with `{ folderId: null }`. */\n move(\n id: string,\n body: MoveWokuParams,\n opts?: RequestOptions,\n ): Promise<WokuResource> {\n return this.client.request<WokuResource>(\n 'patch',\n `/v1/wokus/${encodeURIComponent(id)}/move`,\n {\n ...opts,\n body,\n },\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/${encodeURIComponent(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/${encodeURIComponent(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>(\n 'post',\n `/v1/wokus/${encodeURIComponent(id)}/share`,\n {\n ...opts,\n body,\n },\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>(\n 'get',\n `/v1/forms/${encodeURIComponent(id)}`,\n opts,\n );\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/${encodeURIComponent(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/${encodeURIComponent(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 { CreateFlowParams, UpdateFlowParams } from '../types';\nimport type { DeletedResult, Flow, WokuRecord } from '../models';\n\n/**\n * Survey flows (`/v1/flows`): an ordered sequence of steps, each a woku or an\n * NPS, CSAT or CES tool, that a respondent answers one after the other.\n */\nexport class Flows {\n constructor(private readonly client: WokuClient) {}\n\n /** List the flows of the company, with their ordered `steps`. */\n list(\n params?: { page?: number; limit?: number },\n opts?: RequestOptions,\n ): Promise<Page<Flow>> {\n return this.client.getPage<Flow>('/v1/flows', params, opts);\n }\n\n /** The data of a flow: ordered steps with their tools, wokus and branding. */\n get(id: string, opts?: RequestOptions): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/flows/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n /**\n * Create a flow from 1 to 20 ordered steps (each tool once, all of your\n * company). Flows live outside folders.\n */\n create(body: CreateFlowParams, opts?: RequestOptions): Promise<Flow> {\n return this.client.request<Flow>('post', '/v1/flows', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /** Rename a flow or replace its full ordered list of steps. */\n update(\n id: string,\n body: UpdateFlowParams,\n opts?: RequestOptions,\n ): Promise<Flow> {\n return this.client.request<Flow>(\n 'patch',\n `/v1/flows/${encodeURIComponent(id)}`,\n { ...opts, body },\n );\n }\n\n /** Delete a flow. Its tools and their responses stay. */\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/flows/${encodeURIComponent(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 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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(id)}/tasks`,\n { ...opts, body, maxRetries: 0 },\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/${encodeURIComponent(id)}/tasks/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(id)}/tasks/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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 maxRetries: 0,\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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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>(\n 'get',\n `/v1/tickets/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n update(\n id: string,\n body: UpdateTicketParams,\n opts?: RequestOptions,\n ): Promise<Ticket> {\n return this.client.request<Ticket>(\n 'patch',\n `/v1/tickets/${encodeURIComponent(id)}`,\n {\n ...opts,\n body,\n },\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/${encodeURIComponent(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 maxRetries: 0,\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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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/${encodeURIComponent(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 { WokuError } from '../core/errors';\nimport type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { Schemas } from '../types';\nimport type { operations } from '../_generated/openapi';\n\n/** Public journey shapes are generated from the server OpenAPI contract. */\nexport type JourneyStartMode = NonNullable<\n Schemas['V1JourneyResponseDto']['startMode']\n>;\nexport type JourneyRecipients = Schemas['JourneyRecipientsDto'];\nexport type JourneyWebhook = Schemas['V1JourneyWebhookDto'];\nexport type JourneySendWindow = Schemas['V1JourneySendWindowDto'];\nexport type JourneyMomentPreview = Schemas['V1JourneyPreviewResponseDto'];\nexport type JourneyMomentTrigger = Schemas['V1JourneyTriggerDto'];\nexport type JourneyMoment = Schemas['V1JourneyMomentDto'];\nexport type JourneyInput = Schemas['V1UpdateJourneyBodyDto'];\n/**\n * A journey as returned by `/v1/journeys`. `folderId` and `momentFolders`\n * (moment key to folder id) point at the folders that hold the journey's tools\n * once the company organized its journeys in folders; they are `null` and `{}`\n * before that. Reads only: they are not part of the journey definition.\n */\nexport type Journey = Schemas['V1JourneyResponseDto'] & {\n folderId?: string | null;\n momentFolders?: Record<string, string>;\n};\nexport type CreatedJourney = Schemas['V1CreatedJourneyResponseDto'];\nexport type JourneyEnrollment = Schemas['V1JourneyParticipationDto'];\nexport type JourneyEnrollmentPage = Schemas['V1JourneyParticipationPageDto'];\nexport type ListJourneyEnrollmentsParams = NonNullable<\n operations['V1JourneysController_listParticipations']['parameters']['query']\n>;\nexport type JourneyConnection = Schemas['V1JourneyConnectionDto'];\nexport type EnrollInput = Schemas['V1EnrollSubjectBodyDto'];\nexport type JourneyEventInput = Schemas['V1EmitJourneyEventBodyDto'];\nexport type JourneyEntryInfo = Schemas['JourneyEntryInfoDto'];\nexport type PrepareJourneyEntryInput = Schemas['PrepareJourneyEntryDto'];\nexport type PreparedJourneyEntry = Schemas['PreparedJourneyEntryDto'];\n\n/**\n * Customer journeys (`/v1/journeys`): define the moments where you listen,\n * create a tool per enrollment or share one within each moment, and set them off by hand or from your\n * own events.\n */\nexport class Journeys {\n constructor(private readonly client: WokuClient) {}\n\n /** Read customer entry metadata without starting or preparing an evaluation. */\n entryInfo(\n journeyId: string,\n opts?: RequestOptions,\n ): Promise<JourneyEntryInfo> {\n return this.client.request(\n 'get',\n `/v1/journey-entries/${encodeURIComponent(journeyId)}`,\n opts,\n );\n }\n\n /** Prepare a first tool. Only its saved response with dispatchToken confirms entry. */\n prepareEntry(\n journeyId: string,\n body: PrepareJourneyEntryInput,\n opts?: RequestOptions,\n ): Promise<PreparedJourneyEntry> {\n return this.client.request(\n 'post',\n `/v1/journey-entries/${encodeURIComponent(journeyId)}`,\n { ...opts, body, maxRetries: 0 },\n );\n }\n\n /** Every journey of your company. */\n list(opts?: RequestOptions): Promise<Journey[]> {\n return this.client.request<Journey[]>('get', '/v1/journeys', opts);\n }\n\n /** One journey with its moments. */\n get(journeyId: string, opts?: RequestOptions): Promise<Journey> {\n return this.client.request<Journey>(\n 'get',\n `/v1/journeys/${encodeURIComponent(journeyId)}`,\n opts,\n );\n }\n\n /**\n * Create a journey. The response carries `webhookSecret` once and only here:\n * it signs legacy woku_signature calls. V2 URL tokens and sender secrets\n * are configured separately per moment. Store it securely.\n */\n create(\n body: JourneyInput & { name: string },\n opts?: RequestOptions,\n ): Promise<CreatedJourney> {\n return this.client.request<CreatedJourney>('post', '/v1/journeys', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /**\n * Rename a journey, switch it on or off, or replace its moments. Replacing\n * the moments mints a new version; the enrollments already running keep\n * executing the version they started with.\n */\n update(\n journeyId: string,\n body: JourneyInput,\n opts?: RequestOptions,\n ): Promise<Journey> {\n return this.client.request<Journey>(\n 'patch',\n `/v1/journeys/${encodeURIComponent(journeyId)}`,\n {\n ...opts,\n body,\n },\n );\n }\n\n /** Cursor page of exact customer cases; pass nextCursor to retrieve another page. */\n listEnrollments(\n journeyId: string,\n params?: ListJourneyEnrollmentsParams,\n opts?: RequestOptions,\n ): Promise<JourneyEnrollmentPage> {\n return this.client.request(\n 'get',\n `/v1/journeys/${encodeURIComponent(journeyId)}/enrollments`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n\n /** Iterate exact cases lazily, preserving options while advancing the server cursor. */\n async *iterEnrollments(\n journeyId: string,\n params?: ListJourneyEnrollmentsParams,\n opts?: RequestOptions,\n ): AsyncGenerator<JourneyEnrollment> {\n let query: Record<string, unknown> = { ...params, ...opts?.query };\n const seen = new Set<string>();\n for (;;) {\n const page = await this.listEnrollments(journeyId, undefined, {\n ...opts,\n query,\n });\n for (const item of page.items) yield item;\n const next = page.nextCursor;\n if (!next) return;\n if (seen.has(next) || next === query.cursor)\n throw new WokuError('Enrollment pagination did not advance.', {\n code: 'pagination_error',\n });\n seen.add(next);\n query = { ...query, cursor: next };\n }\n }\n\n /** History and next step for one exact participation. */\n getEnrollment(\n journeyId: string,\n enrollmentId: string,\n opts?: RequestOptions,\n ): Promise<JourneyEnrollment> {\n return this.client.request(\n 'get',\n `/v1/journeys/${encodeURIComponent(journeyId)}/enrollments/${encodeURIComponent(enrollmentId)}`,\n opts,\n );\n }\n\n /** Cancel future work for this case. Accepted provider sends cannot be recalled. */\n stopEnrollment(\n journeyId: string,\n enrollmentId: string,\n body: { reason?: string } = {},\n opts?: RequestOptions,\n ): Promise<JourneyEnrollment> {\n return this.client.request(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/enrollments/${encodeURIComponent(enrollmentId)}/stop`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /** Credential readiness is not evidence that an actual webhook has arrived. */\n connections(\n journeyId: string,\n opts?: RequestOptions,\n ): Promise<JourneyConnection[]> {\n return this.client.request(\n 'get',\n `/v1/journeys/${encodeURIComponent(journeyId)}/connections`,\n opts,\n );\n }\n\n /** Replaces this moment's URL credential. Store the returned URL in the sender. */\n async mintMomentUrl(\n journeyId: string,\n stageKey: string,\n opts?: RequestOptions,\n ): Promise<{ token: string; url: string }> {\n const result = await this.client.request<{ token: string; url: string }>(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/moments/${encodeURIComponent(stageKey)}/url-token`,\n { ...opts, body: {}, idempotent: true },\n );\n return {\n ...result,\n url: new URL(result.url, this.client.baseURL).toString(),\n };\n }\n\n /** Store the external sender's signing secret encrypted; it is never returned. */\n setSenderSecret(\n journeyId: string,\n stageKey: string,\n senderSecret: string,\n opts?: RequestOptions,\n ): Promise<void> {\n return this.client.request(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/moments/${encodeURIComponent(stageKey)}/sender-secret`,\n { ...opts, body: { senderSecret }, maxRetries: 0 },\n );\n }\n\n /** Test saved payload mapping without creating a participation or sending a tool. */\n previewMoment(\n journeyId: string,\n stageKey: string,\n payload: Record<string, unknown>,\n opts?: RequestOptions,\n ): Promise<JourneyMomentPreview> {\n return this.client.request(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/moments/${encodeURIComponent(stageKey)}/preview`,\n { ...opts, body: { payload }, maxRetries: 0 },\n );\n }\n\n /** Delete a journey. What it already started keeps its own history. */\n delete(journeyId: string, opts?: RequestOptions): Promise<void> {\n return this.client.request<void>(\n 'delete',\n `/v1/journeys/${encodeURIComponent(journeyId)}`,\n opts,\n );\n }\n\n /**\n * Mint a new signing secret. The previous one stays valid until the next\n * rotation, so senders can be updated without a gap.\n */\n rotateWebhookSecret(\n journeyId: string,\n opts?: RequestOptions,\n ): Promise<Schemas['V1JourneySecretResponseDto']> {\n return this.client.request<Schemas['V1JourneySecretResponseDto']>(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/webhook-secret`,\n { ...opts, body: {}, maxRetries: 0 },\n );\n }\n\n /**\n * Start the journey for one subject. Enrolling the same person for a later\n * cycle reuses the subject key after the previous cycle completes or stops.\n */\n enroll(\n journeyId: string,\n body: EnrollInput,\n opts?: RequestOptions,\n ): Promise<Schemas['V1JourneyEnrollmentResponseDto']> {\n return this.client.request<Schemas['V1JourneyEnrollmentResponseDto']>(\n 'post',\n `/v1/journeys/${encodeURIComponent(journeyId)}/enrollments`,\n { ...opts, body, idempotent: true },\n );\n }\n\n /**\n * Emit one of your own events. Every journey whose moments listen for that\n * name reacts.\n */\n emitEvent(\n body: JourneyEventInput,\n opts?: RequestOptions,\n ): Promise<Schemas['V1JourneyEventResponseDto']> {\n return this.client.request<Schemas['V1JourneyEventResponseDto']>(\n 'post',\n '/v1/journey-events',\n {\n ...opts,\n body,\n idempotent: true,\n },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { CreateFolderParams, UpdateFolderParams } from '../types';\nimport type {\n DeletedResult,\n Folder,\n FolderCsv,\n FolderToolMetrics,\n WokuRecord,\n} from '../models';\n\n/**\n * Folders that organize wokus and NPS, CSAT and CES tools (`/v1/folders`).\n * To list what a folder contains use `woku.tools.list({ folderId })`.\n */\nexport class Folders {\n constructor(private readonly client: WokuClient) {}\n\n /** Every folder of the company, or the direct subfolders of `parentFolderId`. */\n list(\n params?: { parentFolderId?: string; q?: string },\n opts?: RequestOptions,\n ): Promise<Folder[]> {\n return this.client.request<Folder[]>('get', '/v1/folders', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n get(id: string, opts?: RequestOptions): Promise<Folder> {\n return this.client.request<Folder>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n create(body: CreateFolderParams, opts?: RequestOptions): Promise<Folder> {\n return this.client.request<Folder>('post', '/v1/folders', {\n ...opts,\n body,\n idempotent: true,\n });\n }\n\n /**\n * Rename or recolor a folder (`color: null` clears the color) and/or replace\n * its WhatsApp alert recipients (`whatsappAlertRecipients`, `[]` clears them).\n */\n update(\n id: string,\n body: UpdateFolderParams,\n opts?: RequestOptions,\n ): Promise<Folder> {\n return this.client.request<Folder>(\n 'patch',\n `/v1/folders/${encodeURIComponent(id)}`,\n { ...opts, body },\n );\n }\n\n /**\n * Move a folder under another folder, or to the root with\n * `parentFolderId: null`. A folder cannot move into its own subtree.\n */\n move(\n id: string,\n body: { parentFolderId: string | null },\n opts?: RequestOptions,\n ): Promise<Folder> {\n return this.client.request<Folder>(\n 'patch',\n `/v1/folders/${encodeURIComponent(id)}/move`,\n { ...opts, body },\n );\n }\n\n /**\n * Delete a folder. Nothing inside is deleted: subfolders, wokus and tools\n * move up to the parent folder (or the root).\n */\n delete(id: string, opts?: RequestOptions): Promise<DeletedResult> {\n return this.client.request<DeletedResult>(\n 'delete',\n `/v1/folders/${encodeURIComponent(id)}`,\n opts,\n );\n }\n\n /**\n * AI report over every woku, NPS, CSAT and CES tool of the folder and its\n * subfolders. Scales differ per type, so there is no rating distribution.\n */\n report(\n id: string,\n params?: { regenerate?: boolean; lang?: 'es' | 'en' },\n opts?: RequestOptions,\n ): Promise<WokuRecord> {\n return this.client.request<WokuRecord>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}/report`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n\n /**\n * Per-tool figures of the woku, NPS, CSAT and CES tools of the folder and its\n * subfolders for a period against the one before it, with the daily sums and\n * the histogram of scores. `days` is 7, 30 (default) or 90, or 0 for the whole\n * history (every `previous` window is then empty). The period is the last\n * `days` calendar days in UTC, today included. Or a custom range with `from`\n * and `to` (`YYYY-MM-DD` UTC days, both inclusive, up to 731 days), which\n * replaces `days`. Scales are never mixed across types.\n */\n metrics(\n id: string,\n params?: { days?: 0 | 7 | 30 | 90; from?: string; to?: string },\n opts?: RequestOptions,\n ): Promise<FolderToolMetrics> {\n return this.client.request<FolderToolMetrics>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}/metrics`,\n { ...opts, query: { ...params, ...opts?.query } },\n );\n }\n\n /** CSV text with one row per response of every tool of the folder subtree. */\n csv(id: string, opts?: RequestOptions): Promise<FolderCsv> {\n return this.client.request<FolderCsv>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}/csv`,\n opts,\n );\n }\n\n /**\n * PDF of the folder report (every woku, NPS, CSAT and CES tool of the folder\n * and its subfolders) with a breakdown per type on each native scale.\n * Returns the file bytes: write them to disk or send them as is.\n */\n pdf(\n id: string,\n params?: { lang?: 'es' | 'en' },\n opts?: RequestOptions,\n ): Promise<Uint8Array> {\n return this.client.request<Uint8Array>(\n 'get',\n `/v1/folders/${encodeURIComponent(id)}/pdf`,\n {\n ...opts,\n headers: { Accept: 'application/pdf', ...opts?.headers },\n query: { ...params, ...opts?.query },\n binary: true,\n },\n );\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { MoveToolItemsParams } from '../types';\nimport type {\n Folder,\n MoveResult,\n ToolItem,\n ToolItemsPageResponse,\n ToolsStats,\n ToolType,\n} from '../models';\n\n/** Filters of `tools.list`. */\nexport interface ListToolsParams {\n /** Folder whose direct content is listed. Omit for the root. */\n folderId?: string;\n /** `level` (default) lists one folder level; `company` lists every tool flat. */\n scope?: 'level' | 'company';\n /** Only these tool types. */\n types?: ToolType[];\n /** Case and accent insensitive search (company-wide, also matches folders). */\n q?: string;\n sort?: 'name' | '-name' | 'created' | '-created';\n /** Page size, 1-100 (default 50). */\n limit?: number;\n /** Folders per page, 1-100 (omit to receive every folder of the level). */\n foldersLimit?: number;\n createdFrom?: string;\n createdTo?: string;\n /**\n * Tracker chips as `name:value` (for example `TRR:00482`, up to 10); a tool\n * matches when it has every one: the tracker name is matched exactly, the value\n * partially and ignoring case (`482` also matches `00482`). Like a search it is\n * company-wide and lists no folders. A chip without name or value is a 400.\n */\n trackers?: string[];\n}\n\n/**\n * One page of `tools.list`. Iterate every tool across all pages with\n * `for await (const tool of page)`, or page by page with `page.iterPages()`.\n */\nexport class ToolsPage implements AsyncIterable<ToolItem> {\n readonly folders: Folder[];\n readonly tools: ToolItem[];\n readonly nextCursor: string | null;\n /** Cursor of the next page of folders (only set when `foldersLimit` was used). */\n readonly foldersNextCursor: string | null;\n readonly facets: ToolItemsPageResponse['facets'];\n\n constructor(\n response: ToolItemsPageResponse,\n private readonly fetchNext: (cursor: string) => Promise<ToolsPage>,\n private readonly fetchMoreFolders: (\n cursor: string,\n ) => Promise<ToolsPage> = () =>\n Promise.reject(new RangeError('No more folders')),\n ) {\n this.folders = response.folders;\n this.tools = response.tools;\n this.nextCursor = response.nextCursor;\n this.foldersNextCursor = response.foldersNextCursor ?? null;\n this.facets = response.facets;\n }\n\n hasMoreFolders(): boolean {\n return this.foldersNextCursor !== null;\n }\n\n /** The next page of folders (\"see more\"): a page with those folders and no tools. */\n getMoreFolders(): Promise<ToolsPage> {\n if (this.foldersNextCursor === null)\n throw new RangeError('No more folders');\n return this.fetchMoreFolders(this.foldersNextCursor);\n }\n\n hasNextPage(): boolean {\n return this.nextCursor !== null;\n }\n\n getNextPage(): Promise<ToolsPage> {\n if (this.nextCursor === null) throw new RangeError('No next page');\n return this.fetchNext(this.nextCursor);\n }\n\n async *iterPages(): AsyncGenerator<ToolsPage> {\n yield this;\n if (this.hasNextPage()) yield* (await this.getNextPage()).iterPages();\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<ToolItem> {\n for await (const page of this.iterPages()) {\n for (const tool of page.tools) yield tool;\n }\n }\n}\n\n/**\n * The unified view over wokus and NPS, CSAT and CES tools (`/v1/tools`):\n * search and filters, headline figures per type and batch moves.\n */\nexport class Tools {\n constructor(private readonly client: WokuClient) {}\n\n /**\n * List one folder level (or search the company). Folders and tools of every\n * type come together; the first page also carries the folders and facets.\n */\n async list(\n params?: ListToolsParams,\n opts?: RequestOptions,\n ): Promise<ToolsPage> {\n const fetchPage = async (\n cursor?: string,\n foldersCursor?: string,\n ): Promise<ToolsPage> => {\n const response = await this.client.request<ToolItemsPageResponse>(\n 'get',\n '/v1/tools',\n {\n ...opts,\n query: {\n ...params,\n types: params?.types?.join(','),\n ...(cursor ? { cursor } : {}),\n ...(foldersCursor ? { foldersCursor } : {}),\n ...opts?.query,\n },\n },\n );\n return new ToolsPage(response, fetchPage, (next) =>\n fetchPage(undefined, next),\n );\n };\n return fetchPage();\n }\n\n /**\n * Headline figures per type (woku stars, NPS score, CSAT satisfied %, CES\n * mean) for the company or one folder and its subfolders, in a period.\n * A type that fails reports `{ error: true }`; the others stay valid.\n */\n stats(\n params?: { folderId?: string; from?: string; to?: string },\n opts?: RequestOptions,\n ): Promise<ToolsStats> {\n return this.client.request<ToolsStats>('get', '/v1/tools/stats', {\n ...opts,\n query: { ...params, ...opts?.query },\n });\n }\n\n /**\n * Move up to 200 items of mixed types (`woku`, `nps`, `csat`, `ces`,\n * `folder`) into a folder, or to the root with `folderId: null`. Idempotent;\n * nothing moves if one item or the destination is not found.\n */\n move(body: MoveToolItemsParams, opts?: RequestOptions): Promise<MoveResult> {\n return this.client.request<MoveResult>('post', '/v1/tools/move', {\n ...opts,\n body,\n });\n }\n}\n","import type { WokuClient } from '../core/client';\nimport type { RequestOptions } from '../core/options';\nimport type { JourneyFoldersStatus } from '../models';\n\n/**\n * Keep customer journeys in folders (`/v1/journey-folders`): `Viajes > journey >\n * moment`. Each journey and moment exposes its folder in `journeys.get`\n * (`folderId`, `momentFolders`).\n */\nexport class JourneyFolders {\n constructor(private readonly client: WokuClient) {}\n\n /** Whether the organization is on, running, and how much is still without a folder. */\n status(opts?: RequestOptions): Promise<JourneyFoldersStatus> {\n return this.client.request<JourneyFoldersStatus>(\n 'get',\n '/v1/journey-folders',\n opts,\n );\n }\n\n /**\n * Switch the organization on and run the one-off pass in the background: tools\n * of existing journeys without a folder move into their moment folder, and\n * tools journeys create from now on are placed there. Tools that already have\n * a folder are never touched. Rejects with a conflict (409) while a pass is\n * already running; poll {@link status} for progress.\n */\n organize(opts?: RequestOptions): Promise<JourneyFoldersStatus> {\n return this.client.request<JourneyFoldersStatus>(\n 'post',\n '/v1/journey-folders/organize',\n opts,\n );\n }\n}\n","import { Media } from './resources/media';\nimport { FollowUps } from './resources/follow-ups';\nimport { 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 { Journeys } from './resources/journeys';\nimport { Folders } from './resources/folders';\nimport { Tools } from './resources/tools';\nimport { JourneyFolders } from './resources/journey-folders';\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 media: Media;\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 followUps: FollowUps;\n readonly ticketDestinations: TicketDestinations;\n readonly dispatches: Dispatches;\n readonly reports: Reports;\n readonly company: Company;\n /** Customer journeys: moments, their tools and how each one starts. */\n readonly journeys: Journeys;\n /** Folders that organize wokus and NPS, CSAT and CES tools. */\n readonly folders: Folders;\n /** Unified search, headline figures and batch moves across every tool type. */\n readonly tools: Tools;\n /** Keep journeys and their moments in folders (`Viajes > journey > moment`). */\n readonly journeyFolders: JourneyFolders;\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.media = new Media(this.client);\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.followUps = new FollowUps(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.journeys = new Journeys(this.client);\n this.folders = new Folders(this.client);\n this.tools = new Tools(this.client);\n this.journeyFolders = new JourneyFolders(this.client);\n }\n}\n"]}
|