@alva-ai/toolkit 0.4.2 → 0.7.0-beta.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
@@ -237,6 +237,25 @@ var DeployResource = class {
237
237
  `/api/v1/deploy/cronjob/${params.id}/resume`
238
238
  );
239
239
  }
240
+ /**
241
+ * Fire the cronjob workflow once, immediately, bypassing the schedule.
242
+ * Async — returns the Hatchet workflow run id at enqueue. The
243
+ * `cronjob_runs` row appears only after the worker finishes the run;
244
+ * callers verify completion by polling `listRuns({cronjob_id})` and
245
+ * matching `runs[].workflow_run_id` against the returned id.
246
+ *
247
+ * Surfaces backend status as HTTP errors (handled by AlvaClient):
248
+ * - 404 not found / cross-user
249
+ * - 412 cronjob is paused (resume before triggering)
250
+ * - 503 worker workflow handle not yet connected (startup race)
251
+ */
252
+ async trigger(params) {
253
+ this.client._requireAuth();
254
+ return this.client._request(
255
+ "POST",
256
+ `/api/v1/deploy/cronjob/${params.id}/trigger`
257
+ );
258
+ }
240
259
  async listRuns(params) {
241
260
  this.client._requireAuth();
242
261
  return this.client._request(
@@ -283,7 +302,8 @@ var ReleaseResource = class {
283
302
  display_name: params.display_name,
284
303
  description: params.description,
285
304
  feeds: params.feeds,
286
- trading_symbols: params.trading_symbols
305
+ trading_symbols: params.trading_symbols,
306
+ template_id: params.template_id
287
307
  }
288
308
  });
289
309
  }
@@ -294,7 +314,8 @@ var ReleaseResource = class {
294
314
  name: params.name,
295
315
  version: params.version,
296
316
  feeds: params.feeds,
297
- changelog: params.changelog
317
+ changelog: params.changelog,
318
+ readme_url: params.readme_url
298
319
  }
299
320
  });
300
321
  }
@@ -367,8 +388,1060 @@ var SdkDocsResource = class {
367
388
  }
368
389
  };
369
390
 
