@atribu/node 0.1.2 → 0.2.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.
@@ -83,4 +83,4 @@ declare class AtribuWebhookError extends AtribuError {
83
83
  constructor(code: WebhookErrorCode, message: string);
84
84
  }
85
85
 
86
- export { AtribuError as A, type OauthErrorCode as O, type RetryHint as R, type WebhookErrorCode as W, type ApiErrorBody as a, type ApiErrorCode as b, AtribuApiError as c, AtribuConfigError as d, AtribuOauthError as e, AtribuTransportError as f, AtribuWebhookError as g };
86
+ export { type ApiErrorBody as A, type OauthErrorCode as O, type RetryHint as R, type WebhookErrorCode as W, type ApiErrorCode as a, AtribuApiError as b, AtribuConfigError as c, AtribuError as d, AtribuOauthError as e, AtribuTransportError as f, AtribuWebhookError as g };
@@ -83,4 +83,4 @@ declare class AtribuWebhookError extends AtribuError {
83
83
  constructor(code: WebhookErrorCode, message: string);
84
84
  }
85
85
 
86
- export { AtribuError as A, type OauthErrorCode as O, type RetryHint as R, type WebhookErrorCode as W, type ApiErrorBody as a, type ApiErrorCode as b, AtribuApiError as c, AtribuConfigError as d, AtribuOauthError as e, AtribuTransportError as f, AtribuWebhookError as g };
86
+ export { type ApiErrorBody as A, type OauthErrorCode as O, type RetryHint as R, type WebhookErrorCode as W, type ApiErrorCode as a, AtribuApiError as b, AtribuConfigError as c, AtribuError as d, AtribuOauthError as e, AtribuTransportError as f, AtribuWebhookError as g };
package/dist/index.cjs CHANGED
@@ -128,7 +128,7 @@ function parseRetryAfter(header) {
128
128
  }
129
129
 
130
130
  // src/version.ts
131
- var SDK_VERSION = "0.1.2";
131
+ var SDK_VERSION = "0.1.4";
132
132
 
133
133
  // src/runtime.ts
