@domino-sdk/relay 1.50.0 → 1.52.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.
Files changed (51) hide show
  1. package/dist/{attempt-captures-DF--rIgJ.d.ts → attempt-captures-QC4kTA44.d.ts} +2 -1
  2. package/dist/authoring.d.ts +59 -49
  3. package/dist/authoring.js +21 -5
  4. package/dist/{automatic-outcomes-C7f5-N0M.d.ts → automatic-outcomes-CVyZHxir.d.ts} +1 -1
  5. package/dist/browser.d.ts +6 -6
  6. package/dist/browser.js +10 -10
  7. package/dist/{chunk-MMR6CZEJ.js → chunk-2NUD237O.js} +1 -1
  8. package/dist/{chunk-DP7FGRUW.js → chunk-53JMTUWG.js} +1 -1
  9. package/dist/{chunk-56THZOIA.js → chunk-6AMIMYRD.js} +4 -4
  10. package/dist/{chunk-GYXYZL5E.js → chunk-7BNCLWAO.js} +1 -1
  11. package/dist/{chunk-DMG7CCMX.js → chunk-ACVBQK55.js} +1 -1
  12. package/dist/{chunk-K7CBVB3P.js → chunk-B44SRIQ4.js} +8 -8
  13. package/dist/{chunk-SGWAVIEP.js → chunk-CCE2JWES.js} +1 -1
  14. package/dist/{chunk-PBCJDKCV.js → chunk-EFSAQESN.js} +2 -2
  15. package/dist/{chunk-7WVTYMFA.js → chunk-GTQJSDBS.js} +6 -6
  16. package/dist/{chunk-VTD4YDEO.js → chunk-IELNFM3V.js} +581 -537
  17. package/dist/{chunk-3LK6JIBY.js → chunk-K6TVMNU4.js} +1 -1
  18. package/dist/{chunk-CHURQQBP.js → chunk-LPHXTZDA.js} +2 -2
  19. package/dist/{chunk-O5WR2JT4.js → chunk-S2PMKZSX.js} +1 -1
  20. package/dist/{chunk-W3SQLZRA.js → chunk-XFAYQFRO.js} +1 -1
  21. package/dist/{chunk-NAEVXBSF.js → chunk-YVC3B72P.js} +1 -1
  22. package/dist/{chunk-4Y5AYL3C.js → chunk-ZJ3FVZRP.js} +2 -2
  23. package/dist/{client-C5sCO45H.d.ts → client-CzNtl8UO.d.ts} +4 -4
  24. package/dist/{deployments-DQX7Yz5x.d.ts → deployments-DkoBtC5t.d.ts} +241 -241
  25. package/dist/{groups-DG7_3ipk.d.ts → groups-B5R1RCsl.d.ts} +1 -1
  26. package/dist/index.d.ts +7 -7
  27. package/dist/index.js +9 -9
  28. package/dist/internal.d.ts +9 -9
  29. package/dist/internal.js +8 -8
  30. package/dist/{offers-yZTUWHSp.d.ts → offers-CH1RZekg.d.ts} +2 -2
  31. package/dist/{pages-DLFRK5l7.d.ts → pages-BTlOg8sl.d.ts} +1 -1
  32. package/dist/portal-proxy.js +3 -3
  33. package/dist/react/index.d.ts +8 -8
  34. package/dist/react/index.js +10 -10
  35. package/dist/runtime/authoring.js +1 -1
  36. package/dist/runtime/chunks/AVRVSLHX.js +1 -0
  37. package/dist/runtime/manifest.json +3 -3
  38. package/dist/runtime/schema.js +1 -1
  39. package/dist/{schema-6uU1s4if.d.ts → schema-BJ9bOgpN.d.ts} +1 -0
  40. package/dist/schema.d.ts +357 -343
  41. package/dist/schema.js +9 -7
  42. package/dist/server/index.d.ts +9 -9
  43. package/dist/server/index.js +58 -14
  44. package/dist/{submission-input-DtNMoL30.d.ts → submission-input-BNah53go.d.ts} +2 -2
  45. package/dist/{telegram-browser-DE9d1M-g.d.ts → telegram-browser-C36j_6v-.d.ts} +1 -1
  46. package/dist/testing.d.ts +3 -3
  47. package/dist/testing.js +5 -5
  48. package/dist/{transport-E82gSEB-.d.ts → transport-B8w9oqCY.d.ts} +3431 -3326
  49. package/dist/{x-B6mbKgoQ.d.ts → x-BfQcsDp0.d.ts} +1 -1
  50. package/package.json +1 -1
  51. package/dist/runtime/chunks/4O3MZT45.js +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as z from 'zod';
2
- import { q as ResourceHandle, G as GroupHandle } from './schema-6uU1s4if.js';
2
+ import { q as ResourceHandle, G as GroupHandle } from './schema-BJ9bOgpN.js';
3
3
 