370
- // src/resources/skills.ts
371
- var SkillsResource = class {
391
+ // src/resources/skillTiers.ts
392
+ var SKILL_ENDPOINT_METADATA = [
393
+ {
394
+ skill: "arrays-data-api-spot-market-price-and-volume",
395
+ file: "crypto-detail",
396
+ method: "GET",
397
+ path: "/api/v1/crypto/detail",
398
+ tier: "public",
399
+ required_subscription_tier: "free",
400
+ access: "free_and_pro",
401
+ pro_required: false
402
+ },
403
+ {
404
+ skill: "arrays-data-api-crypto-metrics-and-screener",
405
+ file: "fear-greed-index",
406
+ method: "GET",
407
+ path: "/api/v1/crypto/fear-greed-index",
408
+ tier: "public",
409
+ required_subscription_tier: "free",
410
+ access: "free_and_pro",
411
+ pro_required: false
412
+ },
413
+ {
414
+ skill: "arrays-data-api-crypto-futures-data",
415
+ file: "funding-rate",
416
+ method: "GET",
417
+ path: "/api/v1/crypto/funding-rate",
418
+ tier: "public",
419
+ required_subscription_tier: "free",
420
+ access: "free_and_pro",
421
+ pro_required: false
422
+ },
423
+ {
424
+ skill: "arrays-data-api-spot-market-price-and-volume",
425
+ file: "crypto-futures-ohlcv",
426
+ method: "GET",
427
+ path: "/api/v1/crypto/futures/ohlcv",
428
+ tier: "public",
429
+ required_subscription_tier: "free",
430
+ access: "free_and_pro",
431
+ pro_required: false
432
+ },
433
+ {
434
+ skill: "arrays-data-api-spot-market-price-and-volume",
435
+ file: "crypto-kline",
436
+ method: "GET",
437
+ path: "/api/v1/crypto/kline",
438
+ tier: "public",
439
+ required_subscription_tier: "free",
440
+ access: "free_and_pro",
441
+ pro_required: false
442
+ },
443
+ {
444
+ skill: "arrays-data-api-crypto-metrics-and-screener",
445
+ file: "list",
446
+ method: "GET",
447
+ path: "/api/v1/crypto/list",
448
+ tier: "public",
449
+ required_subscription_tier: "free",
450
+ access: "free_and_pro",
451
+ pro_required: false
452
+ },
453
+ {
454
+ skill: "arrays-data-api-crypto-futures-data",
455
+ file: "long-short-ratio",
456
+ method: "GET",
457
+ path: "/api/v1/crypto/long-short-ratio",
458
+ tier: "public",
459
+ required_subscription_tier: "free",
460
+ access: "free_and_pro",
461
+ pro_required: false
462
+ },
463
+ {
464
+ skill: "arrays-data-api-crypto-metrics-and-screener",
465
+ file: "crypto-market-cap",
466
+ method: "GET",
467
+ path: "/api/v1/crypto/market-cap",
468
+ tier: "public",
469
+ required_subscription_tier: "free",
470
+ access: "free_and_pro",
471
+ pro_required: false
472
+ },
473
+ {
474
+ skill: "arrays-data-api-crypto-metrics-and-screener",
475
+ file: "market-metrics",
476
+ method: "GET",
477
+ path: "/api/v1/crypto/market-metrics",
478
+ tier: "public",
479
+ required_subscription_tier: "free",
480
+ access: "free_and_pro",
481
+ pro_required: false
482
+ },
483
+ {
484
+ skill: "arrays-data-api-spot-market-price-and-volume",
485
+ file: "crypto-ohlcv",
486
+ method: "GET",
487
+ path: "/api/v1/crypto/ohlcv",
488
+ tier: "public",
489
+ required_subscription_tier: "free",
490
+ access: "free_and_pro",
491
+ pro_required: false
492
+ },
493
+ {
494
+ skill: "arrays-data-api-crypto-futures-data",
495
+ file: "open-interest",
496
+ method: "GET",
497
+ path: "/api/v1/crypto/open-interest",
498
+ tier: "public",
499
+ required_subscription_tier: "free",
500
+ access: "free_and_pro",
501
+ pro_required: false
502
+ },
503
+ {
504
+ skill: "arrays-data-api-crypto-metrics-and-screener",
505
+ file: "screener-metrics",
506
+ method: "GET",
507
+ path: "/api/v1/crypto/screener/metrics",
508
+ tier: "public",
509
+ required_subscription_tier: "free",
510
+ access: "free_and_pro",
511
+ pro_required: false
512
+ },
513
+ {
514
+ skill: "arrays-data-api-crypto-metrics-and-screener",
515
+ file: "screener-metrics-timerange",
516
+ method: "GET",
517
+ path: "/api/v1/crypto/screener/metrics/timerange",
518
+ tier: "public",
519
+ required_subscription_tier: "free",
520
+ access: "free_and_pro",
521
+ pro_required: false
522
+ },
523
+ {
524
+ skill: "arrays-data-api-crypto-metrics-and-screener",
525
+ file: "trading-pair",
526
+ method: "GET",
527
+ path: "/api/v1/crypto/trading-pair",
528
+ tier: "public",
529
+ required_subscription_tier: "free",
530
+ access: "free_and_pro",
531
+ pro_required: false
532
+ },
533
+ {
534
+ skill: "arrays-data-api-etf-fundamentals",
535
+ file: "country-weightings",
536
+ method: "GET",
537
+ path: "/api/v1/etf/country-weightings",
538
+ tier: "public",
539
+ required_subscription_tier: "free",
540
+ access: "free_and_pro",
541
+ pro_required: false
542
+ },
543
+ {
544
+ skill: "arrays-data-api-etf-fundamentals",
545
+ file: "holdings",
546
+ method: "GET",
547
+ path: "/api/v1/etf/holdings",
548
+ tier: "public",
549
+ required_subscription_tier: "free",
550
+ access: "free_and_pro",
551
+ pro_required: false
552
+ },
553
+ {
554
+ skill: "arrays-data-api-etf-fundamentals",
555
+ file: "info",
556
+ method: "GET",
557
+ path: "/api/v1/etf/info",
558
+ tier: "public",
559
+ required_subscription_tier: "free",
560
+ access: "free_and_pro",
561
+ pro_required: false
562
+ },
563
+ {
564
+ skill: "arrays-data-api-etf-fundamentals",
565
+ file: "sector-weightings",
566
+ method: "GET",
567
+ path: "/api/v1/etf/sector-weightings",
568
+ tier: "public",
569
+ required_subscription_tier: "free",
570
+ access: "free_and_pro",
571
+ pro_required: false
572
+ },
573
+ {
574
+ skill: "arrays-data-api-macro-and-economics",
575
+ file: "macro-commodity-historical",
576
+ method: "GET",
577
+ path: "/api/v1/macro/commodity/historical",
578
+ tier: "public",
579
+ required_subscription_tier: "free",
580
+ access: "free_and_pro",
581
+ pro_required: false
582
+ },
583
+ {
584
+ skill: "arrays-data-api-macro-and-economics",
585
+ file: "macro-commodity-real-time",
586
+ method: "GET",
587
+ path: "/api/v1/macro/commodity/real-time",
588
+ tier: "public",
589
+ required_subscription_tier: "free",
590
+ access: "free_and_pro",
591
+ pro_required: false
592
+ },
593
+ {
594
+ skill: "arrays-data-api-macro-and-economics",
595
+ file: "macro-commodity-symbol-list",
596
+ method: "GET",
597
+ path: "/api/v1/macro/commodity/symbols",
598
+ tier: "public",
599
+ required_subscription_tier: "free",
600
+ access: "free_and_pro",
601
+ pro_required: false
602
+ },
603
+ {
604
+ skill: "arrays-data-api-macro-and-economics",
605
+ file: "economic-indicators",
606
+ method: "GET",
607
+ path: "/api/v1/macro/economic-indicators",
608
+ tier: "public",
609
+ required_subscription_tier: "free",
610
+ access: "free_and_pro",
611
+ pro_required: false
612
+ },
613
+ {
614
+ skill: "arrays-data-api-macro-and-economics",
615
+ file: "macro-forex-historical",
616
+ method: "GET",
617
+ path: "/api/v1/macro/forex/historical",
618
+ tier: "public",
619
+ required_subscription_tier: "free",
620
+ access: "free_and_pro",
621
+ pro_required: false
622
+ },
623
+ {
624
+ skill: "arrays-data-api-macro-and-economics",
625
+ file: "macro-forex-real-time",
626
+ method: "GET",
627
+ path: "/api/v1/macro/forex/real-time",
628
+ tier: "public",
629
+ required_subscription_tier: "free",
630
+ access: "free_and_pro",
631
+ pro_required: false
632
+ },
633
+ {
634
+ skill: "arrays-data-api-macro-and-economics",
635
+ file: "macro-forex-symbol-list",
636
+ method: "GET",
637
+ path: "/api/v1/macro/forex/symbols",
638
+ tier: "public",
639
+ required_subscription_tier: "free",
640
+ access: "free_and_pro",
641
+ pro_required: false
642
+ },
643
+ {
644
+ skill: "arrays-data-api-macro-and-economics",
645
+ file: "macro-index-historical",
646
+ method: "GET",
647
+ path: "/api/v1/macro/index/historical",
648
+ tier: "public",
649
+ required_subscription_tier: "free",
650
+ access: "free_and_pro",
651
+ pro_required: false
652
+ },
653
+ {
654
+ skill: "arrays-data-api-macro-and-economics",
655
+ file: "macro-index-real-time",
656
+ method: "GET",
657
+ path: "/api/v1/macro/index/real-time",
658
+ tier: "public",
659
+ required_subscription_tier: "free",
660
+ access: "free_and_pro",
661
+ pro_required: false
662
+ },
663
+ {
664
+ skill: "arrays-data-api-macro-and-economics",
665
+ file: "rates",
666
+ method: "GET",
667
+ path: "/api/v1/macro/treasury-rates",
668
+ tier: "public",
669
+ required_subscription_tier: "free",
670
+ access: "free_and_pro",
671
+ pro_required: false
672
+ },
673
+ {
674
+ skill: "arrays-data-api-equity-fundamentals",
675
+ file: "company-balance-sheets",
676
+ method: "GET",
677
+ path: "/api/v1/stocks/company/balance-sheets",
678
+ tier: "public",
679
+ required_subscription_tier: "free",
680
+ access: "free_and_pro",
681
+ pro_required: false
682
+ },
683
+ {
684
+ skill: "arrays-data-api-equity-fundamentals",
685
+ file: "company-cashflow-statements",
686
+ method: "GET",
687
+ path: "/api/v1/stocks/company/cashflow-statements",
688
+ tier: "public",
689
+ required_subscription_tier: "free",
690
+ access: "free_and_pro",
691
+ pro_required: false
692
+ },
693
+ {
694
+ skill: "arrays-data-api-equity-fundamentals",
695
+ file: "company-detail",
696
+ method: "GET",
697
+ path: "/api/v1/stocks/company/detail",
698
+ tier: "public",
699
+ required_subscription_tier: "free",
700
+ access: "free_and_pro",
701
+ pro_required: false
702
+ },
703
+ {
704
+ skill: "arrays-data-api-equity-fundamentals",
705
+ file: "company-income-statements",
706
+ method: "GET",
707
+ path: "/api/v1/stocks/company/income-statements",
708
+ tier: "public",
709
+ required_subscription_tier: "free",
710
+ access: "free_and_pro",
711
+ pro_required: false
712
+ },
713
+ {
714
+ skill: "arrays-data-api-equity-fundamentals",
715
+ file: "company-kpi",
716
+ method: "GET",
717
+ path: "/api/v1/stocks/company/kpi",
718
+ tier: "public",
719
+ required_subscription_tier: "free",
720
+ access: "free_and_pro",
721
+ pro_required: false
722
+ },
723
+ {
724
+ skill: "arrays-data-api-equity-events",
725
+ file: "crowdfunding-offerings",
726
+ method: "GET",
727
+ path: "/api/v1/stocks/crowdfunding/offerings",
728
+ tier: "public",
729
+ required_subscription_tier: "free",
730
+ access: "free_and_pro",
731
+ pro_required: false
732
+ },
733
+ {
734
+ skill: "arrays-data-api-equity-events",
735
+ file: "dividends",
736
+ method: "GET",
737
+ path: "/api/v1/stocks/dividends",
738
+ tier: "public",
739
+ required_subscription_tier: "free",
740
+ access: "free_and_pro",
741
+ pro_required: false
742
+ },
743
+ {
744
+ skill: "arrays-data-api-equity-events",
745
+ file: "earnings-calendar",
746
+ method: "GET",
747
+ path: "/api/v1/stocks/earnings-calendar",
748
+ tier: "public",
749
+ required_subscription_tier: "free",
750
+ access: "free_and_pro",
751
+ pro_required: false
752
+ },
753
+ {
754
+ skill: "arrays-data-api-equity-events",
755
+ file: "equity-offering",
756
+ method: "GET",
757
+ path: "/api/v1/stocks/equity-offering",
758
+ tier: "public",
759
+ required_subscription_tier: "free",
760
+ access: "free_and_pro",
761
+ pro_required: false
762
+ },
763
+ {
764
+ skill: "arrays-data-api-stock-metrics",
765
+ file: "financial-metrics",
766
+ method: "GET",
767
+ path: "/api/v1/stocks/financial-metrics",
768
+ tier: "public",
769
+ required_subscription_tier: "free",
770
+ access: "free_and_pro",
771
+ pro_required: false
772
+ },
773
+ {
774
+ skill: "arrays-data-api-equity-fundamentals",
775
+ file: "fiscal-dates",
776
+ method: "GET",
777
+ path: "/api/v1/stocks/fiscal-dates",
778
+ tier: "public",
779
+ required_subscription_tier: "free",
780
+ access: "free_and_pro",
781
+ pro_required: false
782
+ },
783
+ {
784
+ skill: "arrays-data-api-equity-fundamentals",
785
+ file: "fiscal-dates-range",
786
+ method: "GET",
787
+ path: "/api/v1/stocks/fiscal-dates/range",
788
+ tier: "public",
789
+ required_subscription_tier: "free",
790
+ access: "free_and_pro",
791
+ pro_required: false
792
+ },
793
+ {
794
+ skill: "arrays-data-api-equity-events",
795
+ file: "ipo-calendar",
796
+ method: "GET",
797
+ path: "/api/v1/stocks/ipo-calendar",
798
+ tier: "public",
799
+ required_subscription_tier: "free",
800
+ access: "free_and_pro",
801
+ pro_required: false
802
+ },
803
+ {
804
+ skill: "arrays-data-api-equity-events",
805
+ file: "ipo-confirmed-calendar",
806
+ method: "GET",
807
+ path: "/api/v1/stocks/ipo-confirmed-calendar",
808
+ tier: "public",
809
+ required_subscription_tier: "free",
810
+ access: "free_and_pro",
811
+ pro_required: false
812
+ },
813
+ {
814
+ skill: "arrays-data-api-spot-market-price-and-volume",
815
+ file: "stocks-kline",
816
+ method: "GET",
817
+ path: "/api/v1/stocks/kline",
818
+ tier: "public",
819
+ required_subscription_tier: "free",
820
+ access: "free_and_pro",
821
+ pro_required: false
822
+ },
823
+ {
824
+ skill: "arrays-data-api-stock-metrics",
825
+ file: "market-metrics",
826
+ method: "GET",
827
+ path: "/api/v1/stocks/market-metrics",
828
+ tier: "public",
829
+ required_subscription_tier: "free",
830
+ access: "free_and_pro",
831
+ pro_required: false
832
+ },
833
+ {
834
+ skill: "arrays-data-api-equity-events",
835
+ file: "mergers-acquisitions",
836
+ method: "GET",
837
+ path: "/api/v1/stocks/mergers-acquisitions",
838
+ tier: "public",
839
+ required_subscription_tier: "free",
840
+ access: "free_and_pro",
841
+ pro_required: false
842
+ },
843
+ {
844
+ skill: "arrays-data-api-equity-fundamentals",
845
+ file: "outstanding-shares",
846
+ method: "GET",
847
+ path: "/api/v1/stocks/outstanding-shares",
848
+ tier: "public",
849
+ required_subscription_tier: "free",
850
+ access: "free_and_pro",
851
+ pro_required: false
852
+ },
853
+ {
854
+ skill: "arrays-data-api-stock-metrics",
855
+ file: "ratings",
856
+ method: "GET",
857
+ path: "/api/v1/stocks/ratings",
858
+ tier: "public",
859
+ required_subscription_tier: "free",
860
+ access: "free_and_pro",
861
+ pro_required: false
862
+ },
863
+ {
864
+ skill: "arrays-data-api-stock-screener",
865
+ file: "basic-info-screener",
866
+ method: "GET",
867
+ path: "/api/v1/stocks/screener/basic-info/{sub}",
868
+ tier: "public",
869
+ required_subscription_tier: "free",
870
+ access: "free_and_pro",
871
+ pro_required: false
872
+ },
873
+ {
874
+ skill: "arrays-data-api-stock-screener",
875
+ file: "event-screener",
876
+ method: "GET",
877
+ path: "/api/v1/stocks/screener/events",
878
+ tier: "public",
879
+ required_subscription_tier: "free",
880
+ access: "free_and_pro",
881
+ pro_required: false
882
+ },
883
+ {
884
+ skill: "arrays-data-api-stock-screener",
885
+ file: "screener-financial-metrics",
886
+ method: "GET",
887
+ path: "/api/v1/stocks/screener/financial-metrics",
888
+ tier: "public",
889
+ required_subscription_tier: "free",
890
+ access: "free_and_pro",
891
+ pro_required: false
892
+ },
893
+ {
894
+ skill: "arrays-data-api-stock-screener",
895
+ file: "screener-financial-metrics-timerange",
896
+ method: "GET",
897
+ path: "/api/v1/stocks/screener/financial-metrics/timerange",
898
+ tier: "public",
899
+ required_subscription_tier: "free",
900
+ access: "free_and_pro",
901
+ pro_required: false
902
+ },
903
+ {
904
+ skill: "arrays-data-api-stock-screener",
905
+ file: "screener-technical-metrics",
906
+ method: "GET",
907
+ path: "/api/v1/stocks/screener/technical-metrics",
908
+ tier: "public",
909
+ required_subscription_tier: "free",
910
+ access: "free_and_pro",
911
+ pro_required: false
912
+ },
913
+ {
914
+ skill: "arrays-data-api-stock-screener",
915
+ file: "screener-technical-metrics-timerange",
916
+ method: "GET",
917
+ path: "/api/v1/stocks/screener/technical-metrics/timerange",
918
+ tier: "public",
919
+ required_subscription_tier: "free",
920
+ access: "free_and_pro",
921
+ pro_required: false
922
+ },
923
+ {
924
+ skill: "arrays-data-api-equity-events",
925
+ file: "sec-earnings-release",
926
+ method: "GET",
927
+ path: "/api/v1/stocks/sec-earnings-release",
928
+ tier: "public",
929
+ required_subscription_tier: "free",
930
+ access: "free_and_pro",
931
+ pro_required: false
932
+ },
933
+ {
934
+ skill: "arrays-data-api-equity-fundamentals",
935
+ file: "shares-float",
936
+ method: "GET",
937
+ path: "/api/v1/stocks/shares-float",
938
+ tier: "public",
939
+ required_subscription_tier: "free",
940
+ access: "free_and_pro",
941
+ pro_required: false
942
+ },
943
+ {
944
+ skill: "arrays-data-api-equity-events",
945
+ file: "splits",
946
+ method: "GET",
947
+ path: "/api/v1/stocks/splits",
948
+ tier: "public",
949
+ required_subscription_tier: "free",
950
+ access: "free_and_pro",
951
+ pro_required: false
952
+ },
953
+ {
954
+ skill: "arrays-data-api-crypto-exchange-flow",
955
+ file: "exchange-flows",
956
+ method: "GET",
957
+ path: "/api/v1/crypto/exchange-flows",
958
+ tier: "alternative",
959
+ required_subscription_tier: "pro",
960
+ access: "pro_only",
961
+ pro_required: true
962
+ },
963
+ {
964
+ skill: "arrays-data-api-company-crypto-holdings",
965
+ file: "crypto-holdings",
966
+ method: "GET",
967
+ path: "/api/v1/crypto/holdings",
968
+ tier: "alternative",
969
+ required_subscription_tier: "pro",
970
+ access: "pro_only",
971
+ pro_required: true
972
+ },
973
+ {
974
+ skill: "arrays-data-api-crypto-metrics-and-screener",
975
+ file: "metrics-inflow-cdd",
976
+ method: "GET",
977
+ path: "/api/v1/crypto/metrics/inflow-cdd",
978
+ tier: "alternative",
979
+ required_subscription_tier: "pro",
980
+ access: "pro_only",
981
+ pro_required: true
982
+ },
983
+ {
984
+ skill: "arrays-data-api-crypto-metrics-and-screener",
985
+ file: "metrics-leverage-ratio",
986
+ method: "GET",
987
+ path: "/api/v1/crypto/metrics/leverage-ratio",
988
+ tier: "alternative",
989
+ required_subscription_tier: "pro",
990
+ access: "pro_only",
991
+ pro_required: true
992
+ },
993
+ {
994
+ skill: "arrays-data-api-crypto-metrics-and-screener",
995
+ file: "metrics-miner-to-exchange",
996
+ method: "GET",
997
+ path: "/api/v1/crypto/metrics/miner-to-exchange",
998
+ tier: "alternative",
999
+ required_subscription_tier: "pro",
1000
+ access: "pro_only",
1001
+ pro_required: true
1002
+ },
1003
+ {
1004
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1005
+ file: "metrics-mvrv",
1006
+ method: "GET",
1007
+ path: "/api/v1/crypto/metrics/mvrv",
1008
+ tier: "alternative",
1009
+ required_subscription_tier: "pro",
1010
+ access: "pro_only",
1011
+ pro_required: true
1012
+ },
1013
+ {
1014
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1015
+ file: "metrics-nupl",
1016
+ method: "GET",
1017
+ path: "/api/v1/crypto/metrics/nupl",
1018
+ tier: "alternative",
1019
+ required_subscription_tier: "pro",
1020
+ access: "pro_only",
1021
+ pro_required: true
1022
+ },
1023
+ {
1024
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1025
+ file: "metrics-puell-multiple",
1026
+ method: "GET",
1027
+ path: "/api/v1/crypto/metrics/puell-multiple",
1028
+ tier: "alternative",
1029
+ required_subscription_tier: "pro",
1030
+ access: "pro_only",
1031
+ pro_required: true
1032
+ },
1033
+ {
1034
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1035
+ file: "metrics-realized-price",
1036
+ method: "GET",
1037
+ path: "/api/v1/crypto/metrics/realized-price",
1038
+ tier: "alternative",
1039
+ required_subscription_tier: "pro",
1040
+ access: "pro_only",
1041
+ pro_required: true
1042
+ },
1043
+ {
1044
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1045
+ file: "metrics-sopr",
1046
+ method: "GET",
1047
+ path: "/api/v1/crypto/metrics/sopr",
1048
+ tier: "alternative",
1049
+ required_subscription_tier: "pro",
1050
+ access: "pro_only",
1051
+ pro_required: true
1052
+ },
1053
+ {
1054
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1055
+ file: "metrics-ssr",
1056
+ method: "GET",
1057
+ path: "/api/v1/crypto/metrics/ssr",
1058
+ tier: "alternative",
1059
+ required_subscription_tier: "pro",
1060
+ access: "pro_only",
1061
+ pro_required: true
1062
+ },
1063
+ {
1064
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1065
+ file: "metrics-whale-ratio",
1066
+ method: "GET",
1067
+ path: "/api/v1/crypto/metrics/whale-ratio",
1068
+ tier: "alternative",
1069
+ required_subscription_tier: "pro",
1070
+ access: "pro_only",
1071
+ pro_required: true
1072
+ },
1073
+ {
1074
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1075
+ file: "crypto-supply",
1076
+ method: "GET",
1077
+ path: "/api/v1/crypto/supply",
1078
+ tier: "alternative",
1079
+ required_subscription_tier: "pro",
1080
+ access: "pro_only",
1081
+ pro_required: true
1082
+ },
1083
+ {
1084
+ skill: "arrays-data-api-crypto-futures-data",
1085
+ file: "taker-buy-sell-volume",
1086
+ method: "GET",
1087
+ path: "/api/v1/crypto/taker-buy-sell-volume",
1088
+ tier: "alternative",
1089
+ required_subscription_tier: "pro",
1090
+ access: "pro_only",
1091
+ pro_required: true
1092
+ },
1093
+ {
1094
+ skill: "arrays-data-api-crypto-metrics-and-screener",
1095
+ file: "unlock-events",
1096
+ method: "GET",
1097
+ path: "/api/v1/crypto/unlock-events",
1098
+ tier: "alternative",
1099
+ required_subscription_tier: "pro",
1100
+ access: "pro_only",
1101
+ pro_required: true
1102
+ },
1103
+ {
1104
+ skill: "arrays-data-api-etf-fundamentals",
1105
+ file: "flow",
1106
+ method: "GET",
1107
+ path: "/api/v1/etf/flow",
1108
+ tier: "alternative",
1109
+ required_subscription_tier: "pro",
1110
+ access: "pro_only",
1111
+ pro_required: true
1112
+ },
1113
+ {
1114
+ skill: "arrays-data-api-options",
1115
+ file: "contracts",
1116
+ method: "GET",
1117
+ path: "/api/v1/options/contracts",
1118
+ tier: "alternative",
1119
+ required_subscription_tier: "pro",
1120
+ access: "pro_only",
1121
+ pro_required: true
1122
+ },
1123
+ {
1124
+ skill: "arrays-data-api-options",
1125
+ file: "kline",
1126
+ method: "GET",
1127
+ path: "/api/v1/options/kline",
1128
+ tier: "alternative",
1129
+ required_subscription_tier: "pro",
1130
+ access: "pro_only",
1131
+ pro_required: true
1132
+ },
1133
+ {
1134
+ skill: "arrays-data-api-equity-fundamentals",
1135
+ file: "company-executives",
1136
+ method: "GET",
1137
+ path: "/api/v1/stocks/company/executives",
1138
+ tier: "alternative",
1139
+ required_subscription_tier: "pro",
1140
+ access: "pro_only",
1141
+ pro_required: true
1142
+ },
1143
+ {
1144
+ skill: "arrays-data-api-equity-estimates-and-targets",
1145
+ file: "company-price-target-consensus",
1146
+ method: "GET",
1147
+ path: "/api/v1/stocks/company/price-target-consensus",
1148
+ tier: "alternative",
1149
+ required_subscription_tier: "pro",
1150
+ access: "pro_only",
1151
+ pro_required: true
1152
+ },
1153
+ {
1154
+ skill: "arrays-data-api-equity-estimates-and-targets",
1155
+ file: "company-price-target-news",
1156
+ method: "GET",
1157
+ path: "/api/v1/stocks/company/price-target-news",
1158
+ tier: "alternative",
1159
+ required_subscription_tier: "pro",
1160
+ access: "pro_only",
1161
+ pro_required: true
1162
+ },
1163
+ {
1164
+ skill: "arrays-data-api-equity-estimates-and-targets",
1165
+ file: "company-price-target-summary",
1166
+ method: "GET",
1167
+ path: "/api/v1/stocks/company/price-target-summary",
1168
+ tier: "alternative",
1169
+ required_subscription_tier: "pro",
1170
+ access: "pro_only",
1171
+ pro_required: true
1172
+ },
1173
+ {
1174
+ skill: "arrays-data-api-equity-ownership-and-flow",
1175
+ file: "congress-recent-trades",
1176
+ method: "GET",
1177
+ path: "/api/v1/stocks/congress/recent-trades",
1178
+ tier: "alternative",
1179
+ required_subscription_tier: "pro",
1180
+ access: "pro_only",
1181
+ pro_required: true
1182
+ },
1183
+ {
1184
+ skill: "arrays-data-api-equity-ownership-and-flow",
1185
+ file: "senate-trade",
1186
+ method: "GET",
1187
+ path: "/api/v1/stocks/company/senate-trade",
1188
+ tier: "alternative",
1189
+ required_subscription_tier: "pro",
1190
+ access: "pro_only",
1191
+ pro_required: true
1192
+ },
1193
+ {
1194
+ skill: "arrays-data-api-stock-metrics",
1195
+ file: "darkpool",
1196
+ method: "GET",
1197
+ path: "/api/v1/stocks/darkpool",
1198
+ tier: "alternative",
1199
+ required_subscription_tier: "pro",
1200
+ access: "pro_only",
1201
+ pro_required: true
1202
+ },
1203
+ {
1204
+ skill: "arrays-data-api-equity-estimates-and-targets",
1205
+ file: "estimates-guidance",
1206
+ method: "GET",
1207
+ path: "/api/v1/stocks/estimates-guidance",
1208
+ tier: "alternative",
1209
+ required_subscription_tier: "pro",
1210
+ access: "pro_only",
1211
+ pro_required: true
1212
+ },
1213
+ {
1214
+ skill: "arrays-data-api-equity-ownership-and-flow",
1215
+ file: "insider-transactions",
1216
+ method: "GET",
1217
+ path: "/api/v1/stocks/insider/transactions",
1218
+ tier: "alternative",
1219
+ required_subscription_tier: "pro",
1220
+ access: "pro_only",
1221
+ pro_required: true
1222
+ },
1223
+ {
1224
+ skill: "arrays-data-api-equity-ownership-and-flow",
1225
+ file: "institution-holder",
1226
+ method: "GET",
1227
+ path: "/api/v1/stocks/institution-holder",
1228
+ tier: "alternative",
1229
+ required_subscription_tier: "pro",
1230
+ access: "pro_only",
1231
+ pro_required: true
1232
+ },
1233
+ {
1234
+ skill: "arrays-data-api-polymarket",
1235
+ file: "activity",
1236
+ method: "GET",
1237
+ path: "polymarket:/activity",
1238
+ tier: "alternative",
1239
+ required_subscription_tier: "pro",
1240
+ access: "pro_only",
1241
+ pro_required: true
1242
+ },
1243
+ {
1244
+ skill: "arrays-data-api-polymarket",
1245
+ file: "book",
1246
+ method: "GET",
1247
+ path: "polymarket:/book",
1248
+ tier: "alternative",
1249
+ required_subscription_tier: "pro",
1250
+ access: "pro_only",
1251
+ pro_required: true
1252
+ },
1253
+ {
1254
+ skill: "arrays-data-api-polymarket",
1255
+ file: "closed-positions",
1256
+ method: "GET",
1257
+ path: "polymarket:/closed-positions",
1258
+ tier: "alternative",
1259
+ required_subscription_tier: "pro",
1260
+ access: "pro_only",
1261
+ pro_required: true
1262
+ },
1263
+ {
1264
+ skill: "arrays-data-api-polymarket",
1265
+ file: "events",
1266
+ method: "GET",
1267
+ path: "polymarket:/events",
1268
+ tier: "alternative",
1269
+ required_subscription_tier: "pro",
1270
+ access: "pro_only",
1271
+ pro_required: true
1272
+ },
1273
+ {
1274
+ skill: "arrays-data-api-polymarket",
1275
+ file: "holders",
1276
+ method: "GET",
1277
+ path: "polymarket:/holders",
1278
+ tier: "alternative",
1279
+ required_subscription_tier: "pro",
1280
+ access: "pro_only",
1281
+ pro_required: true
1282
+ },
1283
+ {
1284
+ skill: "arrays-data-api-polymarket",
1285
+ file: "markets",
1286
+ method: "GET",
1287
+ path: "polymarket:/markets",
1288
+ tier: "alternative",
1289
+ required_subscription_tier: "pro",
1290
+ access: "pro_only",
1291
+ pro_required: true
1292
+ },
1293
+ {
1294
+ skill: "arrays-data-api-polymarket",
1295
+ file: "midpoint",
1296
+ method: "GET",
1297
+ path: "polymarket:/midpoint",
1298
+ tier: "alternative",
1299
+ required_subscription_tier: "pro",
1300
+ access: "pro_only",
1301
+ pro_required: true
1302
+ },
1303
+ {
1304
+ skill: "arrays-data-api-polymarket",
1305
+ file: "oi",
1306
+ method: "GET",
1307
+ path: "polymarket:/oi",
1308
+ tier: "alternative",
1309
+ required_subscription_tier: "pro",
1310
+ access: "pro_only",
1311
+ pro_required: true
1312
+ },
1313
+ {
1314
+ skill: "arrays-data-api-polymarket",
1315
+ file: "positions",
1316
+ method: "GET",
1317
+ path: "polymarket:/positions",
1318
+ tier: "alternative",
1319
+ required_subscription_tier: "pro",
1320
+ access: "pro_only",
1321
+ pro_required: true
1322
+ },
1323
+ {
1324
+ skill: "arrays-data-api-polymarket",
1325
+ file: "price",
1326
+ method: "GET",
1327
+ path: "polymarket:/price",
1328
+ tier: "alternative",
1329
+ required_subscription_tier: "pro",
1330
+ access: "pro_only",
1331
+ pro_required: true
1332
+ },
1333
+ {
1334
+ skill: "arrays-data-api-polymarket",
1335
+ file: "prices-history",
1336
+ method: "GET",
1337
+ path: "polymarket:/prices-history",
1338
+ tier: "alternative",
1339
+ required_subscription_tier: "pro",
1340
+ access: "pro_only",
1341
+ pro_required: true
1342
+ },
1343
+ {
1344
+ skill: "arrays-data-api-polymarket",
1345
+ file: "public-search",
1346
+ method: "GET",
1347
+ path: "polymarket:/public-search",
1348
+ tier: "alternative",
1349
+ required_subscription_tier: "pro",
1350
+ access: "pro_only",
1351
+ pro_required: true
1352
+ },
1353
+ {
1354
+ skill: "arrays-data-api-polymarket",
1355
+ file: "series",
1356
+ method: "GET",
1357
+ path: "polymarket:/series",
1358
+ tier: "alternative",
1359
+ required_subscription_tier: "pro",
1360
+ access: "pro_only",
1361
+ pro_required: true
1362
+ },
1363
+ {
1364
+ skill: "arrays-data-api-polymarket",
1365
+ file: "sports",
1366
+ method: "GET",
1367
+ path: "polymarket:/sports",
1368
+ tier: "alternative",
1369
+ required_subscription_tier: "pro",
1370
+ access: "pro_only",
1371
+ pro_required: true
1372
+ },
1373
+ {
1374
+ skill: "arrays-data-api-polymarket",
1375
+ file: "spread",
1376
+ method: "GET",
1377
+ path: "polymarket:/spread",
1378
+ tier: "alternative",
1379
+ required_subscription_tier: "pro",
1380
+ access: "pro_only",
1381
+ pro_required: true
1382
+ },
1383
+ {
1384
+ skill: "arrays-data-api-polymarket",
1385
+ file: "tags",
1386
+ method: "GET",
1387
+ path: "polymarket:/tags",
1388
+ tier: "alternative",
1389
+ required_subscription_tier: "pro",
1390
+ access: "pro_only",
1391
+ pro_required: true
1392
+ },
1393
+ {
1394
+ skill: "arrays-data-api-polymarket",
1395
+ file: "trades",
1396
+ method: "GET",
1397
+ path: "polymarket:/trades",
1398
+ tier: "alternative",
1399
+ required_subscription_tier: "pro",
1400
+ access: "pro_only",
1401
+ pro_required: true
1402
+ },
1403
+ {
1404
+ skill: "arrays-data-api-polymarket",
1405
+ file: "value",
1406
+ method: "GET",
1407
+ path: "polymarket:/value",
1408
+ tier: "alternative",
1409
+ required_subscription_tier: "pro",
1410
+ access: "pro_only",
1411
+ pro_required: true
1412
+ },
1413
+ {
1414
+ skill: "arrays-data-api-equity-events",
1415
+ file: "earnings-transcript",
1416
+ method: "GET",
1417
+ path: "/api/v1/stocks/earnings-transcript",
1418
+ tier: "unstructured",
1419
+ required_subscription_tier: "pro",
1420
+ access: "pro_only",
1421
+ pro_required: true
1422
+ },
1423
+ {
1424
+ skill: "arrays-data-api-news",
1425
+ file: "market-news",
1426
+ method: "GET",
1427
+ path: "/api/v1/stocks/market-news",
1428
+ tier: "unstructured",
1429
+ required_subscription_tier: "pro",
1430
+ access: "pro_only",
1431
+ pro_required: true
1432
+ }
1433
+ ];
1434
+ function getSkillEndpointMetadata(skill, file) {
1435
+ return SKILL_ENDPOINT_METADATA.find(
1436
+ (item) => item.skill === skill && item.file === file
1437
+ );
1438
+ }
1439
+ function listSkillEndpointMetadata(skill) {
1440
+ return SKILL_ENDPOINT_METADATA.filter((item) => item.skill === skill);
1441
+ }
1442
+
1443
+ // src/resources/dataSkills.ts
1444
+ var DataSkillsResource = class {
372
1445
  constructor(client) {
373
1446
  this.client = client;
374
1447
  }
@@ -378,7 +1451,12 @@ var SkillsResource = class {
378
1451
  baseUrl: this.client.arraysBaseUrl,
379
1452
  noAuth: true
380
1453
  });
381
- return { skills: res.data ?? [] };
1454
+ return {
1455
+ skills: (res.data ?? []).map((skill) => ({
1456
+ ...skill,
1457
+ ...metadataSummaryForSkill(skill.name)
1458
+ }))
1459
+ };
382
1460
  }
