itd-api 0.4.0 → 0.5.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 +2888 -1552
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +922 -416
- package/dist/index.d.ts +922 -416
- package/dist/index.js +2815 -1494
- package/dist/index.js.map +1 -1
- package/dist/{multi-storage-D4h6QA-w.js → multi-storage-B0r0AInH.js} +127 -83
- package/dist/multi-storage-B0r0AInH.js.map +1 -0
- package/dist/{multi-storage-DwaIh24p.d.ts → multi-storage-CLqmzq07.d.ts} +13 -39
- package/dist/{multi-storage-C8R5Crwo.cjs → multi-storage-mBuCOVZY.cjs} +164 -84
- package/dist/multi-storage-mBuCOVZY.cjs.map +1 -0
- package/dist/{multi-storage-DP_ujJw1.d.cts → multi-storage-s_PcWPGH.d.cts} +13 -39
- package/dist/node.cjs +62 -53
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.cts +19 -5
- package/dist/node.d.ts +19 -5
- package/dist/node.js +62 -54
- package/dist/node.js.map +1 -1
- package/dist/{storage-D9tfHx7Z.js → storage-DWrK3Z4M.js} +201 -18
- package/dist/storage-DWrK3Z4M.js.map +1 -0
- package/dist/storage-Doe3lpFQ.d.cts +152 -0
- package/dist/storage-Doe3lpFQ.d.ts +152 -0
- package/dist/{storage-ycBqLBRB.cjs → storage-dF8Tio5y.cjs} +254 -17
- package/dist/storage-dF8Tio5y.cjs.map +1 -0
- package/dist/web.cjs +143 -40
- package/dist/web.cjs.map +1 -1
- package/dist/web.d.cts +40 -3
- package/dist/web.d.ts +40 -3
- package/dist/web.js +141 -41
- package/dist/web.js.map +1 -1
- package/package.json +3 -3
- package/dist/multi-storage-C8R5Crwo.cjs.map +0 -1
- package/dist/multi-storage-D4h6QA-w.js.map +0 -1
- package/dist/runtime-CFEsf-jD.cjs +0 -185
- package/dist/runtime-CFEsf-jD.cjs.map +0 -1
- package/dist/runtime-DHxDn8gf.js +0 -126
- package/dist/runtime-DHxDn8gf.js.map +0 -1
- package/dist/storage-BjNRlkbE.d.cts +0 -82
- package/dist/storage-BjNRlkbE.d.ts +0 -82
- package/dist/storage-D9tfHx7Z.js.map +0 -1
- package/dist/storage-ycBqLBRB.cjs.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { _ as
|
|
1
|
+
import { _ as withNamespace, a as createTokenStorage, c as KeyValueStore, d as MemoryKeyValueStore, f as RecordKeyValueStoreSource, g as withCodec, h as isEnumerableKeyValueStore, i as TokenStorageAdapterOptions, l as KeyValueStoreKeys, m as createRecordKeyValueStore, n as MemoryTokenStorage, o as EnumerableKeyValueStore, p as createKeyValueStore, r as TokenStorage, s as KeyValueCodec, t as ItdSession, u as KeyValueStoreResult } from "./storage-Doe3lpFQ.cjs";
|
|
2
|
+
import { _ as UrlFile, a as scopedTokenStorage, c as FileContent, d as FileStreamContent, f as FileStreamOptions, g as StreamFile, h as LazyFile, i as createMultiTokenStorage, l as FileContext, m as FromStreamOptions, n as MultiTokenStorage, o as DEFAULT_FILE_STREAM_BUFFER_BYTES, p as FileTransferMode, r as MultiTokenStorageAdapterOptions, s as DEFAULT_URL_FILE_MAX_BYTES, t as MemoryMultiTokenStorage, u as FileInput, v as UrlFileOptions } from "./multi-storage-s_PcWPGH.cjs";
|
|
3
3
|
//#region src/types/enums.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Перечисления API итд.com.
|
|
@@ -388,6 +388,413 @@ interface ItdClock {
|
|
|
388
388
|
/** Системные часы, используемые клиентом по умолчанию. */
|
|
389
389
|
declare const systemClock: ItdClock;
|
|
390
390
|
//#endregion
|
|
391
|
+
//#region src/core/operations.d.ts
|
|
392
|
+
/** HTTP-метод встроенной операции. */
|
|
393
|
+
type OperationMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
|
|
394
|
+
/** Семантическая безопасность автоматического повтора операции. */
|
|
395
|
+
declare const RetrySafety: Readonly<{
|
|
396
|
+
/** Автоматический повтор не создаёт неприемлемого эффекта; обычно это чтение. */
|
|
397
|
+
readonly Safe: "safe";
|
|
398
|
+
/** Повтор операции приводит к тому же состоянию, что и один вызов. */
|
|
399
|
+
readonly Idempotent: "idempotent";
|
|
400
|
+
/** Повтор может создать ещё один побочный эффект. */
|
|
401
|
+
readonly Unsafe: "unsafe";
|
|
402
|
+
}>;
|
|
403
|
+
type RetrySafety = (typeof RetrySafety)[keyof typeof RetrySafety];
|
|
404
|
+
/** Минимальное стабильное описание операции, доступное core и плагинам. */
|
|
405
|
+
interface OperationDefinition {
|
|
406
|
+
readonly method: OperationMethod;
|
|
407
|
+
readonly retrySafety: RetrySafety;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Каталог встроенных операций.
|
|
411
|
+
*
|
|
412
|
+
* ID описывает смысл вызова и не меняется при переносе HTTP-пути. Method и retrySafety
|
|
413
|
+
* хранятся здесь, чтобы resources, retry и плагины не вели независимые таблицы операций.
|
|
414
|
+
*/
|
|
415
|
+
declare const OPERATIONS: Readonly<{
|
|
416
|
+
readonly 'auth.check': Readonly<{
|
|
417
|
+
readonly method: "GET";
|
|
418
|
+
readonly retrySafety: "safe";
|
|
419
|
+
}>;
|
|
420
|
+
readonly 'auth.signUp': Readonly<{
|
|
421
|
+
readonly method: "POST";
|
|
422
|
+
readonly retrySafety: "unsafe";
|
|
423
|
+
}>;
|
|
424
|
+
readonly 'auth.signIn': Readonly<{
|
|
425
|
+
readonly method: "POST";
|
|
426
|
+
readonly retrySafety: "safe";
|
|
427
|
+
}>;
|
|
428
|
+
readonly 'auth.verifyOtp': Readonly<{
|
|
429
|
+
readonly method: "POST";
|
|
430
|
+
readonly retrySafety: "unsafe";
|
|
431
|
+
}>;
|
|
432
|
+
readonly 'auth.resendOtp': Readonly<{
|
|
433
|
+
readonly method: "POST";
|
|
434
|
+
readonly retrySafety: "unsafe";
|
|
435
|
+
}>;
|
|
436
|
+
readonly 'auth.refresh': Readonly<{
|
|
437
|
+
readonly method: "POST";
|
|
438
|
+
readonly retrySafety: "unsafe";
|
|
439
|
+
}>;
|
|
440
|
+
readonly 'auth.logout': Readonly<{
|
|
441
|
+
readonly method: "POST";
|
|
442
|
+
readonly retrySafety: "unsafe";
|
|
443
|
+
}>;
|
|
444
|
+
readonly 'auth.forgotPassword': Readonly<{
|
|
445
|
+
readonly method: "POST";
|
|
446
|
+
readonly retrySafety: "unsafe";
|
|
447
|
+
}>;
|
|
448
|
+
readonly 'auth.resetPassword': Readonly<{
|
|
449
|
+
readonly method: "POST";
|
|
450
|
+
readonly retrySafety: "unsafe";
|
|
451
|
+
}>;
|
|
452
|
+
readonly 'auth.changePassword': Readonly<{
|
|
453
|
+
readonly method: "POST";
|
|
454
|
+
readonly retrySafety: "unsafe";
|
|
455
|
+
}>;
|
|
456
|
+
readonly 'auth.sessions': Readonly<{
|
|
457
|
+
readonly method: "GET";
|
|
458
|
+
readonly retrySafety: "safe";
|
|
459
|
+
}>;
|
|
460
|
+
readonly 'auth.revokeSession': Readonly<{
|
|
461
|
+
readonly method: "DELETE";
|
|
462
|
+
readonly retrySafety: "unsafe";
|
|
463
|
+
}>;
|
|
464
|
+
readonly 'auth.revokeOtherSessions': Readonly<{
|
|
465
|
+
readonly method: "DELETE";
|
|
466
|
+
readonly retrySafety: "unsafe";
|
|
467
|
+
}>;
|
|
468
|
+
readonly 'users.me': Readonly<{
|
|
469
|
+
readonly method: "GET";
|
|
470
|
+
readonly retrySafety: "safe";
|
|
471
|
+
}>;
|
|
472
|
+
readonly 'users.updateMe': Readonly<{
|
|
473
|
+
readonly method: "PUT";
|
|
474
|
+
readonly retrySafety: "idempotent";
|
|
475
|
+
}>;
|
|
476
|
+
readonly 'users.deactivate': Readonly<{
|
|
477
|
+
readonly method: "DELETE";
|
|
478
|
+
readonly retrySafety: "unsafe";
|
|
479
|
+
}>;
|
|
480
|
+
readonly 'users.restore': Readonly<{
|
|
481
|
+
readonly method: "POST";
|
|
482
|
+
readonly retrySafety: "unsafe";
|
|
483
|
+
}>;
|
|
484
|
+
readonly 'users.createProfile': Readonly<{
|
|
485
|
+
readonly method: "POST";
|
|
486
|
+
readonly retrySafety: "unsafe";
|
|
487
|
+
}>;
|
|
488
|
+
readonly 'users.get': Readonly<{
|
|
489
|
+
readonly method: "GET";
|
|
490
|
+
readonly retrySafety: "safe";
|
|
491
|
+
}>;
|
|
492
|
+
readonly 'users.checkUsername': Readonly<{
|
|
493
|
+
readonly method: "GET";
|
|
494
|
+
readonly retrySafety: "safe";
|
|
495
|
+
}>;
|
|
496
|
+
readonly 'users.search': Readonly<{
|
|
497
|
+
readonly method: "GET";
|
|
498
|
+
readonly retrySafety: "safe";
|
|
499
|
+
}>;
|
|
500
|
+
readonly 'users.whoToFollow': Readonly<{
|
|
501
|
+
readonly method: "GET";
|
|
502
|
+
readonly retrySafety: "safe";
|
|
503
|
+
}>;
|
|
504
|
+
readonly 'users.topClans': Readonly<{
|
|
505
|
+
readonly method: "GET";
|
|
506
|
+
readonly retrySafety: "safe";
|
|
507
|
+
}>;
|
|
508
|
+
readonly 'users.follow': Readonly<{
|
|
509
|
+
readonly method: "POST";
|
|
510
|
+
readonly retrySafety: "unsafe";
|
|
511
|
+
}>;
|
|
512
|
+
readonly 'users.unfollow': Readonly<{
|
|
513
|
+
readonly method: "DELETE";
|
|
514
|
+
readonly retrySafety: "unsafe";
|
|
515
|
+
}>;
|
|
516
|
+
readonly 'users.followers': Readonly<{
|
|
517
|
+
readonly method: "GET";
|
|
518
|
+
readonly retrySafety: "safe";
|
|
519
|
+
}>;
|
|
520
|
+
readonly 'users.following': Readonly<{
|
|
521
|
+
readonly method: "GET";
|
|
522
|
+
readonly retrySafety: "safe";
|
|
523
|
+
}>;
|
|
524
|
+
readonly 'users.followStatus': Readonly<{
|
|
525
|
+
readonly method: "POST";
|
|
526
|
+
readonly retrySafety: "safe";
|
|
527
|
+
}>;
|
|
528
|
+
readonly 'users.block': Readonly<{
|
|
529
|
+
readonly method: "POST";
|
|
530
|
+
readonly retrySafety: "unsafe";
|
|
531
|
+
}>;
|
|
532
|
+
readonly 'users.unblock': Readonly<{
|
|
533
|
+
readonly method: "DELETE";
|
|
534
|
+
readonly retrySafety: "unsafe";
|
|
535
|
+
}>;
|
|
536
|
+
readonly 'users.blocked': Readonly<{
|
|
537
|
+
readonly method: "GET";
|
|
538
|
+
readonly retrySafety: "safe";
|
|
539
|
+
}>;
|
|
540
|
+
readonly 'users.getPrivacy': Readonly<{
|
|
541
|
+
readonly method: "GET";
|
|
542
|
+
readonly retrySafety: "safe";
|
|
543
|
+
}>;
|
|
544
|
+
readonly 'users.updatePrivacy': Readonly<{
|
|
545
|
+
readonly method: "PUT";
|
|
546
|
+
readonly retrySafety: "idempotent";
|
|
547
|
+
}>;
|
|
548
|
+
readonly 'users.pins': Readonly<{
|
|
549
|
+
readonly method: "GET";
|
|
550
|
+
readonly retrySafety: "safe";
|
|
551
|
+
}>;
|
|
552
|
+
readonly 'users.setPin': Readonly<{
|
|
553
|
+
readonly method: "PUT";
|
|
554
|
+
readonly retrySafety: "idempotent";
|
|
555
|
+
}>;
|
|
556
|
+
readonly 'users.removePin': Readonly<{
|
|
557
|
+
readonly method: "DELETE";
|
|
558
|
+
readonly retrySafety: "unsafe";
|
|
559
|
+
}>;
|
|
560
|
+
readonly 'posts.list': Readonly<{
|
|
561
|
+
readonly method: "GET";
|
|
562
|
+
readonly retrySafety: "safe";
|
|
563
|
+
}>;
|
|
564
|
+
readonly 'posts.create': Readonly<{
|
|
565
|
+
readonly method: "POST";
|
|
566
|
+
readonly retrySafety: "unsafe";
|
|
567
|
+
}>;
|
|
568
|
+
readonly 'posts.get': Readonly<{
|
|
569
|
+
readonly method: "GET";
|
|
570
|
+
readonly retrySafety: "safe";
|
|
571
|
+
}>;
|
|
572
|
+
readonly 'posts.update': Readonly<{
|
|
573
|
+
readonly method: "PUT";
|
|
574
|
+
readonly retrySafety: "idempotent";
|
|
575
|
+
}>;
|
|
576
|
+
readonly 'posts.remove': Readonly<{
|
|
577
|
+
readonly method: "DELETE";
|
|
578
|
+
readonly retrySafety: "unsafe";
|
|
579
|
+
}>;
|
|
580
|
+
readonly 'posts.restore': Readonly<{
|
|
581
|
+
readonly method: "POST";
|
|
582
|
+
readonly retrySafety: "unsafe";
|
|
583
|
+
}>;
|
|
584
|
+
readonly 'posts.like': Readonly<{
|
|
585
|
+
readonly method: "POST";
|
|
586
|
+
readonly retrySafety: "unsafe";
|
|
587
|
+
}>;
|
|
588
|
+
readonly 'posts.unlike': Readonly<{
|
|
589
|
+
readonly method: "DELETE";
|
|
590
|
+
readonly retrySafety: "unsafe";
|
|
591
|
+
}>;
|
|
592
|
+
readonly 'posts.repost': Readonly<{
|
|
593
|
+
readonly method: "POST";
|
|
594
|
+
readonly retrySafety: "unsafe";
|
|
595
|
+
}>;
|
|
596
|
+
readonly 'posts.unrepost': Readonly<{
|
|
597
|
+
readonly method: "DELETE";
|
|
598
|
+
readonly retrySafety: "unsafe";
|
|
599
|
+
}>;
|
|
600
|
+
readonly 'posts.pin': Readonly<{
|
|
601
|
+
readonly method: "POST";
|
|
602
|
+
readonly retrySafety: "unsafe";
|
|
603
|
+
}>;
|
|
604
|
+
readonly 'posts.unpin': Readonly<{
|
|
605
|
+
readonly method: "DELETE";
|
|
606
|
+
readonly retrySafety: "unsafe";
|
|
607
|
+
}>;
|
|
608
|
+
readonly 'posts.vote': Readonly<{
|
|
609
|
+
readonly method: "POST";
|
|
610
|
+
readonly retrySafety: "unsafe";
|
|
611
|
+
}>;
|
|
612
|
+
readonly 'posts.stats': Readonly<{
|
|
613
|
+
readonly method: "POST";
|
|
614
|
+
readonly retrySafety: "safe";
|
|
615
|
+
}>;
|
|
616
|
+
readonly 'posts.byUser': Readonly<{
|
|
617
|
+
readonly method: "GET";
|
|
618
|
+
readonly retrySafety: "safe";
|
|
619
|
+
}>;
|
|
620
|
+
readonly 'posts.likedByUser': Readonly<{
|
|
621
|
+
readonly method: "GET";
|
|
622
|
+
readonly retrySafety: "safe";
|
|
623
|
+
}>;
|
|
624
|
+
readonly 'posts.comments': Readonly<{
|
|
625
|
+
readonly method: "GET";
|
|
626
|
+
readonly retrySafety: "safe";
|
|
627
|
+
}>;
|
|
628
|
+
readonly 'posts.comment': Readonly<{
|
|
629
|
+
readonly method: "POST";
|
|
630
|
+
readonly retrySafety: "unsafe";
|
|
631
|
+
}>;
|
|
632
|
+
readonly 'comments.replies': Readonly<{
|
|
633
|
+
readonly method: "GET";
|
|
634
|
+
readonly retrySafety: "safe";
|
|
635
|
+
}>;
|
|
636
|
+
readonly 'comments.reply': Readonly<{
|
|
637
|
+
readonly method: "POST";
|
|
638
|
+
readonly retrySafety: "unsafe";
|
|
639
|
+
}>;
|
|
640
|
+
readonly 'comments.update': Readonly<{
|
|
641
|
+
readonly method: "PATCH";
|
|
642
|
+
readonly retrySafety: "idempotent";
|
|
643
|
+
}>;
|
|
644
|
+
readonly 'comments.remove': Readonly<{
|
|
645
|
+
readonly method: "DELETE";
|
|
646
|
+
readonly retrySafety: "unsafe";
|
|
647
|
+
}>;
|
|
648
|
+
readonly 'comments.restore': Readonly<{
|
|
649
|
+
readonly method: "POST";
|
|
650
|
+
readonly retrySafety: "unsafe";
|
|
651
|
+
}>;
|
|
652
|
+
readonly 'comments.like': Readonly<{
|
|
653
|
+
readonly method: "POST";
|
|
654
|
+
readonly retrySafety: "unsafe";
|
|
655
|
+
}>;
|
|
656
|
+
readonly 'comments.unlike': Readonly<{
|
|
657
|
+
readonly method: "DELETE";
|
|
658
|
+
readonly retrySafety: "unsafe";
|
|
659
|
+
}>;
|
|
660
|
+
readonly 'files.upload': Readonly<{
|
|
661
|
+
readonly method: "POST";
|
|
662
|
+
readonly retrySafety: "unsafe";
|
|
663
|
+
}>;
|
|
664
|
+
readonly 'files.get': Readonly<{
|
|
665
|
+
readonly method: "GET";
|
|
666
|
+
readonly retrySafety: "safe";
|
|
667
|
+
}>;
|
|
668
|
+
readonly 'files.remove': Readonly<{
|
|
669
|
+
readonly method: "DELETE";
|
|
670
|
+
readonly retrySafety: "unsafe";
|
|
671
|
+
}>;
|
|
672
|
+
readonly 'notifications.list': Readonly<{
|
|
673
|
+
readonly method: "GET";
|
|
674
|
+
readonly retrySafety: "safe";
|
|
675
|
+
}>;
|
|
676
|
+
readonly 'notifications.count': Readonly<{
|
|
677
|
+
readonly method: "GET";
|
|
678
|
+
readonly retrySafety: "safe";
|
|
679
|
+
}>;
|
|
680
|
+
readonly 'notifications.markRead': Readonly<{
|
|
681
|
+
readonly method: "POST";
|
|
682
|
+
readonly retrySafety: "idempotent";
|
|
683
|
+
}>;
|
|
684
|
+
readonly 'notifications.markReadBatch': Readonly<{
|
|
685
|
+
readonly method: "POST";
|
|
686
|
+
readonly retrySafety: "idempotent";
|
|
687
|
+
}>;
|
|
688
|
+
readonly 'notifications.markAllRead': Readonly<{
|
|
689
|
+
readonly method: "POST";
|
|
690
|
+
readonly retrySafety: "idempotent";
|
|
691
|
+
}>;
|
|
692
|
+
readonly 'notifications.getSettings': Readonly<{
|
|
693
|
+
readonly method: "GET";
|
|
694
|
+
readonly retrySafety: "safe";
|
|
695
|
+
}>;
|
|
696
|
+
readonly 'notifications.updateSettings': Readonly<{
|
|
697
|
+
readonly method: "PUT";
|
|
698
|
+
readonly retrySafety: "idempotent";
|
|
699
|
+
}>;
|
|
700
|
+
readonly 'hashtags.search': Readonly<{
|
|
701
|
+
readonly method: "GET";
|
|
702
|
+
readonly retrySafety: "safe";
|
|
703
|
+
}>;
|
|
704
|
+
readonly 'hashtags.trending': Readonly<{
|
|
705
|
+
readonly method: "GET";
|
|
706
|
+
readonly retrySafety: "safe";
|
|
707
|
+
}>;
|
|
708
|
+
readonly 'hashtags.posts': Readonly<{
|
|
709
|
+
readonly method: "GET";
|
|
710
|
+
readonly retrySafety: "safe";
|
|
711
|
+
}>;
|
|
712
|
+
readonly 'search.all': Readonly<{
|
|
713
|
+
readonly method: "GET";
|
|
714
|
+
readonly retrySafety: "safe";
|
|
715
|
+
}>;
|
|
716
|
+
readonly 'reports.create': Readonly<{
|
|
717
|
+
readonly method: "POST";
|
|
718
|
+
readonly retrySafety: "unsafe";
|
|
719
|
+
}>;
|
|
720
|
+
readonly 'subscription.status': Readonly<{
|
|
721
|
+
readonly method: "GET";
|
|
722
|
+
readonly retrySafety: "safe";
|
|
723
|
+
}>;
|
|
724
|
+
readonly 'subscription.pay': Readonly<{
|
|
725
|
+
readonly method: "POST";
|
|
726
|
+
readonly retrySafety: "unsafe";
|
|
727
|
+
}>;
|
|
728
|
+
readonly 'subscription.setAutoRenewal': Readonly<{
|
|
729
|
+
readonly method: "POST";
|
|
730
|
+
readonly retrySafety: "idempotent";
|
|
731
|
+
}>;
|
|
732
|
+
readonly 'subscription.bindCard': Readonly<{
|
|
733
|
+
readonly method: "POST";
|
|
734
|
+
readonly retrySafety: "unsafe";
|
|
735
|
+
}>;
|
|
736
|
+
readonly 'subscription.methods': Readonly<{
|
|
737
|
+
readonly method: "GET";
|
|
738
|
+
readonly retrySafety: "safe";
|
|
739
|
+
}>;
|
|
740
|
+
readonly 'subscription.setDefaultMethod': Readonly<{
|
|
741
|
+
readonly method: "POST";
|
|
742
|
+
readonly retrySafety: "idempotent";
|
|
743
|
+
}>;
|
|
744
|
+
readonly 'subscription.removeMethod': Readonly<{
|
|
745
|
+
readonly method: "DELETE";
|
|
746
|
+
readonly retrySafety: "unsafe";
|
|
747
|
+
}>;
|
|
748
|
+
readonly 'verification.status': Readonly<{
|
|
749
|
+
readonly method: "GET";
|
|
750
|
+
readonly retrySafety: "safe";
|
|
751
|
+
}>;
|
|
752
|
+
readonly 'verification.submit': Readonly<{
|
|
753
|
+
readonly method: "POST";
|
|
754
|
+
readonly retrySafety: "unsafe";
|
|
755
|
+
}>;
|
|
756
|
+
readonly 'platform.version': Readonly<{
|
|
757
|
+
readonly method: "GET";
|
|
758
|
+
readonly retrySafety: "safe";
|
|
759
|
+
}>;
|
|
760
|
+
readonly 'platform.changelog': Readonly<{
|
|
761
|
+
readonly method: "GET";
|
|
762
|
+
readonly retrySafety: "safe";
|
|
763
|
+
}>;
|
|
764
|
+
readonly 'platform.announcements': Readonly<{
|
|
765
|
+
readonly method: "GET";
|
|
766
|
+
readonly retrySafety: "safe";
|
|
767
|
+
}>;
|
|
768
|
+
readonly 'platform.portal': Readonly<{
|
|
769
|
+
readonly method: "GET";
|
|
770
|
+
readonly retrySafety: "safe";
|
|
771
|
+
}>;
|
|
772
|
+
readonly 'platform.status': Readonly<{
|
|
773
|
+
readonly method: "GET";
|
|
774
|
+
readonly retrySafety: "safe";
|
|
775
|
+
}>;
|
|
776
|
+
readonly 'telemetry.dwell': Readonly<{
|
|
777
|
+
readonly method: "POST";
|
|
778
|
+
readonly retrySafety: "unsafe";
|
|
779
|
+
}>;
|
|
780
|
+
readonly 'telemetry.interaction': Readonly<{
|
|
781
|
+
readonly method: "POST";
|
|
782
|
+
readonly retrySafety: "unsafe";
|
|
783
|
+
}>;
|
|
784
|
+
}>;
|
|
785
|
+
/** Стабильный ID встроенной операции. */
|
|
786
|
+
type BuiltInOperationId = keyof typeof OPERATIONS;
|
|
787
|
+
/** Пользовательская семантическая операция низкоуровневого запроса. */
|
|
788
|
+
type CustomOperationId = `custom:${string}`;
|
|
789
|
+
/** ID любого запроса, видимый transformers и hooks. */
|
|
790
|
+
type OperationId = BuiltInOperationId | CustomOperationId | 'raw';
|
|
791
|
+
/** Проверяет принадлежность ID встроенному каталогу. */
|
|
792
|
+
declare function isBuiltInOperationId(value: string): value is BuiltInOperationId;
|
|
793
|
+
/** HTTP-метод встроенной операции. */
|
|
794
|
+
declare function operationMethod(id: BuiltInOperationId): OperationMethod;
|
|
795
|
+
/** Политика автоматического повтора встроенной операции. */
|
|
796
|
+
declare function operationRetrySafety(id: BuiltInOperationId): RetrySafety;
|
|
797
|
+
//#endregion
|
|
391
798
|
//#region src/core/runtime.d.ts
|
|
392
799
|
/**
|
|
393
800
|
* Как библиотека обращается с cookie.
|
|
@@ -538,16 +945,16 @@ interface RetryOptions {
|
|
|
538
945
|
maxDelay?: number | undefined;
|
|
539
946
|
/** Доля случайного разброса паузы, 0…1. По умолчанию 0.3. */
|
|
540
947
|
jitter?: number | undefined;
|
|
541
|
-
/**
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
948
|
+
/** Своя логика: вернуть `true`, чтобы повторить. Заменяет семантическое правило операции. */
|
|
949
|
+
shouldRetry?: ((error: unknown, attempt: number, context: RetryDecisionContext) => boolean) | undefined;
|
|
950
|
+
}
|
|
951
|
+
/** Семантика запроса, доступная пользовательской функции `shouldRetry`. */
|
|
952
|
+
interface RetryDecisionContext {
|
|
953
|
+
operationId: OperationId;
|
|
954
|
+
retrySafety: RetrySafety;
|
|
955
|
+
bodyReplayable: boolean;
|
|
956
|
+
method: string;
|
|
957
|
+
path: string;
|
|
551
958
|
}
|
|
552
959
|
/** Настройки ограничения нагрузки на API. */
|
|
553
960
|
interface RateLimitOptions {
|
|
@@ -577,6 +984,8 @@ interface RateLimitOptions {
|
|
|
577
984
|
}
|
|
578
985
|
/** Данные о запросе, доступные хукам. */
|
|
579
986
|
interface RequestContext {
|
|
987
|
+
/** Стабильная семантическая операция; `raw` у низкоуровневого вызова без явного ID. */
|
|
988
|
+
operationId: OperationId;
|
|
580
989
|
method: string;
|
|
581
990
|
/** Путь без базового URL, например `/api/posts`. */
|
|
582
991
|
path: string;
|
|
@@ -591,6 +1000,7 @@ interface ResponseContext extends RequestContext {
|
|
|
591
1000
|
status: number;
|
|
592
1001
|
/** Длительность запроса в мс. */
|
|
593
1002
|
duration: number;
|
|
1003
|
+
/** Отдельная копия ответа: её тело можно прочитать, не мешая разбору внутри SDK. */
|
|
594
1004
|
response: Response;
|
|
595
1005
|
}
|
|
596
1006
|
/** Данные об ошибке запроса. */
|
|
@@ -638,7 +1048,10 @@ interface ItdClientOptions {
|
|
|
638
1048
|
* Сервисы платформы на отдельных доменах.
|
|
639
1049
|
*
|
|
640
1050
|
* Ключ — имя сервиса, значение — базовый URL или определение целиком. Имя встроенного
|
|
641
|
-
* сервиса задаёт его
|
|
1051
|
+
* сервиса задаёт его хост; встроен один — `status`.
|
|
1052
|
+
*
|
|
1053
|
+
* `auth` у встроенного сервиса наследуется, у нового выводится по хосту: токен уходит
|
|
1054
|
+
* основному хосту и его поддоменам, остальным — по явному `auth: true`.
|
|
642
1055
|
*
|
|
643
1056
|
* @example
|
|
644
1057
|
* ```ts
|
|
@@ -703,7 +1116,14 @@ interface ItdClientOptions {
|
|
|
703
1116
|
/** Как обращаться с cookie. По умолчанию определяется по среде исполнения. */
|
|
704
1117
|
mode?: RuntimeMode | undefined;
|
|
705
1118
|
}
|
|
706
|
-
/**
|
|
1119
|
+
/**
|
|
1120
|
+
* Namespaces расширений отдельной операции.
|
|
1121
|
+
*
|
|
1122
|
+
* Пакеты дополняют интерфейс через declaration merging и владеют только своим полем.
|
|
1123
|
+
* Core передаёт объект operation transformers без знания его содержимого.
|
|
1124
|
+
*/
|
|
1125
|
+
interface RequestExtensions {}
|
|
1126
|
+
/** Опции выполнения отдельного запроса. Передаются последним аргументом методов ресурсов. */
|
|
707
1127
|
interface RequestOptions {
|
|
708
1128
|
/** Отмена запроса извне. */
|
|
709
1129
|
signal?: AbortSignal | undefined;
|
|
@@ -713,23 +1133,28 @@ interface RequestOptions {
|
|
|
713
1133
|
headers?: Record<string, string> | undefined;
|
|
714
1134
|
/** Повторы только для этого запроса. Переопределяют глобальную настройку `retry`. */
|
|
715
1135
|
retry?: RetryOptions | false | undefined;
|
|
1136
|
+
/**
|
|
1137
|
+
* Явно переопределяет безопасность повтора операции.
|
|
1138
|
+
*
|
|
1139
|
+
* Встроенные resources получают значение из каталога. Опция нужна прежде всего custom/raw
|
|
1140
|
+
* интеграциям и осознанному переопределению серверного контракта.
|
|
1141
|
+
*/
|
|
1142
|
+
retrySafety?: RetrySafety | undefined;
|
|
1143
|
+
/** Настройки подключённых operation extensions, сгруппированные по владельцу. */
|
|
1144
|
+
extensions?: RequestExtensions | undefined;
|
|
1145
|
+
}
|
|
1146
|
+
/** Опции перебора страниц, не являющиеся параметрами endpoint. */
|
|
1147
|
+
interface PaginationOptions extends RequestOptions {
|
|
1148
|
+
/** Максимальное число страниц; без значения перебор продолжается до конца списка. */
|
|
1149
|
+
maxPages?: number | undefined;
|
|
716
1150
|
}
|
|
717
|
-
/**
|
|
718
|
-
* Имена полей {@link RequestOptions} — единственный источник истины.
|
|
719
|
-
*
|
|
720
|
-
* Ресурсы переносят в описание запроса только эти поля (плюс заявленные плагинами),
|
|
721
|
-
* потому что параметры методов подмешивают к ним `limit`, `cursor` и прочее, чему
|
|
722
|
-
* в транспорте делать нечего. Список стоит рядом с интерфейсом, чтобы новое поле нельзя
|
|
723
|
-
* было забыть.
|
|
724
|
-
*
|
|
725
|
-
* `satisfies` гарантирует, что каждое имя в списке — действительно поле `RequestOptions`.
|
|
726
|
-
* Обратную полноту (не забыто ли новое поле) проверяет тип {@link RequestOptionKeysComplete}
|
|
727
|
-
* в тесте: здесь её проверять нельзя — плагины расширяют `RequestOptions` своими опциями
|
|
728
|
-
* (`encrypt`, `decrypt` и подобными), которых в этом списке быть и не должно.
|
|
729
|
-
*/
|
|
730
|
-
declare const REQUEST_OPTION_KEYS: readonly ["signal", "timeout", "headers", "retry"];
|
|
731
1151
|
/** Полное описание запроса для низкоуровневого `itd.request()`. */
|
|
732
1152
|
interface RawRequestOptions extends RequestOptions {
|
|
1153
|
+
/**
|
|
1154
|
+
* Семантическое имя низкоуровневого запроса. Встроенные resources выставляют его сами.
|
|
1155
|
+
* Пользовательские значения следует помещать в namespace `custom:`.
|
|
1156
|
+
*/
|
|
1157
|
+
operationId?: OperationId | undefined;
|
|
733
1158
|
method: string;
|
|
734
1159
|
/** Путь с ведущим слэшем, например `/api/posts`. Завершающий слэш значим. */
|
|
735
1160
|
path: string;
|
|
@@ -760,18 +1185,21 @@ interface RawRequestOptions extends RequestOptions {
|
|
|
760
1185
|
/**
|
|
761
1186
|
* Выполнить запрос мимо очереди.
|
|
762
1187
|
*
|
|
763
|
-
*
|
|
764
|
-
*
|
|
765
|
-
* в очереди и ждёт его результата, — иначе оба ждут друг друга и не завершатся никогда.
|
|
1188
|
+
* Продвинутый escape hatch для служебных интеграций. Встроенные refresh и sign-in проходят
|
|
1189
|
+
* обычную очередь: она охватывает только одну сетевую попытку и не создаёт deadlock.
|
|
766
1190
|
*/
|
|
767
1191
|
skipQueue?: boolean | undefined;
|
|
768
1192
|
/** Вернуть тело ответа без снятия обёртки `{ data: … }`. */
|
|
769
1193
|
raw?: boolean | undefined;
|
|
770
1194
|
}
|
|
1195
|
+
/** Запрос внутри pipeline: в отличие от raw input всегда имеет семантический ID. */
|
|
1196
|
+
interface OperationRequestOptions extends RawRequestOptions {
|
|
1197
|
+
operationId: OperationId;
|
|
1198
|
+
}
|
|
771
1199
|
//#endregion
|
|
772
1200
|
//#region src/core/version.d.ts
|
|
773
1201
|
/** Версия библиотеки. Попадает в `User-Agent`. */
|
|
774
|
-
declare const LIBRARY_VERSION = "0.
|
|
1202
|
+
declare const LIBRARY_VERSION = "0.5.0";
|
|
775
1203
|
//#endregion
|
|
776
1204
|
//#region src/core/config.d.ts
|
|
777
1205
|
/** Базовый URL API итд.com. Домен записан в punycode: `итд.com`. */
|
|
@@ -794,14 +1222,7 @@ declare const DEFAULT_TIMEOUT = 30000;
|
|
|
794
1222
|
* В браузере заголовок не выставляется — `User-Agent` там запрещён к изменению, и среда
|
|
795
1223
|
* молча его игнорирует.
|
|
796
1224
|
*/
|
|
797
|
-
declare const DEFAULT_USER_AGENT = "Mozilla/5.0 (compatible; itd-api/0.
|
|
798
|
-
/** Настройки очереди со всеми значениями по умолчанию. */
|
|
799
|
-
interface ResolvedRateLimitOptions {
|
|
800
|
-
concurrency: number;
|
|
801
|
-
rps: number | undefined;
|
|
802
|
-
retryDelays: readonly number[];
|
|
803
|
-
respectHeaders: boolean;
|
|
804
|
-
}
|
|
1225
|
+
declare const DEFAULT_USER_AGENT = "Mozilla/5.0 (compatible; itd-api/0.5.0; +https://github.com/KiowDev/itd-api)";
|
|
805
1226
|
/**
|
|
806
1227
|
* Срез конфигурации, нужный слою авторизации.
|
|
807
1228
|
*
|
|
@@ -959,15 +1380,9 @@ type RequestBodyFactory = (context: RequestBodyContext) => PreparedRequestBody |
|
|
|
959
1380
|
* важнее. Смешивать их в одном объекте нельзя — тогда слой авторизации перебивал бы
|
|
960
1381
|
* `Authorization`, заданный вызывающим кодом вручную.
|
|
961
1382
|
*/
|
|
962
|
-
interface PipelineRequest extends
|
|
1383
|
+
interface PipelineRequest extends OperationRequestOptions {
|
|
963
1384
|
/** Повторяемое тело. Используется внутренними ресурсами вместо `body`. @internal */
|
|
964
1385
|
bodyFactory?: RequestBodyFactory | undefined;
|
|
965
|
-
/**
|
|
966
|
-
* Разрешает повтор записи после сетевого сбоя. Тело должно быть повторяемым.
|
|
967
|
-
*
|
|
968
|
-
* @internal
|
|
969
|
-
*/
|
|
970
|
-
retryNetworkWrite?: boolean | undefined;
|
|
971
1386
|
/**
|
|
972
1387
|
* Заголовки, добавленные слоями конвейера.
|
|
973
1388
|
*
|
|
@@ -977,12 +1392,16 @@ interface PipelineRequest extends RawRequestOptions {
|
|
|
977
1392
|
*/
|
|
978
1393
|
layerHeaders?: Record<string, string> | undefined;
|
|
979
1394
|
/**
|
|
980
|
-
* Номер попытки, начиная с 1. Проставляет
|
|
1395
|
+
* Номер фактически начатой транспортной попытки, начиная с 1. Проставляет attempt layer.
|
|
981
1396
|
*
|
|
982
1397
|
* @internal
|
|
983
1398
|
*/
|
|
984
1399
|
attempt?: number | undefined;
|
|
985
1400
|
}
|
|
1401
|
+
/** Запрос на внешней границе pipeline. Низкоуровневый вызов без ID считается `raw`. */
|
|
1402
|
+
type PipelineRequestInput = Omit<PipelineRequest, 'operationId'> & {
|
|
1403
|
+
operationId?: OperationId | undefined;
|
|
1404
|
+
};
|
|
986
1405
|
/** Обработчик запроса. Самый внутренний в цепочке — транспорт. */
|
|
987
1406
|
type RequestHandler = (request: PipelineRequest) => Promise<unknown>;
|
|
988
1407
|
//#endregion
|
|
@@ -1060,6 +1479,8 @@ declare class AuthManager {
|
|
|
1060
1479
|
get on(): Emitter<AuthEvents>['on'];
|
|
1061
1480
|
/** Подписка на одно срабатывание. */
|
|
1062
1481
|
get once(): Emitter<AuthEvents>['once'];
|
|
1482
|
+
/** Снимает lifecycle-подписки при терминальном освобождении владельца. @internal */
|
|
1483
|
+
dispose(): void;
|
|
1063
1484
|
/**
|
|
1064
1485
|
* Непрозрачная fallback-область авторизации.
|
|
1065
1486
|
*
|
|
@@ -1084,6 +1505,15 @@ declare class AuthManager {
|
|
|
1084
1505
|
hasRefreshSession(): Promise<boolean>;
|
|
1085
1506
|
/** Заголовки авторизации для очередного запроса. Пустой объект, если токена нет. */
|
|
1086
1507
|
getAuthHeaders(): Promise<Record<string, string>>;
|
|
1508
|
+
/**
|
|
1509
|
+
* Заголовки уже подготовленной авторизации без чтения storage или вызова внешнего источника.
|
|
1510
|
+
*
|
|
1511
|
+
* Используются после ожидания транспортной очереди: к этому моменту `getAccessToken()` уже
|
|
1512
|
+
* был вызван снаружи неё, но token мог успеть смениться из-за refresh или `setSession()`.
|
|
1513
|
+
*
|
|
1514
|
+
* @internal
|
|
1515
|
+
*/
|
|
1516
|
+
getCurrentAuthHeaders(): Record<string, string>;
|
|
1087
1517
|
/**
|
|
1088
1518
|
* Идентификатор устройства для заголовка `X-Device-Id`.
|
|
1089
1519
|
*
|
|
@@ -1137,30 +1567,102 @@ declare class AuthManager {
|
|
|
1137
1567
|
//#endregion
|
|
1138
1568
|
//#region src/core/plugins/contracts.d.ts
|
|
1139
1569
|
/**
|
|
1140
|
-
* Обёртка
|
|
1570
|
+
* Обёртка одной логической операции.
|
|
1141
1571
|
*
|
|
1142
|
-
*
|
|
1143
|
-
*
|
|
1572
|
+
* Вызывается ровно один раз независимо от retry и auth recovery. Может изменить
|
|
1573
|
+
* семантический запрос, обработать разобранный результат или завершить операцию локально.
|
|
1144
1574
|
*
|
|
1145
|
-
* @param request
|
|
1146
|
-
* @param next
|
|
1147
|
-
* @returns
|
|
1575
|
+
* @param request описание логической операции; не изменяйте сам объект — передайте копию в `next`
|
|
1576
|
+
* @param next следующая обёртка либо выполнение операции
|
|
1577
|
+
* @returns разобранный результат в том виде, в котором его получит вызывающий код
|
|
1148
1578
|
*
|
|
1149
|
-
* @example Дописать заголовок ко всем
|
|
1579
|
+
* @example Дописать заголовок ко всем операциям
|
|
1150
1580
|
* ```ts
|
|
1151
|
-
* const transformer:
|
|
1581
|
+
* const transformer: OperationTransformer = (request, next) =>
|
|
1152
1582
|
* next({ ...request, headers: { ...request.headers, 'X-Trace': trace() } });
|
|
1153
1583
|
* ```
|
|
1154
1584
|
*/
|
|
1155
|
-
type
|
|
1156
|
-
/**
|
|
1585
|
+
type OperationTransformer = (request: OperationRequestOptions, next: (request: OperationRequestOptions) => Promise<unknown>) => Promise<unknown>;
|
|
1586
|
+
/** Финальные данные одной транспортной попытки. */
|
|
1587
|
+
interface AttemptContext {
|
|
1588
|
+
/** Стабильная семантическая операция. */
|
|
1589
|
+
readonly operationId: OperationId;
|
|
1590
|
+
/** Нормализованный HTTP-метод. */
|
|
1591
|
+
readonly method: string;
|
|
1592
|
+
/** Исходный путь операции до разрешения service/base URL. */
|
|
1593
|
+
readonly path: string;
|
|
1594
|
+
/** Полностью разрешённый URL со строкой query. */
|
|
1595
|
+
readonly url: string;
|
|
1596
|
+
/** Итоговые заголовки. Сам объект mutable для подписи и diagnostic headers. */
|
|
1597
|
+
readonly headers: Headers;
|
|
1598
|
+
/** Номер transport attempt, начиная с 1. */
|
|
1599
|
+
readonly attempt: number;
|
|
1600
|
+
/** Тело после сериализации либо подготовки body factory. Поток нельзя читать заранее. */
|
|
1601
|
+
readonly body: BodyInit | undefined;
|
|
1602
|
+
/** Общий сигнал отмены и таймаута этой попытки. */
|
|
1603
|
+
readonly signal: AbortSignal;
|
|
1604
|
+
}
|
|
1605
|
+
/**
|
|
1606
|
+
* Продолжение attempt chain.
|
|
1607
|
+
*
|
|
1608
|
+
* В рамках одного interceptor его можно вызвать только один раз. Возвращает сырой ответ:
|
|
1609
|
+
* transport ещё не проверял status и не читал body.
|
|
1610
|
+
*/
|
|
1611
|
+
type AttemptNext = () => Promise<Response>;
|
|
1612
|
+
/**
|
|
1613
|
+
* Обёртка одной транспортной попытки.
|
|
1614
|
+
*
|
|
1615
|
+
* Получает уже разрешённый URL, итоговые заголовки, подготовленное тело и номер попытки.
|
|
1616
|
+
* Может дописать заголовки, измерить wire latency, обработать сырой `Response` или вернуть
|
|
1617
|
+
* синтетический `Response`. Семантический input здесь намеренно недоступен для изменения.
|
|
1618
|
+
*
|
|
1619
|
+
* Вызывается заново для каждого retry и auth recovery. `next()` разрешено вызвать один раз.
|
|
1620
|
+
* Если interceptor читает тело ответа, читать нужно `response.clone()`: исходный body после
|
|
1621
|
+
* цепочки разбирает transport. Исключение interceptor остаётся пользовательской ошибкой и не
|
|
1622
|
+
* классифицируется как сетевой сбой для автоматического retry.
|
|
1623
|
+
*
|
|
1624
|
+
* @param context окончательные данные текущей транспортной попытки
|
|
1625
|
+
* @param next следующий interceptor либо вызов `fetch`
|
|
1626
|
+
* @returns исходный или синтетический сырой `Response`
|
|
1627
|
+
*/
|
|
1628
|
+
type AttemptInterceptor = (context: AttemptContext, next: AttemptNext) => Promise<Response>;
|
|
1629
|
+
/** Регистрация расширений логической операции. */
|
|
1630
|
+
interface OperationExtensions {
|
|
1631
|
+
/**
|
|
1632
|
+
* Подключает transformer.
|
|
1633
|
+
*
|
|
1634
|
+
* Зарегистрированные раньше оборачивают зарегистрированные позже. Возвращённая функция
|
|
1635
|
+
* идемпотентна и снимает только эту регистрацию.
|
|
1636
|
+
*/
|
|
1637
|
+
use(transformer: OperationTransformer): Unsubscribe;
|
|
1638
|
+
}
|
|
1639
|
+
/** Регистрация расширений транспортной попытки. */
|
|
1640
|
+
interface AttemptExtensions {
|
|
1641
|
+
/**
|
|
1642
|
+
* Подключает interceptor.
|
|
1643
|
+
*
|
|
1644
|
+
* Зарегистрированные раньше оборачивают зарегистрированные позже. Возвращённая функция
|
|
1645
|
+
* идемпотентна и снимает только эту регистрацию.
|
|
1646
|
+
*/
|
|
1647
|
+
use(interceptor: AttemptInterceptor): Unsubscribe;
|
|
1648
|
+
}
|
|
1649
|
+
/**
|
|
1650
|
+
* Освобождение ресурсов, заведённых плагином при установке.
|
|
1651
|
+
*
|
|
1652
|
+
* Вызывается после завершения логических операций, уже вошедших в расширения плагина,
|
|
1653
|
+
* поэтому может безопасно закрывать используемые ими соединения и хранилища.
|
|
1654
|
+
*/
|
|
1157
1655
|
type PluginTeardown = () => void | Promise<void>;
|
|
1158
|
-
/**
|
|
1159
|
-
interface
|
|
1656
|
+
/** API, доступный плагину при подключении. */
|
|
1657
|
+
interface PluginApi {
|
|
1160
1658
|
/** Базовый URL клиента — например чтобы разобрать абсолютные ссылки из ответа. */
|
|
1161
1659
|
baseUrl: string;
|
|
1162
1660
|
/** Отладочный вывод клиента, если он включён. */
|
|
1163
1661
|
logger: Logger | undefined;
|
|
1662
|
+
/** Расширения логической операции: выполняются один раз и могут short-circuit сеть. */
|
|
1663
|
+
operations: OperationExtensions;
|
|
1664
|
+
/** Расширения wire attempt: выполняются заново после каждого retry/auth recovery. */
|
|
1665
|
+
attempts: AttemptExtensions;
|
|
1164
1666
|
/**
|
|
1165
1667
|
* Непрозрачная fallback-область текущей авторизации.
|
|
1166
1668
|
*
|
|
@@ -1175,29 +1677,25 @@ interface PluginContext {
|
|
|
1175
1677
|
* несколькими экземплярами клиента одного аккаунта.
|
|
1176
1678
|
*/
|
|
1177
1679
|
getAuthIdentity?: (() => Promise<AuthIdentity>) | undefined;
|
|
1178
|
-
/** Добавляет обёртку запроса. Подключённые раньше оказываются снаружи. */
|
|
1179
|
-
use(transformer: Transformer): void;
|
|
1180
|
-
/**
|
|
1181
|
-
* Добавляет перехватчики отдельных сетевых попыток.
|
|
1182
|
-
*
|
|
1183
|
-
* В отличие от {@link use}, они видят каждый retry и сырой `Response` до чтения тела.
|
|
1184
|
-
* Несколько наборов хуков одного плагина вызываются в порядке регистрации.
|
|
1185
|
-
*/
|
|
1186
|
-
useHooks(hooks: ClientHooks): void;
|
|
1187
1680
|
}
|
|
1188
1681
|
/**
|
|
1189
1682
|
* Плагин клиента.
|
|
1190
1683
|
*
|
|
1191
|
-
* Подключается через `itd.use(plugin)` и
|
|
1192
|
-
*
|
|
1193
|
-
*
|
|
1684
|
+
* Подключается через `itd.use(plugin)` и регистрирует расширения одного или обоих уровней:
|
|
1685
|
+
* {@link OperationTransformer} для логической операции и {@link AttemptInterceptor} для
|
|
1686
|
+
* отдельной транспортной попытки. Core взаимодействует с плагином только через эти контракты
|
|
1687
|
+
* и его lifecycle, не зная деталей реализации.
|
|
1194
1688
|
*
|
|
1195
|
-
*
|
|
1689
|
+
* Настройки отдельного вызова плагин объявляет своим полем в `RequestExtensions` через
|
|
1690
|
+
* declaration merging. Пользователь передаёт их в `RequestOptions.extensions`, а operation
|
|
1691
|
+
* transformer читает только принадлежащий плагину namespace.
|
|
1692
|
+
*
|
|
1693
|
+
* @example Логирование логических операций
|
|
1196
1694
|
* ```ts
|
|
1197
|
-
* const logging:
|
|
1695
|
+
* const logging: ClientPlugin = {
|
|
1198
1696
|
* name: 'logging',
|
|
1199
|
-
* install({
|
|
1200
|
-
* use(async (request, next) => {
|
|
1697
|
+
* install({ operations, logger }) {
|
|
1698
|
+
* operations.use(async (request, next) => {
|
|
1201
1699
|
* logger?.info(`${request.method} ${request.path}`);
|
|
1202
1700
|
* return next(request);
|
|
1203
1701
|
* });
|
|
@@ -1207,94 +1705,25 @@ interface PluginContext {
|
|
|
1207
1705
|
* itd.use(logging);
|
|
1208
1706
|
* ```
|
|
1209
1707
|
*/
|
|
1210
|
-
interface
|
|
1708
|
+
interface ClientPlugin {
|
|
1211
1709
|
/** Имя плагина. Должно быть уникальным: повторное подключение — ошибка. */
|
|
1212
1710
|
name: string;
|
|
1213
|
-
/**
|
|
1214
|
-
* Имена опций запроса, которые плагин читает у методов ресурсов.
|
|
1215
|
-
*
|
|
1216
|
-
* Библиотека этих опций не понимает и ничего с ними не делает — только доносит
|
|
1217
|
-
* от вызова метода до обёртки нетронутыми. Без такого списка чужие поля отсеиваются,
|
|
1218
|
-
* чтобы случайная опечатка в параметрах не уезжала на сервер.
|
|
1219
|
-
*
|
|
1220
|
-
* Имена полей самого запроса (`path`, `body`, `headers`, `signal` и прочие из
|
|
1221
|
-
* `RawRequestOptions`) заявить нельзя: подключение такого плагина завершится ошибкой.
|
|
1222
|
-
*
|
|
1223
|
-
* Типы для них плагин объявляет сам, дополняя `RequestOptions`:
|
|
1224
|
-
* ```ts
|
|
1225
|
-
* declare module 'itd-api' {
|
|
1226
|
-
* interface RequestOptions { encrypt?: string | undefined }
|
|
1227
|
-
* }
|
|
1228
|
-
* ```
|
|
1229
|
-
*/
|
|
1230
|
-
optionKeys?: readonly string[];
|
|
1231
1711
|
/** Плагины, которые обязаны быть подключены раньше этого. */
|
|
1232
1712
|
requires?: readonly string[];
|
|
1233
1713
|
/** Несовместимые плагины. Достаточно объявить конфликт с одной стороны. */
|
|
1234
1714
|
conflicts?: readonly string[];
|
|
1235
|
-
/** Имена плагинов, снаружи которых
|
|
1715
|
+
/** Имена плагинов, снаружи которых должны стоять оба вида расширений этого плагина. */
|
|
1236
1716
|
before?: readonly string[];
|
|
1237
|
-
/** Имена плагинов, внутри которых
|
|
1717
|
+
/** Имена плагинов, внутри которых должны стоять оба вида расширений этого плагина. */
|
|
1238
1718
|
after?: readonly string[];
|
|
1239
1719
|
/**
|
|
1240
1720
|
* Устанавливает плагин.
|
|
1241
1721
|
*
|
|
1242
1722
|
* Может вернуть функцию освобождения ресурсов. Она вызывается при `unuse()` или
|
|
1243
|
-
* окончательном `dispose()` клиента и может быть асинхронной.
|
|
1244
|
-
|
|
1245
|
-
install(context: PluginContext): unknown;
|
|
1246
|
-
}
|
|
1247
|
-
//#endregion
|
|
1248
|
-
//#region src/core/rate-limit.d.ts
|
|
1249
|
-
/**
|
|
1250
|
-
* Очередь запросов: ограничивает одновременность и частоту.
|
|
1251
|
-
*
|
|
1252
|
-
* Нужна прежде всего ботам: без неё цикл по сотне постов уходит в API одним залпом
|
|
1253
|
-
* и упирается в `RATE_LIMIT_EXCEEDED`.
|
|
1254
|
-
*
|
|
1255
|
-
* Частота выдерживается равномерным разносом стартов (`1000 / rps` между запросами),
|
|
1256
|
-
* а не окном со счётчиком: так нагрузка ровная, без всплеска в начале каждой секунды.
|
|
1257
|
-
*
|
|
1258
|
-
* @internal
|
|
1259
|
-
*/
|
|
1260
|
-
declare class RequestQueue {
|
|
1261
|
-
#private;
|
|
1262
|
-
constructor(options: ResolvedRateLimitOptions, clock?: ItdClock);
|
|
1263
|
-
/** Сколько задач выполняется прямо сейчас. */
|
|
1264
|
-
get active(): number;
|
|
1265
|
-
/** Сколько задач ждёт очереди. */
|
|
1266
|
-
get pending(): number;
|
|
1267
|
-
/**
|
|
1268
|
-
* Ставит задачу в очередь.
|
|
1269
|
-
*
|
|
1270
|
-
* @returns результат задачи; ошибка задачи пробрасывается без изменений
|
|
1271
|
-
*/
|
|
1272
|
-
schedule<T>(task: () => Promise<T>, signal?: AbortSignal): Promise<T>;
|
|
1273
|
-
/**
|
|
1274
|
-
* Останавливает очередь: снимает отложенную паузу и отклоняет ещё не начатые задачи
|
|
1275
|
-
* ошибкой `ItdAbortError`. Уже выполняющиеся задачи доводятся до конца.
|
|
1723
|
+
* окончательном `dispose()` клиента и может быть асинхронной. Сам `install()` синхронный:
|
|
1724
|
+
* регистрация расширений завершается до того, как `use()` вернёт управление.
|
|
1276
1725
|
*/
|
|
1277
|
-
|
|
1278
|
-
/**
|
|
1279
|
-
* Придерживает всю очередь на заданное время.
|
|
1280
|
-
*
|
|
1281
|
-
* Вызывается при получении `429` с заголовком `Retry-After`: тормозить нужно все запросы,
|
|
1282
|
-
* а не только тот, который наткнулся на лимит, — иначе остальные продолжат добивать API.
|
|
1283
|
-
*/
|
|
1284
|
-
pause(ms: number): void;
|
|
1285
|
-
}
|
|
1286
|
-
/**
|
|
1287
|
-
* Очереди по хостам: основная и по одной на каждый сервис платформы.
|
|
1288
|
-
*
|
|
1289
|
-
* @internal
|
|
1290
|
-
*/
|
|
1291
|
-
declare class RequestQueuePool {
|
|
1292
|
-
#private;
|
|
1293
|
-
constructor(options: ResolvedRateLimitOptions, clock?: ItdClock);
|
|
1294
|
-
/** Очередь хоста. */
|
|
1295
|
-
for(service: string | undefined): RequestQueue;
|
|
1296
|
-
/** Останавливает все очереди. */
|
|
1297
|
-
stop(): void;
|
|
1726
|
+
install(api: PluginApi): void | PluginTeardown;
|
|
1298
1727
|
}
|
|
1299
1728
|
//#endregion
|
|
1300
1729
|
//#region src/models/users.d.ts
|
|
@@ -1603,6 +2032,8 @@ interface TransportEvent {
|
|
|
1603
2032
|
interface TransportContext {
|
|
1604
2033
|
/** Базовый URL API. */
|
|
1605
2034
|
baseUrl: string;
|
|
2035
|
+
/** Разрешено ли передавать токен этому сервису. */
|
|
2036
|
+
authorize: boolean;
|
|
1606
2037
|
/** Реализация `fetch`. */
|
|
1607
2038
|
fetch: typeof fetch;
|
|
1608
2039
|
/**
|
|
@@ -1621,15 +2052,7 @@ interface TransportContext {
|
|
|
1621
2052
|
/** Вызывается, когда соединение установлено. */
|
|
1622
2053
|
onOpen: () => void;
|
|
1623
2054
|
}
|
|
1624
|
-
/**
|
|
1625
|
-
* Канал получения событий в реальном времени.
|
|
1626
|
-
*
|
|
1627
|
-
* Сейчас у платформы один такой канал — поток `text/event-stream`. Абстракция нужна
|
|
1628
|
-
* на будущее: политика безопасности сайта уже разрешает `wss://*.xn--d1ah4a.com`,
|
|
1629
|
-
* и когда появится WebSocket, достаточно будет добавить ещё одну реализацию этого
|
|
1630
|
-
* интерфейса. Переподключение, обновление токена и разбор уведомлений от транспорта
|
|
1631
|
-
* не зависят.
|
|
1632
|
-
*/
|
|
2055
|
+
/** Канал получения исходных событий в реальном времени. */
|
|
1633
2056
|
interface RealtimeTransport {
|
|
1634
2057
|
/** Понятное имя для логов и диагностики. */
|
|
1635
2058
|
readonly name: string;
|
|
@@ -1691,17 +2114,28 @@ type RealtimeUpdateType = RealtimeUpdate['type'];
|
|
|
1691
2114
|
type RealtimeUpdateOfType<T extends RealtimeUpdateType> = Extract<RealtimeUpdate, {
|
|
1692
2115
|
type: T;
|
|
1693
2116
|
}>;
|
|
1694
|
-
/**
|
|
1695
|
-
|
|
2117
|
+
/**
|
|
2118
|
+
* Общая форма контекста обработки: то, что есть у любого потока независимо от домена.
|
|
2119
|
+
*
|
|
2120
|
+
* Контекст — обычный объектный литерал, а не класс с геттерами и не `Object.freeze`:
|
|
2121
|
+
* плагины-флейворы присваивают в него свои поля (`ctx.session = …`), а `@itd-api/hydrate`
|
|
2122
|
+
* подменяет `update` и `stream` через `Object.defineProperty`.
|
|
2123
|
+
*
|
|
2124
|
+
* @typeParam U нормализованное обновление домена
|
|
2125
|
+
* @typeParam S поток, который его получил
|
|
2126
|
+
*/
|
|
2127
|
+
interface RealtimeContextBase<U = unknown, S = unknown> {
|
|
1696
2128
|
/** Нормализованные данные обновления. */
|
|
1697
2129
|
readonly update: U;
|
|
1698
2130
|
/** Поток, который получил обновление. */
|
|
1699
|
-
readonly stream:
|
|
2131
|
+
readonly stream: S;
|
|
1700
2132
|
/** Исходный кадр транспорта. Для начальной REST-синхронизации равен `undefined`. */
|
|
1701
2133
|
readonly raw: TransportEvent | undefined;
|
|
1702
2134
|
/** Откуда получены данные. */
|
|
1703
2135
|
readonly origin: RealtimeUpdateOrigin;
|
|
1704
2136
|
}
|
|
2137
|
+
/** Контекст обработки одного обновления потока уведомлений. */
|
|
2138
|
+
type RealtimeContext<U extends RealtimeUpdate = RealtimeUpdate> = RealtimeContextBase<U, ItdRealtime>;
|
|
1705
2139
|
/** Контекст уведомления с типом, суженным фильтром. */
|
|
1706
2140
|
type RealtimeNotificationContext<T extends NotificationType = NotificationType> = RealtimeContext<RealtimeNotificationUpdate<T>>;
|
|
1707
2141
|
/** Условия отбора уведомлений. Все указанные поля объединяются через логическое И. */
|
|
@@ -1724,15 +2158,21 @@ type RealtimeNotificationSelector<T extends NotificationType = NotificationType>
|
|
|
1724
2158
|
/** Продолжает цепочку промежуточных обработчиков потока. */
|
|
1725
2159
|
type RealtimeNext = () => Promise<void>;
|
|
1726
2160
|
/** Обрабатывает обновление потока до его передачи подписчикам. */
|
|
1727
|
-
type RealtimeMiddleware<C extends
|
|
2161
|
+
type RealtimeMiddleware<C extends RealtimeContextBase = RealtimeContext> = (context: C, next: RealtimeNext) => void | Promise<void>;
|
|
2162
|
+
/** Объект, предоставляющий снимок промежуточного обработчика потока. */
|
|
2163
|
+
interface RealtimeMiddlewareObj<C extends RealtimeContextBase = RealtimeContext> {
|
|
2164
|
+
middleware(): RealtimeMiddleware<C>;
|
|
2165
|
+
}
|
|
1728
2166
|
/** Асинхронный обработчик нормализованного обновления потока. */
|
|
1729
|
-
type RealtimeHandler<C extends
|
|
2167
|
+
type RealtimeHandler<C extends RealtimeContextBase = RealtimeContext> = (context: C) => unknown | Promise<unknown>;
|
|
1730
2168
|
/** Условие отбора контекста потока. */
|
|
1731
|
-
type RealtimePredicate = (context:
|
|
2169
|
+
type RealtimePredicate<C extends RealtimeContextBase = RealtimeContext> = (context: C) => boolean;
|
|
1732
2170
|
/** Проверка, сужающая тип контекста потока. */
|
|
1733
|
-
type RealtimeTypeGuard<C extends RealtimeContext> = (context:
|
|
2171
|
+
type RealtimeTypeGuard<C extends B, B extends RealtimeContextBase = RealtimeContext> = (context: B) => context is C;
|
|
1734
2172
|
/** Ключи, по которым обновления нельзя обрабатывать одновременно. */
|
|
1735
|
-
type RealtimeSequentializer = (context:
|
|
2173
|
+
type RealtimeSequentializer<C extends RealtimeContextBase = RealtimeContext> = (context: C) => PropertyKey | readonly PropertyKey[] | undefined;
|
|
2174
|
+
/** Выполняет промежуточные обработчики по порядку и запрещает повторный вызов `next()`. */
|
|
2175
|
+
declare function runRealtimeMiddleware<C extends RealtimeContextBase>(middleware: readonly RealtimeMiddleware<C>[], context: C, terminal: RealtimeNext): Promise<void>;
|
|
1736
2176
|
//#endregion
|
|
1737
2177
|
//#region src/realtime/reconnect.d.ts
|
|
1738
2178
|
/**
|
|
@@ -1760,27 +2200,14 @@ interface ReconnectOptions {
|
|
|
1760
2200
|
maxAttempts?: number;
|
|
1761
2201
|
}
|
|
1762
2202
|
//#endregion
|
|
1763
|
-
//#region src/realtime/
|
|
1764
|
-
/**
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
* Приходит первым кадром сразу после установки соединения.
|
|
1772
|
-
*/
|
|
1773
|
-
ready: {
|
|
1774
|
-
userId: string | undefined;
|
|
1775
|
-
};
|
|
1776
|
-
/**
|
|
1777
|
-
* Получено актуальное число непрочитанных.
|
|
1778
|
-
*
|
|
1779
|
-
* При подключении клиент может запросить начальное значение через REST. Затем событие
|
|
1780
|
-
* возникает, только если счётчик пришёл в потоке. В остальных случаях обновляйте его
|
|
1781
|
-
* в приложении либо запрашивайте `itd.notifications.count()`.
|
|
1782
|
-
*/
|
|
1783
|
-
unreadCount: number;
|
|
2203
|
+
//#region src/realtime/engine.d.ts
|
|
2204
|
+
/**
|
|
2205
|
+
* События, которые движок рассылает сам.
|
|
2206
|
+
*
|
|
2207
|
+
* Ни одно из них не зависит от домена, поэтому они одинаковы у любого потока.
|
|
2208
|
+
* Домен расширяет эту карту своими событиями.
|
|
2209
|
+
*/
|
|
2210
|
+
interface RealtimeEngineEvents<C extends RealtimeContextBase = RealtimeContextBase> {
|
|
1784
2211
|
/** Изменилось состояние соединения. */
|
|
1785
2212
|
status: RealtimeStatus;
|
|
1786
2213
|
/** Соединение оборвалось; будет предпринята попытка переподключения. */
|
|
@@ -1800,19 +2227,47 @@ interface RealtimeEvents {
|
|
|
1800
2227
|
};
|
|
1801
2228
|
/** Попытки исчерпаны — соединение восстановится только ручным `connect()`. */
|
|
1802
2229
|
giveup: undefined;
|
|
1803
|
-
/** Любой исходный кадр транспорта. Отправляется до нормализации и
|
|
2230
|
+
/** Любой исходный кадр транспорта. Отправляется до нормализации и обработчиков. */
|
|
1804
2231
|
message: TransportEvent;
|
|
1805
2232
|
/** Промежуточный обработчик потока завершился исключением. */
|
|
1806
2233
|
middlewareError: {
|
|
1807
2234
|
error: unknown;
|
|
1808
|
-
context:
|
|
2235
|
+
context: C;
|
|
1809
2236
|
};
|
|
1810
|
-
/** Обработчик
|
|
2237
|
+
/** Обработчик обновления завершился исключением. */
|
|
1811
2238
|
handlerError: {
|
|
1812
2239
|
error: unknown;
|
|
1813
|
-
context:
|
|
2240
|
+
context: C;
|
|
1814
2241
|
};
|
|
1815
2242
|
}
|
|
2243
|
+
//#endregion
|
|
2244
|
+
//#region src/realtime/stream.d.ts
|
|
2245
|
+
/**
|
|
2246
|
+
* События потока уведомлений.
|
|
2247
|
+
*
|
|
2248
|
+
* Общая часть — {@link RealtimeEngineEvents}: статусы, ошибки и переподключение одинаковы
|
|
2249
|
+
* у любого потока. Ниже — то, что есть только у уведомлений.
|
|
2250
|
+
*/
|
|
2251
|
+
interface RealtimeEvents<C extends RealtimeContext = RealtimeContext> extends RealtimeEngineEvents<C> {
|
|
2252
|
+
/** Пришло новое уведомление. */
|
|
2253
|
+
notification: NotificationEvent;
|
|
2254
|
+
/**
|
|
2255
|
+
* Сервер подтвердил подключение и назвал получателя событий.
|
|
2256
|
+
*
|
|
2257
|
+
* Приходит первым кадром сразу после установки соединения.
|
|
2258
|
+
*/
|
|
2259
|
+
ready: {
|
|
2260
|
+
userId: string | undefined;
|
|
2261
|
+
};
|
|
2262
|
+
/**
|
|
2263
|
+
* Получено актуальное число непрочитанных.
|
|
2264
|
+
*
|
|
2265
|
+
* При подключении клиент может запросить начальное значение через REST. Затем событие
|
|
2266
|
+
* возникает, только если счётчик пришёл в потоке. В остальных случаях обновляйте его
|
|
2267
|
+
* в приложении либо запрашивайте `itd.notifications.count()`.
|
|
2268
|
+
*/
|
|
2269
|
+
unreadCount: number;
|
|
2270
|
+
}
|
|
1816
2271
|
/** Способ получения событий. */
|
|
1817
2272
|
declare const RealtimeTransportKind: Readonly<{
|
|
1818
2273
|
/** Поток событий, если среда умеет читать тело по частям, иначе опрос. */
|
|
@@ -1824,7 +2279,7 @@ declare const RealtimeTransportKind: Readonly<{
|
|
|
1824
2279
|
}>;
|
|
1825
2280
|
type RealtimeTransportKind = (typeof RealtimeTransportKind)[keyof typeof RealtimeTransportKind];
|
|
1826
2281
|
/** Настройки потока уведомлений. */
|
|
1827
|
-
interface RealtimeOptions extends ReconnectOptions {
|
|
2282
|
+
interface RealtimeOptions<C extends RealtimeContext = RealtimeContext> extends ReconnectOptions {
|
|
1828
2283
|
/**
|
|
1829
2284
|
* Транспорт. По умолчанию `auto`: поток событий, если среда умеет читать тело ответа
|
|
1830
2285
|
* по частям, иначе опрос.
|
|
@@ -1867,11 +2322,13 @@ interface RealtimeOptions extends ReconnectOptions {
|
|
|
1867
2322
|
/** Максимальное число одновременно обрабатываемых обновлений. По умолчанию 1. */
|
|
1868
2323
|
concurrency?: number;
|
|
1869
2324
|
/** Возвращает ключи обновлений, которые нельзя обрабатывать одновременно. */
|
|
1870
|
-
sequentialize?: RealtimeSequentializer
|
|
2325
|
+
sequentialize?: RealtimeSequentializer<C>;
|
|
1871
2326
|
}
|
|
1872
2327
|
/** Что поток получает от клиента. */
|
|
1873
2328
|
interface RealtimeDeps {
|
|
1874
2329
|
baseUrl: string;
|
|
2330
|
+
/** Разрешено ли транспорту передавать токен этому сервису. */
|
|
2331
|
+
authorize?: boolean | undefined;
|
|
1875
2332
|
fetch: typeof fetch;
|
|
1876
2333
|
clock?: ItdClock;
|
|
1877
2334
|
/** Общие заголовки клиента для адреса — см. {@link TransportContext.baseHeaders}. */
|
|
@@ -1897,6 +2354,9 @@ interface RealtimeDeps {
|
|
|
1897
2354
|
* Получается вызовом `itd.realtime()`. Соединение поднимается методом {@link connect}
|
|
1898
2355
|
* и держится само: обрывы, обновление токена и повторные попытки библиотека берёт на себя.
|
|
1899
2356
|
*
|
|
2357
|
+
* Параметр типа задаёт форму контекста: плагин может расширить её своими полями
|
|
2358
|
+
* (`ItdRealtime<RealtimeContext & SessionFlavor<S>>`) и типизировать обработчики.
|
|
2359
|
+
*
|
|
1900
2360
|
* @example
|
|
1901
2361
|
* ```ts
|
|
1902
2362
|
* import { NotificationType } from 'itd-api';
|
|
@@ -1914,12 +2374,12 @@ interface RealtimeDeps {
|
|
|
1914
2374
|
* await stream.drain();
|
|
1915
2375
|
* ```
|
|
1916
2376
|
*/
|
|
1917
|
-
declare class ItdRealtime {
|
|
2377
|
+
declare class ItdRealtime<C extends RealtimeContext = RealtimeContext> {
|
|
1918
2378
|
#private;
|
|
1919
|
-
constructor(deps: RealtimeDeps, options?: RealtimeOptions);
|
|
2379
|
+
constructor(deps: RealtimeDeps, options?: RealtimeOptions<C>);
|
|
1920
2380
|
/** Текущее состояние соединения. */
|
|
1921
2381
|
get status(): RealtimeStatus;
|
|
1922
|
-
/**
|
|
2382
|
+
/** Имя используемого транспорта. */
|
|
1923
2383
|
get transport(): string;
|
|
1924
2384
|
/** Базовый URL клиента, создавшего поток. @internal */
|
|
1925
2385
|
get baseUrl(): string;
|
|
@@ -1928,32 +2388,32 @@ declare class ItdRealtime {
|
|
|
1928
2388
|
/** Непрозрачная область авторизации создавшего поток клиента. @internal */
|
|
1929
2389
|
getAuthScope(): string | undefined;
|
|
1930
2390
|
/** Подписывается на событие потока. @returns функция отписки */
|
|
1931
|
-
on<K extends keyof RealtimeEvents
|
|
2391
|
+
on<K extends keyof RealtimeEvents<C>>(event: K, listener: Listener<RealtimeEvents<C>[K]>): Unsubscribe;
|
|
1932
2392
|
/** Подписывается на одно срабатывание. */
|
|
1933
|
-
once<K extends keyof RealtimeEvents
|
|
2393
|
+
once<K extends keyof RealtimeEvents<C>>(event: K, listener: Listener<RealtimeEvents<C>[K]>): Unsubscribe;
|
|
1934
2394
|
/**
|
|
1935
|
-
* Добавляет промежуточный обработчик
|
|
2395
|
+
* Добавляет промежуточный обработчик или объект, предоставляющий его через `middleware()`.
|
|
1936
2396
|
*
|
|
1937
2397
|
* Обработчики выполняются в порядке регистрации. Если `next()` не вызван, обновление не
|
|
1938
2398
|
* передаётся дальше по цепочке, асинхронным обработчикам и слушателям событий.
|
|
1939
2399
|
*
|
|
1940
2400
|
* @returns функция удаления обработчика
|
|
1941
2401
|
*/
|
|
1942
|
-
use(middleware: RealtimeMiddleware): Unsubscribe;
|
|
2402
|
+
use(middleware: RealtimeMiddleware<C> | RealtimeMiddlewareObj<C>): Unsubscribe;
|
|
1943
2403
|
/** Подписывает асинхронный обработчик на все нормализованные обновления. */
|
|
1944
|
-
onUpdate(handler: RealtimeHandler): Unsubscribe;
|
|
2404
|
+
onUpdate(handler: RealtimeHandler<C>): Unsubscribe;
|
|
1945
2405
|
/** Подписывает асинхронный обработчик на обновление указанного типа. */
|
|
1946
|
-
onUpdate<T extends RealtimeUpdateType>(type: T, handler: RealtimeHandler<RealtimeContext<RealtimeUpdateOfType<T>>>): Unsubscribe;
|
|
2406
|
+
onUpdate<T extends RealtimeUpdateType>(type: T, handler: RealtimeHandler<C & RealtimeContext<RealtimeUpdateOfType<T>>>): Unsubscribe;
|
|
1947
2407
|
/** Подписывает асинхронный обработчик по функции сужения типа. */
|
|
1948
|
-
onUpdate<
|
|
2408
|
+
onUpdate<N extends C>(guard: RealtimeTypeGuard<N, C>, handler: RealtimeHandler<N>): Unsubscribe;
|
|
1949
2409
|
/** Подписывает асинхронный обработчик по пользовательскому условию. */
|
|
1950
|
-
onUpdate(predicate: RealtimePredicate
|
|
2410
|
+
onUpdate(predicate: RealtimePredicate<C>, handler: RealtimeHandler<C>): Unsubscribe;
|
|
1951
2411
|
/** Подписывает асинхронный обработчик на уведомления, подходящие под фильтр. */
|
|
1952
|
-
onNotification<T extends NotificationType>(selector: RealtimeNotificationSelector<T>, handler: RealtimeHandler<RealtimeNotificationContext<T>>): Unsubscribe;
|
|
2412
|
+
onNotification<T extends NotificationType>(selector: RealtimeNotificationSelector<T>, handler: RealtimeHandler<C & RealtimeNotificationContext<T>>): Unsubscribe;
|
|
1953
2413
|
/** Подписывает асинхронный обработчик по функции сужения типа уведомления. */
|
|
1954
|
-
onNotification<
|
|
2414
|
+
onNotification<N extends C & RealtimeNotificationContext>(guard: (context: C & RealtimeNotificationContext) => context is N, handler: RealtimeHandler<N>): Unsubscribe;
|
|
1955
2415
|
/** Подписывает асинхронный обработчик по пользовательскому условию. */
|
|
1956
|
-
onNotification(predicate: (context: RealtimeNotificationContext) => boolean, handler: RealtimeHandler<RealtimeNotificationContext>): Unsubscribe;
|
|
2416
|
+
onNotification(predicate: (context: C & RealtimeNotificationContext) => boolean, handler: RealtimeHandler<C & RealtimeNotificationContext>): Unsubscribe;
|
|
1957
2417
|
/**
|
|
1958
2418
|
* Поднимает соединение.
|
|
1959
2419
|
*
|
|
@@ -1961,6 +2421,8 @@ declare class ItdRealtime {
|
|
|
1961
2421
|
* подключения при перерисовке интерфейса.
|
|
1962
2422
|
*
|
|
1963
2423
|
* Возвращает управление сразу после запуска: соединение живёт в фоне.
|
|
2424
|
+
*
|
|
2425
|
+
* @throws если создавший поток клиент уже освобождён
|
|
1964
2426
|
*/
|
|
1965
2427
|
connect(): Promise<void>;
|
|
1966
2428
|
/** Закрывает соединение и отменяет запланированные попытки. */
|
|
@@ -1971,81 +2433,18 @@ declare class ItdRealtime {
|
|
|
1971
2433
|
removeAllListeners(): void;
|
|
1972
2434
|
}
|
|
1973
2435
|
//#endregion
|
|
1974
|
-
//#region src/core/plugins/registry.d.ts
|
|
1975
|
-
/**
|
|
1976
|
-
* Список подключённых плагинов и собранная из них цепочка обёрток.
|
|
1977
|
-
*
|
|
1978
|
-
* Живёт в клиенте, а работает в транспорте: {@link HttpClient} прогоняет через `run`
|
|
1979
|
-
* каждый запрос, если плагины есть.
|
|
1980
|
-
*/
|
|
1981
|
-
declare class PluginRegistry {
|
|
1982
|
-
#private;
|
|
1983
|
-
/** Сколько плагинов подключено. */
|
|
1984
|
-
get size(): number;
|
|
1985
|
-
/** Имена опций активных плагинов. */
|
|
1986
|
-
get optionKeys(): ReadonlySet<string>;
|
|
1987
|
-
/** Имена плагинов в фактическом порядке выполнения. */
|
|
1988
|
-
names(): string[];
|
|
1989
|
-
/** Подключён ли плагин с таким именем. */
|
|
1990
|
-
has(name: string): boolean;
|
|
1991
|
-
/** Проверяет добавление без вызова `install()`. @internal */
|
|
1992
|
-
assertCanAdd(plugin: ItdPlugin): void;
|
|
1993
|
-
/** Проверяет удаление без изменения реестра. @internal */
|
|
1994
|
-
assertCanRemove(name: string): void;
|
|
1995
|
-
/**
|
|
1996
|
-
* Подключает плагин.
|
|
1997
|
-
*
|
|
1998
|
-
* @throws {ItdConfigError} если плагин задан неверно, уже подключён, нарушает зависимости
|
|
1999
|
-
* или заявил занятое имя опции
|
|
2000
|
-
*/
|
|
2001
|
-
add(plugin: ItdPlugin, context: Omit<PluginContext, 'use' | 'useHooks'>): void;
|
|
2002
|
-
/**
|
|
2003
|
-
* Отключает плагин и вызывает его функцию очистки.
|
|
2004
|
-
*
|
|
2005
|
-
* Новые запросы перестают видеть плагин сразу. Если его обёртка уже выполняется,
|
|
2006
|
-
* очистка дождётся завершения этого логического запроса.
|
|
2007
|
-
*
|
|
2008
|
-
* @returns `false`, если такого плагина не было
|
|
2009
|
-
*/
|
|
2010
|
-
remove(name: string): Promise<boolean>;
|
|
2011
|
-
/**
|
|
2012
|
-
* Отключает все плагины окончательно.
|
|
2013
|
-
*
|
|
2014
|
-
* Очистка идёт изнутри наружу — в порядке, обратном выполнению обёрток.
|
|
2015
|
-
*/
|
|
2016
|
-
dispose(): Promise<void>;
|
|
2017
|
-
/**
|
|
2018
|
-
* Объединяет конструкторские хуки с хуками подключаемых плагинов.
|
|
2019
|
-
*
|
|
2020
|
-
* Возвращённый объект динамический: подключение и отключение плагина начинает действовать
|
|
2021
|
-
* со следующего логического запроса без пересоздания транспорта.
|
|
2022
|
-
*/
|
|
2023
|
-
hooks(base: ClientHooks): ClientHooks;
|
|
2024
|
-
/**
|
|
2025
|
-
* Прогоняет запрос через цепочку обёрток.
|
|
2026
|
-
*
|
|
2027
|
-
* Снимок цепочки берётся в начале: `unuse()` влияет на новые запросы, но не обрывает
|
|
2028
|
-
* уже выполняющийся посередине.
|
|
2029
|
-
*
|
|
2030
|
-
* @param execute настоящий запрос, вызывается самой внутренней обёрткой
|
|
2031
|
-
*/
|
|
2032
|
-
run(request: RawRequestOptions, execute: (request: RawRequestOptions) => Promise<unknown>): Promise<unknown>;
|
|
2033
|
-
}
|
|
2034
|
-
//#endregion
|
|
2035
2436
|
//#region src/core/http.d.ts
|
|
2036
2437
|
/** Что нужно фасаду для работы. */
|
|
2037
2438
|
interface HttpClientDeps {
|
|
2038
2439
|
/** Готовый обработчик — вся цепочка слоёв поверх транспорта. */
|
|
2039
2440
|
handler: RequestHandler;
|
|
2040
|
-
/** Реестр плагинов: у него ресурсы спрашивают имена заявленных опций. */
|
|
2041
|
-
plugins: PluginRegistry;
|
|
2042
2441
|
baseUrl: string;
|
|
2043
2442
|
}
|
|
2044
2443
|
/**
|
|
2045
2444
|
* Точка входа ресурсов в конвейер запросов.
|
|
2046
2445
|
*
|
|
2047
2446
|
* Принимает готовый обработчик — цепочку слоёв поверх транспорта, собранную
|
|
2048
|
-
*
|
|
2447
|
+
* во внутреннем runtime клиента, — и отдаёт ресурсам методы `request`/`operation`.
|
|
2049
2448
|
* О слоях и их порядке ресурсы не знают.
|
|
2050
2449
|
*/
|
|
2051
2450
|
declare class HttpClient {
|
|
@@ -2053,13 +2452,6 @@ declare class HttpClient {
|
|
|
2053
2452
|
constructor(deps: HttpClientDeps);
|
|
2054
2453
|
/** Базовый URL, к которому обращается клиент. */
|
|
2055
2454
|
get baseUrl(): string;
|
|
2056
|
-
/**
|
|
2057
|
-
* Имена опций запроса, заявленные плагинами.
|
|
2058
|
-
*
|
|
2059
|
-
* Читается ресурсами: они переносят в транспорт только известные поля, а чужие,
|
|
2060
|
-
* если их никто не заявил, отсеивают.
|
|
2061
|
-
*/
|
|
2062
|
-
get pluginOptionKeys(): ReadonlySet<string>;
|
|
2063
2455
|
/**
|
|
2064
2456
|
* Выполняет запрос к API через собранный конвейер.
|
|
2065
2457
|
*
|
|
@@ -2069,7 +2461,11 @@ declare class HttpClient {
|
|
|
2069
2461
|
* @throws {ItdAbortError} если запрос отменён через `signal`
|
|
2070
2462
|
* @throws {ItdNetworkError} если запрос не дошёл до сервера
|
|
2071
2463
|
*/
|
|
2072
|
-
request<T = unknown>(options:
|
|
2464
|
+
request<T = unknown>(options: PipelineRequestInput): Promise<T>;
|
|
2465
|
+
/** Выполняет встроенную семантическую операцию, подставляя её HTTP-метод из каталога. */
|
|
2466
|
+
operation<T = unknown>(operationId: BuiltInOperationId, options: Omit<PipelineRequest, 'operationId' | 'method'>): Promise<T>;
|
|
2467
|
+
/** Выполняет внутреннюю операцию финализации после начала `ItdClient.dispose()`. @internal */
|
|
2468
|
+
cleanupOperation<T = unknown>(operationId: BuiltInOperationId, options: Omit<PipelineRequest, 'operationId' | 'method'>): Promise<T>;
|
|
2073
2469
|
}
|
|
2074
2470
|
//#endregion
|
|
2075
2471
|
//#region src/models/account.d.ts
|
|
@@ -2240,11 +2636,6 @@ declare class Paginator<T> implements AsyncIterable<T> {
|
|
|
2240
2636
|
}
|
|
2241
2637
|
//#endregion
|
|
2242
2638
|
//#region src/resources/base.d.ts
|
|
2243
|
-
/** Параметры перебираемого списка: опции запроса плюс предел числа страниц. */
|
|
2244
|
-
interface ListParams extends RequestOptions {
|
|
2245
|
-
/** Ограничение числа страниц при переборе. */
|
|
2246
|
-
maxPages?: number | undefined;
|
|
2247
|
-
}
|
|
2248
2639
|
/**
|
|
2249
2640
|
* Описание перебираемого эндпоинта.
|
|
2250
2641
|
*
|
|
@@ -2254,7 +2645,9 @@ interface ListParams extends RequestOptions {
|
|
|
2254
2645
|
* @typeParam T тип элемента списка
|
|
2255
2646
|
* @typeParam P тип параметров метода
|
|
2256
2647
|
*/
|
|
2257
|
-
interface ListingSpec<T, P extends
|
|
2648
|
+
interface ListingSpec<T, P extends object> {
|
|
2649
|
+
/** Стабильная семантическая операция списка. */
|
|
2650
|
+
operationId: BuiltInOperationId | ((params: P) => BuiltInOperationId);
|
|
2258
2651
|
/** Путь эндпоинта. */
|
|
2259
2652
|
path: (params: P) => string;
|
|
2260
2653
|
/** Параметры запроса без полей пагинации — их добавит перебор. */
|
|
@@ -2267,35 +2660,25 @@ interface ListingSpec<T, P extends ListParams> {
|
|
|
2267
2660
|
start: (params: P) => PageState;
|
|
2268
2661
|
}
|
|
2269
2662
|
/** Пара методов, собранная из {@link ListingSpec}: разовая загрузка и перебор. */
|
|
2270
|
-
interface Listing<T, P extends
|
|
2663
|
+
interface Listing<T, P extends object> {
|
|
2271
2664
|
/** Загружает одну страницу с позиции, заданной параметрами. */
|
|
2272
|
-
list(params: P): Promise<Page<T>>;
|
|
2665
|
+
list(params: P, options?: RequestOptions): Promise<Page<T>>;
|
|
2273
2666
|
/** Перебирает страницы, сама подставляя позиции. */
|
|
2274
|
-
iterate(params: P): Paginator<T>;
|
|
2667
|
+
iterate(params: P, options?: PaginationOptions): Paginator<T>;
|
|
2275
2668
|
}
|
|
2276
2669
|
/** Общая основа всех групп методов клиента. */
|
|
2277
2670
|
declare class BaseResource {
|
|
2278
2671
|
/** @internal */
|
|
2279
2672
|
protected readonly http: HttpClient;
|
|
2280
2673
|
constructor(http: HttpClient);
|
|
2281
|
-
/**
|
|
2282
|
-
* Переносит опции запроса в описание транспорта.
|
|
2283
|
-
*
|
|
2284
|
-
* Копируются только поля {@link REQUEST_OPTION_KEYS} и опции, заявленные плагинами:
|
|
2285
|
-
* параметры методов наследуют {@link RequestOptions} и приносят с собой `limit`, `cursor`
|
|
2286
|
-
* и прочее, чему в описании запроса делать нечего. Чужие опции плагинов библиотека
|
|
2287
|
-
* не понимает, но обязана донести до обёрток нетронутыми.
|
|
2288
|
-
*/
|
|
2289
|
-
protected requestOptions(options: RequestOptions | undefined): Partial<RequestOptions>;
|
|
2290
2674
|
/**
|
|
2291
2675
|
* Собирает перебор страниц.
|
|
2292
2676
|
*
|
|
2293
2677
|
* @param mode схема пагинации эндпоинта
|
|
2294
2678
|
* @param load загружает одну страницу для указанной позиции
|
|
2295
|
-
* @param options
|
|
2679
|
+
* @param options только управление самим перебором: предел, отмена и начальная позиция
|
|
2296
2680
|
*/
|
|
2297
|
-
protected paginate<T>(mode: PaginationMode, load: (state: PageState) => Promise<Page<T>>, options?:
|
|
2298
|
-
maxPages?: number;
|
|
2681
|
+
protected paginate<T>(mode: PaginationMode, load: (state: PageState) => Promise<Page<T>>, options?: PaginationOptions & {
|
|
2299
2682
|
start?: PageState;
|
|
2300
2683
|
}): Paginator<T>;
|
|
2301
2684
|
/**
|
|
@@ -2307,6 +2690,7 @@ declare class BaseResource {
|
|
|
2307
2690
|
* @example
|
|
2308
2691
|
* ```ts
|
|
2309
2692
|
* #feed = this.paginated<Post, FeedParams>({
|
|
2693
|
+
* operationId: 'posts.list',
|
|
2310
2694
|
* path: () => '/api/posts',
|
|
2311
2695
|
* query: (p) => ({ tab: p.tab, limit: p.limit }),
|
|
2312
2696
|
* start: (p) => (p.cursor ? { cursor: p.cursor } : {}),
|
|
@@ -2315,7 +2699,7 @@ declare class BaseResource {
|
|
|
2315
2699
|
* });
|
|
2316
2700
|
* ```
|
|
2317
2701
|
*/
|
|
2318
|
-
protected paginated<T, P extends
|
|
2702
|
+
protected paginated<T, P extends object>(spec: ListingSpec<T, P>): Listing<T, P>;
|
|
2319
2703
|
}
|
|
2320
2704
|
//#endregion
|
|
2321
2705
|
//#region src/resources/auth.d.ts
|
|
@@ -2858,10 +3242,9 @@ interface PinPostResult {
|
|
|
2858
3242
|
//#endregion
|
|
2859
3243
|
//#region src/resources/comments.d.ts
|
|
2860
3244
|
/** Параметры запроса ответов на комментарий. */
|
|
2861
|
-
interface RepliesParams
|
|
3245
|
+
interface RepliesParams {
|
|
2862
3246
|
limit?: number;
|
|
2863
3247
|
page?: number;
|
|
2864
|
-
maxPages?: number;
|
|
2865
3248
|
}
|
|
2866
3249
|
/**
|
|
2867
3250
|
* Комментарии и ответы на них.
|
|
@@ -2879,9 +3262,9 @@ declare class CommentsResource extends BaseResource {
|
|
|
2879
3262
|
*
|
|
2880
3263
|
* Здесь пагинация **постраничная**, в отличие от комментариев к посту, где курсорная.
|
|
2881
3264
|
*/
|
|
2882
|
-
replies(commentId: string, params?: RepliesParams): Promise<Page<Comment>>;
|
|
3265
|
+
replies(commentId: string, params?: RepliesParams, options?: RequestOptions): Promise<Page<Comment>>;
|
|
2883
3266
|
/** Перебирает ответы на комментарий. */
|
|
2884
|
-
iterateReplies(commentId: string, params?: RepliesParams): Paginator<Comment>;
|
|
3267
|
+
iterateReplies(commentId: string, params?: RepliesParams, options?: PaginationOptions): Paginator<Comment>;
|
|
2885
3268
|
/**
|
|
2886
3269
|
* Отвечает на комментарий.
|
|
2887
3270
|
*
|
|
@@ -2913,7 +3296,7 @@ interface UploadedFile {
|
|
|
2913
3296
|
url: string;
|
|
2914
3297
|
}
|
|
2915
3298
|
/** Настройки загрузки. */
|
|
2916
|
-
interface UploadOptions
|
|
3299
|
+
interface UploadOptions {
|
|
2917
3300
|
/** Имя файла. Используется для определения MIME, если тип не задан. */
|
|
2918
3301
|
filename?: string;
|
|
2919
3302
|
/** MIME-тип. По умолчанию определяется по имени или `Blob`. */
|
|
@@ -2939,9 +3322,9 @@ declare class FilesResource extends BaseResource {
|
|
|
2939
3322
|
* Потоковый источник открывается заново при каждой повторной попытке. Буферный источник
|
|
2940
3323
|
* после успешного чтения переиспользуется.
|
|
2941
3324
|
*/
|
|
2942
|
-
upload(input: FileInput,
|
|
3325
|
+
upload(input: FileInput, uploadOptions?: UploadOptions, requestOptions?: RequestOptions): Promise<UploadedFile>;
|
|
2943
3326
|
/** Загружает несколько файлов последовательно, сохраняя порядок. */
|
|
2944
|
-
uploadMany(files: FileInput[],
|
|
3327
|
+
uploadMany(files: FileInput[], uploadOptions?: UploadOptions, requestOptions?: RequestOptions): Promise<string[]>;
|
|
2945
3328
|
/**
|
|
2946
3329
|
* Загружает сведения о файле.
|
|
2947
3330
|
*
|
|
@@ -2954,10 +3337,9 @@ declare class FilesResource extends BaseResource {
|
|
|
2954
3337
|
//#endregion
|
|
2955
3338
|
//#region src/resources/hashtags.d.ts
|
|
2956
3339
|
/** Параметры запроса постов по хэштегу. */
|
|
2957
|
-
interface HashtagPostsParams
|
|
3340
|
+
interface HashtagPostsParams {
|
|
2958
3341
|
limit?: number;
|
|
2959
3342
|
cursor?: string;
|
|
2960
|
-
maxPages?: number;
|
|
2961
3343
|
}
|
|
2962
3344
|
/**
|
|
2963
3345
|
* Хэштеги.
|
|
@@ -2973,29 +3355,28 @@ declare class HashtagsResource extends BaseResource {
|
|
|
2973
3355
|
*/
|
|
2974
3356
|
search(query?: string, params?: {
|
|
2975
3357
|
limit?: number;
|
|
2976
|
-
}
|
|
3358
|
+
}, options?: RequestOptions): Promise<Hashtag[]>;
|
|
2977
3359
|
/** Загружает трендовые хэштеги. */
|
|
2978
3360
|
trending(params?: {
|
|
2979
3361
|
limit?: number;
|
|
2980
|
-
}
|
|
3362
|
+
}, options?: RequestOptions): Promise<Hashtag[]>;
|
|
2981
3363
|
/**
|
|
2982
3364
|
* Загружает страницу постов по хэштегу.
|
|
2983
3365
|
*
|
|
2984
3366
|
* @param tag название без решётки; кодируется автоматически, поэтому кириллица
|
|
2985
3367
|
* и пробелы допустимы
|
|
2986
3368
|
*/
|
|
2987
|
-
posts(tag: string, params?: HashtagPostsParams): Promise<Page<Post>>;
|
|
3369
|
+
posts(tag: string, params?: HashtagPostsParams, options?: RequestOptions): Promise<Page<Post>>;
|
|
2988
3370
|
/** Перебирает посты по хэштегу. */
|
|
2989
|
-
iteratePosts(tag: string, params?: HashtagPostsParams): Paginator<Post>;
|
|
3371
|
+
iteratePosts(tag: string, params?: HashtagPostsParams, options?: PaginationOptions): Paginator<Post>;
|
|
2990
3372
|
}
|
|
2991
3373
|
//#endregion
|
|
2992
3374
|
//#region src/resources/notifications.d.ts
|
|
2993
3375
|
/** Параметры запроса списка уведомлений. */
|
|
2994
|
-
interface NotificationListParams
|
|
3376
|
+
interface NotificationListParams {
|
|
2995
3377
|
limit?: number;
|
|
2996
3378
|
/** Смещение от начала списка. */
|
|
2997
3379
|
offset?: number;
|
|
2998
|
-
maxPages?: number;
|
|
2999
3380
|
}
|
|
3000
3381
|
/** Изменяемые настройки уведомлений. */
|
|
3001
3382
|
type UpdateNotificationSettingsInput = Partial<NotificationSettings>;
|
|
@@ -3018,7 +3399,7 @@ declare class NotificationsResource extends BaseResource {
|
|
|
3018
3399
|
* const next = await itd.notifications.list({ limit: 20, offset: page.nextOffset });
|
|
3019
3400
|
* ```
|
|
3020
3401
|
*/
|
|
3021
|
-
list(params?: NotificationListParams): Promise<Page<Notification>>;
|
|
3402
|
+
list(params?: NotificationListParams, options?: RequestOptions): Promise<Page<Notification>>;
|
|
3022
3403
|
/**
|
|
3023
3404
|
* Перебирает уведомления.
|
|
3024
3405
|
*
|
|
@@ -3029,7 +3410,7 @@ declare class NotificationsResource extends BaseResource {
|
|
|
3029
3410
|
* }
|
|
3030
3411
|
* ```
|
|
3031
3412
|
*/
|
|
3032
|
-
iterate(params?: NotificationListParams): Paginator<Notification>;
|
|
3413
|
+
iterate(params?: NotificationListParams, options?: PaginationOptions): Paginator<Notification>;
|
|
3033
3414
|
/** Загружает число непрочитанных уведомлений. */
|
|
3034
3415
|
count(options?: RequestOptions): Promise<number>;
|
|
3035
3416
|
/**
|
|
@@ -3519,7 +3900,7 @@ type PostUpdateInput = UpdatePostInput | PostBuilder | ((builder: PostBuilder) =
|
|
|
3519
3900
|
//#endregion
|
|
3520
3901
|
//#region src/resources/posts.d.ts
|
|
3521
3902
|
/** Параметры запроса ленты. */
|
|
3522
|
-
interface FeedParams
|
|
3903
|
+
interface FeedParams {
|
|
3523
3904
|
/** Вкладка ленты. По умолчанию сервер отдаёт популярное. */
|
|
3524
3905
|
tab?: FeedTab;
|
|
3525
3906
|
/** Сколько постов на страницу. */
|
|
@@ -3530,21 +3911,18 @@ interface FeedParams extends RequestOptions {
|
|
|
3530
3911
|
* Передавайте значение как есть: его формат зависит от вкладки и может измениться.
|
|
3531
3912
|
*/
|
|
3532
3913
|
cursor?: string;
|
|
3533
|
-
/** Ограничение числа страниц при переборе. */
|
|
3534
|
-
maxPages?: number;
|
|
3535
3914
|
}
|
|
3536
3915
|
/** Параметры запроса постов пользователя. */
|
|
3537
|
-
interface UserPostsParams
|
|
3916
|
+
interface UserPostsParams {
|
|
3538
3917
|
limit?: number;
|
|
3539
3918
|
cursor?: string;
|
|
3540
3919
|
/** Порядок сортировки. */
|
|
3541
3920
|
sort?: string;
|
|
3542
3921
|
/** Закреплённый пост, чтобы сервер поднял его наверх. */
|
|
3543
3922
|
pinnedPostId?: string;
|
|
3544
|
-
maxPages?: number;
|
|
3545
3923
|
}
|
|
3546
3924
|
/** Параметры запроса комментариев к посту. */
|
|
3547
|
-
interface CommentsParams
|
|
3925
|
+
interface CommentsParams {
|
|
3548
3926
|
limit?: number;
|
|
3549
3927
|
/**
|
|
3550
3928
|
* Курсор следующей страницы: идентификатор последнего полученного комментария.
|
|
@@ -3553,7 +3931,6 @@ interface CommentsParams extends RequestOptions {
|
|
|
3553
3931
|
*/
|
|
3554
3932
|
cursor?: string;
|
|
3555
3933
|
sort?: CommentSort;
|
|
3556
|
-
maxPages?: number;
|
|
3557
3934
|
}
|
|
3558
3935
|
/**
|
|
3559
3936
|
* Посты: лента, публикация, реакции, репосты, комментарии.
|
|
@@ -3574,7 +3951,7 @@ declare class PostsResource extends BaseResource {
|
|
|
3574
3951
|
* const next = await itd.posts.list({ tab: FeedTab.Following, cursor: page.nextCursor ?? undefined });
|
|
3575
3952
|
* ```
|
|
3576
3953
|
*/
|
|
3577
|
-
list(params?: FeedParams): Promise<Page<Post>>;
|
|
3954
|
+
list(params?: FeedParams, options?: RequestOptions): Promise<Page<Post>>;
|
|
3578
3955
|
/**
|
|
3579
3956
|
* Перебирает ленту, сама подставляя курсоры.
|
|
3580
3957
|
*
|
|
@@ -3585,7 +3962,7 @@ declare class PostsResource extends BaseResource {
|
|
|
3585
3962
|
* }
|
|
3586
3963
|
* ```
|
|
3587
3964
|
*/
|
|
3588
|
-
iterate(params?: FeedParams): Paginator<Post>;
|
|
3965
|
+
iterate(params?: FeedParams, options?: PaginationOptions): Paginator<Post>;
|
|
3589
3966
|
/**
|
|
3590
3967
|
* Публикует пост.
|
|
3591
3968
|
*
|
|
@@ -3652,22 +4029,22 @@ declare class PostsResource extends BaseResource {
|
|
|
3652
4029
|
*
|
|
3653
4030
|
* Принимает и UUID, и имя пользователя.
|
|
3654
4031
|
*/
|
|
3655
|
-
byUser(user: UserRef, params?: UserPostsParams): Promise<Page<Post>>;
|
|
4032
|
+
byUser(user: UserRef, params?: UserPostsParams, options?: RequestOptions): Promise<Page<Post>>;
|
|
3656
4033
|
/** Перебирает стену пользователя. Что именно в неё входит — см. {@link byUser}. */
|
|
3657
|
-
iterateByUser(user: UserRef, params?: UserPostsParams): Paginator<Post>;
|
|
4034
|
+
iterateByUser(user: UserRef, params?: UserPostsParams, options?: PaginationOptions): Paginator<Post>;
|
|
3658
4035
|
/** Загружает страницу постов, которые пользователь отметил реакцией. */
|
|
3659
|
-
likedByUser(user: UserRef, params?: UserPostsParams): Promise<Page<Post>>;
|
|
4036
|
+
likedByUser(user: UserRef, params?: UserPostsParams, options?: RequestOptions): Promise<Page<Post>>;
|
|
3660
4037
|
/** Перебирает посты, которые пользователь отметил реакцией. */
|
|
3661
|
-
iterateLikedByUser(user: UserRef, params?: UserPostsParams): Paginator<Post>;
|
|
4038
|
+
iterateLikedByUser(user: UserRef, params?: UserPostsParams, options?: PaginationOptions): Paginator<Post>;
|
|
3662
4039
|
/**
|
|
3663
4040
|
* Загружает страницу комментариев к посту.
|
|
3664
4041
|
*
|
|
3665
4042
|
* У этого эндпоинта курсор и признак продолжения лежат рядом со списком, а не внутри
|
|
3666
4043
|
* объекта `pagination`, как у остальных, — разница скрыта внутри.
|
|
3667
4044
|
*/
|
|
3668
|
-
comments(postId: string, params?: CommentsParams): Promise<Page<Comment>>;
|
|
4045
|
+
comments(postId: string, params?: CommentsParams, options?: RequestOptions): Promise<Page<Comment>>;
|
|
3669
4046
|
/** Перебирает комментарии к посту. */
|
|
3670
|
-
iterateComments(postId: string, params?: CommentsParams): Paginator<Comment>;
|
|
4047
|
+
iterateComments(postId: string, params?: CommentsParams, options?: PaginationOptions): Paginator<Comment>;
|
|
3671
4048
|
/**
|
|
3672
4049
|
* Комментирует пост.
|
|
3673
4050
|
*
|
|
@@ -3812,8 +4189,8 @@ declare class SubscriptionResource extends BaseResource {
|
|
|
3812
4189
|
}
|
|
3813
4190
|
//#endregion
|
|
3814
4191
|
//#region src/resources/telemetry.d.ts
|
|
3815
|
-
/**
|
|
3816
|
-
interface TelemetryOptions
|
|
4192
|
+
/** Параметры событий телеметрии. */
|
|
4193
|
+
interface TelemetryOptions {
|
|
3817
4194
|
/** Переопределяет идентификатор сессии телеметрии (`sid`) для этого запроса. */
|
|
3818
4195
|
sid?: string;
|
|
3819
4196
|
}
|
|
@@ -3945,7 +4322,7 @@ interface TelemetryBatch {
|
|
|
3945
4322
|
*
|
|
3946
4323
|
* Опции позволяют заменить, например, отменённый `signal` при повторной попытке.
|
|
3947
4324
|
*/
|
|
3948
|
-
flush(options?:
|
|
4325
|
+
flush(options?: RequestOptions): Promise<void>;
|
|
3949
4326
|
/** Отправляет накопленные события и закрывает накопитель. */
|
|
3950
4327
|
close(): Promise<void>;
|
|
3951
4328
|
}
|
|
@@ -3957,24 +4334,25 @@ interface TelemetryBatch {
|
|
|
3957
4334
|
*/
|
|
3958
4335
|
declare class TelemetryResource extends BaseResource {
|
|
3959
4336
|
#private;
|
|
4337
|
+
constructor(http: HttpClient);
|
|
3960
4338
|
/** Идентификатор сессии телеметрии, общий для всех событий этого ресурса. */
|
|
3961
4339
|
get sessionId(): string;
|
|
3962
4340
|
/** Отправляет события просмотра постов (`POST /api/v1/i`). */
|
|
3963
|
-
dwell(entries: readonly DwellEntry[],
|
|
4341
|
+
dwell(entries: readonly DwellEntry[], telemetryOptions?: TelemetryOptions, requestOptions?: RequestOptions): Promise<unknown>;
|
|
3964
4342
|
/** Отправляет события взаимодействия с контентом (`POST /api/v1/x`). */
|
|
3965
|
-
interaction(entries: readonly InteractionEntry[],
|
|
4343
|
+
interaction(entries: readonly InteractionEntry[], telemetryOptions?: TelemetryOptions, requestOptions?: RequestOptions): Promise<unknown>;
|
|
3966
4344
|
/** Начинает измерять время просмотра и отправляет результат после `finish()`. */
|
|
3967
|
-
startView(input: ViewTrackerInput, options?: ViewTrackerOptions): ViewTracker;
|
|
4345
|
+
startView(input: ViewTrackerInput, options?: ViewTrackerOptions, requestOptions?: RequestOptions): ViewTracker;
|
|
3968
4346
|
/** Отправляет событие открытия фотографии. */
|
|
3969
|
-
photoOpen(input: PhotoOpenInput,
|
|
4347
|
+
photoOpen(input: PhotoOpenInput, telemetryOptions?: TelemetryOptions, requestOptions?: RequestOptions): Promise<unknown>;
|
|
3970
4348
|
/** Отправляет событие прогресса просмотра видео. */
|
|
3971
|
-
videoProgress(input: VideoProgressInput,
|
|
4349
|
+
videoProgress(input: VideoProgressInput, telemetryOptions?: TelemetryOptions, requestOptions?: RequestOptions): Promise<unknown>;
|
|
3972
4350
|
/**
|
|
3973
4351
|
* Создаёт накопитель с явными `flush()` и `close()`.
|
|
3974
4352
|
*
|
|
3975
4353
|
* Создание и добавление записей не выполняют сетевых запросов.
|
|
3976
4354
|
*/
|
|
3977
|
-
batch(options?: TelemetryBatchOptions): TelemetryBatch;
|
|
4355
|
+
batch(options?: TelemetryBatchOptions, requestOptions?: RequestOptions): TelemetryBatch;
|
|
3978
4356
|
/** Закрывает все созданные накопители, отправляя оставшиеся записи. */
|
|
3979
4357
|
close(): Promise<void>;
|
|
3980
4358
|
}
|
|
@@ -3986,12 +4364,11 @@ declare class TelemetryResource extends BaseResource {
|
|
|
3986
4364
|
* ⚠️ Списки подписчиков, подписок и заблокированных на сервере **не листаются**:
|
|
3987
4365
|
* `page` он игнорирует, а `limit` зажимает на 20. Подробности — в {@link UsersResource.followers}.
|
|
3988
4366
|
*/
|
|
3989
|
-
interface UserListParams
|
|
4367
|
+
interface UserListParams {
|
|
3990
4368
|
/** Сколько записей вернуть. Значения больше 20 сервер молча уменьшает до 20. */
|
|
3991
4369
|
limit?: number;
|
|
3992
4370
|
/** Номер страницы. Сервер его игнорирует — оставлен на случай, если пагинацию починят. */
|
|
3993
4371
|
page?: number;
|
|
3994
|
-
maxPages?: number;
|
|
3995
4372
|
}
|
|
3996
4373
|
/** Изменяемые поля своего профиля. */
|
|
3997
4374
|
interface UpdateProfileInput {
|
|
@@ -4013,7 +4390,7 @@ type UpdatePrivacyInput = Partial<PrivacySettings>;
|
|
|
4013
4390
|
declare class UsersResource extends BaseResource {
|
|
4014
4391
|
#private;
|
|
4015
4392
|
constructor(http: HttpClient, deps: {
|
|
4016
|
-
uploadFile: (file: FileInput,
|
|
4393
|
+
uploadFile: (file: FileInput, uploadOptions?: UploadOptions, requestOptions?: RequestOptions) => Promise<UploadedFile>;
|
|
4017
4394
|
});
|
|
4018
4395
|
/** Загружает свой профиль — с подпиской и признаком подтверждённого телефона. */
|
|
4019
4396
|
me(options?: RequestOptions): Promise<MyProfile>;
|
|
@@ -4030,7 +4407,7 @@ declare class UsersResource extends BaseResource {
|
|
|
4030
4407
|
* await itd.users.setBanner(file, { filename: 'banner.webp' });
|
|
4031
4408
|
* ```
|
|
4032
4409
|
*/
|
|
4033
|
-
setBanner(file: FileInput,
|
|
4410
|
+
setBanner(file: FileInput, uploadOptions?: UploadOptions, requestOptions?: RequestOptions): Promise<MyProfile>;
|
|
4034
4411
|
/** Удаляет баннер профиля, устанавливая `bannerId` в `null`. */
|
|
4035
4412
|
removeBanner(options?: RequestOptions): Promise<MyProfile>;
|
|
4036
4413
|
/** Деактивирует аккаунт. Вернуть его можно через {@link restore}. */
|
|
@@ -4060,7 +4437,7 @@ declare class UsersResource extends BaseResource {
|
|
|
4060
4437
|
/** Ищет пользователей по строке запроса. */
|
|
4061
4438
|
search(query: string, params?: {
|
|
4062
4439
|
limit?: number;
|
|
4063
|
-
}
|
|
4440
|
+
}, options?: RequestOptions): Promise<UserSummary[]>;
|
|
4064
4441
|
/** Загружает рекомендации, на кого подписаться. */
|
|
4065
4442
|
whoToFollow(options?: RequestOptions): Promise<UserSummary[]>;
|
|
4066
4443
|
/** Загружает рейтинг кланов. */
|
|
@@ -4084,18 +4461,18 @@ declare class UsersResource extends BaseResource {
|
|
|
4084
4461
|
* Числу `total` доверять тоже не стоит: оно расходится с `followersCount` из профиля —
|
|
4085
4462
|
* на проверенных аккаунтах занижено примерно на 1–4%.
|
|
4086
4463
|
*/
|
|
4087
|
-
followers(user: UserRef, params?: UserListParams): Promise<Page<UserSummary>>;
|
|
4464
|
+
followers(user: UserRef, params?: UserListParams, options?: RequestOptions): Promise<Page<UserSummary>>;
|
|
4088
4465
|
/**
|
|
4089
4466
|
* Перебирает подписчиков.
|
|
4090
4467
|
*
|
|
4091
4468
|
* ⚠️ Перебор закончится после первых 20 записей: сервер список не листает —
|
|
4092
4469
|
* см. {@link followers}. Метод оставлен на случай, если пагинацию починят.
|
|
4093
4470
|
*/
|
|
4094
|
-
iterateFollowers(user: UserRef, params?: UserListParams): Paginator<UserSummary>;
|
|
4471
|
+
iterateFollowers(user: UserRef, params?: UserListParams, options?: PaginationOptions): Paginator<UserSummary>;
|
|
4095
4472
|
/** Загружает подписки пользователя. Ограничения те же, что у {@link followers}. */
|
|
4096
|
-
following(user: UserRef, params?: UserListParams): Promise<Page<UserSummary>>;
|
|
4473
|
+
following(user: UserRef, params?: UserListParams, options?: RequestOptions): Promise<Page<UserSummary>>;
|
|
4097
4474
|
/** Перебирает подписки. Закончится после первых 20 записей — см. {@link followers}. */
|
|
4098
|
-
iterateFollowing(user: UserRef, params?: UserListParams): Paginator<UserSummary>;
|
|
4475
|
+
iterateFollowing(user: UserRef, params?: UserListParams, options?: PaginationOptions): Paginator<UserSummary>;
|
|
4099
4476
|
/**
|
|
4100
4477
|
* Проверяет, подписаны ли вы, сразу для нескольких пользователей.
|
|
4101
4478
|
*
|
|
@@ -4113,9 +4490,9 @@ declare class UsersResource extends BaseResource {
|
|
|
4113
4490
|
/** Снимает блокировку. */
|
|
4114
4491
|
unblock(user: UserRef, options?: RequestOptions): Promise<void>;
|
|
4115
4492
|
/** Загружает заблокированных пользователей. Ограничения те же, что у {@link followers}. */
|
|
4116
|
-
blocked(params?: UserListParams): Promise<Page<UserSummary>>;
|
|
4493
|
+
blocked(params?: UserListParams, options?: RequestOptions): Promise<Page<UserSummary>>;
|
|
4117
4494
|
/** Перебирает заблокированных. Закончится после первых 20 записей — см. {@link followers}. */
|
|
4118
|
-
iterateBlocked(params?: UserListParams): Paginator<UserSummary>;
|
|
4495
|
+
iterateBlocked(params?: UserListParams, options?: PaginationOptions): Paginator<UserSummary>;
|
|
4119
4496
|
/** Загружает настройки приватности. */
|
|
4120
4497
|
getPrivacy(options?: RequestOptions): Promise<PrivacySettings>;
|
|
4121
4498
|
/** Обновляет настройки приватности. Передавайте только изменяемые поля. */
|
|
@@ -4151,19 +4528,6 @@ declare global {
|
|
|
4151
4528
|
readonly asyncDispose: unique symbol;
|
|
4152
4529
|
}
|
|
4153
4530
|
}
|
|
4154
|
-
/**
|
|
4155
|
-
* Скрытые параметры конструктора — не часть публичного API.
|
|
4156
|
-
*
|
|
4157
|
-
* @internal
|
|
4158
|
-
*/
|
|
4159
|
-
interface ItdClientInternals {
|
|
4160
|
-
/**
|
|
4161
|
-
* Готовая очередь запросов — так {@link ItdAccounts} с `rateLimitScope: 'shared'` даёт
|
|
4162
|
-
* нескольким клиентам одну на всех. Свою клиент в этом случае не заводит и, что важнее,
|
|
4163
|
-
* не гасит при `close()`: чужие ожидающие запросы это отменило бы.
|
|
4164
|
-
*/
|
|
4165
|
-
queues?: RequestQueuePool | undefined;
|
|
4166
|
-
}
|
|
4167
4531
|
/**
|
|
4168
4532
|
* Клиент API итд.com.
|
|
4169
4533
|
*
|
|
@@ -4198,32 +4562,32 @@ interface ItdClientInternals {
|
|
|
4198
4562
|
declare class ItdClient {
|
|
4199
4563
|
#private;
|
|
4200
4564
|
/** Авторизация, сессии и пароли. */
|
|
4201
|
-
|
|
4565
|
+
get auth(): AuthResource;
|
|
4202
4566
|
/** Профили, подписки, блокировки, приватность. */
|
|
4203
|
-
|
|
4567
|
+
get users(): UsersResource;
|
|
4204
4568
|
/** Лента, публикация, реакции, репосты, комментарии к постам. */
|
|
4205
|
-
|
|
4569
|
+
get posts(): PostsResource;
|
|
4206
4570
|
/** Ответы на комментарии и действия над ними. */
|
|
4207
|
-
|
|
4571
|
+
get comments(): CommentsResource;
|
|
4208
4572
|
/** Загрузка файлов и медиа. */
|
|
4209
|
-
|
|
4573
|
+
get files(): FilesResource;
|
|
4210
4574
|
/** Уведомления: список, счётчик, отметки о прочтении, настройки. */
|
|
4211
|
-
|
|
4575
|
+
get notifications(): NotificationsResource;
|
|
4212
4576
|
/** Хэштеги и посты по ним. */
|
|
4213
|
-
|
|
4577
|
+
get hashtags(): HashtagsResource;
|
|
4214
4578
|
/** Глобальный поиск по пользователям и хэштегам. */
|
|
4215
|
-
|
|
4579
|
+
get search(): SearchResource;
|
|
4216
4580
|
/** Жалобы на контент и пользователей. */
|
|
4217
|
-
|
|
4581
|
+
get reports(): ReportsResource;
|
|
4218
4582
|
/** Верификация профиля. */
|
|
4219
|
-
|
|
4583
|
+
get verification(): VerificationResource;
|
|
4220
4584
|
/** Подписка и способы оплаты. */
|
|
4221
|
-
|
|
4585
|
+
get subscription(): SubscriptionResource;
|
|
4222
4586
|
/** Сведения о платформе: версии приложений, изменения, анонсы, баннер события. */
|
|
4223
|
-
|
|
4587
|
+
get platform(): PlatformResource;
|
|
4224
4588
|
/** Телеметрия просмотров. */
|
|
4225
|
-
|
|
4226
|
-
constructor(options?: ItdClientOptions
|
|
4589
|
+
get telemetry(): TelemetryResource;
|
|
4590
|
+
constructor(options?: ItdClientOptions);
|
|
4227
4591
|
/** Базовый URL, к которому обращается клиент. */
|
|
4228
4592
|
get baseUrl(): string;
|
|
4229
4593
|
/**
|
|
@@ -4236,26 +4600,33 @@ declare class ItdClient {
|
|
|
4236
4600
|
* ```ts
|
|
4237
4601
|
* const raw = await itd.request({ method: 'GET', path: '/api/posts', raw: true });
|
|
4238
4602
|
* ```
|
|
4603
|
+
*
|
|
4604
|
+
* @throws {ItdStateError} если клиент уже освобождён через {@link dispose}
|
|
4239
4605
|
*/
|
|
4240
4606
|
request<T = unknown>(options: RawRequestOptions): Promise<T>;
|
|
4241
4607
|
/**
|
|
4242
4608
|
* Подключает плагин.
|
|
4243
4609
|
*
|
|
4244
|
-
* Плагин
|
|
4245
|
-
*
|
|
4246
|
-
* момент, но обычно это делают сразу после создания клиента.
|
|
4610
|
+
* Плагин может независимо регистрировать transformer логической операции и interceptor
|
|
4611
|
+
* транспортной попытки. Оба контракта охватывают все методы клиента. Подключать плагин
|
|
4612
|
+
* можно в любой момент, но обычно это делают сразу после создания клиента.
|
|
4247
4613
|
*
|
|
4248
4614
|
* @throws {ItdConfigError} если плагин задан неверно или уже подключён
|
|
4615
|
+
* @throws {ItdStateError} если клиент уже освобождён через {@link dispose}
|
|
4249
4616
|
*
|
|
4250
4617
|
* @example
|
|
4251
4618
|
* ```ts
|
|
4252
4619
|
* import { crypt } from '@itd-api/crypto';
|
|
4253
4620
|
*
|
|
4254
4621
|
* itd.use(crypt());
|
|
4255
|
-
* await itd.posts.create({
|
|
4622
|
+
* await itd.posts.create({
|
|
4623
|
+
* content: 'секрет',
|
|
4624
|
+
* }, {
|
|
4625
|
+
* extensions: { crypto: { encrypt: 'invisible' } },
|
|
4626
|
+
* });
|
|
4256
4627
|
* ```
|
|
4257
4628
|
*/
|
|
4258
|
-
use(plugin:
|
|
4629
|
+
use(plugin: ClientPlugin): this;
|
|
4259
4630
|
/** Имена подключённых плагинов в фактическом порядке выполнения обёрток. */
|
|
4260
4631
|
pluginNames(): string[];
|
|
4261
4632
|
/** Подключён ли плагин с таким именем. */
|
|
@@ -4281,6 +4652,7 @@ declare class ItdClient {
|
|
|
4281
4652
|
* поддоменам. Стороннему хосту токен нужно разрешить явно: `auth: true`.
|
|
4282
4653
|
*
|
|
4283
4654
|
* @throws {ItdConfigError} если определение неверно или имя уже занято
|
|
4655
|
+
* @throws {ItdStateError} если клиент уже освобождён через {@link dispose}
|
|
4284
4656
|
*
|
|
4285
4657
|
* @example Сервис платформы на поддомене — токен уходит сам
|
|
4286
4658
|
* ```ts
|
|
@@ -4335,6 +4707,8 @@ declare class ItdClient {
|
|
|
4335
4707
|
*
|
|
4336
4708
|
* await stream.connect();
|
|
4337
4709
|
* ```
|
|
4710
|
+
*
|
|
4711
|
+
* @throws {ItdStateError} если клиент уже освобождён через {@link dispose}
|
|
4338
4712
|
*/
|
|
4339
4713
|
realtime(options?: RealtimeOptions): ItdRealtime;
|
|
4340
4714
|
/**
|
|
@@ -4347,6 +4721,17 @@ declare class ItdClient {
|
|
|
4347
4721
|
* Общая очередь, полученная от {@link ItdAccounts}, не останавливается: её гасит сам
|
|
4348
4722
|
* контейнер, когда закрывает все аккаунты разом.
|
|
4349
4723
|
*
|
|
4724
|
+
* Терминальное освобождение — это {@link dispose}.
|
|
4725
|
+
*/
|
|
4726
|
+
close(): Promise<void>;
|
|
4727
|
+
/**
|
|
4728
|
+
* Окончательно освобождает клиент: выполняет {@link close} и отключает все плагины.
|
|
4729
|
+
*
|
|
4730
|
+
* Терминальное состояние устанавливается сразу при первом вызове. После этого новые
|
|
4731
|
+
* запросы, подключение плагинов, регистрация сервисов и создание или повторный запуск
|
|
4732
|
+
* realtime-потоков завершаются с {@link ItdStateError}. Повторные вызовы возвращают
|
|
4733
|
+
* тот же результат очистки.
|
|
4734
|
+
*
|
|
4350
4735
|
* @example
|
|
4351
4736
|
* ```ts
|
|
4352
4737
|
* await using itd = new ItdClient({ auth: token });
|
|
@@ -4354,14 +4739,6 @@ declare class ItdClient {
|
|
|
4354
4739
|
* // dispose() вызовется сам на выходе из блока
|
|
4355
4740
|
* ```
|
|
4356
4741
|
*/
|
|
4357
|
-
close(): Promise<void>;
|
|
4358
|
-
/**
|
|
4359
|
-
* Окончательно освобождает клиент: выполняет {@link close} и отключает все плагины.
|
|
4360
|
-
*
|
|
4361
|
-
* В отличие от `close()`, после `dispose()` плагины не восстанавливаются автоматически.
|
|
4362
|
-
* Сам клиент остаётся пригоден для обычных запросов; при необходимости плагины можно
|
|
4363
|
-
* подключить заново через {@link use}.
|
|
4364
|
-
*/
|
|
4365
4742
|
dispose(): Promise<void>;
|
|
4366
4743
|
/** Позволяет использовать клиент с `await using`. */
|
|
4367
4744
|
[Symbol.asyncDispose](): Promise<void>;
|
|
@@ -4386,7 +4763,11 @@ declare class ItdClient {
|
|
|
4386
4763
|
* ```
|
|
4387
4764
|
*/
|
|
4388
4765
|
getUserId(): Promise<UserId | undefined>;
|
|
4389
|
-
/**
|
|
4766
|
+
/**
|
|
4767
|
+
* Восстанавливает сохранённую сессию, включая cookie.
|
|
4768
|
+
*
|
|
4769
|
+
* @throws {ItdStateError} если клиент уже освобождён через {@link dispose}
|
|
4770
|
+
*/
|
|
4390
4771
|
setSession(session: ItdSession): Promise<void>;
|
|
4391
4772
|
}
|
|
4392
4773
|
/**
|
|
@@ -4418,7 +4799,7 @@ interface ItdAccountsOptions extends Omit<ItdClientOptions, 'auth' | 'storage' |
|
|
|
4418
4799
|
/** Общее хранилище сессий всех аккаунтов. По умолчанию {@link MemoryMultiTokenStorage}. */
|
|
4419
4800
|
storage?: MultiTokenStorage | undefined;
|
|
4420
4801
|
/** Плагины, подключаемые каждому аккаунту, в том числе добавленному позже. */
|
|
4421
|
-
plugins?: readonly
|
|
4802
|
+
plugins?: readonly ClientPlugin[] | undefined;
|
|
4422
4803
|
/**
|
|
4423
4804
|
* Как делить очередь запросов. По умолчанию `'account'` — своя у каждого.
|
|
4424
4805
|
*
|
|
@@ -4584,7 +4965,7 @@ declare class ItdAccounts {
|
|
|
4584
4965
|
* accounts.use(crypt());
|
|
4585
4966
|
* ```
|
|
4586
4967
|
*/
|
|
4587
|
-
use(plugin:
|
|
4968
|
+
use(plugin: ClientPlugin): this;
|
|
4588
4969
|
/** Имена общих плагинов в фактическом порядке выполнения обёрток. */
|
|
4589
4970
|
pluginNames(): string[];
|
|
4590
4971
|
/** Подключён ли общий плагин с таким именем. */
|
|
@@ -4637,7 +5018,9 @@ declare class ItdAccounts {
|
|
|
4637
5018
|
* Окончательно освобождает контейнер и отключает общие плагины у всех аккаунтов.
|
|
4638
5019
|
*
|
|
4639
5020
|
* Для временной остановки потоков и очереди без отключения плагинов используйте
|
|
4640
|
-
* {@link close}.
|
|
5021
|
+
* {@link close}. Терминальное состояние устанавливается сразу: контейнер отзывает
|
|
5022
|
+
* storage-срезы и подписки, а новые аккаунты, запросы его клиентов и плагины после
|
|
5023
|
+
* первого `dispose()` больше не допускаются.
|
|
4641
5024
|
*/
|
|
4642
5025
|
dispose(): Promise<void>;
|
|
4643
5026
|
/** Позволяет использовать контейнер с `await using`. */
|
|
@@ -4683,6 +5066,8 @@ declare const ItdErrorKind: Readonly<{
|
|
|
4683
5066
|
readonly Timeout: "timeout";
|
|
4684
5067
|
/** Запрос отменён через `AbortSignal`. */
|
|
4685
5068
|
readonly Abort: "abort";
|
|
5069
|
+
/** Операция невозможна в текущем состоянии объекта. */
|
|
5070
|
+
readonly State: "state";
|
|
4686
5071
|
/** Не удалось получить или подготовить содержимое вложения. */
|
|
4687
5072
|
readonly File: "file";
|
|
4688
5073
|
/** Некорректная конфигурация или аргументы — обнаружено до обращения к сети. */
|
|
@@ -4952,6 +5337,17 @@ declare class ItdAbortError extends ItdError {
|
|
|
4952
5337
|
cause?: unknown;
|
|
4953
5338
|
});
|
|
4954
5339
|
}
|
|
5340
|
+
/**
|
|
5341
|
+
* Операция невозможна в текущем состоянии объекта.
|
|
5342
|
+
*
|
|
5343
|
+
* Например, клиент уже окончательно освобождён через `dispose()` и не может выполнять
|
|
5344
|
+
* новые запросы или создавать realtime-потоки.
|
|
5345
|
+
*/
|
|
5346
|
+
declare class ItdStateError extends ItdError {
|
|
5347
|
+
constructor(message: string, options?: {
|
|
5348
|
+
cause?: unknown;
|
|
5349
|
+
});
|
|
5350
|
+
}
|
|
4955
5351
|
/**
|
|
4956
5352
|
* Некорректная конфигурация или аргументы — обнаружено до обращения к сети.
|
|
4957
5353
|
*
|
|
@@ -4959,7 +5355,9 @@ declare class ItdAbortError extends ItdError {
|
|
|
4959
5355
|
* с одним вариантом ответа.
|
|
4960
5356
|
*/
|
|
4961
5357
|
declare class ItdConfigError extends ItdError {
|
|
4962
|
-
constructor(message: string
|
|
5358
|
+
constructor(message: string, options?: {
|
|
5359
|
+
cause?: unknown;
|
|
5360
|
+
});
|
|
4963
5361
|
}
|
|
4964
5362
|
/** Любая ошибка, порождённая этой библиотекой. */
|
|
4965
5363
|
declare function isItdError(value: unknown): value is ItdError;
|
|
@@ -4967,6 +5365,8 @@ declare function isItdError(value: unknown): value is ItdError;
|
|
|
4967
5365
|
declare function isItdApiError(value: unknown): value is ItdApiError;
|
|
4968
5366
|
/** Ошибка получения или чтения вложения. */
|
|
4969
5367
|
declare function isItdFileError(value: unknown): value is ItdFileError;
|
|
5368
|
+
/** Операция невозможна в текущем состоянии объекта. */
|
|
5369
|
+
declare function isItdStateError(value: unknown): value is ItdStateError;
|
|
4970
5370
|
/** Ошибка валидации: `VALIDATION_ERROR` либо статус `400`/`422`. */
|
|
4971
5371
|
declare function isItdValidationError(value: unknown): value is ItdValidationError;
|
|
4972
5372
|
/** Ошибка авторизации: истёкший или отозванный токен. */
|
|
@@ -5116,20 +5516,9 @@ declare function isKnownNotificationType(type: string): boolean;
|
|
|
5116
5516
|
*/
|
|
5117
5517
|
declare function resolveNotificationUrl(notification: Notification): string;
|
|
5118
5518
|
//#endregion
|
|
5119
|
-
//#region src/realtime/poll.d.ts
|
|
5120
|
-
/** Настройки опроса. */
|
|
5121
|
-
interface PollTransportOptions {
|
|
5122
|
-
/** Часы опроса. Обычно подменяются только в тестах. */
|
|
5123
|
-
clock?: ItdClock;
|
|
5124
|
-
/** Как часто опрашивать сервер, мс. По умолчанию 15 000. */
|
|
5125
|
-
interval?: number;
|
|
5126
|
-
/** Сколько уведомлений запрашивать за раз. По умолчанию 20. */
|
|
5127
|
-
limit?: number;
|
|
5128
|
-
}
|
|
5129
|
-
//#endregion
|
|
5130
5519
|
//#region src/realtime/router.d.ts
|
|
5131
5520
|
/** Выбирает маршрут обновления. `undefined` и `null` означают отсутствие маршрута. */
|
|
5132
|
-
type RealtimeRouteSelector<K extends PropertyKey, C extends
|
|
5521
|
+
type RealtimeRouteSelector<K extends PropertyKey, C extends RealtimeContextBase = RealtimeContext> = (context: C) => K | null | undefined | Promise<K | null | undefined>;
|
|
5133
5522
|
/**
|
|
5134
5523
|
* Направляет обновления потока в именованные цепочки промежуточных обработчиков.
|
|
5135
5524
|
*
|
|
@@ -5144,20 +5533,93 @@ type RealtimeRouteSelector<K extends PropertyKey, C extends RealtimeContext = Re
|
|
|
5144
5533
|
* }
|
|
5145
5534
|
* await next();
|
|
5146
5535
|
* });
|
|
5147
|
-
* stream.use(router
|
|
5536
|
+
* stream.use(router);
|
|
5148
5537
|
* ```
|
|
5149
5538
|
*/
|
|
5150
|
-
declare class RealtimeRouter<K extends PropertyKey = PropertyKey, C extends
|
|
5539
|
+
declare class RealtimeRouter<K extends PropertyKey = PropertyKey, C extends RealtimeContextBase = RealtimeContext> implements RealtimeMiddlewareObj<C> {
|
|
5151
5540
|
#private;
|
|
5152
5541
|
constructor(selector: RealtimeRouteSelector<K, C>);
|
|
5153
5542
|
/** Добавляет промежуточные обработчики к маршруту и возвращает функцию их удаления. */
|
|
5154
5543
|
route(key: K, ...middleware: readonly RealtimeMiddleware<C>[]): Unsubscribe;
|
|
5155
5544
|
/** Добавляет промежуточные обработчики для обновлений без зарегистрированного маршрута. */
|
|
5156
5545
|
otherwise(...middleware: readonly RealtimeMiddleware<C>[]): Unsubscribe;
|
|
5157
|
-
/** Возвращает
|
|
5546
|
+
/** Возвращает снимок маршрутов для `stream.use(router)` или ручной композиции. */
|
|
5158
5547
|
middleware(): RealtimeMiddleware<C>;
|
|
5159
5548
|
}
|
|
5160
5549
|
//#endregion
|
|
5550
|
+
//#region src/realtime/composer.d.ts
|
|
5551
|
+
/** Функция или объектный middleware, который можно добавить в {@link RealtimeComposer}. */
|
|
5552
|
+
type RealtimeMiddlewareLike<C extends RealtimeContextBase = RealtimeContext> = RealtimeMiddleware<C> | RealtimeMiddlewareObj<C>;
|
|
5553
|
+
/** Один middleware или последовательность middleware для ветки composer. */
|
|
5554
|
+
type RealtimeMiddlewareGroup<C extends RealtimeContextBase = RealtimeContext> = RealtimeMiddlewareLike<C> | readonly RealtimeMiddlewareLike<C>[];
|
|
5555
|
+
/** Синхронное или асинхронное условие ветвления composer. */
|
|
5556
|
+
type RealtimeFilter<C extends RealtimeContextBase = RealtimeContext> = (context: C) => boolean | Promise<boolean>;
|
|
5557
|
+
/** Ошибка локальной realtime-ветки вместе с контекстом обрабатываемого обновления. */
|
|
5558
|
+
interface RealtimeErrorContext<C extends RealtimeContextBase = RealtimeContext> {
|
|
5559
|
+
/** Исходное исключение middleware. */
|
|
5560
|
+
readonly error: unknown;
|
|
5561
|
+
/** Контекст обновления, на котором завершилась ветка. */
|
|
5562
|
+
readonly context: C;
|
|
5563
|
+
}
|
|
5564
|
+
/** Обработчик локальной границы ошибок composer. */
|
|
5565
|
+
type RealtimeErrorBoundary<C extends RealtimeContextBase = RealtimeContext> = (failure: RealtimeErrorContext<C>, next: RealtimeNext) => unknown | Promise<unknown>;
|
|
5566
|
+
/** Именованные ветки для {@link RealtimeComposer.route}. */
|
|
5567
|
+
type RealtimeRouteTable<K extends string | symbol, C extends RealtimeContextBase = RealtimeContext> = Partial<Record<K, RealtimeMiddlewareGroup<C>>>;
|
|
5568
|
+
/**
|
|
5569
|
+
* Собирает переиспользуемый feature-модуль из realtime middleware.
|
|
5570
|
+
*
|
|
5571
|
+
* Composer не открывает соединение и не планирует конкурентность: готовый объект подключается
|
|
5572
|
+
* через `stream.use(composer)`, а выполнение остаётся обязанностью существующего dispatcher.
|
|
5573
|
+
* Для каждого принятого update используется снимок всей вложенной структуры composer.
|
|
5574
|
+
*
|
|
5575
|
+
* @example
|
|
5576
|
+
* ```ts
|
|
5577
|
+
* const feature = new RealtimeComposer<AppRealtimeContext>();
|
|
5578
|
+
* const safe = feature.errorBoundary(reportFeatureError);
|
|
5579
|
+
* safe.filter(isPostUpdate).use(handlePost);
|
|
5580
|
+
* stream.use(feature);
|
|
5581
|
+
* ```
|
|
5582
|
+
*/
|
|
5583
|
+
declare class RealtimeComposer<C extends RealtimeContextBase = RealtimeContext> implements RealtimeMiddlewareObj<C> {
|
|
5584
|
+
#private;
|
|
5585
|
+
constructor(...middleware: readonly RealtimeMiddlewareLike<C>[]);
|
|
5586
|
+
/** Добавляет middleware в конец текущей onion-цепочки. */
|
|
5587
|
+
use(...middleware: readonly RealtimeMiddlewareLike<C>[]): this;
|
|
5588
|
+
/** Создаёт дочернюю ветку, выполняемую только когда type guard принимает контекст. */
|
|
5589
|
+
filter<N extends C>(predicate: RealtimeTypeGuard<N, C>, ...middleware: readonly RealtimeMiddlewareLike<N>[]): RealtimeComposer<N>;
|
|
5590
|
+
/** Создаёт дочернюю ветку по синхронному или асинхронному условию. */
|
|
5591
|
+
filter(predicate: RealtimeFilter<C>, ...middleware: readonly RealtimeMiddlewareLike<C>[]): RealtimeComposer<C>;
|
|
5592
|
+
/**
|
|
5593
|
+
* Направляет контекст в одну именованную ветку.
|
|
5594
|
+
*
|
|
5595
|
+
* Неизвестный ключ без fallback пропускает update следующему внешнему middleware. Для
|
|
5596
|
+
* динамической регистрации и числовых ключей используйте {@link RealtimeRouter} напрямую.
|
|
5597
|
+
*/
|
|
5598
|
+
route<K extends string | symbol>(selector: RealtimeRouteSelector<K, C>, routes: RealtimeRouteTable<K, C>, fallback?: RealtimeMiddlewareGroup<C>): this;
|
|
5599
|
+
/**
|
|
5600
|
+
* Создаёт дочернюю ветку с локальной границей ошибок.
|
|
5601
|
+
*
|
|
5602
|
+
* Граница защищает только переданные и затем добавленные в возвращённый composer middleware.
|
|
5603
|
+
* Ошибки внешней цепочки намеренно не перехватываются. Обработчик может вызвать `next()`,
|
|
5604
|
+
* чтобы после ошибки продолжить внешнюю цепочку, либо повторно выбросить исключение. Внешняя
|
|
5605
|
+
* цепочка начинается после полного завершения защищённой ветки, а не входит в её onion-вызов.
|
|
5606
|
+
*/
|
|
5607
|
+
errorBoundary(handler: RealtimeErrorBoundary<C>, ...middleware: readonly RealtimeMiddlewareLike<C>[]): RealtimeComposer<C>;
|
|
5608
|
+
/** Возвращает snapshot-aware middleware для `stream.use()` или вложенного composer. */
|
|
5609
|
+
middleware(): RealtimeMiddleware<C>;
|
|
5610
|
+
}
|
|
5611
|
+
//#endregion
|
|
5612
|
+
//#region src/realtime/poll.d.ts
|
|
5613
|
+
/** Настройки опроса. */
|
|
5614
|
+
interface PollTransportOptions {
|
|
5615
|
+
/** Часы опроса. Обычно подменяются только в тестах. */
|
|
5616
|
+
clock?: ItdClock;
|
|
5617
|
+
/** Как часто опрашивать сервер, мс. По умолчанию 15 000. */
|
|
5618
|
+
interval?: number;
|
|
5619
|
+
/** Сколько уведомлений запрашивать за раз. По умолчанию 20. */
|
|
5620
|
+
limit?: number;
|
|
5621
|
+
}
|
|
5622
|
+
//#endregion
|
|
5161
5623
|
//#region src/realtime/sse.d.ts
|
|
5162
5624
|
/** Путь потока уведомлений. */
|
|
5163
5625
|
declare const STREAM_PATH = "/api/notifications/stream";
|
|
@@ -5183,6 +5645,50 @@ interface SseTransportOptions {
|
|
|
5183
5645
|
handshakeTimeout?: number;
|
|
5184
5646
|
}
|
|
5185
5647
|
//#endregion
|
|
5648
|
+
//#region src/realtime/websocket.d.ts
|
|
5649
|
+
/** Стандартный путь WebSocket-подключения. */
|
|
5650
|
+
declare const WEBSOCKET_PATH = "/api/ws";
|
|
5651
|
+
/** Дополнительные параметры конструктора, поддерживаемые Node-реализациями вроде `ws`. */
|
|
5652
|
+
interface WebSocketImplementationOptions {
|
|
5653
|
+
headers?: Record<string, string> | undefined;
|
|
5654
|
+
handshakeTimeout?: number | undefined;
|
|
5655
|
+
}
|
|
5656
|
+
/** Конструктор WebSocket, который можно передать вместо глобальной реализации. */
|
|
5657
|
+
interface WebSocketLike {
|
|
5658
|
+
new (url: string | URL, protocols?: string | string[], options?: WebSocketImplementationOptions): unknown;
|
|
5659
|
+
}
|
|
5660
|
+
/** Определяет, был ли отказ до открытия сокета вызван недействительным токеном. */
|
|
5661
|
+
type WebSocketOpenFailureClassifier = (error: unknown, signal: AbortSignal) => boolean | Promise<boolean>;
|
|
5662
|
+
/** Настройки WebSocket-транспорта. */
|
|
5663
|
+
interface WebSocketTransportOptions {
|
|
5664
|
+
/** Путь апгрейда. По умолчанию `/api/ws`. */
|
|
5665
|
+
path?: string | undefined;
|
|
5666
|
+
/** Реализация WebSocket для сред без глобальной либо для передачи заголовков апгрейда. */
|
|
5667
|
+
webSocketImpl?: WebSocketLike | undefined;
|
|
5668
|
+
/** Способ передачи токена. `auto` выбирает заголовок при инъекции и query иначе. */
|
|
5669
|
+
auth?: 'query' | 'header' | 'auto' | undefined;
|
|
5670
|
+
/** Молчание открытого соединения до переподключения, мс. По умолчанию 90 000. */
|
|
5671
|
+
idleTimeout?: number | undefined;
|
|
5672
|
+
/** Период текстового `ping`, мс. По умолчанию 30 000. */
|
|
5673
|
+
keepAlive?: number | undefined;
|
|
5674
|
+
/** Максимальное время установки соединения, мс. По умолчанию 20 000. */
|
|
5675
|
+
handshakeTimeout?: number | undefined;
|
|
5676
|
+
/**
|
|
5677
|
+
* Проверяет отказ до `open`, когда среда скрыла HTTP-статус WebSocket-upgrade.
|
|
5678
|
+
* `true` преобразует отказ в {@link UnauthorizedStreamError}.
|
|
5679
|
+
*/
|
|
5680
|
+
classifyOpenFailure?: WebSocketOpenFailureClassifier | undefined;
|
|
5681
|
+
/** Часы транспорта. Обычно подменяются только в тестах. */
|
|
5682
|
+
clock?: ItdClock | undefined;
|
|
5683
|
+
}
|
|
5684
|
+
/** Транспорт исходных realtime-событий поверх стандартного WebSocket. */
|
|
5685
|
+
declare class WebSocketTransport implements RealtimeTransport {
|
|
5686
|
+
#private;
|
|
5687
|
+
readonly name = "ws";
|
|
5688
|
+
constructor(options?: WebSocketTransportOptions);
|
|
5689
|
+
connect(context: TransportContext): Promise<void>;
|
|
5690
|
+
}
|
|
5691
|
+
//#endregion
|
|
5186
5692
|
//#region src/spans/render.d.ts
|
|
5187
5693
|
/** Формат результата {@link renderSpans}. */
|
|
5188
5694
|
declare const SpanRenderFormat: Readonly<{
|
|
@@ -5214,5 +5720,5 @@ interface RenderSpansOptions {
|
|
|
5214
5720
|
*/
|
|
5215
5721
|
declare function renderSpans(content: string, spans?: readonly Span[] | null | undefined, options?: RenderSpansOptions): string;
|
|
5216
5722
|
//#endregion
|
|
5217
|
-
export { ALLOWED_MIME_TYPES, AUDIO_MIME_TYPES, AUTH_FLAG_COOKIE, AUTH_PATHS, AccessType, type AccountEvents, type Actor, type AddAccountOptions, type AllowedMimeType, type Announcement, type AnnouncementButton, type Attachment, AttachmentType, type AudioMimeType, type AuthEvents, type AuthIdentity, type AuthInput, type AuthResource, type AuthState, type Author, type AutoSpansOptions, BUILT_IN_SERVICES, type BuilderInput, type CaptchaCredentials, type ChangelogEntry, type Clan, type ClientHooks, type Comment, type CommentBuilder, type CommentInput, type CommentReplyTo, CommentSort, type CommentsParams, type CommentsResource, type CreateCommentInput, type CreatePollInput, type CreatePostData, type CreatePostInput, type CreateReportInput, type Credentials, type CredentialsAuth, DEFAULT_BASE_URL, DEFAULT_FILE_STREAM_BUFFER_BYTES, DEFAULT_STATUS_BASE_URL, DEFAULT_TIMEOUT, DEFAULT_UPLOAD_TIMEOUT, DEFAULT_URL_FILE_MAX_BYTES, DEFAULT_USER_AGENT, DEVICE_ID_HEADER, DetectedRuntime, type DwellEntry, type ErrorContextHook, type FeedParams, FeedTab, type FileContent, type FileContext, type FileInput, type FileStreamContent, type FileStreamOptions, FileTransferMode, type FilesResource, type FollowResult, type ForgotPasswordInput, type FromStreamOptions, type Hashtag, type HashtagPostsParams, type HashtagsResource, IMAGE_MIME_TYPES, type ImageMimeType, IncidentKind, type InteractionEntry, InteractionType, type IsoDate, ItdAbortError, ItdAccounts, type ItdAccountsOptions, ItdApiError, type ItdApiErrorInit, ItdApiErrorKind, ItdAuthError, type ItdBuilder, ItdClient, type ItdClientOptions, type ItdClock, ItdConfigError, ItdConflictError, ItdError, ItdErrorCode, ItdErrorKind, type ItdFieldErrors, ItdFileError, ItdFileErrorReason, ItdForbiddenError, ItdNetworkError, ItdNotFoundError, ItdPhoneVerificationError,
|
|
5723
|
+
export { ALLOWED_MIME_TYPES, AUDIO_MIME_TYPES, AUTH_FLAG_COOKIE, AUTH_PATHS, AccessType, type AccountEvents, type Actor, type AddAccountOptions, type AllowedMimeType, type Announcement, type AnnouncementButton, type Attachment, AttachmentType, type AttemptContext, type AttemptExtensions, type AttemptInterceptor, type AttemptNext, type AudioMimeType, type AuthEvents, type AuthIdentity, type AuthInput, type AuthResource, type AuthState, type Author, type AutoSpansOptions, BUILT_IN_SERVICES, type BuilderInput, type BuiltInOperationId, type CaptchaCredentials, type ChangelogEntry, type Clan, type ClientHooks, type ClientPlugin, type Comment, type CommentBuilder, type CommentInput, type CommentReplyTo, CommentSort, type CommentsParams, type CommentsResource, type CreateCommentInput, type CreatePollInput, type CreatePostData, type CreatePostInput, type CreateReportInput, type Credentials, type CredentialsAuth, type CustomOperationId, DEFAULT_BASE_URL, DEFAULT_FILE_STREAM_BUFFER_BYTES, DEFAULT_STATUS_BASE_URL, DEFAULT_TIMEOUT, DEFAULT_UPLOAD_TIMEOUT, DEFAULT_URL_FILE_MAX_BYTES, DEFAULT_USER_AGENT, DEVICE_ID_HEADER, DetectedRuntime, type DwellEntry, type EnumerableKeyValueStore, type ErrorContextHook, type FeedParams, FeedTab, type FileContent, type FileContext, type FileInput, type FileStreamContent, type FileStreamOptions, FileTransferMode, type FilesResource, type FollowResult, type ForgotPasswordInput, type FromStreamOptions, type Hashtag, type HashtagPostsParams, type HashtagsResource, IMAGE_MIME_TYPES, type ImageMimeType, IncidentKind, type InteractionEntry, InteractionType, type IsoDate, ItdAbortError, ItdAccounts, type ItdAccountsOptions, ItdApiError, type ItdApiErrorInit, ItdApiErrorKind, ItdAuthError, type ItdBuilder, ItdClient, type ItdClientOptions, type ItdClock, ItdConfigError, ItdConflictError, ItdError, ItdErrorCode, ItdErrorKind, type ItdFieldErrors, ItdFileError, ItdFileErrorReason, ItdForbiddenError, ItdNetworkError, ItdNotFoundError, ItdPhoneVerificationError, ItdRateLimitError, ItdRealtime, ItdServerError, type ItdSession, ItdStateError, ItdTimeoutError, ItdValidationError, type KeyValueCodec, type KeyValueStore, type KeyValueStoreKeys, type KeyValueStoreResult, LIBRARY_VERSION, type LazyFile, type LikeResult, LikesVisibility, type Listener, type Logger, type Loose, MAX_RECONNECT_ATTEMPTS, type MarkupBuilder, type MarkupContent, type MarkupInput, type MarkupSpan, MemoryKeyValueStore, MemoryMultiTokenStorage, MemoryTokenStorage, type MultiTokenStorage, type MultiTokenStorageAdapterOptions, type MyProfile, NOTIFICATION_TYPE_ALIASES, type Notification, type NotificationEvent, type NotificationEventOfType, type NotificationListParams, type NotificationOfType, type NotificationSettings, NotificationType, type NotificationsResource, OPERATIONS, type OperationDefinition, type OperationExtensions, type OperationId, type OperationMethod, type OperationRequestOptions, type OperationTransformer, type Page, type PageState, PaginationMode, type PaginationOptions, Paginator, type PaginatorOptions, type ParseMarkupOptions, type PaymentMethod, type PhotoOpenInput, type Pin, type PinPostResult, type PinsResult, type PlatformClientVersion, type PlatformResource, type PlatformStatus, type PlatformVersions, type PluginApi, type PluginTeardown, type Poll, type PollBuilder, type PollInput, type PollOption, type PollTransportOptions, type Portal, type Post, type PostBuilder, type PostInput, type PostStats, type PostUpdateInput, type PostsResource, type PrivacySettings, type Profile, type PublicProfile, type QueryParams, type QueryValue, RECONNECT_BACKOFF, RECONNECT_JITTER, REFRESH_COOKIE, REFRESH_COOKIE_PATH, type RateLimitOptions, type RateLimitScope, type RawRequestOptions, RealtimeComposer, type RealtimeContext, type RealtimeContextBase, type RealtimeDeps, type RealtimeEngineEvents, type RealtimeErrorBoundary, type RealtimeErrorContext, type RealtimeEvents, type RealtimeFilter, type RealtimeHandler, type RealtimeMiddleware, type RealtimeMiddlewareGroup, type RealtimeMiddlewareLike, type RealtimeMiddlewareObj, type RealtimeNext, type RealtimeNotificationContext, type RealtimeNotificationFilter, type RealtimeNotificationSelector, type RealtimeNotificationUpdate, type RealtimeOptions, type RealtimePredicate, type RealtimeRouteSelector, type RealtimeRouteTable, RealtimeRouter, type RealtimeSequentializer, RealtimeStatus, type RealtimeTransport, RealtimeTransportKind, type RealtimeTypeGuard, type RealtimeUnknownUpdate, type RealtimeUnreadCountUpdate, type RealtimeUpdate, type RealtimeUpdateOfType, RealtimeUpdateOrigin, RealtimeUpdateType, type ReconnectOptions, type RecordKeyValueStoreSource, type RemoveAccountOptions, type RenderSpansOptions, type RepliesParams, type Report, type ReportBuilder, type ReportInput, ReportReason, ReportTargetType, type ReportsResource, type RequestContext, type RequestExtensions, type RequestOptions, type ResetPasswordInput, type ResponseContext, type RetryContext, type RetryDecisionContext, type RetryOptions, RetrySafety, RuntimeMode, STATUS_SERVICE, STREAM_PATH, type SearchResource, type SearchResult, type ServiceDefinition, ServiceRegistry, ServiceState, type ServiceStatus, type Session, type SignInResult, SignInStatus, type Span, SpanRenderFormat, SpanType, type SseTransportOptions, type StatusDay, type StatusIncidentLine, type StreamFile, type Subscription, type SubscriptionResource, type SubscriptionState, TURNSTILE_SITE_KEY, type TelemetryBatch, type TelemetryBatchOptions, type TelemetryClock, type TelemetryOptions, type TelemetryResource, type TextMarkup, type TokenStorage, type TokenStorageAdapterOptions, type TransportContext, type TransportEvent, UnauthorizedStreamError, type Unsubscribe, type UpdateNotificationSettingsInput, type UpdatePostInput, type UpdatePrivacyInput, type UpdateProfileInput, type UploadOptions, type UploadedFile, type UrlFile, type UrlFileOptions, type UserId, type UserListParams, type UserPostsParams, type UserRef, type UserSummary, type UsersResource, VIDEO_MIME_TYPES, type VerificationResource, type VerificationStatus, type VideoMimeType, type VideoProgressInput, ViewReason, ViewSource, type ViewTracker, type ViewTrackerInput, type ViewTrackerOptions, WEBSOCKET_PATH, WallAccess, type WebSocketImplementationOptions, type WebSocketLike, type WebSocketOpenFailureClassifier, WebSocketTransport, type WebSocketTransportOptions, autoSpans, canonicalNotificationType, comment, createAccounts, createClient, createKeyValueStore, createMultiTokenStorage, createRecordKeyValueStore, createTokenStorage, formatNotificationText, fromStream, fromUrl, isBuilder, isBuiltInOperationId, isEnumerableKeyValueStore, isItdApiError, isItdAuthError, isItdConflictError, isItdError, isItdFileError, isItdForbiddenError, isItdNotFoundError, isItdPhoneVerificationError, isItdRateLimitError, isItdServerError, isItdStateError, isItdValidationError, isKnownNotificationType, isMyProfile, mapPage, markup, normalizeNotification, operationMethod, operationRetrySafety, parseHtml, parseMarkdown, poll, post, readNotificationEvent, readUnreadCountEvent, renderSpans, report, resolveNotificationUrl, runRealtimeMiddleware, scopedTokenStorage, statusDays, systemClock, toDate, utcStampToIso, withCodec, withNamespace };
|
|
5218
5724
|
//# sourceMappingURL=index.d.cts.map
|