@teamlearners/clawops 0.14.0 → 0.15.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 +6 -0
- package/dist/agent/index.cjs +8 -8
- package/dist/agent/index.js +1 -1
- package/dist/{chunk-RRUQMSFD.cjs → chunk-ENZ4B3I7.cjs} +3 -3
- package/dist/{chunk-RRUQMSFD.cjs.map → chunk-ENZ4B3I7.cjs.map} +1 -1
- package/dist/{chunk-6S6PV2RY.js → chunk-JTLOQURG.js} +3 -3
- package/dist/{chunk-6S6PV2RY.js.map → chunk-JTLOQURG.js.map} +1 -1
- package/dist/index.cjs +59 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +52 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -193,6 +193,12 @@ if (state.status === 'completed') {
|
|
|
193
193
|
// 조직 설정 off 거나 아직 요청 안 된 상태 — 명시 요청 (사용량 과금)
|
|
194
194
|
await client.calls.requestTranscript('CAabcdef1234567890');
|
|
195
195
|
}
|
|
196
|
+
|
|
197
|
+
// 통화 요약 상태 조회 (completed 시 resultJson 까지 inline)
|
|
198
|
+
const summary = await client.calls.getSummary('CAabcdef1234567890');
|
|
199
|
+
if (summary.status === 'completed') {
|
|
200
|
+
console.log(summary.resultJson); // { coreSummary, decisions, followUps, sentiment }
|
|
201
|
+
}
|
|
196
202
|
```
|
|
197
203
|
|
|
198
204
|
### 전화번호 (Numbers)
|
package/dist/agent/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkENZ4B3I7_cjs = require('../chunk-ENZ4B3I7.cjs');
|
|
4
4
|
var pino = require('pino');
|
|
5
5
|
var fs = require('fs');
|
|
6
6
|
var path = require('path');
|
|
@@ -1043,7 +1043,7 @@ var MAX_ERROR_MESSAGE_LENGTH = 200;
|
|
|
1043
1043
|
function getSdkInfo() {
|
|
1044
1044
|
return {
|
|
1045
1045
|
name: "clawops-node",
|
|
1046
|
-
version:
|
|
1046
|
+
version: chunkENZ4B3I7_cjs.VERSION,
|
|
1047
1047
|
runtime: `node/${process.versions.node}`,
|
|
1048
1048
|
os: `${process.platform}/${os__default.default.arch()}`
|
|
1049
1049
|
};
|
|
@@ -1724,7 +1724,7 @@ var ClawOpsAgent = class {
|
|
|
1724
1724
|
constructor(options) {
|
|
1725
1725
|
this._apiKey = options.apiKey ?? process.env["CLAWOPS_API_KEY"] ?? "";
|
|
1726
1726
|
this._accountId = options.accountId ?? process.env["CLAWOPS_ACCOUNT_ID"] ?? "";
|
|
1727
|
-
this._baseUrl = options.baseUrl ??
|
|
1727
|
+
this._baseUrl = options.baseUrl ?? chunkENZ4B3I7_cjs.DEFAULT_BASE_URL;
|
|
1728
1728
|
this._fromNumber = options.from;
|
|
1729
1729
|
this._session = options.session;
|
|
1730
1730
|
this._recording = options.recording ?? false;
|
|
@@ -1752,7 +1752,7 @@ var ClawOpsAgent = class {
|
|
|
1752
1752
|
tool(nameOrTool, description, parameters, handler) {
|
|
1753
1753
|
if (typeof nameOrTool === "string") {
|
|
1754
1754
|
if (!description || !parameters || !handler) {
|
|
1755
|
-
throw new
|
|
1755
|
+
throw new chunkENZ4B3I7_cjs.AgentError(
|
|
1756
1756
|
"tool(name, description, parameters, handler) requires all arguments."
|
|
1757
1757
|
);
|
|
1758
1758
|
}
|
|
@@ -1788,10 +1788,10 @@ var ClawOpsAgent = class {
|
|
|
1788
1788
|
async connect() {
|
|
1789
1789
|
if (this._controlWs) return;
|
|
1790
1790
|
if (!this._apiKey) {
|
|
1791
|
-
throw new
|
|
1791
|
+
throw new chunkENZ4B3I7_cjs.AgentError("API key is required. Set CLAWOPS_API_KEY or pass apiKey option.");
|
|
1792
1792
|
}
|
|
1793
1793
|
if (!this._accountId) {
|
|
1794
|
-
throw new
|
|
1794
|
+
throw new chunkENZ4B3I7_cjs.AgentError(
|
|
1795
1795
|
"Account ID is required. Set CLAWOPS_ACCOUNT_ID or pass accountId option."
|
|
1796
1796
|
);
|
|
1797
1797
|
}
|
|
@@ -1815,7 +1815,7 @@ var ClawOpsAgent = class {
|
|
|
1815
1815
|
} catch {
|
|
1816
1816
|
}
|
|
1817
1817
|
} catch (err) {
|
|
1818
|
-
throw new
|
|
1818
|
+
throw new chunkENZ4B3I7_cjs.AgentConnectionError(
|
|
1819
1819
|
`Failed to connect to ClawOps: ${err instanceof Error ? err.message : String(err)}`
|
|
1820
1820
|
);
|
|
1821
1821
|
}
|
|
@@ -1866,7 +1866,7 @@ var ClawOpsAgent = class {
|
|
|
1866
1866
|
});
|
|
1867
1867
|
if (resp.status !== 201) {
|
|
1868
1868
|
const error = await resp.json();
|
|
1869
|
-
throw new
|
|
1869
|
+
throw new chunkENZ4B3I7_cjs.AgentError(`\uBC1C\uC2E0 \uC2E4\uD328 (${resp.status}): ${error["error"] ?? ""}`);
|
|
1870
1870
|
}
|
|
1871
1871
|
const data = await resp.json();
|
|
1872
1872
|
const callSession = new CallSession({
|
package/dist/agent/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_BASE_URL, AgentError, AgentConnectionError, VERSION } from '../chunk-
|
|
1
|
+
import { DEFAULT_BASE_URL, AgentError, AgentConnectionError, VERSION } from '../chunk-JTLOQURG.js';
|
|
2
2
|
import pino from 'pino';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
@@ -151,7 +151,7 @@ function makeStatusError(status, body, headers, request) {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
// src/version.ts
|
|
154
|
-
var VERSION = "0.
|
|
154
|
+
var VERSION = "0.15.0" ;
|
|
155
155
|
|
|
156
156
|
// src/constants.ts
|
|
157
157
|
var DEFAULT_BASE_URL = "https://api.claw-ops.com";
|
|
@@ -184,5 +184,5 @@ exports.ServiceUnavailableError = ServiceUnavailableError;
|
|
|
184
184
|
exports.UnprocessableEntityError = UnprocessableEntityError;
|
|
185
185
|
exports.VERSION = VERSION;
|
|
186
186
|
exports.makeStatusError = makeStatusError;
|
|
187
|
-
//# sourceMappingURL=chunk-
|
|
188
|
-
//# sourceMappingURL=chunk-
|
|
187
|
+
//# sourceMappingURL=chunk-ENZ4B3I7.cjs.map
|
|
188
|
+
//# sourceMappingURL=chunk-ENZ4B3I7.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error.ts","../src/version.ts","../src/constants.ts"],"names":[],"mappings":"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","file":"chunk-RRUQMSFD.cjs","sourcesContent":["export class ClawOpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ClawOpsError';\n }\n}\n\nexport class APIError extends ClawOpsError {\n readonly request: { method: string; url: string };\n\n constructor(message: string, request: { method: string; url: string }) {\n super(message);\n this.name = 'APIError';\n this.request = request;\n }\n}\n\nexport class APIStatusError extends APIError {\n readonly status: number;\n readonly body: unknown;\n readonly headers: Headers | undefined;\n\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, request);\n this.name = 'APIStatusError';\n this.status = response.status;\n this.body = body;\n this.headers = response.headers;\n }\n}\n\nexport class BadRequestError extends APIStatusError {\n override readonly status = 400 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'BadRequestError';\n }\n}\n\nexport class AuthenticationError extends APIStatusError {\n override readonly status = 401 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class PermissionDeniedError extends APIStatusError {\n override readonly status = 403 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'PermissionDeniedError';\n }\n}\n\nexport class NotFoundError extends APIStatusError {\n override readonly status = 404 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'NotFoundError';\n }\n}\n\nexport class ConflictError extends APIStatusError {\n override readonly status = 409 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'ConflictError';\n }\n}\n\nexport class UnprocessableEntityError extends APIStatusError {\n override readonly status = 422 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'UnprocessableEntityError';\n }\n}\n\n/**\n * HTTP 429 Too Many Requests.\n *\n * 동시 통화 한도 초과 등 일시적 제한. SDK는 자동 재시도(최대 2회, 지수 backoff)를 수행한다.\n * 즉각 피드백이 필요하면 client 생성 시 maxRetries: 0으로 재시도를 비활성화하라.\n */\nexport class RateLimitError extends APIStatusError {\n override readonly status = 429 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'RateLimitError';\n }\n}\n\nexport class InternalServerError extends APIStatusError {\n override readonly status = 500 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'InternalServerError';\n }\n}\n\nexport class ServiceUnavailableError extends APIStatusError {\n override readonly status = 503 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'ServiceUnavailableError';\n }\n}\n\nexport class APIConnectionError extends APIError {\n constructor(request: { method: string; url: string }, message = 'Connection error.') {\n super(message, request);\n this.name = 'APIConnectionError';\n }\n}\n\nexport class APITimeoutError extends APIConnectionError {\n constructor(request: { method: string; url: string }) {\n super(request, 'Request timed out.');\n this.name = 'APITimeoutError';\n }\n}\n\nexport class APIResponseValidationError extends APIError {\n readonly status: number;\n\n constructor(response: { status: number }, request: { method: string; url: string }) {\n super('API response validation failed.', request);\n this.name = 'APIResponseValidationError';\n this.status = response.status;\n }\n}\n\nexport class AgentError extends ClawOpsError {\n constructor(message: string) {\n super(message);\n this.name = 'AgentError';\n }\n}\n\nexport class AgentConnectionError extends AgentError {\n constructor(message = 'Agent WebSocket connection failed.') {\n super(message);\n this.name = 'AgentConnectionError';\n }\n}\n\nconst STATUS_CODE_TO_ERROR: Record<\n number,\n new (\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) => APIStatusError\n> = {\n 400: BadRequestError,\n 401: AuthenticationError,\n 403: PermissionDeniedError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: UnprocessableEntityError,\n 429: RateLimitError,\n 500: InternalServerError,\n 503: ServiceUnavailableError,\n};\n\nexport function makeStatusError(\n status: number,\n body: unknown,\n headers: Headers | undefined,\n request: { method: string; url: string },\n): APIStatusError {\n let message = '';\n if (body && typeof body === 'object' && 'error' in body) {\n message = (body as { error: string }).error;\n } else {\n message = `HTTP ${status}`;\n }\n\n const ErrorClass = STATUS_CODE_TO_ERROR[status];\n if (ErrorClass) {\n return new ErrorClass(message, { status, headers }, body, request);\n }\n if (status >= 500) {\n return new InternalServerError(message, { status, headers }, body, request);\n }\n return new APIStatusError(message, { status, headers }, body, request);\n}\n","declare const __PKG_VERSION__: string;\n\nexport const VERSION: string = typeof __PKG_VERSION__ !== 'undefined'\n ? __PKG_VERSION__\n : 'dev';\n","export const DEFAULT_BASE_URL = 'https://api.claw-ops.com';\nexport const DEFAULT_MAX_RETRIES = 2;\nexport const DEFAULT_TIMEOUT = 600_000; // ms\nexport const INITIAL_RETRY_DELAY = 500; // ms\nexport const MAX_RETRY_DELAY = 8_000; // ms\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error.ts","../src/version.ts","../src/constants.ts"],"names":[],"mappings":"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","file":"chunk-ENZ4B3I7.cjs","sourcesContent":["export class ClawOpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ClawOpsError';\n }\n}\n\nexport class APIError extends ClawOpsError {\n readonly request: { method: string; url: string };\n\n constructor(message: string, request: { method: string; url: string }) {\n super(message);\n this.name = 'APIError';\n this.request = request;\n }\n}\n\nexport class APIStatusError extends APIError {\n readonly status: number;\n readonly body: unknown;\n readonly headers: Headers | undefined;\n\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, request);\n this.name = 'APIStatusError';\n this.status = response.status;\n this.body = body;\n this.headers = response.headers;\n }\n}\n\nexport class BadRequestError extends APIStatusError {\n override readonly status = 400 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'BadRequestError';\n }\n}\n\nexport class AuthenticationError extends APIStatusError {\n override readonly status = 401 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class PermissionDeniedError extends APIStatusError {\n override readonly status = 403 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'PermissionDeniedError';\n }\n}\n\nexport class NotFoundError extends APIStatusError {\n override readonly status = 404 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'NotFoundError';\n }\n}\n\nexport class ConflictError extends APIStatusError {\n override readonly status = 409 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'ConflictError';\n }\n}\n\nexport class UnprocessableEntityError extends APIStatusError {\n override readonly status = 422 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'UnprocessableEntityError';\n }\n}\n\n/**\n * HTTP 429 Too Many Requests.\n *\n * 동시 통화 한도 초과 등 일시적 제한. SDK는 자동 재시도(최대 2회, 지수 backoff)를 수행한다.\n * 즉각 피드백이 필요하면 client 생성 시 maxRetries: 0으로 재시도를 비활성화하라.\n */\nexport class RateLimitError extends APIStatusError {\n override readonly status = 429 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'RateLimitError';\n }\n}\n\nexport class InternalServerError extends APIStatusError {\n override readonly status = 500 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'InternalServerError';\n }\n}\n\nexport class ServiceUnavailableError extends APIStatusError {\n override readonly status = 503 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'ServiceUnavailableError';\n }\n}\n\nexport class APIConnectionError extends APIError {\n constructor(request: { method: string; url: string }, message = 'Connection error.') {\n super(message, request);\n this.name = 'APIConnectionError';\n }\n}\n\nexport class APITimeoutError extends APIConnectionError {\n constructor(request: { method: string; url: string }) {\n super(request, 'Request timed out.');\n this.name = 'APITimeoutError';\n }\n}\n\nexport class APIResponseValidationError extends APIError {\n readonly status: number;\n\n constructor(response: { status: number }, request: { method: string; url: string }) {\n super('API response validation failed.', request);\n this.name = 'APIResponseValidationError';\n this.status = response.status;\n }\n}\n\nexport class AgentError extends ClawOpsError {\n constructor(message: string) {\n super(message);\n this.name = 'AgentError';\n }\n}\n\nexport class AgentConnectionError extends AgentError {\n constructor(message = 'Agent WebSocket connection failed.') {\n super(message);\n this.name = 'AgentConnectionError';\n }\n}\n\nconst STATUS_CODE_TO_ERROR: Record<\n number,\n new (\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) => APIStatusError\n> = {\n 400: BadRequestError,\n 401: AuthenticationError,\n 403: PermissionDeniedError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: UnprocessableEntityError,\n 429: RateLimitError,\n 500: InternalServerError,\n 503: ServiceUnavailableError,\n};\n\nexport function makeStatusError(\n status: number,\n body: unknown,\n headers: Headers | undefined,\n request: { method: string; url: string },\n): APIStatusError {\n let message = '';\n if (body && typeof body === 'object' && 'error' in body) {\n message = (body as { error: string }).error;\n } else {\n message = `HTTP ${status}`;\n }\n\n const ErrorClass = STATUS_CODE_TO_ERROR[status];\n if (ErrorClass) {\n return new ErrorClass(message, { status, headers }, body, request);\n }\n if (status >= 500) {\n return new InternalServerError(message, { status, headers }, body, request);\n }\n return new APIStatusError(message, { status, headers }, body, request);\n}\n","declare const __PKG_VERSION__: string;\n\nexport const VERSION: string = typeof __PKG_VERSION__ !== 'undefined'\n ? __PKG_VERSION__\n : 'dev';\n","export const DEFAULT_BASE_URL = 'https://api.claw-ops.com';\nexport const DEFAULT_MAX_RETRIES = 2;\nexport const DEFAULT_TIMEOUT = 600_000; // ms\nexport const INITIAL_RETRY_DELAY = 500; // ms\nexport const MAX_RETRY_DELAY = 8_000; // ms\n"]}
|
|
@@ -149,7 +149,7 @@ function makeStatusError(status, body, headers, request) {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
// src/version.ts
|
|
152
|
-
var VERSION = "0.
|
|
152
|
+
var VERSION = "0.15.0" ;
|
|
153
153
|
|
|
154
154
|
// src/constants.ts
|
|
155
155
|
var DEFAULT_BASE_URL = "https://api.claw-ops.com";
|
|
@@ -159,5 +159,5 @@ var INITIAL_RETRY_DELAY = 500;
|
|
|
159
159
|
var MAX_RETRY_DELAY = 8e3;
|
|
160
160
|
|
|
161
161
|
export { APIConnectionError, APIError, APIResponseValidationError, APIStatusError, APITimeoutError, AgentConnectionError, AgentError, AuthenticationError, BadRequestError, ClawOpsError, ConflictError, DEFAULT_BASE_URL, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, INITIAL_RETRY_DELAY, InternalServerError, MAX_RETRY_DELAY, NotFoundError, PermissionDeniedError, RateLimitError, ServiceUnavailableError, UnprocessableEntityError, VERSION, makeStatusError };
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
162
|
+
//# sourceMappingURL=chunk-JTLOQURG.js.map
|
|
163
|
+
//# sourceMappingURL=chunk-JTLOQURG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/error.ts","../src/version.ts","../src/constants.ts"],"names":[],"mappings":"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","file":"chunk-6S6PV2RY.js","sourcesContent":["export class ClawOpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ClawOpsError';\n }\n}\n\nexport class APIError extends ClawOpsError {\n readonly request: { method: string; url: string };\n\n constructor(message: string, request: { method: string; url: string }) {\n super(message);\n this.name = 'APIError';\n this.request = request;\n }\n}\n\nexport class APIStatusError extends APIError {\n readonly status: number;\n readonly body: unknown;\n readonly headers: Headers | undefined;\n\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, request);\n this.name = 'APIStatusError';\n this.status = response.status;\n this.body = body;\n this.headers = response.headers;\n }\n}\n\nexport class BadRequestError extends APIStatusError {\n override readonly status = 400 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'BadRequestError';\n }\n}\n\nexport class AuthenticationError extends APIStatusError {\n override readonly status = 401 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class PermissionDeniedError extends APIStatusError {\n override readonly status = 403 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'PermissionDeniedError';\n }\n}\n\nexport class NotFoundError extends APIStatusError {\n override readonly status = 404 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'NotFoundError';\n }\n}\n\nexport class ConflictError extends APIStatusError {\n override readonly status = 409 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'ConflictError';\n }\n}\n\nexport class UnprocessableEntityError extends APIStatusError {\n override readonly status = 422 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'UnprocessableEntityError';\n }\n}\n\n/**\n * HTTP 429 Too Many Requests.\n *\n * 동시 통화 한도 초과 등 일시적 제한. SDK는 자동 재시도(최대 2회, 지수 backoff)를 수행한다.\n * 즉각 피드백이 필요하면 client 생성 시 maxRetries: 0으로 재시도를 비활성화하라.\n */\nexport class RateLimitError extends APIStatusError {\n override readonly status = 429 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'RateLimitError';\n }\n}\n\nexport class InternalServerError extends APIStatusError {\n override readonly status = 500 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'InternalServerError';\n }\n}\n\nexport class ServiceUnavailableError extends APIStatusError {\n override readonly status = 503 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'ServiceUnavailableError';\n }\n}\n\nexport class APIConnectionError extends APIError {\n constructor(request: { method: string; url: string }, message = 'Connection error.') {\n super(message, request);\n this.name = 'APIConnectionError';\n }\n}\n\nexport class APITimeoutError extends APIConnectionError {\n constructor(request: { method: string; url: string }) {\n super(request, 'Request timed out.');\n this.name = 'APITimeoutError';\n }\n}\n\nexport class APIResponseValidationError extends APIError {\n readonly status: number;\n\n constructor(response: { status: number }, request: { method: string; url: string }) {\n super('API response validation failed.', request);\n this.name = 'APIResponseValidationError';\n this.status = response.status;\n }\n}\n\nexport class AgentError extends ClawOpsError {\n constructor(message: string) {\n super(message);\n this.name = 'AgentError';\n }\n}\n\nexport class AgentConnectionError extends AgentError {\n constructor(message = 'Agent WebSocket connection failed.') {\n super(message);\n this.name = 'AgentConnectionError';\n }\n}\n\nconst STATUS_CODE_TO_ERROR: Record<\n number,\n new (\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) => APIStatusError\n> = {\n 400: BadRequestError,\n 401: AuthenticationError,\n 403: PermissionDeniedError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: UnprocessableEntityError,\n 429: RateLimitError,\n 500: InternalServerError,\n 503: ServiceUnavailableError,\n};\n\nexport function makeStatusError(\n status: number,\n body: unknown,\n headers: Headers | undefined,\n request: { method: string; url: string },\n): APIStatusError {\n let message = '';\n if (body && typeof body === 'object' && 'error' in body) {\n message = (body as { error: string }).error;\n } else {\n message = `HTTP ${status}`;\n }\n\n const ErrorClass = STATUS_CODE_TO_ERROR[status];\n if (ErrorClass) {\n return new ErrorClass(message, { status, headers }, body, request);\n }\n if (status >= 500) {\n return new InternalServerError(message, { status, headers }, body, request);\n }\n return new APIStatusError(message, { status, headers }, body, request);\n}\n","declare const __PKG_VERSION__: string;\n\nexport const VERSION: string = typeof __PKG_VERSION__ !== 'undefined'\n ? __PKG_VERSION__\n : 'dev';\n","export const DEFAULT_BASE_URL = 'https://api.claw-ops.com';\nexport const DEFAULT_MAX_RETRIES = 2;\nexport const DEFAULT_TIMEOUT = 600_000; // ms\nexport const INITIAL_RETRY_DELAY = 500; // ms\nexport const MAX_RETRY_DELAY = 8_000; // ms\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/error.ts","../src/version.ts","../src/constants.ts"],"names":[],"mappings":"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","file":"chunk-JTLOQURG.js","sourcesContent":["export class ClawOpsError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ClawOpsError';\n }\n}\n\nexport class APIError extends ClawOpsError {\n readonly request: { method: string; url: string };\n\n constructor(message: string, request: { method: string; url: string }) {\n super(message);\n this.name = 'APIError';\n this.request = request;\n }\n}\n\nexport class APIStatusError extends APIError {\n readonly status: number;\n readonly body: unknown;\n readonly headers: Headers | undefined;\n\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, request);\n this.name = 'APIStatusError';\n this.status = response.status;\n this.body = body;\n this.headers = response.headers;\n }\n}\n\nexport class BadRequestError extends APIStatusError {\n override readonly status = 400 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'BadRequestError';\n }\n}\n\nexport class AuthenticationError extends APIStatusError {\n override readonly status = 401 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'AuthenticationError';\n }\n}\n\nexport class PermissionDeniedError extends APIStatusError {\n override readonly status = 403 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'PermissionDeniedError';\n }\n}\n\nexport class NotFoundError extends APIStatusError {\n override readonly status = 404 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'NotFoundError';\n }\n}\n\nexport class ConflictError extends APIStatusError {\n override readonly status = 409 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'ConflictError';\n }\n}\n\nexport class UnprocessableEntityError extends APIStatusError {\n override readonly status = 422 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'UnprocessableEntityError';\n }\n}\n\n/**\n * HTTP 429 Too Many Requests.\n *\n * 동시 통화 한도 초과 등 일시적 제한. SDK는 자동 재시도(최대 2회, 지수 backoff)를 수행한다.\n * 즉각 피드백이 필요하면 client 생성 시 maxRetries: 0으로 재시도를 비활성화하라.\n */\nexport class RateLimitError extends APIStatusError {\n override readonly status = 429 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'RateLimitError';\n }\n}\n\nexport class InternalServerError extends APIStatusError {\n override readonly status = 500 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'InternalServerError';\n }\n}\n\nexport class ServiceUnavailableError extends APIStatusError {\n override readonly status = 503 as const;\n constructor(\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) {\n super(message, response, body, request);\n this.name = 'ServiceUnavailableError';\n }\n}\n\nexport class APIConnectionError extends APIError {\n constructor(request: { method: string; url: string }, message = 'Connection error.') {\n super(message, request);\n this.name = 'APIConnectionError';\n }\n}\n\nexport class APITimeoutError extends APIConnectionError {\n constructor(request: { method: string; url: string }) {\n super(request, 'Request timed out.');\n this.name = 'APITimeoutError';\n }\n}\n\nexport class APIResponseValidationError extends APIError {\n readonly status: number;\n\n constructor(response: { status: number }, request: { method: string; url: string }) {\n super('API response validation failed.', request);\n this.name = 'APIResponseValidationError';\n this.status = response.status;\n }\n}\n\nexport class AgentError extends ClawOpsError {\n constructor(message: string) {\n super(message);\n this.name = 'AgentError';\n }\n}\n\nexport class AgentConnectionError extends AgentError {\n constructor(message = 'Agent WebSocket connection failed.') {\n super(message);\n this.name = 'AgentConnectionError';\n }\n}\n\nconst STATUS_CODE_TO_ERROR: Record<\n number,\n new (\n message: string,\n response: { status: number; headers?: Headers },\n body: unknown,\n request: { method: string; url: string },\n ) => APIStatusError\n> = {\n 400: BadRequestError,\n 401: AuthenticationError,\n 403: PermissionDeniedError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: UnprocessableEntityError,\n 429: RateLimitError,\n 500: InternalServerError,\n 503: ServiceUnavailableError,\n};\n\nexport function makeStatusError(\n status: number,\n body: unknown,\n headers: Headers | undefined,\n request: { method: string; url: string },\n): APIStatusError {\n let message = '';\n if (body && typeof body === 'object' && 'error' in body) {\n message = (body as { error: string }).error;\n } else {\n message = `HTTP ${status}`;\n }\n\n const ErrorClass = STATUS_CODE_TO_ERROR[status];\n if (ErrorClass) {\n return new ErrorClass(message, { status, headers }, body, request);\n }\n if (status >= 500) {\n return new InternalServerError(message, { status, headers }, body, request);\n }\n return new APIStatusError(message, { status, headers }, body, request);\n}\n","declare const __PKG_VERSION__: string;\n\nexport const VERSION: string = typeof __PKG_VERSION__ !== 'undefined'\n ? __PKG_VERSION__\n : 'dev';\n","export const DEFAULT_BASE_URL = 'https://api.claw-ops.com';\nexport const DEFAULT_MAX_RETRIES = 2;\nexport const DEFAULT_TIMEOUT = 600_000; // ms\nexport const INITIAL_RETRY_DELAY = 500; // ms\nexport const MAX_RETRY_DELAY = 8_000; // ms\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var chunkENZ4B3I7_cjs = require('./chunk-ENZ4B3I7.cjs');
|
|
6
6
|
var zod = require('zod');
|
|
7
7
|
var crypto = require('crypto');
|
|
8
8
|
|
|
@@ -13,11 +13,11 @@ function validateBaseUrl(url) {
|
|
|
13
13
|
try {
|
|
14
14
|
parsed = new URL(url);
|
|
15
15
|
} catch {
|
|
16
|
-
throw new
|
|
16
|
+
throw new chunkENZ4B3I7_cjs.ClawOpsError(`Invalid base_url: ${url}`);
|
|
17
17
|
}
|
|
18
18
|
if (parsed.protocol === "https:") return url;
|
|
19
19
|
if (parsed.protocol === "http:" && LOCALHOST_HOSTS.has(parsed.hostname)) return url;
|
|
20
|
-
throw new
|
|
20
|
+
throw new chunkENZ4B3I7_cjs.ClawOpsError(
|
|
21
21
|
`base_url\uC740 HTTPS\uB97C \uC0AC\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4 (\uBC1B\uC740 \uAC12: '${url}'). \uB85C\uCEEC \uAC1C\uBC1C \uC2DC\uC5D0\uB294 http://localhost\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`
|
|
22
22
|
);
|
|
23
23
|
}
|
|
@@ -30,9 +30,9 @@ var APIClient = class {
|
|
|
30
30
|
_defaultHeaders;
|
|
31
31
|
constructor(options) {
|
|
32
32
|
this._apiKey = options.apiKey;
|
|
33
|
-
this._baseURL = validateBaseUrl((options.baseURL ??
|
|
34
|
-
this._maxRetries = options.maxRetries ??
|
|
35
|
-
this._timeout = options.timeout ??
|
|
33
|
+
this._baseURL = validateBaseUrl((options.baseURL ?? chunkENZ4B3I7_cjs.DEFAULT_BASE_URL).replace(/\/+$/, ""));
|
|
34
|
+
this._maxRetries = options.maxRetries ?? chunkENZ4B3I7_cjs.DEFAULT_MAX_RETRIES;
|
|
35
|
+
this._timeout = options.timeout ?? chunkENZ4B3I7_cjs.DEFAULT_TIMEOUT;
|
|
36
36
|
this._fetch = options.fetch ?? globalThis.fetch;
|
|
37
37
|
this._defaultHeaders = options.defaultHeaders ?? {};
|
|
38
38
|
}
|
|
@@ -41,7 +41,7 @@ var APIClient = class {
|
|
|
41
41
|
Authorization: `Bearer ${this._apiKey}`,
|
|
42
42
|
"Content-Type": "application/json",
|
|
43
43
|
Accept: "application/json",
|
|
44
|
-
"User-Agent": `claw-ops-node/${
|
|
44
|
+
"User-Agent": `claw-ops-node/${chunkENZ4B3I7_cjs.VERSION}`,
|
|
45
45
|
...this._defaultHeaders
|
|
46
46
|
};
|
|
47
47
|
if (extra) Object.assign(headers, extra);
|
|
@@ -77,14 +77,14 @@ var APIClient = class {
|
|
|
77
77
|
await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));
|
|
78
78
|
continue;
|
|
79
79
|
}
|
|
80
|
-
throw new
|
|
80
|
+
throw new chunkENZ4B3I7_cjs.APITimeoutError({ method: method2, url });
|
|
81
81
|
}
|
|
82
82
|
if (retriesLeft > 0) {
|
|
83
83
|
retriesLeft--;
|
|
84
84
|
await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));
|
|
85
85
|
continue;
|
|
86
86
|
}
|
|
87
|
-
throw new
|
|
87
|
+
throw new chunkENZ4B3I7_cjs.APIConnectionError({ method: method2, url });
|
|
88
88
|
} finally {
|
|
89
89
|
clearTimeout(timeoutId);
|
|
90
90
|
}
|
|
@@ -96,11 +96,11 @@ var APIClient = class {
|
|
|
96
96
|
try {
|
|
97
97
|
json = await response.json();
|
|
98
98
|
} catch {
|
|
99
|
-
throw new
|
|
99
|
+
throw new chunkENZ4B3I7_cjs.APIResponseValidationError({ status: response.status }, { method: method2, url });
|
|
100
100
|
}
|
|
101
101
|
const parsed = options.castTo.safeParse(json);
|
|
102
102
|
if (!parsed.success) {
|
|
103
|
-
throw new
|
|
103
|
+
throw new chunkENZ4B3I7_cjs.APIResponseValidationError({ status: response.status }, { method: method2, url });
|
|
104
104
|
}
|
|
105
105
|
return parsed.data;
|
|
106
106
|
}
|
|
@@ -115,14 +115,14 @@ var APIClient = class {
|
|
|
115
115
|
} catch {
|
|
116
116
|
body = null;
|
|
117
117
|
}
|
|
118
|
-
throw
|
|
118
|
+
throw chunkENZ4B3I7_cjs.makeStatusError(response.status, body, response.headers, { method: method2, url });
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
_shouldRetry(status) {
|
|
122
122
|
return status === 408 || status === 409 || status === 429 || status >= 500;
|
|
123
123
|
}
|
|
124
124
|
_retryDelay(retriesTaken) {
|
|
125
|
-
const delay = Math.min(
|
|
125
|
+
const delay = Math.min(chunkENZ4B3I7_cjs.INITIAL_RETRY_DELAY * 2 ** retriesTaken, chunkENZ4B3I7_cjs.MAX_RETRY_DELAY);
|
|
126
126
|
return delay * (1 + Math.random());
|
|
127
127
|
}
|
|
128
128
|
_sleep(ms) {
|
|
@@ -270,6 +270,17 @@ var TranscriptRequestAcceptedSchema = zod.z.object({
|
|
|
270
270
|
status: zod.z.literal("pending"),
|
|
271
271
|
callId: zod.z.string()
|
|
272
272
|
}).passthrough();
|
|
273
|
+
var SummaryStatusSchema = zod.z.object({
|
|
274
|
+
status: zod.z.enum(["completed", "pending", "failed", "not_requested"]),
|
|
275
|
+
callId: zod.z.string().optional(),
|
|
276
|
+
resultJson: zod.z.record(zod.z.string(), zod.z.unknown()).nullable().optional(),
|
|
277
|
+
provider: zod.z.string().nullable().optional(),
|
|
278
|
+
model: zod.z.string().nullable().optional(),
|
|
279
|
+
promptVersion: zod.z.string().nullable().optional(),
|
|
280
|
+
schemaVersion: zod.z.string().nullable().optional(),
|
|
281
|
+
failedReason: zod.z.string().nullable().optional(),
|
|
282
|
+
updatedAt: zod.z.string().optional()
|
|
283
|
+
}).passthrough();
|
|
273
284
|
|
|
274
285
|
// src/resources/calls.ts
|
|
275
286
|
var Calls = class extends APIResource {
|
|
@@ -363,6 +374,19 @@ var Calls = class extends APIResource {
|
|
|
363
374
|
...options
|
|
364
375
|
});
|
|
365
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
* 통화 요약 상태 조회. transcript 가 완료된 통화에 대해 자동 생성된
|
|
379
|
+
* LLM 구조화 요약 결과를 반환합니다. completed 일 때 resultJson 채워짐.
|
|
380
|
+
*
|
|
381
|
+
* @throws NotFoundError (404) — 통화 없음
|
|
382
|
+
* @throws PermissionDeniedError (403) — accountId 불일치
|
|
383
|
+
*/
|
|
384
|
+
async getSummary(callId, options = {}) {
|
|
385
|
+
return this._client._get(`${this._basePath}/calls/${callId}/summary`, {
|
|
386
|
+
castTo: SummaryStatusSchema,
|
|
387
|
+
...options
|
|
388
|
+
});
|
|
389
|
+
}
|
|
366
390
|
};
|
|
367
391
|
var MessageSchema = zod.z.object({
|
|
368
392
|
messageId: zod.z.string(),
|
|
@@ -517,7 +541,7 @@ var AccountContext = class {
|
|
|
517
541
|
return new WebhookLogs(this._client, this._accountId);
|
|
518
542
|
}
|
|
519
543
|
};
|
|
520
|
-
var WebhookVerificationError = class extends
|
|
544
|
+
var WebhookVerificationError = class extends chunkENZ4B3I7_cjs.ClawOpsError {
|
|
521
545
|
constructor(message = "Webhook \uC11C\uBA85\uC774 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.") {
|
|
522
546
|
super(message);
|
|
523
547
|
this.name = "WebhookVerificationError";
|
|
@@ -547,13 +571,13 @@ var ClawOps = class extends APIClient {
|
|
|
547
571
|
constructor(options = {}) {
|
|
548
572
|
let apiKey = options.apiKey ?? process.env.CLAWOPS_API_KEY;
|
|
549
573
|
if (!apiKey) {
|
|
550
|
-
throw new
|
|
574
|
+
throw new chunkENZ4B3I7_cjs.ClawOpsError("apiKey\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_API_KEY \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
|
|
551
575
|
}
|
|
552
576
|
let accountId = options.accountId ?? process.env.CLAWOPS_ACCOUNT_ID;
|
|
553
577
|
if (!accountId) {
|
|
554
|
-
throw new
|
|
578
|
+
throw new chunkENZ4B3I7_cjs.ClawOpsError("accountId\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_ACCOUNT_ID \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
|
|
555
579
|
}
|
|
556
|
-
const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ??
|
|
580
|
+
const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? chunkENZ4B3I7_cjs.DEFAULT_BASE_URL;
|
|
557
581
|
super({
|
|
558
582
|
apiKey,
|
|
559
583
|
baseURL,
|
|
@@ -589,75 +613,75 @@ var client_default_default = ClawOps;
|
|
|
589
613
|
|
|
590
614
|
Object.defineProperty(exports, "APIConnectionError", {
|
|
591
615
|
enumerable: true,
|
|
592
|
-
get: function () { return
|
|
616
|
+
get: function () { return chunkENZ4B3I7_cjs.APIConnectionError; }
|
|
593
617
|
});
|
|
594
618
|
Object.defineProperty(exports, "APIError", {
|
|
595
619
|
enumerable: true,
|
|
596
|
-
get: function () { return
|
|
620
|
+
get: function () { return chunkENZ4B3I7_cjs.APIError; }
|
|
597
621
|
});
|
|
598
622
|
Object.defineProperty(exports, "APIResponseValidationError", {
|
|
599
623
|
enumerable: true,
|
|
600
|
-
get: function () { return
|
|
624
|
+
get: function () { return chunkENZ4B3I7_cjs.APIResponseValidationError; }
|
|
601
625
|
});
|
|
602
626
|
Object.defineProperty(exports, "APIStatusError", {
|
|
603
627
|
enumerable: true,
|
|
604
|
-
get: function () { return
|
|
628
|
+
get: function () { return chunkENZ4B3I7_cjs.APIStatusError; }
|
|
605
629
|
});
|
|
606
630
|
Object.defineProperty(exports, "APITimeoutError", {
|
|
607
631
|
enumerable: true,
|
|
608
|
-
get: function () { return
|
|
632
|
+
get: function () { return chunkENZ4B3I7_cjs.APITimeoutError; }
|
|
609
633
|
});
|
|
610
634
|
Object.defineProperty(exports, "AgentConnectionError", {
|
|
611
635
|
enumerable: true,
|
|
612
|
-
get: function () { return
|
|
636
|
+
get: function () { return chunkENZ4B3I7_cjs.AgentConnectionError; }
|
|
613
637
|
});
|
|
614
638
|
Object.defineProperty(exports, "AgentError", {
|
|
615
639
|
enumerable: true,
|
|
616
|
-
get: function () { return
|
|
640
|
+
get: function () { return chunkENZ4B3I7_cjs.AgentError; }
|
|
617
641
|
});
|
|
618
642
|
Object.defineProperty(exports, "AuthenticationError", {
|
|
619
643
|
enumerable: true,
|
|
620
|
-
get: function () { return
|
|
644
|
+
get: function () { return chunkENZ4B3I7_cjs.AuthenticationError; }
|
|
621
645
|
});
|
|
622
646
|
Object.defineProperty(exports, "BadRequestError", {
|
|
623
647
|
enumerable: true,
|
|
624
|
-
get: function () { return
|
|
648
|
+
get: function () { return chunkENZ4B3I7_cjs.BadRequestError; }
|
|
625
649
|
});
|
|
626
650
|
Object.defineProperty(exports, "ClawOpsError", {
|
|
627
651
|
enumerable: true,
|
|
628
|
-
get: function () { return
|
|
652
|
+
get: function () { return chunkENZ4B3I7_cjs.ClawOpsError; }
|
|
629
653
|
});
|
|
630
654
|
Object.defineProperty(exports, "ConflictError", {
|
|
631
655
|
enumerable: true,
|
|
632
|
-
get: function () { return
|
|
656
|
+
get: function () { return chunkENZ4B3I7_cjs.ConflictError; }
|
|
633
657
|
});
|
|
634
658
|
Object.defineProperty(exports, "InternalServerError", {
|
|
635
659
|
enumerable: true,
|
|
636
|
-
get: function () { return
|
|
660
|
+
get: function () { return chunkENZ4B3I7_cjs.InternalServerError; }
|
|
637
661
|
});
|
|
638
662
|
Object.defineProperty(exports, "NotFoundError", {
|
|
639
663
|
enumerable: true,
|
|
640
|
-
get: function () { return
|
|
664
|
+
get: function () { return chunkENZ4B3I7_cjs.NotFoundError; }
|
|
641
665
|
});
|
|
642
666
|
Object.defineProperty(exports, "PermissionDeniedError", {
|
|
643
667
|
enumerable: true,
|
|
644
|
-
get: function () { return
|
|
668
|
+
get: function () { return chunkENZ4B3I7_cjs.PermissionDeniedError; }
|
|
645
669
|
});
|
|
646
670
|
Object.defineProperty(exports, "RateLimitError", {
|
|
647
671
|
enumerable: true,
|
|
648
|
-
get: function () { return
|
|
672
|
+
get: function () { return chunkENZ4B3I7_cjs.RateLimitError; }
|
|
649
673
|
});
|
|
650
674
|
Object.defineProperty(exports, "ServiceUnavailableError", {
|
|
651
675
|
enumerable: true,
|
|
652
|
-
get: function () { return
|
|
676
|
+
get: function () { return chunkENZ4B3I7_cjs.ServiceUnavailableError; }
|
|
653
677
|
});
|
|
654
678
|
Object.defineProperty(exports, "UnprocessableEntityError", {
|
|
655
679
|
enumerable: true,
|
|
656
|
-
get: function () { return
|
|
680
|
+
get: function () { return chunkENZ4B3I7_cjs.UnprocessableEntityError; }
|
|
657
681
|
});
|
|
658
682
|
Object.defineProperty(exports, "VERSION", {
|
|
659
683
|
enumerable: true,
|
|
660
|
-
get: function () { return
|
|
684
|
+
get: function () { return chunkENZ4B3I7_cjs.VERSION; }
|
|
661
685
|
});
|
|
662
686
|
exports.APIClient = APIClient;
|
|
663
687
|
exports.AccountContext = AccountContext;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/base-client.ts","../src/resource.ts","../src/util.ts","../src/types/shared.ts","../src/pagination.ts","../src/types/call.ts","../src/types/transcript.ts","../src/resources/calls.ts","../src/types/message.ts","../src/resources/messages.ts","../src/types/number.ts","../src/resources/numbers.ts","../src/types/webhook-log.ts","../src/resources/webhook-logs.ts","../src/resources/accounts.ts","../src/webhooks.ts","../src/client.ts","../src/client-default.ts"],"names":["ClawOpsError","DEFAULT_BASE_URL","DEFAULT_MAX_RETRIES","DEFAULT_TIMEOUT","VERSION","method","APITimeoutError","APIConnectionError","APIResponseValidationError","makeStatusError","INITIAL_RETRY_DELAY","MAX_RETRY_DELAY","z","timingSafeEqual","createHmac"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod';\nimport {\n DEFAULT_BASE_URL,\n DEFAULT_MAX_RETRIES,\n DEFAULT_TIMEOUT,\n INITIAL_RETRY_DELAY,\n MAX_RETRY_DELAY,\n} from './constants.js';\nimport {\n APIConnectionError,\n APIResponseValidationError,\n APITimeoutError,\n ClawOpsError,\n makeStatusError,\n} from './error.js';\nimport { VERSION } from './version.js';\n\nconst LOCALHOST_HOSTS = new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]']);\n\nfunction validateBaseUrl(url: string): string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new ClawOpsError(`Invalid base_url: ${url}`);\n }\n if (parsed.protocol === 'https:') return url;\n if (parsed.protocol === 'http:' && LOCALHOST_HOSTS.has(parsed.hostname)) return url;\n throw new ClawOpsError(\n `base_url은 HTTPS를 사용해야 합니다 (받은 값: '${url}'). ` +\n `로컬 개발 시에는 http://localhost를 사용할 수 있습니다.`,\n );\n}\n\nexport interface APIClientOptions {\n apiKey: string;\n baseURL?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof globalThis.fetch;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class APIClient {\n protected _apiKey: string;\n protected _baseURL: string;\n protected _maxRetries: number;\n protected _timeout: number;\n protected _fetch: typeof globalThis.fetch;\n protected _defaultHeaders: Record<string, string>;\n\n constructor(options: APIClientOptions) {\n this._apiKey = options.apiKey;\n this._baseURL = validateBaseUrl((options.baseURL ?? DEFAULT_BASE_URL).replace(/\\/+$/, ''));\n this._maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this._timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this._fetch = options.fetch ?? globalThis.fetch;\n this._defaultHeaders = options.defaultHeaders ?? {};\n }\n\n private _buildHeaders(extra?: Record<string, string>): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this._apiKey}`,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'User-Agent': `claw-ops-node/${VERSION}`,\n ...this._defaultHeaders,\n };\n if (extra) Object.assign(headers, extra);\n return headers;\n }\n\n protected async _request<T>(\n method: string,\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n query?: Record<string, unknown> | null;\n castTo?: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<T | null> {\n const headers = this._buildHeaders(options.extraHeaders);\n\n const params = new URLSearchParams();\n const queryObj = { ...options.query, ...options.extraQuery };\n for (const [k, v] of Object.entries(queryObj)) {\n if (v != null) params.set(k, String(v));\n }\n\n const queryString = params.toString();\n const url = `${this._baseURL}${path}${queryString ? `?${queryString}` : ''}`;\n const reqTimeout = options.timeout ?? this._timeout;\n\n let retriesLeft = this._maxRetries;\n\n while (true) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), reqTimeout);\n\n let response: Response;\n try {\n response = await this._fetch(url, {\n method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n clearTimeout(timeoutId);\n if (err instanceof DOMException && err.name === 'AbortError') {\n if (retriesLeft > 0) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n throw new APITimeoutError({ method, url });\n }\n if (retriesLeft > 0) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n throw new APIConnectionError({ method, url });\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (response.ok) {\n if (response.status === 204 || !options.castTo) {\n return null;\n }\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new APIResponseValidationError({ status: response.status }, { method, url });\n }\n const parsed = options.castTo.safeParse(json);\n if (!parsed.success) {\n throw new APIResponseValidationError({ status: response.status }, { method, url });\n }\n return parsed.data;\n }\n\n if (retriesLeft > 0 && this._shouldRetry(response.status)) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = null;\n }\n throw makeStatusError(response.status, body, response.headers, { method, url });\n }\n }\n\n private _shouldRetry(status: number): boolean {\n return status === 408 || status === 409 || status === 429 || status >= 500;\n }\n\n private _retryDelay(retriesTaken: number): number {\n const delay = Math.min(INITIAL_RETRY_DELAY * 2 ** retriesTaken, MAX_RETRY_DELAY);\n return delay * (1 + Math.random());\n }\n\n private _sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n async _get<T>(\n path: string,\n options: {\n castTo: z.ZodType<T>;\n query?: Record<string, unknown> | null;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>(method('GET'), path, options);\n return result!;\n }\n\n async _post<T>(\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n castTo: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>('POST', path, options);\n return result!;\n }\n\n async _put<T>(\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n castTo: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>('PUT', path, options);\n return result!;\n }\n\n async _delete(\n path: string,\n options: {\n extraHeaders?: Record<string, string>;\n timeout?: number;\n } = {},\n ): Promise<void> {\n await this._request('DELETE', path, options);\n }\n}\n\nfunction method(m: string): string {\n return m;\n}\n","import type { APIClient } from './base-client.js';\n\nexport class APIResource {\n protected _client: APIClient;\n protected _accountId: string;\n\n constructor(client: APIClient, accountId: string) {\n this._client = client;\n this._accountId = accountId;\n }\n\n protected get _basePath(): string {\n return `/v1/accounts/${this._accountId}`;\n }\n}\n","/**\n * snake_case를 camelCase로 변환합니다.\n * trailing underscore(예약어 회피용)는 제거합니다.\n * 예: 'from_' -> 'from', 'account_id' -> 'accountId'\n */\nexport function toCamelCase(snake: string): string {\n if (snake.endsWith('_')) {\n snake = snake.slice(0, -1);\n }\n const parts = snake.split('_');\n return parts[0] + parts.slice(1).map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join('');\n}\n\n/**\n * null/undefined 값을 제거하여 API에 불필요한 필드를 보내지 않습니다.\n */\nexport function stripNotGiven(data: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data)) {\n if (v != null) {\n result[k] = v;\n }\n }\n return result;\n}\n","import { z } from 'zod';\n\nexport const PaginationMetaSchema = z\n .object({\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n })\n .passthrough();\n\nexport type PaginationMeta = z.infer<typeof PaginationMetaSchema>;\n","import { z } from 'zod';\nimport type { APIClient } from './base-client.js';\nimport { PaginationMetaSchema } from './types/shared.js';\n\nexport function PageSchema<T>(itemSchema: z.ZodType<T>) {\n return z\n .object({\n data: z.array(itemSchema),\n meta: PaginationMetaSchema,\n })\n .passthrough();\n}\n\nexport class Page<T> {\n data: T[];\n meta: { total: number; page: number; pageSize: number };\n\n private _client: APIClient | null = null;\n private _path = '';\n private _itemSchema: z.ZodType<T> | null = null;\n private _query: Record<string, unknown> = {};\n\n constructor(data: T[], meta: { total: number; page: number; pageSize: number }) {\n this.data = data;\n this.meta = meta;\n }\n\n /** @internal */\n _setClient(\n client: APIClient,\n path: string,\n itemSchema: z.ZodType<T>,\n query: Record<string, unknown>,\n ): void {\n this._client = client;\n this._path = path;\n this._itemSchema = itemSchema;\n this._query = query;\n }\n\n hasNextPage(): boolean {\n return (this.meta.page + 1) * this.meta.pageSize < this.meta.total;\n }\n\n async nextPage(): Promise<Page<T>> {\n if (!this._client || !this._itemSchema) {\n throw new Error('Page client is not set');\n }\n if (!this.hasNextPage()) {\n throw new Error('No more pages');\n }\n const nextQuery = { ...this._query, page: this.meta.page + 1 };\n const schema = PageSchema(this._itemSchema);\n\n const raw = await this._client._get(this._path, {\n castTo: schema,\n query: nextQuery,\n });\n\n const page = new Page<T>(raw.data, raw.meta);\n page._setClient(this._client, this._path, this._itemSchema, this._query);\n return page;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.data[Symbol.iterator]();\n }\n\n async *autoPagingIter(): AsyncGenerator<T> {\n let page: Page<T> = this;\n while (true) {\n for (const item of page.data) {\n yield item;\n }\n if (!page.hasNextPage()) break;\n page = await page.nextPage();\n }\n }\n}\n","import { z } from 'zod';\n\nexport const CallSchema = z\n .object({\n callId: z.string(),\n status: z.enum(['queued', 'ringing', 'in-progress', 'completed', 'failed']),\n to: z.string(),\n from: z.string(),\n direction: z.enum(['outbound', 'inbound']),\n duration: z.number().nullable().optional(),\n accountId: z.string(),\n dateCreated: z.string(),\n dateUpdated: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type Call = z.infer<typeof CallSchema>;\n\nexport const CallControlResponseSchema = z\n .object({\n callId: z.string(),\n status: z.string(),\n })\n .passthrough();\n\nexport type CallControlResponse = z.infer<typeof CallControlResponseSchema>;\n","import { z } from 'zod';\n\nexport const TranscriptSegmentSchema = z\n .object({\n speaker: z.enum(['CUSTOMER', 'AGENT']),\n start: z.number(),\n end: z.number(),\n text: z.string(),\n })\n .passthrough();\n\nexport type TranscriptSegment = z.infer<typeof TranscriptSegmentSchema>;\n\n/**\n * 통화 전사 상태. status 에 따라 채워지는 필드가 다름:\n * - \"completed\": callId, segmentCount, segments\n * - \"pending\": startedAt\n * - \"failed\": stage, error. stage=\"trigger\" 는 시스템 실패로 재요청 가능\n * - \"not_requested\": 이외 필드 비어있음\n */\nexport const TranscriptStatusSchema = z\n .object({\n status: z.enum(['completed', 'pending', 'failed', 'not_requested']),\n callId: z.string().optional(),\n segmentCount: z.number().optional(),\n segments: z.array(TranscriptSegmentSchema).optional(),\n startedAt: z.string().optional(),\n stage: z.enum(['download', 'runtime', 'trigger']).nullable().optional(),\n error: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type TranscriptStatus = z.infer<typeof TranscriptStatusSchema>;\n\n/** POST 요청이 accept 되어 Job 이 트리거된 상태 (202). */\nexport const TranscriptRequestAcceptedSchema = z\n .object({\n status: z.literal('pending'),\n callId: z.string(),\n })\n .passthrough();\n\nexport type TranscriptRequestAccepted = z.infer<typeof TranscriptRequestAcceptedSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { CallSchema, CallControlResponseSchema } from '../types/call.js';\nimport type { Call, CallControlResponse } from '../types/call.js';\nimport type { CallCreateParams, CallListParams } from '../types/call-params.js';\nimport {\n TranscriptStatusSchema,\n TranscriptRequestAcceptedSchema,\n} from '../types/transcript.js';\nimport type { TranscriptStatus, TranscriptRequestAccepted } from '../types/transcript.js';\n\nexport class Calls extends APIResource {\n async create(\n params: CallCreateParams,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Call> {\n const body = stripNotGiven({\n To: params.to,\n From: params.from,\n Url: params.url,\n AI: params.ai\n ? stripNotGiven({\n Provider: params.ai.provider,\n Model: params.ai.model,\n ApiKey: params.ai.apiKey,\n Voice: params.ai.voice,\n Language: params.ai.language,\n Messages: params.ai.messages,\n Tools: params.ai.tools,\n Greeting: params.ai.greeting,\n TurnDetection: params.ai.turnDetection,\n RealtimeInputConfig: params.ai.realtimeInputConfig,\n })\n : undefined,\n StatusCallback: params.statusCallback,\n StatusCallbackEvent: params.statusCallbackEvent,\n Timeout: params.timeout,\n });\n return this._client._post(`${this._basePath}/calls`, {\n body,\n castTo: CallSchema,\n ...options,\n });\n }\n\n async list(\n params: CallListParams = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<Call>> {\n const query = stripNotGiven({\n status: params.status,\n from: params.from,\n to: params.to,\n number: params.number,\n page: params.page,\n pageSize: params.pageSize,\n });\n const path = `${this._basePath}/calls`;\n const schema = PageSchema(CallSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<Call>(raw.data, raw.meta);\n page._setClient(this._client, path, CallSchema, query);\n return page;\n }\n\n async get(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Call> {\n return this._client._get(`${this._basePath}/calls/${callId}`, {\n castTo: CallSchema,\n ...options,\n });\n }\n\n async update(\n callId: string,\n params: { status?: 'completed' } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<CallControlResponse> {\n return this._client._post(`${this._basePath}/calls/${callId}`, {\n body: { Status: params.status ?? 'completed' },\n castTo: CallControlResponseSchema,\n ...options,\n });\n }\n\n /**\n * 통화 전사 상태 조회. 완료된 경우 segment 배열까지 한 번에 반환합니다.\n *\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n */\n async getTranscript(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<TranscriptStatus> {\n return this._client._get(`${this._basePath}/calls/${callId}/transcript`, {\n castTo: TranscriptStatusSchema,\n ...options,\n });\n }\n\n /**\n * 특정 통화 1 건에 대해 전사를 명시 요청.\n * 조직 설정 \"통화 받아쓰기\" 가 꺼져 있어도 해당 통화만 전사됩니다.\n * 재실행 금지 — 이미 요청된 통화는 ConflictError(409) 발생.\n * 시스템 레벨 트리거 실패(stage=trigger) 만 재시도 가능.\n * 전사된 오디오 길이만큼 사용량 기반으로 과금됩니다.\n *\n * @throws BadRequestError (400) — 녹음 없음\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n * @throws ConflictError (409) — 이미 요청됨\n */\n async requestTranscript(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<TranscriptRequestAccepted> {\n return this._client._post(`${this._basePath}/calls/${callId}/transcript`, {\n castTo: TranscriptRequestAcceptedSchema,\n ...options,\n });\n }\n}\n","import { z } from 'zod';\n\nexport const MessageSchema = z\n .object({\n messageId: z.string(),\n status: z.enum(['queued', 'sending', 'sent', 'failed', 'received']),\n type: z.enum(['sms', 'lms', 'mms', 'rcs', 'kakao']),\n to: z.string(),\n from: z.string(),\n body: z.string().nullable().optional(),\n subject: z.string().nullable().optional(),\n numMedia: z.number(),\n mediaUrl: z.array(z.string()),\n direction: z.enum(['outbound', 'inbound']),\n accountId: z.string(),\n dateCreated: z.string(),\n dateUpdated: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type Message = z.infer<typeof MessageSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { MessageSchema } from '../types/message.js';\nimport type { Message } from '../types/message.js';\nimport type { MessageCreateParams, MessageListParams } from '../types/message-params.js';\n\nexport class Messages extends APIResource {\n async create(\n params: MessageCreateParams,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Message> {\n const body = stripNotGiven({\n To: params.to,\n From: params.from,\n Body: params.body,\n Type: params.type,\n Subject: params.subject,\n MediaUrl: params.mediaUrl,\n });\n return this._client._post(`${this._basePath}/messages`, {\n body,\n castTo: MessageSchema,\n ...options,\n });\n }\n\n async list(\n params: MessageListParams = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<Message>> {\n const query = stripNotGiven({\n type: params.type,\n status: params.status,\n page: params.page,\n pageSize: params.pageSize,\n });\n const path = `${this._basePath}/messages`;\n const schema = PageSchema(MessageSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<Message>(raw.data, raw.meta);\n page._setClient(this._client, path, MessageSchema, query);\n return page;\n }\n\n async get(\n messageId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Message> {\n return this._client._get(`${this._basePath}/messages/${messageId}`, {\n castTo: MessageSchema,\n ...options,\n });\n }\n}\n","import { z } from 'zod';\n\nexport const PhoneNumberSchema = z\n .object({\n number: z.string(),\n source: z.string().nullable().optional(),\n webhookUrl: z.string().nullable().optional(),\n webhookMethod: z.enum(['POST', 'GET']).nullable().optional(),\n createdAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type PhoneNumber = z.infer<typeof PhoneNumberSchema>;\nexport type NumberListItem = PhoneNumber;\nexport type NumberUpdateResponse = PhoneNumber;\n","import { z } from 'zod';\nimport { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { PhoneNumberSchema } from '../types/number.js';\nimport type { PhoneNumber, NumberListItem, NumberUpdateResponse } from '../types/number.js';\n\nexport class Numbers extends APIResource {\n async create(\n params: { webhookUrl?: string } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<PhoneNumber> {\n const body = stripNotGiven({ webhookUrl: params.webhookUrl });\n return this._client._post(`${this._basePath}/numbers`, {\n body: Object.keys(body).length ? body : undefined,\n castTo: PhoneNumberSchema,\n ...options,\n });\n }\n\n async list(\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<NumberListItem[]> {\n const schema = z.object({ data: z.array(PhoneNumberSchema) }).passthrough();\n const result = await this._client._get(`${this._basePath}/numbers`, {\n castTo: schema,\n ...options,\n });\n return result.data;\n }\n\n async update(\n number: string,\n params: { webhookUrl?: string; webhookMethod?: 'POST' | 'GET' } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<NumberUpdateResponse> {\n const body = stripNotGiven({\n webhookUrl: params.webhookUrl,\n webhookMethod: params.webhookMethod,\n });\n return this._client._put(`${this._basePath}/numbers/${number}`, {\n body,\n castTo: PhoneNumberSchema,\n ...options,\n });\n }\n\n async delete(\n number: string,\n options: {\n extraHeaders?: Record<string, string>;\n timeout?: number;\n } = {},\n ): Promise<void> {\n await this._client._delete(`${this._basePath}/numbers/${number}`, options);\n }\n}\n","import { z } from 'zod';\n\nexport const WebhookLogSchema = z\n .object({\n id: z.string(),\n webhookId: z.string(),\n event: z.string(),\n requestUrl: z.string(),\n requestPayload: z.record(z.unknown()),\n responseStatus: z.number().nullable().optional(),\n responseBody: z.string().nullable().optional(),\n responseTimeMs: z.number().nullable().optional(),\n status: z.enum(['pending', 'delivered', 'failed']),\n attempt: z.number(),\n maxAttempts: z.number(),\n createdAt: z.string(),\n completedAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type WebhookLog = z.infer<typeof WebhookLogSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { WebhookLogSchema } from '../types/webhook-log.js';\nimport type { WebhookLog } from '../types/webhook-log.js';\n\nexport class WebhookLogs extends APIResource {\n async list(\n webhookId: string,\n params: { page?: number; pageSize?: number } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<WebhookLog>> {\n const query = stripNotGiven({ page: params.page, pageSize: params.pageSize });\n const path = `${this._basePath}/webhooks/${webhookId}/logs`;\n const schema = PageSchema(WebhookLogSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<WebhookLog>(raw.data, raw.meta);\n page._setClient(this._client, path, WebhookLogSchema, query);\n return page;\n }\n}\n","import type { APIClient } from '../base-client.js';\nimport { Calls } from './calls.js';\nimport { Messages } from './messages.js';\nimport { Numbers } from './numbers.js';\nimport { WebhookLogs } from './webhook-logs.js';\n\nexport class AccountContext {\n private _client: APIClient;\n private _accountId: string;\n\n constructor(client: APIClient, accountId: string) {\n this._client = client;\n this._accountId = accountId;\n }\n\n get calls(): Calls {\n return new Calls(this._client, this._accountId);\n }\n\n get messages(): Messages {\n return new Messages(this._client, this._accountId);\n }\n\n get numbers(): Numbers {\n return new Numbers(this._client, this._accountId);\n }\n\n get webhookLogs(): WebhookLogs {\n return new WebhookLogs(this._client, this._accountId);\n }\n}\n","import { createHmac, timingSafeEqual } from 'node:crypto';\nimport { ClawOpsError } from './error.js';\n\nexport class WebhookVerificationError extends ClawOpsError {\n constructor(message = 'Webhook 서명이 일치하지 않습니다.') {\n super(message);\n this.name = 'WebhookVerificationError';\n }\n}\n\nexport class Webhooks {\n verify(options: {\n url: string;\n params: Record<string, string>;\n signature: string;\n signingKey: string;\n }): boolean {\n const expected = Webhooks._computeSignature(options.url, options.params, options.signingKey);\n const expectedBuf = Buffer.from(expected, 'utf-8');\n const signatureBuf = Buffer.from(options.signature, 'utf-8');\n\n if (expectedBuf.length !== signatureBuf.length || !timingSafeEqual(expectedBuf, signatureBuf)) {\n throw new WebhookVerificationError();\n }\n return true;\n }\n\n static _computeSignature(\n url: string,\n params: Record<string, string>,\n signingKey: string,\n ): string {\n const sortedParams = Object.keys(params)\n .sort()\n .map((k) => `${k}${params[k]}`)\n .join('');\n const dataToSign = url + sortedParams;\n const digest = createHmac('sha256', signingKey).update(dataToSign, 'utf-8').digest();\n return digest.toString('base64');\n }\n}\n","import { APIClient, type APIClientOptions } from './base-client.js';\nimport { DEFAULT_BASE_URL } from './constants.js';\nimport { ClawOpsError } from './error.js';\nimport { Calls } from './resources/calls.js';\nimport { Messages } from './resources/messages.js';\nimport { Numbers } from './resources/numbers.js';\nimport { WebhookLogs } from './resources/webhook-logs.js';\nimport { AccountContext } from './resources/accounts.js';\nimport { Webhooks } from './webhooks.js';\n\nexport interface ClawOpsOptions {\n apiKey?: string;\n accountId?: string;\n baseURL?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof globalThis.fetch;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class ClawOps extends APIClient {\n private _defaultAccountId: string;\n\n constructor(options: ClawOpsOptions = {}) {\n let apiKey = options.apiKey ?? process.env.CLAWOPS_API_KEY;\n if (!apiKey) {\n throw new ClawOpsError('apiKey를 지정하거나 CLAWOPS_API_KEY 환경변수를 설정하세요.');\n }\n\n let accountId = options.accountId ?? process.env.CLAWOPS_ACCOUNT_ID;\n if (!accountId) {\n throw new ClawOpsError('accountId를 지정하거나 CLAWOPS_ACCOUNT_ID 환경변수를 설정하세요.');\n }\n\n const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? DEFAULT_BASE_URL;\n\n super({\n apiKey,\n baseURL,\n timeout: options.timeout,\n maxRetries: options.maxRetries,\n fetch: options.fetch,\n defaultHeaders: options.defaultHeaders,\n });\n\n this._defaultAccountId = accountId;\n }\n\n get calls(): Calls {\n return new Calls(this, this._defaultAccountId);\n }\n\n get messages(): Messages {\n return new Messages(this, this._defaultAccountId);\n }\n\n get numbers(): Numbers {\n return new Numbers(this, this._defaultAccountId);\n }\n\n get webhookLogs(): WebhookLogs {\n return new WebhookLogs(this, this._defaultAccountId);\n }\n\n get webhooks(): Webhooks {\n return new Webhooks();\n }\n\n accounts(accountId: string): AccountContext {\n return new AccountContext(this, accountId);\n }\n}\n","import { ClawOps } from './client.js';\nexport default ClawOps;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/base-client.ts","../src/resource.ts","../src/util.ts","../src/types/shared.ts","../src/pagination.ts","../src/types/call.ts","../src/types/transcript.ts","../src/types/summary.ts","../src/resources/calls.ts","../src/types/message.ts","../src/resources/messages.ts","../src/types/number.ts","../src/resources/numbers.ts","../src/types/webhook-log.ts","../src/resources/webhook-logs.ts","../src/resources/accounts.ts","../src/webhooks.ts","../src/client.ts","../src/client-default.ts"],"names":["ClawOpsError","DEFAULT_BASE_URL","DEFAULT_MAX_RETRIES","DEFAULT_TIMEOUT","VERSION","method","APITimeoutError","APIConnectionError","APIResponseValidationError","makeStatusError","INITIAL_RETRY_DELAY","MAX_RETRY_DELAY","z","timingSafeEqual","createHmac"],"mappings":"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","file":"index.cjs","sourcesContent":["import { z } from 'zod';\nimport {\n DEFAULT_BASE_URL,\n DEFAULT_MAX_RETRIES,\n DEFAULT_TIMEOUT,\n INITIAL_RETRY_DELAY,\n MAX_RETRY_DELAY,\n} from './constants.js';\nimport {\n APIConnectionError,\n APIResponseValidationError,\n APITimeoutError,\n ClawOpsError,\n makeStatusError,\n} from './error.js';\nimport { VERSION } from './version.js';\n\nconst LOCALHOST_HOSTS = new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]']);\n\nfunction validateBaseUrl(url: string): string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new ClawOpsError(`Invalid base_url: ${url}`);\n }\n if (parsed.protocol === 'https:') return url;\n if (parsed.protocol === 'http:' && LOCALHOST_HOSTS.has(parsed.hostname)) return url;\n throw new ClawOpsError(\n `base_url은 HTTPS를 사용해야 합니다 (받은 값: '${url}'). ` +\n `로컬 개발 시에는 http://localhost를 사용할 수 있습니다.`,\n );\n}\n\nexport interface APIClientOptions {\n apiKey: string;\n baseURL?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof globalThis.fetch;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class APIClient {\n protected _apiKey: string;\n protected _baseURL: string;\n protected _maxRetries: number;\n protected _timeout: number;\n protected _fetch: typeof globalThis.fetch;\n protected _defaultHeaders: Record<string, string>;\n\n constructor(options: APIClientOptions) {\n this._apiKey = options.apiKey;\n this._baseURL = validateBaseUrl((options.baseURL ?? DEFAULT_BASE_URL).replace(/\\/+$/, ''));\n this._maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this._timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this._fetch = options.fetch ?? globalThis.fetch;\n this._defaultHeaders = options.defaultHeaders ?? {};\n }\n\n private _buildHeaders(extra?: Record<string, string>): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this._apiKey}`,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'User-Agent': `claw-ops-node/${VERSION}`,\n ...this._defaultHeaders,\n };\n if (extra) Object.assign(headers, extra);\n return headers;\n }\n\n protected async _request<T>(\n method: string,\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n query?: Record<string, unknown> | null;\n castTo?: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<T | null> {\n const headers = this._buildHeaders(options.extraHeaders);\n\n const params = new URLSearchParams();\n const queryObj = { ...options.query, ...options.extraQuery };\n for (const [k, v] of Object.entries(queryObj)) {\n if (v != null) params.set(k, String(v));\n }\n\n const queryString = params.toString();\n const url = `${this._baseURL}${path}${queryString ? `?${queryString}` : ''}`;\n const reqTimeout = options.timeout ?? this._timeout;\n\n let retriesLeft = this._maxRetries;\n\n while (true) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), reqTimeout);\n\n let response: Response;\n try {\n response = await this._fetch(url, {\n method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n clearTimeout(timeoutId);\n if (err instanceof DOMException && err.name === 'AbortError') {\n if (retriesLeft > 0) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n throw new APITimeoutError({ method, url });\n }\n if (retriesLeft > 0) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n throw new APIConnectionError({ method, url });\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (response.ok) {\n if (response.status === 204 || !options.castTo) {\n return null;\n }\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new APIResponseValidationError({ status: response.status }, { method, url });\n }\n const parsed = options.castTo.safeParse(json);\n if (!parsed.success) {\n throw new APIResponseValidationError({ status: response.status }, { method, url });\n }\n return parsed.data;\n }\n\n if (retriesLeft > 0 && this._shouldRetry(response.status)) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = null;\n }\n throw makeStatusError(response.status, body, response.headers, { method, url });\n }\n }\n\n private _shouldRetry(status: number): boolean {\n return status === 408 || status === 409 || status === 429 || status >= 500;\n }\n\n private _retryDelay(retriesTaken: number): number {\n const delay = Math.min(INITIAL_RETRY_DELAY * 2 ** retriesTaken, MAX_RETRY_DELAY);\n return delay * (1 + Math.random());\n }\n\n private _sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n async _get<T>(\n path: string,\n options: {\n castTo: z.ZodType<T>;\n query?: Record<string, unknown> | null;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>(method('GET'), path, options);\n return result!;\n }\n\n async _post<T>(\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n castTo: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>('POST', path, options);\n return result!;\n }\n\n async _put<T>(\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n castTo: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>('PUT', path, options);\n return result!;\n }\n\n async _delete(\n path: string,\n options: {\n extraHeaders?: Record<string, string>;\n timeout?: number;\n } = {},\n ): Promise<void> {\n await this._request('DELETE', path, options);\n }\n}\n\nfunction method(m: string): string {\n return m;\n}\n","import type { APIClient } from './base-client.js';\n\nexport class APIResource {\n protected _client: APIClient;\n protected _accountId: string;\n\n constructor(client: APIClient, accountId: string) {\n this._client = client;\n this._accountId = accountId;\n }\n\n protected get _basePath(): string {\n return `/v1/accounts/${this._accountId}`;\n }\n}\n","/**\n * snake_case를 camelCase로 변환합니다.\n * trailing underscore(예약어 회피용)는 제거합니다.\n * 예: 'from_' -> 'from', 'account_id' -> 'accountId'\n */\nexport function toCamelCase(snake: string): string {\n if (snake.endsWith('_')) {\n snake = snake.slice(0, -1);\n }\n const parts = snake.split('_');\n return parts[0] + parts.slice(1).map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join('');\n}\n\n/**\n * null/undefined 값을 제거하여 API에 불필요한 필드를 보내지 않습니다.\n */\nexport function stripNotGiven(data: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data)) {\n if (v != null) {\n result[k] = v;\n }\n }\n return result;\n}\n","import { z } from 'zod';\n\nexport const PaginationMetaSchema = z\n .object({\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n })\n .passthrough();\n\nexport type PaginationMeta = z.infer<typeof PaginationMetaSchema>;\n","import { z } from 'zod';\nimport type { APIClient } from './base-client.js';\nimport { PaginationMetaSchema } from './types/shared.js';\n\nexport function PageSchema<T>(itemSchema: z.ZodType<T>) {\n return z\n .object({\n data: z.array(itemSchema),\n meta: PaginationMetaSchema,\n })\n .passthrough();\n}\n\nexport class Page<T> {\n data: T[];\n meta: { total: number; page: number; pageSize: number };\n\n private _client: APIClient | null = null;\n private _path = '';\n private _itemSchema: z.ZodType<T> | null = null;\n private _query: Record<string, unknown> = {};\n\n constructor(data: T[], meta: { total: number; page: number; pageSize: number }) {\n this.data = data;\n this.meta = meta;\n }\n\n /** @internal */\n _setClient(\n client: APIClient,\n path: string,\n itemSchema: z.ZodType<T>,\n query: Record<string, unknown>,\n ): void {\n this._client = client;\n this._path = path;\n this._itemSchema = itemSchema;\n this._query = query;\n }\n\n hasNextPage(): boolean {\n return (this.meta.page + 1) * this.meta.pageSize < this.meta.total;\n }\n\n async nextPage(): Promise<Page<T>> {\n if (!this._client || !this._itemSchema) {\n throw new Error('Page client is not set');\n }\n if (!this.hasNextPage()) {\n throw new Error('No more pages');\n }\n const nextQuery = { ...this._query, page: this.meta.page + 1 };\n const schema = PageSchema(this._itemSchema);\n\n const raw = await this._client._get(this._path, {\n castTo: schema,\n query: nextQuery,\n });\n\n const page = new Page<T>(raw.data, raw.meta);\n page._setClient(this._client, this._path, this._itemSchema, this._query);\n return page;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.data[Symbol.iterator]();\n }\n\n async *autoPagingIter(): AsyncGenerator<T> {\n let page: Page<T> = this;\n while (true) {\n for (const item of page.data) {\n yield item;\n }\n if (!page.hasNextPage()) break;\n page = await page.nextPage();\n }\n }\n}\n","import { z } from 'zod';\n\nexport const CallSchema = z\n .object({\n callId: z.string(),\n status: z.enum(['queued', 'ringing', 'in-progress', 'completed', 'failed']),\n to: z.string(),\n from: z.string(),\n direction: z.enum(['outbound', 'inbound']),\n duration: z.number().nullable().optional(),\n accountId: z.string(),\n dateCreated: z.string(),\n dateUpdated: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type Call = z.infer<typeof CallSchema>;\n\nexport const CallControlResponseSchema = z\n .object({\n callId: z.string(),\n status: z.string(),\n })\n .passthrough();\n\nexport type CallControlResponse = z.infer<typeof CallControlResponseSchema>;\n","import { z } from 'zod';\n\nexport const TranscriptSegmentSchema = z\n .object({\n speaker: z.enum(['CUSTOMER', 'AGENT']),\n start: z.number(),\n end: z.number(),\n text: z.string(),\n })\n .passthrough();\n\nexport type TranscriptSegment = z.infer<typeof TranscriptSegmentSchema>;\n\n/**\n * 통화 전사 상태. status 에 따라 채워지는 필드가 다름:\n * - \"completed\": callId, segmentCount, segments\n * - \"pending\": startedAt\n * - \"failed\": stage, error. stage=\"trigger\" 는 시스템 실패로 재요청 가능\n * - \"not_requested\": 이외 필드 비어있음\n */\nexport const TranscriptStatusSchema = z\n .object({\n status: z.enum(['completed', 'pending', 'failed', 'not_requested']),\n callId: z.string().optional(),\n segmentCount: z.number().optional(),\n segments: z.array(TranscriptSegmentSchema).optional(),\n startedAt: z.string().optional(),\n stage: z.enum(['download', 'runtime', 'trigger']).nullable().optional(),\n error: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type TranscriptStatus = z.infer<typeof TranscriptStatusSchema>;\n\n/** POST 요청이 accept 되어 Job 이 트리거된 상태 (202). */\nexport const TranscriptRequestAcceptedSchema = z\n .object({\n status: z.literal('pending'),\n callId: z.string(),\n })\n .passthrough();\n\nexport type TranscriptRequestAccepted = z.infer<typeof TranscriptRequestAcceptedSchema>;\n","import { z } from 'zod';\n\n/**\n * 통화 요약 상태. status 에 따라 채워지는 필드가 다름:\n * - \"completed\": callId, resultJson, provider, model, promptVersion, schemaVersion, updatedAt\n * - \"pending\": 이외 필드 비어있음\n * - \"failed\": failedReason\n * - \"not_requested\": 통화는 있지만 요약 row 가 아직 없음\n */\nexport const SummaryStatusSchema = z\n .object({\n status: z.enum(['completed', 'pending', 'failed', 'not_requested']),\n callId: z.string().optional(),\n resultJson: z.record(z.string(), z.unknown()).nullable().optional(),\n provider: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n promptVersion: z.string().nullable().optional(),\n schemaVersion: z.string().nullable().optional(),\n failedReason: z.string().nullable().optional(),\n updatedAt: z.string().optional(),\n })\n .passthrough();\n\nexport type SummaryStatus = z.infer<typeof SummaryStatusSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { CallSchema, CallControlResponseSchema } from '../types/call.js';\nimport type { Call, CallControlResponse } from '../types/call.js';\nimport type { CallCreateParams, CallListParams } from '../types/call-params.js';\nimport {\n TranscriptStatusSchema,\n TranscriptRequestAcceptedSchema,\n} from '../types/transcript.js';\nimport type { TranscriptStatus, TranscriptRequestAccepted } from '../types/transcript.js';\nimport { SummaryStatusSchema } from '../types/summary.js';\nimport type { SummaryStatus } from '../types/summary.js';\n\nexport class Calls extends APIResource {\n async create(\n params: CallCreateParams,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Call> {\n const body = stripNotGiven({\n To: params.to,\n From: params.from,\n Url: params.url,\n AI: params.ai\n ? stripNotGiven({\n Provider: params.ai.provider,\n Model: params.ai.model,\n ApiKey: params.ai.apiKey,\n Voice: params.ai.voice,\n Language: params.ai.language,\n Messages: params.ai.messages,\n Tools: params.ai.tools,\n Greeting: params.ai.greeting,\n TurnDetection: params.ai.turnDetection,\n RealtimeInputConfig: params.ai.realtimeInputConfig,\n })\n : undefined,\n StatusCallback: params.statusCallback,\n StatusCallbackEvent: params.statusCallbackEvent,\n Timeout: params.timeout,\n });\n return this._client._post(`${this._basePath}/calls`, {\n body,\n castTo: CallSchema,\n ...options,\n });\n }\n\n async list(\n params: CallListParams = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<Call>> {\n const query = stripNotGiven({\n status: params.status,\n from: params.from,\n to: params.to,\n number: params.number,\n page: params.page,\n pageSize: params.pageSize,\n });\n const path = `${this._basePath}/calls`;\n const schema = PageSchema(CallSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<Call>(raw.data, raw.meta);\n page._setClient(this._client, path, CallSchema, query);\n return page;\n }\n\n async get(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Call> {\n return this._client._get(`${this._basePath}/calls/${callId}`, {\n castTo: CallSchema,\n ...options,\n });\n }\n\n async update(\n callId: string,\n params: { status?: 'completed' } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<CallControlResponse> {\n return this._client._post(`${this._basePath}/calls/${callId}`, {\n body: { Status: params.status ?? 'completed' },\n castTo: CallControlResponseSchema,\n ...options,\n });\n }\n\n /**\n * 통화 전사 상태 조회. 완료된 경우 segment 배열까지 한 번에 반환합니다.\n *\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n */\n async getTranscript(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<TranscriptStatus> {\n return this._client._get(`${this._basePath}/calls/${callId}/transcript`, {\n castTo: TranscriptStatusSchema,\n ...options,\n });\n }\n\n /**\n * 특정 통화 1 건에 대해 전사를 명시 요청.\n * 조직 설정 \"통화 받아쓰기\" 가 꺼져 있어도 해당 통화만 전사됩니다.\n * 재실행 금지 — 이미 요청된 통화는 ConflictError(409) 발생.\n * 시스템 레벨 트리거 실패(stage=trigger) 만 재시도 가능.\n * 전사된 오디오 길이만큼 사용량 기반으로 과금됩니다.\n *\n * @throws BadRequestError (400) — 녹음 없음\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n * @throws ConflictError (409) — 이미 요청됨\n */\n async requestTranscript(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<TranscriptRequestAccepted> {\n return this._client._post(`${this._basePath}/calls/${callId}/transcript`, {\n castTo: TranscriptRequestAcceptedSchema,\n ...options,\n });\n }\n\n /**\n * 통화 요약 상태 조회. transcript 가 완료된 통화에 대해 자동 생성된\n * LLM 구조화 요약 결과를 반환합니다. completed 일 때 resultJson 채워짐.\n *\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n */\n async getSummary(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<SummaryStatus> {\n return this._client._get(`${this._basePath}/calls/${callId}/summary`, {\n castTo: SummaryStatusSchema,\n ...options,\n });\n }\n}\n","import { z } from 'zod';\n\nexport const MessageSchema = z\n .object({\n messageId: z.string(),\n status: z.enum(['queued', 'sending', 'sent', 'failed', 'received']),\n type: z.enum(['sms', 'lms', 'mms', 'rcs', 'kakao']),\n to: z.string(),\n from: z.string(),\n body: z.string().nullable().optional(),\n subject: z.string().nullable().optional(),\n numMedia: z.number(),\n mediaUrl: z.array(z.string()),\n direction: z.enum(['outbound', 'inbound']),\n accountId: z.string(),\n dateCreated: z.string(),\n dateUpdated: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type Message = z.infer<typeof MessageSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { MessageSchema } from '../types/message.js';\nimport type { Message } from '../types/message.js';\nimport type { MessageCreateParams, MessageListParams } from '../types/message-params.js';\n\nexport class Messages extends APIResource {\n async create(\n params: MessageCreateParams,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Message> {\n const body = stripNotGiven({\n To: params.to,\n From: params.from,\n Body: params.body,\n Type: params.type,\n Subject: params.subject,\n MediaUrl: params.mediaUrl,\n });\n return this._client._post(`${this._basePath}/messages`, {\n body,\n castTo: MessageSchema,\n ...options,\n });\n }\n\n async list(\n params: MessageListParams = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<Message>> {\n const query = stripNotGiven({\n type: params.type,\n status: params.status,\n page: params.page,\n pageSize: params.pageSize,\n });\n const path = `${this._basePath}/messages`;\n const schema = PageSchema(MessageSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<Message>(raw.data, raw.meta);\n page._setClient(this._client, path, MessageSchema, query);\n return page;\n }\n\n async get(\n messageId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Message> {\n return this._client._get(`${this._basePath}/messages/${messageId}`, {\n castTo: MessageSchema,\n ...options,\n });\n }\n}\n","import { z } from 'zod';\n\nexport const PhoneNumberSchema = z\n .object({\n number: z.string(),\n source: z.string().nullable().optional(),\n webhookUrl: z.string().nullable().optional(),\n webhookMethod: z.enum(['POST', 'GET']).nullable().optional(),\n createdAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type PhoneNumber = z.infer<typeof PhoneNumberSchema>;\nexport type NumberListItem = PhoneNumber;\nexport type NumberUpdateResponse = PhoneNumber;\n","import { z } from 'zod';\nimport { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { PhoneNumberSchema } from '../types/number.js';\nimport type { PhoneNumber, NumberListItem, NumberUpdateResponse } from '../types/number.js';\n\nexport class Numbers extends APIResource {\n async create(\n params: { webhookUrl?: string } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<PhoneNumber> {\n const body = stripNotGiven({ webhookUrl: params.webhookUrl });\n return this._client._post(`${this._basePath}/numbers`, {\n body: Object.keys(body).length ? body : undefined,\n castTo: PhoneNumberSchema,\n ...options,\n });\n }\n\n async list(\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<NumberListItem[]> {\n const schema = z.object({ data: z.array(PhoneNumberSchema) }).passthrough();\n const result = await this._client._get(`${this._basePath}/numbers`, {\n castTo: schema,\n ...options,\n });\n return result.data;\n }\n\n async update(\n number: string,\n params: { webhookUrl?: string; webhookMethod?: 'POST' | 'GET' } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<NumberUpdateResponse> {\n const body = stripNotGiven({\n webhookUrl: params.webhookUrl,\n webhookMethod: params.webhookMethod,\n });\n return this._client._put(`${this._basePath}/numbers/${number}`, {\n body,\n castTo: PhoneNumberSchema,\n ...options,\n });\n }\n\n async delete(\n number: string,\n options: {\n extraHeaders?: Record<string, string>;\n timeout?: number;\n } = {},\n ): Promise<void> {\n await this._client._delete(`${this._basePath}/numbers/${number}`, options);\n }\n}\n","import { z } from 'zod';\n\nexport const WebhookLogSchema = z\n .object({\n id: z.string(),\n webhookId: z.string(),\n event: z.string(),\n requestUrl: z.string(),\n requestPayload: z.record(z.unknown()),\n responseStatus: z.number().nullable().optional(),\n responseBody: z.string().nullable().optional(),\n responseTimeMs: z.number().nullable().optional(),\n status: z.enum(['pending', 'delivered', 'failed']),\n attempt: z.number(),\n maxAttempts: z.number(),\n createdAt: z.string(),\n completedAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type WebhookLog = z.infer<typeof WebhookLogSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { WebhookLogSchema } from '../types/webhook-log.js';\nimport type { WebhookLog } from '../types/webhook-log.js';\n\nexport class WebhookLogs extends APIResource {\n async list(\n webhookId: string,\n params: { page?: number; pageSize?: number } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<WebhookLog>> {\n const query = stripNotGiven({ page: params.page, pageSize: params.pageSize });\n const path = `${this._basePath}/webhooks/${webhookId}/logs`;\n const schema = PageSchema(WebhookLogSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<WebhookLog>(raw.data, raw.meta);\n page._setClient(this._client, path, WebhookLogSchema, query);\n return page;\n }\n}\n","import type { APIClient } from '../base-client.js';\nimport { Calls } from './calls.js';\nimport { Messages } from './messages.js';\nimport { Numbers } from './numbers.js';\nimport { WebhookLogs } from './webhook-logs.js';\n\nexport class AccountContext {\n private _client: APIClient;\n private _accountId: string;\n\n constructor(client: APIClient, accountId: string) {\n this._client = client;\n this._accountId = accountId;\n }\n\n get calls(): Calls {\n return new Calls(this._client, this._accountId);\n }\n\n get messages(): Messages {\n return new Messages(this._client, this._accountId);\n }\n\n get numbers(): Numbers {\n return new Numbers(this._client, this._accountId);\n }\n\n get webhookLogs(): WebhookLogs {\n return new WebhookLogs(this._client, this._accountId);\n }\n}\n","import { createHmac, timingSafeEqual } from 'node:crypto';\nimport { ClawOpsError } from './error.js';\n\nexport class WebhookVerificationError extends ClawOpsError {\n constructor(message = 'Webhook 서명이 일치하지 않습니다.') {\n super(message);\n this.name = 'WebhookVerificationError';\n }\n}\n\nexport class Webhooks {\n verify(options: {\n url: string;\n params: Record<string, string>;\n signature: string;\n signingKey: string;\n }): boolean {\n const expected = Webhooks._computeSignature(options.url, options.params, options.signingKey);\n const expectedBuf = Buffer.from(expected, 'utf-8');\n const signatureBuf = Buffer.from(options.signature, 'utf-8');\n\n if (expectedBuf.length !== signatureBuf.length || !timingSafeEqual(expectedBuf, signatureBuf)) {\n throw new WebhookVerificationError();\n }\n return true;\n }\n\n static _computeSignature(\n url: string,\n params: Record<string, string>,\n signingKey: string,\n ): string {\n const sortedParams = Object.keys(params)\n .sort()\n .map((k) => `${k}${params[k]}`)\n .join('');\n const dataToSign = url + sortedParams;\n const digest = createHmac('sha256', signingKey).update(dataToSign, 'utf-8').digest();\n return digest.toString('base64');\n }\n}\n","import { APIClient, type APIClientOptions } from './base-client.js';\nimport { DEFAULT_BASE_URL } from './constants.js';\nimport { ClawOpsError } from './error.js';\nimport { Calls } from './resources/calls.js';\nimport { Messages } from './resources/messages.js';\nimport { Numbers } from './resources/numbers.js';\nimport { WebhookLogs } from './resources/webhook-logs.js';\nimport { AccountContext } from './resources/accounts.js';\nimport { Webhooks } from './webhooks.js';\n\nexport interface ClawOpsOptions {\n apiKey?: string;\n accountId?: string;\n baseURL?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof globalThis.fetch;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class ClawOps extends APIClient {\n private _defaultAccountId: string;\n\n constructor(options: ClawOpsOptions = {}) {\n let apiKey = options.apiKey ?? process.env.CLAWOPS_API_KEY;\n if (!apiKey) {\n throw new ClawOpsError('apiKey를 지정하거나 CLAWOPS_API_KEY 환경변수를 설정하세요.');\n }\n\n let accountId = options.accountId ?? process.env.CLAWOPS_ACCOUNT_ID;\n if (!accountId) {\n throw new ClawOpsError('accountId를 지정하거나 CLAWOPS_ACCOUNT_ID 환경변수를 설정하세요.');\n }\n\n const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? DEFAULT_BASE_URL;\n\n super({\n apiKey,\n baseURL,\n timeout: options.timeout,\n maxRetries: options.maxRetries,\n fetch: options.fetch,\n defaultHeaders: options.defaultHeaders,\n });\n\n this._defaultAccountId = accountId;\n }\n\n get calls(): Calls {\n return new Calls(this, this._defaultAccountId);\n }\n\n get messages(): Messages {\n return new Messages(this, this._defaultAccountId);\n }\n\n get numbers(): Numbers {\n return new Numbers(this, this._defaultAccountId);\n }\n\n get webhookLogs(): WebhookLogs {\n return new WebhookLogs(this, this._defaultAccountId);\n }\n\n get webhooks(): Webhooks {\n return new Webhooks();\n }\n\n accounts(accountId: string): AccountContext {\n return new AccountContext(this, accountId);\n }\n}\n","import { ClawOps } from './client.js';\nexport default ClawOps;\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -307,6 +307,46 @@ declare const TranscriptRequestAcceptedSchema: z.ZodObject<{
|
|
|
307
307
|
}, z.ZodTypeAny, "passthrough">>;
|
|
308
308
|
type TranscriptRequestAccepted = z.infer<typeof TranscriptRequestAcceptedSchema>;
|
|
309
309
|
|
|
310
|
+
/**
|
|
311
|
+
* 통화 요약 상태. status 에 따라 채워지는 필드가 다름:
|
|
312
|
+
* - "completed": callId, resultJson, provider, model, promptVersion, schemaVersion, updatedAt
|
|
313
|
+
* - "pending": 이외 필드 비어있음
|
|
314
|
+
* - "failed": failedReason
|
|
315
|
+
* - "not_requested": 통화는 있지만 요약 row 가 아직 없음
|
|
316
|
+
*/
|
|
317
|
+
declare const SummaryStatusSchema: z.ZodObject<{
|
|
318
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
319
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
320
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
321
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
322
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
323
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
324
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
325
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
326
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
327
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
328
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
329
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
330
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
331
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
332
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
333
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
334
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
335
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
336
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
337
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
338
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
339
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
340
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
341
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
342
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
343
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
344
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
345
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
346
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
347
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
348
|
+
type SummaryStatus = z.infer<typeof SummaryStatusSchema>;
|
|
349
|
+
|
|
310
350
|
declare class Calls extends APIResource {
|
|
311
351
|
create(params: CallCreateParams, options?: {
|
|
312
352
|
extraHeaders?: Record<string, string>;
|
|
@@ -358,6 +398,18 @@ declare class Calls extends APIResource {
|
|
|
358
398
|
extraQuery?: Record<string, unknown>;
|
|
359
399
|
timeout?: number;
|
|
360
400
|
}): Promise<TranscriptRequestAccepted>;
|
|
401
|
+
/**
|
|
402
|
+
* 통화 요약 상태 조회. transcript 가 완료된 통화에 대해 자동 생성된
|
|
403
|
+
* LLM 구조화 요약 결과를 반환합니다. completed 일 때 resultJson 채워짐.
|
|
404
|
+
*
|
|
405
|
+
* @throws NotFoundError (404) — 통화 없음
|
|
406
|
+
* @throws PermissionDeniedError (403) — accountId 불일치
|
|
407
|
+
*/
|
|
408
|
+
getSummary(callId: string, options?: {
|
|
409
|
+
extraHeaders?: Record<string, string>;
|
|
410
|
+
extraQuery?: Record<string, unknown>;
|
|
411
|
+
timeout?: number;
|
|
412
|
+
}): Promise<SummaryStatus>;
|
|
361
413
|
}
|
|
362
414
|
|
|
363
415
|
declare const MessageSchema: z.ZodObject<{
|
package/dist/index.d.ts
CHANGED
|
@@ -307,6 +307,46 @@ declare const TranscriptRequestAcceptedSchema: z.ZodObject<{
|
|
|
307
307
|
}, z.ZodTypeAny, "passthrough">>;
|
|
308
308
|
type TranscriptRequestAccepted = z.infer<typeof TranscriptRequestAcceptedSchema>;
|
|
309
309
|
|
|
310
|
+
/**
|
|
311
|
+
* 통화 요약 상태. status 에 따라 채워지는 필드가 다름:
|
|
312
|
+
* - "completed": callId, resultJson, provider, model, promptVersion, schemaVersion, updatedAt
|
|
313
|
+
* - "pending": 이외 필드 비어있음
|
|
314
|
+
* - "failed": failedReason
|
|
315
|
+
* - "not_requested": 통화는 있지만 요약 row 가 아직 없음
|
|
316
|
+
*/
|
|
317
|
+
declare const SummaryStatusSchema: z.ZodObject<{
|
|
318
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
319
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
320
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
321
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
322
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
323
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
324
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
325
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
326
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
327
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
328
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
329
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
330
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
331
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
332
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
333
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
334
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
335
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
336
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
337
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
338
|
+
status: z.ZodEnum<["completed", "pending", "failed", "not_requested"]>;
|
|
339
|
+
callId: z.ZodOptional<z.ZodString>;
|
|
340
|
+
resultJson: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
341
|
+
provider: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
342
|
+
model: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
343
|
+
promptVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
344
|
+
schemaVersion: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
345
|
+
failedReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
346
|
+
updatedAt: z.ZodOptional<z.ZodString>;
|
|
347
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
348
|
+
type SummaryStatus = z.infer<typeof SummaryStatusSchema>;
|
|
349
|
+
|
|
310
350
|
declare class Calls extends APIResource {
|
|
311
351
|
create(params: CallCreateParams, options?: {
|
|
312
352
|
extraHeaders?: Record<string, string>;
|
|
@@ -358,6 +398,18 @@ declare class Calls extends APIResource {
|
|
|
358
398
|
extraQuery?: Record<string, unknown>;
|
|
359
399
|
timeout?: number;
|
|
360
400
|
}): Promise<TranscriptRequestAccepted>;
|
|
401
|
+
/**
|
|
402
|
+
* 통화 요약 상태 조회. transcript 가 완료된 통화에 대해 자동 생성된
|
|
403
|
+
* LLM 구조화 요약 결과를 반환합니다. completed 일 때 resultJson 채워짐.
|
|
404
|
+
*
|
|
405
|
+
* @throws NotFoundError (404) — 통화 없음
|
|
406
|
+
* @throws PermissionDeniedError (403) — accountId 불일치
|
|
407
|
+
*/
|
|
408
|
+
getSummary(callId: string, options?: {
|
|
409
|
+
extraHeaders?: Record<string, string>;
|
|
410
|
+
extraQuery?: Record<string, unknown>;
|
|
411
|
+
timeout?: number;
|
|
412
|
+
}): Promise<SummaryStatus>;
|
|
361
413
|
}
|
|
362
414
|
|
|
363
415
|
declare const MessageSchema: z.ZodObject<{
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DEFAULT_BASE_URL, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, VERSION, APITimeoutError, APIConnectionError, APIResponseValidationError, makeStatusError, ClawOpsError, INITIAL_RETRY_DELAY, MAX_RETRY_DELAY } from './chunk-
|
|
2
|
-
export { APIConnectionError, APIError, APIResponseValidationError, APIStatusError, APITimeoutError, AgentConnectionError, AgentError, AuthenticationError, BadRequestError, ClawOpsError, ConflictError, InternalServerError, NotFoundError, PermissionDeniedError, RateLimitError, ServiceUnavailableError, UnprocessableEntityError, VERSION } from './chunk-
|
|
1
|
+
import { DEFAULT_BASE_URL, DEFAULT_MAX_RETRIES, DEFAULT_TIMEOUT, VERSION, APITimeoutError, APIConnectionError, APIResponseValidationError, makeStatusError, ClawOpsError, INITIAL_RETRY_DELAY, MAX_RETRY_DELAY } from './chunk-JTLOQURG.js';
|
|
2
|
+
export { APIConnectionError, APIError, APIResponseValidationError, APIStatusError, APITimeoutError, AgentConnectionError, AgentError, AuthenticationError, BadRequestError, ClawOpsError, ConflictError, InternalServerError, NotFoundError, PermissionDeniedError, RateLimitError, ServiceUnavailableError, UnprocessableEntityError, VERSION } from './chunk-JTLOQURG.js';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { timingSafeEqual, createHmac } from 'crypto';
|
|
5
5
|
|
|
@@ -267,6 +267,17 @@ var TranscriptRequestAcceptedSchema = z.object({
|
|
|
267
267
|
status: z.literal("pending"),
|
|
268
268
|
callId: z.string()
|
|
269
269
|
}).passthrough();
|
|
270
|
+
var SummaryStatusSchema = z.object({
|
|
271
|
+
status: z.enum(["completed", "pending", "failed", "not_requested"]),
|
|
272
|
+
callId: z.string().optional(),
|
|
273
|
+
resultJson: z.record(z.string(), z.unknown()).nullable().optional(),
|
|
274
|
+
provider: z.string().nullable().optional(),
|
|
275
|
+
model: z.string().nullable().optional(),
|
|
276
|
+
promptVersion: z.string().nullable().optional(),
|
|
277
|
+
schemaVersion: z.string().nullable().optional(),
|
|
278
|
+
failedReason: z.string().nullable().optional(),
|
|
279
|
+
updatedAt: z.string().optional()
|
|
280
|
+
}).passthrough();
|
|
270
281
|
|
|
271
282
|
// src/resources/calls.ts
|
|
272
283
|
var Calls = class extends APIResource {
|
|
@@ -360,6 +371,19 @@ var Calls = class extends APIResource {
|
|
|
360
371
|
...options
|
|
361
372
|
});
|
|
362
373
|
}
|
|
374
|
+
/**
|
|
375
|
+
* 통화 요약 상태 조회. transcript 가 완료된 통화에 대해 자동 생성된
|
|
376
|
+
* LLM 구조화 요약 결과를 반환합니다. completed 일 때 resultJson 채워짐.
|
|
377
|
+
*
|
|
378
|
+
* @throws NotFoundError (404) — 통화 없음
|
|
379
|
+
* @throws PermissionDeniedError (403) — accountId 불일치
|
|
380
|
+
*/
|
|
381
|
+
async getSummary(callId, options = {}) {
|
|
382
|
+
return this._client._get(`${this._basePath}/calls/${callId}/summary`, {
|
|
383
|
+
castTo: SummaryStatusSchema,
|
|
384
|
+
...options
|
|
385
|
+
});
|
|
386
|
+
}
|
|
363
387
|
};
|
|
364
388
|
var MessageSchema = z.object({
|
|
365
389
|
messageId: z.string(),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/base-client.ts","../src/resource.ts","../src/util.ts","../src/types/shared.ts","../src/pagination.ts","../src/types/call.ts","../src/types/transcript.ts","../src/resources/calls.ts","../src/types/message.ts","../src/resources/messages.ts","../src/types/number.ts","../src/resources/numbers.ts","../src/types/webhook-log.ts","../src/resources/webhook-logs.ts","../src/resources/accounts.ts","../src/webhooks.ts","../src/client.ts","../src/client-default.ts"],"names":["method","z"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\nimport {\n DEFAULT_BASE_URL,\n DEFAULT_MAX_RETRIES,\n DEFAULT_TIMEOUT,\n INITIAL_RETRY_DELAY,\n MAX_RETRY_DELAY,\n} from './constants.js';\nimport {\n APIConnectionError,\n APIResponseValidationError,\n APITimeoutError,\n ClawOpsError,\n makeStatusError,\n} from './error.js';\nimport { VERSION } from './version.js';\n\nconst LOCALHOST_HOSTS = new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]']);\n\nfunction validateBaseUrl(url: string): string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new ClawOpsError(`Invalid base_url: ${url}`);\n }\n if (parsed.protocol === 'https:') return url;\n if (parsed.protocol === 'http:' && LOCALHOST_HOSTS.has(parsed.hostname)) return url;\n throw new ClawOpsError(\n `base_url은 HTTPS를 사용해야 합니다 (받은 값: '${url}'). ` +\n `로컬 개발 시에는 http://localhost를 사용할 수 있습니다.`,\n );\n}\n\nexport interface APIClientOptions {\n apiKey: string;\n baseURL?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof globalThis.fetch;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class APIClient {\n protected _apiKey: string;\n protected _baseURL: string;\n protected _maxRetries: number;\n protected _timeout: number;\n protected _fetch: typeof globalThis.fetch;\n protected _defaultHeaders: Record<string, string>;\n\n constructor(options: APIClientOptions) {\n this._apiKey = options.apiKey;\n this._baseURL = validateBaseUrl((options.baseURL ?? DEFAULT_BASE_URL).replace(/\\/+$/, ''));\n this._maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this._timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this._fetch = options.fetch ?? globalThis.fetch;\n this._defaultHeaders = options.defaultHeaders ?? {};\n }\n\n private _buildHeaders(extra?: Record<string, string>): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this._apiKey}`,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'User-Agent': `claw-ops-node/${VERSION}`,\n ...this._defaultHeaders,\n };\n if (extra) Object.assign(headers, extra);\n return headers;\n }\n\n protected async _request<T>(\n method: string,\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n query?: Record<string, unknown> | null;\n castTo?: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<T | null> {\n const headers = this._buildHeaders(options.extraHeaders);\n\n const params = new URLSearchParams();\n const queryObj = { ...options.query, ...options.extraQuery };\n for (const [k, v] of Object.entries(queryObj)) {\n if (v != null) params.set(k, String(v));\n }\n\n const queryString = params.toString();\n const url = `${this._baseURL}${path}${queryString ? `?${queryString}` : ''}`;\n const reqTimeout = options.timeout ?? this._timeout;\n\n let retriesLeft = this._maxRetries;\n\n while (true) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), reqTimeout);\n\n let response: Response;\n try {\n response = await this._fetch(url, {\n method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n clearTimeout(timeoutId);\n if (err instanceof DOMException && err.name === 'AbortError') {\n if (retriesLeft > 0) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n throw new APITimeoutError({ method, url });\n }\n if (retriesLeft > 0) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n throw new APIConnectionError({ method, url });\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (response.ok) {\n if (response.status === 204 || !options.castTo) {\n return null;\n }\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new APIResponseValidationError({ status: response.status }, { method, url });\n }\n const parsed = options.castTo.safeParse(json);\n if (!parsed.success) {\n throw new APIResponseValidationError({ status: response.status }, { method, url });\n }\n return parsed.data;\n }\n\n if (retriesLeft > 0 && this._shouldRetry(response.status)) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = null;\n }\n throw makeStatusError(response.status, body, response.headers, { method, url });\n }\n }\n\n private _shouldRetry(status: number): boolean {\n return status === 408 || status === 409 || status === 429 || status >= 500;\n }\n\n private _retryDelay(retriesTaken: number): number {\n const delay = Math.min(INITIAL_RETRY_DELAY * 2 ** retriesTaken, MAX_RETRY_DELAY);\n return delay * (1 + Math.random());\n }\n\n private _sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n async _get<T>(\n path: string,\n options: {\n castTo: z.ZodType<T>;\n query?: Record<string, unknown> | null;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>(method('GET'), path, options);\n return result!;\n }\n\n async _post<T>(\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n castTo: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>('POST', path, options);\n return result!;\n }\n\n async _put<T>(\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n castTo: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>('PUT', path, options);\n return result!;\n }\n\n async _delete(\n path: string,\n options: {\n extraHeaders?: Record<string, string>;\n timeout?: number;\n } = {},\n ): Promise<void> {\n await this._request('DELETE', path, options);\n }\n}\n\nfunction method(m: string): string {\n return m;\n}\n","import type { APIClient } from './base-client.js';\n\nexport class APIResource {\n protected _client: APIClient;\n protected _accountId: string;\n\n constructor(client: APIClient, accountId: string) {\n this._client = client;\n this._accountId = accountId;\n }\n\n protected get _basePath(): string {\n return `/v1/accounts/${this._accountId}`;\n }\n}\n","/**\n * snake_case를 camelCase로 변환합니다.\n * trailing underscore(예약어 회피용)는 제거합니다.\n * 예: 'from_' -> 'from', 'account_id' -> 'accountId'\n */\nexport function toCamelCase(snake: string): string {\n if (snake.endsWith('_')) {\n snake = snake.slice(0, -1);\n }\n const parts = snake.split('_');\n return parts[0] + parts.slice(1).map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join('');\n}\n\n/**\n * null/undefined 값을 제거하여 API에 불필요한 필드를 보내지 않습니다.\n */\nexport function stripNotGiven(data: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data)) {\n if (v != null) {\n result[k] = v;\n }\n }\n return result;\n}\n","import { z } from 'zod';\n\nexport const PaginationMetaSchema = z\n .object({\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n })\n .passthrough();\n\nexport type PaginationMeta = z.infer<typeof PaginationMetaSchema>;\n","import { z } from 'zod';\nimport type { APIClient } from './base-client.js';\nimport { PaginationMetaSchema } from './types/shared.js';\n\nexport function PageSchema<T>(itemSchema: z.ZodType<T>) {\n return z\n .object({\n data: z.array(itemSchema),\n meta: PaginationMetaSchema,\n })\n .passthrough();\n}\n\nexport class Page<T> {\n data: T[];\n meta: { total: number; page: number; pageSize: number };\n\n private _client: APIClient | null = null;\n private _path = '';\n private _itemSchema: z.ZodType<T> | null = null;\n private _query: Record<string, unknown> = {};\n\n constructor(data: T[], meta: { total: number; page: number; pageSize: number }) {\n this.data = data;\n this.meta = meta;\n }\n\n /** @internal */\n _setClient(\n client: APIClient,\n path: string,\n itemSchema: z.ZodType<T>,\n query: Record<string, unknown>,\n ): void {\n this._client = client;\n this._path = path;\n this._itemSchema = itemSchema;\n this._query = query;\n }\n\n hasNextPage(): boolean {\n return (this.meta.page + 1) * this.meta.pageSize < this.meta.total;\n }\n\n async nextPage(): Promise<Page<T>> {\n if (!this._client || !this._itemSchema) {\n throw new Error('Page client is not set');\n }\n if (!this.hasNextPage()) {\n throw new Error('No more pages');\n }\n const nextQuery = { ...this._query, page: this.meta.page + 1 };\n const schema = PageSchema(this._itemSchema);\n\n const raw = await this._client._get(this._path, {\n castTo: schema,\n query: nextQuery,\n });\n\n const page = new Page<T>(raw.data, raw.meta);\n page._setClient(this._client, this._path, this._itemSchema, this._query);\n return page;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.data[Symbol.iterator]();\n }\n\n async *autoPagingIter(): AsyncGenerator<T> {\n let page: Page<T> = this;\n while (true) {\n for (const item of page.data) {\n yield item;\n }\n if (!page.hasNextPage()) break;\n page = await page.nextPage();\n }\n }\n}\n","import { z } from 'zod';\n\nexport const CallSchema = z\n .object({\n callId: z.string(),\n status: z.enum(['queued', 'ringing', 'in-progress', 'completed', 'failed']),\n to: z.string(),\n from: z.string(),\n direction: z.enum(['outbound', 'inbound']),\n duration: z.number().nullable().optional(),\n accountId: z.string(),\n dateCreated: z.string(),\n dateUpdated: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type Call = z.infer<typeof CallSchema>;\n\nexport const CallControlResponseSchema = z\n .object({\n callId: z.string(),\n status: z.string(),\n })\n .passthrough();\n\nexport type CallControlResponse = z.infer<typeof CallControlResponseSchema>;\n","import { z } from 'zod';\n\nexport const TranscriptSegmentSchema = z\n .object({\n speaker: z.enum(['CUSTOMER', 'AGENT']),\n start: z.number(),\n end: z.number(),\n text: z.string(),\n })\n .passthrough();\n\nexport type TranscriptSegment = z.infer<typeof TranscriptSegmentSchema>;\n\n/**\n * 통화 전사 상태. status 에 따라 채워지는 필드가 다름:\n * - \"completed\": callId, segmentCount, segments\n * - \"pending\": startedAt\n * - \"failed\": stage, error. stage=\"trigger\" 는 시스템 실패로 재요청 가능\n * - \"not_requested\": 이외 필드 비어있음\n */\nexport const TranscriptStatusSchema = z\n .object({\n status: z.enum(['completed', 'pending', 'failed', 'not_requested']),\n callId: z.string().optional(),\n segmentCount: z.number().optional(),\n segments: z.array(TranscriptSegmentSchema).optional(),\n startedAt: z.string().optional(),\n stage: z.enum(['download', 'runtime', 'trigger']).nullable().optional(),\n error: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type TranscriptStatus = z.infer<typeof TranscriptStatusSchema>;\n\n/** POST 요청이 accept 되어 Job 이 트리거된 상태 (202). */\nexport const TranscriptRequestAcceptedSchema = z\n .object({\n status: z.literal('pending'),\n callId: z.string(),\n })\n .passthrough();\n\nexport type TranscriptRequestAccepted = z.infer<typeof TranscriptRequestAcceptedSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { CallSchema, CallControlResponseSchema } from '../types/call.js';\nimport type { Call, CallControlResponse } from '../types/call.js';\nimport type { CallCreateParams, CallListParams } from '../types/call-params.js';\nimport {\n TranscriptStatusSchema,\n TranscriptRequestAcceptedSchema,\n} from '../types/transcript.js';\nimport type { TranscriptStatus, TranscriptRequestAccepted } from '../types/transcript.js';\n\nexport class Calls extends APIResource {\n async create(\n params: CallCreateParams,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Call> {\n const body = stripNotGiven({\n To: params.to,\n From: params.from,\n Url: params.url,\n AI: params.ai\n ? stripNotGiven({\n Provider: params.ai.provider,\n Model: params.ai.model,\n ApiKey: params.ai.apiKey,\n Voice: params.ai.voice,\n Language: params.ai.language,\n Messages: params.ai.messages,\n Tools: params.ai.tools,\n Greeting: params.ai.greeting,\n TurnDetection: params.ai.turnDetection,\n RealtimeInputConfig: params.ai.realtimeInputConfig,\n })\n : undefined,\n StatusCallback: params.statusCallback,\n StatusCallbackEvent: params.statusCallbackEvent,\n Timeout: params.timeout,\n });\n return this._client._post(`${this._basePath}/calls`, {\n body,\n castTo: CallSchema,\n ...options,\n });\n }\n\n async list(\n params: CallListParams = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<Call>> {\n const query = stripNotGiven({\n status: params.status,\n from: params.from,\n to: params.to,\n number: params.number,\n page: params.page,\n pageSize: params.pageSize,\n });\n const path = `${this._basePath}/calls`;\n const schema = PageSchema(CallSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<Call>(raw.data, raw.meta);\n page._setClient(this._client, path, CallSchema, query);\n return page;\n }\n\n async get(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Call> {\n return this._client._get(`${this._basePath}/calls/${callId}`, {\n castTo: CallSchema,\n ...options,\n });\n }\n\n async update(\n callId: string,\n params: { status?: 'completed' } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<CallControlResponse> {\n return this._client._post(`${this._basePath}/calls/${callId}`, {\n body: { Status: params.status ?? 'completed' },\n castTo: CallControlResponseSchema,\n ...options,\n });\n }\n\n /**\n * 통화 전사 상태 조회. 완료된 경우 segment 배열까지 한 번에 반환합니다.\n *\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n */\n async getTranscript(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<TranscriptStatus> {\n return this._client._get(`${this._basePath}/calls/${callId}/transcript`, {\n castTo: TranscriptStatusSchema,\n ...options,\n });\n }\n\n /**\n * 특정 통화 1 건에 대해 전사를 명시 요청.\n * 조직 설정 \"통화 받아쓰기\" 가 꺼져 있어도 해당 통화만 전사됩니다.\n * 재실행 금지 — 이미 요청된 통화는 ConflictError(409) 발생.\n * 시스템 레벨 트리거 실패(stage=trigger) 만 재시도 가능.\n * 전사된 오디오 길이만큼 사용량 기반으로 과금됩니다.\n *\n * @throws BadRequestError (400) — 녹음 없음\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n * @throws ConflictError (409) — 이미 요청됨\n */\n async requestTranscript(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<TranscriptRequestAccepted> {\n return this._client._post(`${this._basePath}/calls/${callId}/transcript`, {\n castTo: TranscriptRequestAcceptedSchema,\n ...options,\n });\n }\n}\n","import { z } from 'zod';\n\nexport const MessageSchema = z\n .object({\n messageId: z.string(),\n status: z.enum(['queued', 'sending', 'sent', 'failed', 'received']),\n type: z.enum(['sms', 'lms', 'mms', 'rcs', 'kakao']),\n to: z.string(),\n from: z.string(),\n body: z.string().nullable().optional(),\n subject: z.string().nullable().optional(),\n numMedia: z.number(),\n mediaUrl: z.array(z.string()),\n direction: z.enum(['outbound', 'inbound']),\n accountId: z.string(),\n dateCreated: z.string(),\n dateUpdated: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type Message = z.infer<typeof MessageSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { MessageSchema } from '../types/message.js';\nimport type { Message } from '../types/message.js';\nimport type { MessageCreateParams, MessageListParams } from '../types/message-params.js';\n\nexport class Messages extends APIResource {\n async create(\n params: MessageCreateParams,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Message> {\n const body = stripNotGiven({\n To: params.to,\n From: params.from,\n Body: params.body,\n Type: params.type,\n Subject: params.subject,\n MediaUrl: params.mediaUrl,\n });\n return this._client._post(`${this._basePath}/messages`, {\n body,\n castTo: MessageSchema,\n ...options,\n });\n }\n\n async list(\n params: MessageListParams = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<Message>> {\n const query = stripNotGiven({\n type: params.type,\n status: params.status,\n page: params.page,\n pageSize: params.pageSize,\n });\n const path = `${this._basePath}/messages`;\n const schema = PageSchema(MessageSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<Message>(raw.data, raw.meta);\n page._setClient(this._client, path, MessageSchema, query);\n return page;\n }\n\n async get(\n messageId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Message> {\n return this._client._get(`${this._basePath}/messages/${messageId}`, {\n castTo: MessageSchema,\n ...options,\n });\n }\n}\n","import { z } from 'zod';\n\nexport const PhoneNumberSchema = z\n .object({\n number: z.string(),\n source: z.string().nullable().optional(),\n webhookUrl: z.string().nullable().optional(),\n webhookMethod: z.enum(['POST', 'GET']).nullable().optional(),\n createdAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type PhoneNumber = z.infer<typeof PhoneNumberSchema>;\nexport type NumberListItem = PhoneNumber;\nexport type NumberUpdateResponse = PhoneNumber;\n","import { z } from 'zod';\nimport { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { PhoneNumberSchema } from '../types/number.js';\nimport type { PhoneNumber, NumberListItem, NumberUpdateResponse } from '../types/number.js';\n\nexport class Numbers extends APIResource {\n async create(\n params: { webhookUrl?: string } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<PhoneNumber> {\n const body = stripNotGiven({ webhookUrl: params.webhookUrl });\n return this._client._post(`${this._basePath}/numbers`, {\n body: Object.keys(body).length ? body : undefined,\n castTo: PhoneNumberSchema,\n ...options,\n });\n }\n\n async list(\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<NumberListItem[]> {\n const schema = z.object({ data: z.array(PhoneNumberSchema) }).passthrough();\n const result = await this._client._get(`${this._basePath}/numbers`, {\n castTo: schema,\n ...options,\n });\n return result.data;\n }\n\n async update(\n number: string,\n params: { webhookUrl?: string; webhookMethod?: 'POST' | 'GET' } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<NumberUpdateResponse> {\n const body = stripNotGiven({\n webhookUrl: params.webhookUrl,\n webhookMethod: params.webhookMethod,\n });\n return this._client._put(`${this._basePath}/numbers/${number}`, {\n body,\n castTo: PhoneNumberSchema,\n ...options,\n });\n }\n\n async delete(\n number: string,\n options: {\n extraHeaders?: Record<string, string>;\n timeout?: number;\n } = {},\n ): Promise<void> {\n await this._client._delete(`${this._basePath}/numbers/${number}`, options);\n }\n}\n","import { z } from 'zod';\n\nexport const WebhookLogSchema = z\n .object({\n id: z.string(),\n webhookId: z.string(),\n event: z.string(),\n requestUrl: z.string(),\n requestPayload: z.record(z.unknown()),\n responseStatus: z.number().nullable().optional(),\n responseBody: z.string().nullable().optional(),\n responseTimeMs: z.number().nullable().optional(),\n status: z.enum(['pending', 'delivered', 'failed']),\n attempt: z.number(),\n maxAttempts: z.number(),\n createdAt: z.string(),\n completedAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type WebhookLog = z.infer<typeof WebhookLogSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { WebhookLogSchema } from '../types/webhook-log.js';\nimport type { WebhookLog } from '../types/webhook-log.js';\n\nexport class WebhookLogs extends APIResource {\n async list(\n webhookId: string,\n params: { page?: number; pageSize?: number } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<WebhookLog>> {\n const query = stripNotGiven({ page: params.page, pageSize: params.pageSize });\n const path = `${this._basePath}/webhooks/${webhookId}/logs`;\n const schema = PageSchema(WebhookLogSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<WebhookLog>(raw.data, raw.meta);\n page._setClient(this._client, path, WebhookLogSchema, query);\n return page;\n }\n}\n","import type { APIClient } from '../base-client.js';\nimport { Calls } from './calls.js';\nimport { Messages } from './messages.js';\nimport { Numbers } from './numbers.js';\nimport { WebhookLogs } from './webhook-logs.js';\n\nexport class AccountContext {\n private _client: APIClient;\n private _accountId: string;\n\n constructor(client: APIClient, accountId: string) {\n this._client = client;\n this._accountId = accountId;\n }\n\n get calls(): Calls {\n return new Calls(this._client, this._accountId);\n }\n\n get messages(): Messages {\n return new Messages(this._client, this._accountId);\n }\n\n get numbers(): Numbers {\n return new Numbers(this._client, this._accountId);\n }\n\n get webhookLogs(): WebhookLogs {\n return new WebhookLogs(this._client, this._accountId);\n }\n}\n","import { createHmac, timingSafeEqual } from 'node:crypto';\nimport { ClawOpsError } from './error.js';\n\nexport class WebhookVerificationError extends ClawOpsError {\n constructor(message = 'Webhook 서명이 일치하지 않습니다.') {\n super(message);\n this.name = 'WebhookVerificationError';\n }\n}\n\nexport class Webhooks {\n verify(options: {\n url: string;\n params: Record<string, string>;\n signature: string;\n signingKey: string;\n }): boolean {\n const expected = Webhooks._computeSignature(options.url, options.params, options.signingKey);\n const expectedBuf = Buffer.from(expected, 'utf-8');\n const signatureBuf = Buffer.from(options.signature, 'utf-8');\n\n if (expectedBuf.length !== signatureBuf.length || !timingSafeEqual(expectedBuf, signatureBuf)) {\n throw new WebhookVerificationError();\n }\n return true;\n }\n\n static _computeSignature(\n url: string,\n params: Record<string, string>,\n signingKey: string,\n ): string {\n const sortedParams = Object.keys(params)\n .sort()\n .map((k) => `${k}${params[k]}`)\n .join('');\n const dataToSign = url + sortedParams;\n const digest = createHmac('sha256', signingKey).update(dataToSign, 'utf-8').digest();\n return digest.toString('base64');\n }\n}\n","import { APIClient, type APIClientOptions } from './base-client.js';\nimport { DEFAULT_BASE_URL } from './constants.js';\nimport { ClawOpsError } from './error.js';\nimport { Calls } from './resources/calls.js';\nimport { Messages } from './resources/messages.js';\nimport { Numbers } from './resources/numbers.js';\nimport { WebhookLogs } from './resources/webhook-logs.js';\nimport { AccountContext } from './resources/accounts.js';\nimport { Webhooks } from './webhooks.js';\n\nexport interface ClawOpsOptions {\n apiKey?: string;\n accountId?: string;\n baseURL?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof globalThis.fetch;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class ClawOps extends APIClient {\n private _defaultAccountId: string;\n\n constructor(options: ClawOpsOptions = {}) {\n let apiKey = options.apiKey ?? process.env.CLAWOPS_API_KEY;\n if (!apiKey) {\n throw new ClawOpsError('apiKey를 지정하거나 CLAWOPS_API_KEY 환경변수를 설정하세요.');\n }\n\n let accountId = options.accountId ?? process.env.CLAWOPS_ACCOUNT_ID;\n if (!accountId) {\n throw new ClawOpsError('accountId를 지정하거나 CLAWOPS_ACCOUNT_ID 환경변수를 설정하세요.');\n }\n\n const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? DEFAULT_BASE_URL;\n\n super({\n apiKey,\n baseURL,\n timeout: options.timeout,\n maxRetries: options.maxRetries,\n fetch: options.fetch,\n defaultHeaders: options.defaultHeaders,\n });\n\n this._defaultAccountId = accountId;\n }\n\n get calls(): Calls {\n return new Calls(this, this._defaultAccountId);\n }\n\n get messages(): Messages {\n return new Messages(this, this._defaultAccountId);\n }\n\n get numbers(): Numbers {\n return new Numbers(this, this._defaultAccountId);\n }\n\n get webhookLogs(): WebhookLogs {\n return new WebhookLogs(this, this._defaultAccountId);\n }\n\n get webhooks(): Webhooks {\n return new Webhooks();\n }\n\n accounts(accountId: string): AccountContext {\n return new AccountContext(this, accountId);\n }\n}\n","import { ClawOps } from './client.js';\nexport default ClawOps;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/base-client.ts","../src/resource.ts","../src/util.ts","../src/types/shared.ts","../src/pagination.ts","../src/types/call.ts","../src/types/transcript.ts","../src/types/summary.ts","../src/resources/calls.ts","../src/types/message.ts","../src/resources/messages.ts","../src/types/number.ts","../src/resources/numbers.ts","../src/types/webhook-log.ts","../src/resources/webhook-logs.ts","../src/resources/accounts.ts","../src/webhooks.ts","../src/client.ts","../src/client-default.ts"],"names":["method","z"],"mappings":"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","file":"index.js","sourcesContent":["import { z } from 'zod';\nimport {\n DEFAULT_BASE_URL,\n DEFAULT_MAX_RETRIES,\n DEFAULT_TIMEOUT,\n INITIAL_RETRY_DELAY,\n MAX_RETRY_DELAY,\n} from './constants.js';\nimport {\n APIConnectionError,\n APIResponseValidationError,\n APITimeoutError,\n ClawOpsError,\n makeStatusError,\n} from './error.js';\nimport { VERSION } from './version.js';\n\nconst LOCALHOST_HOSTS = new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]']);\n\nfunction validateBaseUrl(url: string): string {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n throw new ClawOpsError(`Invalid base_url: ${url}`);\n }\n if (parsed.protocol === 'https:') return url;\n if (parsed.protocol === 'http:' && LOCALHOST_HOSTS.has(parsed.hostname)) return url;\n throw new ClawOpsError(\n `base_url은 HTTPS를 사용해야 합니다 (받은 값: '${url}'). ` +\n `로컬 개발 시에는 http://localhost를 사용할 수 있습니다.`,\n );\n}\n\nexport interface APIClientOptions {\n apiKey: string;\n baseURL?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof globalThis.fetch;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class APIClient {\n protected _apiKey: string;\n protected _baseURL: string;\n protected _maxRetries: number;\n protected _timeout: number;\n protected _fetch: typeof globalThis.fetch;\n protected _defaultHeaders: Record<string, string>;\n\n constructor(options: APIClientOptions) {\n this._apiKey = options.apiKey;\n this._baseURL = validateBaseUrl((options.baseURL ?? DEFAULT_BASE_URL).replace(/\\/+$/, ''));\n this._maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n this._timeout = options.timeout ?? DEFAULT_TIMEOUT;\n this._fetch = options.fetch ?? globalThis.fetch;\n this._defaultHeaders = options.defaultHeaders ?? {};\n }\n\n private _buildHeaders(extra?: Record<string, string>): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this._apiKey}`,\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'User-Agent': `claw-ops-node/${VERSION}`,\n ...this._defaultHeaders,\n };\n if (extra) Object.assign(headers, extra);\n return headers;\n }\n\n protected async _request<T>(\n method: string,\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n query?: Record<string, unknown> | null;\n castTo?: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<T | null> {\n const headers = this._buildHeaders(options.extraHeaders);\n\n const params = new URLSearchParams();\n const queryObj = { ...options.query, ...options.extraQuery };\n for (const [k, v] of Object.entries(queryObj)) {\n if (v != null) params.set(k, String(v));\n }\n\n const queryString = params.toString();\n const url = `${this._baseURL}${path}${queryString ? `?${queryString}` : ''}`;\n const reqTimeout = options.timeout ?? this._timeout;\n\n let retriesLeft = this._maxRetries;\n\n while (true) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), reqTimeout);\n\n let response: Response;\n try {\n response = await this._fetch(url, {\n method,\n headers,\n body: options.body ? JSON.stringify(options.body) : undefined,\n signal: controller.signal,\n });\n } catch (err) {\n clearTimeout(timeoutId);\n if (err instanceof DOMException && err.name === 'AbortError') {\n if (retriesLeft > 0) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n throw new APITimeoutError({ method, url });\n }\n if (retriesLeft > 0) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n throw new APIConnectionError({ method, url });\n } finally {\n clearTimeout(timeoutId);\n }\n\n if (response.ok) {\n if (response.status === 204 || !options.castTo) {\n return null;\n }\n let json: unknown;\n try {\n json = await response.json();\n } catch {\n throw new APIResponseValidationError({ status: response.status }, { method, url });\n }\n const parsed = options.castTo.safeParse(json);\n if (!parsed.success) {\n throw new APIResponseValidationError({ status: response.status }, { method, url });\n }\n return parsed.data;\n }\n\n if (retriesLeft > 0 && this._shouldRetry(response.status)) {\n retriesLeft--;\n await this._sleep(this._retryDelay(this._maxRetries - retriesLeft));\n continue;\n }\n\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = null;\n }\n throw makeStatusError(response.status, body, response.headers, { method, url });\n }\n }\n\n private _shouldRetry(status: number): boolean {\n return status === 408 || status === 409 || status === 429 || status >= 500;\n }\n\n private _retryDelay(retriesTaken: number): number {\n const delay = Math.min(INITIAL_RETRY_DELAY * 2 ** retriesTaken, MAX_RETRY_DELAY);\n return delay * (1 + Math.random());\n }\n\n private _sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n async _get<T>(\n path: string,\n options: {\n castTo: z.ZodType<T>;\n query?: Record<string, unknown> | null;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>(method('GET'), path, options);\n return result!;\n }\n\n async _post<T>(\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n castTo: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>('POST', path, options);\n return result!;\n }\n\n async _put<T>(\n path: string,\n options: {\n body?: Record<string, unknown> | null;\n castTo: z.ZodType<T>;\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n },\n ): Promise<T> {\n const result = await this._request<T>('PUT', path, options);\n return result!;\n }\n\n async _delete(\n path: string,\n options: {\n extraHeaders?: Record<string, string>;\n timeout?: number;\n } = {},\n ): Promise<void> {\n await this._request('DELETE', path, options);\n }\n}\n\nfunction method(m: string): string {\n return m;\n}\n","import type { APIClient } from './base-client.js';\n\nexport class APIResource {\n protected _client: APIClient;\n protected _accountId: string;\n\n constructor(client: APIClient, accountId: string) {\n this._client = client;\n this._accountId = accountId;\n }\n\n protected get _basePath(): string {\n return `/v1/accounts/${this._accountId}`;\n }\n}\n","/**\n * snake_case를 camelCase로 변환합니다.\n * trailing underscore(예약어 회피용)는 제거합니다.\n * 예: 'from_' -> 'from', 'account_id' -> 'accountId'\n */\nexport function toCamelCase(snake: string): string {\n if (snake.endsWith('_')) {\n snake = snake.slice(0, -1);\n }\n const parts = snake.split('_');\n return parts[0] + parts.slice(1).map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join('');\n}\n\n/**\n * null/undefined 값을 제거하여 API에 불필요한 필드를 보내지 않습니다.\n */\nexport function stripNotGiven(data: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(data)) {\n if (v != null) {\n result[k] = v;\n }\n }\n return result;\n}\n","import { z } from 'zod';\n\nexport const PaginationMetaSchema = z\n .object({\n total: z.number(),\n page: z.number(),\n pageSize: z.number(),\n })\n .passthrough();\n\nexport type PaginationMeta = z.infer<typeof PaginationMetaSchema>;\n","import { z } from 'zod';\nimport type { APIClient } from './base-client.js';\nimport { PaginationMetaSchema } from './types/shared.js';\n\nexport function PageSchema<T>(itemSchema: z.ZodType<T>) {\n return z\n .object({\n data: z.array(itemSchema),\n meta: PaginationMetaSchema,\n })\n .passthrough();\n}\n\nexport class Page<T> {\n data: T[];\n meta: { total: number; page: number; pageSize: number };\n\n private _client: APIClient | null = null;\n private _path = '';\n private _itemSchema: z.ZodType<T> | null = null;\n private _query: Record<string, unknown> = {};\n\n constructor(data: T[], meta: { total: number; page: number; pageSize: number }) {\n this.data = data;\n this.meta = meta;\n }\n\n /** @internal */\n _setClient(\n client: APIClient,\n path: string,\n itemSchema: z.ZodType<T>,\n query: Record<string, unknown>,\n ): void {\n this._client = client;\n this._path = path;\n this._itemSchema = itemSchema;\n this._query = query;\n }\n\n hasNextPage(): boolean {\n return (this.meta.page + 1) * this.meta.pageSize < this.meta.total;\n }\n\n async nextPage(): Promise<Page<T>> {\n if (!this._client || !this._itemSchema) {\n throw new Error('Page client is not set');\n }\n if (!this.hasNextPage()) {\n throw new Error('No more pages');\n }\n const nextQuery = { ...this._query, page: this.meta.page + 1 };\n const schema = PageSchema(this._itemSchema);\n\n const raw = await this._client._get(this._path, {\n castTo: schema,\n query: nextQuery,\n });\n\n const page = new Page<T>(raw.data, raw.meta);\n page._setClient(this._client, this._path, this._itemSchema, this._query);\n return page;\n }\n\n [Symbol.iterator](): Iterator<T> {\n return this.data[Symbol.iterator]();\n }\n\n async *autoPagingIter(): AsyncGenerator<T> {\n let page: Page<T> = this;\n while (true) {\n for (const item of page.data) {\n yield item;\n }\n if (!page.hasNextPage()) break;\n page = await page.nextPage();\n }\n }\n}\n","import { z } from 'zod';\n\nexport const CallSchema = z\n .object({\n callId: z.string(),\n status: z.enum(['queued', 'ringing', 'in-progress', 'completed', 'failed']),\n to: z.string(),\n from: z.string(),\n direction: z.enum(['outbound', 'inbound']),\n duration: z.number().nullable().optional(),\n accountId: z.string(),\n dateCreated: z.string(),\n dateUpdated: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type Call = z.infer<typeof CallSchema>;\n\nexport const CallControlResponseSchema = z\n .object({\n callId: z.string(),\n status: z.string(),\n })\n .passthrough();\n\nexport type CallControlResponse = z.infer<typeof CallControlResponseSchema>;\n","import { z } from 'zod';\n\nexport const TranscriptSegmentSchema = z\n .object({\n speaker: z.enum(['CUSTOMER', 'AGENT']),\n start: z.number(),\n end: z.number(),\n text: z.string(),\n })\n .passthrough();\n\nexport type TranscriptSegment = z.infer<typeof TranscriptSegmentSchema>;\n\n/**\n * 통화 전사 상태. status 에 따라 채워지는 필드가 다름:\n * - \"completed\": callId, segmentCount, segments\n * - \"pending\": startedAt\n * - \"failed\": stage, error. stage=\"trigger\" 는 시스템 실패로 재요청 가능\n * - \"not_requested\": 이외 필드 비어있음\n */\nexport const TranscriptStatusSchema = z\n .object({\n status: z.enum(['completed', 'pending', 'failed', 'not_requested']),\n callId: z.string().optional(),\n segmentCount: z.number().optional(),\n segments: z.array(TranscriptSegmentSchema).optional(),\n startedAt: z.string().optional(),\n stage: z.enum(['download', 'runtime', 'trigger']).nullable().optional(),\n error: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type TranscriptStatus = z.infer<typeof TranscriptStatusSchema>;\n\n/** POST 요청이 accept 되어 Job 이 트리거된 상태 (202). */\nexport const TranscriptRequestAcceptedSchema = z\n .object({\n status: z.literal('pending'),\n callId: z.string(),\n })\n .passthrough();\n\nexport type TranscriptRequestAccepted = z.infer<typeof TranscriptRequestAcceptedSchema>;\n","import { z } from 'zod';\n\n/**\n * 통화 요약 상태. status 에 따라 채워지는 필드가 다름:\n * - \"completed\": callId, resultJson, provider, model, promptVersion, schemaVersion, updatedAt\n * - \"pending\": 이외 필드 비어있음\n * - \"failed\": failedReason\n * - \"not_requested\": 통화는 있지만 요약 row 가 아직 없음\n */\nexport const SummaryStatusSchema = z\n .object({\n status: z.enum(['completed', 'pending', 'failed', 'not_requested']),\n callId: z.string().optional(),\n resultJson: z.record(z.string(), z.unknown()).nullable().optional(),\n provider: z.string().nullable().optional(),\n model: z.string().nullable().optional(),\n promptVersion: z.string().nullable().optional(),\n schemaVersion: z.string().nullable().optional(),\n failedReason: z.string().nullable().optional(),\n updatedAt: z.string().optional(),\n })\n .passthrough();\n\nexport type SummaryStatus = z.infer<typeof SummaryStatusSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { CallSchema, CallControlResponseSchema } from '../types/call.js';\nimport type { Call, CallControlResponse } from '../types/call.js';\nimport type { CallCreateParams, CallListParams } from '../types/call-params.js';\nimport {\n TranscriptStatusSchema,\n TranscriptRequestAcceptedSchema,\n} from '../types/transcript.js';\nimport type { TranscriptStatus, TranscriptRequestAccepted } from '../types/transcript.js';\nimport { SummaryStatusSchema } from '../types/summary.js';\nimport type { SummaryStatus } from '../types/summary.js';\n\nexport class Calls extends APIResource {\n async create(\n params: CallCreateParams,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Call> {\n const body = stripNotGiven({\n To: params.to,\n From: params.from,\n Url: params.url,\n AI: params.ai\n ? stripNotGiven({\n Provider: params.ai.provider,\n Model: params.ai.model,\n ApiKey: params.ai.apiKey,\n Voice: params.ai.voice,\n Language: params.ai.language,\n Messages: params.ai.messages,\n Tools: params.ai.tools,\n Greeting: params.ai.greeting,\n TurnDetection: params.ai.turnDetection,\n RealtimeInputConfig: params.ai.realtimeInputConfig,\n })\n : undefined,\n StatusCallback: params.statusCallback,\n StatusCallbackEvent: params.statusCallbackEvent,\n Timeout: params.timeout,\n });\n return this._client._post(`${this._basePath}/calls`, {\n body,\n castTo: CallSchema,\n ...options,\n });\n }\n\n async list(\n params: CallListParams = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<Call>> {\n const query = stripNotGiven({\n status: params.status,\n from: params.from,\n to: params.to,\n number: params.number,\n page: params.page,\n pageSize: params.pageSize,\n });\n const path = `${this._basePath}/calls`;\n const schema = PageSchema(CallSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<Call>(raw.data, raw.meta);\n page._setClient(this._client, path, CallSchema, query);\n return page;\n }\n\n async get(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Call> {\n return this._client._get(`${this._basePath}/calls/${callId}`, {\n castTo: CallSchema,\n ...options,\n });\n }\n\n async update(\n callId: string,\n params: { status?: 'completed' } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<CallControlResponse> {\n return this._client._post(`${this._basePath}/calls/${callId}`, {\n body: { Status: params.status ?? 'completed' },\n castTo: CallControlResponseSchema,\n ...options,\n });\n }\n\n /**\n * 통화 전사 상태 조회. 완료된 경우 segment 배열까지 한 번에 반환합니다.\n *\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n */\n async getTranscript(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<TranscriptStatus> {\n return this._client._get(`${this._basePath}/calls/${callId}/transcript`, {\n castTo: TranscriptStatusSchema,\n ...options,\n });\n }\n\n /**\n * 특정 통화 1 건에 대해 전사를 명시 요청.\n * 조직 설정 \"통화 받아쓰기\" 가 꺼져 있어도 해당 통화만 전사됩니다.\n * 재실행 금지 — 이미 요청된 통화는 ConflictError(409) 발생.\n * 시스템 레벨 트리거 실패(stage=trigger) 만 재시도 가능.\n * 전사된 오디오 길이만큼 사용량 기반으로 과금됩니다.\n *\n * @throws BadRequestError (400) — 녹음 없음\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n * @throws ConflictError (409) — 이미 요청됨\n */\n async requestTranscript(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<TranscriptRequestAccepted> {\n return this._client._post(`${this._basePath}/calls/${callId}/transcript`, {\n castTo: TranscriptRequestAcceptedSchema,\n ...options,\n });\n }\n\n /**\n * 통화 요약 상태 조회. transcript 가 완료된 통화에 대해 자동 생성된\n * LLM 구조화 요약 결과를 반환합니다. completed 일 때 resultJson 채워짐.\n *\n * @throws NotFoundError (404) — 통화 없음\n * @throws PermissionDeniedError (403) — accountId 불일치\n */\n async getSummary(\n callId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<SummaryStatus> {\n return this._client._get(`${this._basePath}/calls/${callId}/summary`, {\n castTo: SummaryStatusSchema,\n ...options,\n });\n }\n}\n","import { z } from 'zod';\n\nexport const MessageSchema = z\n .object({\n messageId: z.string(),\n status: z.enum(['queued', 'sending', 'sent', 'failed', 'received']),\n type: z.enum(['sms', 'lms', 'mms', 'rcs', 'kakao']),\n to: z.string(),\n from: z.string(),\n body: z.string().nullable().optional(),\n subject: z.string().nullable().optional(),\n numMedia: z.number(),\n mediaUrl: z.array(z.string()),\n direction: z.enum(['outbound', 'inbound']),\n accountId: z.string(),\n dateCreated: z.string(),\n dateUpdated: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type Message = z.infer<typeof MessageSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { MessageSchema } from '../types/message.js';\nimport type { Message } from '../types/message.js';\nimport type { MessageCreateParams, MessageListParams } from '../types/message-params.js';\n\nexport class Messages extends APIResource {\n async create(\n params: MessageCreateParams,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Message> {\n const body = stripNotGiven({\n To: params.to,\n From: params.from,\n Body: params.body,\n Type: params.type,\n Subject: params.subject,\n MediaUrl: params.mediaUrl,\n });\n return this._client._post(`${this._basePath}/messages`, {\n body,\n castTo: MessageSchema,\n ...options,\n });\n }\n\n async list(\n params: MessageListParams = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<Message>> {\n const query = stripNotGiven({\n type: params.type,\n status: params.status,\n page: params.page,\n pageSize: params.pageSize,\n });\n const path = `${this._basePath}/messages`;\n const schema = PageSchema(MessageSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<Message>(raw.data, raw.meta);\n page._setClient(this._client, path, MessageSchema, query);\n return page;\n }\n\n async get(\n messageId: string,\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Message> {\n return this._client._get(`${this._basePath}/messages/${messageId}`, {\n castTo: MessageSchema,\n ...options,\n });\n }\n}\n","import { z } from 'zod';\n\nexport const PhoneNumberSchema = z\n .object({\n number: z.string(),\n source: z.string().nullable().optional(),\n webhookUrl: z.string().nullable().optional(),\n webhookMethod: z.enum(['POST', 'GET']).nullable().optional(),\n createdAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type PhoneNumber = z.infer<typeof PhoneNumberSchema>;\nexport type NumberListItem = PhoneNumber;\nexport type NumberUpdateResponse = PhoneNumber;\n","import { z } from 'zod';\nimport { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { PhoneNumberSchema } from '../types/number.js';\nimport type { PhoneNumber, NumberListItem, NumberUpdateResponse } from '../types/number.js';\n\nexport class Numbers extends APIResource {\n async create(\n params: { webhookUrl?: string } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<PhoneNumber> {\n const body = stripNotGiven({ webhookUrl: params.webhookUrl });\n return this._client._post(`${this._basePath}/numbers`, {\n body: Object.keys(body).length ? body : undefined,\n castTo: PhoneNumberSchema,\n ...options,\n });\n }\n\n async list(\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<NumberListItem[]> {\n const schema = z.object({ data: z.array(PhoneNumberSchema) }).passthrough();\n const result = await this._client._get(`${this._basePath}/numbers`, {\n castTo: schema,\n ...options,\n });\n return result.data;\n }\n\n async update(\n number: string,\n params: { webhookUrl?: string; webhookMethod?: 'POST' | 'GET' } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<NumberUpdateResponse> {\n const body = stripNotGiven({\n webhookUrl: params.webhookUrl,\n webhookMethod: params.webhookMethod,\n });\n return this._client._put(`${this._basePath}/numbers/${number}`, {\n body,\n castTo: PhoneNumberSchema,\n ...options,\n });\n }\n\n async delete(\n number: string,\n options: {\n extraHeaders?: Record<string, string>;\n timeout?: number;\n } = {},\n ): Promise<void> {\n await this._client._delete(`${this._basePath}/numbers/${number}`, options);\n }\n}\n","import { z } from 'zod';\n\nexport const WebhookLogSchema = z\n .object({\n id: z.string(),\n webhookId: z.string(),\n event: z.string(),\n requestUrl: z.string(),\n requestPayload: z.record(z.unknown()),\n responseStatus: z.number().nullable().optional(),\n responseBody: z.string().nullable().optional(),\n responseTimeMs: z.number().nullable().optional(),\n status: z.enum(['pending', 'delivered', 'failed']),\n attempt: z.number(),\n maxAttempts: z.number(),\n createdAt: z.string(),\n completedAt: z.string().nullable().optional(),\n })\n .passthrough();\n\nexport type WebhookLog = z.infer<typeof WebhookLogSchema>;\n","import { APIResource } from '../resource.js';\nimport { stripNotGiven } from '../util.js';\nimport { Page, PageSchema } from '../pagination.js';\nimport { WebhookLogSchema } from '../types/webhook-log.js';\nimport type { WebhookLog } from '../types/webhook-log.js';\n\nexport class WebhookLogs extends APIResource {\n async list(\n webhookId: string,\n params: { page?: number; pageSize?: number } = {},\n options: {\n extraHeaders?: Record<string, string>;\n extraQuery?: Record<string, unknown>;\n timeout?: number;\n } = {},\n ): Promise<Page<WebhookLog>> {\n const query = stripNotGiven({ page: params.page, pageSize: params.pageSize });\n const path = `${this._basePath}/webhooks/${webhookId}/logs`;\n const schema = PageSchema(WebhookLogSchema);\n const raw = await this._client._get(path, {\n castTo: schema,\n query: Object.keys(query).length ? query : undefined,\n ...options,\n });\n const page = new Page<WebhookLog>(raw.data, raw.meta);\n page._setClient(this._client, path, WebhookLogSchema, query);\n return page;\n }\n}\n","import type { APIClient } from '../base-client.js';\nimport { Calls } from './calls.js';\nimport { Messages } from './messages.js';\nimport { Numbers } from './numbers.js';\nimport { WebhookLogs } from './webhook-logs.js';\n\nexport class AccountContext {\n private _client: APIClient;\n private _accountId: string;\n\n constructor(client: APIClient, accountId: string) {\n this._client = client;\n this._accountId = accountId;\n }\n\n get calls(): Calls {\n return new Calls(this._client, this._accountId);\n }\n\n get messages(): Messages {\n return new Messages(this._client, this._accountId);\n }\n\n get numbers(): Numbers {\n return new Numbers(this._client, this._accountId);\n }\n\n get webhookLogs(): WebhookLogs {\n return new WebhookLogs(this._client, this._accountId);\n }\n}\n","import { createHmac, timingSafeEqual } from 'node:crypto';\nimport { ClawOpsError } from './error.js';\n\nexport class WebhookVerificationError extends ClawOpsError {\n constructor(message = 'Webhook 서명이 일치하지 않습니다.') {\n super(message);\n this.name = 'WebhookVerificationError';\n }\n}\n\nexport class Webhooks {\n verify(options: {\n url: string;\n params: Record<string, string>;\n signature: string;\n signingKey: string;\n }): boolean {\n const expected = Webhooks._computeSignature(options.url, options.params, options.signingKey);\n const expectedBuf = Buffer.from(expected, 'utf-8');\n const signatureBuf = Buffer.from(options.signature, 'utf-8');\n\n if (expectedBuf.length !== signatureBuf.length || !timingSafeEqual(expectedBuf, signatureBuf)) {\n throw new WebhookVerificationError();\n }\n return true;\n }\n\n static _computeSignature(\n url: string,\n params: Record<string, string>,\n signingKey: string,\n ): string {\n const sortedParams = Object.keys(params)\n .sort()\n .map((k) => `${k}${params[k]}`)\n .join('');\n const dataToSign = url + sortedParams;\n const digest = createHmac('sha256', signingKey).update(dataToSign, 'utf-8').digest();\n return digest.toString('base64');\n }\n}\n","import { APIClient, type APIClientOptions } from './base-client.js';\nimport { DEFAULT_BASE_URL } from './constants.js';\nimport { ClawOpsError } from './error.js';\nimport { Calls } from './resources/calls.js';\nimport { Messages } from './resources/messages.js';\nimport { Numbers } from './resources/numbers.js';\nimport { WebhookLogs } from './resources/webhook-logs.js';\nimport { AccountContext } from './resources/accounts.js';\nimport { Webhooks } from './webhooks.js';\n\nexport interface ClawOpsOptions {\n apiKey?: string;\n accountId?: string;\n baseURL?: string;\n timeout?: number;\n maxRetries?: number;\n fetch?: typeof globalThis.fetch;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class ClawOps extends APIClient {\n private _defaultAccountId: string;\n\n constructor(options: ClawOpsOptions = {}) {\n let apiKey = options.apiKey ?? process.env.CLAWOPS_API_KEY;\n if (!apiKey) {\n throw new ClawOpsError('apiKey를 지정하거나 CLAWOPS_API_KEY 환경변수를 설정하세요.');\n }\n\n let accountId = options.accountId ?? process.env.CLAWOPS_ACCOUNT_ID;\n if (!accountId) {\n throw new ClawOpsError('accountId를 지정하거나 CLAWOPS_ACCOUNT_ID 환경변수를 설정하세요.');\n }\n\n const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? DEFAULT_BASE_URL;\n\n super({\n apiKey,\n baseURL,\n timeout: options.timeout,\n maxRetries: options.maxRetries,\n fetch: options.fetch,\n defaultHeaders: options.defaultHeaders,\n });\n\n this._defaultAccountId = accountId;\n }\n\n get calls(): Calls {\n return new Calls(this, this._defaultAccountId);\n }\n\n get messages(): Messages {\n return new Messages(this, this._defaultAccountId);\n }\n\n get numbers(): Numbers {\n return new Numbers(this, this._defaultAccountId);\n }\n\n get webhookLogs(): WebhookLogs {\n return new WebhookLogs(this, this._defaultAccountId);\n }\n\n get webhooks(): Webhooks {\n return new Webhooks();\n }\n\n accounts(accountId: string): AccountContext {\n return new AccountContext(this, accountId);\n }\n}\n","import { ClawOps } from './client.js';\nexport default ClawOps;\n"]}
|