383
1461
  async summary(params) {
384
1462
  const encoded = encodeURIComponent(params.name);
@@ -393,7 +1471,12 @@ var SkillsResource = class {
393
1471
  const doc = res.data?.[0];
394
1472
  if (!doc)
395
1473
  throw new Error(`empty skills summary response for "${params.name}"`);
396
- return doc;
1474
+ const endpointMetadata = listSkillEndpointMetadata(params.name);
1475
+ return {
1476
+ ...doc,
1477
+ ...metadataSummaryForSkill(params.name),
1478
+ ...endpointMetadata.length > 0 ? { endpoint_metadata: endpointMetadata } : {}
1479
+ };
397
1480
  }
398
1481
  async endpoint(params) {
399
1482
  const encoded = encodeURIComponent(params.name);
@@ -412,7 +1495,103 @@ var SkillsResource = class {
412
1495
  `empty skills endpoint response for "${params.name}" file "${params.file}"`
413
1496
  );
414
1497
  }
415
- return doc;
1498
+ const metadata = getSkillEndpointMetadata(params.name, params.file);
1499
+ return {
1500
+ ...doc,
1501
+ ...metadata ? { metadata } : {}
1502
+ };
1503
+ }
1504
+ };
1505
+ function metadataSummaryForSkill(skill) {
1506
+ const endpointMetadata = listSkillEndpointMetadata(skill);
1507
+ if (endpointMetadata.length === 0) {
1508
+ return {};
1509
+ }
1510
+ const counts = {};
1511
+ let proCount = 0;
1512
+ for (const endpoint of endpointMetadata) {
1513
+ counts[endpoint.tier] = (counts[endpoint.tier] ?? 0) + 1;
1514
+ if (endpoint.pro_required) proCount += 1;
1515
+ }
1516
+ return {
1517
+ endpoint_tier_counts: counts,
1518
+ metadata: {
1519
+ endpoint_count: endpointMetadata.length,
1520
+ endpoint_tier_counts: counts,
1521
+ pro_count: proCount
1522
+ }
1523
+ };
1524
+ }
1525
+
1526
+ // src/resources/playbookSkills.ts
1527
+ function parsePlaybookSkillId(s) {
1528
+ const parts = s.split("/");
1529
+ if (parts.length !== 2 || !parts[0] || !parts[1]) {
1530
+ throw new AlvaError(
1531
+ "INVALID_ARGUMENT",
1532
+ `playbook skill identifier must be "<user>/<name>", got "${s}"`,
1533
+ 0
1534
+ );
1535
+ }
1536
+ return { username: parts[0], name: parts[1] };
1537
+ }
1538
+ var PlaybookSkillsResource = class {
1539
+ constructor(client) {
1540
+ this.client = client;
1541
+ }
1542
+ client;
1543
+ async list(params) {
1544
+ const query = {};
1545
+ if (params?.tag) query.tag = params.tag;
1546
+ if (params?.username) query.username = params.username;
1547
+ const res = await this.client._request("GET", "/api/v1/skills", {
1548
+ query
1549
+ });
1550
+ return { skills: res.data ?? [] };
1551
+ }
1552
+ async tags() {
1553
+ const res = await this.client._request(
1554
+ "GET",
1555
+ "/api/v1/skills/tags"
1556
+ );
1557
+ return { tags: res.data ?? [] };
1558
+ }
1559
+ async get(id) {
1560
+ const { username, name } = parsePlaybookSkillId(id);
1561
+ const u = encodeURIComponent(username);
1562
+ const n = encodeURIComponent(name);
1563
+ const res = await this.client._request(
1564
+ "GET",
1565
+ `/api/v1/skills/${u}/${n}`
1566
+ );
1567
+ const meta = res.data?.[0];
1568
+ if (!meta) {
1569
+ throw new AlvaError(
1570
+ "NOT_FOUND",
1571
+ `empty playbook skills get response for ${id}`,
1572
+ 0
1573
+ );
1574
+ }
1575
+ return meta;
1576
+ }
1577
+ async file(id, path) {
1578
+ const { username, name } = parsePlaybookSkillId(id);
1579
+ const u = encodeURIComponent(username);
1580
+ const n = encodeURIComponent(name);
1581
+ const p = path.split("/").map(encodeURIComponent).join("/");
1582
+ const res = await this.client._request(
1583
+ "GET",
1584
+ `/api/v1/skills/${u}/${n}/files/${p}`
1585
+ );
1586
+ const out = res.data?.[0];
1587
+ if (!out) {
1588
+ throw new AlvaError(
1589
+ "NOT_FOUND",
1590
+ `empty playbook skills file response for ${id} path ${path}`,
1591
+ 0
1592
+ );
1593
+ }
1594
+ return out;
416
1595
  }
417
1596
  };
