@namehash/ens-referrals 1.2.0 → 1.4.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.d.cts CHANGED
@@ -180,6 +180,33 @@ interface ReferrerMetricsForComparison {
180
180
  }
181
181
  declare const compareReferrerMetrics: (a: ReferrerMetricsForComparison, b: ReferrerMetricsForComparison) => number;
182
182
 
183
+ /**
184
+ * Revenue Contribution
185
+ *
186
+ * Represents the total revenue contribution (in Wei) made to the ENS DAO.
187
+ *
188
+ * This is the sum of the total cost paid by registrants for registrar actions.
189
+ * From the perspective of the ENS DAO, this represents revenue received.
190
+ *
191
+ * @invariant Guaranteed to be a non-negative bigint value (>= 0n)
192
+ * @invariant Never null (records with null `total` in the database are treated as 0 when summing)
193
+ */
194
+ type RevenueContribution = bigint;
195
+ /**
196
+ * Check if a value is a valid revenue contribution.
197
+ *
198
+ * @param value - The value to check
199
+ * @returns true if the value is a non-negative bigint, false otherwise
200
+ */
201
+ declare function isValidRevenueContribution(value: unknown): value is RevenueContribution;
202
+ /**
203
+ * Validate that a value is a valid revenue contribution.
204
+ *
205
+ * @param value - The value to validate
206
+ * @throws {Error} If the value is not a valid revenue contribution
207
+ */
208
+ declare function validateRevenueContribution(value: unknown): void;
209
+
183
210
  /**
184
211
  * Represents metrics for a single referrer independent of other referrers.
185
212
  */
@@ -200,8 +227,19 @@ interface ReferrerMetrics {
200
227
  * the {@link ReferralProgramRules}.
201
228
  */
202
229
  totalIncrementalDuration: Duration;
230
+ /**
231
+ * The total revenue contribution (in Wei) made to the ENS DAO by all referrals
232
+ * from this referrer.
233
+ *
234
+ * This is the sum of the total cost paid by registrants for all registrar actions
235
+ * where this address was the referrer.
236
+ *
237
+ * @invariant Guaranteed to be a non-negative bigint value (>= 0n)
238
+ * @invariant Never null (records with null `total` in the database are treated as 0 when summing)
239
+ */
240
+ totalRevenueContribution: RevenueContribution;
203
241
  }
204
- declare const buildReferrerMetrics: (referrer: Address, totalReferrals: number, totalIncrementalDuration: Duration) => ReferrerMetrics;
242
+ declare const buildReferrerMetrics: (referrer: Address, totalReferrals: number, totalIncrementalDuration: Duration, totalRevenueContribution: RevenueContribution) => ReferrerMetrics;
205
243
  declare const validateReferrerMetrics: (metrics: ReferrerMetrics) => void;
206
244
  declare const sortReferrerMetrics: (referrers: ReferrerMetrics[]) => ReferrerMetrics[];
207
245
  /**
@@ -318,6 +356,15 @@ interface AggregatedReferrerMetrics {
318
356
  * @invariant The sum of `totalIncrementalDuration` across all `RankedReferrerMetrics` in the list.
319
357
  */
320
358
  grandTotalIncrementalDuration: Duration;
359
+ /**
360
+ * The total revenue contribution (in Wei) to the ENS DAO from all referrals
361
+ * across all referrers on the leaderboard.
362
+ *
363
+ * This is the sum of `totalRevenueContribution` across all `RankedReferrerMetrics` in the list.
364
+ *
365
+ * @invariant Guaranteed to be a non-negative bigint value (>= 0n)
366
+ */
367
+ grandTotalRevenueContribution: RevenueContribution;
321
368
  /**
322
369
  * @invariant The sum of `finalScore` across all `RankedReferrerMetrics` where `isQualified` is `true`.
323
370
  */
@@ -441,7 +488,7 @@ interface ReferrerLeaderboardPageParams {
441
488
  * @invariant Must be a positive integer (>= 1) and less than or equal to {@link REFERRERS_PER_LEADERBOARD_PAGE_MAX}
442
489
  * @default {@link REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT}
443
490
  */
444
- itemsPerPage?: number;
491
+ recordsPerPage?: number;
445
492
  }
