@namehash/ens-referrals 0.0.0-next-20260116185203 → 0.0.0-next-20260119132859

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.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { Address, Hex } from 'viem';
1
+ import { Address } from 'viem';
2
+ import { UnixTimestamp, AccountId, Duration } from '@ensnode/ensnode-sdk';
2
3
 
3
4
  declare const validateLowercaseAddress: (address: Address) => void;
4
5
  declare const normalizeAddress: (address: Address) => Address;
@@ -12,35 +13,6 @@ type USDQuantity = number;
12
13
  declare function isValidUSDQuantity(value: USDQuantity): boolean;
13
14
  declare function validateUSDQuantity(value: USDQuantity): void;
14
15
 
15
- /**
16
- * Unix timestamp value
17
- *
18
- * Represents the number of seconds that have elapsed
19
- * since January 1, 1970 (midnight UTC/GMT). May be zero or negative to represent a time at or
20
- * before Jan 1, 1970.
21
- *
22
- * @invariant Guaranteed to be an integer.
23
- */
24
- type UnixTimestamp = number;
25
- declare const validateUnixTimestamp: (timestamp: UnixTimestamp) => void;
26
- /**
27
- * Duration
28
- *
29
- * Represents a duration in seconds.
30
- *
31
- * Guaranteed to be a non-negative integer.
32
- */
33
- type Duration = number;
34
- /**
35
- * The number of seconds in a year.
36
- *
37
- * (60 seconds per minute * 60 minutes per hour *
38
- * 24 hours per day * 365.2425 days on average per year).
39
- */
40
- declare const SECONDS_PER_YEAR: Duration;
41
- declare function isValidDuration(duration: Duration): boolean;
42
- declare function validateDuration(duration: Duration): void;
43
-
44
16
  /**
45
17
  * Start date for the ENS Holiday Awards referral program.
46
18
  * 2025-12-01T00:00:00Z (December 1, 2025 at 00:00:00 UTC)
@@ -59,22 +31,6 @@ declare const ENS_HOLIDAY_AWARDS_MAX_QUALIFIED_REFERRERS = 10;
59
31
  * The total value of the award pool in USD.
60
32
  */
61
33
  declare const ENS_HOLIDAY_AWARDS_TOTAL_AWARD_POOL_VALUE: USDQuantity;