418
1597
 
@@ -476,7 +1655,10 @@ var ScreenshotResource = class {
476
1655
  query: {
477
1656
  url: params.url,
478
1657
  selector: params.selector,
479
- xpath: params.xpath
1658
+ xpath: params.xpath,
1659
+ compress: params.compress,
1660
+ compress_quality: params.compressQuality,
1661
+ compress_max_width: params.compressMaxWidth
480
1662
  }
481
1663
  });
482
1664
  }
@@ -716,6 +1898,69 @@ var PushSubscriptionsResource = class {
716
1898
  }
717
1899
  };
718
1900
 
1901
+ // src/resources/channelGroupSubscriptions.ts
1902
+ var ChannelGroupSubscriptionsResource = class {
1903
+ constructor(client) {
1904
+ this.client = client;
1905
+ }
1906
+ client;
1907
+ async context(params) {
1908
+ this.client._requireAuth();
1909
+ return this.client._request(
1910
+ "GET",
1911
+ "/api/v1/channel/group-subscriptions/context",
1912
+ {
1913
+ query: { session_id: params.session_id }
1914
+ }
1915
+ );
1916
+ }
1917
+ async list(params) {
1918
+ this.client._requireAuth();
1919
+ return this.client._request("GET", "/api/v1/channel/group-subscriptions", {
1920
+ query: { session_id: params.session_id }
1921
+ });
1922
+ }
1923
+ async subscribe(params) {
1924
+ this.client._requireAuth();
1925
+ return this.client._request("POST", "/api/v1/channel/group-subscriptions", {
1926
+ jsonBody: mutationBody(params)
1927
+ });
1928
+ }
1929
+ async unsubscribe(params) {
1930
+ this.client._requireAuth();
1931
+ return this.client._request(
1932
+ "DELETE",
1933
+ "/api/v1/channel/group-subscriptions",
1934
+ {
1935
+ jsonBody: mutationBody(params)
1936
+ }
1937
+ );
1938
+ }
1939
+ };
1940
+ function mutationBody(params) {
1941
+ return `{"session_id":${idLiteral(params.session_id)},"target_type":${JSON.stringify(params.target_type)},"target_id":${idLiteral(params.target_id)}}`;
1942
+ }
1943
+ function idLiteral(value) {
1944
+ if (typeof value === "number") {
1945
+ if (!Number.isInteger(value) || value <= 0 || !Number.isSafeInteger(value)) {
1946
+ throw new AlvaError(
1947
+ "INVALID_ARGUMENT",
1948
+ "channel group subscription ids must be positive safe integers; pass large int64 ids as strings",
1949
+ 0
1950
+ );
1951
+ }
1952
+ return String(value);
1953
+ }
1954
+ if (!/^[1-9]\d*$/.test(value)) {
1955
+ throw new AlvaError(
1956
+ "INVALID_ARGUMENT",
1957
+ "channel group subscription ids must be positive integer strings",
1958
+ 0
1959
+ );
1960
+ }
1961
+ return value;
1962
+ }
1963
+
719
1964
  // src/client.ts
