@teamlearners/clawops 0.8.1 → 0.12.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.
@@ -149,7 +149,7 @@ function makeStatusError(status, body, headers, request) {
149
149
  }
150
150
 
151
151
  // src/version.ts
152
- var VERSION = "0.8.1" ;
152
+ var VERSION = "0.12.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-RUVY7MYW.js.map
163
- //# sourceMappingURL=chunk-RUVY7MYW.js.map
162
+ //# sourceMappingURL=chunk-KK3OXQT6.js.map
163
+ //# sourceMappingURL=chunk-KK3OXQT6.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-RUVY7MYW.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-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"]}
@@ -151,7 +151,7 @@ function makeStatusError(status, body, headers, request) {
151
151
  }
152
152
 
153
153
  // src/version.ts
154
- var VERSION = "0.8.1" ;
154
+ var VERSION = "0.12.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-MOH4FRJZ.cjs.map
188
- //# sourceMappingURL=chunk-MOH4FRJZ.cjs.map
187
+ //# sourceMappingURL=chunk-X6VG5NNG.cjs.map
188
+ //# sourceMappingURL=chunk-X6VG5NNG.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-MOH4FRJZ.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-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"]}
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var chunkMOH4FRJZ_cjs = require('./chunk-MOH4FRJZ.cjs');
5
+ var chunkX6VG5NNG_cjs = require('./chunk-X6VG5NNG.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 chunkMOH4FRJZ_cjs.ClawOpsError(`Invalid base_url: ${url}`);
16
+ throw new chunkX6VG5NNG_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 chunkMOH4FRJZ_cjs.ClawOpsError(
20
+ throw new chunkX6VG5NNG_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 ?? chunkMOH4FRJZ_cjs.DEFAULT_BASE_URL).replace(/\/+$/, ""));
34
- this._maxRetries = options.maxRetries ?? chunkMOH4FRJZ_cjs.DEFAULT_MAX_RETRIES;
35
- this._timeout = options.timeout ?? chunkMOH4FRJZ_cjs.DEFAULT_TIMEOUT;
33
+ this._baseURL = validateBaseUrl((options.baseURL ?? chunkX6VG5NNG_cjs.DEFAULT_BASE_URL).replace(/\/+$/, ""));
34
+ this._maxRetries = options.maxRetries ?? chunkX6VG5NNG_cjs.DEFAULT_MAX_RETRIES;
35
+ this._timeout = options.timeout ?? chunkX6VG5NNG_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/${chunkMOH4FRJZ_cjs.VERSION}`,
44
+ "User-Agent": `claw-ops-node/${chunkX6VG5NNG_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 chunkMOH4FRJZ_cjs.APITimeoutError({ method: method2, url });
80
+ throw new chunkX6VG5NNG_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 chunkMOH4FRJZ_cjs.APIConnectionError({ method: method2, url });
87
+ throw new chunkX6VG5NNG_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 chunkMOH4FRJZ_cjs.APIResponseValidationError({ status: response.status }, { method: method2, url });
99
+ throw new chunkX6VG5NNG_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 chunkMOH4FRJZ_cjs.APIResponseValidationError({ status: response.status }, { method: method2, url });
103
+ throw new chunkX6VG5NNG_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 chunkMOH4FRJZ_cjs.makeStatusError(response.status, body, response.headers, { method: method2, url });
118
+ throw chunkX6VG5NNG_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(chunkMOH4FRJZ_cjs.INITIAL_RETRY_DELAY * 2 ** retriesTaken, chunkMOH4FRJZ_cjs.MAX_RETRY_DELAY);
125
+ const delay = Math.min(chunkX6VG5NNG_cjs.INITIAL_RETRY_DELAY * 2 ** retriesTaken, chunkX6VG5NNG_cjs.MAX_RETRY_DELAY);
126
126
  return delay * (1 + Math.random());
127
127
  }
