@teamlearners/clawops 0.12.0 → 0.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/index.cjs +14 -8
- package/dist/agent/index.cjs.map +1 -1
- package/dist/agent/index.d.cts +3 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.js +7 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/{chunk-X6VG5NNG.cjs → chunk-7IYMRCGL.cjs} +3 -3
- package/dist/{chunk-X6VG5NNG.cjs.map → chunk-7IYMRCGL.cjs.map} +1 -1
- package/dist/{chunk-KK3OXQT6.js → chunk-FQOH42FH.js} +3 -3
- package/dist/{chunk-KK3OXQT6.js.map → chunk-FQOH42FH.js.map} +1 -1
- package/dist/index.cjs +37 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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.13.1" ;
|
|
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-7IYMRCGL.cjs.map
|
|
188
|
+
//# sourceMappingURL=chunk-7IYMRCGL.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-X6VG5NNG.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-7IYMRCGL.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.13.1" ;
|
|
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-FQOH42FH.js.map
|
|
163
|
+
//# sourceMappingURL=chunk-FQOH42FH.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-KK3OXQT6.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-FQOH42FH.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 chunk7IYMRCGL_cjs = require('./chunk-7IYMRCGL.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 chunk7IYMRCGL_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 chunk7IYMRCGL_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 ?? chunk7IYMRCGL_cjs.DEFAULT_BASE_URL).replace(/\/+$/, ""));
|
|
34
|
+
this._maxRetries = options.maxRetries ?? chunk7IYMRCGL_cjs.DEFAULT_MAX_RETRIES;
|
|
35
|
+
this._timeout = options.timeout ?? chunk7IYMRCGL_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/${chunk7IYMRCGL_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 chunk7IYMRCGL_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 chunk7IYMRCGL_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 chunk7IYMRCGL_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 chunk7IYMRCGL_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 chunk7IYMRCGL_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(chunk7IYMRCGL_cjs.INITIAL_RETRY_DELAY * 2 ** retriesTaken, chunk7IYMRCGL_cjs.MAX_RETRY_DELAY);
|
|
126
126
|
return delay * (1 + Math.random());
|
|
127
127
|
}
|
|
128
128
|
_sleep(ms) {
|
|
@@ -268,7 +268,8 @@ var Calls = class extends APIResource {
|
|
|
268
268
|
Messages: params.ai.messages,
|
|
269
269
|
Tools: params.ai.tools,
|
|
270
270
|
Greeting: params.ai.greeting,
|
|
271
|
-
TurnDetection: params.ai.turnDetection
|
|
271
|
+
TurnDetection: params.ai.turnDetection,
|
|
272
|
+
RealtimeInputConfig: params.ai.realtimeInputConfig
|
|
272
273
|
}) : void 0,
|
|
273
274
|
StatusCallback: params.statusCallback,
|
|
274
275
|
StatusCallbackEvent: params.statusCallbackEvent,
|
|
@@ -467,7 +468,7 @@ var AccountContext = class {
|
|
|
467
468
|
return new WebhookLogs(this._client, this._accountId);
|
|
468
469
|
}
|
|
469
470
|
};
|
|
470
|
-
var WebhookVerificationError = class extends
|
|
471
|
+
var WebhookVerificationError = class extends chunk7IYMRCGL_cjs.ClawOpsError {
|
|
471
472
|
constructor(message = "Webhook \uC11C\uBA85\uC774 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.") {
|
|
472
473
|
super(message);
|
|
473
474
|
this.name = "WebhookVerificationError";
|
|
@@ -497,13 +498,13 @@ var ClawOps = class extends APIClient {
|
|
|
497
498
|
constructor(options = {}) {
|
|
498
499
|
let apiKey = options.apiKey ?? process.env.CLAWOPS_API_KEY;
|
|
499
500
|
if (!apiKey) {
|
|
500
|
-
throw new
|
|
501
|
+
throw new chunk7IYMRCGL_cjs.ClawOpsError("apiKey\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_API_KEY \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
|
|
501
502
|
}
|
|
502
503
|
let accountId = options.accountId ?? process.env.CLAWOPS_ACCOUNT_ID;
|
|
503
504
|
if (!accountId) {
|
|
504
|
-
throw new
|
|
505
|
+
throw new chunk7IYMRCGL_cjs.ClawOpsError("accountId\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_ACCOUNT_ID \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
|
|
505
506
|
}
|
|
506
|
-
const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ??
|
|
507
|
+
const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? chunk7IYMRCGL_cjs.DEFAULT_BASE_URL;
|
|
507
508
|
super({
|
|
508
509
|
apiKey,
|
|
509
510
|
baseURL,
|
|
@@ -539,75 +540,75 @@ var client_default_default = ClawOps;
|
|
|
539
540
|
|
|
540
541
|
Object.defineProperty(exports, "APIConnectionError", {
|
|
541
542
|
enumerable: true,
|
|
542
|
-
get: function () { return
|
|
543
|
+
get: function () { return chunk7IYMRCGL_cjs.APIConnectionError; }
|
|
543
544
|
});
|
|
544
545
|
Object.defineProperty(exports, "APIError", {
|
|
545
546
|
enumerable: true,
|
|
546
|
-
get: function () { return
|
|
547
|
+
get: function () { return chunk7IYMRCGL_cjs.APIError; }
|
|
547
548
|
});
|
|
548
549
|
Object.defineProperty(exports, "APIResponseValidationError", {
|
|
549
550
|
enumerable: true,
|
|
550
|
-
get: function () { return
|
|
551
|
+
get: function () { return chunk7IYMRCGL_cjs.APIResponseValidationError; }
|
|
551
552
|
});
|
|
552
553
|
Object.defineProperty(exports, "APIStatusError", {
|
|
553
554
|
enumerable: true,
|
|
554
|
-
get: function () { return
|
|
555
|
+
get: function () { return chunk7IYMRCGL_cjs.APIStatusError; }
|
|
555
556
|
});
|
|
556
557
|
Object.defineProperty(exports, "APITimeoutError", {
|
|
557
558
|
enumerable: true,
|
|
558
|
-
get: function () { return
|
|
559
|
+
get: function () { return chunk7IYMRCGL_cjs.APITimeoutError; }
|
|
559
560
|
});
|
|
560
561
|
Object.defineProperty(exports, "AgentConnectionError", {
|
|
561
562
|
enumerable: true,
|
|
562
|
-
get: function () { return
|
|
563
|
+
get: function () { return chunk7IYMRCGL_cjs.AgentConnectionError; }
|
|
563
564
|
});
|
|
564
565
|
Object.defineProperty(exports, "AgentError", {
|
|
565
566
|
enumerable: true,
|
|
566
|
-
get: function () { return
|
|
567
|
+
get: function () { return chunk7IYMRCGL_cjs.AgentError; }
|
|
567
568
|
});
|
|
568
569
|
Object.defineProperty(exports, "AuthenticationError", {
|
|
569
570
|
enumerable: true,
|
|
570
|
-
get: function () { return
|
|
571
|
+
get: function () { return chunk7IYMRCGL_cjs.AuthenticationError; }
|
|
571
572
|
});
|
|
572
573
|
Object.defineProperty(exports, "BadRequestError", {
|
|
573
574
|
enumerable: true,
|
|
574
|
-
get: function () { return
|
|
575
|
+
get: function () { return chunk7IYMRCGL_cjs.BadRequestError; }
|
|
575
576
|
});
|
|
576
577
|
Object.defineProperty(exports, "ClawOpsError", {
|
|
577
578
|
enumerable: true,
|
|
578
|
-
get: function () { return
|
|
579
|
+
get: function () { return chunk7IYMRCGL_cjs.ClawOpsError; }
|
|
579
580
|
});
|
|
580
581
|
Object.defineProperty(exports, "ConflictError", {
|
|
581
582
|
enumerable: true,
|
|
582
|
-
get: function () { return
|
|
583
|
+
get: function () { return chunk7IYMRCGL_cjs.ConflictError; }
|
|
583
584
|
});
|
|
584
585
|
Object.defineProperty(exports, "InternalServerError", {
|
|
585
586
|
enumerable: true,
|
|
586
|
-
get: function () { return
|
|
587
|
+
get: function () { return chunk7IYMRCGL_cjs.InternalServerError; }
|
|
587
588
|
});
|
|
588
589
|
Object.defineProperty(exports, "NotFoundError", {
|
|
589
590
|
enumerable: true,
|
|
590
|
-
get: function () { return
|
|
591
|
+
get: function () { return chunk7IYMRCGL_cjs.NotFoundError; }
|
|
591
592
|
});
|
|
592
593
|
Object.defineProperty(exports, "PermissionDeniedError", {
|
|
593
594
|
enumerable: true,
|
|
594
|
-
get: function () { return
|
|
595
|
+
get: function () { return chunk7IYMRCGL_cjs.PermissionDeniedError; }
|
|
595
596
|
});
|
|
596
597
|
Object.defineProperty(exports, "RateLimitError", {
|
|
597
598
|
enumerable: true,
|
|
598
|
-
get: function () { return
|
|
599
|
+
get: function () { return chunk7IYMRCGL_cjs.RateLimitError; }
|
|
599
600
|
});
|
|
600
601
|
Object.defineProperty(exports, "ServiceUnavailableError", {
|
|
601
602
|
enumerable: true,
|
|
602
|
-
get: function () { return
|
|
603
|
+
get: function () { return chunk7IYMRCGL_cjs.ServiceUnavailableError; }
|
|
603
604
|
});
|
|
604
605
|
Object.defineProperty(exports, "UnprocessableEntityError", {
|
|
605
606
|
enumerable: true,
|
|
606
|
-
get: function () { return
|
|
607
|
+
get: function () { return chunk7IYMRCGL_cjs.UnprocessableEntityError; }
|
|
607
608
|
});
|
|
608
609
|
Object.defineProperty(exports, "VERSION", {
|
|
609
610
|
enumerable: true,
|
|
610
|
-
get: function () { return
|
|
611
|
+
get: function () { return chunk7IYMRCGL_cjs.VERSION; }
|
|
611
612
|
});
|
|
612
613
|
exports.APIClient = APIClient;
|
|
613
614
|
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/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 { 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';\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 })\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","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/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 { 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';\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","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
|
@@ -155,6 +155,8 @@ interface AIConfigBase {
|
|
|
155
155
|
greeting?: boolean;
|
|
156
156
|
/** 턴 감지 설정 (기본값: semantic_vad medium). */
|
|
157
157
|
turnDetection?: Record<string, unknown>;
|
|
158
|
+
/** Gemini VAD 설정. @google/genai RealtimeInputConfig 구조 그대로 전달. */
|
|
159
|
+
realtimeInputConfig?: Record<string, unknown>;
|
|
158
160
|
}
|
|
159
161
|
/** OpenAI provider 설정. provider: 'openai'일 때 모델과 음성이 OpenAI 전용으로 제한됨. */
|
|
160
162
|
interface OpenAIAIConfig extends AIConfigBase {
|