720
1965
  var DEFAULT_BASE_URL = "https://api-llm.prd.alva.ai";
721
1966
  var DEFAULT_ARRAYS_BASE_URL = "https://data-tools.prd.space.id";
@@ -730,7 +1975,8 @@ var AlvaClient = class {
730
1975
  _release;
731
1976
  _secrets;
732
1977
  _sdk;
733
- _skills;
1978
+ _dataSkills;
1979
+ _playbookSkills;
734
1980
  _comments;
735
1981
  _remix;
736
1982
  _screenshot;
@@ -739,6 +1985,7 @@ var AlvaClient = class {
739
1985
  _arraysJwt;
740
1986
  _notifications;
741
1987
  _pushSubscriptions;
1988
+ _channelGroupSubscriptions;
742
1989
  constructor(config) {
743
1990
  this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
744
1991
  this.arraysBaseUrl = config.arraysBaseUrl ?? DEFAULT_ARRAYS_BASE_URL;
@@ -763,8 +2010,11 @@ var AlvaClient = class {
763
2010
  get sdk() {
764
2011
  return this._sdk ??= new SdkDocsResource(this);
765
2012
  }
766
- get skills() {
767
- return this._skills ??= new SkillsResource(this);
2013
+ get dataSkills() {
2014
+ return this._dataSkills ??= new DataSkillsResource(this);
2015
+ }
2016
+ get playbookSkills() {
2017
+ return this._playbookSkills ??= new PlaybookSkillsResource(this);
768
2018
  }
769
2019
  get comments() {
770
2020
  return this._comments ??= new CommentsResource(this);
@@ -790,6 +2040,9 @@ var AlvaClient = class {
790
2040
  get pushSubscriptions() {
791
2041
  return this._pushSubscriptions ??= new PushSubscriptionsResource(this);
792
2042
  }
2043
+ get channelGroupSubscriptions() {
2044
+ return this._channelGroupSubscriptions ??= new ChannelGroupSubscriptionsResource(this);
2045
+ }
793
2046
  _requireAuth() {
794
2047
  if (!this.viewer_token && !this.apiKey) {
795
2048
  throw new AlvaError(
@@ -826,6 +2079,9 @@ var AlvaClient = class {
826
2079
  if (options?.rawBody !== void 0) {
827
2080
  headers["Content-Type"] = "application/octet-stream";
828
2081
  fetchBody = options.rawBody;
2082
+ } else if (options?.jsonBody !== void 0) {
2083
+ headers["Content-Type"] = "application/json";
2084
+ fetchBody = options.jsonBody;
829
2085
  } else if (options?.body !== void 0) {
830
2086
  headers["Content-Type"] = "application/json";
831
2087
  fetchBody = JSON.stringify(options.body);
@@ -879,7 +2135,7 @@ var AlvaClient = class {
879
2135
  };
880
2136
 
881
2137
  // src/index.ts
882
- var VERSION = true ? "0.4.2" : "dev";
2138
+ var VERSION = true ? "0.7.0-beta.0" : "dev";
883
2139
  // Annotate the CommonJS export names for ESM import in node:
884
2140
  0 && (module.exports = {
885
2141
  AlvaClient,