128
128
  _sleep(ms) {
@@ -283,6 +283,9 @@ var Calls = class extends APIResource {
283
283
  async list(params = {}, options = {}) {
284
284
  const query = stripNotGiven({
285
285
  status: params.status,
286
+ from: params.from,
287
+ to: params.to,
288
+ number: params.number,
286
289
  page: params.page,
287
290
  pageSize: params.pageSize
288
291
  });
@@ -464,7 +467,7 @@ var AccountContext = class {
464
467
  return new WebhookLogs(this._client, this._accountId);
465
468
  }
466
469
  };
467
- var WebhookVerificationError = class extends chunkMOH4FRJZ_cjs.ClawOpsError {
470
+ var WebhookVerificationError = class extends chunkX6VG5NNG_cjs.ClawOpsError {
468
471
  constructor(message = "Webhook \uC11C\uBA85\uC774 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.") {
469
472
  super(message);
470
473
  this.name = "WebhookVerificationError";
@@ -494,13 +497,13 @@ var ClawOps = class extends APIClient {
494
497
  constructor(options = {}) {
495
498
  let apiKey = options.apiKey ?? process.env.CLAWOPS_API_KEY;
496
499
  if (!apiKey) {
497
- throw new chunkMOH4FRJZ_cjs.ClawOpsError("apiKey\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_API_KEY \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
500
+ throw new chunkX6VG5NNG_cjs.ClawOpsError("apiKey\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_API_KEY \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
498
501
  }
499
502
  let accountId = options.accountId ?? process.env.CLAWOPS_ACCOUNT_ID;
500
503
  if (!accountId) {
501
- throw new chunkMOH4FRJZ_cjs.ClawOpsError("accountId\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_ACCOUNT_ID \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
504
+ throw new chunkX6VG5NNG_cjs.ClawOpsError("accountId\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_ACCOUNT_ID \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
502
505
  }
503
- const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? chunkMOH4FRJZ_cjs.DEFAULT_BASE_URL;
506
+ const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? chunkX6VG5NNG_cjs.DEFAULT_BASE_URL;
504
507
  super({
505
508
  apiKey,
506
509
  baseURL,
@@ -536,75 +539,75 @@ var client_default_default = ClawOps;
536
539
 
537
540
  Object.defineProperty(exports, "APIConnectionError", {
538
541
  enumerable: true,
539
- get: function () { return chunkMOH4FRJZ_cjs.APIConnectionError; }
542
+ get: function () { return chunkX6VG5NNG_cjs.APIConnectionError; }
540
543
  });
541
544
  Object.defineProperty(exports, "APIError", {
542
545
  enumerable: true,
543
- get: function () { return chunkMOH4FRJZ_cjs.APIError; }
546
+ get: function () { return chunkX6VG5NNG_cjs.APIError; }
544
547
  });
545
548
  Object.defineProperty(exports, "APIResponseValidationError", {
546
549
  enumerable: true,
547
- get: function () { return chunkMOH4FRJZ_cjs.APIResponseValidationError; }
550
+ get: function () { return chunkX6VG5NNG_cjs.APIResponseValidationError; }
548
551
  });
549
552
  Object.defineProperty(exports, "APIStatusError", {
550
553
  enumerable: true,
551
- get: function () { return chunkMOH4FRJZ_cjs.APIStatusError; }
554
+ get: function () { return chunkX6VG5NNG_cjs.APIStatusError; }
552
555
  });
553
556
  Object.defineProperty(exports, "APITimeoutError", {
554
557
  enumerable: true,
555
- get: function () { return chunkMOH4FRJZ_cjs.APITimeoutError; }
558
+ get: function () { return chunkX6VG5NNG_cjs.APITimeoutError; }
556
559
  });
557
560
  Object.defineProperty(exports, "AgentConnectionError", {
558
561
  enumerable: true,
559
- get: function () { return chunkMOH4FRJZ_cjs.AgentConnectionError; }
562
+ get: function () { return chunkX6VG5NNG_cjs.AgentConnectionError; }
560
563
  });
561
564
  Object.defineProperty(exports, "AgentError", {
562
565
  enumerable: true,
563
- get: function () { return chunkMOH4FRJZ_cjs.AgentError; }
566
+ get: function () { return chunkX6VG5NNG_cjs.AgentError; }
564
567
  });
565
568
  Object.defineProperty(exports, "AuthenticationError", {
566
569
  enumerable: true,
567
- get: function () { return chunkMOH4FRJZ_cjs.AuthenticationError; }
570
+ get: function () { return chunkX6VG5NNG_cjs.AuthenticationError; }
568
571
  });
569
572
  Object.defineProperty(exports, "BadRequestError", {
570
573
  enumerable: true,
571
- get: function () { return chunkMOH4FRJZ_cjs.BadRequestError; }
574
+ get: function () { return chunkX6VG5NNG_cjs.BadRequestError; }
572
575
  });
573
576
  Object.defineProperty(exports, "ClawOpsError", {
574
577
  enumerable: true,
575
- get: function () { return chunkMOH4FRJZ_cjs.ClawOpsError; }
578
+ get: function () { return chunkX6VG5NNG_cjs.ClawOpsError; }
576
579
  });
577
580
  Object.defineProperty(exports, "ConflictError", {
578
581
  enumerable: true,
579
- get: function () { return chunkMOH4FRJZ_cjs.ConflictError; }
582
+ get: function () { return chunkX6VG5NNG_cjs.ConflictError; }
580
583
  });
581
584
  Object.defineProperty(exports, "InternalServerError", {
582
585
  enumerable: true,
583
- get: function () { return chunkMOH4FRJZ_cjs.InternalServerError; }
586
+ get: function () { return chunkX6VG5NNG_cjs.InternalServerError; }
584
587
  });
585
588
  Object.defineProperty(exports, "NotFoundError", {
586
589
  enumerable: true,
587
- get: function () { return chunkMOH4FRJZ_cjs.NotFoundError; }
590
+ get: function () { return chunkX6VG5NNG_cjs.NotFoundError; }
588
591
  });
589
592
  Object.defineProperty(exports, "PermissionDeniedError", {
590
593
  enumerable: true,
591
- get: function () { return chunkMOH4FRJZ_cjs.PermissionDeniedError; }
594
+ get: function () { return chunkX6VG5NNG_cjs.PermissionDeniedError; }
592
595
  });
593
596
  Object.defineProperty(exports, "RateLimitError", {
594
597
  enumerable: true,
595
- get: function () { return chunkMOH4FRJZ_cjs.RateLimitError; }
598
+ get: function () { return chunkX6VG5NNG_cjs.RateLimitError; }
596
599
  });
597
600
  Object.defineProperty(exports, "ServiceUnavailableError", {
598
601
  enumerable: true,
599
- get: function () { return chunkMOH4FRJZ_cjs.ServiceUnavailableError; }
602
+ get: function () { return chunkX6VG5NNG_cjs.ServiceUnavailableError; }
600
603
  });
601
604
  Object.defineProperty(exports, "UnprocessableEntityError", {
602
605
  enumerable: true,
603
- get: function () { return chunkMOH4FRJZ_cjs.UnprocessableEntityError; }
606
+ get: function () { return chunkX6VG5NNG_cjs.UnprocessableEntityError; }
604
607
  });
605
608
  Object.defineProperty(exports, "VERSION", {
606
609
  enumerable: true,
607
- get: function () { return chunkMOH4FRJZ_cjs.VERSION; }
610
+ get: function () { return chunkX6VG5NNG_cjs.VERSION; }
608
611
  });
609
612
  exports.APIClient = APIClient;
610
613
  exports.AccountContext = AccountContext;
@@ -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 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":";;;;;;;;;AAiBA,IAAM,eAAA,uBAAsB,GAAA,CAAI,CAAC,aAAa,WAAA,EAAa,SAAA,EAAW,OAAO,CAAC,CAAA;AAE9E,SAAS,gBAAgB,GAAA,EAAqB;AAC5C,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,IAAI,GAAG,CAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAIA,8BAAA,CAAa,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU,OAAO,GAAA;AACzC,EAAA,IAAI,MAAA,CAAO,aAAa,OAAA,IAAW,eAAA,CAAgB,IAAI,MAAA,CAAO,QAAQ,GAAG,OAAO,GAAA;AAChF,EAAA,MAAM,IAAIA,8BAAA;AAAA,IACR,iGAAqC,GAAG,CAAA,2HAAA;AAAA,GAE1C;AACF;AAWO,IAAM,YAAN,MAAgB;AAAA,EACX,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,eAAA;AAAA,EAEV,YAAY,OAAA,EAA2B;AACrC,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,MAAA;AACvB,IAAA,IAAA,CAAK,QAAA,GAAW,iBAAiB,OAAA,CAAQ,OAAA,IAAWC,oCAAkB,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA;AACzF,IAAA,IAAA,CAAK,WAAA,GAAc,QAAQ,UAAA,IAAcC,qCAAA;AACzC,IAAA,IAAA,CAAK,QAAA,GAAW,QAAQ,OAAA,IAAWC,iCAAA;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,KAAA,IAAS,UAAA,CAAW,KAAA;AAC1C,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA,CAAQ,cAAA,IAAkB,EAAC;AAAA,EACpD;AAAA,EAEQ,cAAc,KAAA,EAAwD;AAC5E,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,CAAA,CAAA;AAAA,MACrC,cAAA,EAAgB,kBAAA;AAAA,MAChB,MAAA,EAAQ,kBAAA;AAAA,MACR,YAAA,EAAc,iBAAiBC,yBAAO,CAAA,CAAA;AAAA,MACtC,GAAG,IAAA,CAAK;AAAA,KACV;AACA,IAAA,IAAI,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,KAAK,CAAA;AACvC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,MAAgB,QAAA,CACdC,OAAAA,EACA,IAAA,EACA,OAAA,GAOI,EAAC,EACc;AACnB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,YAAY,CAAA;AAEvD,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,EAAgB;AACnC,IAAA,MAAM,WAAW,EAAE,GAAG,QAAQ,KAAA,EAAO,GAAG,QAAQ,UAAA,EAAW;AAC3D,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC7C,MAAA,IAAI,KAAK,IAAA,EAAM,MAAA,CAAO,IAAI,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,WAAA,GAAc,OAAO,QAAA,EAAS;AACpC,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAI,CAAA,EAAG,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAC1E,IAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,OAAA,IAAW,IAAA,CAAK,QAAA;AAE3C,IAAA,IAAI,cAAc,IAAA,CAAK,WAAA;AAEvB,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,MAAM,YAAY,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,UAAU,CAAA;AAEjE,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,EAAK;AAAA,UAChC,MAAA,EAAAA,OAAAA;AAAA,UACA,OAAA;AAAA,UACA,MAAM,OAAA,CAAQ,IAAA,GAAO,KAAK,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAA,GAAI,KAAA,CAAA;AAAA,UACpD,QAAQ,UAAA,CAAW;AAAA,SACpB,CAAA;AAAA,MACH,SAAS,GAAA,EAAK;AACZ,QAAA,YAAA,CAAa,SAAS,CAAA;AACtB,QAAA,IAAI,GAAA,YAAe,YAAA,IAAgB,GAAA,CAAI,IAAA,KAAS,YAAA,EAAc;AAC5D,UAAA,IAAI,cAAc,CAAA,EAAG;AACnB,YAAA,WAAA,EAAA;AACA,YAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAK,YAAY,IAAA,CAAK,WAAA,GAAc,WAAW,CAAC,CAAA;AAClE,YAAA;AAAA,UACF;AACA,UAAA,MAAM,IAAIC,iCAAA,CAAgB,EAAE,MAAA,EAAAD,OAAAA,EAAQ,KAAK,CAAA;AAAA,QAC3C;AACA,QAAA,IAAI,cAAc,CAAA,EAAG;AACnB,UAAA,WAAA,EAAA;AACA,UAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAK,YAAY,IAAA,CAAK,WAAA,GAAc,WAAW,CAAC,CAAA;AAClE,UAAA;AAAA,QACF;AACA,QAAA,MAAM,IAAIE,oCAAA,CAAmB,EAAE,MAAA,EAAAF,OAAAA,EAAQ,KAAK,CAAA;AAAA,MAC9C,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,SAAS,CAAA;AAAA,MACxB;AAEA,MAAA,IAAI,SAAS,EAAA,EAAI;AACf,QAAA,IAAI,QAAA,CAAS,MAAA,KAAW,GAAA,IAAO,CAAC,QAAQ,MAAA,EAAQ;AAC9C,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,IAAI,IAAA;AACJ,QAAA,IAAI;AACF,UAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,QAC7B,CAAA,CAAA,MAAQ;AACN,UAAA,MAAM,IAAIG,4CAAA,CAA2B,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAO,EAAG,EAAE,MAAA,EAAAH,OAAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,QACnF;AACA,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,SAAA,CAAU,IAAI,CAAA;AAC5C,QAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,UAAA,MAAM,IAAIG,4CAAA,CAA2B,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAO,EAAG,EAAE,MAAA,EAAAH,OAAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,QACnF;AACA,QAAA,OAAO,MAAA,CAAO,IAAA;AAAA,MAChB;AAEA,MAAA,IAAI,cAAc,CAAA,IAAK,IAAA,CAAK,YAAA,CAAa,QAAA,CAAS,MAAM,CAAA,EAAG;AACzD,QAAA,WAAA,EAAA;AACA,QAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAK,YAAY,IAAA,CAAK,WAAA,GAAc,WAAW,CAAC,CAAA;AAClE,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI;AACF,QAAA,IAAA,GAAO,MAAM,SAAS,IAAA,EAAK;AAAA,MAC7B,CAAA,CAAA,MAAQ;AACN,QAAA,IAAA,GAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAMI,iCAAA,CAAgB,QAAA,CAAS,MAAA,EAAQ,IAAA,EAAM,QAAA,CAAS,SAAS,EAAE,MAAA,EAAAJ,OAAAA,EAAQ,GAAA,EAAK,CAAA;AAAA,IAChF;AAAA,EACF;AAAA,EAEQ,aAAa,MAAA,EAAyB;AAC5C,IAAA,OAAO,WAAW,GAAA,IAAO,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,OAAO,MAAA,IAAU,GAAA;AAAA,EACzE;AAAA,EAEQ,YAAY,YAAA,EAA8B;AAChD,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAIK,qCAAA,GAAsB,CAAA,IAAK,cAAcC,iCAAe,CAAA;AAC/E,IAAA,OAAO,KAAA,IAAS,CAAA,GAAI,IAAA,CAAK,MAAA,EAAO,CAAA;AAAA,EAClC;AAAA,EAEQ,OAAO,EAAA,EAA2B;AACxC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,EACzD;AAAA,EAEA,MAAM,IAAA,CACJ,IAAA,EACA,OAAA,EAOY;AACZ,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAY,OAAO,KAAK,CAAA,EAAG,MAAM,OAAO,CAAA;AAClE,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,KAAA,CACJ,IAAA,EACA,OAAA,EAOY;AACZ,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAA,CAAY,MAAA,EAAQ,MAAM,OAAO,CAAA;AAC3D,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,CACJ,IAAA,EACA,OAAA,EAOY;AACZ,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,QAAA,CAAY,KAAA,EAAO,MAAM,OAAO,CAAA;AAC1D,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,OAAA,CACJ,IAAA,EACA,OAAA,GAGI,EAAC,EACU;AACf,IAAA,MAAM,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,IAAA,EAAM,OAAO,CAAA;AAAA,EAC7C;AACF;AAEA,SAAS,OAAO,CAAA,EAAmB;AACjC,EAAA,OAAO,CAAA;AACT;;;ACrOO,IAAM,cAAN,MAAkB;AAAA,EACb,OAAA;AAAA,EACA,UAAA;AAAA,EAEV,WAAA,CAAY,QAAmB,SAAA,EAAmB;AAChD,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA;AAAA,EACpB;AAAA,EAEA,IAAc,SAAA,GAAoB;AAChC,IAAA,OAAO,CAAA,aAAA,EAAgB,KAAK,UAAU,CAAA,CAAA;AAAA,EACxC;AACF,CAAA;;;ACEO,SAAS,cAAc,IAAA,EAAwD;AACpF,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AACzC,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAA,CAAO,CAAC,CAAA,GAAI,CAAA;AAAA,IACd;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;ACtBO,IAAM,oBAAA,GAAuBC,MACjC,MAAA,CAAO;AAAA,EACN,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAUA,MAAE,MAAA;AACd,CAAC,EACA,WAAA,EAAY;;;ACJR,SAAS,WAAc,UAAA,EAA0B;AACtD,EAAA,OAAOA,MACJ,MAAA,CAAO;AAAA,IACN,IAAA,EAAMA,KAAAA,CAAE,KAAA,CAAM,UAAU,CAAA;AAAA,IACxB,IAAA,EAAM;AAAA,GACP,EACA,WAAA,EAAY;AACjB;AAEO,IAAM,IAAA,GAAN,MAAM,KAAA,CAAQ;AAAA,EACnB,IAAA;AAAA,EACA,IAAA;AAAA,EAEQ,OAAA,GAA4B,IAAA;AAAA,EAC5B,KAAA,GAAQ,EAAA;AAAA,EACR,WAAA,GAAmC,IAAA;AAAA,EACnC,SAAkC,EAAC;AAAA,EAE3C,WAAA,CAAY,MAAW,IAAA,EAAyD;AAC9E,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA;AAAA,EAGA,UAAA,CACE,MAAA,EACA,IAAA,EACA,UAAA,EACA,KAAA,EACM;AACN,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,WAAA,GAAc,UAAA;AACnB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EAEA,WAAA,GAAuB;AACrB,IAAA,OAAA,CAAQ,IAAA,CAAK,KAAK,IAAA,GAAO,CAAA,IAAK,KAAK,IAAA,CAAK,QAAA,GAAW,KAAK,IAAA,CAAK,KAAA;AAAA,EAC/D;AAAA,EAEA,MAAM,QAAA,GAA6B;AACjC,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,KAAK,WAAA,EAAa;AACtC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AACA,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAY,EAAG;AACvB,MAAA,MAAM,IAAI,MAAM,eAAe,CAAA;AAAA,IACjC;AACA,IAAA,MAAM,SAAA,GAAY,EAAE,GAAG,IAAA,CAAK,QAAQ,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,GAAO,CAAA,EAAE;AAC7D,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,WAAW,CAAA;AAE1C,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,KAAK,KAAA,EAAO;AAAA,MAC9C,MAAA,EAAQ,MAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,MAAM,OAAO,IAAI,KAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,IAAI,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,UAAA,CAAW,KAAK,OAAA,EAAS,IAAA,CAAK,OAAO,IAAA,CAAK,WAAA,EAAa,KAAK,MAAM,CAAA;AACvE,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,CAAC,MAAA,CAAO,QAAQ,CAAA,GAAiB;AAC/B,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAE;AAAA,EACpC;AAAA,EAEA,OAAO,cAAA,GAAoC;AACzC,IAAA,IAAI,IAAA,GAAgB,IAAA;AACpB,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAK,IAAA,EAAM;AAC5B,QAAA,MAAM,IAAA;AAAA,MACR;AACA,MAAA,IAAI,CAAC,IAAA,CAAK,WAAA,EAAY,EAAG;AACzB,MAAA,IAAA,GAAO,MAAM,KAAK,QAAA,EAAS;AAAA,IAC7B;AAAA,EACF;AACF;AC5EO,IAAM,UAAA,GAAaA,MACvB,MAAA,CAAO;AAAA,EACN,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,EACjB,MAAA,EAAQA,MAAE,IAAA,CAAK,CAAC,UAAU,SAAA,EAAW,aAAA,EAAe,WAAA,EAAa,QAAQ,CAAC,CAAA;AAAA,EAC1E,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,WAAWA,KAAAA,CAAE,IAAA,CAAK,CAAC,UAAA,EAAY,SAAS,CAAC,CAAA;AAAA,EACzC,UAAUA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACzC,SAAA,EAAWA,MAAE,MAAA,EAAO;AAAA,EACpB,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,aAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACrC,CAAC,EACA,WAAA,EAAY;AAIR,IAAM,yBAAA,GAA4BA,MACtC,MAAA,CAAO;AAAA,EACN,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,EACjB,MAAA,EAAQA,MAAE,MAAA;AACZ,CAAC,EACA,WAAA,EAAY;;;AChBR,IAAM,KAAA,GAAN,cAAoB,WAAA,CAAY;AAAA,EACrC,MAAM,MAAA,CACJ,MAAA,EACA,OAAA,GAII,EAAC,EACU;AACf,IAAA,MAAM,OAAO,aAAA,CAAc;AAAA,MACzB,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,KAAK,MAAA,CAAO,GAAA;AAAA,MACZ,EAAA,EAAI,MAAA,CAAO,EAAA,GACP,aAAA,CAAc;AAAA,QACZ,QAAA,EAAU,OAAO,EAAA,CAAG,QAAA;AAAA,QACpB,KAAA,EAAO,OAAO,EAAA,CAAG,KAAA;AAAA,QACjB,MAAA,EAAQ,OAAO,EAAA,CAAG,MAAA;AAAA,QAClB,KAAA,EAAO,OAAO,EAAA,CAAG,KAAA;AAAA,QACjB,QAAA,EAAU,OAAO,EAAA,CAAG,QAAA;AAAA,QACpB,QAAA,EAAU,OAAO,EAAA,CAAG,QAAA;AAAA,QACpB,KAAA,EAAO,OAAO,EAAA,CAAG,KAAA;AAAA,QACjB,QAAA,EAAU,OAAO,EAAA,CAAG,QAAA;AAAA,QACpB,aAAA,EAAe,OAAO,EAAA,CAAG;AAAA,OAC1B,CAAA,GACD,MAAA;AAAA,MACJ,gBAAgB,MAAA,CAAO,cAAA;AAAA,MACvB,qBAAqB,MAAA,CAAO,mBAAA;AAAA,MAC5B,SAAS,MAAA,CAAO;AAAA,KACjB,CAAA;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,MAAA,CAAA,EAAU;AAAA,MACnD,IAAA;AAAA,MACA,MAAA,EAAQ,UAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,IAAA,CACJ,MAAA,GAAyB,EAAC,EAC1B,OAAA,GAII,EAAC,EACgB;AACrB,IAAA,MAAM,QAAQ,aAAA,CAAc;AAAA,MAC1B,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,MAAA,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,WAAW,UAAU,CAAA;AACpC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAA,EAAM;AAAA,MACxC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,KAAA,GAAQ,MAAA;AAAA,MAC3C,GAAG;AAAA,KACJ,CAAA;AACD,IAAA,MAAM,OAAO,IAAI,IAAA,CAAW,GAAA,CAAI,IAAA,EAAM,IAAI,IAAI,CAAA;AAC9C,IAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,YAAY,KAAK,CAAA;AACrD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,GAAA,CACJ,MAAA,EACA,OAAA,GAII,EAAC,EACU;AACf,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,CAAA,EAAG,KAAK,SAAS,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,EAAI;AAAA,MAC5D,MAAA,EAAQ,UAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,OACJ,MAAA,EACA,MAAA,GAAmC,EAAC,EACpC,OAAA,GAII,EAAC,EACyB;AAC9B,IAAA,OAAO,IAAA,CAAK,QAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,SAAS,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,EAAI;AAAA,MAC7D,IAAA,EAAM,EAAE,MAAA,EAAQ,MAAA,CAAO,UAAU,WAAA,EAAY;AAAA,MAC7C,MAAA,EAAQ,yBAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AACF;ACnGO,IAAM,aAAA,GAAgBA,MAC1B,MAAA,CAAO;AAAA,EACN,SAAA,EAAWA,MAAE,MAAA,EAAO;AAAA,EACpB,MAAA,EAAQA,MAAE,IAAA,CAAK,CAAC,UAAU,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,UAAU,CAAC,CAAA;AAAA,EAClE,IAAA,EAAMA,MAAE,IAAA,CAAK,CAAC,OAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,EAClD,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,EACb,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,MAAMA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACrC,SAASA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACxC,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,QAAA,EAAUA,KAAAA,CAAE,KAAA,CAAMA,KAAAA,CAAE,QAAQ,CAAA;AAAA,EAC5B,WAAWA,KAAAA,CAAE,IAAA,CAAK,CAAC,UAAA,EAAY,SAAS,CAAC,CAAA;AAAA,EACzC,SAAA,EAAWA,MAAE,MAAA,EAAO;AAAA,EACpB,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,aAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACrC,CAAC,EACA,WAAA,EAAY;;;ACXR,IAAM,QAAA,GAAN,cAAuB,WAAA,CAAY;AAAA,EACxC,MAAM,MAAA,CACJ,MAAA,EACA,OAAA,GAII,EAAC,EACa;AAClB,IAAA,MAAM,OAAO,aAAA,CAAc;AAAA,MACzB,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AACD,IAAA,OAAO,KAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,SAAA,CAAA,EAAa;AAAA,MACtD,IAAA;AAAA,MACA,MAAA,EAAQ,aAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,IAAA,CACJ,MAAA,GAA4B,EAAC,EAC7B,OAAA,GAII,EAAC,EACmB;AACxB,IAAA,MAAM,QAAQ,aAAA,CAAc;AAAA,MAC1B,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,SAAA,CAAA;AAC9B,IAAA,MAAM,MAAA,GAAS,WAAW,aAAa,CAAA;AACvC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAA,EAAM;AAAA,MACxC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,KAAA,GAAQ,MAAA;AAAA,MAC3C,GAAG;AAAA,KACJ,CAAA;AACD,IAAA,MAAM,OAAO,IAAI,IAAA,CAAc,GAAA,CAAI,IAAA,EAAM,IAAI,IAAI,CAAA;AACjD,IAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,eAAe,KAAK,CAAA;AACxD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAM,GAAA,CACJ,SAAA,EACA,OAAA,GAII,EAAC,EACa;AAClB,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,CAAA,EAAG,KAAK,SAAS,CAAA,UAAA,EAAa,SAAS,CAAA,CAAA,EAAI;AAAA,MAClE,MAAA,EAAQ,aAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AACF;ACpEO,IAAM,iBAAA,GAAoBA,MAC9B,MAAA,CAAO;AAAA,EACN,MAAA,EAAQA,MAAE,MAAA,EAAO;AAAA,EACjB,QAAQA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACvC,YAAYA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC3C,aAAA,EAAeA,KAAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,EAAS;AAAA,EAC3D,WAAWA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACnC,CAAC,EACA,WAAA,EAAY;;;ACJR,IAAM,OAAA,GAAN,cAAsB,WAAA,CAAY;AAAA,EACvC,MAAM,MAAA,CACJ,MAAA,GAAkC,EAAC,EACnC,OAAA,GAII,EAAC,EACiB;AACtB,IAAA,MAAM,OAAO,aAAA,CAAc,EAAE,UAAA,EAAY,MAAA,CAAO,YAAY,CAAA;AAC5D,IAAA,OAAO,KAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,QAAA,CAAA,EAAY;AAAA,MACrD,MAAM,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,SAAS,IAAA,GAAO,MAAA;AAAA,MACxC,MAAA,EAAQ,iBAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,IAAA,CACJ,OAAA,GAII,EAAC,EACsB;AAC3B,IAAA,MAAM,MAAA,GAASA,KAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,KAAAA,CAAE,KAAA,CAAM,iBAAiB,CAAA,EAAG,CAAA,CAAE,WAAA,EAAY;AAC1E,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,QAAA,CAAA,EAAY;AAAA,MAClE,MAAA,EAAQ,MAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AACD,IAAA,OAAO,MAAA,CAAO,IAAA;AAAA,EAChB;AAAA,EAEA,MAAM,OACJ,MAAA,EACA,MAAA,GAAkE,EAAC,EACnE,OAAA,GAII,EAAC,EAC0B;AAC/B,IAAA,MAAM,OAAO,aAAA,CAAc;AAAA,MACzB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,eAAe,MAAA,CAAO;AAAA,KACvB,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAA,CAAK,CAAA,EAAG,KAAK,SAAS,CAAA,SAAA,EAAY,MAAM,CAAA,CAAA,EAAI;AAAA,MAC9D,IAAA;AAAA,MACA,MAAA,EAAQ,iBAAA;AAAA,MACR,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,MAAA,CACJ,MAAA,EACA,OAAA,GAGI,EAAC,EACU;AACf,IAAA,MAAM,IAAA,CAAK,QAAQ,OAAA,CAAQ,CAAA,EAAG,KAAK,SAAS,CAAA,SAAA,EAAY,MAAM,CAAA,CAAA,EAAI,OAAO,CAAA;AAAA,EAC3E;AACF;ACjEO,IAAM,gBAAA,GAAmBA,MAC7B,MAAA,CAAO;AAAA,EACN,EAAA,EAAIA,MAAE,MAAA,EAAO;AAAA,EACb,SAAA,EAAWA,MAAE,MAAA,EAAO;AAAA,EACpB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA,EACrB,cAAA,EAAgBA,KAAAA,CAAE,MAAA,CAAOA,KAAAA,CAAE,SAAS,CAAA;AAAA,EACpC,gBAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC/C,cAAcA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC7C,gBAAgBA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EAC/C,QAAQA,KAAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,WAAA,EAAa,QAAQ,CAAC,CAAA;AAAA,EACjD,OAAA,EAASA,MAAE,MAAA,EAAO;AAAA,EAClB,WAAA,EAAaA,MAAE,MAAA,EAAO;AAAA,EACtB,SAAA,EAAWA,MAAE,MAAA,EAAO;AAAA,EACpB,aAAaA,KAAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACrC,CAAC,EACA,WAAA,EAAY;;;ACZR,IAAM,WAAA,GAAN,cAA0B,WAAA,CAAY;AAAA,EAC3C,MAAM,KACJ,SAAA,EACA,MAAA,GAA+C,EAAC,EAChD,OAAA,GAII,EAAC,EACsB;AAC3B,IAAA,MAAM,KAAA,GAAQ,cAAc,EAAE,IAAA,EAAM,OAAO,IAAA,EAAM,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,CAAA;AAC5E,IAAA,MAAM,IAAA,GAAO,CAAA,EAAG,IAAA,CAAK,SAAS,aAAa,SAAS,CAAA,KAAA,CAAA;AACpD,IAAA,MAAM,MAAA,GAAS,WAAW,gBAAgB,CAAA;AAC1C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAA,EAAM;AAAA,MACxC,MAAA,EAAQ,MAAA;AAAA,MACR,OAAO,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,KAAA,GAAQ,MAAA;AAAA,MAC3C,GAAG;AAAA,KACJ,CAAA;AACD,IAAA,MAAM,OAAO,IAAI,IAAA,CAAiB,GAAA,CAAI,IAAA,EAAM,IAAI,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,kBAAkB,KAAK,CAAA;AAC3D,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACtBO,IAAM,iBAAN,MAAqB;AAAA,EAClB,OAAA;AAAA,EACA,UAAA;AAAA,EAER,WAAA,CAAY,QAAmB,SAAA,EAAmB;AAChD,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AACf,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA;AAAA,EACpB;AAAA,EAEA,IAAI,KAAA,GAAe;AACjB,IAAA,OAAO,IAAI,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EAChD;AAAA,EAEA,IAAI,QAAA,GAAqB;AACvB,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EACnD;AAAA,EAEA,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EAClD;AAAA,EAEA,IAAI,WAAA,GAA2B;AAC7B,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,CAAK,OAAA,EAAS,KAAK,UAAU,CAAA;AAAA,EACtD;AACF;AC3BO,IAAM,wBAAA,GAAN,cAAuCZ,8BAAA,CAAa;AAAA,EACzD,WAAA,CAAY,UAAU,+EAAA,EAA0B;AAC9C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAAA,EACd;AACF;AAEO,IAAM,QAAA,GAAN,MAAM,SAAA,CAAS;AAAA,EACpB,OAAO,OAAA,EAKK;AACV,IAAA,MAAM,QAAA,GAAW,UAAS,iBAAA,CAAkB,OAAA,CAAQ,KAAK,OAAA,CAAQ,MAAA,EAAQ,QAAQ,UAAU,CAAA;AAC3F,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,IAAA,CAAK,QAAA,EAAU,OAAO,CAAA;AACjD,IAAA,MAAM,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,WAAW,OAAO,CAAA;AAE3D,IAAA,IAAI,WAAA,CAAY,WAAW,YAAA,CAAa,MAAA,IAAU,CAACa,sBAAA,CAAgB,WAAA,EAAa,YAAY,CAAA,EAAG;AAC7F,MAAA,MAAM,IAAI,wBAAA,EAAyB;AAAA,IACrC;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,OAAO,iBAAA,CACL,GAAA,EACA,MAAA,EACA,UAAA,EACQ;AACR,IAAA,MAAM,eAAe,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CACpC,IAAA,GACA,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAC,GAAG,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA,CAC7B,KAAK,EAAE,CAAA;AACV,IAAA,MAAM,aAAa,GAAA,GAAM,YAAA;AACzB,IAAA,MAAM,MAAA,GAASC,kBAAW,QAAA,EAAU,UAAU,EAAE,MAAA,CAAO,UAAA,EAAY,OAAO,CAAA,CAAE,MAAA,EAAO;AACnF,IAAA,OAAO,MAAA,CAAO,SAAS,QAAQ,CAAA;AAAA,EACjC;AACF;;;ACpBO,IAAM,OAAA,GAAN,cAAsB,SAAA,CAAU;AAAA,EAC7B,iBAAA;AAAA,EAER,WAAA,CAAY,OAAA,GAA0B,EAAC,EAAG;AACxC,IAAA,IAAI,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,GAAA,CAAI,eAAA;AAC3C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAId,+BAAa,4HAA4C,CAAA;AAAA,IACrE;AAEA,IAAA,IAAI,SAAA,GAAY,OAAA,CAAQ,SAAA,IAAa,OAAA,CAAQ,GAAA,CAAI,kBAAA;AACjD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAIA,+BAAa,kIAAkD,CAAA;AAAA,IAC3E;AAEA,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,IAAI,gBAAA,IAAoBC,kCAAA;AAEnE,IAAA,KAAA,CAAM;AAAA,MACJ,MAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,gBAAgB,OAAA,CAAQ;AAAA,KACzB,CAAA;AAED,IAAA,IAAA,CAAK,iBAAA,GAAoB,SAAA;AAAA,EAC3B;AAAA,EAEA,IAAI,KAAA,GAAe;AACjB,IAAA,OAAO,IAAI,KAAA,CAAM,IAAA,EAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,EAC/C;AAAA,EAEA,IAAI,QAAA,GAAqB;AACvB,IAAA,OAAO,IAAI,QAAA,CAAS,IAAA,EAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,EAClD;AAAA,EAEA,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,EAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,EACjD;AAAA,EAEA,IAAI,WAAA,GAA2B;AAC7B,IAAA,OAAO,IAAI,WAAA,CAAY,IAAA,EAAM,IAAA,CAAK,iBAAiB,CAAA;AAAA,EACrD;AAAA,EAEA,IAAI,QAAA,GAAqB;AACvB,IAAA,OAAO,IAAI,QAAA,EAAS;AAAA,EACtB;AAAA,EAEA,SAAS,SAAA,EAAmC;AAC1C,IAAA,OAAO,IAAI,cAAA,CAAe,IAAA,EAAM,SAAS,CAAA;AAAA,EAC3C;AACF;;;ACtEA,IAAO,sBAAA,GAAQ","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"]}