62
- /**
63
- * Chain ID
64
- *
65
- * Represents a unique identifier for a chain.
66
- * Guaranteed to be a positive integer.
67
- **/
68
- type ChainId = number;
69
- /**
70
- * Represents an account (contract or EOA) at `address` on chain `chainId`.
71
- *
72
- * @see https://chainagnostic.org/CAIPs/caip-10
73
- */
74
- interface AccountId {
75
- chainId: ChainId;
76
- address: Address;
77
- }
78
34
  interface ReferralProgramRules {
79
35
  /**
80
36
  * The total value of the award pool in USD.
@@ -381,57 +337,6 @@ interface AggregatedReferrerMetrics {
381
337
  declare const validateAggregatedReferrerMetrics: (metrics: AggregatedReferrerMetrics) => void;
382
338
  declare const buildAggregatedReferrerMetrics: (referrers: RankedReferrerMetrics[], rules: ReferralProgramRules) => AggregatedReferrerMetrics;
383
339
 
384
- /**
385
- * Encoded Referrer
386
- *
387
- * Represents a "raw" ENS referrer value.
388
- *
389
- * Guaranteed to be a hex string representation of a 32-byte value.
390
- * For ENS Holiday Awards a correctly encoded referrer is
391
- * a left-padded lowercase EVM address.
392
- */
393
- type EncodedReferrer = Hex;
394
- /**
395
- * Encoded Referrer byte offset for ENS Holiday Awards.
396
- *
397
- * The count of left-padded bytes in an {@link EncodedReferrer} value for ENS Holiday Awards.
398
- */
399
- declare const ENCODED_REFERRER_BYTE_OFFSET = 12;
400
- /**
401
- * Encoded Referrer byte length
402
- *
403
- * The count of bytes the {@link EncodedReferrer} value consists of.
404
- */
405
- declare const ENCODED_REFERRER_BYTE_LENGTH = 32;
406
- /**
407
- * Encoded Referrer Padding for ENS Holiday Awards
408
- *
409
- * The initial bytes of correctly encoded referrer value for ENS Holiday Awards.
410
- */
411
- declare const EXPECTED_ENCODED_REFERRER_PADDING: Hex;
412
- /**
413
- * Zero Encoded Referrer
414
- *
415
- * Guaranteed to be a hex string representation of a 32-byte zero value.
416
- */
417
- declare const ZERO_ENCODED_REFERRER: EncodedReferrer;
418
- /**
419
- * Build an {@link EncodedReferrer} value for the given {@link Address}
420
- * according to the subjective referrer encoding used for ENS Holiday Awards.
421
- */
422
- declare function buildEncodedReferrer(address: Address): EncodedReferrer;
423
- /**
424
- * Decode an {@link EncodedReferrer} value into a checksummed {@link Address}
425
- * according to the subjective referrer encoding used for ENS Holiday Awards.
426
- *
427
- * @param encodedReferrer - The "raw" {@link EncodedReferrer} value to decode.
428
- * @returns The decoded referrer checksummed address.
429
- * @throws when encodedReferrer value is not represented by
430
- * {@link ENCODED_REFERRER_BYTE_LENGTH} bytes.
431
- * @throws when decodedReferrer is not a valid EVM address.
432
- */
433
- declare function decodeEncodedReferrer(encodedReferrer: EncodedReferrer): Address;
434
-
435
340
  /**
436
341
  * Represents a leaderboard for any number of referrers.
437
342
  */
@@ -567,18 +472,6 @@ interface ReferrerLeaderboardPage {
567
472
  }
568
473
  declare const getReferrerLeaderboardPage: (pageParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPage;
569
474
 
570
- /**
571
- * Build a URL to the official ENS manager app
572
- * where the given {@link Address} is set as the referrer.
573
- */
574
- declare function buildEnsReferralUrl(address: Address): URL;
575
-
576
- declare const isInteger: (value: number) => boolean;
577
- declare const isNonNegativeInteger: (value: number) => boolean;
578
- declare const isPositiveInteger: (value: number) => boolean;
579
- declare const validateNonNegativeInteger: (value: number) => void;
580
- declare const isFiniteNonNegativeNumber: (value: number) => boolean;
581
-
582
475
  /**
583
476
  * The type of referrer detail data.
584
477
  */
@@ -684,6 +577,396 @@ type ReferrerDetail = ReferrerDetailRanked | ReferrerDetailUnranked;
684
577
  */
685
578
  declare const getReferrerDetail: (referrer: Address, leaderboard: ReferrerLeaderboard) => ReferrerDetail;
686
579
 
580
+ /**
581
+ * Request parameters for a referrer leaderboard page query.
582
+ */
583
+ interface ReferrerLeaderboardPageRequest extends ReferrerLeaderboardPageParams {
584
+ }
585
+ /**
586
+ * A status code for a referrer leaderboard page API response.
587
+ */
588
+ declare const ReferrerLeaderboardPageResponseCodes: {
589
+ /**
590
+ * Represents that the requested referrer leaderboard page is available.
591
+ */
592
+ readonly Ok: "ok";
593
+ /**
594
+ * Represents that the referrer leaderboard data is not available.
595
+ */
596
+ readonly Error: "error";
597
+ };
598
+ /**
599
+ * The derived string union of possible {@link ReferrerLeaderboardPageResponseCodes}.
600
+ */
601
+ type ReferrerLeaderboardPageResponseCode = (typeof ReferrerLeaderboardPageResponseCodes)[keyof typeof ReferrerLeaderboardPageResponseCodes];
602
+ /**
603
+ * A referrer leaderboard page response when the data is available.
604
+ */
605
+ type ReferrerLeaderboardPageResponseOk = {
606
+ responseCode: typeof ReferrerLeaderboardPageResponseCodes.Ok;
607
+ data: ReferrerLeaderboardPage;
608
+ };
609
+ /**
610
+ * A referrer leaderboard page response when the data is not available.
611
+ */
612
+ type ReferrerLeaderboardPageResponseError = {
613
+ responseCode: typeof ReferrerLeaderboardPageResponseCodes.Error;
614
+ error: string;
615
+ errorMessage: string;
616
+ };
617
+ /**
618
+ * A referrer leaderboard page API response.
619
+ *
620
+ * Use the `responseCode` field to determine the specific type interpretation
621
+ * at runtime.
622
+ */
623
+ type ReferrerLeaderboardPageResponse = ReferrerLeaderboardPageResponseOk | ReferrerLeaderboardPageResponseError;
624
+ /**
625
+ * Request parameters for referrer detail query.
626
+ */
627
+ interface ReferrerDetailRequest {
628
+ /** The Ethereum address of the referrer to query */
629
+ referrer: Address;
630
+ }
631
+ /**
632
+ * A status code for referrer detail API responses.
633
+ */
634
+ declare const ReferrerDetailResponseCodes: {
635
+ /**
636
+ * Represents that the referrer detail data is available.
637
+ */
638
+ readonly Ok: "ok";
639
+ /**
640
+ * Represents that an error occurred while fetching the data.
641
+ */
642
+ readonly Error: "error";
643
+ };
644
+ /**
645
+ * The derived string union of possible {@link ReferrerDetailResponseCodes}.
646
+ */
647
+ type ReferrerDetailResponseCode = (typeof ReferrerDetailResponseCodes)[keyof typeof ReferrerDetailResponseCodes];
648
+ /**
649
+ * A referrer detail response when the data is available for a referrer on the leaderboard.
650
+ */
651
+ type ReferrerDetailResponseOk = {
652
+ responseCode: typeof ReferrerDetailResponseCodes.Ok;
653
+ data: ReferrerDetail;
654
+ };
655
+ /**
656
+ * A referrer detail response when an error occurs.
657
+ */
658
+ type ReferrerDetailResponseError = {
659
+ responseCode: typeof ReferrerDetailResponseCodes.Error;
660
+ error: string;
661
+ errorMessage: string;
662
+ };
663
+ /**
664
+ * A referrer detail API response.
665
+ *
666
+ * Use the `responseCode` field to determine the specific type interpretation
667
+ * at runtime.
668
+ */
669
+ type ReferrerDetailResponse = ReferrerDetailResponseOk | ReferrerDetailResponseError;
670
+
671
+ /**
672
+ * Serialized representation of {@link RevenueContribution}.
673
+ *
674
+ * RevenueContribution is a bigint, which is serialized as a string for JSON compatibility.
675
+ */
676
+ type SerializedRevenueContribution = string;
677
+ /**
678
+ * Serialized representation of {@link ReferralProgramRules}.
679
+ *
680
+ * Note: All fields are already serializable primitives, so this type is identical to the source type.
681
+ */
682
+ type SerializedReferralProgramRules = ReferralProgramRules;
683
+ /**
684
+ * Serialized representation of {@link AwardedReferrerMetrics}.
685
+ */
686
+ interface SerializedAwardedReferrerMetrics extends Omit<AwardedReferrerMetrics, "totalRevenueContribution"> {
687
+ totalRevenueContribution: SerializedRevenueContribution;
688
+ }
689
+ /**
690
+ * Serialized representation of {@link UnrankedReferrerMetrics}.
691
+ */
692
+ interface SerializedUnrankedReferrerMetrics extends Omit<UnrankedReferrerMetrics, "totalRevenueContribution"> {
693
+ totalRevenueContribution: SerializedRevenueContribution;
694
+ }
695
+ /**
696
+ * Serialized representation of {@link AggregatedReferrerMetrics}.
697
+ */
698
+ interface SerializedAggregatedReferrerMetrics extends Omit<AggregatedReferrerMetrics, "grandTotalRevenueContribution"> {
699
+ grandTotalRevenueContribution: SerializedRevenueContribution;
700
+ }
701
+ /**
702
+ * Serialized representation of {@link ReferrerLeaderboardPage}.
703
+ */
704
+ interface SerializedReferrerLeaderboardPage extends Omit<ReferrerLeaderboardPage, "referrers" | "aggregatedMetrics"> {
705
+ referrers: SerializedAwardedReferrerMetrics[];
706
+ aggregatedMetrics: SerializedAggregatedReferrerMetrics;
707
+ }
708
+ /**
709
+ * Serialized representation of {@link ReferrerDetailRanked}.
710
+ */
711
+ interface SerializedReferrerDetailRanked extends Omit<ReferrerDetailRanked, "referrer" | "aggregatedMetrics"> {
712
+ referrer: SerializedAwardedReferrerMetrics;
713
+ aggregatedMetrics: SerializedAggregatedReferrerMetrics;
714
+ }
715
+ /**
716
+ * Serialized representation of {@link ReferrerDetailUnranked}.
717
+ */
718
+ interface SerializedReferrerDetailUnranked extends Omit<ReferrerDetailUnranked, "referrer" | "aggregatedMetrics"> {
719
+ referrer: SerializedUnrankedReferrerMetrics;
720
+ aggregatedMetrics: SerializedAggregatedReferrerMetrics;
721
+ }
722
+ /**
723
+ * Serialized representation of {@link ReferrerDetail} (union of ranked and unranked).
724
+ */
725
+ type SerializedReferrerDetail = SerializedReferrerDetailRanked | SerializedReferrerDetailUnranked;
726
+ /**
727
+ * Serialized representation of {@link ReferrerLeaderboardPageResponseError}.
728
+ *
729
+ * Note: All fields are already serializable, so this type is identical to the source type.
730
+ */
731
+ type SerializedReferrerLeaderboardPageResponseError = ReferrerLeaderboardPageResponseError;
732
+ /**
733
+ * Serialized representation of {@link ReferrerLeaderboardPageResponseOk}.
734
+ */
735
+ interface SerializedReferrerLeaderboardPageResponseOk extends Omit<ReferrerLeaderboardPageResponseOk, "data"> {
736
+ data: SerializedReferrerLeaderboardPage;
737
+ }
738
+ /**
739
+ * Serialized representation of {@link ReferrerLeaderboardPageResponse}.
740
+ */
741
+ type SerializedReferrerLeaderboardPageResponse = SerializedReferrerLeaderboardPageResponseOk | SerializedReferrerLeaderboardPageResponseError;
742
+ /**
743
+ * Serialized representation of {@link ReferrerDetailResponseError}.
744
+ *
745
+ * Note: All fields are already serializable, so this type is identical to the source type.
746
+ */
747
+ type SerializedReferrerDetailResponseError = ReferrerDetailResponseError;
748
+ /**
749
+ * Serialized representation of {@link ReferrerDetailResponseOk}.
750
+ */
751
+ interface SerializedReferrerDetailResponseOk extends Omit<ReferrerDetailResponseOk, "data"> {
752
+ data: SerializedReferrerDetail;
753
+ }
754
+ /**
755
+ * Serialized representation of {@link ReferrerDetailResponse}.
756
+ */
757
+ type SerializedReferrerDetailResponse = SerializedReferrerDetailResponseOk | SerializedReferrerDetailResponseError;
758
+
759
+ /**
760
+ * Deserialize a {@link ReferrerLeaderboardPageResponse} object.
761
+ *
762
+ * Note: This function explicitly deserializes each subobject to convert string
763
+ * RevenueContribution values back to bigint, then validates using Zod schemas
764
+ * to enforce invariants on the data.
765
+ */
766
+ declare function deserializeReferrerLeaderboardPageResponse(maybeResponse: SerializedReferrerLeaderboardPageResponse, valueLabel?: string): ReferrerLeaderboardPageResponse;
767
+ /**
768
+ * Deserialize a {@link ReferrerDetailResponse} object.
769
+ *
770
+ * Note: This function explicitly deserializes each subobject to convert string
771
+ * RevenueContribution values back to bigint, then validates using Zod schemas
772
+ * to enforce invariants on the data.
773
+ */
774
+ declare function deserializeReferrerDetailResponse(maybeResponse: SerializedReferrerDetailResponse, valueLabel?: string): ReferrerDetailResponse;
775
+
776
+ /**
777
+ * Serialize a {@link ReferrerLeaderboardPageResponse} object.
778
+ */
779
+ declare function serializeReferrerLeaderboardPageResponse(response: ReferrerLeaderboardPageResponse): SerializedReferrerLeaderboardPageResponse;
780
+ /**
781
+ * Serialize a {@link ReferrerDetailResponse} object.
782
+ */
783
+ declare function serializeReferrerDetailResponse(response: ReferrerDetailResponse): SerializedReferrerDetailResponse;
784
+
785
+ /**
786
+ * Default ENSNode API endpoint URL
787
+ */
788
+ declare const DEFAULT_ENSNODE_API_URL: "https://api.alpha.ensnode.io";
789
+ /**
790
+ * Configuration options for ENS Referrals API client
791
+ */
792
+ interface ClientOptions {
793
+ /** The ENSNode API URL */
794
+ url: URL;
795
+ }
796
+ /**
797
+ * ENS Referrals API Client
798
+ *
799
+ * Provides access to ENS Referrals data and leaderboard information.
800
+ *
801
+ * @example
802
+ * ```typescript
803
+ * // Create client with default options
804
+ * const client = new ENSReferralsClient();
805
+ *
806
+ * // Get referrer leaderboard
807
+ * const leaderboardPage = await client.getReferrerLeaderboardPage({
808
+ * page: 1,
809
+ * recordsPerPage: 25
810
+ * });
811
+ * ```
812
+ *
813
+ * @example
814
+ * ```typescript
815
+ * // Custom configuration
816
+ * const client = new ENSReferralsClient({
817
+ * url: new URL("https://my-ensnode-instance.com"),
818
+ * });
819
+ * ```
820
+ */
821
+ declare class ENSReferralsClient {
822
+ private readonly options;
823
+ static defaultOptions(): ClientOptions;
824
+ constructor(options?: Partial<ClientOptions>);
825
+ getOptions(): Readonly<ClientOptions>;
826
+ /**
827
+ * Fetch Referrer Leaderboard Page
828
+ *
829
+ * Retrieves a paginated list of referrer leaderboard metrics with contribution percentages.
830
+ * Each referrer's contribution is calculated as a percentage of the grand totals across all referrers.
831
+ *
832
+ * @param request - Pagination parameters
833
+ * @param request.page - The page number to retrieve (1-indexed, default: 1)
834
+ * @param request.recordsPerPage - Number of records per page (default: 25, max: 100)
835
+ * @returns {ReferrerLeaderboardPageResponse}
836
+ *
837
+ * @throws if the ENSNode request fails
838
+ * @throws if the ENSNode API returns an error response
839
+ * @throws if the ENSNode response breaks required invariants
840
+ *
841
+ * @example
842
+ * ```typescript
843
+ * // Get first page with default page size (25 records)
844
+ * const response = await client.getReferrerLeaderboardPage();
845
+ * if (response.responseCode === ReferrerLeaderboardPageResponseCodes.Ok) {
846
+ * const {
847
+ * aggregatedMetrics,
848
+ * referrers,
849
+ * rules,
850
+ * pageContext,
851
+ * updatedAt
852
+ * } = response.data;
853
+ * console.log(aggregatedMetrics);
854
+ * console.log(referrers);
855
+ * console.log(rules);
856
+ * console.log(updatedAt);
857
+ * console.log(`Page ${pageContext.page} of ${pageContext.totalPages}`);
858
+ * }
859
+ * ```
860
+ *
861
+ * @example
862
+ * ```typescript
863
+ * // Get second page with 50 records per page
864
+ * const response = await client.getReferrerLeaderboardPage({ page: 2, recordsPerPage: 50 });
865
+ * ```
866
+ *
867
+ * @example
868
+ * ```typescript
869
+ * // Handle error response, ie. when Referrer Leaderboard is not currently available.
870
+ * const response = await client.getReferrerLeaderboardPage();
871
+ *
872
+ * if (response.responseCode === ReferrerLeaderboardPageResponseCodes.Error) {
873
+ * console.error(response.error);
874
+ * console.error(response.errorMessage);
875
+ * }
876
+ * ```
877
+ */
878
+ getReferrerLeaderboardPage(request?: ReferrerLeaderboardPageRequest): Promise<ReferrerLeaderboardPageResponse>;
879
+ /**
880
+ * Fetch Referrer Detail
881
+ *
882
+ * Retrieves detailed information about a specific referrer, whether they are on the
883
+ * leaderboard or not.
884
+ *
885
+ * The response data is a discriminated union type with a `type` field:
886
+ *
887
+ * **For referrers on the leaderboard** (`ReferrerDetailRanked`):
888
+ * - `type`: {@link ReferrerDetailTypeIds.Ranked}
889
+ * - `referrer`: The `AwardedReferrerMetrics` from @namehash/ens-referrals
890
+ * - `rules`: The referral program rules
891
+ * - `aggregatedMetrics`: Aggregated metrics for all referrers on the leaderboard
892
+ * - `accurateAsOf`: Unix timestamp indicating when the data was last updated
893
+ *
894
+ * **For referrers NOT on the leaderboard** (`ReferrerDetailUnranked`):
895
+ * - `type`: {@link ReferrerDetailTypeIds.Unranked}
896
+ * - `referrer`: The `UnrankedReferrerMetrics` from @namehash/ens-referrals
897
+ * - `rules`: The referral program rules
898
+ * - `aggregatedMetrics`: Aggregated metrics for all referrers on the leaderboard
899
+ * - `accurateAsOf`: Unix timestamp indicating when the data was last updated
900
+ *
901
+ * @see {@link https://www.npmjs.com/package/@namehash/ens-referrals|@namehash/ens-referrals} for calculation details
902
+ *
903
+ * @param request The referrer address to query
904
+ * @returns {ReferrerDetailResponse} Returns the referrer detail response
905
+ *
906
+ * @throws if the ENSNode request fails
907
+ * @throws if the response data is malformed
908
+ *
909
+ * @example
910
+ * ```typescript
911
+ * // Get referrer detail for a specific address
912
+ * const response = await client.getReferrerDetail({
913
+ * referrer: "0x1234567890123456789012345678901234567890"
914
+ * });
915
+ * if (response.responseCode === ReferrerDetailResponseCodes.Ok) {
916
+ * const { type, referrer, rules, aggregatedMetrics, accurateAsOf } = response.data;
917
+ * console.log(type); // ReferrerDetailTypeIds.Ranked or ReferrerDetailTypeIds.Unranked
918
+ * console.log(referrer);
919
+ * console.log(accurateAsOf);
920
+ * }
921
+ * ```
922
+ *
923
+ * @example
924
+ * ```typescript
925
+ * // Use discriminated union to check if referrer is ranked
926
+ * const response = await client.getReferrerDetail({
927
+ * referrer: "0x1234567890123456789012345678901234567890"
928
+ * });
929
+ * if (response.responseCode === ReferrerDetailResponseCodes.Ok) {
930
+ * if (response.data.type === ReferrerDetailTypeIds.Ranked) {
931
+ * // TypeScript knows this is ReferrerDetailRanked
932
+ * console.log(`Rank: ${response.data.referrer.rank}`);
933
+ * console.log(`Qualified: ${response.data.referrer.isQualified}`);
934
+ * console.log(`Award Pool Share: ${response.data.referrer.awardPoolShare * 100}%`);
935
+ * } else {
936
+ * // TypeScript knows this is ReferrerDetailUnranked
937
+ * console.log("Referrer is not on the leaderboard (no referrals yet)");
938
+ * }
939
+ * }
940
+ * ```
941
+ *
942
+ * @example
943
+ * ```typescript
944
+ * // Handle error response, ie. when Referrer Detail is not currently available.
945
+ * const response = await client.getReferrerDetail({
946
+ * referrer: "0x1234567890123456789012345678901234567890"
947
+ * });
948
+ *
949
+ * if (response.responseCode === ReferrerDetailResponseCodes.Error) {
950
+ * console.error(response.error);
951
+ * console.error(response.errorMessage);
952
+ * }
953
+ * ```
954
+ */
955
+ getReferrerDetail(request: ReferrerDetailRequest): Promise<ReferrerDetailResponse>;
956
+ }
957
+
958
+ /**
959
+ * Build a URL to the official ENS manager app
960
+ * where the given {@link Address} is set as the referrer.
961
+ */
962
+ declare function buildEnsReferralUrl(address: Address): URL;
963
+
964
+ declare const isInteger: (value: number) => boolean;
965
+ declare const isNonNegativeInteger: (value: number) => boolean;
966
+ declare const isPositiveInteger: (value: number) => boolean;
967
+ declare const validateNonNegativeInteger: (value: number) => void;
968
+ declare const isFiniteNonNegativeNumber: (value: number) => boolean;
969
+
687
970
  /**
688
971
  * The type of referral program's status.
689
972
  */
@@ -716,4 +999,15 @@ type ReferralProgramStatusId = (typeof ReferralProgramStatuses)[keyof typeof Ref
716
999
  */
717
1000
  declare const calcReferralProgramStatus: (referralProgramRules: ReferralProgramRules, now: UnixTimestamp) => ReferralProgramStatusId;
718
1001
 
719
- export { type AccountId, type AggregatedReferrerMetrics, type AwardedReferrerMetrics, type ChainId, type Duration, ENCODED_REFERRER_BYTE_LENGTH, ENCODED_REFERRER_BYTE_OFFSET, ENS_HOLIDAY_AWARDS_END_DATE, ENS_HOLIDAY_AWARDS_MAX_QUALIFIED_REFERRERS, ENS_HOLIDAY_AWARDS_START_DATE, ENS_HOLIDAY_AWARDS_TOTAL_AWARD_POOL_VALUE, EXPECTED_ENCODED_REFERRER_PADDING, type EncodedReferrer, REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT, REFERRERS_PER_LEADERBOARD_PAGE_MAX, type RankedReferrerMetrics, type ReferralProgramRules, type ReferralProgramStatusId, ReferralProgramStatuses, type ReferrerDetail, type ReferrerDetailRanked, type ReferrerDetailTypeId, ReferrerDetailTypeIds, type ReferrerDetailUnranked, type ReferrerLeaderboard, type ReferrerLeaderboardPage, type ReferrerLeaderboardPageContext, type ReferrerLeaderboardPageParams, type ReferrerMetrics, type ReferrerMetricsForComparison, type ReferrerRank, type ReferrerScore, type RevenueContribution, SECONDS_PER_YEAR, type ScoredReferrerMetrics, type USDQuantity, type UnixTimestamp, type UnrankedReferrerMetrics, ZERO_ENCODED_REFERRER, buildAggregatedReferrerMetrics, buildAwardedReferrerMetrics, buildEncodedReferrer, buildEnsReferralUrl, buildRankedReferrerMetrics, buildReferralProgramRules, buildReferrerLeaderboard, buildReferrerLeaderboardPageContext, buildReferrerLeaderboardPageParams, buildReferrerMetrics, buildScoredReferrerMetrics, buildUnrankedReferrerMetrics, calcReferralProgramStatus, calcReferrerAwardPoolShare, calcReferrerFinalScore, calcReferrerFinalScoreBoost, calcReferrerFinalScoreMultiplier, calcReferrerScore, compareReferrerMetrics, decodeEncodedReferrer, getReferrerDetail, getReferrerLeaderboardPage, isFiniteNonNegativeNumber, isInteger, isNonNegativeInteger, isPositiveInteger, isReferrerQualified, isValidDuration, isValidReferrerScore, isValidRevenueContribution, isValidUSDQuantity, normalizeAddress, sortReferrerMetrics, validateAggregatedReferrerMetrics, validateAwardedReferrerMetrics, validateDuration, validateLowercaseAddress, validateNonNegativeInteger, validateRankedReferrerMetrics, validateReferralProgramRules, validateReferrerLeaderboardPageContext, validateReferrerMetrics, validateReferrerRank, validateReferrerScore, validateRevenueContribution, validateScoredReferrerMetrics, validateUSDQuantity, validateUnixTimestamp, validateUnrankedReferrerMetrics };
1002
+ declare const validateUnixTimestamp: (timestamp: UnixTimestamp) => void;
1003
+ /**
1004
+ * The number of seconds in a year.
1005
+ *
1006
+ * (60 seconds per minute * 60 minutes per hour *
1007
+ * 24 hours per day * 365.2425 days on average per year).
1008
+ */
1009
+ declare const SECONDS_PER_YEAR: Duration;
1010
+ declare function isValidDuration(duration: Duration): boolean;
1011
+ declare function validateDuration(duration: Duration): void;
1012
+
1013
+ export { type AggregatedReferrerMetrics, type AwardedReferrerMetrics, type ClientOptions, DEFAULT_ENSNODE_API_URL, ENSReferralsClient, ENS_HOLIDAY_AWARDS_END_DATE, ENS_HOLIDAY_AWARDS_MAX_QUALIFIED_REFERRERS, ENS_HOLIDAY_AWARDS_START_DATE, ENS_HOLIDAY_AWARDS_TOTAL_AWARD_POOL_VALUE, REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT, REFERRERS_PER_LEADERBOARD_PAGE_MAX, type RankedReferrerMetrics, type ReferralProgramRules, type ReferralProgramStatusId, ReferralProgramStatuses, type ReferrerDetail, type ReferrerDetailRanked, type ReferrerDetailRequest, type ReferrerDetailResponse, type ReferrerDetailResponseCode, ReferrerDetailResponseCodes, type ReferrerDetailResponseError, type ReferrerDetailResponseOk, type ReferrerDetailTypeId, ReferrerDetailTypeIds, type ReferrerDetailUnranked, type ReferrerLeaderboard, type ReferrerLeaderboardPage, type ReferrerLeaderboardPageContext, type ReferrerLeaderboardPageParams, type ReferrerLeaderboardPageRequest, type ReferrerLeaderboardPageResponse, type ReferrerLeaderboardPageResponseCode, ReferrerLeaderboardPageResponseCodes, type ReferrerLeaderboardPageResponseError, type ReferrerLeaderboardPageResponseOk, type ReferrerMetrics, type ReferrerMetricsForComparison, type ReferrerRank, type ReferrerScore, type RevenueContribution, SECONDS_PER_YEAR, type ScoredReferrerMetrics, type SerializedAggregatedReferrerMetrics, type SerializedAwardedReferrerMetrics, type SerializedReferralProgramRules, type SerializedReferrerDetail, type SerializedReferrerDetailRanked, type SerializedReferrerDetailResponse, type SerializedReferrerDetailResponseError, type SerializedReferrerDetailResponseOk, type SerializedReferrerDetailUnranked, type SerializedReferrerLeaderboardPage, type SerializedReferrerLeaderboardPageResponse, type SerializedReferrerLeaderboardPageResponseError, type SerializedReferrerLeaderboardPageResponseOk, type SerializedRevenueContribution, type SerializedUnrankedReferrerMetrics, type USDQuantity, type UnrankedReferrerMetrics, buildAggregatedReferrerMetrics, buildAwardedReferrerMetrics, buildEnsReferralUrl, buildRankedReferrerMetrics, buildReferralProgramRules, buildReferrerLeaderboard, buildReferrerLeaderboardPageContext, buildReferrerLeaderboardPageParams, buildReferrerMetrics, buildScoredReferrerMetrics, buildUnrankedReferrerMetrics, calcReferralProgramStatus, calcReferrerAwardPoolShare, calcReferrerFinalScore, calcReferrerFinalScoreBoost, calcReferrerFinalScoreMultiplier, calcReferrerScore, compareReferrerMetrics, deserializeReferrerDetailResponse, deserializeReferrerLeaderboardPageResponse, getReferrerDetail, getReferrerLeaderboardPage, isFiniteNonNegativeNumber, isInteger, isNonNegativeInteger, isPositiveInteger, isReferrerQualified, isValidDuration, isValidReferrerScore, isValidRevenueContribution, isValidUSDQuantity, normalizeAddress, serializeReferrerDetailResponse, serializeReferrerLeaderboardPageResponse, sortReferrerMetrics, validateAggregatedReferrerMetrics, validateAwardedReferrerMetrics, validateDuration, validateLowercaseAddress, validateNonNegativeInteger, validateRankedReferrerMetrics, validateReferralProgramRules, validateReferrerLeaderboardPageContext, validateReferrerMetrics, validateReferrerRank, validateReferrerScore, validateRevenueContribution, validateScoredReferrerMetrics, validateUSDQuantity, validateUnixTimestamp, validateUnrankedReferrerMetrics };