@namehash/ens-referrals 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +117 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +139 -9
- package/dist/index.d.ts +139 -9
- package/dist/index.js +117 -26
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -279,6 +279,31 @@ interface AwardedReferrerMetrics extends RankedReferrerMetrics {
|
|
|
279
279
|
}
|
|
280
280
|
declare const validateAwardedReferrerMetrics: (referrer: AwardedReferrerMetrics, rules: ReferralProgramRules) => void;
|
|
281
281
|
declare const buildAwardedReferrerMetrics: (referrer: RankedReferrerMetrics, aggregatedMetrics: AggregatedReferrerMetrics, rules: ReferralProgramRules) => AwardedReferrerMetrics;
|
|
282
|
+
/**
|
|
283
|
+
* Extends {@link AwardedReferrerMetrics} but with rank set to null to represent
|
|
284
|
+
* a referrer who is not on the leaderboard (has zero referrals within the rules associated with the leaderboard).
|
|
285
|
+
*/
|
|
286
|
+
interface UnrankedReferrerMetrics extends Omit<AwardedReferrerMetrics, "rank" | "isQualified"> {
|
|
287
|
+
/**
|
|
288
|
+
* The referrer is not on the leaderboard and therefore has no rank.
|
|
289
|
+
*/
|
|
290
|
+
rank: null;
|
|
291
|
+
/**
|
|
292
|
+
* Always false for unranked referrers.
|
|
293
|
+
*/
|
|
294
|
+
isQualified: false;
|
|
295
|
+
}
|
|
296
|
+
declare const validateUnrankedReferrerMetrics: (metrics: UnrankedReferrerMetrics) => void;
|
|
297
|
+
/**
|
|
298
|
+
* Build an unranked zero-score referrer record for a referrer address that is not in the leaderboard.
|
|
299
|
+
*
|
|
300
|
+
* This is useful when you want to return a referrer record for an address that has no referrals
|
|
301
|
+
* and is not qualified for the leaderboard.
|
|
302
|
+
*
|
|
303
|
+
* @param referrer - The referrer address
|
|
304
|
+
* @returns An {@link UnrankedReferrerMetrics} with zero values for all metrics and null rank
|
|
305
|
+
*/
|
|
306
|
+
declare const buildUnrankedReferrerMetrics: (referrer: Address) => UnrankedReferrerMetrics;
|
|
282
307
|
|
|
283
308
|
/**
|
|
284
309
|
* Represents aggregated metrics for a list of `RankedReferrerMetrics`.
|
|
@@ -404,7 +429,7 @@ declare const REFERRERS_PER_LEADERBOARD_PAGE_MAX = 100;
|
|
|
404
429
|
/**
|
|
405
430
|
* Pagination params for leaderboard queries.
|
|
406
431
|
*/
|
|
407
|
-
interface
|
|
432
|
+
interface ReferrerLeaderboardPageParams {
|
|
408
433
|
/**
|
|
409
434
|
* Requested referrer leaderboard page number (1-indexed)
|
|
410
435
|
* @invariant Must be a positive integer (>= 1)
|
|
@@ -418,8 +443,8 @@ interface ReferrerLeaderboardPaginationParams {
|
|
|
418
443
|
*/
|
|
419
444
|
itemsPerPage?: number;
|
|
420
445
|
}
|
|
421
|
-
declare const
|
|
422
|
-
interface
|
|
446
|
+
declare const buildReferrerLeaderboardPageParams: (params: ReferrerLeaderboardPageParams) => Required<ReferrerLeaderboardPageParams>;
|
|
447
|
+
interface ReferrerLeaderboardPageContext extends Required<ReferrerLeaderboardPageParams> {
|
|
423
448
|
/**
|
|
424
449
|
* Total number of referrers across all leaderboard pages
|
|
425
450
|
* @invariant Guaranteed to be a non-negative integer (>= 0)
|
|
@@ -460,8 +485,8 @@ interface ReferrerLeaderboardPaginationContext extends Required<ReferrerLeaderbo
|
|
|
460
485
|
*/
|
|
461
486
|
endIndex?: number;
|
|
462
487
|
}
|
|
463
|
-
declare const
|
|
464
|
-
declare const
|
|
488
|
+
declare const validateReferrerLeaderboardPageContext: (context: ReferrerLeaderboardPageContext) => void;
|
|
489
|
+
declare const buildReferrerLeaderboardPageContext: (optionalParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPageContext;
|
|
465
490
|
/**
|
|
466
491
|
* A page of referrers from the referrer leaderboard.
|
|
467
492
|
*/
|
|
@@ -484,16 +509,16 @@ interface ReferrerLeaderboardPage {
|
|
|
484
509
|
*/
|
|
485
510
|
aggregatedMetrics: AggregatedReferrerMetrics;
|
|
486
511
|
/**
|
|
487
|
-
* The {@link
|
|
512
|
+
* The {@link ReferrerLeaderboardPageContext} of this {@link ReferrerLeaderboardPage} relative to the overall
|
|
488
513
|
* {@link ReferrerLeaderboard}.
|
|
489
514
|
*/
|
|
490
|
-
paginationContext:
|
|
515
|
+
paginationContext: ReferrerLeaderboardPageContext;
|
|
491
516
|
/**
|
|
492
517
|
* The {@link UnixTimestamp} of when the data used to build the {@link ReferrerLeaderboardPage} was accurate as of.
|
|
493
518
|
*/
|
|
494
519
|
accurateAsOf: UnixTimestamp;
|
|
495
520
|
}
|
|
496
|
-
declare const getReferrerLeaderboardPage: (paginationParams:
|
|
521
|
+
declare const getReferrerLeaderboardPage: (paginationParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPage;
|
|
497
522
|
|
|
498
523
|
/**
|
|
499
524
|
* Build a URL to the official ENS manager app
|
|
@@ -507,4 +532,109 @@ declare const isPositiveInteger: (value: number) => boolean;
|
|
|
507
532
|
declare const validateNonNegativeInteger: (value: number) => void;
|
|
508
533
|
declare const isFiniteNonNegativeNumber: (value: number) => boolean;
|
|
509
534
|
|
|
510
|
-
|
|
535
|
+
/**
|
|
536
|
+
* The type of referrer detail data.
|
|
537
|
+
*/
|
|
538
|
+
declare const ReferrerDetailTypeIds: {
|
|
539
|
+
/**
|
|
540
|
+
* Represents a referrer who is ranked on the leaderboard.
|
|
541
|
+
*/
|
|
542
|
+
readonly Ranked: "ranked";
|
|
543
|
+
/**
|
|
544
|
+
* Represents a referrer who is not ranked on the leaderboard.
|
|
545
|
+
*/
|
|
546
|
+
readonly Unranked: "unranked";
|
|
547
|
+
};
|
|
548
|
+
/**
|
|
549
|
+
* The derived string union of possible {@link ReferrerDetailTypeIds}.
|
|
550
|
+
*/
|
|
551
|
+
type ReferrerDetailTypeId = (typeof ReferrerDetailTypeIds)[keyof typeof ReferrerDetailTypeIds];
|
|
552
|
+
/**
|
|
553
|
+
* Referrer detail data for a specific referrer address on the leaderboard.
|
|
554
|
+
*
|
|
555
|
+
* Includes the referrer's awarded metrics from the leaderboard plus timestamp.
|
|
556
|
+
*
|
|
557
|
+
* Invariants:
|
|
558
|
+
* - `type` is always {@link ReferrerDetailTypeIds.Ranked}.
|
|
559
|
+
*
|
|
560
|
+
* @see {@link AwardedReferrerMetrics}
|
|
561
|
+
*/
|
|
562
|
+
interface ReferrerDetailRanked {
|
|
563
|
+
/**
|
|
564
|
+
* The type of referrer detail data.
|
|
565
|
+
*/
|
|
566
|
+
type: typeof ReferrerDetailTypeIds.Ranked;
|
|
567
|
+
/**
|
|
568
|
+
* The {@link ReferralProgramRules} used to calculate the {@link AwardedReferrerMetrics}.
|
|
569
|
+
*/
|
|
570
|
+
rules: ReferralProgramRules;
|
|
571
|
+
/**
|
|
572
|
+
* The awarded referrer metrics from the leaderboard.
|
|
573
|
+
*
|
|
574
|
+
* Contains all calculated metrics including score, rank, qualification status,
|
|
575
|
+
* and award pool share information.
|
|
576
|
+
*/
|
|
577
|
+
referrer: AwardedReferrerMetrics;
|
|
578
|
+
/**
|
|
579
|
+
* Aggregated metrics for all referrers on the leaderboard.
|
|
580
|
+
*/
|
|
581
|
+
aggregatedMetrics: AggregatedReferrerMetrics;
|
|
582
|
+
/**
|
|
583
|
+
* The {@link UnixTimestamp} of when the data used to build the {@link ReferrerDetailData} was accurate as of.
|
|
584
|
+
*/
|
|
585
|
+
accurateAsOf: UnixTimestamp;
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* Referrer detail data for a specific referrer address NOT on the leaderboard.
|
|
589
|
+
*
|
|
590
|
+
* Includes the referrer's unranked metrics (with null rank and isQualified: false) plus timestamp.
|
|
591
|
+
*
|
|
592
|
+
* Invariants:
|
|
593
|
+
* - `type` is always {@link ReferrerDetailTypeIds.Unranked}.
|
|
594
|
+
*
|
|
595
|
+
* @see {@link UnrankedReferrerMetrics}
|
|
596
|
+
*/
|
|
597
|
+
interface ReferrerDetailUnranked {
|
|
598
|
+
/**
|
|
599
|
+
* The type of referrer detail data.
|
|
600
|
+
*/
|
|
601
|
+
type: typeof ReferrerDetailTypeIds.Unranked;
|
|
602
|
+
/**
|
|
603
|
+
* The {@link ReferralProgramRules} used to calculate the {@link UnrankedReferrerMetrics}.
|
|
604
|
+
*/
|
|
605
|
+
rules: ReferralProgramRules;
|
|
606
|
+
/**
|
|
607
|
+
* The unranked referrer metrics (not on the leaderboard).
|
|
608
|
+
*
|
|
609
|
+
* Contains all calculated metrics with rank set to null and isQualified set to false.
|
|
610
|
+
*/
|
|
611
|
+
referrer: UnrankedReferrerMetrics;
|
|
612
|
+
/**
|
|
613
|
+
* Aggregated metrics for all referrers on the leaderboard.
|
|
614
|
+
*/
|
|
615
|
+
aggregatedMetrics: AggregatedReferrerMetrics;
|
|
616
|
+
/**
|
|
617
|
+
* The {@link UnixTimestamp} of when the data used to build the {@link UnrankedReferrerDetailData} was accurate as of.
|
|
618
|
+
*/
|
|
619
|
+
accurateAsOf: UnixTimestamp;
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* Referrer detail data for a specific referrer address.
|
|
623
|
+
*
|
|
624
|
+
* Use the `type` field to determine the specific type interpretation
|
|
625
|
+
* at runtime.
|
|
626
|
+
*/
|
|
627
|
+
type ReferrerDetail = ReferrerDetailRanked | ReferrerDetailUnranked;
|
|
628
|
+
/**
|
|
629
|
+
* Get the detail for a specific referrer from the leaderboard.
|
|
630
|
+
*
|
|
631
|
+
* Returns a {@link ReferrerDetailRanked} if the referrer is on the leaderboard,
|
|
632
|
+
* or a {@link ReferrerDetailUnranked} if the referrer has no referrals.
|
|
633
|
+
*
|
|
634
|
+
* @param referrer - The referrer address to look up
|
|
635
|
+
* @param leaderboard - The referrer leaderboard to query
|
|
636
|
+
* @returns The appropriate {@link ReferrerDetail} (ranked or unranked)
|
|
637
|
+
*/
|
|
638
|
+
declare const getReferrerDetail: (referrer: Address, leaderboard: ReferrerLeaderboard) => ReferrerDetail;
|
|
639
|
+
|
|
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 };
|
package/dist/index.d.ts
CHANGED
|
@@ -279,6 +279,31 @@ interface AwardedReferrerMetrics extends RankedReferrerMetrics {
|
|
|
279
279
|
}
|
|
280
280
|
declare const validateAwardedReferrerMetrics: (referrer: AwardedReferrerMetrics, rules: ReferralProgramRules) => void;
|
|
281
281
|
declare const buildAwardedReferrerMetrics: (referrer: RankedReferrerMetrics, aggregatedMetrics: AggregatedReferrerMetrics, rules: ReferralProgramRules) => AwardedReferrerMetrics;
|
|
282
|
+
/**
|
|
283
|
+
* Extends {@link AwardedReferrerMetrics} but with rank set to null to represent
|
|
284
|
+
* a referrer who is not on the leaderboard (has zero referrals within the rules associated with the leaderboard).
|
|
285
|
+
*/
|
|
286
|
+
interface UnrankedReferrerMetrics extends Omit<AwardedReferrerMetrics, "rank" | "isQualified"> {
|
|
287
|
+
/**
|
|
288
|
+
* The referrer is not on the leaderboard and therefore has no rank.
|
|
289
|
+
*/
|
|
290
|
+
rank: null;
|
|
291
|
+
/**
|
|
292
|
+
* Always false for unranked referrers.
|
|
293
|
+
*/
|
|
294
|
+
isQualified: false;
|
|
295
|
+
}
|
|
296
|
+
declare const validateUnrankedReferrerMetrics: (metrics: UnrankedReferrerMetrics) => void;
|
|
297
|
+
/**
|
|
298
|
+
* Build an unranked zero-score referrer record for a referrer address that is not in the leaderboard.
|
|
299
|
+
*
|
|
300
|
+
* This is useful when you want to return a referrer record for an address that has no referrals
|
|
301
|
+
* and is not qualified for the leaderboard.
|
|
302
|
+
*
|
|
303
|
+
* @param referrer - The referrer address
|
|
304
|
+
* @returns An {@link UnrankedReferrerMetrics} with zero values for all metrics and null rank
|
|
305
|
+
*/
|
|
306
|
+
declare const buildUnrankedReferrerMetrics: (referrer: Address) => UnrankedReferrerMetrics;
|
|
282
307
|
|
|
283
308
|
/**
|
|
284
309
|
* Represents aggregated metrics for a list of `RankedReferrerMetrics`.
|
|
@@ -404,7 +429,7 @@ declare const REFERRERS_PER_LEADERBOARD_PAGE_MAX = 100;
|
|
|
404
429
|
/**
|
|
405
430
|
* Pagination params for leaderboard queries.
|
|
406
431
|
*/
|
|
407
|
-
interface
|
|
432
|
+
interface ReferrerLeaderboardPageParams {
|
|
408
433
|
/**
|
|
409
434
|
* Requested referrer leaderboard page number (1-indexed)
|
|
410
435
|
* @invariant Must be a positive integer (>= 1)
|
|
@@ -418,8 +443,8 @@ interface ReferrerLeaderboardPaginationParams {
|
|
|
418
443
|
*/
|
|
419
444
|
itemsPerPage?: number;
|
|
420
445
|
}
|
|
421
|
-
declare const
|
|
422
|
-
interface
|
|
446
|
+
declare const buildReferrerLeaderboardPageParams: (params: ReferrerLeaderboardPageParams) => Required<ReferrerLeaderboardPageParams>;
|
|
447
|
+
interface ReferrerLeaderboardPageContext extends Required<ReferrerLeaderboardPageParams> {
|
|
423
448
|
/**
|
|
424
449
|
* Total number of referrers across all leaderboard pages
|
|
425
450
|
* @invariant Guaranteed to be a non-negative integer (>= 0)
|
|
@@ -460,8 +485,8 @@ interface ReferrerLeaderboardPaginationContext extends Required<ReferrerLeaderbo
|
|
|
460
485
|
*/
|
|
461
486
|
endIndex?: number;
|
|
462
487
|
}
|
|
463
|
-
declare const
|
|
464
|
-
declare const
|
|
488
|
+
declare const validateReferrerLeaderboardPageContext: (context: ReferrerLeaderboardPageContext) => void;
|
|
489
|
+
declare const buildReferrerLeaderboardPageContext: (optionalParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPageContext;
|
|
465
490
|
/**
|
|
466
491
|
* A page of referrers from the referrer leaderboard.
|
|
467
492
|
*/
|
|
@@ -484,16 +509,16 @@ interface ReferrerLeaderboardPage {
|
|
|
484
509
|
*/
|
|
485
510
|
aggregatedMetrics: AggregatedReferrerMetrics;
|
|
486
511
|
/**
|
|
487
|
-
* The {@link
|
|
512
|
+
* The {@link ReferrerLeaderboardPageContext} of this {@link ReferrerLeaderboardPage} relative to the overall
|
|
488
513
|
* {@link ReferrerLeaderboard}.
|
|
489
514
|
*/
|
|
490
|
-
paginationContext:
|
|
515
|
+
paginationContext: ReferrerLeaderboardPageContext;
|
|
491
516
|
/**
|
|
492
517
|
* The {@link UnixTimestamp} of when the data used to build the {@link ReferrerLeaderboardPage} was accurate as of.
|
|
493
518
|
*/
|
|
494
519
|
accurateAsOf: UnixTimestamp;
|
|
495
520
|
}
|
|
496
|
-
declare const getReferrerLeaderboardPage: (paginationParams:
|
|
521
|
+
declare const getReferrerLeaderboardPage: (paginationParams: ReferrerLeaderboardPageParams, leaderboard: ReferrerLeaderboard) => ReferrerLeaderboardPage;
|
|
497
522
|
|
|
498
523
|
/**
|
|
499
524
|
* Build a URL to the official ENS manager app
|
|
@@ -507,4 +532,109 @@ declare const isPositiveInteger: (value: number) => boolean;
|
|
|
507
532
|
declare const validateNonNegativeInteger: (value: number) => void;
|
|
508
533
|
declare const isFiniteNonNegativeNumber: (value: number) => boolean;
|
|
509
534
|
|
|
510
|
-
|
|
535
|
+
/**
|
|
536
|
+
* The type of referrer detail data.
|
|
537
|
+
*/
|
|
538
|
+
declare const ReferrerDetailTypeIds: {
|
|
539
|
+
/**
|
|
540
|
+
* Represents a referrer who is ranked on the leaderboard.
|
|
541
|
+
*/
|
|
542
|
+
readonly Ranked: "ranked";
|
|
543
|
+
/**
|
|
544
|
+
* Represents a referrer who is not ranked on the leaderboard.
|
|
545
|
+
*/
|
|
546
|
+
readonly Unranked: "unranked";
|
|
547
|
+
};
|
|
548
|
+
/**
|
|
549
|
+
* The derived string union of possible {@link ReferrerDetailTypeIds}.
|
|
550
|
+
*/
|
|
551
|
+
type ReferrerDetailTypeId = (typeof ReferrerDetailTypeIds)[keyof typeof ReferrerDetailTypeIds];
|
|
552
|
+
/**
|
|
553
|
+
* Referrer detail data for a specific referrer address on the leaderboard.
|
|
554
|
+
*
|
|
555
|
+
* Includes the referrer's awarded metrics from the leaderboard plus timestamp.
|
|
556
|
+
*
|
|
557
|
+
* Invariants:
|
|
558
|
+
* - `type` is always {@link ReferrerDetailTypeIds.Ranked}.
|
|
559
|
+
*
|
|
560
|
+
* @see {@link AwardedReferrerMetrics}
|
|
561
|
+
*/
|
|
562
|
+
interface ReferrerDetailRanked {
|
|
563
|
+
/**
|
|
564
|
+
* The type of referrer detail data.
|
|
565
|
+
*/
|
|
566
|
+
type: typeof ReferrerDetailTypeIds.Ranked;
|
|
567
|
+
/**
|
|
568
|
+
* The {@link ReferralProgramRules} used to calculate the {@link AwardedReferrerMetrics}.
|
|
569
|
+
*/
|
|
570
|
+
rules: ReferralProgramRules;
|
|
571
|
+
/**
|
|
572
|
+
* The awarded referrer metrics from the leaderboard.
|
|
573
|
+
*
|
|
574
|
+
* Contains all calculated metrics including score, rank, qualification status,
|
|
575
|
+
* and award pool share information.
|
|
576
|
+
*/
|
|
577
|
+
referrer: AwardedReferrerMetrics;
|
|
578
|
+
/**
|
|
579
|
+
* Aggregated metrics for all referrers on the leaderboard.
|
|
580
|
+
*/
|
|
581
|
+
aggregatedMetrics: AggregatedReferrerMetrics;
|
|
582
|
+
/**
|
|
583
|
+
* The {@link UnixTimestamp} of when the data used to build the {@link ReferrerDetailData} was accurate as of.
|
|
584
|
+
*/
|
|
585
|
+
accurateAsOf: UnixTimestamp;
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* Referrer detail data for a specific referrer address NOT on the leaderboard.
|
|
589
|
+
*
|
|
590
|
+
* Includes the referrer's unranked metrics (with null rank and isQualified: false) plus timestamp.
|
|
591
|
+
*
|
|
592
|
+
* Invariants:
|
|
593
|
+
* - `type` is always {@link ReferrerDetailTypeIds.Unranked}.
|
|
594
|
+
*
|
|
595
|
+
* @see {@link UnrankedReferrerMetrics}
|
|
596
|
+
*/
|
|
597
|
+
interface ReferrerDetailUnranked {
|
|
598
|
+
/**
|
|
599
|
+
* The type of referrer detail data.
|
|
600
|
+
*/
|
|
601
|
+
type: typeof ReferrerDetailTypeIds.Unranked;
|
|
602
|
+
/**
|
|
603
|
+
* The {@link ReferralProgramRules} used to calculate the {@link UnrankedReferrerMetrics}.
|
|
604
|
+
*/
|
|
605
|
+
rules: ReferralProgramRules;
|
|
606
|
+
/**
|
|
607
|
+
* The unranked referrer metrics (not on the leaderboard).
|
|
608
|
+
*
|
|
609
|
+
* Contains all calculated metrics with rank set to null and isQualified set to false.
|
|
610
|
+
*/
|
|
611
|
+
referrer: UnrankedReferrerMetrics;
|
|
612
|
+
/**
|
|
613
|
+
* Aggregated metrics for all referrers on the leaderboard.
|
|
614
|
+
*/
|
|
615
|
+
aggregatedMetrics: AggregatedReferrerMetrics;
|
|
616
|
+
/**
|
|
617
|
+
* The {@link UnixTimestamp} of when the data used to build the {@link UnrankedReferrerDetailData} was accurate as of.
|
|
618
|
+
*/
|
|
619
|
+
accurateAsOf: UnixTimestamp;
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* Referrer detail data for a specific referrer address.
|
|
623
|
+
*
|
|
624
|
+
* Use the `type` field to determine the specific type interpretation
|
|
625
|
+
* at runtime.
|
|
626
|
+
*/
|
|
627
|
+
type ReferrerDetail = ReferrerDetailRanked | ReferrerDetailUnranked;
|
|
628
|
+
/**
|
|
629
|
+
* Get the detail for a specific referrer from the leaderboard.
|
|
630
|
+
*
|
|
631
|
+
* Returns a {@link ReferrerDetailRanked} if the referrer is on the leaderboard,
|
|
632
|
+
* or a {@link ReferrerDetailUnranked} if the referrer has no referrals.
|
|
633
|
+
*
|
|
634
|
+
* @param referrer - The referrer address to look up
|
|
635
|
+
* @param leaderboard - The referrer leaderboard to query
|
|
636
|
+
* @returns The appropriate {@link ReferrerDetail} (ranked or unranked)
|
|
637
|
+
*/
|
|
638
|
+
declare const getReferrerDetail: (referrer: Address, leaderboard: ReferrerLeaderboard) => ReferrerDetail;
|
|
639
|
+
|
|
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 };
|
package/dist/index.js
CHANGED
|
@@ -282,6 +282,65 @@ var buildAwardedReferrerMetrics = (referrer, aggregatedMetrics, rules) => {
|
|
|
282
282
|
validateAwardedReferrerMetrics(result, rules);
|
|
283
283
|
return result;
|
|
284
284
|
};
|
|
285
|
+
var validateUnrankedReferrerMetrics = (metrics) => {
|
|
286
|
+
validateScoredReferrerMetrics(metrics);
|
|
287
|
+
if (metrics.rank !== null) {
|
|
288
|
+
throw new Error(`Invalid UnrankedReferrerMetrics: rank must be null, got: ${metrics.rank}.`);
|
|
289
|
+
}
|
|
290
|
+
if (metrics.isQualified !== false) {
|
|
291
|
+
throw new Error(
|
|
292
|
+
`Invalid UnrankedReferrerMetrics: isQualified must be false, got: ${metrics.isQualified}.`
|
|
293
|
+
);
|
|
294
|
+
}
|
|
295
|
+
if (metrics.totalReferrals !== 0) {
|
|
296
|
+
throw new Error(
|
|
297
|
+
`Invalid UnrankedReferrerMetrics: totalReferrals must be 0, got: ${metrics.totalReferrals}.`
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
if (metrics.totalIncrementalDuration !== 0) {
|
|
301
|
+
throw new Error(
|
|
302
|
+
`Invalid UnrankedReferrerMetrics: totalIncrementalDuration must be 0, got: ${metrics.totalIncrementalDuration}.`
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
if (metrics.score !== 0) {
|
|
306
|
+
throw new Error(`Invalid UnrankedReferrerMetrics: score must be 0, got: ${metrics.score}.`);
|
|
307
|
+
}
|
|
308
|
+
if (metrics.finalScoreBoost !== 0) {
|
|
309
|
+
throw new Error(
|
|
310
|
+
`Invalid UnrankedReferrerMetrics: finalScoreBoost must be 0, got: ${metrics.finalScoreBoost}.`
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
if (metrics.finalScore !== 0) {
|
|
314
|
+
throw new Error(
|
|
315
|
+
`Invalid UnrankedReferrerMetrics: finalScore must be 0, got: ${metrics.finalScore}.`
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
if (metrics.awardPoolShare !== 0) {
|
|
319
|
+
throw new Error(
|
|
320
|
+
`Invalid UnrankedReferrerMetrics: awardPoolShare must be 0, got: ${metrics.awardPoolShare}.`
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
if (metrics.awardPoolApproxValue !== 0) {
|
|
324
|
+
throw new Error(
|
|
325
|
+
`Invalid UnrankedReferrerMetrics: awardPoolApproxValue must be 0, got: ${metrics.awardPoolApproxValue}.`
|
|
326
|
+
);
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
var buildUnrankedReferrerMetrics = (referrer) => {
|
|
330
|
+
const baseMetrics = buildReferrerMetrics(referrer, 0, 0);
|
|
331
|
+
const scoredMetrics = buildScoredReferrerMetrics(baseMetrics);
|
|
332
|
+
const result = {
|
|
333
|
+
...scoredMetrics,
|
|
334
|
+
rank: null,
|
|
335
|
+
isQualified: false,
|
|
336
|
+
finalScoreBoost: 0,
|
|
337
|
+
finalScore: 0,
|
|
338
|
+
awardPoolShare: 0,
|
|
339
|
+
awardPoolApproxValue: 0
|
|
340
|
+
};
|
|
341
|
+
validateUnrankedReferrerMetrics(result);
|
|
342
|
+
return result;
|
|
343
|
+
};
|
|
285
344
|
|
|
286
345
|
// src/leaderboard.ts
|
|
287
346
|
var buildReferrerLeaderboard = (allReferrers, rules, accurateAsOf) => {
|
|
@@ -321,66 +380,66 @@ var buildReferrerLeaderboard = (allReferrers, rules, accurateAsOf) => {
|
|
|
321
380
|
// src/leaderboard-page.ts
|
|
322
381
|
var REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT = 25;
|
|
323
382
|
var REFERRERS_PER_LEADERBOARD_PAGE_MAX = 100;
|
|
324
|
-
var
|
|
383
|
+
var validateReferrerLeaderboardPageParams = (params) => {
|
|
325
384
|
if (params.page !== void 0 && !isPositiveInteger(params.page)) {
|
|
326
385
|
throw new Error(
|
|
327
|
-
`Invalid
|
|
386
|
+
`Invalid ReferrerLeaderboardPageParams: ${params.page}. page must be a positive integer.`
|
|
328
387
|
);
|
|
329
388
|
}
|
|
330
389
|
if (params.itemsPerPage !== void 0 && !isPositiveInteger(params.itemsPerPage)) {
|
|
331
390
|
throw new Error(
|
|
332
|
-
`Invalid
|
|
391
|
+
`Invalid ReferrerLeaderboardPageParams: ${params.itemsPerPage}. itemsPerPage must be a positive integer.`
|
|
333
392
|
);
|
|
334
393
|
}
|
|
335
394
|
if (params.itemsPerPage !== void 0 && params.itemsPerPage > REFERRERS_PER_LEADERBOARD_PAGE_MAX) {
|
|
336
395
|
throw new Error(
|
|
337
|
-
`Invalid
|
|
396
|
+
`Invalid ReferrerLeaderboardPageParams: ${params.itemsPerPage}. itemsPerPage must be less than or equal to ${REFERRERS_PER_LEADERBOARD_PAGE_MAX}.`
|
|
338
397
|
);
|
|
339
398
|
}
|
|
340
399
|
};
|
|
341
|
-
var
|
|
400
|
+
var buildReferrerLeaderboardPageParams = (params) => {
|
|
342
401
|
const result = {
|
|
343
402
|
page: params.page ?? 1,
|
|
344
403
|
itemsPerPage: params.itemsPerPage ?? REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT
|
|
345
404
|
};
|
|
346
|
-
|
|
405
|
+
validateReferrerLeaderboardPageParams(result);
|
|
347
406
|
return result;
|
|
348
407
|
};
|
|
349
|
-
var
|
|
350
|
-
|
|
408
|
+
var validateReferrerLeaderboardPageContext = (context) => {
|
|
409
|
+
validateReferrerLeaderboardPageParams(context);
|
|
351
410
|
if (!isNonNegativeInteger(context.totalRecords)) {
|
|
352
411
|
throw new Error(
|
|
353
|
-
`Invalid
|
|
412
|
+
`Invalid ReferrerLeaderboardPageContext: total must be a non-negative integer but is ${context.totalRecords}.`
|
|
354
413
|
);
|
|
355
414
|
}
|
|
356
415
|
const startIndex = (context.page - 1) * context.itemsPerPage;
|
|
357
416
|
const endIndex = startIndex + context.itemsPerPage;
|
|
358
417
|
if (!context.hasNext && endIndex < context.totalRecords) {
|
|
359
418
|
throw new Error(
|
|
360
|
-
`Invalid
|
|
419
|
+
`Invalid ReferrerLeaderboardPageContext: if hasNext is false, endIndex (${endIndex}) must be greater than or equal to total (${context.totalRecords}).`
|
|
361
420
|
);
|
|
362
421
|
} else if (context.hasNext && context.page * context.itemsPerPage >= context.totalRecords) {
|
|
363
422
|
throw new Error(
|
|
364
|
-
`Invalid
|
|
423
|
+
`Invalid ReferrerLeaderboardPageContext: if hasNext is true, endIndex (${endIndex}) must be less than total (${context.totalRecords}).`
|
|
365
424
|
);
|
|
366
425
|
}
|
|
367
426
|
if (!context.hasPrev && context.page !== 1) {
|
|
368
427
|
throw new Error(
|
|
369
|
-
`Invalid
|
|
428
|
+
`Invalid ReferrerLeaderboardPageContext: if hasPrev is false, page must be the first page (1) but is ${context.page}.`
|
|
370
429
|
);
|
|
371
430
|
} else if (context.hasPrev && context.page === 1) {
|
|
372
431
|
throw new Error(
|
|
373
|
-
`Invalid
|
|
432
|
+
`Invalid ReferrerLeaderboardPageContext: if hasPrev is true, page must not be the first page (1) but is ${context.page}.`
|
|
374
433
|
);
|
|
375
434
|
}
|
|
376
435
|
};
|
|
377
|
-
var
|
|
378
|
-
const materializedParams =
|
|
436
|
+
var buildReferrerLeaderboardPageContext = (optionalParams, leaderboard) => {
|
|
437
|
+
const materializedParams = buildReferrerLeaderboardPageParams(optionalParams);
|
|
379
438
|
const totalRecords = leaderboard.referrers.size;
|
|
380
439
|
const totalPages = Math.max(1, Math.ceil(totalRecords / materializedParams.itemsPerPage));
|
|
381
440
|
if (materializedParams.page > totalPages) {
|
|
382
441
|
throw new Error(
|
|
383
|
-
`Invalid
|
|
442
|
+
`Invalid ReferrerLeaderboardPageContext: page ${materializedParams.page} exceeds total pages ${totalPages}.`
|
|
384
443
|
);
|
|
385
444
|
}
|
|
386
445
|
if (totalRecords === 0) {
|
|
@@ -397,7 +456,7 @@ var buildReferrerLeaderboardPaginationContext = (optionalParams, leaderboard) =>
|
|
|
397
456
|
const startIndex = (materializedParams.page - 1) * materializedParams.itemsPerPage;
|
|
398
457
|
const maxTheoreticalIndexOnPage = startIndex + (materializedParams.itemsPerPage - 1);
|
|
399
458
|
const endIndex = Math.min(maxTheoreticalIndexOnPage, totalRecords - 1);
|
|
400
|
-
const hasNext = maxTheoreticalIndexOnPage < totalRecords;
|
|
459
|
+
const hasNext = maxTheoreticalIndexOnPage < totalRecords - 1;
|
|
401
460
|
const hasPrev = materializedParams.page > 1;
|
|
402
461
|
const result = {
|
|
403
462
|
...materializedParams,
|
|
@@ -408,14 +467,11 @@ var buildReferrerLeaderboardPaginationContext = (optionalParams, leaderboard) =>
|
|
|
408
467
|
startIndex,
|
|
409
468
|
endIndex
|
|
410
469
|
};
|
|
411
|
-
|
|
470
|
+
validateReferrerLeaderboardPageContext(result);
|
|
412
471
|
return result;
|
|
413
472
|
};
|
|
414
473
|
var getReferrerLeaderboardPage = (paginationParams, leaderboard) => {
|
|
415
|
-
const paginationContext =
|
|
416
|
-
paginationParams,
|
|
417
|
-
leaderboard
|
|
418
|
-
);
|
|
474
|
+
const paginationContext = buildReferrerLeaderboardPageContext(paginationParams, leaderboard);
|
|
419
475
|
let referrers;
|
|
420
476
|
if (paginationContext.totalRecords > 0 && typeof paginationContext.startIndex !== "undefined" && typeof paginationContext.endIndex !== "undefined") {
|
|
421
477
|
referrers = Array.from(leaderboard.referrers.values()).slice(
|
|
@@ -443,6 +499,37 @@ function buildEnsReferralUrl(address) {
|
|
|
443
499
|
return ensAppUrl;
|
|
444
500
|
}
|
|
445
501
|
|
|
502
|
+
// src/referrer-detail.ts
|
|
503
|
+
var ReferrerDetailTypeIds = {
|
|
504
|
+
/**
|
|
505
|
+
* Represents a referrer who is ranked on the leaderboard.
|
|
506
|
+
*/
|
|
507
|
+
Ranked: "ranked",
|
|
508
|
+
/**
|
|
509
|
+
* Represents a referrer who is not ranked on the leaderboard.
|
|
510
|
+
*/
|
|
511
|
+
Unranked: "unranked"
|
|
512
|
+
};
|
|
513
|
+
var getReferrerDetail = (referrer, leaderboard) => {
|
|
514
|
+
const awardedReferrerMetrics = leaderboard.referrers.get(referrer);
|
|
515
|
+
if (awardedReferrerMetrics) {
|
|
516
|
+
return {
|
|
517
|
+
type: ReferrerDetailTypeIds.Ranked,
|
|
518
|
+
rules: leaderboard.rules,
|
|
519
|
+
referrer: awardedReferrerMetrics,
|
|
520
|
+
aggregatedMetrics: leaderboard.aggregatedMetrics,
|
|
521
|
+
accurateAsOf: leaderboard.accurateAsOf
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
return {
|
|
525
|
+
type: ReferrerDetailTypeIds.Unranked,
|
|
526
|
+
rules: leaderboard.rules,
|
|
527
|
+
referrer: buildUnrankedReferrerMetrics(referrer),
|
|
528
|
+
aggregatedMetrics: leaderboard.aggregatedMetrics,
|
|
529
|
+
accurateAsOf: leaderboard.accurateAsOf
|
|
530
|
+
};
|
|
531
|
+
};
|
|
532
|
+
|
|
446
533
|
// src/rules.ts
|
|
447
534
|
var ENS_HOLIDAY_AWARDS_START_DATE = 1764547200;
|
|
448
535
|
var ENS_HOLIDAY_AWARDS_END_DATE = 1767225599;
|
|
@@ -480,6 +567,7 @@ export {
|
|
|
480
567
|
EXPECTED_ENCODED_REFERRER_PADDING,
|
|
481
568
|
REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT,
|
|
482
569
|
REFERRERS_PER_LEADERBOARD_PAGE_MAX,
|
|
570
|
+
ReferrerDetailTypeIds,
|
|
483
571
|
SECONDS_PER_YEAR,
|
|
484
572
|
ZERO_ENCODED_REFERRER,
|
|
485
573
|
buildAggregatedReferrerMetrics,
|
|
@@ -489,10 +577,11 @@ export {
|
|
|
489
577
|
buildRankedReferrerMetrics,
|
|
490
578
|
buildReferralProgramRules,
|
|
491
579
|
buildReferrerLeaderboard,
|
|
492
|
-
|
|
493
|
-
|
|
580
|
+
buildReferrerLeaderboardPageContext,
|
|
581
|
+
buildReferrerLeaderboardPageParams,
|
|
494
582
|
buildReferrerMetrics,
|
|
495
583
|
buildScoredReferrerMetrics,
|
|
584
|
+
buildUnrankedReferrerMetrics,
|
|
496
585
|
calcReferrerAwardPoolShare,
|
|
497
586
|
calcReferrerFinalScore,
|
|
498
587
|
calcReferrerFinalScoreBoost,
|
|
@@ -500,6 +589,7 @@ export {
|
|
|
500
589
|
calcReferrerScore,
|
|
501
590
|
compareReferrerMetrics,
|
|
502
591
|
decodeEncodedReferrer,
|
|
592
|
+
getReferrerDetail,
|
|
503
593
|
getReferrerLeaderboardPage,
|
|
504
594
|
isFiniteNonNegativeNumber,
|
|
505
595
|
isInteger,
|
|
@@ -518,12 +608,13 @@ export {
|
|
|
518
608
|
validateNonNegativeInteger,
|
|
519
609
|
validateRankedReferrerMetrics,
|
|
520
610
|
validateReferralProgramRules,
|
|
521
|
-
|
|
611
|
+
validateReferrerLeaderboardPageContext,
|
|
522
612
|
validateReferrerMetrics,
|
|
523
613
|
validateReferrerRank,
|
|
524
614
|
validateReferrerScore,
|
|
525
615
|
validateScoredReferrerMetrics,
|
|
526
616
|
validateUSDQuantity,
|
|
527
|
-
validateUnixTimestamp
|
|
617
|
+
validateUnixTimestamp,
|
|
618
|
+
validateUnrankedReferrerMetrics
|
|
528
619
|
};
|
|
529
620
|
//# sourceMappingURL=index.js.map
|