@teamlearners/clawops 0.27.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var chunk6ZPYSHP3_cjs = require('./chunk-6ZPYSHP3.cjs');
5
+ var chunkSBK45525_cjs = require('./chunk-SBK45525.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 chunk6ZPYSHP3_cjs.ClawOpsError(`Invalid base_url: ${url}`);
16
+ throw new chunkSBK45525_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 chunk6ZPYSHP3_cjs.ClawOpsError(
20
+ throw new chunkSBK45525_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 ?? chunk6ZPYSHP3_cjs.DEFAULT_BASE_URL).replace(/\/+$/, ""));
34
- this._maxRetries = options.maxRetries ?? chunk6ZPYSHP3_cjs.DEFAULT_MAX_RETRIES;
35
- this._timeout = options.timeout ?? chunk6ZPYSHP3_cjs.DEFAULT_TIMEOUT;
33
+ this._baseURL = validateBaseUrl((options.baseURL ?? chunkSBK45525_cjs.DEFAULT_BASE_URL).replace(/\/+$/, ""));
34
+ this._maxRetries = options.maxRetries ?? chunkSBK45525_cjs.DEFAULT_MAX_RETRIES;
35
+ this._timeout = options.timeout ?? chunkSBK45525_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/${chunk6ZPYSHP3_cjs.VERSION}`,
44
+ "User-Agent": `claw-ops-node/${chunkSBK45525_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 chunk6ZPYSHP3_cjs.APITimeoutError({ method: method2, url });
80
+ throw new chunkSBK45525_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 chunk6ZPYSHP3_cjs.APIConnectionError({ method: method2, url });
87
+ throw new chunkSBK45525_cjs.APIConnectionError({ method: method2, url });
88
88
  } finally {
89
89
  clearTimeout(timeoutId);
90
90
  }
@@ -100,7 +100,7 @@ var APIClient = class {
100
100
  } catch {
101
101
  body = null;
102
102
  }
103
- throw chunk6ZPYSHP3_cjs.makeStatusError(response.status, body, response.headers, { method: method2, url });
103
+ throw chunkSBK45525_cjs.makeStatusError(response.status, body, response.headers, { method: method2, url });
104
104
  }
105
105
  }
106
106
  async _request(method2, path, options = {}) {
@@ -111,11 +111,11 @@ var APIClient = class {
111
111
  try {
112
112
  json = await response.json();
113
113
  } catch {
114
- throw new chunk6ZPYSHP3_cjs.APIResponseValidationError({ status: response.status }, { method: method2, url });
114
+ throw new chunkSBK45525_cjs.APIResponseValidationError({ status: response.status }, { method: method2, url });
115
115
  }
116
116
  const parsed = options.castTo.safeParse(json);
117
117
  if (!parsed.success) {
118
- throw new chunk6ZPYSHP3_cjs.APIResponseValidationError({ status: response.status }, { method: method2, url });
118
+ throw new chunkSBK45525_cjs.APIResponseValidationError({ status: response.status }, { method: method2, url });
119
119
  }
120
120
  return parsed.data;
121
121
  }
@@ -123,7 +123,7 @@ var APIClient = class {
123
123
  return status === 408 || status === 409 || status === 429 || status >= 500;
124
124
  }
125
125
  _retryDelay(retriesTaken) {
126
- const delay = Math.min(chunk6ZPYSHP3_cjs.INITIAL_RETRY_DELAY * 2 ** retriesTaken, chunk6ZPYSHP3_cjs.MAX_RETRY_DELAY);
126
+ const delay = Math.min(chunkSBK45525_cjs.INITIAL_RETRY_DELAY * 2 ** retriesTaken, chunkSBK45525_cjs.MAX_RETRY_DELAY);
127
127
  return delay * (1 + Math.random());
128
128
  }
129
129
  _sleep(ms) {
@@ -141,9 +141,21 @@ var APIClient = class {
141
141
  const result = await this._request("PUT", path, options);
142
142
  return result;
143
143
  }
144
+ async _patch(path, options) {
145
+ const result = await this._request("PATCH", path, options);
146
+ return result;
147
+ }
144
148
  async _getRaw(path, options = {}) {
145
149
  return this._send("GET", path, options);
146
150
  }
151
+ /**
152
+ * 본문을 돌려주는 DELETE. 기존 `_delete` 는 void 라 응답을 버리는데, soft delete 처럼
153
+ * 삭제 결과 리소스를 그대로 반환하는 endpoint 가 있어서 따로 둔다.
154
+ */
155
+ async _deleteWithResponse(path, options) {
156
+ const result = await this._request("DELETE", path, options);
157
+ return result;
158
+ }
147
159
  async _delete(path, options = {}) {
148
160
  await this._request("DELETE", path, options);
149
161
  }
@@ -308,6 +320,112 @@ var AssignmentLinks = class extends APIResource {
308
320
  );
309
321
  }
310
322
  };