134
134
  function detectRuntime() {
@@ -156,6 +156,7 @@ var HttpClient = class {
156
156
  constructor(cfg) {
157
157
  this.cfg = cfg;
158
158
  }
159
+ cfg;
159
160
  async request(opts) {
160
161
  const url = this.buildUrl(opts.path, opts.query);
161
162
  const headers = this.buildHeaders(opts);
@@ -286,6 +287,7 @@ var MessagesResource = class {
286
287
  constructor(http) {
287
288
  this.http = http;
288
289
  }
290
+ http;
289
291
  async send(input, opts = {}) {
290
292
  const res = await this.http.request({
291
293
  method: "POST",
@@ -303,6 +305,7 @@ var CommentsResource = class {
303
305
  constructor(http) {
304
306
  this.http = http;
305
307
  }
308
+ http;
306
309
  async reply(input, opts = {}) {
307
310
  const { comment_id, ...body } = input;
308
311
  const res = await this.http.request({
@@ -327,11 +330,51 @@ var CommentsResource = class {
327
330
  }
328
331
  };
329
332
 
333
+ // src/resources/connections.ts
334
+ var ConnectionsResource = class {
335
+ constructor(http) {
336
+ this.http = http;
337
+ }
338
+ http;
339
+ async list(opts = {}) {
340
+ const qs = opts.channel ? `?channel=${encodeURIComponent(opts.channel)}` : "";
341
+ const res = await this.http.request({
342
+ method: "GET",
343
+ path: `/api/v1/connections${qs}`,
344
+ signal: opts.signal
345
+ });
346
+ return res.data;
347
+ }
348
+ async get(id, opts = {}) {
349
+ const res = await this.http.request({
350
+ method: "GET",
351
+ path: `/api/v1/connections/${encodeURIComponent(id)}`,
352
+ signal: opts.signal
353
+ });
354
+ return res.data;
355
+ }
356
+ /**
357
+ * Revoke this OAuth app's authorization for the connection. Does NOT
358
+ * disconnect the underlying data_connection (other consumers + the
359
+ * Atribu UI still see it). Direct admin keys reject this call with 400.
360
+ */
361
+ async revoke(id, opts = {}) {
362
+ await this.http.request({
363
+ method: "DELETE",
364
+ path: `/api/v1/connections/${encodeURIComponent(id)}`,
365
+ idempotencyKey: opts.idempotencyKey,
366
+ signal: opts.signal,
367
+ expectEmpty: true
368
+ });
369
+ }
370
+ };
371
+
330
372
  // src/resources/webhook-subscriptions.ts
331
373
  var WebhookSubscriptionsResource = class {
332
374
  constructor(http) {
333
375
  this.http = http;
334
376
  }
377
+ http;
335
378
  async list(opts = {}) {
336
379
  const res = await this.http.request({
337
380
  method: "GET",
@@ -395,6 +438,7 @@ var WebhookDeliveriesResource = class {
395
438
  constructor(http) {
396
439
  this.http = http;
397
440
  }
441
+ http;
398
442
  async replay(id, opts = {}) {
399
443
  const res = await this.http.request({
400
444
  method: "POST",
@@ -406,6 +450,195 @@ var WebhookDeliveriesResource = class {
406
450
  }
407
451
  };
408
452
 
453
+ // src/resources/whatsapp/templates.ts
454
+ var WhatsAppTemplatesResource = class {
455
+ constructor(http) {
456
+ this.http = http;
457
+ }
458
+ http;
459
+ async list(opts) {
460
+ const res = await this.http.request({
461
+ method: "GET",
462
+ path: `/api/v1/whatsapp/templates?connection_id=${encodeURIComponent(opts.connectionId)}`,
463
+ signal: opts.signal
464
+ });
465
+ return res.data;
466
+ }
467
+ async create(input, opts = {}) {
468
+ const res = await this.http.request({
469
+ method: "POST",
470
+ path: "/api/v1/whatsapp/templates",
471
+ body: input,
472
+ idempotencyKey: opts.idempotencyKey,
473
+ signal: opts.signal
474
+ });
475
+ return res.data;
476
+ }
477
+ async delete(name, opts) {
478
+ await this.http.request({
479
+ method: "DELETE",
480
+ path: `/api/v1/whatsapp/templates/${encodeURIComponent(name)}?connection_id=${encodeURIComponent(opts.connectionId)}`,
481
+ idempotencyKey: opts.idempotencyKey,
482
+ signal: opts.signal,
483
+ expectEmpty: true
484
+ });
485
+ }
486
+ };
487
+
488
+ // src/resources/whatsapp/broadcasts.ts
489
+ var WhatsAppBroadcastsResource = class {
490
+ constructor(http) {
491
+ this.http = http;
492
+ }
493
+ http;
494
+ async list(opts) {
495
+ const res = await this.http.request({
496
+ method: "GET",
497
+ path: `/api/v1/whatsapp/broadcasts?connection_id=${encodeURIComponent(opts.connectionId)}`,
498
+ signal: opts.signal
499
+ });
500
+ return res.data;
501
+ }
502
+ async create(input, opts = {}) {
503
+ const res = await this.http.request({
504
+ method: "POST",
505
+ path: "/api/v1/whatsapp/broadcasts",
506
+ body: input,
507
+ idempotencyKey: opts.idempotencyKey,
508
+ signal: opts.signal
509
+ });
510
+ return res.data;
511
+ }
512
+ async get(id, opts = {}) {
513
+ const res = await this.http.request({
514
+ method: "GET",
515
+ path: `/api/v1/whatsapp/broadcasts/${encodeURIComponent(id)}`,
516
+ signal: opts.signal
517
+ });
518
+ return res.data;
519
+ }
520
+ async cancel(id, opts = {}) {
521
+ const body = { status: "cancelled" };
522
+ const res = await this.http.request({
523
+ method: "PATCH",
524
+ path: `/api/v1/whatsapp/broadcasts/${encodeURIComponent(id)}`,
525
+ body,
526
+ idempotencyKey: opts.idempotencyKey,
527
+ signal: opts.signal
528
+ });
529
+ return res.data;
530
+ }
531
+ /**
532
+ * Execute the broadcast. Long-running — iterates recipients with 100ms
533
+ * pacing between sends. Consider extending your HTTP client's timeout
534
+ * for broadcasts over a few hundred recipients (the Atribu server caps
535
+ * the route at 300s).
536
+ */
537
+ async send(id, opts = {}) {
538
+ const res = await this.http.request({
539
+ method: "POST",
540
+ path: `/api/v1/whatsapp/broadcasts/${encodeURIComponent(id)}/send`,
541
+ idempotencyKey: opts.idempotencyKey,
542
+ signal: opts.signal
543
+ });
544
+ return res.data;
545
+ }
546
+ };
547
+
548
+ // src/resources/whatsapp/index.ts
549
+ var WhatsAppNamespace = class {
550
+ templates;
551
+ broadcasts;
552
+ constructor(http) {
553
+ this.templates = new WhatsAppTemplatesResource(http);
554
+ this.broadcasts = new WhatsAppBroadcastsResource(http);
555
+ }
556
+ };
557
+
558
+ // src/resources/instagram/triggers.ts
559
+ var InstagramTriggersResource = class {
560
+ constructor(http) {
561
+ this.http = http;
562
+ }
563
+ http;
564
+ async list(opts) {
565
+ const res = await this.http.request({
566
+ method: "GET",
567
+ path: `/api/v1/instagram/triggers?connection_id=${encodeURIComponent(opts.connectionId)}`,
568
+ signal: opts.signal
569
+ });
570
+ return res.data;
571
+ }
572
+ async create(input, opts = {}) {
573
+ const res = await this.http.request({
574
+ method: "POST",
575
+ path: "/api/v1/instagram/triggers",
576
+ body: input,
577
+ idempotencyKey: opts.idempotencyKey,
578
+ signal: opts.signal
579
+ });
580
+ return res.data;
581
+ }
582
+ async update(id, input, opts = {}) {
583
+ const res = await this.http.request({
584
+ method: "PATCH",
585
+ path: `/api/v1/instagram/triggers/${encodeURIComponent(id)}`,
586
+ body: input,
587
+ idempotencyKey: opts.idempotencyKey,
588
+ signal: opts.signal
589
+ });
590
+ return res.data;
591
+ }
592
+ async delete(id, opts = {}) {
593
+ await this.http.request({
594
+ method: "DELETE",
595
+ path: `/api/v1/instagram/triggers/${encodeURIComponent(id)}`,
596
+ idempotencyKey: opts.idempotencyKey,
597
+ signal: opts.signal,
598
+ expectEmpty: true
599
+ });
600
+ }
601
+ /**
602
+ * Send the trigger's `opening_message` as a one-off DM to a test IGSID.
603
+ * Uses Meta's HUMAN_AGENT tag — recipient must have DMed the IG account
604
+ * in the past 7 days, otherwise Meta rejects the send.
605
+ */
606
+ async testDm(id, input, opts = {}) {
607
+ const res = await this.http.request({
608
+ method: "POST",
609
+ path: `/api/v1/instagram/triggers/${encodeURIComponent(id)}/test-dm`,
610
+ body: input,
611
+ idempotencyKey: opts.idempotencyKey,
612
+ signal: opts.signal
613
+ });
614
+ return res.data;
615
+ }
616
+ /**
617
+ * Manually clear the comment-to-DM circuit breaker for the connection's
618
+ * IG account. The breaker normally clears itself once spam signals
619
+ * subside; this method exists for ops intervention.
620
+ */
621
+ async resumeCircuit(opts) {
622
+ const body = { connection_id: opts.connectionId };
623
+ const res = await this.http.request({
624
+ method: "POST",
625
+ path: "/api/v1/instagram/triggers/resume",
626
+ body,
627
+ idempotencyKey: opts.idempotencyKey,
628
+ signal: opts.signal
629
+ });
630
+ return res.data;
631
+ }
632
+ };
633
+
634
+ // src/resources/instagram/index.ts
635
+ var InstagramNamespace = class {
636
+ triggers;
637
+ constructor(http) {
638
+ this.triggers = new InstagramTriggersResource(http);
639
+ }
640
+ };
641
+
409
642
  // src/retry-wrapper.ts
410
643
  function resolveRetry(o) {
411
644
  return {
@@ -423,6 +656,7 @@ var RetryingHttpClient = class {
423
656
  this.base = base;
424
657
  this.r = resolveRetry(options);
425
658
  }
659
+ base;
426
660
  r;
427
661
  async request(opts) {
428
662
  let lastErr;
@@ -482,16 +716,22 @@ function buildResources(http) {
482
716
  return {
483
717
  messages: new MessagesResource(http),
484
718
  comments: new CommentsResource(http),
719
+ connections: new ConnectionsResource(http),
485
720
  webhooks: {
486
721
  subscriptions: new WebhookSubscriptionsResource(http),
487
722
  deliveries: new WebhookDeliveriesResource(http)
488
- }
723
+ },
724
+ whatsapp: new WhatsAppNamespace(http),
725
+ instagram: new InstagramNamespace(http)
489
726
  };
490
727
  }
491
728
  var AtribuClient = class _AtribuClient {
492
729
  messages;
493
730
  comments;
731
+ connections;
494
732
  webhooks;
733
+ whatsapp;
734
+ instagram;
495
735
  /** @internal — exposed for `withRetry` chaining; do not depend on this. */
496
736
  _http;
497
737
  constructor(config) {
@@ -499,7 +739,10 @@ var AtribuClient = class _AtribuClient {
499
739
  const r = buildResources(this._http);
500
740
  this.messages = r.messages;
501
741
  this.comments = r.comments;
742
+ this.connections = r.connections;
502
743
  this.webhooks = r.webhooks;
744
+ this.whatsapp = r.whatsapp;
745
+ this.instagram = r.instagram;
503
746
  }
504
747
  /**
505
748
  * Returns a new AtribuClient that retries on transient errors. The
@@ -527,7 +770,10 @@ var AtribuClient = class _AtribuClient {
527
770
  _http: http,
528
771
  messages: r.messages,
529
772
  comments: r.comments,
530
- webhooks: r.webhooks
773
+ connections: r.connections,
774
+ webhooks: r.webhooks,
775
+ whatsapp: r.whatsapp,
776
+ instagram: r.instagram
531
777
  });
532
778
  return proto;
533
779
  }