446
493
  declare const buildReferrerLeaderboardPageParams: (params: ReferrerLeaderboardPageParams) => Required<ReferrerLeaderboardPageParams>;
447
494
  interface ReferrerLeaderboardPageContext extends Required<ReferrerLeaderboardPageParams> {
@@ -457,7 +504,7 @@ interface ReferrerLeaderboardPageContext extends Required<ReferrerLeaderboardPag
457
504
  totalPages: number;
458
505
  /**
459
506
  * Indicates if there is a next page available
460
- * @invariant true if and only if (`page` * `itemsPerPage` < `total`)
507
+ * @invariant true if and only if (`page` * `recordsPerPage` < `total`)
461
508
  */
462
509
  hasNext: boolean;
463
510
  /**
@@ -498,9 +545,9 @@ interface ReferrerLeaderboardPage {
498
545
  rules: ReferralProgramRules;
499
546
  /**
500
547
  * Ordered list of {@link AwardedReferrerMetrics} for the {@link ReferrerLeaderboardPage}
501
- * described by `paginationContext` within the related {@link ReferrerLeaderboard}.
548
+ * described by `pageContext` within the related {@link ReferrerLeaderboard}.
502
549
  *
503
- * @invariant Array will be empty if `paginationContext.totalRecords` is 0.
550
+ * @invariant Array will be empty if `pageContext.totalRecords` is 0.
504
551
  * @invariant Array entries are ordered by `rank` (descending).
505
552
  */
506
553
  referrers: AwardedReferrerMetrics[];
@@ -512,13 +559,13 @@ interface ReferrerLeaderboardPage {
512
559
  * The {@link ReferrerLeaderboardPageContext} of this {@link ReferrerLeaderboardPage} relative to the overall
513
560
  * {@link ReferrerLeaderboard}.
514
561
  */
515
- paginationContext: ReferrerLeaderboardPageContext;
562
+ pageContext: ReferrerLeaderboardPageContext;
516
563
  /**
517
564
  * The {@link UnixTimestamp} of when the data used to build the {@link ReferrerLeaderboardPage} was accurate as of.
518
565
  */
519
566
  accurateAsOf: UnixTimestamp;
520
567
  }
521
- declare const getReferrerLeaderboardPage: (paginationParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPage;
568
+ declare const getReferrerLeaderboardPage: (pageParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPage;
522
569
 
523
570
  /**
524
571
  * Build a URL to the official ENS manager app
@@ -637,4 +684,36 @@ type ReferrerDetail = ReferrerDetailRanked | ReferrerDetailUnranked;
637
684
  */
638
685
  declare const getReferrerDetail: (referrer: Address, leaderboard: ReferrerLeaderboard) => ReferrerDetail;
639
686
 
640
- 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 ReferrerDetail, type ReferrerDetailRanked, type ReferrerDetailTypeId, ReferrerDetailTypeIds, type ReferrerDetailUnranked, type ReferrerLeaderboard, type ReferrerLeaderboardPage, type ReferrerLeaderboardPageContext, type ReferrerLeaderboardPageParams, type ReferrerMetrics, type ReferrerMetricsForComparison, type ReferrerRank, type ReferrerScore, 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, calcReferrerAwardPoolShare, calcReferrerFinalScore, calcReferrerFinalScoreBoost, calcReferrerFinalScoreMultiplier, calcReferrerScore, compareReferrerMetrics, decodeEncodedReferrer, getReferrerDetail, getReferrerLeaderboardPage, isFiniteNonNegativeNumber, isInteger, isNonNegativeInteger, isPositiveInteger, isReferrerQualified, isValidDuration, isValidReferrerScore, isValidUSDQuantity, normalizeAddress, sortReferrerMetrics, validateAggregatedReferrerMetrics, validateAwardedReferrerMetrics, validateDuration, validateLowercaseAddress, validateNonNegativeInteger, validateRankedReferrerMetrics, validateReferralProgramRules, validateReferrerLeaderboardPageContext, validateReferrerMetrics, validateReferrerRank, validateReferrerScore, validateScoredReferrerMetrics, validateUSDQuantity, validateUnixTimestamp, validateUnrankedReferrerMetrics };
687
+ /**
688
+ * The type of referral program's status.
689
+ */
690
+ declare const ReferralProgramStatuses: {
691
+ /**
692
+ * Represents a referral program that has been announced, but hasn't started yet.
693
+ */
694
+ readonly Scheduled: "Scheduled";
695
+ /**
696
+ * Represents a currently ongoing referral program.
697
+ */
698
+ readonly Active: "Active";
699
+ /**
700
+ * Represents a referral program that has already ended.
701
+ */
702
+ readonly Closed: "Closed";
703
+ };
704
+ /**
705
+ * The derived string union of possible {@link ReferralProgramStatuses}.
706
+ */
707
+ type ReferralProgramStatusId = (typeof ReferralProgramStatuses)[keyof typeof ReferralProgramStatuses];
708
+ /**
709
+ * Calculate the status of the referral program based on the current date
710
+ * and program's timeframe available in its rules.
711
+ *
712
+ * @param referralProgramRules - Related referral program's rules containing
713
+ * program's start date and end date.
714
+ *
715
+ * @param now - Current date in {@link UnixTimestamp} format.
716
+ */
717
+ declare const calcReferralProgramStatus: (referralProgramRules: ReferralProgramRules, now: UnixTimestamp) => ReferralProgramStatusId;
718
+
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 };
package/dist/index.d.ts CHANGED
@@ -180,6 +180,33 @@ interface ReferrerMetricsForComparison {
180
180
  }
181
181
  declare const compareReferrerMetrics: (a: ReferrerMetricsForComparison, b: ReferrerMetricsForComparison) => number;
182
182
 
183
+ /**
184
+ * Revenue Contribution
185
+ *
186
+ * Represents the total revenue contribution (in Wei) made to the ENS DAO.
187
+ *
188
+ * This is the sum of the total cost paid by registrants for registrar actions.
189
+ * From the perspective of the ENS DAO, this represents revenue received.
190
+ *
191
+ * @invariant Guaranteed to be a non-negative bigint value (>= 0n)
192
+ * @invariant Never null (records with null `total` in the database are treated as 0 when summing)
193
+ */
194
+ type RevenueContribution = bigint;
195
+ /**
196
+ * Check if a value is a valid revenue contribution.
197
+ *
198
+ * @param value - The value to check
199
+ * @returns true if the value is a non-negative bigint, false otherwise
200
+ */
201
+ declare function isValidRevenueContribution(value: unknown): value is RevenueContribution;
202
+ /**
203
+ * Validate that a value is a valid revenue contribution.
204
+ *
205
+ * @param value - The value to validate
206
+ * @throws {Error} If the value is not a valid revenue contribution
207
+ */
208
+ declare function validateRevenueContribution(value: unknown): void;
209
+
183
210
  /**
184
211
  * Represents metrics for a single referrer independent of other referrers.
185
212
  */
@@ -200,8 +227,19 @@ interface ReferrerMetrics {
200
227
  * the {@link ReferralProgramRules}.
201
228
  */
202
229
  totalIncrementalDuration: Duration;
230
+ /**
231
+ * The total revenue contribution (in Wei) made to the ENS DAO by all referrals
232
+ * from this referrer.
233
+ *
234
+ * This is the sum of the total cost paid by registrants for all registrar actions
235
+ * where this address was the referrer.
236
+ *
237
+ * @invariant Guaranteed to be a non-negative bigint value (>= 0n)
238
+ * @invariant Never null (records with null `total` in the database are treated as 0 when summing)
239
+ */
240
+ totalRevenueContribution: RevenueContribution;
203
241
  }
204
- declare const buildReferrerMetrics: (referrer: Address, totalReferrals: number, totalIncrementalDuration: Duration) => ReferrerMetrics;
242
+ declare const buildReferrerMetrics: (referrer: Address, totalReferrals: number, totalIncrementalDuration: Duration, totalRevenueContribution: RevenueContribution) => ReferrerMetrics;
205
243
  declare const validateReferrerMetrics: (metrics: ReferrerMetrics) => void;
206
244
  declare const sortReferrerMetrics: (referrers: ReferrerMetrics[]) => ReferrerMetrics[];
207
245
  /**
@@ -318,6 +356,15 @@ interface AggregatedReferrerMetrics {
318
356
  * @invariant The sum of `totalIncrementalDuration` across all `RankedReferrerMetrics` in the list.
319
357
  */
320
358
  grandTotalIncrementalDuration: Duration;
359
+ /**
360
+ * The total revenue contribution (in Wei) to the ENS DAO from all referrals
361
+ * across all referrers on the leaderboard.
362
+ *
363
+ * This is the sum of `totalRevenueContribution` across all `RankedReferrerMetrics` in the list.
364
+ *
365
+ * @invariant Guaranteed to be a non-negative bigint value (>= 0n)
366
+ */
367
+ grandTotalRevenueContribution: RevenueContribution;
321
368
  /**
322
369
  * @invariant The sum of `finalScore` across all `RankedReferrerMetrics` where `isQualified` is `true`.
323
370
  */
@@ -441,7 +488,7 @@ interface ReferrerLeaderboardPageParams {
441
488
  * @invariant Must be a positive integer (>= 1) and less than or equal to {@link REFERRERS_PER_LEADERBOARD_PAGE_MAX}
442
489
  * @default {@link REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT}
443
490
  */
444
- itemsPerPage?: number;
491
+ recordsPerPage?: number;
445
492
  }
446
493
  declare const buildReferrerLeaderboardPageParams: (params: ReferrerLeaderboardPageParams) => Required<ReferrerLeaderboardPageParams>;
447
494
  interface ReferrerLeaderboardPageContext extends Required<ReferrerLeaderboardPageParams> {
@@ -457,7 +504,7 @@ interface ReferrerLeaderboardPageContext extends Required<ReferrerLeaderboardPag
457
504
  totalPages: number;
458
505
  /**
459
506
  * Indicates if there is a next page available
460
- * @invariant true if and only if (`page` * `itemsPerPage` < `total`)
507
+ * @invariant true if and only if (`page` * `recordsPerPage` < `total`)
461
508
  */
462
509
  hasNext: boolean;
463
510
  /**
@@ -498,9 +545,9 @@ interface ReferrerLeaderboardPage {
498
545
  rules: ReferralProgramRules;
499
546
  /**
500
547
  * Ordered list of {@link AwardedReferrerMetrics} for the {@link ReferrerLeaderboardPage}
501
- * described by `paginationContext` within the related {@link ReferrerLeaderboard}.
548
+ * described by `pageContext` within the related {@link ReferrerLeaderboard}.
502
549
  *
503
- * @invariant Array will be empty if `paginationContext.totalRecords` is 0.
550
+ * @invariant Array will be empty if `pageContext.totalRecords` is 0.
504
551
  * @invariant Array entries are ordered by `rank` (descending).
505
552
  */
506
553
  referrers: AwardedReferrerMetrics[];
@@ -512,13 +559,13 @@ interface ReferrerLeaderboardPage {
512
559
  * The {@link ReferrerLeaderboardPageContext} of this {@link ReferrerLeaderboardPage} relative to the overall
513
560
  * {@link ReferrerLeaderboard}.
514
561
  */
515
- paginationContext: ReferrerLeaderboardPageContext;
562
+ pageContext: ReferrerLeaderboardPageContext;
516
563
  /**
517
564
  * The {@link UnixTimestamp} of when the data used to build the {@link ReferrerLeaderboardPage} was accurate as of.
518
565
  */
519
566
  accurateAsOf: UnixTimestamp;
520
567
  }
521
- declare const getReferrerLeaderboardPage: (paginationParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPage;
568
+ declare const getReferrerLeaderboardPage: (pageParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPage;
522
569
 
523
570
  /**
524
571
  * Build a URL to the official ENS manager app
@@ -637,4 +684,36 @@ type ReferrerDetail = ReferrerDetailRanked | ReferrerDetailUnranked;
637
684
  */
638
685
  declare const getReferrerDetail: (referrer: Address, leaderboard: ReferrerLeaderboard) => ReferrerDetail;
639
686
 
640
- 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 ReferrerDetail, type ReferrerDetailRanked, type ReferrerDetailTypeId, ReferrerDetailTypeIds, type ReferrerDetailUnranked, type ReferrerLeaderboard, type ReferrerLeaderboardPage, type ReferrerLeaderboardPageContext, type ReferrerLeaderboardPageParams, type ReferrerMetrics, type ReferrerMetricsForComparison, type ReferrerRank, type ReferrerScore, 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, calcReferrerAwardPoolShare, calcReferrerFinalScore, calcReferrerFinalScoreBoost, calcReferrerFinalScoreMultiplier, calcReferrerScore, compareReferrerMetrics, decodeEncodedReferrer, getReferrerDetail, getReferrerLeaderboardPage, isFiniteNonNegativeNumber, isInteger, isNonNegativeInteger, isPositiveInteger, isReferrerQualified, isValidDuration, isValidReferrerScore, isValidUSDQuantity, normalizeAddress, sortReferrerMetrics, validateAggregatedReferrerMetrics, validateAwardedReferrerMetrics, validateDuration, validateLowercaseAddress, validateNonNegativeInteger, validateRankedReferrerMetrics, validateReferralProgramRules, validateReferrerLeaderboardPageContext, validateReferrerMetrics, validateReferrerRank, validateReferrerScore, validateScoredReferrerMetrics, validateUSDQuantity, validateUnixTimestamp, validateUnrankedReferrerMetrics };
687
+ /**
688
+ * The type of referral program's status.
689
+ */
690
+ declare const ReferralProgramStatuses: {
691
+ /**
692
+ * Represents a referral program that has been announced, but hasn't started yet.
693
+ */
694
+ readonly Scheduled: "Scheduled";
695
+ /**
696
+ * Represents a currently ongoing referral program.
697
+ */
698
+ readonly Active: "Active";
699
+ /**
700
+ * Represents a referral program that has already ended.
701
+ */
702
+ readonly Closed: "Closed";
703
+ };
704
+ /**
705
+ * The derived string union of possible {@link ReferralProgramStatuses}.
706
+ */
707
+ type ReferralProgramStatusId = (typeof ReferralProgramStatuses)[keyof typeof ReferralProgramStatuses];
708
+ /**
709
+ * Calculate the status of the referral program based on the current date
710
+ * and program's timeframe available in its rules.
711
+ *
712
+ * @param referralProgramRules - Related referral program's rules containing
713
+ * program's start date and end date.
714
+ *
715
+ * @param now - Current date in {@link UnixTimestamp} format.
716
+ */
717
+ declare const calcReferralProgramStatus: (referralProgramRules: ReferralProgramRules, now: UnixTimestamp) => ReferralProgramStatusId;
718
+
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 };
package/dist/index.js CHANGED
@@ -31,6 +31,19 @@ var isFiniteNonNegativeNumber = (value) => {
31
31
  return value >= 0 && Number.isFinite(value);
32
32
  };
33
33
 
34
+ // src/revenue-contribution.ts
35
+ function isValidRevenueContribution(value) {
36
+ return typeof value === "bigint" && value >= 0n;
37
+ }
38
+ function validateRevenueContribution(value) {
39
+ if (typeof value !== "bigint") {
40
+ throw new Error(`Invalid revenue contribution: must be a bigint, got: ${typeof value}`);
41
+ }
42
+ if (value < 0n) {
43
+ throw new Error(`Invalid revenue contribution: must be non-negative, got: ${value.toString()}`);
44
+ }
45
+ }
46
+
34
47
  // src/time.ts
35
48
  var validateUnixTimestamp = (timestamp) => {
36
49
  if (!isInteger(timestamp)) {
@@ -66,17 +79,20 @@ var calcReferrerScore = (totalIncrementalDuration) => {
66
79
  var validateAggregatedReferrerMetrics = (metrics) => {
67
80
  validateNonNegativeInteger(metrics.grandTotalReferrals);
68
81
  validateDuration(metrics.grandTotalIncrementalDuration);
82
+ validateRevenueContribution(metrics.grandTotalRevenueContribution);
69
83
  validateReferrerScore(metrics.grandTotalQualifiedReferrersFinalScore);
70
84
  validateReferrerScore(metrics.minFinalScoreToQualify);
71
85
  };
72
86
  var buildAggregatedReferrerMetrics = (referrers, rules) => {
73
87
  let grandTotalReferrals = 0;
74
88
  let grandTotalIncrementalDuration = 0;
89
+ let grandTotalRevenueContribution = 0n;
75
90
  let grandTotalQualifiedReferrersFinalScore = 0;
76
91
  let minFinalScoreToQualify = Number.MAX_SAFE_INTEGER;
77
92
  for (const referrer of referrers) {
78
93
  grandTotalReferrals += referrer.totalReferrals;
79
94
  grandTotalIncrementalDuration += referrer.totalIncrementalDuration;
95
+ grandTotalRevenueContribution += referrer.totalRevenueContribution;
80
96
  if (referrer.isQualified) {
81
97
  grandTotalQualifiedReferrersFinalScore += referrer.finalScore;
82
98
  if (referrer.finalScore < minFinalScoreToQualify) {
@@ -98,6 +114,7 @@ var buildAggregatedReferrerMetrics = (referrers, rules) => {
98
114
  const result = {
99
115
  grandTotalReferrals,
100
116
  grandTotalIncrementalDuration,
117
+ grandTotalRevenueContribution,
101
118
  grandTotalQualifiedReferrersFinalScore,
102
119
  minFinalScoreToQualify
103
120
  };
@@ -178,11 +195,12 @@ var compareReferrerMetrics = (a, b) => {
178
195
  };
179
196
 
180
197
  // src/referrer-metrics.ts
181
- var buildReferrerMetrics = (referrer, totalReferrals, totalIncrementalDuration) => {
198
+ var buildReferrerMetrics = (referrer, totalReferrals, totalIncrementalDuration, totalRevenueContribution) => {
182
199
  const result = {
183
200
  referrer: normalizeAddress(referrer),
184
201
  totalReferrals,
185
- totalIncrementalDuration
202
+ totalIncrementalDuration,
203
+ totalRevenueContribution
186
204
  };
187
205
  validateReferrerMetrics(result);
188
206
  return result;
@@ -191,6 +209,7 @@ var validateReferrerMetrics = (metrics) => {
191
209
  validateLowercaseAddress(metrics.referrer);
192
210
  validateNonNegativeInteger(metrics.totalReferrals);
193
211
  validateDuration(metrics.totalIncrementalDuration);
212
+ validateRevenueContribution(metrics.totalRevenueContribution);
194
213
  };
195
214
  var sortReferrerMetrics = (referrers) => {
196
215
  return [...referrers].sort(compareReferrerMetrics);
@@ -302,6 +321,11 @@ var validateUnrankedReferrerMetrics = (metrics) => {
302
321
  `Invalid UnrankedReferrerMetrics: totalIncrementalDuration must be 0, got: ${metrics.totalIncrementalDuration}.`
303
322
  );
304
323
  }
324
+ if (metrics.totalRevenueContribution !== 0n) {
325
+ throw new Error(
326
+ `Invalid UnrankedReferrerMetrics: totalRevenueContribution must be 0n, got: ${metrics.totalRevenueContribution.toString()}.`
327
+ );
328
+ }
305
329
  if (metrics.score !== 0) {
306
330
  throw new Error(`Invalid UnrankedReferrerMetrics: score must be 0, got: ${metrics.score}.`);
307
331
  }
@@ -327,7 +351,7 @@ var validateUnrankedReferrerMetrics = (metrics) => {
327
351
  }
328
352
  };
329
353
  var buildUnrankedReferrerMetrics = (referrer) => {
330
- const baseMetrics = buildReferrerMetrics(referrer, 0, 0);
354
+ const baseMetrics = buildReferrerMetrics(referrer, 0, 0, 0n);
331
355
  const scoredMetrics = buildScoredReferrerMetrics(baseMetrics);
332
356
  const result = {
333
357
  ...scoredMetrics,
@@ -386,21 +410,21 @@ var validateReferrerLeaderboardPageParams = (params) => {
386
410
  `Invalid ReferrerLeaderboardPageParams: ${params.page}. page must be a positive integer.`
387
411
  );
388
412
  }
389
- if (params.itemsPerPage !== void 0 && !isPositiveInteger(params.itemsPerPage)) {
413
+ if (params.recordsPerPage !== void 0 && !isPositiveInteger(params.recordsPerPage)) {
390
414
  throw new Error(
391
- `Invalid ReferrerLeaderboardPageParams: ${params.itemsPerPage}. itemsPerPage must be a positive integer.`
415
+ `Invalid ReferrerLeaderboardPageParams: ${params.recordsPerPage}. recordsPerPage must be a positive integer.`
392
416
  );
393
417
  }
394
- if (params.itemsPerPage !== void 0 && params.itemsPerPage > REFERRERS_PER_LEADERBOARD_PAGE_MAX) {
418
+ if (params.recordsPerPage !== void 0 && params.recordsPerPage > REFERRERS_PER_LEADERBOARD_PAGE_MAX) {
395
419
  throw new Error(
396
- `Invalid ReferrerLeaderboardPageParams: ${params.itemsPerPage}. itemsPerPage must be less than or equal to ${REFERRERS_PER_LEADERBOARD_PAGE_MAX}.`
420
+ `Invalid ReferrerLeaderboardPageParams: ${params.recordsPerPage}. recordsPerPage must be less than or equal to ${REFERRERS_PER_LEADERBOARD_PAGE_MAX}.`
397
421
  );
398
422
  }
399
423
  };
400
424
  var buildReferrerLeaderboardPageParams = (params) => {
401
425
  const result = {
402
426
  page: params.page ?? 1,
403
- itemsPerPage: params.itemsPerPage ?? REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT
427
+ recordsPerPage: params.recordsPerPage ?? REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT
404
428
  };
405
429
  validateReferrerLeaderboardPageParams(result);
406
430
  return result;
@@ -412,13 +436,13 @@ var validateReferrerLeaderboardPageContext = (context) => {
412
436
  `Invalid ReferrerLeaderboardPageContext: total must be a non-negative integer but is ${context.totalRecords}.`
413
437
  );
414
438
  }
415
- const startIndex = (context.page - 1) * context.itemsPerPage;
416
- const endIndex = startIndex + context.itemsPerPage;
439
+ const startIndex = (context.page - 1) * context.recordsPerPage;
440
+ const endIndex = startIndex + context.recordsPerPage;
417
441
  if (!context.hasNext && endIndex < context.totalRecords) {
418
442
  throw new Error(
419
443
  `Invalid ReferrerLeaderboardPageContext: if hasNext is false, endIndex (${endIndex}) must be greater than or equal to total (${context.totalRecords}).`
420
444
  );
421
- } else if (context.hasNext && context.page * context.itemsPerPage >= context.totalRecords) {
445
+ } else if (context.hasNext && context.page * context.recordsPerPage >= context.totalRecords) {
422
446
  throw new Error(
423
447
  `Invalid ReferrerLeaderboardPageContext: if hasNext is true, endIndex (${endIndex}) must be less than total (${context.totalRecords}).`
424
448
  );
@@ -436,7 +460,7 @@ var validateReferrerLeaderboardPageContext = (context) => {
436
460
  var buildReferrerLeaderboardPageContext = (optionalParams, leaderboard) => {
437
461
  const materializedParams = buildReferrerLeaderboardPageParams(optionalParams);
438
462
  const totalRecords = leaderboard.referrers.size;
439
- const totalPages = Math.max(1, Math.ceil(totalRecords / materializedParams.itemsPerPage));
463
+ const totalPages = Math.max(1, Math.ceil(totalRecords / materializedParams.recordsPerPage));
440
464
  if (materializedParams.page > totalPages) {
441
465
  throw new Error(
442
466
  `Invalid ReferrerLeaderboardPageContext: page ${materializedParams.page} exceeds total pages ${totalPages}.`
@@ -453,8 +477,8 @@ var buildReferrerLeaderboardPageContext = (optionalParams, leaderboard) => {
453
477
  endIndex: void 0
454
478
  };
455
479
  }
456
- const startIndex = (materializedParams.page - 1) * materializedParams.itemsPerPage;
457
- const maxTheoreticalIndexOnPage = startIndex + (materializedParams.itemsPerPage - 1);
480
+ const startIndex = (materializedParams.page - 1) * materializedParams.recordsPerPage;
481
+ const maxTheoreticalIndexOnPage = startIndex + (materializedParams.recordsPerPage - 1);
458
482
  const endIndex = Math.min(maxTheoreticalIndexOnPage, totalRecords - 1);
459
483
  const hasNext = maxTheoreticalIndexOnPage < totalRecords - 1;
460
484
  const hasPrev = materializedParams.page > 1;
@@ -470,13 +494,13 @@ var buildReferrerLeaderboardPageContext = (optionalParams, leaderboard) => {
470
494
  validateReferrerLeaderboardPageContext(result);
471
495
  return result;
472
496
  };
473
- var getReferrerLeaderboardPage = (paginationParams, leaderboard) => {
474
- const paginationContext = buildReferrerLeaderboardPageContext(paginationParams, leaderboard);
497
+ var getReferrerLeaderboardPage = (pageParams, leaderboard) => {
498
+ const pageContext = buildReferrerLeaderboardPageContext(pageParams, leaderboard);
475
499
  let referrers;
476
- if (paginationContext.totalRecords > 0 && typeof paginationContext.startIndex !== "undefined" && typeof paginationContext.endIndex !== "undefined") {
500
+ if (pageContext.totalRecords > 0 && typeof pageContext.startIndex !== "undefined" && typeof pageContext.endIndex !== "undefined") {
477
501
  referrers = Array.from(leaderboard.referrers.values()).slice(
478
- paginationContext.startIndex,
479
- paginationContext.endIndex + 1
502
+ pageContext.startIndex,
503
+ pageContext.endIndex + 1
480
504
  // For `slice`, this is exclusive of the element at the index 'end'. We need it to be inclusive, hence plus one.
481
505
  );
482
506
  } else {
@@ -486,7 +510,7 @@ var getReferrerLeaderboardPage = (paginationParams, leaderboard) => {
486
510
  rules: leaderboard.rules,
487
511
  referrers,
488
512
  aggregatedMetrics: leaderboard.aggregatedMetrics,
489
- paginationContext,
513
+ pageContext,
490
514
  accurateAsOf: leaderboard.accurateAsOf
491
515
  };
492
516
  };
@@ -557,6 +581,27 @@ var buildReferralProgramRules = (totalAwardPoolValue, maxQualifiedReferrers, sta
557
581
  validateReferralProgramRules(result);
558
582
  return result;
559
583
  };
584
+
585
+ // src/status.ts
586
+ var ReferralProgramStatuses = {
587
+ /**
588
+ * Represents a referral program that has been announced, but hasn't started yet.
589
+ */
590
+ Scheduled: "Scheduled",
591
+ /**
592
+ * Represents a currently ongoing referral program.
593
+ */
594
+ Active: "Active",
595
+ /**
596
+ * Represents a referral program that has already ended.
597
+ */
598
+ Closed: "Closed"
599
+ };
600
+ var calcReferralProgramStatus = (referralProgramRules, now) => {
601
+ if (now < referralProgramRules.startTime) return ReferralProgramStatuses.Scheduled;
602
+ if (now > referralProgramRules.endTime) return ReferralProgramStatuses.Closed;
603
+ return ReferralProgramStatuses.Active;
604
+ };
560
605
  export {
561
606
  ENCODED_REFERRER_BYTE_LENGTH,
562
607
  ENCODED_REFERRER_BYTE_OFFSET,
@@ -567,6 +612,7 @@ export {
567
612
  EXPECTED_ENCODED_REFERRER_PADDING,
568
613
  REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT,
569
614
  REFERRERS_PER_LEADERBOARD_PAGE_MAX,
615
+ ReferralProgramStatuses,
570
616
  ReferrerDetailTypeIds,
571
617
  SECONDS_PER_YEAR,
572
618
  ZERO_ENCODED_REFERRER,
@@ -582,6 +628,7 @@ export {
582
628
  buildReferrerMetrics,
583
629
  buildScoredReferrerMetrics,
584
630
  buildUnrankedReferrerMetrics,
631
+ calcReferralProgramStatus,
585
632
  calcReferrerAwardPoolShare,
586
633
  calcReferrerFinalScore,
587
634
  calcReferrerFinalScoreBoost,
@@ -598,6 +645,7 @@ export {
598
645
  isReferrerQualified,
599
646
  isValidDuration,
600
647
  isValidReferrerScore,
648
+ isValidRevenueContribution,
601
649
  isValidUSDQuantity,
602
650
  normalizeAddress,
603
651
  sortReferrerMetrics,
@@ -612,6 +660,7 @@ export {
612
660
  validateReferrerMetrics,
613
661
  validateReferrerRank,
614
662
  validateReferrerScore,
663
+ validateRevenueContribution,
615
664
  validateScoredReferrerMetrics,
616
665
  validateUSDQuantity,
617
666
  validateUnixTimestamp,