@namehash/ens-referrals 1.10.1 → 1.11.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
@@ -250,9 +250,9 @@ type ReferralProgramEditionSlug = string;
250
250
  */
251
251
  declare const REFERRAL_PROGRAM_EDITION_SLUG_PATTERN: RegExp;
252
252
  /**
253
- * Represents a referral program edition configuration.
253
+ * Base fields shared by all referral program edition configs.
254
254
  */
255
- interface ReferralProgramEditionConfig {
255
+ interface BaseReferralProgramEditionConfig {
256
256
  /**
257
257
  * Unique slug identifier for the edition.
258
258
  */
@@ -262,6 +262,15 @@ interface ReferralProgramEditionConfig {
262
262
  * @example "ENS Holiday Awards"
263
263
  */
264
264
  displayName: string;
265
+ /**
266
+ * The base rules that govern this referral program edition.
267
+ */
268
+ rules: BaseReferralProgramRules;
269
+ }
270
+ /**
271
+ * Represents a referral program edition configuration.
272
+ */
273
+ interface ReferralProgramEditionConfig extends BaseReferralProgramEditionConfig {
265
274
  /**
266
275
  * The rules that govern this referral program edition.
267
276
  */
@@ -277,13 +286,26 @@ interface ReferralProgramEditionConfig {
277
286
  */
278
287
  type ReferralProgramEditionConfigSet = Map<ReferralProgramEditionSlug, ReferralProgramEditionConfig>;
279
288
  /**
280
- * Validates that a ReferralProgramEditionConfigSet maintains the invariant
281
- * that each map key equals the corresponding config's slug.
289
+ * Validates the invariants of a {@link ReferralProgramEditionConfigSet}.
282
290
  *
283
291
  * @param configSet - The edition config set to validate
284
- * @throws {Error} If any entry violates the invariant (key !== value.slug)
292
+ * @throws {Error} If any entry violates the invariant that each map key equals the
293
+ * corresponding config's slug
294
+ * @throws {Error} If any pair of editions sharing a `subregistryId` overlap in time
295
+ * (`startTime` and `endTime` are inclusive — touching edges count as overlap)
285
296
  */
286
297
  declare function validateReferralProgramEditionConfigSet(configSet: ReferralProgramEditionConfigSet): void;
298
+ /**
299
+ * Returns the first pair of editions sharing a `subregistryId` whose time ranges overlap,
300
+ * or `null` if none do.
301
+ *
302
+ * `startTime` and `endTime` are inclusive, so ranges sharing a single instant
303
+ * (`A.endTime === B.startTime`) count as overlapping.
304
+ *
305
+ * @param editions - Array of editions to check
306
+ * @returns A `[a, b]` tuple of the first offending pair, or `null` if none
307
+ */
308
+ declare function findOverlappingEditionPair<T extends BaseReferralProgramEditionConfig>(editions: readonly T[]): readonly [T, T] | null;
287
309
  /**
288
310
  * Builds a new ReferralProgramEditionConfigSet from an array of configs and validates the invariant.
289
311
  *
@@ -711,29 +733,17 @@ type ReferrerEditionMetricsPieSplit = ReferrerEditionMetricsRankedPieSplit | Ref
711
733
  /**
712
734
  * Base fields shared by all edition summary variants.
713
735
  */
714
- interface BaseReferralProgramEditionSummary {
736
+ interface BaseReferralProgramEditionSummary extends BaseReferralProgramEditionConfig {
715
737
  /**
716
738
  * Discriminant: identifies the award model for this edition.
717
739
  *
718
740
  * @invariant Always equals `rules.awardModel`.
719
741
  */
720
742
  awardModel: ReferralProgramAwardModel;
721
- /**
722
- * Unique slug identifier for the edition.
723
- */
724
- slug: ReferralProgramEditionSlug;
725
- /**
726
- * Human-readable display name for the edition.
727
- */
728
- displayName: string;
729
743
  /**
730
744
  * The current runtime status of the edition.
731
745
  */
732
746
  status: ReferralProgramEditionStatusId;
733
- /**
734
- * The rules for this edition. Per-model subtypes narrow this to their specific rules type.
735
- */
736
- rules: BaseReferralProgramRules;
737
747
  }
738
748
  /**
739
749
  * Edition summary for an edition whose `awardModel` is not recognized by this client version.
@@ -2118,4 +2128,4 @@ declare const SECONDS_PER_YEAR: Duration;
2118
2128
  declare function isValidDuration(duration: Duration): boolean;
2119
2129
  declare function validateDuration(duration: Duration): void;
2120
2130
 
2121
- export { type AdminAction, type AdminActionDisqualification, type AdminActionType, AdminActionTypes, type AdminActionWarning, type AggregatedReferrerMetricsPieSplit, type AggregatedReferrerMetricsRevShareCap, type AwardedReferrerMetricsPieSplit, type AwardedReferrerMetricsRevShareCap, type BaseReferralProgramEditionSummary, type BaseReferralProgramRules, type BaseReferrerLeaderboardPage, type ClientOptions, DEFAULT_ENSNODE_API_URL, ENSReferralsClient, MAX_EDITIONS_PER_REQUEST, REFERRAL_PROGRAM_EDITION_SLUG_PATTERN, REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT, REFERRERS_PER_LEADERBOARD_PAGE_MAX, type RankedReferrerMetricsPieSplit, type RankedReferrerMetricsRevShareCap, type ReferralEvent, type ReferralProgramAwardModel, ReferralProgramAwardModels, type ReferralProgramEditionConfig, type ReferralProgramEditionConfigSet, type ReferralProgramEditionSlug, type ReferralProgramEditionStatusId, ReferralProgramEditionStatuses, type ReferralProgramEditionSummariesData, type ReferralProgramEditionSummariesResponse, type ReferralProgramEditionSummariesResponseCode, ReferralProgramEditionSummariesResponseCodes, type ReferralProgramEditionSummariesResponseError, type ReferralProgramEditionSummariesResponseOk, type ReferralProgramEditionSummary, type ReferralProgramEditionSummaryPieSplit, type ReferralProgramEditionSummaryRevShareCap, type ReferralProgramEditionSummaryUnrecognized, type ReferralProgramRules, type ReferralProgramRulesPieSplit, type ReferralProgramRulesRevShareCap, type ReferralProgramRulesUnrecognized, type ReferrerEditionMetrics, type ReferrerEditionMetricsPieSplit, type ReferrerEditionMetricsRankedPieSplit, type ReferrerEditionMetricsRankedRevShareCap, type ReferrerEditionMetricsRevShareCap, type ReferrerEditionMetricsTypeId, ReferrerEditionMetricsTypeIds, type ReferrerEditionMetricsUnrankedPieSplit, type ReferrerEditionMetricsUnrankedRevShareCap, type ReferrerEditionMetricsUnrecognized, type ReferrerLeaderboard, type ReferrerLeaderboardPage, type ReferrerLeaderboardPageContext, type ReferrerLeaderboardPageParams, type ReferrerLeaderboardPagePieSplit, type ReferrerLeaderboardPageRequest, type ReferrerLeaderboardPageResponse, type ReferrerLeaderboardPageResponseCode, ReferrerLeaderboardPageResponseCodes, type ReferrerLeaderboardPageResponseError, type ReferrerLeaderboardPageResponseOk, type ReferrerLeaderboardPageRevShareCap, type ReferrerLeaderboardPageUnrecognized, type ReferrerLeaderboardPieSplit, type ReferrerLeaderboardRevShareCap, type ReferrerMetrics, type ReferrerMetricsEditionsData, type ReferrerMetricsEditionsRequest, type ReferrerMetricsEditionsResponse, type ReferrerMetricsEditionsResponseCode, ReferrerMetricsEditionsResponseCodes, type ReferrerMetricsEditionsResponseError, type ReferrerMetricsEditionsResponseOk, type ReferrerMetricsForComparison, type ReferrerMetricsRevShareCap, type ReferrerRank, type ReferrerScore, SECONDS_PER_YEAR, type ScoredReferrerMetricsPieSplit, type SerializedAggregatedReferrerMetricsPieSplit, type SerializedAggregatedReferrerMetricsRevShareCap, type SerializedAwardedReferrerMetricsPieSplit, type SerializedAwardedReferrerMetricsRevShareCap, type SerializedReferralProgramEditionSummariesData, type SerializedReferralProgramEditionSummariesResponse, type SerializedReferralProgramEditionSummariesResponseError, type SerializedReferralProgramEditionSummariesResponseOk, type SerializedReferralProgramEditionSummary, type SerializedReferralProgramEditionSummaryPieSplit, type SerializedReferralProgramEditionSummaryRevShareCap, type SerializedReferralProgramRules, type SerializedReferralProgramRulesPieSplit, type SerializedReferralProgramRulesRevShareCap, type SerializedReferrerEditionMetrics, type SerializedReferrerEditionMetricsPieSplit, type SerializedReferrerEditionMetricsRankedPieSplit, type SerializedReferrerEditionMetricsRankedRevShareCap, type SerializedReferrerEditionMetricsRevShareCap, type SerializedReferrerEditionMetricsUnrankedPieSplit, type SerializedReferrerEditionMetricsUnrankedRevShareCap, type SerializedReferrerLeaderboardPage, type SerializedReferrerLeaderboardPagePieSplit, type SerializedReferrerLeaderboardPageResponse, type SerializedReferrerLeaderboardPageResponseError, type SerializedReferrerLeaderboardPageResponseOk, type SerializedReferrerLeaderboardPageRevShareCap, type SerializedReferrerMetricsEditionsData, type SerializedReferrerMetricsEditionsResponse, type SerializedReferrerMetricsEditionsResponseError, type SerializedReferrerMetricsEditionsResponseOk, type SerializedUnrankedReferrerMetricsPieSplit, type SerializedUnrankedReferrerMetricsRevShareCap, type UnrankedReferrerMetricsPieSplit, type UnrankedReferrerMetricsRevShareCap, buildAggregatedReferrerMetricsPieSplit, buildAggregatedReferrerMetricsRevShareCap, buildAwardedReferrerMetricsPieSplit, buildAwardedReferrerMetricsRevShareCap, buildEditionSummary, buildEditionSummaryPieSplit, buildEditionSummaryRevShareCap, buildEnsReferralUrl, buildLeaderboardPagePieSplit, buildLeaderboardPageRevShareCap, buildRankedReferrerMetricsPieSplit, buildRankedReferrerMetricsRevShareCap, buildReferralProgramEditionConfigSet, buildReferralProgramRulesPieSplit, buildReferralProgramRulesRevShareCap, buildReferrerLeaderboardPageContext, buildReferrerLeaderboardPageParams, buildReferrerLeaderboardPieSplit, buildReferrerLeaderboardRevShareCap, buildReferrerMetrics, buildReferrerMetricsRevShareCap, buildScoredReferrerMetricsPieSplit, buildUnrankedReferrerMetricsPieSplit, buildUnrankedReferrerMetricsRevShareCap, calcBaseReferralProgramEditionStatus, calcBaseRevenueContribution, calcReferralProgramEditionStatusPieSplit, calcReferralProgramEditionStatusRevShareCap, calcReferrerAwardPoolSharePieSplit, calcReferrerScorePieSplit, compareReferrerMetrics, deserializeReferralProgramEditionConfigSetArray, deserializeReferralProgramEditionSummariesResponse, deserializeReferrerLeaderboardPageResponse, deserializeReferrerMetricsEditionsResponse, getReferrerEditionMetrics, getReferrerLeaderboardPage, isFiniteNonNegativeNumber, isInteger, isNonNegativeInteger, isPositiveInteger, isReferrerQualifiedRevShareCap, isValidDuration, isValidReferrerScore, serializeReferralProgramEditionSummariesResponse, serializeReferralProgramEditionSummary, serializeReferralProgramRules, serializeReferrerLeaderboardPageResponse, serializeReferrerMetricsEditionsResponse, sliceReferrers, sortReferrerMetrics, validateAggregatedReferrerMetricsPieSplit, validateAggregatedReferrerMetricsRevShareCap, validateAwardedReferrerMetricsPieSplit, validateAwardedReferrerMetricsRevShareCap, validateBaseReferralProgramEditionSummary, validateBaseReferralProgramRules, validateDuration, validateEditionSummaryPieSplit, validateEditionSummaryRevShareCap, validateNonNegativeInteger, validateNormalizedAddress, validateRankedReferrerMetricsPieSplit, validateRankedReferrerMetricsRevShareCap, validateReferralProgramEditionConfigSet, validateReferralProgramRulesPieSplit, validateReferralProgramRulesRevShareCap, validateReferrerLeaderboardPageContext, validateReferrerMetrics, validateReferrerMetricsRevShareCap, validateReferrerRank, validateReferrerScore, validateScoredReferrerMetricsPieSplit, validateUnixTimestamp, validateUnrankedReferrerMetricsPieSplit, validateUnrankedReferrerMetricsRevShareCap };
2131
+ export { type AdminAction, type AdminActionDisqualification, type AdminActionType, AdminActionTypes, type AdminActionWarning, type AggregatedReferrerMetricsPieSplit, type AggregatedReferrerMetricsRevShareCap, type AwardedReferrerMetricsPieSplit, type AwardedReferrerMetricsRevShareCap, type BaseReferralProgramEditionConfig, type BaseReferralProgramEditionSummary, type BaseReferralProgramRules, type BaseReferrerLeaderboardPage, type ClientOptions, DEFAULT_ENSNODE_API_URL, ENSReferralsClient, MAX_EDITIONS_PER_REQUEST, REFERRAL_PROGRAM_EDITION_SLUG_PATTERN, REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT, REFERRERS_PER_LEADERBOARD_PAGE_MAX, type RankedReferrerMetricsPieSplit, type RankedReferrerMetricsRevShareCap, type ReferralEvent, type ReferralProgramAwardModel, ReferralProgramAwardModels, type ReferralProgramEditionConfig, type ReferralProgramEditionConfigSet, type ReferralProgramEditionSlug, type ReferralProgramEditionStatusId, ReferralProgramEditionStatuses, type ReferralProgramEditionSummariesData, type ReferralProgramEditionSummariesResponse, type ReferralProgramEditionSummariesResponseCode, ReferralProgramEditionSummariesResponseCodes, type ReferralProgramEditionSummariesResponseError, type ReferralProgramEditionSummariesResponseOk, type ReferralProgramEditionSummary, type ReferralProgramEditionSummaryPieSplit, type ReferralProgramEditionSummaryRevShareCap, type ReferralProgramEditionSummaryUnrecognized, type ReferralProgramRules, type ReferralProgramRulesPieSplit, type ReferralProgramRulesRevShareCap, type ReferralProgramRulesUnrecognized, type ReferrerEditionMetrics, type ReferrerEditionMetricsPieSplit, type ReferrerEditionMetricsRankedPieSplit, type ReferrerEditionMetricsRankedRevShareCap, type ReferrerEditionMetricsRevShareCap, type ReferrerEditionMetricsTypeId, ReferrerEditionMetricsTypeIds, type ReferrerEditionMetricsUnrankedPieSplit, type ReferrerEditionMetricsUnrankedRevShareCap, type ReferrerEditionMetricsUnrecognized, type ReferrerLeaderboard, type ReferrerLeaderboardPage, type ReferrerLeaderboardPageContext, type ReferrerLeaderboardPageParams, type ReferrerLeaderboardPagePieSplit, type ReferrerLeaderboardPageRequest, type ReferrerLeaderboardPageResponse, type ReferrerLeaderboardPageResponseCode, ReferrerLeaderboardPageResponseCodes, type ReferrerLeaderboardPageResponseError, type ReferrerLeaderboardPageResponseOk, type ReferrerLeaderboardPageRevShareCap, type ReferrerLeaderboardPageUnrecognized, type ReferrerLeaderboardPieSplit, type ReferrerLeaderboardRevShareCap, type ReferrerMetrics, type ReferrerMetricsEditionsData, type ReferrerMetricsEditionsRequest, type ReferrerMetricsEditionsResponse, type ReferrerMetricsEditionsResponseCode, ReferrerMetricsEditionsResponseCodes, type ReferrerMetricsEditionsResponseError, type ReferrerMetricsEditionsResponseOk, type ReferrerMetricsForComparison, type ReferrerMetricsRevShareCap, type ReferrerRank, type ReferrerScore, SECONDS_PER_YEAR, type ScoredReferrerMetricsPieSplit, type SerializedAggregatedReferrerMetricsPieSplit, type SerializedAggregatedReferrerMetricsRevShareCap, type SerializedAwardedReferrerMetricsPieSplit, type SerializedAwardedReferrerMetricsRevShareCap, type SerializedReferralProgramEditionSummariesData, type SerializedReferralProgramEditionSummariesResponse, type SerializedReferralProgramEditionSummariesResponseError, type SerializedReferralProgramEditionSummariesResponseOk, type SerializedReferralProgramEditionSummary, type SerializedReferralProgramEditionSummaryPieSplit, type SerializedReferralProgramEditionSummaryRevShareCap, type SerializedReferralProgramRules, type SerializedReferralProgramRulesPieSplit, type SerializedReferralProgramRulesRevShareCap, type SerializedReferrerEditionMetrics, type SerializedReferrerEditionMetricsPieSplit, type SerializedReferrerEditionMetricsRankedPieSplit, type SerializedReferrerEditionMetricsRankedRevShareCap, type SerializedReferrerEditionMetricsRevShareCap, type SerializedReferrerEditionMetricsUnrankedPieSplit, type SerializedReferrerEditionMetricsUnrankedRevShareCap, type SerializedReferrerLeaderboardPage, type SerializedReferrerLeaderboardPagePieSplit, type SerializedReferrerLeaderboardPageResponse, type SerializedReferrerLeaderboardPageResponseError, type SerializedReferrerLeaderboardPageResponseOk, type SerializedReferrerLeaderboardPageRevShareCap, type SerializedReferrerMetricsEditionsData, type SerializedReferrerMetricsEditionsResponse, type SerializedReferrerMetricsEditionsResponseError, type SerializedReferrerMetricsEditionsResponseOk, type SerializedUnrankedReferrerMetricsPieSplit, type SerializedUnrankedReferrerMetricsRevShareCap, type UnrankedReferrerMetricsPieSplit, type UnrankedReferrerMetricsRevShareCap, buildAggregatedReferrerMetricsPieSplit, buildAggregatedReferrerMetricsRevShareCap, buildAwardedReferrerMetricsPieSplit, buildAwardedReferrerMetricsRevShareCap, buildEditionSummary, buildEditionSummaryPieSplit, buildEditionSummaryRevShareCap, buildEnsReferralUrl, buildLeaderboardPagePieSplit, buildLeaderboardPageRevShareCap, buildRankedReferrerMetricsPieSplit, buildRankedReferrerMetricsRevShareCap, buildReferralProgramEditionConfigSet, buildReferralProgramRulesPieSplit, buildReferralProgramRulesRevShareCap, buildReferrerLeaderboardPageContext, buildReferrerLeaderboardPageParams, buildReferrerLeaderboardPieSplit, buildReferrerLeaderboardRevShareCap, buildReferrerMetrics, buildReferrerMetricsRevShareCap, buildScoredReferrerMetricsPieSplit, buildUnrankedReferrerMetricsPieSplit, buildUnrankedReferrerMetricsRevShareCap, calcBaseReferralProgramEditionStatus, calcBaseRevenueContribution, calcReferralProgramEditionStatusPieSplit, calcReferralProgramEditionStatusRevShareCap, calcReferrerAwardPoolSharePieSplit, calcReferrerScorePieSplit, compareReferrerMetrics, deserializeReferralProgramEditionConfigSetArray, deserializeReferralProgramEditionSummariesResponse, deserializeReferrerLeaderboardPageResponse, deserializeReferrerMetricsEditionsResponse, findOverlappingEditionPair, getReferrerEditionMetrics, getReferrerLeaderboardPage, isFiniteNonNegativeNumber, isInteger, isNonNegativeInteger, isPositiveInteger, isReferrerQualifiedRevShareCap, isValidDuration, isValidReferrerScore, serializeReferralProgramEditionSummariesResponse, serializeReferralProgramEditionSummary, serializeReferralProgramRules, serializeReferrerLeaderboardPageResponse, serializeReferrerMetricsEditionsResponse, sliceReferrers, sortReferrerMetrics, validateAggregatedReferrerMetricsPieSplit, validateAggregatedReferrerMetricsRevShareCap, validateAwardedReferrerMetricsPieSplit, validateAwardedReferrerMetricsRevShareCap, validateBaseReferralProgramEditionSummary, validateBaseReferralProgramRules, validateDuration, validateEditionSummaryPieSplit, validateEditionSummaryRevShareCap, validateNonNegativeInteger, validateNormalizedAddress, validateRankedReferrerMetricsPieSplit, validateRankedReferrerMetricsRevShareCap, validateReferralProgramEditionConfigSet, validateReferralProgramRulesPieSplit, validateReferralProgramRulesRevShareCap, validateReferrerLeaderboardPageContext, validateReferrerMetrics, validateReferrerMetricsRevShareCap, validateReferrerRank, validateReferrerScore, validateScoredReferrerMetricsPieSplit, validateUnixTimestamp, validateUnrankedReferrerMetricsPieSplit, validateUnrankedReferrerMetricsRevShareCap };
package/dist/index.d.ts CHANGED
@@ -250,9 +250,9 @@ type ReferralProgramEditionSlug = string;
250
250
  */
251
251
  declare const REFERRAL_PROGRAM_EDITION_SLUG_PATTERN: RegExp;
252
252
  /**
253
- * Represents a referral program edition configuration.
253
+ * Base fields shared by all referral program edition configs.
254
254
  */
255
- interface ReferralProgramEditionConfig {
255
+ interface BaseReferralProgramEditionConfig {
256
256
  /**
257
257
  * Unique slug identifier for the edition.
258
258
  */
@@ -262,6 +262,15 @@ interface ReferralProgramEditionConfig {
262
262
  * @example "ENS Holiday Awards"
263
263
  */
264
264
  displayName: string;
265
+ /**
266
+ * The base rules that govern this referral program edition.
267
+ */
268
+ rules: BaseReferralProgramRules;
269
+ }
270
+ /**
271
+ * Represents a referral program edition configuration.
272
+ */
273
+ interface ReferralProgramEditionConfig extends BaseReferralProgramEditionConfig {
265
274
  /**
266
275
  * The rules that govern this referral program edition.
267
276
  */
@@ -277,13 +286,26 @@ interface ReferralProgramEditionConfig {
277
286
  */
278
287
  type ReferralProgramEditionConfigSet = Map<ReferralProgramEditionSlug, ReferralProgramEditionConfig>;
279
288
  /**
280
- * Validates that a ReferralProgramEditionConfigSet maintains the invariant
281
- * that each map key equals the corresponding config's slug.
289
+ * Validates the invariants of a {@link ReferralProgramEditionConfigSet}.
282
290
  *
283
291
  * @param configSet - The edition config set to validate
284
- * @throws {Error} If any entry violates the invariant (key !== value.slug)
292
+ * @throws {Error} If any entry violates the invariant that each map key equals the
293
+ * corresponding config's slug
294
+ * @throws {Error} If any pair of editions sharing a `subregistryId` overlap in time
295
+ * (`startTime` and `endTime` are inclusive — touching edges count as overlap)
285
296
  */
286
297
  declare function validateReferralProgramEditionConfigSet(configSet: ReferralProgramEditionConfigSet): void;
298
+ /**
299
+ * Returns the first pair of editions sharing a `subregistryId` whose time ranges overlap,
300
+ * or `null` if none do.
301
+ *
302
+ * `startTime` and `endTime` are inclusive, so ranges sharing a single instant
303
+ * (`A.endTime === B.startTime`) count as overlapping.
304
+ *
305
+ * @param editions - Array of editions to check
306
+ * @returns A `[a, b]` tuple of the first offending pair, or `null` if none
307
+ */
308
+ declare function findOverlappingEditionPair<T extends BaseReferralProgramEditionConfig>(editions: readonly T[]): readonly [T, T] | null;
287
309
  /**
288
310
  * Builds a new ReferralProgramEditionConfigSet from an array of configs and validates the invariant.
289
311
  *
@@ -711,29 +733,17 @@ type ReferrerEditionMetricsPieSplit = ReferrerEditionMetricsRankedPieSplit | Ref
711
733
  /**
712
734
  * Base fields shared by all edition summary variants.
713
735
  */
714
- interface BaseReferralProgramEditionSummary {
736
+ interface BaseReferralProgramEditionSummary extends BaseReferralProgramEditionConfig {
715
737
  /**
716
738
  * Discriminant: identifies the award model for this edition.
717
739
  *
718
740
  * @invariant Always equals `rules.awardModel`.
719
741
  */
720
742
  awardModel: ReferralProgramAwardModel;
721
- /**
722
- * Unique slug identifier for the edition.
723
- */
724
- slug: ReferralProgramEditionSlug;
725
- /**
726
- * Human-readable display name for the edition.
727
- */
728
- displayName: string;
729
743
  /**
730
744
  * The current runtime status of the edition.
731
745
  */
732
746
  status: ReferralProgramEditionStatusId;
733
- /**
734
- * The rules for this edition. Per-model subtypes narrow this to their specific rules type.
735
- */
736
- rules: BaseReferralProgramRules;
737
747
  }
738
748
  /**
739
749
  * Edition summary for an edition whose `awardModel` is not recognized by this client version.
@@ -2118,4 +2128,4 @@ declare const SECONDS_PER_YEAR: Duration;
2118
2128
  declare function isValidDuration(duration: Duration): boolean;
2119
2129
  declare function validateDuration(duration: Duration): void;
2120
2130
 
2121
- export { type AdminAction, type AdminActionDisqualification, type AdminActionType, AdminActionTypes, type AdminActionWarning, type AggregatedReferrerMetricsPieSplit, type AggregatedReferrerMetricsRevShareCap, type AwardedReferrerMetricsPieSplit, type AwardedReferrerMetricsRevShareCap, type BaseReferralProgramEditionSummary, type BaseReferralProgramRules, type BaseReferrerLeaderboardPage, type ClientOptions, DEFAULT_ENSNODE_API_URL, ENSReferralsClient, MAX_EDITIONS_PER_REQUEST, REFERRAL_PROGRAM_EDITION_SLUG_PATTERN, REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT, REFERRERS_PER_LEADERBOARD_PAGE_MAX, type RankedReferrerMetricsPieSplit, type RankedReferrerMetricsRevShareCap, type ReferralEvent, type ReferralProgramAwardModel, ReferralProgramAwardModels, type ReferralProgramEditionConfig, type ReferralProgramEditionConfigSet, type ReferralProgramEditionSlug, type ReferralProgramEditionStatusId, ReferralProgramEditionStatuses, type ReferralProgramEditionSummariesData, type ReferralProgramEditionSummariesResponse, type ReferralProgramEditionSummariesResponseCode, ReferralProgramEditionSummariesResponseCodes, type ReferralProgramEditionSummariesResponseError, type ReferralProgramEditionSummariesResponseOk, type ReferralProgramEditionSummary, type ReferralProgramEditionSummaryPieSplit, type ReferralProgramEditionSummaryRevShareCap, type ReferralProgramEditionSummaryUnrecognized, type ReferralProgramRules, type ReferralProgramRulesPieSplit, type ReferralProgramRulesRevShareCap, type ReferralProgramRulesUnrecognized, type ReferrerEditionMetrics, type ReferrerEditionMetricsPieSplit, type ReferrerEditionMetricsRankedPieSplit, type ReferrerEditionMetricsRankedRevShareCap, type ReferrerEditionMetricsRevShareCap, type ReferrerEditionMetricsTypeId, ReferrerEditionMetricsTypeIds, type ReferrerEditionMetricsUnrankedPieSplit, type ReferrerEditionMetricsUnrankedRevShareCap, type ReferrerEditionMetricsUnrecognized, type ReferrerLeaderboard, type ReferrerLeaderboardPage, type ReferrerLeaderboardPageContext, type ReferrerLeaderboardPageParams, type ReferrerLeaderboardPagePieSplit, type ReferrerLeaderboardPageRequest, type ReferrerLeaderboardPageResponse, type ReferrerLeaderboardPageResponseCode, ReferrerLeaderboardPageResponseCodes, type ReferrerLeaderboardPageResponseError, type ReferrerLeaderboardPageResponseOk, type ReferrerLeaderboardPageRevShareCap, type ReferrerLeaderboardPageUnrecognized, type ReferrerLeaderboardPieSplit, type ReferrerLeaderboardRevShareCap, type ReferrerMetrics, type ReferrerMetricsEditionsData, type ReferrerMetricsEditionsRequest, type ReferrerMetricsEditionsResponse, type ReferrerMetricsEditionsResponseCode, ReferrerMetricsEditionsResponseCodes, type ReferrerMetricsEditionsResponseError, type ReferrerMetricsEditionsResponseOk, type ReferrerMetricsForComparison, type ReferrerMetricsRevShareCap, type ReferrerRank, type ReferrerScore, SECONDS_PER_YEAR, type ScoredReferrerMetricsPieSplit, type SerializedAggregatedReferrerMetricsPieSplit, type SerializedAggregatedReferrerMetricsRevShareCap, type SerializedAwardedReferrerMetricsPieSplit, type SerializedAwardedReferrerMetricsRevShareCap, type SerializedReferralProgramEditionSummariesData, type SerializedReferralProgramEditionSummariesResponse, type SerializedReferralProgramEditionSummariesResponseError, type SerializedReferralProgramEditionSummariesResponseOk, type SerializedReferralProgramEditionSummary, type SerializedReferralProgramEditionSummaryPieSplit, type SerializedReferralProgramEditionSummaryRevShareCap, type SerializedReferralProgramRules, type SerializedReferralProgramRulesPieSplit, type SerializedReferralProgramRulesRevShareCap, type SerializedReferrerEditionMetrics, type SerializedReferrerEditionMetricsPieSplit, type SerializedReferrerEditionMetricsRankedPieSplit, type SerializedReferrerEditionMetricsRankedRevShareCap, type SerializedReferrerEditionMetricsRevShareCap, type SerializedReferrerEditionMetricsUnrankedPieSplit, type SerializedReferrerEditionMetricsUnrankedRevShareCap, type SerializedReferrerLeaderboardPage, type SerializedReferrerLeaderboardPagePieSplit, type SerializedReferrerLeaderboardPageResponse, type SerializedReferrerLeaderboardPageResponseError, type SerializedReferrerLeaderboardPageResponseOk, type SerializedReferrerLeaderboardPageRevShareCap, type SerializedReferrerMetricsEditionsData, type SerializedReferrerMetricsEditionsResponse, type SerializedReferrerMetricsEditionsResponseError, type SerializedReferrerMetricsEditionsResponseOk, type SerializedUnrankedReferrerMetricsPieSplit, type SerializedUnrankedReferrerMetricsRevShareCap, type UnrankedReferrerMetricsPieSplit, type UnrankedReferrerMetricsRevShareCap, buildAggregatedReferrerMetricsPieSplit, buildAggregatedReferrerMetricsRevShareCap, buildAwardedReferrerMetricsPieSplit, buildAwardedReferrerMetricsRevShareCap, buildEditionSummary, buildEditionSummaryPieSplit, buildEditionSummaryRevShareCap, buildEnsReferralUrl, buildLeaderboardPagePieSplit, buildLeaderboardPageRevShareCap, buildRankedReferrerMetricsPieSplit, buildRankedReferrerMetricsRevShareCap, buildReferralProgramEditionConfigSet, buildReferralProgramRulesPieSplit, buildReferralProgramRulesRevShareCap, buildReferrerLeaderboardPageContext, buildReferrerLeaderboardPageParams, buildReferrerLeaderboardPieSplit, buildReferrerLeaderboardRevShareCap, buildReferrerMetrics, buildReferrerMetricsRevShareCap, buildScoredReferrerMetricsPieSplit, buildUnrankedReferrerMetricsPieSplit, buildUnrankedReferrerMetricsRevShareCap, calcBaseReferralProgramEditionStatus, calcBaseRevenueContribution, calcReferralProgramEditionStatusPieSplit, calcReferralProgramEditionStatusRevShareCap, calcReferrerAwardPoolSharePieSplit, calcReferrerScorePieSplit, compareReferrerMetrics, deserializeReferralProgramEditionConfigSetArray, deserializeReferralProgramEditionSummariesResponse, deserializeReferrerLeaderboardPageResponse, deserializeReferrerMetricsEditionsResponse, getReferrerEditionMetrics, getReferrerLeaderboardPage, isFiniteNonNegativeNumber, isInteger, isNonNegativeInteger, isPositiveInteger, isReferrerQualifiedRevShareCap, isValidDuration, isValidReferrerScore, serializeReferralProgramEditionSummariesResponse, serializeReferralProgramEditionSummary, serializeReferralProgramRules, serializeReferrerLeaderboardPageResponse, serializeReferrerMetricsEditionsResponse, sliceReferrers, sortReferrerMetrics, validateAggregatedReferrerMetricsPieSplit, validateAggregatedReferrerMetricsRevShareCap, validateAwardedReferrerMetricsPieSplit, validateAwardedReferrerMetricsRevShareCap, validateBaseReferralProgramEditionSummary, validateBaseReferralProgramRules, validateDuration, validateEditionSummaryPieSplit, validateEditionSummaryRevShareCap, validateNonNegativeInteger, validateNormalizedAddress, validateRankedReferrerMetricsPieSplit, validateRankedReferrerMetricsRevShareCap, validateReferralProgramEditionConfigSet, validateReferralProgramRulesPieSplit, validateReferralProgramRulesRevShareCap, validateReferrerLeaderboardPageContext, validateReferrerMetrics, validateReferrerMetricsRevShareCap, validateReferrerRank, validateReferrerScore, validateScoredReferrerMetricsPieSplit, validateUnixTimestamp, validateUnrankedReferrerMetricsPieSplit, validateUnrankedReferrerMetricsRevShareCap };
2131
+ export { type AdminAction, type AdminActionDisqualification, type AdminActionType, AdminActionTypes, type AdminActionWarning, type AggregatedReferrerMetricsPieSplit, type AggregatedReferrerMetricsRevShareCap, type AwardedReferrerMetricsPieSplit, type AwardedReferrerMetricsRevShareCap, type BaseReferralProgramEditionConfig, type BaseReferralProgramEditionSummary, type BaseReferralProgramRules, type BaseReferrerLeaderboardPage, type ClientOptions, DEFAULT_ENSNODE_API_URL, ENSReferralsClient, MAX_EDITIONS_PER_REQUEST, REFERRAL_PROGRAM_EDITION_SLUG_PATTERN, REFERRERS_PER_LEADERBOARD_PAGE_DEFAULT, REFERRERS_PER_LEADERBOARD_PAGE_MAX, type RankedReferrerMetricsPieSplit, type RankedReferrerMetricsRevShareCap, type ReferralEvent, type ReferralProgramAwardModel, ReferralProgramAwardModels, type ReferralProgramEditionConfig, type ReferralProgramEditionConfigSet, type ReferralProgramEditionSlug, type ReferralProgramEditionStatusId, ReferralProgramEditionStatuses, type ReferralProgramEditionSummariesData, type ReferralProgramEditionSummariesResponse, type ReferralProgramEditionSummariesResponseCode, ReferralProgramEditionSummariesResponseCodes, type ReferralProgramEditionSummariesResponseError, type ReferralProgramEditionSummariesResponseOk, type ReferralProgramEditionSummary, type ReferralProgramEditionSummaryPieSplit, type ReferralProgramEditionSummaryRevShareCap, type ReferralProgramEditionSummaryUnrecognized, type ReferralProgramRules, type ReferralProgramRulesPieSplit, type ReferralProgramRulesRevShareCap, type ReferralProgramRulesUnrecognized, type ReferrerEditionMetrics, type ReferrerEditionMetricsPieSplit, type ReferrerEditionMetricsRankedPieSplit, type ReferrerEditionMetricsRankedRevShareCap, type ReferrerEditionMetricsRevShareCap, type ReferrerEditionMetricsTypeId, ReferrerEditionMetricsTypeIds, type ReferrerEditionMetricsUnrankedPieSplit, type ReferrerEditionMetricsUnrankedRevShareCap, type ReferrerEditionMetricsUnrecognized, type ReferrerLeaderboard, type ReferrerLeaderboardPage, type ReferrerLeaderboardPageContext, type ReferrerLeaderboardPageParams, type ReferrerLeaderboardPagePieSplit, type ReferrerLeaderboardPageRequest, type ReferrerLeaderboardPageResponse, type ReferrerLeaderboardPageResponseCode, ReferrerLeaderboardPageResponseCodes, type ReferrerLeaderboardPageResponseError, type ReferrerLeaderboardPageResponseOk, type ReferrerLeaderboardPageRevShareCap, type ReferrerLeaderboardPageUnrecognized, type ReferrerLeaderboardPieSplit, type ReferrerLeaderboardRevShareCap, type ReferrerMetrics, type ReferrerMetricsEditionsData, type ReferrerMetricsEditionsRequest, type ReferrerMetricsEditionsResponse, type ReferrerMetricsEditionsResponseCode, ReferrerMetricsEditionsResponseCodes, type ReferrerMetricsEditionsResponseError, type ReferrerMetricsEditionsResponseOk, type ReferrerMetricsForComparison, type ReferrerMetricsRevShareCap, type ReferrerRank, type ReferrerScore, SECONDS_PER_YEAR, type ScoredReferrerMetricsPieSplit, type SerializedAggregatedReferrerMetricsPieSplit, type SerializedAggregatedReferrerMetricsRevShareCap, type SerializedAwardedReferrerMetricsPieSplit, type SerializedAwardedReferrerMetricsRevShareCap, type SerializedReferralProgramEditionSummariesData, type SerializedReferralProgramEditionSummariesResponse, type SerializedReferralProgramEditionSummariesResponseError, type SerializedReferralProgramEditionSummariesResponseOk, type SerializedReferralProgramEditionSummary, type SerializedReferralProgramEditionSummaryPieSplit, type SerializedReferralProgramEditionSummaryRevShareCap, type SerializedReferralProgramRules, type SerializedReferralProgramRulesPieSplit, type SerializedReferralProgramRulesRevShareCap, type SerializedReferrerEditionMetrics, type SerializedReferrerEditionMetricsPieSplit, type SerializedReferrerEditionMetricsRankedPieSplit, type SerializedReferrerEditionMetricsRankedRevShareCap, type SerializedReferrerEditionMetricsRevShareCap, type SerializedReferrerEditionMetricsUnrankedPieSplit, type SerializedReferrerEditionMetricsUnrankedRevShareCap, type SerializedReferrerLeaderboardPage, type SerializedReferrerLeaderboardPagePieSplit, type SerializedReferrerLeaderboardPageResponse, type SerializedReferrerLeaderboardPageResponseError, type SerializedReferrerLeaderboardPageResponseOk, type SerializedReferrerLeaderboardPageRevShareCap, type SerializedReferrerMetricsEditionsData, type SerializedReferrerMetricsEditionsResponse, type SerializedReferrerMetricsEditionsResponseError, type SerializedReferrerMetricsEditionsResponseOk, type SerializedUnrankedReferrerMetricsPieSplit, type SerializedUnrankedReferrerMetricsRevShareCap, type UnrankedReferrerMetricsPieSplit, type UnrankedReferrerMetricsRevShareCap, buildAggregatedReferrerMetricsPieSplit, buildAggregatedReferrerMetricsRevShareCap, buildAwardedReferrerMetricsPieSplit, buildAwardedReferrerMetricsRevShareCap, buildEditionSummary, buildEditionSummaryPieSplit, buildEditionSummaryRevShareCap, buildEnsReferralUrl, buildLeaderboardPagePieSplit, buildLeaderboardPageRevShareCap, buildRankedReferrerMetricsPieSplit, buildRankedReferrerMetricsRevShareCap, buildReferralProgramEditionConfigSet, buildReferralProgramRulesPieSplit, buildReferralProgramRulesRevShareCap, buildReferrerLeaderboardPageContext, buildReferrerLeaderboardPageParams, buildReferrerLeaderboardPieSplit, buildReferrerLeaderboardRevShareCap, buildReferrerMetrics, buildReferrerMetricsRevShareCap, buildScoredReferrerMetricsPieSplit, buildUnrankedReferrerMetricsPieSplit, buildUnrankedReferrerMetricsRevShareCap, calcBaseReferralProgramEditionStatus, calcBaseRevenueContribution, calcReferralProgramEditionStatusPieSplit, calcReferralProgramEditionStatusRevShareCap, calcReferrerAwardPoolSharePieSplit, calcReferrerScorePieSplit, compareReferrerMetrics, deserializeReferralProgramEditionConfigSetArray, deserializeReferralProgramEditionSummariesResponse, deserializeReferrerLeaderboardPageResponse, deserializeReferrerMetricsEditionsResponse, findOverlappingEditionPair, getReferrerEditionMetrics, getReferrerLeaderboardPage, isFiniteNonNegativeNumber, isInteger, isNonNegativeInteger, isPositiveInteger, isReferrerQualifiedRevShareCap, isValidDuration, isValidReferrerScore, serializeReferralProgramEditionSummariesResponse, serializeReferralProgramEditionSummary, serializeReferralProgramRules, serializeReferrerLeaderboardPageResponse, serializeReferrerMetricsEditionsResponse, sliceReferrers, sortReferrerMetrics, validateAggregatedReferrerMetricsPieSplit, validateAggregatedReferrerMetricsRevShareCap, validateAwardedReferrerMetricsPieSplit, validateAwardedReferrerMetricsRevShareCap, validateBaseReferralProgramEditionSummary, validateBaseReferralProgramRules, validateDuration, validateEditionSummaryPieSplit, validateEditionSummaryRevShareCap, validateNonNegativeInteger, validateNormalizedAddress, validateRankedReferrerMetricsPieSplit, validateRankedReferrerMetricsRevShareCap, validateReferralProgramEditionConfigSet, validateReferralProgramRulesPieSplit, validateReferralProgramRulesRevShareCap, validateReferrerLeaderboardPageContext, validateReferrerMetrics, validateReferrerMetricsRevShareCap, validateReferrerRank, validateReferrerScore, validateScoredReferrerMetricsPieSplit, validateUnixTimestamp, validateUnrankedReferrerMetricsPieSplit, validateUnrankedReferrerMetricsRevShareCap };
package/dist/index.js CHANGED
@@ -353,7 +353,8 @@ function scaleBigintByNumber(value, scaleFactor) {
353
353
  var CurrencyIds = {
354
354
  ETH: "ETH",
355
355
  USDC: "USDC",
356
- DAI: "DAI"
356
+ DAI: "DAI",
357
+ ENSTokens: "ENSTokens"
357
358
  };
358
359
  var currencyInfo = {
359
360
  [CurrencyIds.ETH]: {
@@ -370,6 +371,11 @@ var currencyInfo = {
370
371
  id: CurrencyIds.DAI,
371
372
  name: "Dai Stablecoin",
372
373
  decimals: 18
374
+ },
375
+ [CurrencyIds.ENSTokens]: {
376
+ id: CurrencyIds.ENSTokens,
377
+ name: "$ENS Tokens",
378
+ decimals: 18
373
379
  }
374
380
  };
375
381
  function priceEth(amount) {
@@ -504,6 +510,62 @@ import z3 from "zod/v4";
504
510
  // src/award-models/shared/api/zod-schemas.ts
505
511
  import z2 from "zod/v4";
506
512
 
513
+ // src/edition.ts
514
+ var REFERRAL_PROGRAM_EDITION_SLUG_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;
515
+ function validateReferralProgramEditionConfigSet(configSet) {
516
+ const violation = Array.from(configSet.entries()).find(([key, config]) => key !== config.slug);
517
+ if (violation) {
518
+ const [key, config] = violation;
519
+ throw new Error(
520
+ `Edition config set invariant violation: map key "${key}" does not match config.slug "${config.slug}"`
521
+ );
522
+ }
523
+ const overlap = findOverlappingEditionPair(Array.from(configSet.values()));
524
+ if (overlap) {
525
+ const [a, b] = overlap;
526
+ throw new Error(
527
+ `Edition config set invariant violation: editions "${a.slug}" and "${b.slug}" have overlapping time ranges for subregistryId ${a.rules.subregistryId.chainId}:${a.rules.subregistryId.address} (startTime and endTime are inclusive)`
528
+ );
529
+ }
530
+ }
531
+ function findOverlappingEditionPair(editions) {
532
+ const byRegistry = /* @__PURE__ */ new Map();
533
+ for (const edition of editions) {
534
+ const key = `${edition.rules.subregistryId.chainId}:${edition.rules.subregistryId.address}`;
535
+ const group = byRegistry.get(key);
536
+ if (group) {
537
+ group.push(edition);
538
+ } else {
539
+ byRegistry.set(key, [edition]);
540
+ }
541
+ }
542
+ for (const group of byRegistry.values()) {
543
+ if (group.length < 2) continue;
544
+ group.sort((a, b) => a.rules.startTime - b.rules.startTime);
545
+ for (let i = 1; i < group.length; i++) {
546
+ const prev = group[i - 1];
547
+ const curr = group[i];
548
+ if (curr.rules.startTime <= prev.rules.endTime) {
549
+ return [prev, curr];
550
+ }
551
+ }
552
+ }
553
+ return null;
554
+ }
555
+ function buildReferralProgramEditionConfigSet(configs) {
556
+ const slugCounts = configs.reduce((counts, config) => {
557
+ counts.set(config.slug, (counts.get(config.slug) || 0) + 1);
558
+ return counts;
559
+ }, /* @__PURE__ */ new Map());
560
+ const duplicates = Array.from(slugCounts.entries()).filter(([_, count]) => count > 1).map(([slug, count]) => `"${slug}" (${count} occurrences)`);
561
+ if (duplicates.length > 0) {
562
+ throw new Error(`Duplicate edition config slugs detected: ${duplicates.join(", ")}`);
563
+ }
564
+ const configSet = new Map(configs.map((config) => [config.slug, config]));
565
+ validateReferralProgramEditionConfigSet(configSet);
566
+ return configSet;
567
+ }
568
+
507
569
  // src/number.ts
508
570
  var isInteger = (value) => {
509
571
  return Number.isInteger(value);
@@ -710,6 +772,15 @@ var calcBaseReferralProgramEditionStatus = (rules, now) => {
710
772
  };
711
773
 
712
774
  // src/award-models/shared/api/zod-schemas.ts
775
+ var makeReferralProgramEditionSlugSchema = (valueLabel = "ReferralProgramEditionSlug") => z2.string().min(1, `${valueLabel} must not be empty`).regex(
776
+ REFERRAL_PROGRAM_EDITION_SLUG_PATTERN,
777
+ `${valueLabel} must contain only lowercase letters, digits, and hyphens. Must not start or end with a hyphen.`
778
+ );
779
+ var makeBaseReferralProgramEditionConfigSchema = (valueLabel = "BaseReferralProgramEditionConfig") => z2.object({
780
+ slug: makeReferralProgramEditionSlugSchema(`${valueLabel}.slug`),
781
+ displayName: z2.string().min(1, `${valueLabel}.displayName must not be empty`),
782
+ rules: makeBaseReferralProgramRulesSchema(`${valueLabel}.rules`)
783
+ });
713
784
  var makeBaseReferralProgramRulesSchema = (valueLabel) => z2.object({
714
785
  awardModel: z2.string(),
715
786
  startTime: makeUnixTimestampSchema(`${valueLabel}.startTime`),
@@ -735,12 +806,9 @@ var makeReferrerLeaderboardPageContextSchema = (valueLabel = "ReferrerLeaderboar
735
806
  endIndex: z2.optional(makeNonNegativeIntegerSchema(`${valueLabel}.endIndex`))
736
807
  });
737
808
  var makeReferralProgramStatusSchema = (_valueLabel = "status") => z2.enum(ReferralProgramEditionStatuses);
738
- var makeBaseReferralProgramEditionSummarySchema = (valueLabel) => z2.object({
809
+ var makeBaseReferralProgramEditionSummarySchema = (valueLabel) => makeBaseReferralProgramEditionConfigSchema(valueLabel).safeExtend({
739
810
  awardModel: z2.string(),
740
- slug: z2.string().min(1, `${valueLabel}.slug must not be empty`),
741
- displayName: z2.string().min(1, `${valueLabel}.displayName must not be empty`),
742
- status: makeReferralProgramStatusSchema(`${valueLabel}.status`),
743
- rules: makeBaseReferralProgramRulesSchema(`${valueLabel}.rules`)
811
+ status: makeReferralProgramStatusSchema(`${valueLabel}.status`)
744
812
  });
745
813
  var makeBaseReferrerLeaderboardPageSchema = (valueLabel) => z2.object({
746
814
  awardModel: z2.string(),
@@ -1321,10 +1389,6 @@ var makeReferrerEditionMetricsSchema = (valueLabel = "ReferrerEditionMetrics") =
1321
1389
  };
1322
1390
  });
1323
1391
  };
1324
- var makeReferralProgramEditionSlugSchema = (valueLabel = "ReferralProgramEditionSlug") => z5.string().min(1, `${valueLabel} must not be empty`).regex(
1325
- /^[a-z0-9]+(-[a-z0-9]+)*$/,
1326
- `${valueLabel} must contain only lowercase letters, digits, and hyphens. Must not start or end with a hyphen.`
1327
- );
1328
1392
  var makeReferrerMetricsEditionsResponseOkSchema = (valueLabel = "ReferrerMetricsEditionsResponseOk") => z5.object({
1329
1393
  responseCode: z5.literal(ReferrerMetricsEditionsResponseCodes.Ok),
1330
1394
  data: z5.record(
@@ -1341,12 +1405,7 @@ var makeReferrerMetricsEditionsResponseSchema = (valueLabel = "ReferrerMetricsEd
1341
1405
  makeReferrerMetricsEditionsResponseOkSchema(valueLabel),
1342
1406
  makeReferrerMetricsEditionsResponseErrorSchema(valueLabel)
1343
1407
  ]);
1344
- var makeReferralProgramEditionConfigBaseSchema = (valueLabel) => z5.object({
1345
- slug: makeReferralProgramEditionSlugSchema(`${valueLabel}.slug`),
1346
- displayName: z5.string().min(1, `${valueLabel}.displayName must not be empty`),
1347
- rules: makeBaseReferralProgramRulesSchema(`${valueLabel}.rules`)
1348
- });
1349
- var makeReferralProgramEditionConfigSchema = (valueLabel = "ReferralProgramEditionConfig") => makeReferralProgramEditionConfigBaseSchema(valueLabel).safeExtend({
1408
+ var makeReferralProgramEditionConfigSchema = (valueLabel = "ReferralProgramEditionConfig") => makeBaseReferralProgramEditionConfigSchema(valueLabel).safeExtend({
1350
1409
  rules: makeReferralProgramRulesSchema(`${valueLabel}.rules`)
1351
1410
  });
1352
1411
  var makeReferralProgramEditionConfigSetArraySchema = (valueLabel = "ReferralProgramEditionConfigSetArray") => {
@@ -1357,7 +1416,7 @@ var makeReferralProgramEditionConfigSetArraySchema = (valueLabel = "ReferralProg
1357
1416
  const looseItemSchema = z5.looseObject({
1358
1417
  rules: z5.looseObject({ awardModel: z5.string() })
1359
1418
  });
1360
- const unrecognizedBaseSchema = makeReferralProgramEditionConfigBaseSchema(
1419
+ const unrecognizedBaseSchema = makeBaseReferralProgramEditionConfigSchema(
1361
1420
  `${valueLabel}[edition]`
1362
1421
  );
1363
1422
  return z5.array(looseItemSchema).transform((items, ctx) => {
@@ -1398,6 +1457,15 @@ var makeReferralProgramEditionConfigSetArraySchema = (valueLabel = "ReferralProg
1398
1457
  }
1399
1458
  slugs.add(edition.slug);
1400
1459
  }
1460
+ const overlap = findOverlappingEditionPair(result);
1461
+ if (overlap) {
1462
+ const [a, b] = overlap;
1463
+ ctx.addIssue({
1464
+ code: "custom",
1465
+ message: `${valueLabel}: editions "${a.slug}" and "${b.slug}" have overlapping time ranges for subregistryId ${a.rules.subregistryId.chainId}:${a.rules.subregistryId.address} (startTime and endTime are inclusive)`
1466
+ });
1467
+ return [];
1468
+ }
1401
1469
  return result;
1402
1470
  });
1403
1471
  };
@@ -1438,6 +1506,15 @@ var makeReferralProgramEditionSummarySchema = (valueLabel = "ReferralProgramEdit
1438
1506
  };
1439
1507
  var makeReferralProgramEditionSummariesDataSchema = (valueLabel = "ReferralProgramEditionSummariesData") => z5.object({
1440
1508
  editions: z5.array(makeReferralProgramEditionSummarySchema(`${valueLabel}.editions[edition]`))
1509
+ }).superRefine((data, ctx) => {
1510
+ const overlap = findOverlappingEditionPair(data.editions);
1511
+ if (!overlap) return;
1512
+ const [a, b] = overlap;
1513
+ ctx.addIssue({
1514
+ code: "custom",
1515
+ path: ["editions"],
1516
+ message: `${valueLabel}: editions "${a.slug}" and "${b.slug}" have overlapping time ranges for subregistryId ${a.rules.subregistryId.chainId}:${a.rules.subregistryId.address} (startTime and endTime are inclusive)`
1517
+ });
1441
1518
  });
1442
1519
  var makeReferralProgramEditionSummariesResponseOkSchema = (valueLabel = "ReferralProgramEditionSummariesResponseOk") => z5.object({
1443
1520
  responseCode: z5.literal(ReferralProgramEditionSummariesResponseCodes.Ok),
@@ -1917,31 +1994,6 @@ var buildAggregatedReferrerMetricsPieSplit = (referrers, rules) => {
1917
1994
  return result;
1918
1995
  };
1919
1996
 
1920
- // src/edition.ts
1921
- var REFERRAL_PROGRAM_EDITION_SLUG_PATTERN = /^[a-z0-9]+(-[a-z0-9]+)*$/;
1922
- function validateReferralProgramEditionConfigSet(configSet) {
1923
- const violation = Array.from(configSet.entries()).find(([key, config]) => key !== config.slug);
1924
- if (violation) {
1925
- const [key, config] = violation;
1926
- throw new Error(
1927
- `Edition config set invariant violation: map key "${key}" does not match config.slug "${config.slug}"`
1928
- );
1929
- }
1930
- }
1931
- function buildReferralProgramEditionConfigSet(configs) {
1932
- const slugCounts = configs.reduce((counts, config) => {
1933
- counts.set(config.slug, (counts.get(config.slug) || 0) + 1);
1934
- return counts;
1935
- }, /* @__PURE__ */ new Map());
1936
- const duplicates = Array.from(slugCounts.entries()).filter(([_, count]) => count > 1).map(([slug, count]) => `"${slug}" (${count} occurrences)`);
1937
- if (duplicates.length > 0) {
1938
- throw new Error(`Duplicate edition config slugs detected: ${duplicates.join(", ")}`);
1939
- }
1940
- const configSet = new Map(configs.map((config) => [config.slug, config]));
1941
- validateReferralProgramEditionConfigSet(configSet);
1942
- return configSet;
1943
- }
1944
-
1945
1997
  // src/award-models/shared/edition-summary.ts
1946
1998
  var validateBaseReferralProgramEditionSummary = (summary) => {
1947
1999
  if (!REFERRAL_PROGRAM_EDITION_SLUG_PATTERN.test(summary.slug)) {
@@ -3088,6 +3140,7 @@ export {
3088
3140
  deserializeReferralProgramEditionSummariesResponse,
3089
3141
  deserializeReferrerLeaderboardPageResponse,
3090
3142
  deserializeReferrerMetricsEditionsResponse,
3143
+ findOverlappingEditionPair,
3091
3144
  getReferrerEditionMetrics,
3092
3145
  getReferrerLeaderboardPage,
3093
3146
  isFiniteNonNegativeNumber,