4
4
  declare const pointLedgerPropertiesSchema: z.ZodObject<{
5
5
  name: z.ZodString;
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
- export { B as Badge, M as ManagedBadge, a as MemberBadge, b as MemberBadges, O as Offer, c as OfferDefinition, d as OfferPrice, R as RedeemOfferInput, e as Redemption } from './offers-yZTUWHSp.js';
1
+ export { B as Badge, M as ManagedBadge, a as MemberBadge, b as MemberBadges, O as Offer, c as OfferDefinition, d as OfferPrice, R as RedeemOfferInput, e as Redemption } from './offers-CH1RZekg.js';
2
2
  export { R as RelayAction, a as RequestError, b as RequestErrorDetails, c as RequestErrorKind, d as RequestRecovery, e as createRelayAction, i as isRequestError } from './action-DBzILFx9.js';
3
- export { A as AuthStartInput, C as ClaimSubmission, E as EmailVerification, K as KnownRelayErrorCode, P as PhotoSubmission, a as ProgressObservation, b as ProgressObserver, Q as QuestActionResult, c as QuestController, d as QuestUpdatedError, e as QuizSubmission, R as RelayClient, f as RelayClientOptions, g as RelayError, h as RelayErrorCode, i as RelayErrorDetails, j as RelayErrorKind, k as RelayRequestOptions, l as RelayResponseOptions, S as SubmissionCallOptions, m as SubmissionDraft, n as SubmissionStatus, o as SubmissionStore, V as ValueSubmission, p as createRelayClient, q as isRelayError } from './client-C5sCO45H.js';
4
- export { A as Attempt, a as AttemptStatus, E as Entitlement, b as EvaluatorProgress, K as KnownAttemptStatus, c as KnownTrackerSkipCode, M as MemberProgress, Q as QuestBudgetView, d as QuestPresentation, e as QuestProfile, f as QuizEvidence, R as Reward, S as SubmissionEvidence, g as SubmitInput, T as TieredRewardReference, h as TrackerSkipCode } from './schema-6uU1s4if.js';
3
+ export { A as AuthStartInput, C as ClaimSubmission, E as EmailVerification, K as KnownRelayErrorCode, P as PhotoSubmission, a as ProgressObservation, b as ProgressObserver, Q as QuestActionResult, c as QuestController, d as QuestUpdatedError, e as QuizSubmission, R as RelayClient, f as RelayClientOptions, g as RelayError, h as RelayErrorCode, i as RelayErrorDetails, j as RelayErrorKind, k as RelayRequestOptions, l as RelayResponseOptions, S as SubmissionCallOptions, m as SubmissionDraft, n as SubmissionStatus, o as SubmissionStore, V as ValueSubmission, p as createRelayClient, q as isRelayError } from './client-CzNtl8UO.js';
4
+ export { A as Attempt, a as AttemptStatus, E as Entitlement, b as EvaluatorProgress, K as KnownAttemptStatus, c as KnownTrackerSkipCode, M as MemberProgress, Q as QuestBudgetView, d as QuestPresentation, e as QuestProfile, f as QuizEvidence, R as Reward, S as SubmissionEvidence, g as SubmitInput, T as TieredRewardReference, h as TrackerSkipCode } from './schema-BJ9bOgpN.js';
5
5
  export { f as formatUnits, p as parseUnits } from './units-CwgsPB_r.js';
6
- export { P as Page, a as PageQuery, Q as QuestClaimInput, b as QuestEnrollment, c as QuestEnrollmentInput, d as QuestInteraction, e as QuestOutcome, f as QuestOutcomePage, g as QuestOutcomeQuery, h as QuestOutcomeState, i as QuestRewardView, j as QuestView, R as ResponseResult, U as UnsupportedResponse, p as paginate } from './pages-DLFRK5l7.js';
6
+ export { P as Page, a as PageQuery, Q as QuestClaimInput, b as QuestEnrollment, c as QuestEnrollmentInput, d as QuestInteraction, e as QuestOutcome, f as QuestOutcomePage, g as QuestOutcomeQuery, h as QuestOutcomeState, i as QuestRewardView, j as QuestView, R as ResponseResult, U as UnsupportedResponse, p as paginate } from './pages-BTlOg8sl.js';
7
7
  export { A as AccountConnection, a as AuthProvider, T as TelegramAccountConnection, b as TelegramSignInMethods } from './accounts-DRPENuZe.js';
8
8
  export { E as ExchangeInput, M as MemberSummary, P as ParticipantActivity, a as ParticipantPrincipal, b as ParticipantSession, R as RelayEvent, S as Session, s as sessionMember } from './participant-activity-iciCEs_8.js';
9
- export { A as AvailabilityWindow, C as CampaignDefinition, a as CampaignEnrollment, b as CampaignEnrollmentInput, c as CampaignView, d as CampaignWithdrawalInput, K as KnownPointEntryKind, L as LeaderboardDefinition, e as LeaderboardHistoryPage, f as LeaderboardHistoryQuery, g as LeaderboardPage, h as LeaderboardPlacement, i as LeaderboardQuery, M as MemberCampaignEnrollmentInput, j as MemberCampaignWithdrawalInput, P as PointBalance, k as PointBalances, l as PointEntry, m as PointEntryKind, n as PointHistoryPage, o as PointHistoryQuery, p as PointLedgerReference, q as ProjectGroup, r as ProjectGroupReference, R as ReferralDefinition } from './groups-DG7_3ipk.js';
10
- export { A as AutomaticCatchUpPreview, a as AutomaticEvent, b as AutomaticOutcome, C as CollectionPass, c as CounterAchievement, d as CounterPolicy, e as CounterProgress } from './automatic-outcomes-C7f5-N0M.js';
11
- export { M as MissingPrerequisite, P as Prerequisite, T as TextEvidence, a as TextOptions, U as UrlEvidence, b as UrlOptions, V as ValueEvidence } from './submission-input-DtNMoL30.js';
9
+ export { A as AvailabilityWindow, C as CampaignDefinition, a as CampaignEnrollment, b as CampaignEnrollmentInput, c as CampaignView, d as CampaignWithdrawalInput, K as KnownPointEntryKind, L as LeaderboardDefinition, e as LeaderboardHistoryPage, f as LeaderboardHistoryQuery, g as LeaderboardPage, h as LeaderboardPlacement, i as LeaderboardQuery, M as MemberCampaignEnrollmentInput, j as MemberCampaignWithdrawalInput, P as PointBalance, k as PointBalances, l as PointEntry, m as PointEntryKind, n as PointHistoryPage, o as PointHistoryQuery, p as PointLedgerReference, q as ProjectGroup, r as ProjectGroupReference, R as ReferralDefinition } from './groups-B5R1RCsl.js';
10
+ export { A as AutomaticCatchUpPreview, a as AutomaticEvent, b as AutomaticOutcome, C as CollectionPass, c as CounterAchievement, d as CounterPolicy, e as CounterProgress } from './automatic-outcomes-CVyZHxir.js';
11
+ export { M as MissingPrerequisite, P as Prerequisite, T as TextEvidence, a as TextOptions, U as UrlEvidence, b as UrlOptions, V as ValueEvidence } from './submission-input-BNah53go.js';
12
12
  export { A as AvatarProvider, O as OwnProfile, P as ProfileAvatar, a as ProfileCompletion, b as ProfileCompletionPage, c as ProfileCompletionQuery, d as ProfileReferral, e as ProfileSummary, f as ProfileUpdate, g as ProfileVisibility } from './profiles-Cdv4BSd_.js';
13
13
  export { Q as QuizContent, S as StreakProgress } from './streaks-0YuipsUQ.js';
14
14
  export { C as CosmosChain, a as CosmosNetwork, L as LinkedWallet, W as WalletAddressInput, b as WalletChain, c as WalletMessageChallenge, d as WalletSignInNetwork, e as WalletSignature, f as WalletSigner, g as WalletUnlinkInput } from './wallet-Ac7OFpOr.js';
package/dist/index.js CHANGED
@@ -5,22 +5,22 @@ import {
5
5
  import {
6
6
  QuestUpdatedError,
7
7
  createRelayClient
8
- } from "./chunk-K7CBVB3P.js";
8
+ } from "./chunk-B44SRIQ4.js";
9
9
  import {
10
10
  createRelayAction
11
- } from "./chunk-NAEVXBSF.js";
11
+ } from "./chunk-YVC3B72P.js";
12
12
  import {
13
13
  QuestOutcomeState
14
- } from "./chunk-4Y5AYL3C.js";
14
+ } from "./chunk-ZJ3FVZRP.js";
15
15
  import {
16
16
  PointEntryKind
17
- } from "./chunk-SGWAVIEP.js";
18
- import "./chunk-MMR6CZEJ.js";
19
- import "./chunk-W3SQLZRA.js";
20
- import "./chunk-DMG7CCMX.js";
17
+ } from "./chunk-CCE2JWES.js";
18
+ import "./chunk-2NUD237O.js";
19
+ import "./chunk-XFAYQFRO.js";
20
+ import "./chunk-ACVBQK55.js";
21
21
  import {
22
22
  sessionMember
23
- } from "./chunk-DP7FGRUW.js";
23
+ } from "./chunk-53JMTUWG.js";
24
24
  import {
25
25
  AttemptStatus,
26
26
  RelayError,
@@ -29,7 +29,7 @@ import {
29
29
  isRelayError,
30
30
  isRequestError,
31
31
  paginate
32
- } from "./chunk-VTD4YDEO.js";
32
+ } from "./chunk-IELNFM3V.js";
33
33
  export {
34
34
  AttemptStatus,
35
35
  PointEntryKind,
@@ -1,15 +1,15 @@
1
- export { I as IdentityKindClaim, M as ManagementTransportOptions, P as ParticipantRoute, R as REFERRAL_INTEGRATION_REWARD_ERROR, c as containsReferralIntegrationReward, i as identityIntegrationInputSchema, a as identityIntegrationSchema, b as identityIntegrationSecretSchema, d as identityKindClaimSchema, e as isIntegrationParticipantPath, f as isParticipantRoute, m as managementTransport, p as parseImageExtraction, g as parseImageResult, h as participantExchangeSchema, j as participantRoutePattern, k as participantRoutes, q as questConfiguration, s as sequenceCursorSchema, l as sourceDataSchema, n as sourceRoles, v as validateQuestShape } from './transport-E82gSEB-.js';
2
- export { E as Extracted } from './x-B6mbKgoQ.js';
1
+ export { I as IdentityKindClaim, M as ManagementTransportOptions, P as ParticipantRoute, R as REFERRAL_INTEGRATION_REWARD_ERROR, c as containsReferralIntegrationReward, i as identityIntegrationInputSchema, a as identityIntegrationSchema, b as identityIntegrationSecretSchema, d as identityKindClaimSchema, e as isIntegrationParticipantPath, f as isParticipantRoute, m as managementTransport, p as parseImageExtraction, g as parseImageResult, h as participantExchangeSchema, j as participantRoutePattern, k as participantRoutes, q as questConfiguration, s as sequenceCursorSchema, l as sourceDataSchema, n as sourceRoles, v as validateQuestShape } from './transport-B8w9oqCY.js';
2
+ export { E as Extracted } from './x-BfQcsDp0.js';
3
3
  import { c as RequestErrorKind } from './action-DBzILFx9.js';
4
- export { i as TrackerDataBudget, s as schemaCheckedReader, t as trackerDataBatchSteps, j as trackerDataIssue, k as trackerDataIssues, l as trackerDataPathTypes, m as trackerDataRecordSteps, w as whereSchemaIssue } from './schema-6uU1s4if.js';
4
+ export { i as TrackerDataBudget, s as schemaCheckedReader, t as trackerDataBatchSteps, j as trackerDataIssue, k as trackerDataIssues, l as trackerDataPathTypes, m as trackerDataRecordSteps, w as whereSchemaIssue } from './schema-BJ9bOgpN.js';
5
5
  import 'zod';
6
- import './pages-DLFRK5l7.js';
7
- import './offers-yZTUWHSp.js';
8
- import './groups-DG7_3ipk.js';
6
+ import './pages-BTlOg8sl.js';
7
+ import './offers-CH1RZekg.js';
8
+ import './groups-B5R1RCsl.js';
9
9
  import './profiles-Cdv4BSd_.js';
10
- import './automatic-outcomes-C7f5-N0M.js';
11
- import './attempt-captures-DF--rIgJ.js';
12
- import './deployments-DQX7Yz5x.js';
10
+ import './automatic-outcomes-CVyZHxir.js';
11
+ import './attempt-captures-QC4kTA44.js';
12
+ import './deployments-DkoBtC5t.js';
13
13
 
14
14
  /** The management client's and the CLI's default deadline per call. */
15
15
  declare const MANAGEMENT_TIMEOUT = 30000;
package/dist/internal.js CHANGED
@@ -9,17 +9,17 @@ import {
9
9
  participantExchangeSchema,
10
10
  questConfiguration,
11
11
  sequenceCursorSchema
12
- } from "./chunk-56THZOIA.js";
12
+ } from "./chunk-6AMIMYRD.js";
13
13
  import {
14
14
  parseImageExtraction,
15
15
  parseImageResult
16
- } from "./chunk-CHURQQBP.js";
17
- import "./chunk-3LK6JIBY.js";
16
+ } from "./chunk-LPHXTZDA.js";
17
+ import "./chunk-K6TVMNU4.js";
18
18
  import {
19
19
  sourceDataSchema,
20
20
  sourceRoles,
21
21
  validateQuestShape
22
- } from "./chunk-O5WR2JT4.js";
22
+ } from "./chunk-S2PMKZSX.js";
23
23
  import {
24
24
  isIntegrationParticipantPath,
25
25
  isParticipantRoute,
@@ -31,9 +31,9 @@ import {
31
31
  lifetime,
32
32
  retryAfter,
33
33
  retrying
34
- } from "./chunk-W3SQLZRA.js";
35
- import "./chunk-DMG7CCMX.js";
36
- import "./chunk-DP7FGRUW.js";
34
+ } from "./chunk-XFAYQFRO.js";
35
+ import "./chunk-ACVBQK55.js";
36
+ import "./chunk-53JMTUWG.js";
37
37
  import {
38
38
  schemaCheckedReader,
39
39
  trackerDataBatchSteps,
@@ -42,7 +42,7 @@ import {
42
42
  trackerDataPathTypes,
43
43
  trackerDataRecordSteps,
44
44
  whereSchemaIssue
45
- } from "./chunk-VTD4YDEO.js";
45
+ } from "./chunk-IELNFM3V.js";
46
46
  export {
47
47
  MANAGEMENT_TIMEOUT,
48
48
  REFERRAL_INTEGRATION_REWARD_ERROR,
@@ -1,6 +1,6 @@
1
1
  import * as z from 'zod';
2
- import { q as ResourceHandle } from './schema-6uU1s4if.js';
3
- import { t as AuthoringIdentity } from './groups-DG7_3ipk.js';
2
+ import { q as ResourceHandle } from './schema-BJ9bOgpN.js';
3
+ import { t as AuthoringIdentity } from './groups-B5R1RCsl.js';
4
4
 
5
5
  declare const badgePropertiesSchema: z.ZodObject<{
6
6
  name: z.ZodString;
@@ -1,5 +1,5 @@
1
1
  import * as z from 'zod';
2
- import { a as AttemptStatus, b$ as questDescriptionSchema, h as TrackerSkipCode } from './schema-6uU1s4if.js';
2
+ import { a as AttemptStatus, b$ as questDescriptionSchema, h as TrackerSkipCode } from './schema-BJ9bOgpN.js';
3
3
 
4
4
  /**
5
5
  * The delivery actions this SDK knows. `RewardDelivery.action` is an open string: Relay can add
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-MLIXJPKL.js";
4
4
  import {
5
5
  clientIdentity
6
- } from "./chunk-DMG7CCMX.js";
6
+ } from "./chunk-ACVBQK55.js";
7
7
  import {
8
8
  exchangeResultSchema
9
- } from "./chunk-DP7FGRUW.js";
10
- import "./chunk-VTD4YDEO.js";
9
+ } from "./chunk-53JMTUWG.js";
10
+ import "./chunk-IELNFM3V.js";
11
11
 
12
12
  // src/portal-proxy.ts
13
13
  var statusCode = (status) => ({
@@ -1,20 +1,20 @@
1
- import { B as Badge, b as MemberBadges, O as Offer, e as Redemption } from '../offers-yZTUWHSp.js';
1
+ import { B as Badge, b as MemberBadges, O as Offer, e as Redemption } from '../offers-CH1RZekg.js';
2
2
  import { b as ParticipantSession, R as RelayEvent, P as ParticipantActivity, M as MemberSummary } from '../participant-activity-iciCEs_8.js';
3
- import { g as RelayError, R as RelayClient, m as SubmissionDraft } from '../client-C5sCO45H.js';
4
- import { P as Page, D as collectionViewSchema, j as QuestView, g as QuestOutcomeQuery, e as QuestOutcome } from '../pages-DLFRK5l7.js';
3
+ import { g as RelayError, R as RelayClient, m as SubmissionDraft } from '../client-CzNtl8UO.js';
4
+ import { P as Page, D as collectionViewSchema, j as QuestView, g as QuestOutcomeQuery, e as QuestOutcome } from '../pages-BTlOg8sl.js';
5
5
  import * as react from 'react';
6
6
  import { ReactNode } from 'react';
7
7
  import { J as JSONType } from '../util.d-w9f9t3ua.js';
8
8
  import { z } from 'zod';
9
- import { E as Entitlement, a as AttemptStatus, T as TieredRewardReference } from '../schema-6uU1s4if.js';
9
+ import { E as Entitlement, a as AttemptStatus, T as TieredRewardReference } from '../schema-BJ9bOgpN.js';
10
10
  import { a as AuthProvider, A as AccountConnection } from '../accounts-DRPENuZe.js';
11
11
  export { T as TelegramAccountConnection, b as TelegramSignInMethods } from '../accounts-DRPENuZe.js';
12
- import { c as SignInMethods, C as CosmosChains, d as SignInOption, f as SignInUnavailable, T as TelegramSignInOption, g as SignInWallet, D as DiscoveredWallet } from '../telegram-browser-DE9d1M-g.js';
13
- export { a as EmailSignInOption, O as OAuthSignInOption, b as SignInIcon, W as WalletSignInOption, t as telegramMiniAppInitData } from '../telegram-browser-DE9d1M-g.js';
12
+ import { c as SignInMethods, C as CosmosChains, d as SignInOption, f as SignInUnavailable, T as TelegramSignInOption, g as SignInWallet, D as DiscoveredWallet } from '../telegram-browser-C36j_6v-.js';
13
+ export { a as EmailSignInOption, O as OAuthSignInOption, b as SignInIcon, W as WalletSignInOption, t as telegramMiniAppInitData } from '../telegram-browser-C36j_6v-.js';
14
14
  import { f as WalletSigner, d as WalletSignInNetwork, L as LinkedWallet } from '../wallet-Ac7OFpOr.js';
15
- import { h as LeaderboardPlacement, be as referralSummarySchema, g as LeaderboardPage, l as PointEntry, k as PointBalances, p as PointLedgerReference } from '../groups-DG7_3ipk.js';
15
+ import { h as LeaderboardPlacement, be as referralSummarySchema, g as LeaderboardPage, l as PointEntry, k as PointBalances, p as PointLedgerReference } from '../groups-B5R1RCsl.js';
16
16
  import { f as ProfileUpdate, e as ProfileSummary, a as ProfileCompletion, d as ProfileReferral } from '../profiles-Cdv4BSd_.js';
17
- import '../submission-input-DtNMoL30.js';
17
+ import '../submission-input-BNah53go.js';
18
18
  import '../action-DBzILFx9.js';
19
19
 
20
20
  /**
@@ -9,19 +9,19 @@ import {
9
9
  readSignInMethods,
10
10
  signInOptionsFrom,
11
11
  telegramMiniAppInitData
12
- } from "../chunk-PBCJDKCV.js";
13
- import "../chunk-K7CBVB3P.js";
12
+ } from "../chunk-EFSAQESN.js";
13
+ import "../chunk-B44SRIQ4.js";
14
14
  import {
15
15
  createRelayAction
16
- } from "../chunk-NAEVXBSF.js";
17
- import "../chunk-4Y5AYL3C.js";
18
- import "../chunk-SGWAVIEP.js";
19
- import "../chunk-MMR6CZEJ.js";
20
- import "../chunk-W3SQLZRA.js";
21
- import "../chunk-DMG7CCMX.js";
16
+ } from "../chunk-YVC3B72P.js";
17
+ import "../chunk-ZJ3FVZRP.js";
18
+ import "../chunk-CCE2JWES.js";
19
+ import "../chunk-2NUD237O.js";
20
+ import "../chunk-XFAYQFRO.js";
21
+ import "../chunk-ACVBQK55.js";
22
22
  import {
23
23
  sessionMember
24
- } from "../chunk-DP7FGRUW.js";
24
+ } from "../chunk-53JMTUWG.js";
25
25
  import {
26
26
  RelayError,
27
27
  RelayErrorCode,
@@ -29,7 +29,7 @@ import {
29
29
  clientError,
30
30
  isRelayError,
31
31
  isRequestError
32
- } from "../chunk-VTD4YDEO.js";
32
+ } from "../chunk-IELNFM3V.js";
33
33
 
34
34
  // src/react/context.ts
35
35
  import { createContext, useContext } from "react";
@@ -1 +1 @@
1
- import{Bc as ke,Bd as Ee,Dd as M,E as j,F as J,Fc as y,G as V,Gd as ze,H as X,Ib as le,Ic as er,Jb as pe,Me as Re,Na as L,Oa as oe,Od as Q,Pa as I,Pb as Ve,Pc as v,Qa as se,Qb as Xe,Qc as we,Qd as je,Qe as Ce,Rc as E,Tc as rr,V as Y,W as ee,Yd as Me,Z as re,Zg as or,_ as T,a as He,ag as Te,ba as te,bf as $e,c as Je,ca as D,d as C,da as ae,fb as ce,fc as Ye,ga as ne,hd as tr,ib as ie,ic as ge,id as ar,ih as Le,jc as he,jd as nr,jh as Ie,kd as ve,ld as be,lf as xe,mf as Ae,nb as ue,nd as ye,nf as U,pd as Se,rb as de,rd as qe,sc as O,tc as $,u as N,v as Z,w as _,wc as P,x as W,xc as B,y as F,yb as me,yc as fe,z as H,zg as De}from"./chunks/4O3MZT45.js";import{Vb as A,Wb as K,hc as R,nb as q,pa as x,pc as z,td as Fe,vb as G}from"./chunks/IDOMZWRY.js";function Oe(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function sr(e,t){Oe(t);let r=/^(\d+)(?:\.(\d+))?$/.exec(e.trim());if(!r)throw new Error(`Use a decimal amount such as "1.5", not "${e}"`);let[,n,c=""]=r,s=c.replace(/0+$/,"");if(s.length>t)throw new Error(`"${e}" has more than ${t} decimal places, which this token cannot hold`);return BigInt(n+s.padEnd(t,"0"))}function cr(e,t){Oe(t);let r=typeof e=="bigint"?e:BigInt(e),n=r<0n?"-":"",c=(r<0n?-r:r).toString().padStart(t+1,"0"),s=c.slice(0,c.length-t),i=c.slice(c.length-t).replace(/0+$/,"");return n+s+(i?"."+i:"")}function Be(e,t={}){let{trigger:r,completion:n,requires:c,performance:s,retryCooldownMs:i}=e,o=r.kind==="automatic"?r.tracker:void 0,u=o?.content===!0;if(s&&!u)throw new Error("Performance requires a content quest");if(u){if(n.kind!=="keyed")throw new Error("Content quests complete once per content item");if(o.beneficiary!=="author"||o.on!=="new-record")throw new Error("A content quest pays each content item's author and fires on its first observation")}if(i!==void 0&&(r.kind!=="manual"||r.actor==="staff"))throw new Error("A retry cooldown applies only to quests members submit themselves");if(r.kind==="automatic"&&!o){if(!t.template&&c.length===0)throw new Error("Automatic quests need at least one prerequisite");if(n.kind!=="once")throw new Error("Prerequisite-only automatic quests complete once")}}var ir=["author"],ur=["author","messageAuthor"];function Qe(e){if(!ne(e))return[];switch(e.kind){case"x-search":return Y;case"discord-messages":return ir;case"discord-reactions":return ur;case"custom":return["author",...e.accounts??[]]}}var Pe=new Map;function dr(e){let t=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,r=Pe.get(t);return r||(r=j(t==="messages-text"?W:t==="discord-messages"?_:F),Pe.set(t,r)),r}function Ue(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return dr(e);case"custom":return e.data}}function jr(e){return v("badge",Ce.parse(e))}function Mr(e){return v("ledger",$e.parse(e))}function Rr(e){let{target:t,ledger:r,...n}=e,c=xe.parse({...n,qualifiedBy:e.qualifiedBy.key,balance:E(r)}),s=R(z(e.metrics),U.shape.target);return{key:c.key,describe:()=>c,score(i){let o=Ae.parse(i);return U.parse({target:t({metrics:s.parse(o.metrics)}),baseline:t({metrics:s.parse(o.baseline)})})}}}var Cr=e=>{if("timeZone"in e)throw new Error("streak() no longer takes a timeZone. Set the project timezone with calendar.timeZone in relay.json or in Console settings.");return ce.strict().parse({kind:"streak",...e})},$r=e=>oe.brand().parse({kind:"count",count:e}),xr=(e,t={})=>I.brand().parse({kind:"calendar",period:e,...t}),Ar=({days:e})=>I.brand().parse({kind:"rolling",durationMs:e*864e5}),Tr=e=>({kind:"quest",quest:e});function Dr(e){let{qualification:t,inviterGroup:r,milestones:n,bonuses:c,...s}=e,i=De.parse({...s,qualification:t.kind==="quest"?{kind:"quest",quest:t.quest.key}:t,...r?{inviterGroup:C.parse(r.key)}:{},milestones:n?.map(({key:o,...u})=>({...u,id:y({key:o,...u})})),bonuses:c?.map(({key:o,ledger:u,quests:h,...a})=>({...a,id:y({key:o,...a}),balance:E(u),quests:h?.map(d=>d.key)}))});return v("referral",i)}function Lr(e={}){return{kind:"earned",...e}}function Ir(e){let{ledger:t,group:r,score:n,...c}=e,s=Te.parse({...c,balance:E(t),...r?{group:C.parse(r.key)}:{},score:n?.kind==="earned"?{...n,quests:n.quests?.map(i=>i.key)}:n});return v("leaderboard",s)}var Or={provider:"x",search:e=>re.parse({kind:"x-search",...e})};function lr(e,t){let{data:r,content:n,...c}=t??{};if(n!==void 0){if(r!==void 0)throw new Error(`customSource("${e}") takes data or content, not both: a content source's records carry { body, metrics }`);if(!Ge(n.body))throw new Error(`customSource("${e}") needs a content body schema: customSource(namespace, { content: { body: z.object({ ... }), metrics: ["likes"] } })`);let s=[...n.metrics??[]];for(let i of s)ee.parse(i);return T.parse({kind:"custom",namespace:e,...c,data:j(A({body:n.body,metrics:K(Object.fromEntries(s.map(i=>[i,q().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:s}})}if(!Ge(r))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return T.parse({kind:"custom",namespace:e,...c,data:j(r)})}function Ge(e){return typeof e=="object"&&e!==null&&"_zod"in e}function Pr(e){return v("tracker",ae.parse(e))}function pr(e={}){return N.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function gr(){return Z.parse({kind:"discord-reactions"})}var Br={provider:"discord",grantRole:e=>H.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),messages:pr,reactions:gr,roles(e={}){return $.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return $.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"]})}},Qr={reactions(){return lr(Le,{identities:["member"],accounts:["messageAuthor"],data:Ie})}},Ur=()=>({provider:"domino",resource:"point-ledger"});function k(e,t){return t}var Gr={pointLedger(e){let t={...e,kind:"point-ledger",default:e.default?C.parse(e.default.key):""};return k("point-ledger",we.prefault(t.default).meta(t))},datetime(e){let t={...e,kind:"datetime",default:P.parse(e.default)};return k("datetime",P.default(t.default).meta(t))},resource(e){let t={...e,source:$.parse(e.source),kind:"resource",default:B.parse(e.default??"")};return k("resource",B.default(t.default).meta(t))},quiz(e){let t=O.parse(e.default);return k("quiz",O.default(t).meta({...e,default:t,kind:"quiz"}))},text(e){let t={...e,kind:"text",minLength:e.minLength??1,maxLength:e.maxLength??2e3,multiline:e.multiline??!1};return k("text",x().min(t.minLength).max(t.maxLength).default(t.default).meta(t))},telegramChat(e){let t={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return k("text",x().max(t.maxLength).default(t.default).meta(t))},integer(e){return k("integer",q().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return k("boolean",G().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return k("choice",z(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return A(e).strict()}},Nr=e=>Se(e.key,e.name),Zr=e=>qe(e.key,e.title),_r=(e,t)=>ve.parse({kind:"points",balance:E(e),amount:t}),Wr={text:(e={})=>({input:"text",constraints:ge.parse(e)}),url:(e={})=>({input:"url",constraints:he.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function Fr(e){if(e?.actor&&e.input!==void 0)throw new Error('manual() cannot combine actor "staff" with input: staff-captured evidence is not supported. Use manual({ actor: "staff" }) for a staff confirmation, or manual({ input }) for evidence the participant submits.');return typeof e?.input=="object"?{kind:"manual",...e.input}:{kind:"manual",input:e?.input??"none",...e?.actor?{actor:e.actor}:{}}}var Ke=new WeakMap,Ne=new WeakMap;function Ze(e,t){let{tracker:r,beneficiary:n="author",on:c,where:s,enrollment:i,since:o,historical:u,content:h}=e;if(!r?.source)throw new Error(t==="automatic"?"automatic() takes no argument, or { tracker } with a tracker handle from defineTracker":"content() takes { tracker } with a tracker handle from defineTracker");let{source:a}=r;if(!te(a))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(h&&!D(a))throw new Error(`content() needs a tracker whose source has content: x.search(), or customSource(namespace, { content: { body, metrics } }). Tracker "${r.key}" has none; use automatic({ tracker }) instead.`);if(o==="enrollment"&&i!=="required")throw new Error(`${t}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let d=Qe(a);if(!d.includes(n))throw new Error(a.kind==="custom"?`Tracker "${r.key}" has no "${n}" account: declare it in customSource(namespace, { accounts: ["${n}"] })`:`Tracker "${r.key}" pays ${d.map(f=>`"${f}"`).join(" or ")}, not "${n}"`);let l=de.parse({tracker:r.key,source:a.kind,on:h?"new-record":c??ie(a.kind),...s?{where:s}:{},beneficiary:n,...i==="required"?{enrollment:i}:{},...o&&o!=="activation"?{since:o}:{},...u&&u!==(h?"claim":"staff")?{historical:u}:{},...h?{content:h}:{}}),g=Ue(a),w=g?X(g,l.where):null;if(w)throw new Error(w);let m={kind:"automatic",tracker:l};g&&Ke.set(m,g);let p=D(a);return p&&Ne.set(m,p.metrics),m}function Hr(e){return e?Ze(e,"automatic"):{kind:"automatic"}}function Jr(e){if(e&&typeof e=="object"&&"source"in e&&"key"in e&&!("tracker"in e))throw new Error("content() takes { tracker }: write content({ tracker: posts }) instead of content(posts)");return Ze({...e,content:!0},"content")}var Vr=e=>{let{key:t,cost:r,...n}=e;return le.parse({...n,id:y(e),cost:typeof r=="number"?r:{balance:E(r.ledger)}})},Xr=e=>({kind:"keyed",key:e}),Yr=e=>{let{distinct:t,...r}=e;return{...se.parse({kind:"progress",window:{kind:"lifetime"},...r}),distinct:t}},et=()=>({kind:"untracked"}),rt=()=>({kind:"staff-handover"}),tt=()=>({kind:"automatic"});function at(e){let{key:t,tiers:r,...n}=e,c=y(e),s=be.parse({id:c,...n,tiers:r.map(({key:i,...o})=>({...o,id:y({key:i,...o})}))});return v("tiered-reward",{key:s.id,tier:i=>ye.parse({kind:"tier",reward:s,tier:i})})}var nt=()=>({kind:"once"});function hr(e={}){return{kind:"accept",...e}}function fr(e){return{kind:"review",...e}}var S={accept:hr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:fr},ot={quiz(e,t={}){let r=Me.parse(e),n=Object.keys(r),c=q().int().min(1).max(n.length).parse(t.minimumCorrect??n.length);return async({input:s})=>{let i=Object.keys(s.answers).length===n.length&&n.every(u=>Object.hasOwn(s.answers,u)),o=n.filter(u=>s.answers[u]===r[u]).length;return i&&o>=c?S.accept():S.reject({reason:"Review your answers and try again."})}},photo(e){return async t=>{let r=e(t),n=await t.review.photo({image:t.input.photo,criteria:r.criteria});return n.kind==="unclear"?r.unclear==="human-review"?S.review({reason:n.reason}):S.reject({reason:n.reason}):n.kind==="pass"?S.accept():S.reject({reason:n.reason})}}};function _e(e){return function(r){let n=y(r),c=[...new Set((r.integrations??[]).map(a=>pe.parse(a.provider)))],s=r.trigger.kind==="automatic"&&r.trigger.tracker?.content===!0,i=r.trigger.kind==="automatic"&&r.trigger.tracker!==void 0,o=r.completion;if(s&&o!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!s&&o===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");if(Be({trigger:r.trigger,completion:o??{kind:"keyed"},requires:r.requires??[],performance:r.performance?L.parse({metrics:r.performance.metrics,maxAgeMs:r.performance.maxAgeMs}):void 0,...r.retryCooldownMs===void 0?{}:{retryCooldownMs:r.retryCooldownMs}},{template:e}),r.retryCooldownMs!==void 0&&!Ee.safeParse(r.retryCooldownMs).success)throw new Error("retryCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(r.performance){let a=Ne.get(r.trigger)??[],d=r.performance.metrics.filter(l=>!a.includes(l));if(d.length)throw new Error(`The tracker's source does not measure ${d.join(", ")}`)}if(r.trigger.kind==="manual"&&r.trigger.input!=="none"&&!r.evaluate)throw new Error("Evidence quests require an evaluator");let u=Object.fromEntries(Object.entries(r.settings.shape).map(([a,d])=>{let l=fe.safeParse(d.meta());if(!l.success)throw new Error(`Setting "${a}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);return[a,l.data]}));for(let a of ue(r.trigger.kind==="automatic"?r.trigger.tracker?.where:void 0))if(u[a]?.kind!=="integer")throw new Error(`The tracker filter compares with setting "${a}", which is not an integer setting`);function h(a){let d=r.settings.parse(a),l=ke(u,d),g=ze.parse(typeof r.rewards=="function"?r.rewards({settings:d}):r.rewards),w=[...g.flatMap(m=>m.kind==="integration"?[m.provider]:[]),...Object.values(u).flatMap(m=>m.kind==="resource"&&m.source.provider!=="domino"?[m.source.provider]:[])];for(let m of w)if(!c.includes(m))throw new Error(`Declare the ${m} integration on this quest`);return je.parse({quest:n,evaluatorProtocol:Q,title:typeof r.title=="function"?r.title({settings:d}):r.title,presentation:r.presentation?.({settings:d})??{},fields:u,values:l,rewards:g,humanReview:r.review?.({settings:d})?.enabled??!0,trigger:r.trigger,...r.performance?{performance:L.parse({metrics:r.performance.metrics,maxAgeMs:r.performance.maxAgeMs})}:{},integrations:c,completion:o?o.kind==="progress"?{kind:o.kind,goal:o.goal,window:o.window,repeat:o.repeat}:o.kind==="streak"?o:{kind:o.kind}:{kind:"keyed"},visibility:r.visibility??"visible",profile:r.profile??{visible:!1},budgets:r.budgets??[],requires:r.requires??[],...r.campaign?{campaign:r.campaign}:{},...r.availability?{availability:r.availability}:{},...r.retryCooldownMs===void 0?{}:{retryCooldownMs:r.retryCooldownMs}})}return v("quest",{protocol:Q,key:n,describe:h,async evaluate(a){let d=r.settings.parse(a.settings),l=i?me.parse(a.tracker):null,g=Ke.get(r.trigger),w=l&&g?J(g,l.record.data):null;if(w)return M.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${w.path} ${w.reason}`});let m=l;if(a.performance){if(!r.performance)throw new Error("Quest has no performance evaluator");let f=Re.parse(a.performance),We=R(z(r.performance.metrics),q().int().safe().nonnegative()).parse(f.metrics),b=await r.performance.evaluate({settings:d,member:a.member,tracker:m,metrics:We,observedAt:f.observedAt});if(!b)throw new Error("Performance evaluator returned no decision");if(b.rewards!==void 0)throw new Error("A performance evaluator cannot select rewards. It gates the rewards content evaluation selected: return accept, review or reject with a reason only.");return M.parse(b.kind==="accept"?{kind:"accept",rewards:f.rewards}:b.kind==="review"&&a.humanReview?{kind:"review",reason:b.reason,rewards:f.rewards}:{kind:"reject",reason:b.reason,...b.kind==="review"?{requestedReview:!0}:{}})}let p=r.evaluate?await r.evaluate({settings:d,member:a.member,input:a.input,tracker:m,eligibleAt:a.eligibleAt,calendar:a.calendar,now:a.now,review:a.review,trackers:V(a.trackers),wallet:a.wallet,images:a.images,...a.telegram?{telegram:a.telegram}:{},...Object.fromEntries(c.map(f=>[f,a[f]]))}):S.accept();if(!p)throw new Error("Evaluator returned no decision");return p.kind==="review"&&!a.humanReview?M.parse({kind:"reject",reason:p.reason,requestedReview:!0}):M.parse(p.kind==="accept"||p.kind==="review"?{...p,rewards:p.rewards??a.rewards,...o?.kind==="keyed"||o?.kind==="progress"?{completionKey:o.kind==="progress"?o.distinct({...a,tracker:l}):p.completionKey??o.key({...a,tracker:l})}:{}}:p)}})}}var st=_e(!1),ct=_e(!0);export{Je as CapabilityError,Hr as automatic,tt as automaticFulfillment,Nr as badge,ar as balanceAtLeast,Vr as budget,xr as calendar,He as capabilityErrorCodes,tr as completed,Jr as content,Xe as cosmosDenomSchema,Ve as cosmosNetworkSchema,$r as count,lr as customSource,S as decision,jr as defineBadge,er as defineCampaign,Rr as defineEngagementReward,rr as defineGroup,Ir as defineLeaderboard,Mr as defineLedger,or as defineOffer,st as defineQuest,ct as defineQuestType,Dr as defineReferral,at as defineTieredReward,Pr as defineTracker,Br as discord,Lr as earned,ot as evaluators,Wr as evidence,cr as formatUnits,Zr as groupMembership,nr as inGroup,Ye as isEvmChainId,Xr as keyed,Fr as manual,nt as once,sr as parseUnits,Ur as pointLedgers,_r as points,Yr as progress,Tr as questCompleted,Ar as rolling,Gr as settings,rt as staffHandover,Cr as streak,Qr as telegram,j as trackerDataSchema,me as trackerTriggerContextSchema,et as untracked,Or as x,Fe as z};
1
+ import{$g as cr,Ab as le,Ac as ke,Bg as Le,Dc as we,Dd as je,E as z,F as J,Fd as M,G as V,H as X,Hc as y,Id as ze,Kb as pe,Kc as tr,Lb as ge,Na as L,Oa as oe,Oe as Ce,Pa as I,Qa as se,Qd as Q,Rb as Ye,Rc as b,Sb as er,Sc as ve,Sd as Me,Se as $e,Tc as E,V as Y,Vc as ar,W as ee,Z as re,_ as T,_d as Re,a as Ve,ba as te,c as Xe,ca as D,cg as De,d as C,da as ae,df as xe,fb as ce,ga as ne,hc as rr,ib as ie,jd as nr,kc as he,kd as or,kh as Ie,lc as fe,ld as sr,lh as Oe,md as be,nb as de,nd as ye,nf as Ae,of as Te,pd as Se,pf as U,rb as ue,rd as qe,td as Ee,u as N,uc as O,v as Z,vc as $,w as _,x as W,y as F,yb as me,yc as P,z as H,zc as B}from"./chunks/AVRVSLHX.js";import{Vb as A,Wb as K,hc as R,nb as q,pa as x,pc as j,td as Je,vb as G}from"./chunks/IDOMZWRY.js";function Pe(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function ir(e,t){Pe(t);let r=/^(\d+)(?:\.(\d+))?$/.exec(e.trim());if(!r)throw new Error(`Use a decimal amount such as "1.5", not "${e}"`);let[,n,c=""]=r,s=c.replace(/0+$/,"");if(s.length>t)throw new Error(`"${e}" has more than ${t} decimal places, which this token cannot hold`);return BigInt(n+s.padEnd(t,"0"))}function dr(e,t){Pe(t);let r=typeof e=="bigint"?e:BigInt(e),n=r<0n?"-":"",c=(r<0n?-r:r).toString().padStart(t+1,"0"),s=c.slice(0,c.length-t),i=c.slice(c.length-t).replace(/0+$/,"");return n+s+(i?"."+i:"")}function Qe(e,t={}){let{trigger:r,completion:n,requires:c,performance:s,retryCooldownMs:i}=e,o=r.kind==="automatic"?r.tracker:void 0,d=o?.content===!0;if(s&&!d)throw new Error("Performance requires a content quest");if(d){if(n.kind!=="keyed")throw new Error("Content quests complete once per content item");if(o.beneficiary!=="author"||o.on!=="new-record")throw new Error("A content quest pays each content item's author and fires on its first observation")}if(i!==void 0&&(r.kind!=="manual"||r.actor==="staff"))throw new Error("A retry cooldown applies only to quests members submit themselves");if(r.kind==="automatic"&&!o){if(!t.template&&c.length===0)throw new Error("Automatic quests need at least one prerequisite");if(n.kind!=="once")throw new Error("Prerequisite-only automatic quests complete once")}}var ur=["author"],mr=["author","messageAuthor"];function Ue(e){if(!ne(e))return[];switch(e.kind){case"x-search":return Y;case"discord-messages":return ur;case"discord-reactions":return mr;case"custom":return["author",...e.accounts??[]]}}var Be=new Map;function lr(e){let t=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,r=Be.get(t);return r||(r=z(t==="messages-text"?W:t==="discord-messages"?_:F),Be.set(t,r)),r}function Ge(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return lr(e);case"custom":return e.data}}function Rr(e){return b("badge",$e.parse(e))}function Cr(e){return b("ledger",xe.parse(e))}function $r(e){let{target:t,ledger:r,...n}=e,c=Ae.parse({...n,qualifiedBy:e.qualifiedBy.key,balance:E(r)}),s=R(j(e.metrics),U.shape.target);return{key:c.key,describe:()=>c,score(i){let o=Te.parse(i);return U.parse({target:t({metrics:s.parse(o.metrics)}),baseline:t({metrics:s.parse(o.baseline)})})}}}var xr=e=>{if("timeZone"in e)throw new Error("streak() no longer takes a timeZone. Set the project timezone with calendar.timeZone in relay.json or in Console settings.");return ce.strict().parse({kind:"streak",...e})},Ar=e=>oe.brand().parse({kind:"count",count:e}),Tr=(e,t={})=>I.brand().parse({kind:"calendar",period:e,...t}),Dr=({days:e})=>I.brand().parse({kind:"rolling",durationMs:e*864e5}),Lr=e=>({kind:"quest",quest:e});function Ir(e){let{qualification:t,inviterGroup:r,milestones:n,bonuses:c,...s}=e,i=Le.parse({...s,qualification:t.kind==="quest"?{kind:"quest",quest:t.quest.key}:t,...r?{inviterGroup:C.parse(r.key)}:{},milestones:n?.map(({key:o,...d})=>({...d,id:y({key:o,...d})})),bonuses:c?.map(({key:o,ledger:d,quests:f,...a})=>({...a,id:y({key:o,...a}),balance:E(d),quests:f?.map(u=>u.key)}))});return b("referral",i)}function Or(e={}){return{kind:"earned",...e}}function Pr(e){let{ledger:t,group:r,score:n,...c}=e,s=De.parse({...c,balance:E(t),...r?{group:C.parse(r.key)}:{},score:n?.kind==="earned"?{...n,quests:n.quests?.map(i=>i.key)}:n});return b("leaderboard",s)}var Br={provider:"x",search:e=>re.parse({kind:"x-search",...e})};function gr(e,t){let{data:r,content:n,...c}=t??{};if(n!==void 0){if(r!==void 0)throw new Error(`customSource("${e}") takes data or content, not both: a content source's records carry { body, metrics }`);if(!Ke(n.body))throw new Error(`customSource("${e}") needs a content body schema: customSource(namespace, { content: { body: z.object({ ... }), metrics: ["likes"] } })`);let s=[...n.metrics??[]];for(let i of s)ee.parse(i);return T.parse({kind:"custom",namespace:e,...c,data:z(A({body:n.body,metrics:K(Object.fromEntries(s.map(i=>[i,q().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:s}})}if(!Ke(r))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return T.parse({kind:"custom",namespace:e,...c,data:z(r)})}function Ke(e){return typeof e=="object"&&e!==null&&"_zod"in e}function Qr(e){return b("tracker",ae.parse(e))}function hr(e={}){return N.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function fr(){return Z.parse({kind:"discord-reactions"})}var Ur={provider:"discord",grantRole:e=>H.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),messages:hr,reactions:fr,roles(e={}){return $.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return $.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"]})}},Gr={reactions(){return gr(Ie,{identities:["member"],accounts:["messageAuthor"],data:Oe})}},Kr=()=>({provider:"domino",resource:"point-ledger"});function w(e,t){return t}var Nr={pointLedger(e){let t={...e,kind:"point-ledger",default:e.default?C.parse(e.default.key):""};return w("point-ledger",ve.prefault(t.default).meta(t))},datetime(e){let t={...e,kind:"datetime",default:P.parse(e.default)};return w("datetime",P.default(t.default).meta(t))},resource(e){let t={...e,source:$.parse(e.source),kind:"resource",default:B.parse(e.default??"")};return w("resource",B.default(t.default).meta(t))},quiz(e){let t=O.parse(e.default);return w("quiz",O.default(t).meta({...e,default:t,kind:"quiz"}))},text(e){let t={...e,kind:"text",minLength:e.minLength??1,maxLength:e.maxLength??2e3,multiline:e.multiline??!1};return w("text",x().min(t.minLength).max(t.maxLength).default(t.default).meta(t))},telegramChat(e){let t={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return w("text",x().max(t.maxLength).default(t.default).meta(t))},integer(e){return w("integer",q().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return w("boolean",G().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return w("choice",j(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return A(e).strict()}},_r=e=>qe(e.key,e.name),Wr=e=>Ee(e.key,e.title),Fr=(e,t)=>be.parse({kind:"points",balance:E(e),amount:t}),Hr={text:(e={})=>({input:"text",constraints:he.parse(e)}),url:(e={})=>({input:"url",constraints:fe.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function Jr(e){if(e?.actor&&e.input!==void 0)throw new Error('manual() cannot combine actor "staff" with input: staff-captured evidence is not supported. Use manual({ actor: "staff" }) for a staff confirmation, or manual({ input }) for evidence the participant submits.');return typeof e?.input=="object"?{kind:"manual",...e.input}:{kind:"manual",input:e?.input??"none",...e?.actor?{actor:e.actor}:{}}}var Ze=new WeakMap,_e=new WeakMap;function We(e,t){let{tracker:r,beneficiary:n="author",on:c,where:s,enrollment:i,since:o,historical:d,content:f}=e;if(!r?.source)throw new Error(t==="automatic"?"automatic() takes no argument, or { tracker } with a tracker handle from defineTracker":"content() takes { tracker } with a tracker handle from defineTracker");let{source:a}=r;if(!te(a))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(f&&!D(a))throw new Error(`content() needs a tracker whose source has content: x.search(), or customSource(namespace, { content: { body, metrics } }). Tracker "${r.key}" has none; use automatic({ tracker }) instead.`);if(o==="enrollment"&&i!=="required")throw new Error(`${t}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let u=Ue(a);if(!u.includes(n))throw new Error(a.kind==="custom"?`Tracker "${r.key}" has no "${n}" account: declare it in customSource(namespace, { accounts: ["${n}"] })`:`Tracker "${r.key}" pays ${u.map(k=>`"${k}"`).join(" or ")}, not "${n}"`);let l=ue.parse({tracker:r.key,source:a.kind,on:f?"new-record":c??ie(a.kind),...s?{where:s}:{},beneficiary:n,...i==="required"?{enrollment:i}:{},...o&&o!=="activation"?{since:o}:{},...d&&d!==(f?"claim":"staff")?{historical:d}:{},...f?{content:f}:{}}),g=Ge(a),v=g?X(g,l.where):null;if(v)throw new Error(v);let m={kind:"automatic",tracker:l};g&&Ze.set(m,g);let p=D(a);return p&&_e.set(m,p.metrics),m}function Vr(e){return e?We(e,"automatic"):{kind:"automatic"}}function Xr(e){if(e&&typeof e=="object"&&"source"in e&&"key"in e&&!("tracker"in e))throw new Error("content() takes { tracker }: write content({ tracker: posts }) instead of content(posts)");return We({...e,content:!0},"content")}var Yr=e=>{let{key:t,cost:r,...n}=e;return pe.parse({...n,id:y(e),cost:typeof r=="number"?r:{balance:E(r.ledger)}})},et=e=>({kind:"keyed",key:e}),rt=e=>{let{distinct:t,...r}=e;return{...se.parse({kind:"progress",window:{kind:"lifetime"},...r}),distinct:t}},tt=()=>({kind:"untracked"}),at=()=>({kind:"staff-handover"}),nt=()=>({kind:"automatic"});function ot(e){let{key:t,tiers:r,...n}=e,c=y(e),s=ye.parse({id:c,...n,tiers:r.map(({key:i,...o})=>({...o,id:y({key:i,...o})}))});return b("tiered-reward",{key:s.id,tier:i=>Se.parse({kind:"tier",reward:s,tier:i})})}var st=()=>({kind:"once"});function kr(e={}){return{kind:"accept",...e}}function wr(e){return{kind:"review",...e}}var S={accept:kr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:wr};function Ne(e){let t=e.kind==="reject"&&e.code!==void 0?le(e.code):null;if(t)throw new Error(t)}var ct={quiz(e,t={}){let r=Re.parse(e),n=Object.keys(r),c=q().int().min(1).max(n.length).parse(t.minimumCorrect??n.length);return async({input:s})=>{let i=Object.keys(s.answers).length===n.length&&n.every(d=>Object.hasOwn(s.answers,d)),o=n.filter(d=>s.answers[d]===r[d]).length;return i&&o>=c?S.accept():S.reject({reason:"Review your answers and try again."})}},photo(e){return async t=>{let r=e(t),n=await t.review.photo({image:t.input.photo,criteria:r.criteria});return n.kind==="unclear"?r.unclear==="human-review"?S.review({reason:n.reason}):S.reject({reason:n.reason}):n.kind==="pass"?S.accept():S.reject({reason:n.reason})}}};function Fe(e){return function(r){let n=y(r),c=[...new Set((r.integrations??[]).map(a=>ge.parse(a.provider)))],s=r.trigger.kind==="automatic"&&r.trigger.tracker?.content===!0,i=r.trigger.kind==="automatic"&&r.trigger.tracker!==void 0,o=r.completion;if(s&&o!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!s&&o===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");if(Qe({trigger:r.trigger,completion:o??{kind:"keyed"},requires:r.requires??[],performance:r.performance?L.parse({metrics:r.performance.metrics,maxAgeMs:r.performance.maxAgeMs}):void 0,...r.retryCooldownMs===void 0?{}:{retryCooldownMs:r.retryCooldownMs}},{template:e}),r.retryCooldownMs!==void 0&&!je.safeParse(r.retryCooldownMs).success)throw new Error("retryCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(r.performance){let a=_e.get(r.trigger)??[],u=r.performance.metrics.filter(l=>!a.includes(l));if(u.length)throw new Error(`The tracker's source does not measure ${u.join(", ")}`)}if(r.trigger.kind==="manual"&&r.trigger.input!=="none"&&!r.evaluate)throw new Error("Evidence quests require an evaluator");let d=Object.fromEntries(Object.entries(r.settings.shape).map(([a,u])=>{let l=ke.safeParse(u.meta());if(!l.success)throw new Error(`Setting "${a}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);return[a,l.data]}));for(let a of de(r.trigger.kind==="automatic"?r.trigger.tracker?.where:void 0))if(d[a]?.kind!=="integer")throw new Error(`The tracker filter compares with setting "${a}", which is not an integer setting`);function f(a){let u=r.settings.parse(a),l=we(d,u),g=ze.parse(typeof r.rewards=="function"?r.rewards({settings:u}):r.rewards),v=[...g.flatMap(m=>m.kind==="integration"?[m.provider]:[]),...Object.values(d).flatMap(m=>m.kind==="resource"&&m.source.provider!=="domino"?[m.source.provider]:[])];for(let m of v)if(!c.includes(m))throw new Error(`Declare the ${m} integration on this quest`);return Me.parse({quest:n,evaluatorProtocol:Q,title:typeof r.title=="function"?r.title({settings:u}):r.title,presentation:r.presentation?.({settings:u})??{},fields:d,values:l,rewards:g,humanReview:r.review?.({settings:u})?.enabled??!0,trigger:r.trigger,...r.performance?{performance:L.parse({metrics:r.performance.metrics,maxAgeMs:r.performance.maxAgeMs})}:{},integrations:c,completion:o?o.kind==="progress"?{kind:o.kind,goal:o.goal,window:o.window,repeat:o.repeat}:o.kind==="streak"?o:{kind:o.kind}:{kind:"keyed"},visibility:r.visibility??"visible",profile:r.profile??{visible:!1},budgets:r.budgets??[],requires:r.requires??[],...r.campaign?{campaign:r.campaign}:{},...r.availability?{availability:r.availability}:{},...r.retryCooldownMs===void 0?{}:{retryCooldownMs:r.retryCooldownMs}})}return b("quest",{protocol:Q,key:n,describe:f,async evaluate(a){let u=r.settings.parse(a.settings),l=i?me.parse(a.tracker):null,g=Ze.get(r.trigger),v=l&&g?J(g,l.record.data):null;if(v)return M.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${v.path} ${v.reason}`});let m=l;if(a.performance){if(!r.performance)throw new Error("Quest has no performance evaluator");let k=Ce.parse(a.performance),He=R(j(r.performance.metrics),q().int().safe().nonnegative()).parse(k.metrics),h=await r.performance.evaluate({settings:u,member:a.member,tracker:m,metrics:He,observedAt:k.observedAt});if(!h)throw new Error("Performance evaluator returned no decision");if(h.rewards!==void 0)throw new Error("A performance evaluator cannot select rewards. It gates the rewards content evaluation selected: return accept, review or reject with a reason only.");return Ne(h),M.parse(h.kind==="accept"?{kind:"accept",rewards:k.rewards}:h.kind==="review"&&a.humanReview?{kind:"review",reason:h.reason,rewards:k.rewards}:{kind:"reject",reason:h.reason,...h.kind==="review"?{requestedReview:!0}:h.code===void 0?{}:{code:h.code}})}let p=r.evaluate?await r.evaluate({settings:u,member:a.member,input:a.input,tracker:m,eligibleAt:a.eligibleAt,calendar:a.calendar,now:a.now,review:a.review,trackers:V(a.trackers),wallet:a.wallet,images:a.images,...a.telegram?{telegram:a.telegram}:{},...Object.fromEntries(c.map(k=>[k,a[k]]))}):S.accept();if(!p)throw new Error("Evaluator returned no decision");return Ne(p),p.kind==="review"&&!a.humanReview?M.parse({kind:"reject",reason:p.reason,requestedReview:!0}):M.parse(p.kind==="accept"||p.kind==="review"?{...p,rewards:p.rewards??a.rewards,...o?.kind==="keyed"||o?.kind==="progress"?{completionKey:o.kind==="progress"?o.distinct({...a,tracker:l}):p.completionKey??o.key({...a,tracker:l})}:{}}:p)}})}}var it=Fe(!1),dt=Fe(!0);export{Xe as CapabilityError,Vr as automatic,nt as automaticFulfillment,_r as badge,or as balanceAtLeast,Yr as budget,Tr as calendar,Ve as capabilityErrorCodes,nr as completed,Xr as content,er as cosmosDenomSchema,Ye as cosmosNetworkSchema,Ar as count,gr as customSource,S as decision,Rr as defineBadge,tr as defineCampaign,$r as defineEngagementReward,ar as defineGroup,Pr as defineLeaderboard,Cr as defineLedger,cr as defineOffer,it as defineQuest,dt as defineQuestType,Ir as defineReferral,ot as defineTieredReward,Qr as defineTracker,Ur as discord,Or as earned,ct as evaluators,Hr as evidence,dr as formatUnits,Wr as groupMembership,sr as inGroup,rr as isEvmChainId,et as keyed,Jr as manual,st as once,ir as parseUnits,Kr as pointLedgers,Fr as points,rt as progress,Lr as questCompleted,Dr as rolling,Nr as settings,at as staffHandover,xr as streak,Gr as telegram,z as trackerDataSchema,me as trackerTriggerContextSchema,tt as untracked,Br as x,Je as z};
@@ -0,0 +1 @@
1
+ import{Gb as Y,Kb as ee,Lb as Dt,Qc as Ne,Rb as $e,Sb as c,T as _t,Ub as be,Vb as t,Wb as z,Xb as te,Xc as Qt,Yb as Me,Yc as Qe,Z as ze,Zb as f,Zc as Bt,a as N,bc as g,ca as Ut,cc as _e,d as Mt,ec as Ue,ed as re,fc as Nt,gc as Ze,hc as j,ld as M,ma as X,mb as Lt,md as pe,nb as o,oc as Le,pa as r,pc as u,rc as De,sc as s,sd as A,vb as m,wa as Zt}from"./IDOMZWRY.js";var En=["not-linked","provider-unavailable","author-error"],Tn=e=>En.includes(e),_o=te({code:r().min(1),message:r().min(1),retryable:m()}),Ht=Symbol.for("@domino-sdk/relay/CapabilityError"),Uo=class Kt extends Error{code;retryable;constructor(n,i,l={}){super(i),this.name="CapabilityError",this.code=n,this.retryable=l.retryable??n==="provider-unavailable",Object.defineProperty(this,Ht,{value:!0})}static[Symbol.hasInstance](n){return typeof n=="object"&&n!==null&&n[Ht]===!0}static from(n){return new Kt(n.code,n.message,{retryable:Tn(n.code)&&n.retryable})}};var $n=Symbol.for("@domino-sdk/relay.RequestError");var Mn=class extends Error{name="RequestError";[$n]=!0;kind;uncertain;status;code;operationId;recovery;retryAfter;constructor(e,n){super(e,n.cause===void 0?{}:{cause:n.cause}),this.kind=n.kind,this.uncertain=n.uncertain??!1,this.status=n.status,this.code=n.code,this.operationId=n.operationId,this.retryAfter=n.retryAfter,this.recovery=this.uncertain?n.operationId&&(n.replaySafe??!0)?"replay":"reconcile":void 0}},_n={NotSignedIn:"not-signed-in",StaleSession:"stale-session",InvalidInput:"invalid-input",InvalidResponse:"invalid-response",Network:"network",Timeout:"timeout",Aborted:"aborted",NotFound:"not-found",RetryUnavailable:"retry-unavailable",SubmissionStorage:"submission-storage",SubmissionStorageQuota:"submission-storage-quota",SubmissionConflict:"submission-conflict",OperationRetired:"operation-retired",QuestUpdated:"quest-updated",AttemptPending:"attempt-pending",RetryCooldown:"retry-cooldown",StaleQuiz:"stale-quiz",InvalidSubmission:"invalid-submission",InvalidCursor:"invalid-cursor",PointLedgerNotFound:"point-ledger-not-found",NotJoined:"not-joined",OutsideWindow:"outside-window",EnrollmentRequired:"enrollment-required",BudgetExhausted:"budget-exhausted",OfferNotFound:"offer-not-found",OfferPaused:"offer-paused",OfferLimitReached:"offer-limit-reached",OfferOutOfStock:"offer-out-of-stock",InsufficientPoints:"insufficient-points",Credential:"credential",WalletSigner:"wallet-signer",PrerequisitesIncomplete:"prerequisites-incomplete",QuestClosed:"quest-closed",QuestPaused:"quest-paused",ProfileLocked:"profile-locked",InvitationNotFound:"invitation-not-found",InvalidCode:"invalid-code",CodeExpired:"code-expired",ChallengeExpired:"challenge-expired",RateLimited:"rate-limited"},Un=Symbol.for("@domino-sdk/relay.RelayError");var Zn=class extends Mn{name="RelayError";[Un]=!0;window;missing;retryAt;constructor(e,n){super(e,n),this.window=n.window,this.missing=n.missing??[],this.retryAt=n.retryAt}};function Ln(e,n,i={}){return new Zn(e,{...i,kind:"client",code:n})}var a=r().min(1).max(100).regex(/^[a-zA-Z0-9_-]+$/),Dn=Symbol("domino.response.tolerant-v1");function ur(e){return Object.assign(e,{[Dn]:!0})}var Be=new WeakMap;function Lo(e){for(let n of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,n)?.get;if(!i)continue;let l=d=>(Object.defineProperty(e,n,{value:d,writable:!0,enumerable:!0,configurable:!0}),d);Object.defineProperty(e,n,{get:()=>l(i.call(e)),set:l,enumerable:!0,configurable:!0})}return e}function S(e){let n=Be.get(e);if(n)return n;let i=Object.create(Object.getPrototypeOf(e._zod.def),Object.getOwnPropertyDescriptors(e._zod.def));if(e instanceof be){let d;Object.defineProperty(i,"shape",{get:()=>d??=Object.fromEntries(Object.entries(e.shape).map(([b,p])=>[b,S(p)])),configurable:!0,enumerable:!0}),Object.assign(i,{catchall:e._zod.def.catchall instanceof Dt||!e._zod.def.catchall?void 0:S(e._zod.def.catchall)})}else e instanceof Lt?Object.assign(i,{checks:e._zod.def.checks?.filter(d=>{let b=d._zod.def;return b.check!=="less_than"||!("value"in b)||b.value===Number.MAX_SAFE_INTEGER||b.value===864e13})}):e instanceof $e?Object.assign(i,{element:S(e.element),checks:[]}):e instanceof Me?Object.assign(i,{options:e.options.map(S)}):e instanceof Ue?Object.assign(i,{items:e._zod.def.items.map(S),rest:e._zod.def.rest?S(e._zod.def.rest):null}):e instanceof _e?Object.assign(i,{left:S(e._zod.def.left),right:S(e._zod.def.right)}):e instanceof Qe?Object.assign(i,{getter:()=>S(e._zod.def.getter())}):e instanceof Ze?Object.assign(i,{valueType:S(e.valueType)}):e instanceof Ne?Object.assign(i,{in:S(e.in),out:S(e.out)}):"innerType"in i&&i.innerType instanceof X&&Object.assign(i,{innerType:S(i.innerType)});let l=Mt(e,i);return Be.set(e,l),Be.set(l,l),l}function Nn(e){return S(e)}function zr(e){if(e instanceof be)return e.shape;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof X)return zr(e._zod.def.innerType)}function Xe(e){if(e instanceof De)return[...e.values];if(e instanceof Le)return e.options;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof X)return Xe(e._zod.def.innerType)}function C(e,n){if(e instanceof De)return typeof n=="string"&&[...e.values].every(i=>typeof i=="string")&&!e.values.has(n);if(e instanceof Le)return typeof n=="string"&&!e.options.includes(n);if(e instanceof $e&&Array.isArray(n))return n.some(i=>C(e.element,i));if(e instanceof Ue&&Array.isArray(n))return n.some((i,l)=>{let d=e._zod.def.items[l]??e._zod.def.rest;return d?C(d,i):!1});if(e instanceof _e)return C(e._zod.def.left,n)||C(e._zod.def.right,n);if(e instanceof Qe)return C(e._zod.def.getter(),n);if(e instanceof Ze&&n!==null&&typeof n=="object"&&!Array.isArray(n))return Object.entries(n).some(([i,l])=>C(e.keyType,i)||C(e.valueType,l));if(e instanceof Me){let i=[...e.options];if(typeof n=="string"){let l=i.flatMap(d=>Xe(d)??[]);if(l.some(d=>typeof d=="string")&&!l.includes(n))return!0}if(n!==null&&typeof n=="object"&&!Array.isArray(n)){let l=j(r(),ee()).parse(n),d=["kind","status","provider","input","type","mode"];for(let b of d){if(typeof l[b]!="string")continue;let p=i.map(R=>{let $=zr(R)?.[b];return $?Xe($):void 0});if(p.some(R=>!R))continue;let h=i.filter((R,$)=>p[$]?.includes(l[b]));if(!h.length)return!0;i=h}}return i.every(l=>C(l,n))}if(e instanceof be&&n!==null&&typeof n=="object"&&!Array.isArray(n)){let i=j(r(),ee()).parse(n);return Object.entries(e.shape).some(([l,d])=>C(d,i[l]))||Object.entries(i).some(([l,d])=>!(l in e.shape)&&!!e._zod.def.catchall&&C(e._zod.def.catchall,d))}if(e instanceof Ne){if(C(e.in,n))return!0;let i=Ut(e.in,n);return i.success&&C(e.out,i.data)}return"innerType"in e._zod.def&&e._zod.def.innerType instanceof X?C(e._zod.def.innerType,n):!1}function Qn(e){return ur(M().transform((n,i)=>{let l=Nn(e),d=l.safeParse(n);if(d.success)return{kind:"supported",value:d.data};if(C(l,n))return{kind:"unsupported",raw:n};for(let b of d.error.issues)i.addIssue({...b});return N}))}function Do(e){return ur(c(Qn(e)).transform(n=>({items:n,unsupportedCount:n.filter(i=>i.kind==="unsupported").length})))}var k=r().min(1).max(4096),No=z({cursor:k.optional()});async function*Qo(e){let n;do{let i=await e(n);yield*i.items,n=i.nextCursor??void 0}while(n!==void 0)}var Bo=z({cursor:k.optional(),limit:A.number().int().min(1).max(100).default(50)}),dt=u(["google","apple","x","discord"]),br=t({provider:dt,configured:m(),status:u(["disconnected","connected","reconnect"]),subject:r().nullable(),revision:o().int().nonnegative()}),Ho=t({}).strict(),Ko=t({channelId:r().regex(/^[0-9]{1,20}$/),messageId:r().regex(/^[0-9]{1,20}$/)}).strict(),Vo=t({userId:r().regex(/^[0-9]{1,20}$/).nullable().default(null),nickname:r().nullable().default(null),displayName:r().nullable().default(null),boostingSince:r().datetime({offset:!0}).nullable().default(null),roles:c(r().regex(/^[0-9]{1,20}$/)),joinedAt:r().datetime({offset:!0}).nullable(),pending:m()}),Wo=t({guildId:r(),channelId:r(),messageId:r(),userId:r(),content:r().nullable(),replyTo:r().nullable(),publishedAt:o()}).strict(),pr=z({kind:s("discord-messages"),text:m().optional()}),gr=z({kind:s("discord-reactions")}),Bn=t({guildId:r(),channelId:r(),messageId:r(),replyTo:r().nullable(),publishedAt:o()}),Go=Bn.extend({text:r().nullable()}),Fo=t({guildId:r(),channelId:r(),messageId:r(),emoji:t({id:r().nullable(),name:r()}),reactorRoles:c(r()),messagePublishedAt:o()}),Hn=z({kind:s("integration"),provider:s("discord"),action:s("grant-role"),roleId:r().regex(/^[0-9]{1,20}$/)}),Kn=f([z({provider:s("discord"),resource:s("channel"),types:c(u(["text","announcement"])).min(1)}),z({provider:s("discord"),resource:s("role"),assignable:m().default(!1)})]),Vn=16,Wn=32768,Gn=16,ne=256,Vt=f([r(),o().finite(),m(),Y()]),ge=o().int().safe().nonnegative(),fe=o().finite(),He=()=>c(ie).min(1).max(Gn),ie=Bt(()=>z({type:u(["object","array","string","number","integer","boolean","null"]).optional(),properties:j(r(),ie).refine(e=>Object.keys(e).length<=ne,`An object schema lists at most ${ne} properties`).optional(),required:c(r()).max(ne).optional(),additionalProperties:f([m(),ie]).optional(),propertyNames:z({type:s("string"),enum:c(r()).max(ne).optional()}).optional(),items:ie.optional(),minItems:ge.optional(),maxItems:ge.optional(),minLength:ge.optional(),maxLength:ge.optional(),minimum:fe.optional(),maximum:fe.optional(),exclusiveMinimum:fe.optional(),exclusiveMaximum:fe.optional(),enum:c(Vt).min(1).max(ne).optional(),const:Vt.optional(),anyOf:He().optional(),oneOf:He().optional(),allOf:He().optional()}));function Fn(e){let n=[[e,0]];for(;n.length;){let[i,l]=n.pop();if(!(typeof i!="object"||i===null)){if(l>=Vn)return"Tracker data schemas are at most 32 KB and 16 levels deep";if(!Array.isArray(i)&&Object.hasOwn(i,"__proto__"))return"Tracker data schemas cannot name a property __proto__";for(let d of Object.values(i))n.push([d,l+1])}}return new TextEncoder().encode(JSON.stringify(e)).byteLength>Wn?"Tracker data schemas are at most 32 KB and 16 levels deep":null}var fr=e=>[...e.anyOf??[],...e.oneOf??[],...e.allOf??[]],Jn=e=>e.properties!==void 0||e.items!==void 0||typeof e.additionalProperties=="object"||fr(e).length>0;function Ye(e,n,i){let l=fr(e);if(i&&l.filter(Jn).length>1)return n;let d=[...Object.entries(e.properties??{}).map(([b,p])=>[p,`${n}.${b}`])];e.items&&d.push([e.items,n]),typeof e.additionalProperties=="object"&&d.push([e.additionalProperties,n]);for(let[b,p]of d){let h=Ye(b,p,i);if(h)return h}for(let b of l){let p=Ye(b,n,!0);if(p)return p}return null}var vr=ee().superRefine((e,n)=>{let i=Fn(e);i&&n.addIssue({code:"custom",message:i,abort:!0})}).pipe(ie).refine(e=>e.type==="object","A tracker's record data is an object: declare it with z.object({ ... })").superRefine((e,n)=>{let i=Ye(e,"data",!1);i&&n.addIssue({code:"custom",message:`Tracker data schemas cannot nest a union with several object, array or union branches inside another union's branch (${i}): flatten it into one union`})}),Wt={pattern:"check string patterns in your evaluator",format:"use z.string() and check the format in your evaluator",prefixItems:"use an array or an object instead of a tuple",multipleOf:"check divisibility in your evaluator",not:"describe the allowed values instead",$ref:"inline the schema instead of registering or reusing it by ID",$defs:"inline the schema instead of registering or reusing it by ID",definitions:"inline the schema instead of registering or reusing it by ID",if:"use a union instead",then:"use a union instead",else:"use a union instead",contains:"check array contents in your evaluator",minContains:"check array contents in your evaluator",maxContains:"check array contents in your evaluator",uniqueItems:"check uniqueness in your evaluator",minProperties:"check key counts in your evaluator",maxProperties:"check key counts in your evaluator",patternProperties:"use z.record(z.string(), value) instead",dependentRequired:"use a union instead",dependentSchemas:"use a union instead",unevaluatedProperties:"use a strict object instead",unevaluatedItems:"use an array instead"},hr=new Set(["additionalProperties","items","propertyNames"]),yr=new Set(["anyOf","oneOf","allOf"]),Xn=new Set(["type","properties","required","minItems","maxItems","minLength","maxLength","minimum","maximum","exclusiveMinimum","exclusiveMaximum","enum","const",...hr,...yr]),Yn=new Set(["$schema","$id","$comment","title","description","default","examples","deprecated","readOnly","writeOnly"]);function je(e,n){if(typeof e!="object"||e===null||Array.isArray(e))return e;let i={};for(let[l,d]of Object.entries(e)){if(Object.hasOwn(Wt,l))throw new Error(`Tracker data schemas cannot use ${l} (${n}): ${Wt[l]}`);if(!Yn.has(l)){if(!Xn.has(l))throw new Error(`Tracker data schemas cannot use the keyword ${l} (${n}): keep metadata to title, description, default and examples`);if(l==="properties"&&Object.hasOwn(d,"__proto__")||l==="required"&&d.includes("__proto__"))throw new Error(`Tracker data schemas cannot name a property __proto__ (${n})`);i[l]=l==="properties"?Object.fromEntries(Object.entries(d).map(([b,p])=>[b,je(p,`${n}.${b}`)])):hr.has(l)?je(d,n):yr.has(l)?d.map(b=>je(b,n)):d}}return i}function Jo(e){let n;try{n=_t(e,{target:"draft-2020-12",io:"input",unrepresentable:"throw",cycles:"throw",reused:"inline",override:({zodSchema:l,path:d})=>{let b=l._zod.def,p=["data",...d].join(".");if(b.type==="pipe"||b.type==="transform")throw new Error(`Tracker data schemas cannot transform values (${p}): records are stored as sent`);if(b.checks?.some(h=>h._zod.def.check==="custom"))throw new Error(`Tracker data schemas cannot use refinements (${p}): check the value in your evaluator`)}})}catch(l){let d=l instanceof Error?l.message:String(l);throw new Error(d.startsWith("Tracker data schemas")?d:`Tracker data schemas describe JSON: ${d}. Use z.unknown() for any JSON value.`)}let i=vr.safeParse(je(n,"data"));if(!i.success)throw new Error(i.error.issues.map(l=>l.message).join("; "));return i.data}var Sr=25e4,ea=6e6,jr=class extends Error{};function ve(e,n){if(e.steps-=n,e.steps<0)throw new jr}var kr=64,ta=256;function et(e,n){return e.length>n?e.slice(0,n-1)+"\u2026":e}function ra(e){let n=[];for(let i=e;i;i=i.parent)n.push(et(String(i.key),kr));return et(["data",...n.reverse()].join("."),ta)}var B=e=>e===null?"null":Array.isArray(e)?"an array":typeof e,Ke=10;function na(e){let n=e.slice(0,Ke).map(i=>JSON.stringify(i)).join(", ");return e.length>Ke?`expected one of ${n}, or ${e.length-Ke} more`:`expected one of ${n}`}var Gt=new WeakMap,Ft=new WeakMap;function Jt(e,n){let i=Gt.get(e);return i||(i=new Set(n),Gt.set(e,i)),i}function aa(e){let n=Ft.get(e);return n||(n=Object.entries(e.properties??{}).filter(([,i])=>i.const!==void 0),Ft.set(e,n)),n}function K(e,n,i,l){ve(l,1);let d=b=>({at:i,reason:b});if(e.const!==void 0&&n!==e.const)return d(()=>`expected ${JSON.stringify(e.const)}`);if(e.enum&&!Jt(e,e.enum).has(n)){let b=e.enum;return d(()=>na(b))}switch(e.type){case"null":if(n!==null)return d(()=>`expected null, got ${B(n)}`);break;case"boolean":case"string":if(typeof n!==e.type){let b=e.type;return d(()=>`expected a ${b}, got ${B(n)}`)}break;case"number":if(typeof n!="number")return d(()=>`expected a number, got ${B(n)}`);break;case"integer":if(!Number.isInteger(n))return d(()=>typeof n=="number"?"expected an integer":`expected an integer, got ${B(n)}`);break;case"array":if(!Array.isArray(n))return d(()=>`expected an array, got ${B(n)}`);break;case"object":if(typeof n!="object"||n===null||Array.isArray(n))return d(()=>`expected an object, got ${B(n)}`);break}if(typeof n=="string"){let{minLength:b,maxLength:p}=e;if(b!==void 0&&n.length<b)return d(()=>`expected at least ${b} characters`);if(p!==void 0&&n.length>p)return d(()=>`expected at most ${p} characters`)}if(typeof n=="number"){let b=[[e.minimum,p=>n>=p,"at least"],[e.exclusiveMinimum,p=>n>p,"more than"],[e.maximum,p=>n<=p,"at most"],[e.exclusiveMaximum,p=>n<p,"less than"]];for(let[p,h,R]of b)if(p!==void 0&&!h(p))return d(()=>`expected ${R} ${p}`)}if(Array.isArray(n)){let{minItems:b,maxItems:p}=e;if(b!==void 0&&n.length<b)return d(()=>`expected at least ${b} items`);if(p!==void 0&&n.length>p)return d(()=>`expected at most ${p} items`);if(e.items)for(let h=0;h<n.length;h++){let R=K(e.items,n[h],{parent:i,key:h},l);if(R)return R}}if(typeof n=="object"&&n!==null&&!Array.isArray(n)){let b=n,p=e.properties??{},h=e.required??[];ve(l,h.length);for(let P of h)if(!Object.hasOwn(b,P))return d(()=>`missing required key "${et(P,kr)}"`);let R=aa(e);ve(l,R.length);for(let[P,D]of R)if(Object.hasOwn(b,P)&&b[P]!==D.const)return{at:{parent:i,key:P},reason:()=>`expected ${JSON.stringify(D.const)}`};let $=Object.keys(b);ve(l,$.length);let Et=e.propertyNames?.enum,Tt=Et&&Jt(e.propertyNames,Et);for(let P of $){if(Tt&&!Tt.has(P))return{at:{parent:i,key:P},reason:()=>"is not an allowed key"};let D=Object.hasOwn(p,P)?p[P]:e.additionalProperties;if(D===!1)return{at:{parent:i,key:P},reason:()=>"is not an allowed key"};if(D&&D!==!0){let $t=K(D,b[P],{parent:i,key:P},l);if($t)return $t}}}for(let b of e.allOf??[]){let p=K(b,n,i,l);if(p)return p}if(e.anyOf&&!e.anyOf.some(b=>!K(b,n,i,l)))return d(()=>"matches none of the allowed shapes");if(e.oneOf){let b=0;for(let p of e.oneOf)if(!K(p,n,i,l)&&++b>1)return d(()=>"matches more than one of the allowed shapes");if(!b)return d(()=>"matches none of the allowed shapes")}return null}function ia(e,n,i={steps:Sr}){try{let l=K(e,n,null,i);return l&&{kind:"mismatch",path:ra(l.at),reason:l.reason()}}catch(l){if(l instanceof jr)return{kind:"too-complex",path:"data",reason:"is too complex to validate against the tracker's schema"};throw l}}function oa(e,n){let i={steps:ea};return n.map(l=>{let d={steps:Math.min(Sr,i.steps)},b=d.steps,p=ia(e,l,d);return i.steps-=b-Math.max(d.steps,0),p})}function tt(e){return e.flatMap(n=>n.anyOf||n.oneOf||n.allOf?tt([...n.anyOf??[],...n.oneOf??[],...n.allOf??[]]):[n])}var Xt=e=>e.type===void 0&&e.properties===void 0&&e.const===void 0&&e.enum===void 0;function sa(e,n){let i=new Set(["string","number","boolean","null","object","array"]),l=[e];for(let b of n.split(".")){let p=[];for(let h of tt(l))if(Xt(h))p.push({});else{if(h.type!=="object")continue;h.properties&&Object.hasOwn(h.properties,b)?p.push(h.properties[b]):h.additionalProperties===!0?p.push({}):h.additionalProperties&&p.push(h.additionalProperties)}if(!p.length)return null;l=p}let d=new Set;for(let b of tt(l)){if(Xt(b))return i;b.type&&d.add(b.type==="integer"?"number":b.type);for(let p of[...b.const!==void 0?[b.const]:[],...b.enum??[]])d.add(p===null?"null":typeof p)}return d}function Xo(e){return{content:(n,i)=>e.content(n,i),summary:(n,i)=>e.summary(n,i),records:(async(n,i)=>{let l=await e.records(n,i),d=n.source,b=d?.kind==="custom"?d.data:void 0;if(!b)return l;let p=oa(b,l.items.map(R=>R.data)),h=l.items.filter((R,$)=>!p[$]);return{...l,items:h,excluded:l.items.length-h.length}})}}function Yo(e,n){let i=n===void 0?[]:Array.isArray(n)?n:[n];for(let l of i){let d=sa(e,l.path);if(!d)return`The tracker filter reads data.${l.path}, which the tracker's data schema does not declare`;if(!("equals"in l?[typeof l.equals]:["number","string"]).some(p=>d.has(p)))return`The tracker filter compares data.${l.path} with ${"equals"in l?JSON.stringify(l.equals):"a number"}, but the field holds ${[...d].join(" or ")}`}return null}var x=o().int().safe().nonnegative().max(864e13),I=o().int().safe().nonnegative(),E=r().min(1).max(256),H=I.nullable().default(null),ca=te({id:E,userId:E,content:r(),createdAt:ze.datetime({offset:!0}),author:te({id:E,username:r(),name:r(),verified:m().nullable().default(null)}),likeCount:H,replyCount:H,retweetCount:H,quoteCount:H,viewCount:H,bookmarkCount:H,isReply:m(),isRetweet:m(),isQuoteTweet:m()}),la=z({version:s(1),id:r().min(1),authorId:r().min(1),publishedAt:x,text:r(),isReply:m(),isRetweet:m(),isQuoteTweet:m(),media:c(z({type:r(),url:r()})).nullable(),mentionedAuthorIds:c(r().min(1)).nullable(),videoLengthSeconds:o().nonnegative().nullable(),references:z({replyId:r().nullable(),replyAuthorId:r().nullable(),quoteId:r().nullable(),quoteAuthorId:r().nullable(),repostId:r().nullable(),repostAuthorId:r().nullable()})}),da=z({id:E,observation:r().regex(/^observation_[a-f0-9]{64}$/)}),es=da.extend({member:a}),Ve={member:a,capturedAt:x},xr=z({contentRevision:a,observation:a}),ts=z({tracker:a,source:s("x"),evidence:xr,content:la,observedAt:x,removed:m(),attribution:g("kind",[z({...Ve,kind:s("linked"),account:z({provider:s("x"),issuer:r().min(1),subject:E,revision:I,linkedAt:x.nullable()})}),z({...Ve,kind:s("unlinked")}),z({...Ve,kind:s("different-author")})])}),ma=["wallet","x","discord","member"],wr=Qt(["app:",r().regex(/^[a-z0-9][a-z0-9_-]{0,39}$/,"Name an app identity kind like app:telegram: lowercase letters, digits, _ or -, at most 40")]),mt=f([u(ma),wr]),rs=e=>e.startsWith("app:"),le=r().min(1).max(64),ns=t({kind:le,subject:E,revision:I,linkedAt:x.nullable()}),de=r().regex(/^[a-zA-Z][a-zA-Z0-9_]{0,39}$/,"Name roles like author or recipient: a letter, then letters, digits or underscores"),as=["author","inReplyTo"],rt=e=>new Set(e).size===e.length,Ar=r().regex(/^[a-z][a-zA-Z0-9]{0,39}$/,"Name metrics like likes or watchTime: a lowercase letter, then letters or digits"),ua=["likes","replies","reposts","quotes","views","bookmarks"],za=z({metrics:c(Ar).max(10).refine(rt,"List each metric once")}),we=t({kind:s("x-search"),query:r().trim().min(1).max(2e3)}).strict(),Ir=t({kind:s("custom"),namespace:a,identities:c(mt).min(1).max(8).refine(rt,"List each identity kind once").optional(),accounts:c(de).min(1).max(10).refine(rt,"List each account role once").refine(e=>!e.includes("author"),"author is every record's own role; name other accounts").optional(),data:vr.optional(),content:za.optional()}).strict().refine(e=>!e.content||e.data?.properties?.body?.type==="object"&&(e.data.required??[]).includes("body"),"A content source's data schema has a required object body").refine(e=>!e.accounts||e.identities,"Named accounts need identities"),ba=g("kind",[we,Ir,pr,gr]),pa=["x-search","custom","discord-messages","discord-reactions"];function is(e){if(fa(e))switch(e.kind){case"x-search":return["x"];case"discord-messages":case"discord-reactions":return["discord"];case"custom":return e.identities}}function os(e){switch(e.kind){case"x-search":return{metrics:ua};case"custom":return e.content;case"discord-messages":case"discord-reactions":return}}var ut=t({start:x,end:x.optional()}).strict().refine(e=>e.end===void 0||e.end>e.start,"End must follow start"),Q=t({key:a,title:r().trim().min(1).max(120),source:ba,window:ut,refreshSeconds:o().int().min(300).max(86400).default(21600),maxPages:o().int().min(1).max(1e3).default(60)}).strict(),ss=f([Q,t({code:r().min(1).max(2e6)}).strict()]),Or=g("kind",[t(we.shape),t({...Ir.shape,identities:c(le).optional()}),t(pr.shape),t(gr.shape)]),ga=f([Or,t({kind:r().min(1).refine(e=>!pa.some(n=>n===e),"Known source kinds must match their schema")}).catchall(M())]);function fa(e){return Or.safeParse(e).success}var va=t({...Q.shape,source:ga,window:t(ut.shape)}),ha=t({id:a,version:a,definition:va,publishedAt:x,actor:r().nullable()}),qr=t({archivedAt:o().int().nonnegative().nullable().optional(),published:ha,paused:m(),state:u(["idle","syncing","error","complete"]),lastStartedAt:x.nullable(),lastCompletedAt:x.nullable(),nextSyncAt:x.nullable(),coverage:u(["unknown","partial","complete"]),error:r().nullable(),records:I,origin:u(["code","data"]).optional()}),Rr=t({title:Q.shape.title,query:we.shape.query,window:ut,refreshSeconds:Q.shape.refreshSeconds.unwrap(),maxPages:Q.shape.maxPages.unwrap()}).strict(),cs=Rr.extend({key:a,refreshSeconds:Q.shape.refreshSeconds,maxPages:Q.shape.maxPages,actionId:a}).strict(),ls=Rr.partial().extend({actionId:a}).strict().refine(({actionId:e,...n})=>Object.values(n).some(i=>i!==void 0),"Change at least one field"),ds=t({actionId:a,action:u(["pause","resume","refresh"])}).strict(),ya=z({kind:mt.optional(),id:E}),Sa=t({id:E,occurredAt:x,observedAt:x,author:t({id:E,verified:m().nullable().default(null),kind:mt.optional()}).strict().nullable().default(null),accounts:j(de,ya).refine(e=>Object.keys(e).length<=10,"At most 10 accounts").optional(),data:j(r(),M()),removed:m().default(!1)}).strict().refine(e=>new TextEncoder().encode(JSON.stringify(e.data)).byteLength<=131072,"Record exceeds 128 KB"),Pr=t({kind:le.optional(),id:r()}),ja=t({id:r(),occurredAt:x,observedAt:x,author:t({id:r(),verified:m().nullable().default(null),kind:le.optional()}).nullable().default(null),accounts:j(r(),Pr).optional(),data:j(r(),M()),removed:m().default(!1),source:r(),firstSeenAt:x,synthetic:s(!0).optional(),evidence:xr.nullable().optional()}),ms=t({actionId:a,records:c(Sa).min(1).max(100)}).strict(),us=t({stored:I,admissions:t({admitted:I,skipped:I,filtered:I.optional()}).optional()}),Yt={quest:a,tracker:a,record:E,observedAt:x,release:a,account:r().nullable(),createdAt:x,updatedAt:x,actor:r().nullable()},zs=["quest-paused","before-activation","outside-window","future-record","record-removed","invalid-record-data","content-unavailable","no-account","beneficiary-is-author","unlinked-account","ambiguous-account","not-joined","already-completed","not-enrolled","before-enrollment","historical","prerequisites-incomplete"],Cr=g("state",[t({...Yt,state:s("admitted"),code:Y(),reason:Y(),member:a,attempt:a}),t({...Yt,state:s("skipped"),code:r().min(1),reason:r(),window:u(["tracker","quest"]).optional(),member:a.nullable(),attempt:a.nullable()})]),Er={quest:a.optional(),record:E.optional(),member:a.optional(),state:u(["admitted","skipped"]).optional(),code:r().min(1).max(100).optional(),limit:A.number().int().min(1).max(100).default(25)},bs=z({...Er,cursor:k.optional()}),ps=t({items:c(Cr).max(100),nextCursor:k.nullable()}),gs=z({...Er,before:r().max(512).optional()}),fs=z({items:c(Cr).max(100),next:r().nullable()}),vs=z({actionId:a,quest:a,record:E,observedAt:x}),We=f([m(),u(["true","false"]).transform(e=>e==="true")]),hs=t({author:E.optional(),member:a.optional(),verified:We.optional(),since:A.number().int().safe().nonnegative().optional(),until:A.number().int().safe().nonnegative().optional(),removed:We.default(!1),minLikes:A.number().int().safe().nonnegative().optional(),minViews:A.number().int().safe().nonnegative().optional(),limit:A.number().int().min(1).max(100).default(25),cursor:r().max(2048).optional(),includeEvidence:We.optional()}).strict().refine(e=>e.since===void 0||e.until===void 0||e.until>e.since,"Until must follow since"),ys=t({tracker:a,items:c(ja),nextCursor:r().nullable(),total:I,status:qr}),Ss=t({records:I,authors:I,metrics:t({likes:I,replies:I,reposts:I,quotes:I,views:I,bookmarks:I}),missingMetrics:I,status:qr}),ka={pages:3,posts:100,days:30},js=t({query:we.shape.query,since:x}).strict(),ks=t({query:r(),since:x,fetchedAt:x,pages:I,posts:c(ca).max(ka.posts),more:m()}),xs=z({kind:u(["accept","reject","review","defer","progress","superseded"]),reason:r().nullable()}),xa=z({quest:a,member:a.optional(),content:r().min(1).max(256).optional(),cursor:k.optional()}),Tr=z({quest:a,content:r(),member:a,release:a,attempt:a,revision:a,observation:a,current:m(),state:u(["pending","qualified","unqualified","needs-review","failed","superseded","stale","blocked","unavailable"]),reason:r().nullable(),reward:z({attempt:a.nullable(),completion:a.nullable(),state:u(["unresolved","awarded","excluded"])})}),ws=z({items:c(Tr),nextCursor:k.nullable()}),Ae=Ar,Z=j(Ae,o().int().safe().nonnegative()),wa=z({metrics:c(Ae).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),maxAgeMs:o().int().positive().max(864e5).default(36e5)}),Ge=864e5,Aa=t({kind:s("count"),count:o().int().min(1).max(1e4)}).strict(),Ia=g("kind",[t({kind:s("lifetime")}).strict(),t({kind:s("calendar"),period:u(["day","week","month"]),latenessMs:o().int().min(0).max(90*Ge).default(7*Ge)}).strict(),t({kind:s("rolling"),durationMs:o().int().min(1).max(365*Ge)}).strict()]),Oa=t({kind:s("progress"),goal:Aa,window:Ia,repeat:u(["once","repeat"]).default("once")}).strict(),Fe=t({id:a,ordinal:o().int().positive(),achievedAt:o().int(),window:r()}),$r=g("status",[Fe.extend({status:s("revoked"),completion:a,revokedAt:o().int()}),Fe.extend({status:s("awarded"),completion:a}),Fe.extend({status:s("budget-exhausted"),budget:a})]),qa=t({goal:o().int().positive(),current:o().int().nonnegative(),window:t({key:r(),start:o().int().nullable(),end:o().int().nullable()}),repeat:u(["once","repeat"]),settled:o().int().nonnegative(),latest:$r.nullable()}),Ra=t({id:a,distinct:r(),attempt:a,occurredAt:o().int(),recordedAt:o().int(),window:r(),status:u(["counted","late","future","excluded"]),achievement:$r.nullable(),reason:r().nullable()}),As=t({items:c(Ra),nextCursor:r().nullable()}),Is=t({actionId:Zt(),excluded:m(),reason:r().trim().min(1).max(2e3)}).strict(),Os=t({cursor:r().max(2e3).optional(),limit:A.number().int().min(1).max(100).optional()}).strict(),qs=t({excluded:m()}),er=o().int().safe(),nt=/^(?:[+-]|(?:Etc\/)?GMT[+-]\d|(?:EST|MST|HST)$)/i;function Pa(e){let n;try{n=new Intl.DateTimeFormat("en",{timeZone:e}).resolvedOptions().timeZone}catch{return null}return n==="UTC"?"UTC":nt.test(e)||nt.test(n)?null:n}var Mr=r().min(1).max(100).transform((e,n)=>{let i=Pa(e);return i===null?(n.addIssue({code:"custom",message:nt.test(e)?"Use a named IANA timezone, such as Europe/Budapest or UTC. Fixed offsets have no daylight-saving rules.":"Use an IANA timezone name, such as Europe/Budapest or UTC"}),N):i}),oe=r().min(1).max(100),_r=e=>`${e} no longer take a timeZone: they follow the project calendar. Set calendar.timeZone in relay.json or in Console settings.`,at=e=>typeof e=="object"&&e!==null;function Ca(e,n){return at(e)&&e.kind==="streak"&&"timeZone"in e&&n.addIssue({code:"custom",path:["timeZone"],message:_r("Streaks")}),e}function Ur(e,n){let i=at(e)?e.window:void 0;return at(i)&&i.kind==="calendar"&&"timeZone"in i&&n.addIssue({code:"custom",path:["window","timeZone"],message:_r("Calendar leaderboard windows")}),e}var G=u(["lifetime","day","week","month"]),Rs=t({timeZone:oe,today:r(),nextBoundary:er,pending:t({timeZone:oe,effectiveAt:er}).nullable(),declared:oe.nullable(),unsupported:r().nullable().default(null)}),Ps=t({actionId:a,timeZone:Mr,reason:r().trim().min(1).max(500)}).strict(),Cs=t({timeZone:Mr}).strict(),Ea=t({kind:s("streak"),days:o().int().min(1).max(3650)}),Ta=t({goal:o().int().positive(),current:o().int().nonnegative(),best:o().int().nonnegative(),today:r(),todayQualified:m(),timeZone:oe,nextBoundary:o().int(),pendingTimeZone:t({timeZone:oe,effectiveAt:o().int()}).nullable(),days:c(t({day:o().int(),date:r(),timeZone:r(),occurredAt:o().int()})),milestone:g("status",[t({status:s("pending")}),t({status:s("awarded"),completion:r(),achievedAt:o().int()}),t({status:s("budget-exhausted"),budget:r(),achievedAt:o().int()})])}),U=o().int().safe().nonnegative().max(864e13),it=o().int().safe().nonnegative(),$a=u(["new-record","new-observation","data-changed"]);function Es(e){return e==="custom"?"new-observation":"new-record"}var he=f([o().finite(),z({setting:r().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/)})]),tr=r().max(200).regex(/^[^.\s]+(\.[^.\s]+)*$/,"Use dot-separated keys, such as metrics.likes"),rr=f([z({path:tr,equals:f([r().max(1e3),o().finite(),m()])}),z({path:tr,gt:he.optional(),gte:he.optional(),lt:he.optional(),lte:he.optional()}).refine(e=>[e.gt,e.gte,e.lt,e.lte].some(n=>n!==void 0),"Compare with equals, gt, gte, lt or lte")]),Ma=f([rr,c(rr).min(1).max(10)]);function _a(e){return e===void 0?[]:Array.isArray(e)?e:[e]}function Ts(e){return _a(e).flatMap(n=>"equals"in n?[]:[n.gt,n.gte,n.lt,n.lte].flatMap(i=>typeof i=="object"?[i.setting]:[]))}var Ua=u(["none","required"]),Za=u(["activation","window","enrollment"]),La=u(["staff","claim","automatic"]),Da=z({tracker:a,source:r().min(1).max(100),on:$a,where:Ma.optional(),beneficiary:de,enrollment:Ua.optional(),since:Za.optional(),historical:La.optional(),content:s(!0).optional()}).refine(e=>e.since!=="enrollment"||e.enrollment==="required",'since: "enrollment" needs enrollment: "required"');function $s(e){return e.on}function Ms(e){return{enrollment:e.enrollment??"none",since:e.since??"activation",historical:e.historical??(e.content?"claim":"staff")}}function _s(e){return e.beneficiary}var nr={issuer:r().min(1),subject:r().min(1).max(256),revision:it,linkedAt:U.nullable()},Na=t({member:a,capturedAt:U,account:f([t({provider:s("wallet"),id:r().min(5).max(256),revision:it,linkedAt:U.nullable()}),t({provider:s("x"),...nr}),t({provider:s("discord"),...nr}),t({provider:s("member"),id:a}),t({provider:wr,subject:r().min(1).max(256),revision:it,linkedAt:U.nullable()}),t({provider:r().min(1)})])}),Qa=t({id:r().min(1).max(256),source:r(),occurredAt:U,observedAt:U,firstSeenAt:U,author:t({id:r().min(1).max(256),verified:m().nullable(),kind:le.optional()}).nullable(),accounts:j(de,Pr).optional(),data:j(r(),M()),removed:m()}),Ba=t({revision:a,observation:a,body:j(r(),M())}),Us=t({tracker:a,key:a,beneficiary:de,record:Qa,content:Ba.optional(),attribution:Na,enrolledAt:U.optional()}),ar=Object.freeze(["budget-exhausted","defer-expired","defer-limit-exceeded","evaluator-deferred","evaluator-progress","imported","integration-required","not-linked","provider-unavailable","author-error"]),ir=64,Ha=/^[a-z0-9-]+$/;function Ka(e){return typeof e!="string"||e.length===0||e.length>ir||!Ha.test(e)?`Invalid reject code ${JSON.stringify(e)}: use lowercase letters, digits and hyphens, at most ${ir} characters, such as "wrong-answers"`:ar.includes(e)?`Invalid reject code ${JSON.stringify(e)}: Relay writes it itself. A reject code cannot be ${ar.join(", ")}`:null}var Va=r().superRefine((e,n)=>{let i=Ka(e);i&&n.addIssue({code:"custom",message:i})}),Wa={quests:1e3,questTypes:200,collections:1e3},ye={modules:200,size:2e6},Ga=r().regex(/^[0-9a-f]{64}$/),Fa=r().max(200).regex(/^[a-z0-9_][a-z0-9_.-]*(\/[a-z0-9_][a-z0-9_.-]*)*\.js$/i).refine(e=>!e.split("/").some(n=>n==="."||n===".."),"Runtime module paths cannot contain . or .. segments"),zt=t({digest:Ga,sdkVersion:r().min(1).max(64)}).strict(),Ja=j(Fa,r().min(1)).refine(e=>{let n=Object.values(e);return n.length>0&&n.length<=ye.modules&&n.reduce((i,l)=>i+l.length,0)<=ye.size},`A runtime has 1 to ${ye.modules} modules and at most ${ye.size} characters of source`),Zs=zt.extend({zodVersion:r().min(1).max(64),modules:Ja}).strict();async function Ls(e){let n=JSON.stringify(Object.entries(e).sort(([l],[d])=>l<d?-1:l>d?1:0)),i=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n));return[...new Uint8Array(i)].map(l=>l.toString(16).padStart(2,"0")).join("")}var or=r().regex(/^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,199}$/),bt=g("kind",[Ea,Oa,t({kind:s("once")}).strict(),t({kind:s("keyed")}).strict()]),sr=r().min(1).max(500),Xa=t({id:or,scope:u(["member","project"]),period:G,limit:o().int().positive().max(Number.MAX_SAFE_INTEGER),cost:f([o().int().positive().max(Number.MAX_SAFE_INTEGER),t({balance:or}).strict()])}).strict(),Ya=u(["discord","x"]),ei=u(["discord"]),ti=t({id:r().regex(/^[0-9]{1,20}$/),name:r().min(1),icon:r().nullable()}),Ds=t({provider:ei,configured:m(),status:u(["disconnected","ready","attention"]),revision:o().int().nonnegative(),server:ti.nullable(),issue:r().nullable(),connectedAt:o().default(0)}),ri=r().min(32).max(44).regex(/^[1-9A-HJ-NP-Za-km-z]+$/),Ie=u(["solana","eip155","cosmos"]),Zr=/^cosmos:[-_a-zA-Z0-9]{1,32}$/,pt=re(e=>typeof e=="string"&&Zr.test(e),"Use a Cosmos network: cosmos:<chain ID>"),Ns=r().regex(/^[a-zA-Z][a-zA-Z0-9/:._-]{2,127}$/,"Use a Cosmos bank denomination such as uatom or uosmo");function Qs(e){if(typeof e=="string"&&!e.startsWith("cosmos:"))throw new Error('Use a Cosmos network such as "cosmos:cosmoshub-4"');let n=typeof e=="string"?{chainId:e.slice(7)}:e;if(typeof n?.chainId!="string")throw new Error('Pass a Cosmos chain as { chainId } or a network such as "cosmos:cosmoshub-4"');let i=`cosmos:${n.chainId}`;if(!Zr.test(i))throw new Error("A Cosmos chain ID has 1 to 32 letters, digits, hyphens or underscores");if(n.chainInfo&&n.chainInfo.chainId!==n.chainId)throw new Error("The chain info describes another chain ID");return{...n,network:i}}var ni="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",ai=r().regex(/^0x[0-9a-fA-F]{40}$/),ii=r().min(8).max(90).regex(/^(?:[a-z][a-z0-9]{0,82}1[02-9ac-hj-np-z]{38,}|[A-Z][A-Z0-9]{0,82}1[02-9AC-HJ-NP-Z]{38,})$/),Bs=g("chain",[t({chain:s("solana"),address:ri}).strict(),t({chain:s("eip155"),address:ai,chainId:o().int().positive().safe().optional()}).strict(),t({chain:s("cosmos"),network:pt,address:ii}).strict()]),Hs=t({id:r().min(1).max(200),purpose:u(["link","sign-in"]),chain:Ie,network:pt.nullable(),address:r(),message:r().max(4096),expiresAt:o().int()}),Ks=t({challenge:r().min(1).max(200),signature:r().min(1).max(256),publicKey:r().max(128).optional()}).strict(),Vs=t({chain:Ie,network:pt.nullable(),address:r(),verifiedAt:o().int().nonnegative(),revision:o().int().positive(),signIn:m()}),Ws=t({chain:Ie,address:r().min(1).max(100)}).strict();async function Gs(e){let n=await e.address();switch(e.chain){case"solana":return{chain:"solana",address:n};case"eip155":return{chain:"eip155",address:n,...e.chainId?{chainId:await e.chainId()}:{}};case"cosmos":if(!e.network)throw Ln("Choose the Cosmos chain for this wallet",_n.InvalidInput);return{chain:"cosmos",network:e.network,address:n}}}var Fs=5,ot=["solana","eip155","cosmos"],oi=u(ot),Js=c(oi).max(ot.length).refine(e=>new Set(e).size===e.length,{message:"Duplicate wallet family"}).transform(e=>ot.filter(n=>e.includes(n)));function Xs(e){return e.chain}function Ys(e,n){if(e.chain==="cosmos"){if(!e.network||n&&n!==e.network)throw new Error("A Cosmos wallet belongs to its own network");return`${e.network}:${e.address}`}let i=n??(e.chain==="solana"?ni:"eip155:1");if(!(e.chain==="solana"?/^solana:[1-9A-HJ-NP-Za-km-z]{32}$/.test(i):Lr(i)))throw new Error(`Use a ${e.chain} network for this wallet`);return`${i}:${e.address}`}function Lr(e){return/^eip155:[1-9][0-9]{0,15}$/.test(e)}var ec=re(e=>typeof e=="string"&&Lr(e),'Use an EVM chain ID such as "eip155:8453"'),Je=r().regex(/^(0|[1-9][0-9]*)$/),tc=S(t({chain:r(),token:r().nullable(),decimals:o().int().min(0).max(255).nullable(),total:Je,wallets:c(t({address:r(),amount:Je}).strict()),at:t({kind:u(["slot","block"]),number:Je}).strict(),observedAt:o().int().nonnegative()}).strict()),si=t({required:m().default(!0),minLength:o().int().min(0).max(1e4).default(1),maxLength:o().int().min(1).max(1e4).default(1e4)}).strict().refine(e=>e.minLength<=e.maxLength,"minLength must not exceed maxLength"),ci=r().min(1).max(253).refine(e=>{if(!/^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/i.test(e)||e.includes(".."))return!1;try{let n=new URL(`https://${e}`);return n.hostname===e.toLowerCase()&&!n.port&&!n.username&&!n.password&&n.pathname==="/"&&!n.search&&!n.hash}catch{return!1}},"Use a hostname without a scheme, path, port, or wildcard"),li=t({required:m().default(!0),allowedHosts:c(ci).min(1).max(100).optional()}).strict(),Dr=t({kind:s("text"),value:r().max(1e4)}).strict(),Nr=t({kind:s("url"),value:r().max(2048)}).strict(),rc=g("kind",[Dr,Nr]);function nc(e,n){let i=e.kind==="text"?1e4:2048;if(e.value.length>i)return`Enter no more than ${i} characters`;if(e.kind!==n.input)return`This quest requires ${n.input} input`;if(!e.value.trim())return n.constraints.required?"This field is required":null;if(n.input==="text")return e.value.length<n.constraints.minLength?`Enter at least ${n.constraints.minLength} characters`:e.value.length>n.constraints.maxLength?`Enter no more than ${n.constraints.maxLength} characters`:null;let l=Qr(e.value);return l?n.constraints.allowedHosts&&!n.constraints.allowedHosts.some(d=>d.toLowerCase()===l.hostname.toLowerCase())?`Use a URL hosted on: ${n.constraints.allowedHosts.join(", ")}`:null:"Enter a valid HTTP or HTTPS URL without credentials"}function Qr(e){if(e!==e.trim()||/[\\\s]/.test(e)||!/^https?:\/\//i.test(e))return null;try{let n=new URL(e);return["http:","https:"].includes(n.protocol)&&!n.username&&!n.password?n:null}catch{return null}}function ac(e){let n=Qr(e);return!n||n.port||!["x.com","www.x.com","twitter.com","www.twitter.com","mobile.twitter.com"].includes(n.hostname)?null:/^\/(?:[A-Za-z0-9_]+|i\/web)\/status\/([0-9]{1,20})\/?$/.exec(n.pathname)?.[1]??null}var gt=r().regex(/^[a-zA-Z0-9_-]+$/).max(100),di=t({id:gt,label:r().trim().min(1).max(500)}).strict(),Br=t({id:gt,prompt:r().trim().min(1).max(1e3),choices:c(di).min(2).max(8).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Choice IDs must be unique")}).strict(),mi=c(Br).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Question IDs must be unique"),ft=c(Br.extend({correct:gt}).refine(e=>e.choices.some(n=>n.id===e.correct),"Choose a correct answer from the available choices")).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Question IDs must be unique"),Hr=f([z({provider:s("domino"),resource:s("point-ledger")}),Kn]),ic=t({source:Hr,query:r().max(100).optional(),cursor:r().regex(/^\d{1,6}$/).optional(),ids:c(r().min(1).max(100)).max(50).optional()}).strict(),oc=t({revision:o().int(),options:c(t({id:r(),label:r(),description:r().optional(),group:r().optional(),disabledReason:r().optional()})),nextCursor:r().nullable().default(null),cursor:r().nullable()}),Kr=ze.datetime({offset:!0}).transform(e=>new Date(e).toISOString()),st=f([s(""),r().regex(/^\S{1,200}$/)]),_={label:r().min(1),description:r().optional()},ui=g("kind",[t({..._,kind:s("point-ledger"),default:a.or(s(""))}).strict(),t({..._,kind:s("datetime"),default:Kr}).strict(),t({..._,kind:s("resource"),default:st,source:Hr}).strict(),t({..._,kind:s("quiz"),default:ft}).strict(),t({..._,kind:s("text"),default:r(),minLength:o().int().nonnegative(),maxLength:o().int().positive(),multiline:m(),picker:r().optional()}).strict(),t({..._,kind:s("integer"),default:o().int(),min:o().int(),max:o().int()}).strict(),t({..._,kind:s("boolean"),default:m()}).strict(),t({..._,kind:s("choice"),default:r(),options:c(r().min(1)).min(1)}).strict()]),zi=j(r().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/),ui),V=j(r(),f([r(),o().finite(),m(),ft]));function sc(e,n){let i={};for(let[l,d]of Object.entries(e))switch(d.kind){case"point-ledger":i[l]=st.default(d.default);break;case"datetime":i[l]=Kr.default(d.default);break;case"resource":i[l]=st.default(d.default);break;case"quiz":i[l]=ft.default(d.default);break;case"text":i[l]=r().min(d.minLength).max(d.maxLength).default(d.default);break;case"integer":i[l]=o().int().min(d.min).max(d.max).default(d.default);break;case"boolean":i[l]=m().default(d.default);break;case"choice":i[l]=u(d.options).default(d.default);break}return V.parse(t(i).strict().parse(n))}function cc(e,n){return Object.entries(e).filter(([i,l])=>(l.kind==="resource"||l.kind==="point-ledger")&&!n[i]).map(([i])=>i)}function lc(e,n){return e.kind===n.kind||e.kind==="resource"&&e.source.provider==="domino"&&n.kind==="point-ledger"||n.kind==="resource"&&n.source.provider==="domino"&&e.kind==="point-ledger"||e.kind==="text"&&(n.kind==="resource"||n.kind==="datetime"||n.kind==="point-ledger")}var F={key:a};function dc(e){if("id"in e)throw new Error("Authoring definitions use key, not id");return a.parse(e.key)}var W=o().int().safe().nonnegative(),vt=t({from:W,until:W}).strict().refine(e=>e.until>e.from,{message:"Window end must follow its start",path:["until"]}),ke=t({key:a,title:r().trim().min(1).max(120),window:vt.optional(),enrollment:u(["none","required"]).default("none")}).strict(),bi=ke.omit({key:!0,title:!0}).extend({...F,title:r().trim().min(1).max(120).optional()}).strict().transform(e=>{let n=e;return ke.parse({...n,title:e.title??n.key})});function mc(e){return bi.parse(e)}var pi=ke.extend({enrolledAt:W.nullable(),withdrawnAt:W.nullable().default(null),withdrawalReason:r().nullable().default(null)}),Vr=t({actionId:a,campaign:a}).strict(),uc=Vr.extend({member:a}),gi=Vr,zc=gi.extend({member:a,reason:r().trim().min(1).max(500)}),bc=t({campaign:a,member:a,enrolledAt:W,withdrawnAt:W.nullable().default(null),withdrawalReason:r().nullable().default(null)});function ht(e,n){return n}var pc=a.or(s("")).brand();function fi(e){return typeof e=="string"?e:e.key}var cr=t({key:a,title:r().trim().min(1).max(120)}).strict(),vi=cr.omit({key:!0,title:!0}).extend({...F,title:r().trim().min(1).max(120).optional()}).strict().transform(e=>cr.parse({...e,title:e.title??e.key}));function gc(e){return ht("group",vi.parse(e))}function hi(e){return a.parse(e.key)}var Wr=r().trim().min(1).max(120),Gr=r().trim().min(1).max(1e3),ct=o().int().nonnegative().max(864e13),fc=t({actionId:a,key:a,title:Wr}).strict(),vc=t({title:Wr}).strict(),hc=t({actionId:a,member:a,reason:Gr}).strict(),yc=t({actionId:a,reason:Gr}).strict(),Sc=z({cursor:k.optional(),limit:o().int().min(1).max(100).optional()}),yi=t({key:a,title:r(),members:o().int().nonnegative(),createdAt:ct,archivedAt:ct.nullable()}),jc=t({items:c(yi),nextCursor:k.nullable()}),Si=t({member:a,addedAt:ct.nullable()}),kc=t({items:c(Si),nextCursor:k.nullable()}),Fr=o().int().safe().nonnegative(),Jr=Fr.positive(),Xr=g("scope",[t({kind:s("completion"),quest:a,scope:s("ever")}).strict(),t({kind:s("completion"),quest:a,scope:s("period"),period:G.exclude(["lifetime"])}).strict()]),Yr=t({kind:s("balance"),balance:a,minimum:Jr}).strict(),en=t({kind:s("group"),group:a,title:r()}).strict(),ji=g("kind",[Xr,Yr,en]),yt=f([t({kind:s("completion"),quest:a,title:r(),scope:s("ever")}),t({kind:s("completion"),quest:a,title:r(),scope:s("period"),period:G.exclude(["lifetime"]),resetsAt:o().int().safe()}),t({kind:s("balance"),balance:a,title:r(),minimum:Jr,current:Fr}),t({kind:s("group"),group:a,title:r()})]);function xc(e,n={}){let i=e.key;return Xr.parse({kind:"completion",quest:i,scope:n.scope??"ever",..."period"in n?{period:n.period}:{}})}function wc(e,n){return Yr.parse({kind:"balance",balance:fi(e),minimum:n})}function Ac(e){return en.parse({kind:"group",group:hi(e),title:e.title})}var St=2147483647,me=t({kind:s("points").default("points"),balance:a,amount:o().int().min(0).max(St)}).strict(),jt=t({badge:a.optional(),group:a.optional(),id:a,title:r().min(1).max(120),tiers:c(t({id:a,title:r().min(1).max(120)}).strict()).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Tier IDs must be unique"),inventory:t({kind:s("untracked")}).strict(),fulfillment:g("kind",[t({kind:s("staff-handover")}).strict(),t({kind:s("automatic")}).strict()])}).strict().refine(e=>e.badge===void 0&&e.group===void 0||e.fulfillment.kind==="automatic"&&e.tiers.length===1&&e.tiers[0].id==="awarded","Badge and group rewards require the fixed automatic achievement envelope").refine(e=>e.badge===void 0||e.group===void 0,"A reward is either a badge or a group membership"),Ic=t({id:a,key:a.nullable()}),L=t({kind:s("tier"),reward:jt,tier:a}).strict().refine(e=>e.reward.tiers.some(n=>n.id===e.tier),"Unknown reward tier"),ki=L.transform((e,n)=>{let i=e.reward.badge;return!i||e.reward.fulfillment.kind!=="automatic"||e.reward.tiers.length!==1||e.tier!=="awarded"?(n.addIssue({code:"custom",message:"Invalid badge reward"}),N):{...e,reward:{...e.reward,badge:i}}});function Oc(e,n){return ki.parse({kind:"tier",tier:"awarded",reward:{id:e,badge:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var xi=L.transform((e,n)=>{let i=e.reward.group;return!i||e.reward.fulfillment.kind!=="automatic"||e.reward.tiers.length!==1||e.tier!=="awarded"?(n.addIssue({code:"custom",message:"Invalid group reward"}),N):{...e,reward:{...e.reward,group:i}}});function qc(e,n){return xi.parse({kind:"tier",tier:"awarded",reward:{id:e,group:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var wi=Hn,lt=f([me,L,wi]);function kt(e){return e.kind==="tier"&&e.reward.badge?"badge:"+e.reward.badge:e.kind==="tier"&&e.reward.group?"group:"+e.reward.group:e.kind==="integration"?`integration:${e.provider}:${e.action}:${e.roleId}`:e.kind==="points"?"points:"+e.balance:"tier:"+e.reward.id}var tn=f([t({kind:s("manual"),input:s("text"),constraints:si,actor:u(["member","staff"]).optional()}).strict(),t({kind:s("manual"),input:s("url"),constraints:li,actor:u(["member","staff"]).optional()}).strict(),t({kind:s("manual"),input:u(["photo","quiz","none"]),actor:u(["member","staff"]).optional()}).strict(),t({kind:s("automatic"),tracker:Da.optional()}).strict()]),Ai=f(tn.options.map(e=>e.strip())),rn=t({kind:u(["pass","fail","unclear"]),reason:r().min(1).max(2e3)}).strict(),Rc=t({text:r().min(1).max(16e3).refine(e=>e.trim().length>0,"Text must not be blank"),criteria:r().trim().min(1).max(2e3)}).strict(),Pc=rn,lr={minRetryAfterMs:1e3,maxRetryAfterMs:36e5,retryAfterMs:6e4,horizonMs:864e5,maxDefers:100},dr={minMs:1e3,maxMs:6048e5},Ii=o().int().min(dr.minMs).max(dr.maxMs),xt=t({current:o().finite().nonnegative(),target:o().finite().positive(),reason:r().min(1).max(2e3)}).refine(e=>e.current<=e.target,{message:"Progress current must not exceed target"}),Cc=g("kind",[z({kind:s("defer"),reason:r().min(1).max(2e3),retryAfterMs:o().int().min(lr.minRetryAfterMs).max(lr.maxRetryAfterMs).optional(),until:o().int().safe().nonnegative().optional()}),xt.safeExtend({kind:s("progress")}).strict(),t({kind:s("accept"),rewards:c(lt).max(10),completionKey:sr.optional()}).strict(),t({kind:s("reject"),reason:r().min(1).max(2e3),code:Va.optional(),requestedReview:s(!0).optional()}).strict(),t({kind:s("review"),reason:r().min(1).max(2e3),rewards:c(lt).max(10).optional(),completionKey:sr.optional()}).strict()]),Oi=u(["workers-ai"]),qi=u(["fixture-pass","fixture-fail","fixture-unclear","fixture-error","workers-ai"]),wt=c(lt).max(10).refine(e=>new Set(e.map(kt)).size===e.length,"Use one entry per balance or shared reward"),se=r().max(2e3).refine(e=>{if(/^\/(?!\/)[^\\\s]*$/.test(e))return!0;try{return new URL(e).protocol==="https:"}catch{return!1}},"Use an HTTPS URL or a same-site path beginning with /"),Ri=g("kind",[t({kind:s("link"),url:se.refine(e=>e.startsWith("https://"),"Use an HTTPS URL"),label:r().trim().min(1).max(120)}).strict()]),Pi=t({title:r().trim().min(1).max(120),description:r().max(4e3).optional(),action:Ri.optional()}).strict(),Ci=g("kind",[t({kind:s("account"),provider:dt}).strict(),t({kind:s("wallet"),chain:Ie.optional()}).strict()]),xe=t({steps:c(Pi).max(30).optional(),image:se.optional(),imageAlt:r().max(500).optional(),requirements:c(Ci).max(10).optional()}).strict(),nn=xe.extend({quiz:mi.optional(),instructions:r().max(4e3).optional(),video:t({url:se,poster:se.optional(),captions:t({url:se,language:r().min(2).max(20),label:r().min(1).max(80)}).strict().optional()}).strict().optional()}).strict(),Ei=t({visible:m()}).strict(),Ti=2,$i=s(Ti),an=t({quest:a,evaluatorProtocol:$i,title:r().min(1).max(120),presentation:nn.default({}),integrations:c(Ya).max(10).default([]),fields:zi,values:V,rewards:wt,humanReview:m(),trigger:tn,performance:wa.optional(),requires:c(ji).max(30).default([]),campaign:ke.optional(),availability:vt.optional(),completion:pe(Ca,bt),visibility:u(["visible","hidden"]).default("visible"),profile:Ei.default({visible:!1}),budgets:c(Xa).max(20).default([]),retryCooldownMs:Ii.optional()}).strict(),Mi=t({code:r().min(1).max(1e6)}).strict(),_i=Mi.extend({runtime:zt.optional(),settings:V,provider:Oi,expectedRelease:a.nullable().optional(),settingRenames:j(r(),r()).optional()}).strict(),Ec=t({releases:c(_i).min(1).max(Wa.quests)}).strict(),Tc=t({quest:a,expectedRelease:a,set:V,reset:c(r()),presentation:xe.nullable().optional()}).strict(),Ui=an.extend({completion:bt}),Zi=S(Ui.extend({key:a.optional(),code:r(),runtime:zt.optional(),provider:qi,id:a,createdAt:o(),origin:t({typeVersion:a}).strict().optional(),lifecycle:u(["active","paused","archived"]).default("active"),configuration:t({defaults:V,overrides:V,preserved:c(r()),presentation:xe.optional(),presentationDefaults:xe.optional()}).strict().optional()})),$c=t({code:r(),definition:an}),Li=j(a,a).refine(e=>Object.keys(e).length>0&&Object.keys(e).length<=50,"Provide between 1 and 50 answers").transform(e=>Object.fromEntries(Object.entries(e).sort(([n],[i])=>n.localeCompare(i)))),Di=t({kind:s("quiz"),release:a.optional(),answers:Li}).strict(),Oe=f([Di,Dr,Nr]),Mc=t({actionId:a,quest:a,member:a,evidence:a.optional(),input:Oe.optional(),release:a.optional(),faultAfterReview:m().optional()}).strict(),_c={Queued:"queued",Evaluating:"evaluating",Deferred:"deferred",Accepted:"accepted",Progressed:"progressed",Rejected:"rejected",NeedsReview:"needs-review",Failed:"failed"},Ni=r(),qe=t({id:a,release:a,quest:a,member:a,evidence:a.nullable(),input:Oe.optional(),status:Ni,reason:r().nullable(),retries:o(),generation:o(),completion:r().nullable(),reviewRewards:wt.nullable().default(null),evaluationRun:o().int().nonnegative().default(0),deferCount:o().int().nonnegative().default(0),deferUntil:o().int().safe().nullable().default(null),nextEvaluationAt:o().int().safe().nullable().default(null),code:r().nullable().default(null),progress:xt.nullable().default(null),requestedReview:m().default(!1),createdAt:o()}),Uc={Open:"open",Submitted:"submitted",Discarded:"discarded",Expired:"expired"},Qi=r(),Bi=S(t({id:a,quest:a,member:a,release:a.nullable(),input:Oe.nullable(),evidence:a.nullable(),reviewRequired:m(),status:Qi,attempt:a.nullable(),createdAt:o(),updatedAt:o(),expiresAt:o()})),Zc=t({release:a.nullable().optional(),input:Oe.nullable().optional(),evidence:a.nullable().optional()}).strict(),Lc=S(t({submission:Bi,attempt:qe,replayed:m()})),Hi=t({id:o(),attempt:r().nullable(),kind:r(),detail:r(),actor:r().nullable().default(null),at:o()}),Ki=t({item:a,revision:o().int().nonnegative()}).strict(),ce=t({item:a,label:r().min(1).max(80)}).strict(),Vi=g("kind",[t({kind:s("untracked")}).strict(),t({kind:s("at-pickup"),tiers:c(t({tier:a,variants:c(ce).min(1).max(100)}).strict()).min(1).max(100)}).strict()]),Dc=t({reward:jt,revision:o().int().nonnegative(),policy:Vi}),Nc=g("kind",[t({kind:s("untracked")}).strict(),t({kind:s("at-pickup"),revision:o().int().nonnegative(),variants:c(ce.extend({available:o().int().nonnegative()}))}).strict()]),Qc=t({reward:a,revision:o().int().nonnegative(),actionId:a,policy:g("kind",[t({kind:s("untracked")}).strict(),t({kind:s("at-pickup"),tiers:c(t({tier:a,variants:c(ce.extend({item:a.optional()})).min(1).max(100)}).strict()).min(1).max(100)}).strict()])}).strict(),on=t({completion:a,reason:r(),flaggedAt:o(),remainingTier:a.nullable()}),Se={id:a,member:a,reward:jt,earnedTier:a,tier:a,revision:o().int().positive()},Bc=g("status",[t({...Se,status:s("available")}).strict(),t({...Se,status:s("handing-over"),handover:a,startedAt:o(),allocation:ce.optional()}).strict(),t({...Se,status:s("collected"),handover:a,startedAt:o(),allocation:ce.optional(),collectedAt:o(),recovery:on.optional()}).strict(),t({...Se,status:s("void"),voidedAt:o()}).strict()]),Wi=t({id:a,title:r(),tiers:c(t({id:a,title:r()}).loose()),inventory:t({kind:r()}).loose(),fulfillment:t({kind:r()}).loose()}).loose(),ae={id:a,member:a,reward:Wi,earnedTier:a,tier:a,revision:o().int()},mr=t({item:a,label:r()}).loose(),sn=f([g("status",[t({...ae,status:s("available")}).loose(),t({...ae,status:s("handing-over"),handover:a,startedAt:o(),allocation:mr.optional()}).loose(),t({...ae,status:s("collected"),handover:a,startedAt:o(),allocation:mr.optional(),collectedAt:o(),recovery:on.optional()}).loose(),t({...ae,status:s("void"),voidedAt:o()}).loose()]),t({...ae,status:r()}).loose().transform(({status:e,...n})=>({...n,status:"unsupported",reportedStatus:e}))]),Hc=t({actionId:a,revision:o().int().positive(),selection:Ki.optional()}).strict(),Kc=t({actionId:a,handover:a}).strict(),Vc=t({actionId:a,revision:o().int().positive(),reason:r().trim().min(1).max(500)}).strict(),Wc={Quest:"quest",Leaderboard:"leaderboard"},Gi=r().min(1).max(64),Fi=t({kind:Gi,id:a}),Ji=t({key:r().default("once"),id:a,quest:a,member:a,source:Fi.optional()}),Xi=g("kind",[t({kind:s("available"),input:u(["photo","quiz","none","text","url"])}).strict(),t({kind:s("completed")}).strict(),t({kind:s("locked"),missing:c(yt).min(1)}).strict(),t({kind:s("blocked"),reason:u(["budget-exhausted","connection-required","wallet-required","paused","outside-window","enrollment-required"]),window:u(["tracker","quest"]).optional(),resetsAt:o().int().safe().optional()}).strict(),t({kind:s("staff-required")}).strict(),t({kind:s("automatic")}).strict(),t({kind:s("checking"),attempt:a}).strict(),t({kind:s("needs-review"),attempt:a}).strict(),t({kind:s("retryable"),attempt:a}).strict()]),Yi=f(Xi.options.map(e=>e.strip())),eo=t({id:a,scope:u(["member","project"]),period:u(["day","week","month","lifetime"]),remaining:o().int().safe().nonnegative(),resetsAt:o().int().safe().nullable()}),Gc=S(t({member:a,quests:c(t({quest:a,key:a.optional(),release:a.optional(),title:r(),presentation:nn.default({}),connections:c(dt).default([]),trigger:Ai,availability:Yi,completed:m(),completion:bt.default({kind:"once"}),streak:Ta.nullable().optional(),counter:qa.nullable().optional(),progress:xt.nullable().default(null),completionCount:o().int().nonnegative().default(0),visibility:u(["visible","hidden"]).default("visible"),missing:c(yt),campaign:pi.nullable().default(null),window:vt.nullable().default(null),budgets:c(eo).default([]),retryAt:o().int().safe().optional(),attempt:qe.nullable()})),entitlements:c(sn)})),Fc=S(t({releases:c(Zi),completions:c(Ji),entitlements:c(sn),attempts:c(qe),balances:c(t({member:r(),balance:r(),earned:o(),held:o(),available:o()})),events:c(Hi)})),Jc=t({id:a,member:a,type:u(["image/jpeg","image/png"]),size:o()}),Xc=t({error:r(),code:r().optional(),window:u(["tracker","quest"]).optional(),missing:c(yt).optional(),retryAt:o().int().safe().optional()}),Yc=t({actionId:a,generation:o().int().nonnegative(),decision:u(["accept","reject"]),reason:r().trim().min(1).max(2e3)}).strict(),el=t({item:a,quantity:o().int().min(0).max(1e4)}).strict(),tl=t({actionId:a,member:a,item:a,balance:a,price:o().int().positive().max(1e4)}).strict(),cn={limit:o().int().min(1).max(100).default(25),cursor:r().min(1).max(4096).optional()},rl=t({...cn,member:a.optional(),quest:a.optional()}).strict(),nl=t({...cn,prefix:a.optional()}).strict(),to=t({attempt:qe,title:r(),checks:c(t({criteria:r(),result:rn}))}),al=t({items:c(to).max(100),nextCursor:r().nullable()}),il=t({items:c(t({member:a})).max(100),nextCursor:r().nullable()}),ol=t({actionId:a,name:r().trim().min(1).max(80)}).strict(),sl=t({id:a,name:r()}),cl=z({contentAttempt:a,observation:a,observedAt:o().int().safe().nonnegative(),metrics:Z,rewards:wt}),ll=xa.extend({content:r().min(1).max(256)}),dl=z({current:z({state:u(["content-pending","content-unqualified","waiting","pending","qualified","unqualified","needs-review","failed","superseded"]),reason:r().nullable(),contentAttempt:a,attempt:a.nullable(),reward:Tr.shape.reward}),items:c(z({attempt:a,contentAttempt:a,observation:a,observedAt:o(),metrics:Z,state:u(["pending","qualified","unqualified","needs-review","failed","superseded"]),reason:r().nullable()})),nextCursor:k.nullable()});var un=t({name:r().trim().min(1).max(120),description:r().trim().max(1e3).default(""),image:r().url().max(2048)}).strict(),zn=un.extend({key:a}).strict(),bn=un.extend({id:a,key:a.nullable()}).strip(),gl=bn.extend({archivedAt:o().int().nonnegative().nullable()}),fl=zn.extend({actionId:a}).strict(),vl=f([zn,t({code:r().min(1).max(2e6)}).strict()]),ro=t({badge:bn,awardedAt:o().int().nonnegative()}),hl=t({items:c(ro)}),yl=t({actionId:a,reason:r().trim().min(1).max(1e3)}).strict(),Sl=t({badge:a,member:a,awarded:m(),changed:m()}),Rt=t({name:r().trim().min(1).max(120),description:r().trim().max(1e3).default("")}).strict(),jl=Rt.extend({actionId:a,key:a.optional()}).strict(),no=Rt.extend({id:a}),kl=no.extend({archivedAt:o().int().nonnegative().nullable()}),ao=Rt.extend({key:a}).strict(),xl=f([ao,t({code:r().min(1).max(2e6)}).strict()]),io=t({id:a,key:a.nullable(),name:r()}),Ce=o().int().safe(),oo=t({ledger:io,balance:Ce,available:Ce}),wl=t({items:c(oo)}),Al={Award:"award",Spend:"spend",Adjust:"adjust",Reverse:"reverse"},so=r().min(1).max(64),pn=t({id:a,amount:Ce,kind:so,at:Ce.nonnegative(),quest:a.nullable(),reverses:a.nullable(),imported:m().optional()}),Il=z({ledger:a,cursor:k.optional()}),Ol=t({items:c(pn),nextCursor:k.nullable()}),w=o().int().safe().nonnegative(),gn=z({scope:u(["member","project"]),period:G,limit:w}),Pt=z({key:a,qualifiedBy:a,balance:a,metrics:c(Ae).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),baseline:s("historical"),maxAgeMs:o().int().positive().max(864e5).default(36e5),budgets:c(gn).max(8).default([]).refine(e=>new Set(e.map(n=>n.scope+":"+n.period)).size===e.length,"Give each scope and period one budget")}),ql=z({metrics:Z,baseline:Z}),Rl=z({target:w,baseline:w}),fn=z({actionId:a,code:r().min(1).max(1e6)}),ue=z({version:a,definition:Pt,publishedAt:w}),Pl=z({rule:a,content:r().min(1).max(256),member:a.optional(),cursor:k.optional()}),vn=z({id:a,day:r(),observation:a,qualification:a,earned:w,growth:w,paid:w,excluded:w,entry:a.nullable(),createdAt:w}),Cl=z({rule:ue,account:z({member:a,earned:w,accounted:w,paid:w,excluded:w,pending:w,counters:Z,baseline:Z,observation:a.nullable(),nextSettlementAt:w.nullable(),reason:r().nullable()}).nullable(),items:c(vn),nextCursor:k.nullable()}),El=z({code:r().min(1).max(1e6)}),Tl=fn.extend({expectedVersion:a,previewHash:a}),Re=r().regex(/^(0|[1-9][0-9]*)$/),co=z({rule:a,fromVersion:a,toVersion:a,previewHash:a,definition:Pt,boundary:s("available-eligible-observation"),settlement:s("deferred"),summary:z({knownAdmissions:w,accounts:w,uninitialized:w,pendingTransitions:w,earned:Re,paid:Re,excluded:Re,pending:Re})}),lo=ue.extend({previousVersion:a.nullable()}),$l=t({items:c(t({version:a,definition:t({...Pt.shape,budgets:c(t(gn.shape)).max(8).default([])}),publishedAt:w,previousVersion:a.nullable()})),nextCursor:k.nullable()}),Ml=z({items:c(lo),next:w.nullable()}),_l=z({rule:a,before:A.number().int().positive().safe().optional()}),Ul=z({current:ue.nullable(),requested:ue,items:c(z({from:a,to:a,baseline:Z,observedAt:w,settlement:vn})),nextCursor:k.nullable()}),mo=fn.omit({actionId:!0}),At=mo.extend({rule:ue}),Zl=g("kind",[At.extend({kind:s("create")}),At.extend({kind:s("unchanged")}),At.extend({kind:s("change"),change:co})]),T=o().int().nonnegative().safe(),hn=u(["private","participants","public"]),Ee=u(["x","discord","google"]),ln=u(["x","discord"]),uo=c(ln).max(ln.options.length).refine(e=>new Set(e).size===e.length,"List each provider once"),It=r().min(1).max(100),zo=g("source",[t({source:s("upload"),url:r().url(),seed:It}),t({source:s("account"),provider:Ee,url:r().url(),seed:It}),t({source:s("generated"),seed:It})]),yn=t({id:a,name:r(),avatar:zo}),bo=/[\p{Cc}؜᠎​-‏‪-‮⁠-⁤⁦-⁩]/u,po=r().max(200).transform(e=>e.normalize("NFC").replace(/\s+/g," ").trim()).pipe(r().min(1,"Enter a name").max(40,"Use at most 40 characters").refine(e=>!bo.test(e),"Use visible characters only")),Ll=t({displayName:po.nullable().optional(),avatar:g("source",[t({source:s("account"),provider:Ee}).strict(),t({source:s("generated")}).strict()]).nullable().optional(),hidden:m().optional()}).strict().refine(e=>Object.values(e).some(n=>n!==void 0),"Change at least one field"),go=yn.extend({displayName:r().nullable(),avatarChoice:u(["default","upload","account","generated"]),avatarProvider:Ee.nullable(),hidden:m(),locked:m(),visibility:hn,options:c(t({provider:Ee,name:r().nullable(),imageUrl:r().url().nullable()}))}),Sn=r().min(1).max(512),Dl=t({limit:A.number().int().min(1).max(100).default(20),cursor:Sn.optional()}).strict(),fo=t({quest:a,key:a.optional(),title:r(),completions:T.positive(),lastCompletedAt:T.nullable()}),Nl=t({items:c(fo),nextCursor:Sn.nullable()}),Ql=t({program:a,key:a.optional(),title:r(),invited:T,qualified:T,milestones:c(t({id:a,count:T,reached:m()}))}),vo=t({visibility:hn,defaults:uo,revision:T,actor:r().nullable(),updatedAt:T.nullable()}),Bl=vo.omit({revision:!0,actor:!0,updatedAt:!0}).extend({actionId:a,expectedRevision:T,reason:r().trim().min(1).max(500)}).strict(),Hl=t({actionId:a,resetName:m().default(!1),removeAvatar:m().default(!1),lock:m().optional(),reason:r().trim().min(1).max(1e3)}).strict().refine(e=>e.resetName||e.removeAvatar||e.lock!==void 0,"Choose an action"),Kl=go.omit({options:!0}).extend({member:a,lockedAt:T.nullable(),lockedBy:r().nullable(),lockedReason:r().nullable(),updatedAt:T}),Vl=5*1024*1024,Wl=["image/jpeg","image/png","image/webp"],y=o().int().safe(),O=y.nonnegative().max(864e13),jn=g("kind",[t({kind:s("all-time")}).strict(),t({kind:s("fixed"),start:O,end:O}).strict().refine(e=>e.end>e.start,"Window end must follow its start"),t({kind:s("rolling"),days:y.min(1).max(3660)}).strict(),t({kind:s("calendar"),period:G.exclude(["lifetime"])})]),ho={window:jn.default({kind:"all-time"}),quests:c(a).min(1).max(100).optional()},kn=g("kind",[t({kind:s("balance")}).strict(),t({kind:s("earned"),...ho}).strict(),t({kind:s("net"),window:jn.default({kind:"all-time"})}).strict()]).default({kind:"balance"}),yo=f([me,L]),xn=t({ranks:Nt([y.positive(),y.positive()]).refine(([e,n])=>n>=e,{message:"Prize rank range must end at or after it starts"}),rewards:c(yo).min(1).max(20)}).strict(),So=t({at:s("window-end"),ties:u(["shared","earliest"]),prizes:c(xn).min(1).max(50)}).strict().superRefine((e,n)=>{for(let[i,l]of e.prizes.entries()){let d=l.rewards.map(kt);new Set(d).size!==d.length&&n.addIssue({code:"custom",message:"A prize may grant each point ledger or tiered reward only once",path:["prizes",i,"rewards"]})}for(let i=1;i<e.prizes.length;i++){let l=e.prizes[i-1];e.prizes[i].ranks[0]<=l.ranks[1]&&n.addIssue({code:"custom",message:"Prize rank ranges must be ordered and must not overlap",path:["prizes",i,"ranks"]})}}),wn=t({id:a,key:a.optional(),title:r().trim().min(1).max(120),balance:a,score:kn,access:u(["participants","public"]).default("participants"),group:a.optional(),includeUnscored:m().optional(),settle:So.optional()}).strict(),An=(e,n)=>{e.settle&&(e.score.kind==="balance"||!["fixed","calendar"].includes(e.score.window.kind))&&n.addIssue({code:"custom",message:"Leaderboard prizes require an earned or net score with a fixed or calendar window",path:["settle"]})},jo=wn.superRefine(An),ko=S(jo),xo=wn.omit({id:!0}).extend({...F,score:pe(Ur,kn),group:a.optional()}).strict().superRefine(An),Gl=f([xo,t({code:r().min(1).max(2e6)}).strict()]),wo=t({archivedAt:o().int().nonnegative().nullable().optional(),version:a,definition:ko,publishedAt:O,actor:r().nullable()}),Fl=t({limit:A.number().int().min(1).max(100).default(25),cursor:r().max(4096).optional()}).strict(),Ot=t({participant:a,member:a.optional(),name:r(),score:y,rank:y.positive(),profile:yn.nullable()}),dn=t({leaderboard:a,title:r(),version:a,calculation:u(["balance","earned","net"]),period:t({start:O.nullable(),end:O.nullable()}),calculatedAt:O,lastEntryAt:O.nullable(),total:y.nonnegative(),items:c(Ot),me:Ot.nullable(),nearby:c(Ot),nextCursor:r().nullable()}),Jl=t({leaderboard:a,key:a.optional(),title:r(),profile:a,rank:y.positive().nullable(),score:y.nullable(),total:y.nonnegative()}),Xl=z({board:a,cursor:k.optional()}),Yl=t({leaderboard:a,period:t({start:O.nullable(),end:O.nullable()}),items:c(pn),nextCursor:k.nullable()}),ed=t({published:wo,before:dn.nullable(),after:dn}),In={actionId:a,member:a,balance:a,reason:r().trim().min(1).max(1e3)},Pe={...In,effectiveAt:O.optional()},td=g("kind",[t({...Pe,kind:s("award"),referralEligible:m().optional(),amount:y.positive()}).strict(),t({...Pe,kind:s("spend"),amount:y.positive()}).strict(),t({...Pe,kind:s("adjust"),amount:y.refine(e=>e!==0)}).strict(),t({...Pe,kind:s("set"),total:y.nonnegative(),expectedTotal:y.nonnegative(),classification:u(["earned","spend"])}).strict(),t({...In,kind:s("reverse"),entry:a,amount:y.positive()}).strict()]),On=t({id:a,completion:r().nullable(),member:a,balance:a,amount:y,kind:u(["award","spend","adjust","reverse"]),effectiveAt:O,receivedAt:O,quest:a.nullable(),original:a.nullable(),reason:r(),actor:r().nullable(),import:a.nullable().optional()}),rd=t({items:c(On),nextCursor:k.nullable(),next:o().nullable()}),nd=t({entry:On,total:y.nonnegative()}),ad=t({member:a,balance:a,total:y.nonnegative(),held:y.nonnegative()}),id=t({actionId:a,member:a,excluded:m(),reason:r().trim().min(1).max(1e3)}).strict(),od=t({leaderboard:a,group:a,generated:m(),boundAt:O.nullable()}),sd=t({actionId:a,group:a,reason:r().trim().min(1).max(1e3)}).strict(),cd=t({actionId:a,member:a,included:m(),reason:r().trim().min(1).max(1e3)}).strict(),Ao=u(["pending","approved"]),Io=t({id:a,leaderboard:a,version:a,title:r(),period:t({start:O,end:O}),ties:u(["shared","earliest"]),status:Ao,total:y.nonnegative(),winners:y.nonnegative(),createdAt:O,approvedAt:O.nullable(),approvedBy:r().nullable(),approvalReason:r().nullable()}),Oo=t({member:a,score:y,rank:y.positive(),position:y.positive(),scoredAt:O,prizes:c(y.nonnegative()),completion:a.nullable(),revokedAt:O.nullable()}),ld=Io.extend({prizes:c(xn),excluded:c(a),rows:c(Oo)}),dd=t({actionId:a,reason:r().trim().min(1).max(500)}).strict(),qt=f([me,L]),q=o().int().safe().nonnegative(),J=r().trim().min(1).max(1e3),Ct=t({id:a,key:a.optional(),title:r().trim().min(1).max(120),enabled:m().default(!0),qualification:g("kind",[t({kind:s("signup")}).strict(),t({kind:s("quest"),quest:a}).strict(),t({kind:s("external")}).strict()]),inviterGroup:a.optional(),rewards:t({inviter:c(qt).max(10).default([]),invitee:c(qt).max(10).default([])}).strict().default({inviter:[],invitee:[]}),milestones:c(t({id:a,count:q.min(1),rewards:c(qt).min(1).max(10)}).strict()).max(30).default([]),bonuses:c(t({id:a,balance:a,basisPoints:q.min(1).max(1e4),quests:c(a).min(1).max(100).optional(),external:m().default(!1),durationDays:q.min(1).max(36500).optional(),maxPoints:q.min(1).optional()}).strict()).max(20).default([])}).strict().superRefine((e,n)=>{for(let i of[e.milestones,e.bonuses])new Set(i.map(l=>l.id)).size!==i.length&&n.addIssue({code:"custom",message:"Rule IDs must be unique"})}),qo=t(Ct.shape).omit({id:!0}).extend({...F,inviterGroup:a.optional()}).strict().superRefine((e,n)=>{for(let i of[e.milestones,e.bonuses])new Set(i.map(l=>l.id)).size!==i.length&&n.addIssue({code:"custom",message:"Rule keys must be unique"})}),md=f([qo,t({code:r().min(1).max(2e6)}).strict()]),ud=t({archivedAt:o().int().nonnegative().nullable().optional(),version:a,definition:Ct,publishedAt:q,actor:r().nullable()}),zd=t({actionId:a,code:a}).strict(),bd=t({actionId:a,suspended:m(),reason:J}).strict(),pd=t({actionId:a,qualified:m(),reason:J}).strict(),gd=t({actionId:a,reason:J}).strict(),fd=g("kind",[t({kind:s("suspend"),actionId:a,member:a,suspended:m(),reason:J}).strict(),t({kind:s("qualify"),actionId:a,member:a,program:a,qualified:m(),reason:J}).strict(),t({kind:s("resolve-reward"),actionId:a,entitlement:a,reason:J}).strict()]),Ro=t({member:a,inviter:a,acceptedAt:q,suspended:m()}),qn=t({id:a,program:a,kind:u(["bonus","fixed","milestone"]),balance:a,earned:q,settled:q,outstanding:q}),vd=t({code:a,attributed:q,programs:c(t({definition:Ct,qualified:q,milestones:c(t({id:a,count:q,reached:m()}))})),accounts:c(qn)}),hd=t({items:c(t({id:q,program:a,balance:a,amount:o().int().safe(),at:q,reason:r()})),nextCursor:k.nullable()}),yd=t({relationships:c(Ro),qualifications:c(t({member:a,program:a,qualified:m(),qualifiedAt:q})),accounts:c(qn.extend({member:a,invitee:r()})),reviews:c(t({entitlement:a,member:a,program:a,reason:r()})),nextCursor:k.nullable().default(null),next:q.nullable()}),Te=o().int().safe().nonnegative(),Rn=me.extend({amount:o().int().positive().max(St)}),Po=t({perMember:o().int().positive().max(1e4)}).strict(),Pn=t({id:a,key:a.optional(),title:r().trim().min(1).max(120),price:Rn,reward:L,stock:Te.max(1e6),limit:Po.default({perMember:1}),enabled:m().default(!0)}).strict(),Cn=Pn.omit({id:!0,title:!0,enabled:!0}).extend({...F,title:r().trim().min(1).max(120).optional()}).strict().transform(e=>({...e,title:e.title??e.reward.reward.title,enabled:!0})),Sd=f([Cn,t({code:r().min(1).max(2e6)}).strict()]),Co=S(g("kind",[t({kind:s("available"),remaining:Te}).strict(),t({kind:s("out-of-stock")}).strict(),t({kind:s("limit-reached")}).strict(),t({kind:s("paused")}).strict()])),jd=S(Pn.extend({revision:o().int().positive(),available:Te,redeemed:Te,availability:Co})),kd=t({actionId:a}).strict(),mn={id:a,offer:a,member:a,reservation:a,price:Rn,reward:L,entitlement:a,revision:o().int().positive(),redeemedAt:o().int().safe().nonnegative()},Eo=S(g("status",[t({...mn,status:s("fulfilled")}).strict(),t({...mn,status:s("canceled"),canceledAt:o().int().safe().nonnegative(),reason:r().min(1).max(500)}).strict()])),xd=z({member:a.optional(),cursor:k.optional(),limit:A.number().int().min(1).max(100).optional()}),wd=t({items:c(Eo),nextCursor:k.nullable()}),Ad=t({actionId:a,revision:o().int().positive(),enabled:m(),reason:r().trim().min(1).max(500)}).strict(),Id=t({actionId:a,revision:o().int().positive(),reason:r().trim().min(1).max(500)}).strict();function Od(e){return ht("offer",Cn.parse(e))}var Pd=t({login:m(),miniApp:m()}),Cd=br.extend({provider:s("telegram")}),To=r().min(1,"Pass the Mini App's Telegram.WebApp.initData").max(8192),Ed=t({initData:To,mode:u(["sign-in","connect"])}).strict(),$o=r().regex(/^-?[1-9][0-9]{0,19}$/,"Use the chat's numeric ID, such as -1001234567890"),Mo=t({id:$o,type:r(),title:r(),username:r().nullable(),status:r(),issue:r().nullable(),connectedAt:o()}),Td=t({configured:m(),bot:t({username:r()}).nullable(),chats:c(Mo)}),$d=t({url:r(),expiresAt:o()}),Md=t({chat:r().regex(/^(-?[1-9][0-9]{0,19}|@[A-Za-z][A-Za-z0-9_]{3,31})$/,"Name a chat the project connected, by its numeric ID or @username")}).strict(),_d=t({userId:r(),username:r().nullable(),status:re(e=>typeof e=="string"),isMember:m(),isAdmin:m(),untilDate:o().nullable()}),Ud="telegram-reactions",Zd=t({chatId:r(),chatType:r(),messageId:o(),reactionType:r(),emoji:r().nullable(),customEmojiId:r().nullable(),reactorStatus:r(),reactorIsAdmin:m()});export{En as a,_o as b,Uo as c,a as d,ur as e,Lo as f,S as g,Nn as h,Qn as i,Do as j,k,No as l,Qo as m,Bo as n,dt as o,br as p,Ho as q,Ko as r,Vo as s,Wo as t,pr as u,gr as v,Bn as w,Go as x,Fo as y,Hn as z,Kn as A,Gn as B,ne as C,vr as D,Jo as E,ia as F,Xo as G,Yo as H,ca as I,la as J,da as K,es as L,xr as M,ts as N,ma as O,wr as P,mt as Q,rs as R,le as S,ns as T,de as U,as as V,Ar as W,ua as X,za as Y,we as Z,Ir as _,ba as $,pa as aa,is as ba,os as ca,Q as da,ss as ea,ga as fa,fa as ga,va as ha,ha as ia,qr as ja,Rr as ka,cs as la,ls as ma,ds as na,ya as oa,Sa as pa,Pr as qa,ja as ra,ms as sa,us as ta,zs as ua,Cr as va,bs as wa,ps as xa,gs as ya,fs as za,vs as Aa,hs as Ba,ys as Ca,Ss as Da,ka as Ea,js as Fa,ks as Ga,xs as Ha,xa as Ia,Tr as Ja,ws as Ka,Ae as La,Z as Ma,wa as Na,Aa as Oa,Ia as Pa,Oa as Qa,$r as Ra,qa as Sa,Ra as Ta,As as Ua,Is as Va,Os as Wa,qs as Xa,Pa as Ya,Mr as Za,oe as _a,Ca as $a,Ur as ab,G as bb,Rs as cb,Ps as db,Cs as eb,Ea as fb,Ta as gb,$a as hb,Es as ib,he as jb,rr as kb,Ma as lb,_a as mb,Ts as nb,Ua as ob,Za as pb,La as qb,Da as rb,$s as sb,Ms as tb,_s as ub,Na as vb,Qa as wb,Ba as xb,Us as yb,ar as zb,Ka as Ab,Wa as Bb,ye as Cb,Fa as Db,zt as Eb,Ja as Fb,Zs as Gb,Ls as Hb,bt as Ib,sr as Jb,Xa as Kb,Ya as Lb,ei as Mb,ti as Nb,Ds as Ob,ri as Pb,Ie as Qb,pt as Rb,Ns as Sb,Qs as Tb,ni as Ub,ai as Vb,ii as Wb,Bs as Xb,Hs as Yb,Ks as Zb,Vs as _b,Ws as $b,Gs as ac,Fs as bc,ot as cc,oi as dc,Js as ec,Xs as fc,Ys as gc,Lr as hc,ec as ic,tc as jc,si as kc,li as lc,Dr as mc,Nr as nc,rc as oc,nc as pc,ac as qc,di as rc,Br as sc,mi as tc,ft as uc,Hr as vc,ic as wc,oc as xc,Kr as yc,st as zc,ui as Ac,zi as Bc,V as Cc,sc as Dc,cc as Ec,lc as Fc,F as Gc,dc as Hc,vt as Ic,ke as Jc,mc as Kc,pi as Lc,Vr as Mc,uc as Nc,gi as Oc,zc as Pc,bc as Qc,ht as Rc,pc as Sc,fi as Tc,cr as Uc,gc as Vc,hi as Wc,fc as Xc,vc as Yc,hc as Zc,yc as _c,Sc as $c,yi as ad,jc as bd,Si as cd,kc as dd,Xr as ed,Yr as fd,en as gd,ji as hd,yt as id,xc as jd,wc as kd,Ac as ld,me as md,jt as nd,Ic as od,L as pd,ki as qd,Oc as rd,xi as sd,qc as td,wi as ud,lt as vd,kt as wd,tn as xd,rn as yd,Rc as zd,Pc as Ad,lr as Bd,dr as Cd,Ii as Dd,xt as Ed,Cc as Fd,Oi as Gd,qi as Hd,wt as Id,se as Jd,Ri as Kd,Pi as Ld,Ci as Md,xe as Nd,nn as Od,Ei as Pd,Ti as Qd,$i as Rd,an as Sd,Mi as Td,_i as Ud,Ec as Vd,Tc as Wd,Ui as Xd,Zi as Yd,$c as Zd,Li as _d,Di as $d,Oe as ae,Mc as be,_c as ce,qe as de,Uc as ee,Bi as fe,Zc as ge,Lc as he,Hi as ie,Ki as je,ce as ke,Vi as le,Dc as me,Nc as ne,Qc as oe,on as pe,Bc as qe,sn as re,Hc as se,Kc as te,Vc as ue,Wc as ve,Fi as we,Ji as xe,Xi as ye,eo as ze,Gc as Ae,Fc as Be,Jc as Ce,Xc as De,Yc as Ee,el as Fe,tl as Ge,rl as He,nl as Ie,to as Je,al as Ke,il as Le,ol as Me,sl as Ne,cl as Oe,ll as Pe,dl as Qe,un as Re,zn as Se,bn as Te,gl as Ue,fl as Ve,vl as We,ro as Xe,hl as Ye,yl as Ze,Sl as _e,Rt as $e,jl as af,no as bf,kl as cf,ao as df,xl as ef,io as ff,oo as gf,wl as hf,Al as if,pn as jf,Il as kf,Ol as lf,gn as mf,Pt as nf,ql as of,Rl as pf,fn as qf,ue as rf,Pl as sf,vn as tf,Cl as uf,El as vf,Tl as wf,co as xf,$l as yf,Ml as zf,_l as Af,Ul as Bf,mo as Cf,Zl as Df,hn as Ef,Ee as Ff,ln as Gf,uo as Hf,It as If,zo as Jf,yn as Kf,po as Lf,Ll as Mf,go as Nf,Dl as Of,fo as Pf,Nl as Qf,Ql as Rf,vo as Sf,Bl as Tf,Hl as Uf,Kl as Vf,Vl as Wf,Wl as Xf,jn as Yf,yo as Zf,xn as _f,So as $f,jo as ag,ko as bg,xo as cg,Gl as dg,wo as eg,Fl as fg,Ot as gg,dn as hg,Jl as ig,Xl as jg,Yl as kg,ed as lg,td as mg,On as ng,rd as og,nd as pg,ad as qg,id as rg,od as sg,sd as tg,cd as ug,Ao as vg,Io as wg,Oo as xg,ld as yg,dd as zg,Ct as Ag,qo as Bg,md as Cg,ud as Dg,zd as Eg,bd as Fg,pd as Gg,gd as Hg,fd as Ig,Ro as Jg,qn as Kg,vd as Lg,hd as Mg,yd as Ng,Rn as Og,Po as Pg,Pn as Qg,Cn as Rg,Sd as Sg,Co as Tg,jd as Ug,kd as Vg,Eo as Wg,xd as Xg,wd as Yg,Ad as Zg,Id as _g,Od as $g,Pd as ah,Cd as bh,To as ch,Ed as dh,$o as eh,Mo as fh,Td as gh,$d as hh,Md as ih,_d as jh,Ud as kh,Zd as lh};
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "format": 1,
3
- "sdkVersion": "1.50.0",
3
+ "sdkVersion": "1.52.0",
4
4
  "zodVersion": "4.3.6",
5
5
  "entries": {
6
6
  "@domino-sdk/relay/authoring": "authoring.js",
@@ -9,10 +9,10 @@
9
9
  },
10
10
  "modules": [
11
11
  "authoring.js",
12
- "chunks/4O3MZT45.js",
12
+ "chunks/AVRVSLHX.js",
13
13
  "chunks/IDOMZWRY.js",
14
14
  "schema.js",
15
15
  "zod.js"
16
16
  ],
17
- "digest": "541823ea3797b510d6e96625e64e727bdc0f34449c9585ec7f5ea6b23c0e1992"
17
+ "digest": "9b2daaa7596d399e903e5a6387a56cc11f8e0cdd4139b54fa4c1baa78acf3f6d"
18
18
  }