323
+ var BlockedRecipientSchema = zod.z.object({
324
+ id: zod.z.string(),
325
+ /** 국내 표기로 정규화된 번호 (예 '01012345678'). */
326
+ number: zod.z.string(),
327
+ channel: zod.z.enum(["call", "message"]),
328
+ /** 지금 차단 중인지. 해제분도 이력으로 조회되므로 이 값으로 구분한다. */
329
+ active: zod.z.boolean(),
330
+ source: zod.z.string(),
331
+ sourceRef: zod.z.string().nullable().optional(),
332
+ note: zod.z.string().nullable().optional(),
333
+ createdBy: zod.z.string().nullable().optional(),
334
+ createdAt: zod.z.string(),
335
+ updatedAt: zod.z.string(),
336
+ unblockedAt: zod.z.string().nullable().optional(),
337
+ unblockedSource: zod.z.string().nullable().optional(),
338
+ unblockedBy: zod.z.string().nullable().optional(),
339
+ unblockedNote: zod.z.string().nullable().optional()
340
+ }).passthrough();
341
+
342
+ // src/resources/blocked-recipients.ts
343
+ var BlockedRecipients = class extends APIResource {
344
+ /**
345
+ * 번호를 수신거부 명단에 등록합니다.
346
+ *
347
+ * 하이픈·`+82` 표기 모두 허용되며 국내 표기로 정규화되어 저장됩니다.
348
+ *
349
+ * **멱등입니다** — 이미 차단 중인 (번호, 채널)을 다시 등록해도 에러가 아니라 기존 항목을
350
+ * 돌려줍니다. 같은 사람이 수신거부를 두 번 요청하는 것은 정상 상황이기 때문입니다.
351
+ */
352
+ async create(params, options = {}) {
353
+ const body = stripNotGiven({
354
+ number: params.number,
355
+ channel: params.channel,
356
+ source: params.source,
357
+ sourceRef: params.sourceRef,
358
+ note: params.note
359
+ });
360
+ return this._client._post(`${this._basePath}/blocked-recipients`, {
361
+ body,
362
+ castTo: BlockedRecipientSchema,
363
+ ...options
364
+ });
365
+ }
366
+ /**
367
+ * 수신거부 목록을 조회합니다. 기본은 **현재 차단 중인 항목만** 이며,
368
+ * 해제 이력까지 보려면 `status` 를 `'released'` 또는 `'all'` 로 지정합니다.
369
+ */
370
+ async list(params = {}, options = {}) {
371
+ const query = stripNotGiven({
372
+ channel: params.channel,
373
+ number: params.number,
374
+ status: params.status,
375
+ page: params.page,
376
+ pageSize: params.pageSize
377
+ });
378
+ const path = `${this._basePath}/blocked-recipients`;
379
+ const raw = await this._client._get(path, {
380
+ castTo: PageSchema(BlockedRecipientSchema),
381
+ query: Object.keys(query).length ? query : void 0,
382
+ ...options
383
+ });
384
+ const page = new Page(raw.data, raw.meta);
385
+ page._setClient(this._client, path, BlockedRecipientSchema, query);
386
+ return page;
387
+ }
388
+ /** 항목 상세를 조회합니다. 해제된 항목도 이력으로 남아 조회됩니다(`active: false`). */
389
+ async retrieve(blockId, options = {}) {
390
+ return this._client._get(`${this._basePath}/blocked-recipients/${blockId}`, {
391
+ castTo: BlockedRecipientSchema,
392
+ ...options
393
+ });
394
+ }
395
+ /**
396
+ * 메모를 수정합니다.
397
+ *
398
+ * 번호와 채널은 바꿀 수 없습니다 — 바꾸면 "누가 무엇을 언제 거부했는가"라는 증빙이
399
+ * 뒤틀립니다. 잘못 등록했다면 해제한 뒤 올바른 번호로 새로 등록하세요.
400
+ */
401
+ async update(blockId, params = {}, options = {}) {
402
+ return this._client._patch(`${this._basePath}/blocked-recipients/${blockId}`, {
403
+ body: { note: params.note ?? null },
404
+ castTo: BlockedRecipientSchema,
405
+ ...options
406
+ });
407
+ }
408
+ /**
409
+ * 수신거부를 해제해 다시 발신할 수 있게 합니다.
410
+ *
411
+ * **항목은 삭제되지 않습니다.** `active` 가 false 가 되고 `unblockedAt` 이 기록될 뿐,
412
+ * 행은 이력으로 남습니다 — 언제 거부했고 언제 풀렸는지가 곧 증빙이기 때문입니다.
413
+ * 해제분은 `list({ status: 'released' })` 로 볼 수 있습니다.
414
+ *
415
+ * 이미 해제된 항목에 다시 호출해도 성공하며, 최초 해제 시각은 덮어쓰지 않습니다.
416
+ */
417
+ async release(blockId, params = {}, options = {}) {
418
+ const body = stripNotGiven({ note: params.note });
419
+ return this._client._deleteWithResponse(
420
+ `${this._basePath}/blocked-recipients/${blockId}`,
421
+ {
422
+ body: Object.keys(body).length ? body : void 0,
423
+ castTo: BlockedRecipientSchema,
424
+ ...options
425
+ }
426
+ );
427
+ }
428
+ };
311
429
  var CallSchema = zod.z.object({
312
430
  callId: zod.z.string(),
313
431
  /**
@@ -555,25 +673,53 @@ var Messages = class extends APIResource {
555
673
  };
556
674
  var PhoneNumberSchema = zod.z.object({
557
675
  number: zod.z.string(),
676
+ numberType: zod.z.string().nullable().optional(),
558
677
  source: zod.z.string().nullable().optional(),
559
- webhookUrl: zod.z.string().nullable().optional(),
560
- webhookMethod: zod.z.enum(["POST", "GET"]).nullable().optional(),
561
- routingType: zod.z.enum(["webhook", "sip", "softphone"]).nullable().optional(),
678
+ // routingType 은 enum 으로 좁히지 않는다. 좁히면 서버가 라우팅 종류를 늘렸을 때 그 번호가
679
+ // 섞인 목록 조회가 통째로 실패한다(0.28.0 까지의 실제 결함: 'agent' 로 라우팅된 번호
680
+ // 하나가 numbers.list() 전체를 깨뜨렸다).
681
+ routingType: zod.z.string().nullable().optional(),
682
+ agentId: zod.z.string().nullable().optional(),
683
+ callFlowId: zod.z.string().nullable().optional(),
684
+ forwardTo: zod.z.string().nullable().optional(),
562
685
  sipEndpointId: zod.z.string().nullable().optional(),
563
686
  sipCredentialId: zod.z.string().nullable().optional(),
687
+ webhookUrl: zod.z.string().nullable().optional(),
688
+ webhookMethod: zod.z.string().nullable().optional(),
689
+ webhookHeaders: zod.z.record(zod.z.string()).nullable().optional(),
690
+ callContextUrl: zod.z.string().nullable().optional(),
691
+ statusCallback: zod.z.string().nullable().optional(),
692
+ statusCallbackEvents: zod.z.string().nullable().optional(),
693
+ dictionaryId: zod.z.string().nullable().optional(),
564
694
  createdAt: zod.z.string().nullable().optional()
565
695
  }).passthrough();
566
696
 
567
697
  // src/resources/numbers.ts
568
698
  var Numbers = class extends APIResource {
699
+ /**
700
+ * 번호를 발급합니다. 번호 풀에서 자동으로 배정되며 어떤 번호가 나올지는 지정할 수 없습니다.
701
+ *
702
+ * 발급 직후 번호는 `routingType: "webhook"` 이고 `webhookUrl` 이 비어 있어, 그대로 두면
703
+ * 걸려온 전화가 거절됩니다. 이어서 `update()` 로 착신 라우팅을 지정하세요.
704
+ */
569
705
  async create(params = {}, options = {}) {
570
- const body = stripNotGiven({ webhookUrl: params.webhookUrl });
706
+ const body = stripNotGiven({
707
+ webhookUrl: params.webhookUrl,
708
+ webhookMethod: params.webhookMethod,
709
+ webhookHeaders: params.webhookHeaders,
710
+ statusCallback: params.statusCallback,
711
+ statusCallbackEvents: params.statusCallbackEvents
712
+ });
571
713
  return this._client._post(`${this._basePath}/numbers`, {
572
714
  body: Object.keys(body).length ? body : void 0,
573
715
  castTo: PhoneNumberSchema,
574
716
  ...options
575
717
  });
576
718
  }
719
+ /**
720
+ * 등록된 번호 목록을 조회합니다. 페이지네이션과 필터가 없으며 보유한 번호가 한 번에 전부
721
+ * 반환됩니다.
722
+ */
577
723
  async list(options = {}) {
578
724
  const schema = zod.z.object({ data: zod.z.array(PhoneNumberSchema) }).passthrough();
579
725
  const result = await this._client._get(`${this._basePath}/numbers`, {
@@ -582,13 +728,30 @@ var Numbers = class extends APIResource {
582
728
  });
583
729
  return result.data;
584
730
  }
731
+ /**
732
+ * 번호 설정을 수정합니다. 착신 라우팅(webhook/agent/callflow/forward/sip/softphone)과
733
+ * webhook, 상태 통지, 받아쓰기 사전을 변경할 수 있습니다. 보낸 필드만 반영되고 생략한
734
+ * 필드는 유지됩니다.
735
+ *
736
+ * 라우팅을 바꾸면 다른 라우팅 필드는 서버에서 자동으로 비워집니다. `agent` 에서
737
+ * `webhook` 으로 되돌리면 `agentId` 가 null 이 되므로, 다시 `agent` 로 돌아갈 때
738
+ * `agentId` 를 새로 지정해야 합니다.
739
+ */
585
740
  async update(number, params = {}, options = {}) {
586
741
  const body = stripNotGiven({
587
- webhookUrl: params.webhookUrl,
588
- webhookMethod: params.webhookMethod,
589
742
  routingType: params.routingType,
743
+ agentId: params.agentId,
744
+ callFlowId: params.callFlowId,
745
+ forwardTo: params.forwardTo,
590
746
  sipEndpointId: params.sipEndpointId,
591
- sipCredentialId: params.sipCredentialId
747
+ sipCredentialId: params.sipCredentialId,
748
+ webhookUrl: params.webhookUrl,
749
+ webhookMethod: params.webhookMethod,
750
+ webhookHeaders: params.webhookHeaders,
751
+ callContextUrl: params.callContextUrl,
752
+ statusCallback: params.statusCallback,
753
+ statusCallbackEvents: params.statusCallbackEvents,
754
+ dictionaryId: params.dictionaryId
592
755
  });
593
756
  return this._client._put(`${this._basePath}/numbers/${number}`, {
594
757
  body,
@@ -596,6 +759,10 @@ var Numbers = class extends APIResource {
596
759
  ...options
597
760
  });
598
761
  }
762
+ /**
763
+ * 번호를 반납합니다. 번호는 풀로 복귀하며 되돌릴 수 없습니다. 같은 번호를 다시
764
+ * 발급받는다는 보장이 없습니다.
765
+ */
599
766
  async delete(number, options = {}) {
600
767
  await this._client._delete(`${this._basePath}/numbers/${number}`, options);
601
768
  }
@@ -776,8 +943,11 @@ var AccountContext = class {
776
943
  get assignmentLinks() {
777
944
  return new AssignmentLinks(this._client, this._accountId);
778
945
  }
946
+ get blockedRecipients() {
947
+ return new BlockedRecipients(this._client, this._accountId);
948
+ }
779
949
  };
780
- var WebhookVerificationError = class extends chunk6ZPYSHP3_cjs.ClawOpsError {
950
+ var WebhookVerificationError = class extends chunkSBK45525_cjs.ClawOpsError {
781
951
  constructor(message = "Webhook \uC11C\uBA85\uC774 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.") {
782
952
  super(message);
783
953
  this.name = "WebhookVerificationError";
@@ -807,13 +977,13 @@ var ClawOps = class extends APIClient {
807
977
  constructor(options = {}) {
808
978
  let apiKey = options.apiKey ?? process.env.CLAWOPS_API_KEY;
809
979
  if (!apiKey) {
810
- throw new chunk6ZPYSHP3_cjs.ClawOpsError("apiKey\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_API_KEY \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
980
+ throw new chunkSBK45525_cjs.ClawOpsError("apiKey\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_API_KEY \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
811
981
  }
812
982
  let accountId = options.accountId ?? process.env.CLAWOPS_ACCOUNT_ID;
813
983
  if (!accountId) {
814
- throw new chunk6ZPYSHP3_cjs.ClawOpsError("accountId\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_ACCOUNT_ID \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
984
+ throw new chunkSBK45525_cjs.ClawOpsError("accountId\uB97C \uC9C0\uC815\uD558\uAC70\uB098 CLAWOPS_ACCOUNT_ID \uD658\uACBD\uBCC0\uC218\uB97C \uC124\uC815\uD558\uC138\uC694.");
815
985
  }
816
- const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? chunk6ZPYSHP3_cjs.DEFAULT_BASE_URL;
986
+ const baseURL = options.baseURL ?? process.env.CLAWOPS_BASE_URL ?? chunkSBK45525_cjs.DEFAULT_BASE_URL;
817
987
  super({
818
988
  apiKey,
819
989
  baseURL,
@@ -848,6 +1018,9 @@ var ClawOps = class extends APIClient {
848
1018
  get assignmentLinks() {
849
1019
  return new AssignmentLinks(this, this._defaultAccountId);
850
1020
  }
1021
+ get blockedRecipients() {
1022
+ return new BlockedRecipients(this, this._defaultAccountId);
1023
+ }
851
1024
  get webhooks() {
852
1025
  return new Webhooks();
853
1026
  }
@@ -861,79 +1034,80 @@ var client_default_default = ClawOps;
861
1034
 
862
1035
  Object.defineProperty(exports, "APIConnectionError", {
863
1036
  enumerable: true,
864
- get: function () { return chunk6ZPYSHP3_cjs.APIConnectionError; }
1037
+ get: function () { return chunkSBK45525_cjs.APIConnectionError; }
865
1038
  });
866
1039
  Object.defineProperty(exports, "APIError", {
867
1040
  enumerable: true,
868
- get: function () { return chunk6ZPYSHP3_cjs.APIError; }
1041
+ get: function () { return chunkSBK45525_cjs.APIError; }
869
1042
  });
870
1043
  Object.defineProperty(exports, "APIResponseValidationError", {
871
1044
  enumerable: true,
872
- get: function () { return chunk6ZPYSHP3_cjs.APIResponseValidationError; }
1045
+ get: function () { return chunkSBK45525_cjs.APIResponseValidationError; }
873
1046
  });
874
1047
  Object.defineProperty(exports, "APIStatusError", {
875
1048
  enumerable: true,
876
- get: function () { return chunk6ZPYSHP3_cjs.APIStatusError; }
1049
+ get: function () { return chunkSBK45525_cjs.APIStatusError; }
877
1050
  });
878
1051
  Object.defineProperty(exports, "APITimeoutError", {
879
1052
  enumerable: true,
880
- get: function () { return chunk6ZPYSHP3_cjs.APITimeoutError; }
1053
+ get: function () { return chunkSBK45525_cjs.APITimeoutError; }
881
1054
  });
882
1055
  Object.defineProperty(exports, "AgentConnectionError", {
883
1056
  enumerable: true,
884
- get: function () { return chunk6ZPYSHP3_cjs.AgentConnectionError; }
1057
+ get: function () { return chunkSBK45525_cjs.AgentConnectionError; }
885
1058
  });
886
1059
  Object.defineProperty(exports, "AgentError", {
887
1060
  enumerable: true,
888
- get: function () { return chunk6ZPYSHP3_cjs.AgentError; }
1061
+ get: function () { return chunkSBK45525_cjs.AgentError; }
889
1062
  });
890
1063
  Object.defineProperty(exports, "AuthenticationError", {
891
1064
  enumerable: true,
892
- get: function () { return chunk6ZPYSHP3_cjs.AuthenticationError; }
1065
+ get: function () { return chunkSBK45525_cjs.AuthenticationError; }
893
1066
  });
894
1067
  Object.defineProperty(exports, "BadRequestError", {
895
1068
  enumerable: true,
896
- get: function () { return chunk6ZPYSHP3_cjs.BadRequestError; }
1069
+ get: function () { return chunkSBK45525_cjs.BadRequestError; }
897
1070
  });
898
1071
  Object.defineProperty(exports, "ClawOpsError", {
899
1072
  enumerable: true,
900
- get: function () { return chunk6ZPYSHP3_cjs.ClawOpsError; }
1073
+ get: function () { return chunkSBK45525_cjs.ClawOpsError; }
901
1074
  });
902
1075
  Object.defineProperty(exports, "ConflictError", {
903
1076
  enumerable: true,
904
- get: function () { return chunk6ZPYSHP3_cjs.ConflictError; }
1077
+ get: function () { return chunkSBK45525_cjs.ConflictError; }
905
1078
  });
906
1079
  Object.defineProperty(exports, "InternalServerError", {
907
1080
  enumerable: true,
908
- get: function () { return chunk6ZPYSHP3_cjs.InternalServerError; }
1081
+ get: function () { return chunkSBK45525_cjs.InternalServerError; }
909
1082
  });
910
1083
  Object.defineProperty(exports, "NotFoundError", {
911
1084
  enumerable: true,
912
- get: function () { return chunk6ZPYSHP3_cjs.NotFoundError; }
1085
+ get: function () { return chunkSBK45525_cjs.NotFoundError; }
913
1086
  });
914
1087
  Object.defineProperty(exports, "PermissionDeniedError", {
915
1088
  enumerable: true,
916
- get: function () { return chunk6ZPYSHP3_cjs.PermissionDeniedError; }
1089
+ get: function () { return chunkSBK45525_cjs.PermissionDeniedError; }
917
1090
  });
918
1091
  Object.defineProperty(exports, "RateLimitError", {
919
1092
  enumerable: true,
920
- get: function () { return chunk6ZPYSHP3_cjs.RateLimitError; }
1093
+ get: function () { return chunkSBK45525_cjs.RateLimitError; }
921
1094
  });
922
1095
  Object.defineProperty(exports, "ServiceUnavailableError", {
923
1096
  enumerable: true,
924
- get: function () { return chunk6ZPYSHP3_cjs.ServiceUnavailableError; }
1097
+ get: function () { return chunkSBK45525_cjs.ServiceUnavailableError; }
925
1098
  });
926
1099
  Object.defineProperty(exports, "UnprocessableEntityError", {
927
1100
  enumerable: true,
928
- get: function () { return chunk6ZPYSHP3_cjs.UnprocessableEntityError; }
1101
+ get: function () { return chunkSBK45525_cjs.UnprocessableEntityError; }
929
1102
  });
930
1103
  Object.defineProperty(exports, "VERSION", {
931
1104
  enumerable: true,
932
- get: function () { return chunk6ZPYSHP3_cjs.VERSION; }
1105
+ get: function () { return chunkSBK45525_cjs.VERSION; }
933
1106
  });
934
1107
  exports.APIClient = APIClient;
935
1108
  exports.AccountContext = AccountContext;
936
1109
  exports.AssignmentLinks = AssignmentLinks;
1110
+ exports.BlockedRecipients = BlockedRecipients;
937
1111
  exports.Calls = Calls;
938
1112
  exports.ClawOps = ClawOps;
939
1113
  exports.Messages = Messages;