@domino-sdk/relay 1.67.0 → 1.69.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 (81) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/dist/{accounts-C2O8mpB8.d.ts → accounts-DD4gAOCe.d.ts} +232 -3
  3. package/dist/{action-9Xl0StBg.d.ts → action-BDFKqGlH.d.ts} +3 -2
  4. package/dist/{attempt-captures-ClHAoo_n.d.ts → attempt-captures-CbuCmthd.d.ts} +11 -2
  5. package/dist/authoring.d.ts +534 -48
  6. package/dist/authoring.js +192 -29
  7. package/dist/{automatic-outcomes-BEnPn4Uh.d.ts → automatic-outcomes-DE3vfi8g.d.ts} +11 -3
  8. package/dist/avatar.d.ts +2 -1
  9. package/dist/browser.d.ts +15 -13
  10. package/dist/browser.js +12 -13
  11. package/dist/{capability-error-CuI_F7yM.d.ts → capability-error-db7kO8-P.d.ts} +2 -1
  12. package/dist/{catalog-CbiftcxQ.d.ts → catalog-Cf3fHDNn.d.ts} +69 -3
  13. package/dist/{chunk-5DZNMLDM.js → chunk-2A3BJ262.js} +2 -2
  14. package/dist/{chunk-BQXRCJ3N.js → chunk-5RLIPTL7.js} +1 -1
  15. package/dist/{chunk-MVQQDPQX.js → chunk-AZDZEQFK.js} +14 -2
  16. package/dist/{chunk-JK3XV2CR.js → chunk-BRROI4CH.js} +50 -8
  17. package/dist/{chunk-P33ZAJMS.js → chunk-CQVKOD3B.js} +1266 -677
  18. package/dist/{chunk-QYC3CZVD.js → chunk-CZ23KRVK.js} +2 -2
  19. package/dist/{chunk-X3FMVRMM.js → chunk-DIXYVGXO.js} +1 -1
  20. package/dist/{chunk-RDUSFUXX.js → chunk-GEVARKEV.js} +9 -1
  21. package/dist/{chunk-2HHZV7U3.js → chunk-LDO5GP7G.js} +1 -1
  22. package/dist/{chunk-Z2Z5DBNW.js → chunk-LGGD7S5T.js} +45 -9
  23. package/dist/{chunk-U66GUVSG.js → chunk-LZXDYSUH.js} +2 -0
  24. package/dist/{chunk-NRMQVK2W.js → chunk-ME2KUAVJ.js} +1 -1
  25. package/dist/{chunk-KUNPCDN6.js → chunk-ODJGTFPY.js} +16 -9
  26. package/dist/{chunk-DSJ46QLB.js → chunk-PO2ZDY27.js} +1 -1
  27. package/dist/{chunk-RWR2LOPA.js → chunk-RKTMSTT7.js} +2 -2
  28. package/dist/{chunk-5SBA6X5X.js → chunk-SWLW4VN3.js} +2 -2
  29. package/dist/{chunk-BMJHFWVT.js → chunk-TCREFRPK.js} +10 -43
  30. package/dist/{chunk-Q5QVAF7R.js → chunk-UGM6DUB2.js} +42 -25
  31. package/dist/chunk-VAGGGB6B.js +87 -0
  32. package/dist/{chunk-FGXLXENM.js → chunk-VNEJH4NT.js} +47 -3
  33. package/dist/chunk-WNEQEDMU.js +427 -0
  34. package/dist/{chunk-Q6KTTVOI.js → chunk-WVK3G2J2.js} +1 -1
  35. package/dist/{client-CZPewB9h.d.ts → client-6eSYOl8h.d.ts} +159 -11
  36. package/dist/{dashboards-jGPM3AxF.d.ts → dashboards-DCOAXL54.d.ts} +6 -5
  37. package/dist/{deployments-BVFd7ddA.d.ts → deployments-BIfdCMd5.d.ts} +911 -309
  38. package/dist/{host-environment-FN4zg3hw.d.ts → host-environment-DUw5-Cvj.d.ts} +2 -1
  39. package/dist/{identity-integration-W1Vo3Ql9.d.ts → identity-integration-BlfOn8rc.d.ts} +3 -2
  40. package/dist/index.d.ts +16 -15
  41. package/dist/index.js +10 -10
  42. package/dist/internal.d.ts +155 -17
  43. package/dist/internal.js +266 -19
  44. package/dist/{limits-C4RzrOV4.d.ts → limits-Ctaeq23J.d.ts} +8 -2
  45. package/dist/{offers-BpYenB9i.d.ts → offers-COqHGbHm.d.ts} +4 -3
  46. package/dist/{participant-activity-DXRq4s6K.d.ts → participant-activity-BznrcePT.d.ts} +2 -1
  47. package/dist/{participant-rewards-BcWkBRn_.d.ts → participant-rewards-s5Gn23qb.d.ts} +23 -1
  48. package/dist/portal-proxy.d.ts +7 -4
  49. package/dist/portal-proxy.js +14 -18
  50. package/dist/profiles-CLDKZVFx.d.ts +370 -0
  51. package/dist/react/index.d.ts +71 -30
  52. package/dist/react/index.js +12 -13
  53. package/dist/{request-error-D_dUPLwo.d.ts → request-error-C24SY7n9.d.ts} +2 -1
  54. package/dist/{reward-deliveries-BOWpMytr.d.ts → reward-deliveries-DFhYGJdx.d.ts} +3 -2
  55. package/dist/runtime/authoring.js +1 -1
  56. package/dist/runtime/chunks/HKAI5OQA.js +1 -0
  57. package/dist/runtime/manifest.json +3 -3
  58. package/dist/runtime/schema.js +1 -1
  59. package/dist/schema.d.ts +556 -180
  60. package/dist/schema.js +70 -8
  61. package/dist/server/index.d.ts +15 -14
  62. package/dist/server/index.js +2053 -893
  63. package/dist/{sign-in-providers-BRYVOSlG.d.ts → sign-in-providers-C97mRNbG.d.ts} +4 -3
  64. package/dist/solana.d.ts +287 -0
  65. package/dist/solana.js +699 -0
  66. package/dist/{streaks-0YuipsUQ.d.ts → streaks-MAqKHbHC.d.ts} +2 -1
  67. package/dist/{submission-input-C152xIdn.d.ts → submission-input-BD7nORuh.d.ts} +4 -3
  68. package/dist/{telegram-browser-657QqiQl.d.ts → telegram-browser-gRMgGs7B.d.ts} +8 -109
  69. package/dist/telegram.d.ts +14 -12
  70. package/dist/telegram.js +2 -2
  71. package/dist/testing.d.ts +99 -18
  72. package/dist/testing.js +101 -11
  73. package/dist/{tracker-data-BqY-9Vu-.d.ts → tracker-data-DQgX3FIc.d.ts} +493 -1
  74. package/dist/{transport-CthYgZXK.d.ts → transport-BLU8jrhg.d.ts} +7340 -2134
  75. package/dist/vite.d.ts +2 -1
  76. package/dist/{wallet-Btng186v.d.ts → wallet-CPAjrW4k.d.ts} +339 -308
  77. package/dist/wallet-browser-BzPt_Qb5.d.ts +107 -0
  78. package/package.json +21 -3
  79. package/dist/chunk-UWUS4OOV.js +0 -59
  80. package/dist/chunk-UYVJZR33.js +0 -34
  81. package/dist/runtime/chunks/C2MGLQXC.js +0 -1
@@ -1,23 +1,32 @@
1
- import { B as Badge, c as MemberBadges, O as Offer, f as Redemption } from '../offers-BpYenB9i.js';
2
- import { b as ParticipantSession, R as RelayEvent, P as ParticipantActivity, M as MemberSummary } from '../participant-activity-DXRq4s6K.js';
3
- import { g as RelayError, R as RelayClient, m as SubmissionDraft } from '../client-CZPewB9h.js';
4
- import { P as Page, u as RewardDeliveryAction, e as CreatorAccountProvider, K as KnownConsentChannel, M as MemberConsent, n as QuestOutcomeQuery, l as QuestOutcome } from '../reward-deliveries-BOWpMytr.js';
5
- export { C as ConsentChannel, b as ConsentSource, c as ConsentState, d as CreatorAccount, f as CreatorAccounts, g as KnownConsentSource, h as KnownConsentState } from '../reward-deliveries-BOWpMytr.js';
1
+ import { Badge, MemberBadges, Offer, Redemption } from '../index.js';
2
+ import { ParticipantSession, RelayEvent, ParticipantActivity, MemberSummary } from '../index.js';
3
+ import { R as RelayClient } from '../client-6eSYOl8h.js';
4
+ import { RelayError, SubmissionDraft } from '../index.js';
5
+ import { P as Page, e as CreatorAccountProvider, K as KnownConsentChannel, M as MemberConsent } from '../reward-deliveries-DFhYGJdx.js';
6
+ import { QuestOutcomeQuery, QuestOutcome } from '../index.js';
7
+ import { RewardDeliveryAction } from '../schema.js';
8
+ export { C as ConsentChannel, b as ConsentSource, c as ConsentState, d as CreatorAccount, f as CreatorAccounts, g as KnownConsentSource, h as KnownConsentState } from '../reward-deliveries-DFhYGJdx.js';
6
9
  import * as react from 'react';
7
10
  import { ReactNode } from 'react';
8
11
  import * as z from 'zod';
9
12
  import { z as z$1 } from 'zod';
10
- import { l as collectionViewSchema, b as QuestView } from '../catalog-CbiftcxQ.js';
11
- import { E as Entitlement, b as AttemptStatus, V as AttemptCodeSource, c as AuthProvider, J as SignInProvider, A as AccountConnection, I as SignInAccountStatus, p as LeaderboardPlacement, dN as referralSummarySchema, o as LeaderboardPage, u as PointEntry, t as PointBalances, y as PointLedgerReference, U as TieredRewardReference } from '../accounts-C2O8mpB8.js';
12
- export { S as SignInAccount, N as SignInProviderOption } from '../accounts-C2O8mpB8.js';
13
- import { c as SignInMethods, C as CosmosChains, d as SignInOption, P as ProviderSignInOption, f as SignInUnavailable, T as TelegramSignInOption, g as SignInWallet, D as DiscoveredWallet } from '../telegram-browser-657QqiQl.js';
14
- export { a as EmailSignInOption, O as OAuthSignInOption, b as SignInIcon, W as WalletSignInOption, t as telegramMiniAppInitData } from '../telegram-browser-657QqiQl.js';
15
- import { m as WalletSigner, k as WalletSignInNetwork, L as LinkedWallet, g as ProfileUpdate, f as ProfileSummary, b as ProfileCompletion, e as ProfileReferral } from '../wallet-Btng186v.js';
16
- export { T as TelegramAccountConnection, a as TelegramSignInMethods } from '../submission-input-C152xIdn.js';
17
- import '../tracker-data-BqY-9Vu-.js';
18
- import '../request-error-D_dUPLwo.js';
19
- import '../action-9Xl0StBg.js';
20
- import '../sign-in-providers-BRYVOSlG.js';
13
+ import { QuestView } from '../index.js';
14
+ import { collectionViewSchema } from '../schema.js';
15
+ import { J as SignInProvider } from '../accounts-DD4gAOCe.js';
16
+ import { Entitlement, AttemptStatus, AuthProvider, AccountConnection, SignInAccountStatus, LeaderboardPlacement, LeaderboardPage, PointEntry, PointBalances, PointLedgerReference, TieredRewardReference } from '../index.js';
17
+ import { AttemptCodeSource, referralSummarySchema } from '../schema.js';
18
+ export { S as SignInAccount, N as SignInProviderOption } from '../accounts-DD4gAOCe.js';
19
+ import { b as SignInMethods, c as SignInOption, P as ProviderSignInOption, e as SignInUnavailable, T as TelegramSignInOption } from '../telegram-browser-gRMgGs7B.js';
20
+ export { E as EmailSignInOption, O as OAuthSignInOption, a as SignInIcon, W as WalletSignInOption, t as telegramMiniAppInitData } from '../telegram-browser-gRMgGs7B.js';
21
+ import { WalletSigner, WalletSignInNetwork, LinkedWallet, WalletProofKind } from '../index.js';
22
+ import { C as CosmosChains, S as SignInWallet, D as DiscoveredWallet } from '../wallet-browser-BzPt_Qb5.js';
23
+ export { T as TelegramAccountConnection, a as TelegramSignInMethods } from '../submission-input-BD7nORuh.js';
24
+ import { ProfileReferral } from '../authoring.js';
25
+ import { ProfileUpdate, ProfileSummary, ProfileCompletion } from '../index.js';
26
+ import '../tracker-data-DQgX3FIc.js';
27
+ import '../request-error-C24SY7n9.js';
28
+ import '../action-BDFKqGlH.js';
29
+ import '../sign-in-providers-C97mRNbG.js';
21
30
 
22
31
  /**
23
32
  * A query's identity: plain JSON values, outermost group first, such as
@@ -432,6 +441,7 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
432
441
  [x: string]: unknown;
433
442
  kind: string;
434
443
  };
444
+ key?: string | null | undefined;
435
445
  };
436
446
  earnedTier: string;
437
447
  tier: string;
@@ -458,6 +468,7 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
458
468
  [x: string]: unknown;
459
469
  kind: string;
460
470
  };
471
+ key?: string | null | undefined;
461
472
  };
462
473
  earnedTier: string;
463
474
  tier: string;
@@ -486,6 +497,7 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
486
497
  [x: string]: unknown;
487
498
  kind: string;
488
499
  };
500
+ key?: string | null | undefined;
489
501
  };
490
502
  earnedTier: string;
491
503
  tier: string;
@@ -520,6 +532,7 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
520
532
  [x: string]: unknown;
521
533
  kind: string;
522
534
  };
535
+ key?: string | null | undefined;
523
536
  };
524
537
  earnedTier: string;
525
538
  tier: string;
@@ -558,6 +571,7 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
558
571
  [x: string]: unknown;
559
572
  kind: string;
560
573
  };
574
+ key?: string | null | undefined;
561
575
  };
562
576
  earnedTier: string;
563
577
  tier: string;
@@ -618,6 +632,7 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
618
632
  [x: string]: unknown;
619
633
  kind: string;
620
634
  };
635
+ key?: string | null | undefined;
621
636
  };
622
637
  earnedTier: string;
623
638
  tier: string;
@@ -644,6 +659,7 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
644
659
  [x: string]: unknown;
645
660
  kind: string;
646
661
  };
662
+ key?: string | null | undefined;
647
663
  };
648
664
  earnedTier: string;
649
665
  tier: string;
@@ -672,6 +688,7 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
672
688
  [x: string]: unknown;
673
689
  kind: string;
674
690
  };
691
+ key?: string | null | undefined;
675
692
  };
676
693
  earnedTier: string;
677
694
  tier: string;
@@ -706,6 +723,7 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
706
723
  [x: string]: unknown;
707
724
  kind: string;
708
725
  };
726
+ key?: string | null | undefined;
709
727
  };
710
728
  earnedTier: string;
711
729
  tier: string;
@@ -744,6 +762,7 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
744
762
  [x: string]: unknown;
745
763
  kind: string;
746
764
  };
765
+ key?: string | null | undefined;
747
766
  };
748
767
  earnedTier: string;
749
768
  tier: string;
@@ -874,7 +893,7 @@ declare function useQuest(observed: QuestView): {
874
893
  imageAlt?: string | undefined;
875
894
  requirements?: ({
876
895
  kind: "account";
877
- provider: "discord" | "x" | "google" | "apple";
896
+ provider: "discord" | "google" | "apple" | "x";
878
897
  } | {
879
898
  kind: "wallet";
880
899
  chain?: "solana" | "eip155" | "cosmos" | undefined;
@@ -898,7 +917,7 @@ declare function useQuest(observed: QuestView): {
898
917
  } | undefined;
899
918
  } | undefined;
900
919
  };
901
- connections: ("discord" | "x" | "google" | "apple")[];
920
+ connections: ("discord" | "google" | "apple" | "x")[];
902
921
  trigger: {
903
922
  kind: "manual";
904
923
  input: "text";
@@ -963,7 +982,7 @@ declare function useQuest(observed: QuestView): {
963
982
  equals: string | number | boolean;
964
983
  })[] | undefined;
965
984
  enrollment?: "none" | "required" | undefined;
966
- since?: "activation" | "window" | "enrollment" | undefined;
985
+ since?: "window" | "activation" | "enrollment" | undefined;
967
986
  historical?: "staff" | "claim" | "automatic" | undefined;
968
987
  content?: true | undefined;
969
988
  } | undefined;
@@ -1000,7 +1019,7 @@ declare function useQuest(observed: QuestView): {
1000
1019
  })[];
1001
1020
  } | {
1002
1021
  kind: "blocked";
1003
- reason: "paused" | "outside-window" | "budget-exhausted" | "enrollment-required" | "connection-required" | "wallet-required";
1022
+ reason: "outside-window" | "enrollment-required" | "budget-exhausted" | "paused" | "connection-required" | "wallet-required";
1004
1023
  window?: "quest" | "tracker" | undefined;
1005
1024
  resetsAt?: number | undefined;
1006
1025
  } | {
@@ -1165,6 +1184,13 @@ declare function useQuest(observed: QuestView): {
1165
1184
  release?: string | undefined;
1166
1185
  } | undefined;
1167
1186
  codeSource?: AttemptCodeSource | null | undefined;
1187
+ action?: {
1188
+ kind: (string & {}) | "solana-transaction";
1189
+ chain: string;
1190
+ signature: string;
1191
+ wallet: string;
1192
+ reference: string | null;
1193
+ } | null | undefined;
1168
1194
  } | null;
1169
1195
  release: string;
1170
1196
  interaction: "url" | "text" | "staff" | "claim" | "automatic" | "quiz" | "photo";
@@ -1320,7 +1346,7 @@ declare function useQuestAction(observed: QuestView): {
1320
1346
  imageAlt?: string | undefined;
1321
1347
  requirements?: ({
1322
1348
  kind: "account";
1323
- provider: "discord" | "x" | "google" | "apple";
1349
+ provider: "discord" | "google" | "apple" | "x";
1324
1350
  } | {
1325
1351
  kind: "wallet";
1326
1352
  chain?: "solana" | "eip155" | "cosmos" | undefined;
@@ -1344,7 +1370,7 @@ declare function useQuestAction(observed: QuestView): {
1344
1370
  } | undefined;
1345
1371
  } | undefined;
1346
1372
  };
1347
- connections: ("discord" | "x" | "google" | "apple")[];
1373
+ connections: ("discord" | "google" | "apple" | "x")[];
1348
1374
  trigger: {
1349
1375
  kind: "manual";
1350
1376
  input: "text";
@@ -1409,7 +1435,7 @@ declare function useQuestAction(observed: QuestView): {
1409
1435
  equals: string | number | boolean;
1410
1436
  })[] | undefined;
1411
1437
  enrollment?: "none" | "required" | undefined;
1412
- since?: "activation" | "window" | "enrollment" | undefined;
1438
+ since?: "window" | "activation" | "enrollment" | undefined;
1413
1439
  historical?: "staff" | "claim" | "automatic" | undefined;
1414
1440
  content?: true | undefined;
1415
1441
  } | undefined;
@@ -1446,7 +1472,7 @@ declare function useQuestAction(observed: QuestView): {
1446
1472
  })[];
1447
1473
  } | {
1448
1474
  kind: "blocked";
1449
- reason: "paused" | "outside-window" | "budget-exhausted" | "enrollment-required" | "connection-required" | "wallet-required";
1475
+ reason: "outside-window" | "enrollment-required" | "budget-exhausted" | "paused" | "connection-required" | "wallet-required";
1450
1476
  window?: "quest" | "tracker" | undefined;
1451
1477
  resetsAt?: number | undefined;
1452
1478
  } | {
@@ -1611,6 +1637,13 @@ declare function useQuestAction(observed: QuestView): {
1611
1637
  release?: string | undefined;
1612
1638
  } | undefined;
1613
1639
  codeSource?: AttemptCodeSource | null | undefined;
1640
+ action?: {
1641
+ kind: (string & {}) | "solana-transaction";
1642
+ chain: string;
1643
+ signature: string;
1644
+ wallet: string;
1645
+ reference: string | null;
1646
+ } | null | undefined;
1614
1647
  } | null;
1615
1648
  release: string;
1616
1649
  interaction: "url" | "text" | "staff" | "claim" | "automatic" | "quiz" | "photo";
@@ -2048,7 +2081,7 @@ declare function useAccounts(): {
2048
2081
  isConnected: (provider: AuthProvider) => boolean;
2049
2082
  status: "ready";
2050
2083
  data: {
2051
- provider: "discord" | "x" | "google" | "apple";
2084
+ provider: "discord" | "google" | "apple" | "x";
2052
2085
  configured: boolean;
2053
2086
  status: "disconnected" | "connected" | "reconnect";
2054
2087
  subject: string | null;
@@ -2358,6 +2391,8 @@ declare function useWallets(): {
2358
2391
  revision: number;
2359
2392
  signIn: boolean;
2360
2393
  provedOn?: `eip155:${number}` | undefined;
2394
+ provedBy?: WalletProofKind | undefined;
2395
+ proofTransaction?: string | undefined;
2361
2396
  }[];
2362
2397
  error: RelayError | null;
2363
2398
  refresh(): Promise<void>;
@@ -2464,7 +2499,7 @@ declare function useMyProfile(): {
2464
2499
  seed: string;
2465
2500
  } | {
2466
2501
  source: "account";
2467
- provider: "discord" | "x" | "google";
2502
+ provider: "discord" | "google" | "x";
2468
2503
  url: string;
2469
2504
  seed: string;
2470
2505
  } | {
@@ -2472,17 +2507,22 @@ declare function useMyProfile(): {
2472
2507
  seed: string;
2473
2508
  };
2474
2509
  displayName: string | null;
2475
- avatarChoice: "default" | "account" | "generated" | "upload";
2476
- avatarProvider: "discord" | "x" | "google" | null;
2510
+ avatarChoice: "default" | "account" | "upload" | "generated";
2511
+ avatarProvider: "discord" | "google" | "x" | null;
2477
2512
  hidden: boolean;
2478
2513
  locked: boolean;
2479
2514
  visibility: "public" | "private" | "participants";
2480
2515
  options: {
2481
- provider: "discord" | "x" | "google";
2516
+ provider: "discord" | "google" | "x";
2482
2517
  name: string | null;
2483
2518
  givenName: string | null;
2484
2519
  imageUrl: string | null;
2485
2520
  }[];
2521
+ nameSource?: string | null | undefined;
2522
+ nameOptions?: {
2523
+ source: string;
2524
+ name: string;
2525
+ }[] | undefined;
2486
2526
  };
2487
2527
  error: RelayError | null;
2488
2528
  refresh(): Promise<void>;
@@ -2728,4 +2768,5 @@ declare function usePointLedgers(): Query<PointLedgerReference[]>;
2728
2768
  */
2729
2769
  declare function useTieredRewards(): Query<TieredRewardReference[]>;
2730
2770
 
2731
- export { type Collection, CosmosChains, CreatorAccountProvider, DiscoveredWallet, type ExperienceData, type Invitation, KnownConsentChannel, type KnownQuestStatusCode, type KnownRoleDeliveryStatus, MemberConsent, type MemberPagedQuery, type MemberQuery, type MemberQueryOptions, type MemberSnapshot, type Mutation, type MutationContext, type MutationOptions, type MutationStatus, type OAuthProvider, Page, type PageLoader, type PageRead, type PagedQuery, ProviderSignInOption, type Query, type QueryContext, type QueryKey, type QueryOptions, type QueryRead, type QuerySnapshot, type QuestActionState, type QuestInput, type QuestNotice, type QuestStatus, type QuestStatusCode, type QuestStatusText, type QuestTone, type ReferralSummary, type RelayActionResult, RelayClient, type RelayPolling, RelayProvider, type RelayQueryOptions, type RoleDelivery, type RoleDeliveryStatus, type SavedSubmission, SignInMethods, SignInOption, SignInProvider, SignInUnavailable, SignInWallet, TelegramSignInOption, canRepeat, canSubmit, captureReferralCode, completionCountText, isAutomatic, isConnected, isCoolingDown, isFinished, progressOf, questActionState, questGroups, questStatus, questStatusText, relayKeys, roleDeliveryLabel, roleDeliveryStatus, useAccount, useAccounts, useActivity, useBadgeCatalog, useBadges, useBalances, useConsent, useCreatorAccounts, useDeliveries, useEntitlements, useExperience, useInvalidate, useInvitation, useLeaderboard, useLeaderboardHistory, useLeaderboardPlacement, useMe, useMemberPages, useMemberQuery, useMyProfile, useOffers, usePointHistory, usePointLedgers, useProfile, useProfileBadges, useProfileCompletions, useProfileReferral, useQuest, useQuestAction, useQuestOutcomes, useRedeemOffer, useReferralSummary, useRelay, useRelayAction, useRelayMutation, useRelayPages, useRelayQuery, useSession, useSetQueryData, useSignIn, useSignInMethods, useSignInOptions, useSignInWallets, useSignOut, useTelegramAccount, useTieredRewards, useWalletDiscovery, useWallets };
2771
+ export { CosmosChains, CreatorAccountProvider, DiscoveredWallet, KnownConsentChannel, MemberConsent, Page, ProviderSignInOption, RelayClient, RelayProvider, SignInMethods, SignInOption, SignInProvider, SignInUnavailable, SignInWallet, TelegramSignInOption, canRepeat, canSubmit, captureReferralCode, completionCountText, isAutomatic, isConnected, isCoolingDown, isFinished, progressOf, questActionState, questGroups, questStatus, questStatusText, relayKeys, roleDeliveryLabel, roleDeliveryStatus, useAccount, useAccounts, useActivity, useBadgeCatalog, useBadges, useBalances, useConsent, useCreatorAccounts, useDeliveries, useEntitlements, useExperience, useInvalidate, useInvitation, useLeaderboard, useLeaderboardHistory, useLeaderboardPlacement, useMe, useMemberPages, useMemberQuery, useMyProfile, useOffers, usePointHistory, usePointLedgers, useProfile, useProfileBadges, useProfileCompletions, useProfileReferral, useQuest, useQuestAction, useQuestOutcomes, useRedeemOffer, useReferralSummary, useRelay, useRelayAction, useRelayMutation, useRelayPages, useRelayQuery, useSession, useSetQueryData, useSignIn, useSignInMethods, useSignInOptions, useSignInWallets, useSignOut, useTelegramAccount, useTieredRewards, useWalletDiscovery, useWallets };
2772
+ export type { Collection, ExperienceData, Invitation, KnownQuestStatusCode, KnownRoleDeliveryStatus, MemberPagedQuery, MemberQuery, MemberQueryOptions, MemberSnapshot, Mutation, MutationContext, MutationOptions, MutationStatus, OAuthProvider, PageLoader, PageRead, PagedQuery, Query, QueryContext, QueryKey, QueryOptions, QueryRead, QuerySnapshot, QuestActionState, QuestInput, QuestNotice, QuestStatus, QuestStatusCode, QuestStatusText, QuestTone, ReferralSummary, RelayActionResult, RelayPolling, RelayQueryOptions, RoleDelivery, RoleDeliveryStatus, SavedSubmission };
@@ -8,25 +8,24 @@ import {
8
8
  discoverSolanaWallets,
9
9
  readSignInMethods,
10
10
  signInOptionsFrom
11
- } from "../chunk-BMJHFWVT.js";
11
+ } from "../chunk-TCREFRPK.js";
12
12
  import {
13
13
  telegramMiniAppInitData
14
14
  } from "../chunk-FWLQ5XCS.js";
15
- import "../chunk-Z2Z5DBNW.js";
15
+ import "../chunk-LGGD7S5T.js";
16
16
  import {
17
17
  createRelayAction
18
- } from "../chunk-BQXRCJ3N.js";
19
- import "../chunk-2HHZV7U3.js";
20
- import "../chunk-UYVJZR33.js";
21
- import "../chunk-UWUS4OOV.js";
22
- import "../chunk-Q6KTTVOI.js";
23
- import "../chunk-5SBA6X5X.js";
24
- import "../chunk-NRMQVK2W.js";
18
+ } from "../chunk-5RLIPTL7.js";
19
+ import "../chunk-LDO5GP7G.js";
20
+ import "../chunk-VAGGGB6B.js";
21
+ import "../chunk-WVK3G2J2.js";
22
+ import "../chunk-SWLW4VN3.js";
23
+ import "../chunk-ME2KUAVJ.js";
25
24
  import {
26
25
  sessionMember
27
- } from "../chunk-DSJ46QLB.js";
28
- import "../chunk-5DZNMLDM.js";
29
- import "../chunk-P33ZAJMS.js";
26
+ } from "../chunk-PO2ZDY27.js";
27
+ import "../chunk-2A3BJ262.js";
28
+ import "../chunk-CQVKOD3B.js";
30
29
  import {
31
30
  RelayError,
32
31
  RelayErrorCode,
@@ -34,7 +33,7 @@ import {
34
33
  clientError,
35
34
  isRelayError,
36
35
  isRequestError
37
- } from "../chunk-FGXLXENM.js";
36
+ } from "../chunk-VNEJH4NT.js";
38
37
 
39
38
  // src/react/context.ts
40
39
  import { createContext, useContext } from "react";
@@ -64,4 +64,5 @@ declare class RequestError extends Error {
64
64
  constructor(message: string, details: RequestErrorDetails);
65
65
  }
66
66
 
67
- export { RequestError as R, type RequestErrorDetails as a, type RequestErrorKind as b, type RequestRecovery as c, isRequestError as i };
67
+ export { RequestError as R, isRequestError as i };
68
+ export type { RequestErrorDetails as a, RequestErrorKind as b, RequestRecovery as c };
@@ -1,5 +1,5 @@
1
1
  import * as z from 'zod';
2
- import { T as TrackerSkipCode, S as SkipEnrollment } from './tracker-data-BqY-9Vu-.js';
2
+ import { T as TrackerSkipCode, S as SkipEnrollment } from './tracker-data-DQgX3FIc.js';
3
3
 
4
4
  /**
5
5
  * The longest wording Relay stores: a checkbox label with a link to the policy fits.
@@ -779,4 +779,5 @@ declare const discordRoleRewardsSchema: z.ZodObject<{
779
779
  }, z.core.$strip>;
780
780
  type DiscordRoleReward = z.infer<typeof discordRoleRewardSchema>;
781
781
 
782
- export { memberConsentHistorySchema as $, type RewardDelivery as A, consentInputSchema as B, type ConsentChannel as C, type DiscordRoleReward as D, consentWordingMaxLength as E, contentMetricSchema as F, contentMetricsSchema as G, contentPerformancePolicySchema as H, contentQualificationDecisionSchema as I, contentQualificationPageSchema as J, type KnownConsentChannel as K, contentQualificationSchema as L, type MemberConsent as M, creatorAccountProviderSchema as N, creatorAccountSchema as O, type Page as P, type QuestClaimInput as Q, type ResponseResult as R, creatorAccountsSchema as S, discordRoleRewardSchema as T, type UnsupportedResponse as U, discordRoleRewardsSchema as V, knownConsentChannels as W, knownCreatorAccountProviders as X, knownRewardDeliverySchema as Y, managementStateQuerySchema as Z, memberConsentHistoryQuerySchema as _, type ConsentInput as a, memberConsentInputSchema as a0, memberConsentListSchema as a1, memberConsentSchema as a2, memberEnrollmentInputSchema as a3, pageCursorSchema as a4, pageQuerySchema as a5, questClaimInputSchema as a6, questEnrollmentInputSchema as a7, questEnrollmentSchema as a8, questOutcomePageSchema as a9, questOutcomeQuerySchema as aa, questOutcomeSchema as ab, responseListSchema as ac, responseSchema as ad, responseShape as ae, rewardDeliveriesSchema as af, rewardDeliveryQuerySchema as ag, rewardDeliverySchema as ah, roleReconciliationSchema as ai, type ConsentSource as b, type ConsentState as c, type CreatorAccount as d, type CreatorAccountProvider as e, type CreatorAccounts as f, type KnownConsentSource as g, type KnownConsentState as h, type PageQuery as i, type QuestEnrollment as j, type QuestEnrollmentInput as k, type QuestOutcome as l, type QuestOutcomePage as m, type QuestOutcomeQuery as n, QuestOutcomeState as o, paginate as p, type ResponseSchema as q, type RewardDeliveryQuery as r, type RewardDeliveryPage as s, contentQualificationQuerySchema as t, RewardDeliveryAction as u, type ContentMetric as v, type ContentPerformancePolicy as w, type ManagementStateQuery as x, type MemberConsentHistory as y, type MemberEnrollmentInput as z };
782
+ export { memberConsentHistorySchema as $, consentInputSchema as B, consentWordingMaxLength as E, contentMetricSchema as F, contentMetricsSchema as G, contentPerformancePolicySchema as H, contentQualificationDecisionSchema as I, contentQualificationPageSchema as J, contentQualificationSchema as L, creatorAccountProviderSchema as N, creatorAccountSchema as O, creatorAccountsSchema as S, discordRoleRewardSchema as T, discordRoleRewardsSchema as V, knownConsentChannels as W, knownCreatorAccountProviders as X, knownRewardDeliverySchema as Y, managementStateQuerySchema as Z, memberConsentHistoryQuerySchema as _, memberConsentInputSchema as a0, memberConsentListSchema as a1, memberConsentSchema as a2, memberEnrollmentInputSchema as a3, pageCursorSchema as a4, pageQuerySchema as a5, questClaimInputSchema as a6, questEnrollmentInputSchema as a7, questEnrollmentSchema as a8, questOutcomePageSchema as a9, questOutcomeQuerySchema as aa, questOutcomeSchema as ab, responseListSchema as ac, responseSchema as ad, responseShape as ae, rewardDeliveriesSchema as af, rewardDeliveryQuerySchema as ag, rewardDeliverySchema as ah, roleReconciliationSchema as ai, QuestOutcomeState as o, paginate as p, contentQualificationQuerySchema as t, RewardDeliveryAction as u };
783
+ export type { RewardDelivery as A, ConsentChannel as C, DiscordRoleReward as D, KnownConsentChannel as K, MemberConsent as M, Page as P, QuestClaimInput as Q, ResponseResult as R, UnsupportedResponse as U, ConsentInput as a, ConsentSource as b, ConsentState as c, CreatorAccount as d, CreatorAccountProvider as e, CreatorAccounts as f, KnownConsentSource as g, KnownConsentState as h, PageQuery as i, QuestEnrollment as j, QuestEnrollmentInput as k, QuestOutcome as l, QuestOutcomePage as m, QuestOutcomeQuery as n, ResponseSchema as q, RewardDeliveryQuery as r, RewardDeliveryPage as s, ContentMetric as v, ContentPerformancePolicy as w, ManagementStateQuery as x, MemberConsentHistory as y, MemberEnrollmentInput as z };
@@ -1 +1 @@
1
- import{$ as ue,$h as vt,Aa as he,Ad as Fe,Bb as Ae,Bd as Ge,Ca as Nt,Cb as K,Cd as _e,Da as Kt,Db as Re,Dd as He,Ea as pe,Ed as Je,Gb as Le,H as re,Ha as Qt,He as _t,Hi as St,I as ne,Ia as ke,Ie as Ht,J as ae,Ja as Ut,Je as Jt,K as oe,Ka as Vt,Kc as De,Ke as at,L as se,Le as ot,Ma as we,Nc as Pe,Nd as V,Ne as st,Od as I,Pa as Wt,Pe as ct,Qa as Zt,Rd as W,Re as it,Sc as Ie,Sd as Z,Sh as Xt,Ta as ve,Td as Xe,Th as ht,Ua as ye,Uh as pt,Va as be,Vh as kt,Wa as Se,Wc as Oe,Wd as Ye,Wh as wt,Xa as Ee,Xd as et,Xh as Yt,Y as ce,Ya as qe,Yd as tt,Z as ie,Zd as E,Zh as er,_ as Pt,_d as rt,a as q,af as F,ai as yt,b as D,ba as It,bb as A,bd as Ne,bi as _,ca as de,cb as Ce,ce as C,cf as R,d as te,db as xe,dd as Ke,ea as le,eb as Me,fe as Ft,ff as ut,ga as me,ih as gt,ma as fe,me as b,nd as Qe,ne as nt,nf as G,od as Ue,oe as x,pf as dt,qc as Q,qe as Gt,rc as Te,rd as Ve,rg as mt,ri as bt,sb as $e,sc as U,sd as We,tb as ze,tc as Be,xb as je,xf as lt,ya as ge,yb as P,yd as Ze,yg as ft,za as Ot}from"./chunks/C2MGLQXC.js";import{Cb as $,Ec as j,Kb as X,Pd as Dt,fc as Y,ic as N,jc as ee,va as J,wc as B}from"./chunks/EWU4OKSY.js";function Et(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function tr(e,r){Et(r);let t=/^(\d+)(?:\.(\d+))?$/.exec(e.trim());if(!t)throw new Error(`Use a decimal amount such as "1.5", not "${e}"`);let[,n,a=""]=t,c=a.replace(/0+$/,"");if(c.length>r)throw new Error(`"${e}" has more than ${r} decimal places, which this token cannot hold`);return BigInt(n+c.padEnd(r,"0"))}function rr(e,r){Et(r);let t=typeof e=="bigint"?e:BigInt(e),n=t<0n?"-":"",a=(t<0n?-t:t).toString().padStart(r+1,"0"),c=a.slice(0,a.length-r),i=a.slice(a.length-r).replace(/0+$/,"");return n+c+(i?"."+i:"")}function Ct(e,r={}){let{trigger:t,completion:n,requires:a,performance:c,retryCooldownMs:i,completionCooldownMs:u,authorBudgets:d=[]}=e,s=t.kind==="automatic"?t.tracker:void 0,m=s?.content===!0;if(c&&!m)throw new Error("Performance requires a content quest");if(!s&&d.length)throw new Error('A budget with scope "author" counts per tracker record author: use it only on a quest with a tracker trigger');if(m){if(n.kind!=="keyed"||n.across)throw new Error("Content quests complete once per content item");if(s.beneficiary!=="author"||s.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&&(t.kind!=="manual"||t.actor==="staff"))throw new Error("A retry cooldown applies only to quests members submit themselves");if(u!==void 0){if(t.kind!=="manual"||t.actor==="staff")throw new Error("A completion cooldown applies only to quests members submit themselves");if(n.kind==="once")throw new Error("A completion cooldown needs a quest members can complete more than once: this one completes once per member")}if(t.kind==="automatic"&&!s){if(!r.template&&a.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 nr=["author"],ar=["author","messageAuthor"];function xt(e){if(!Le(e))return[];switch(e.kind){case"x-search":return $e;case"discord-messages":return nr;case"discord-reactions":return ar;case"custom":return["author",...e.accounts??[]]}}var qt=new Map;function or(e){let r=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,t=qt.get(r);return t||(t=A(r==="messages-text"?Se:r==="discord-messages"?be:Ee),qt.set(r,t)),t}function Mt(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return or(e);case"custom":return e.data}}function jt(e,r){let t=typeof e=="object"&&e!==null&&"kind"in e&&e.kind==="tier"&&"reward"in e&&typeof e.reward=="object"&&e.reward!==null?e.reward:null;return t&&"badge"in t&&t.badge!==void 0?`Badge rewards can only be granted by quests or manually, not by ${r}`:t&&"group"in t&&t.group!==void 0?`Group membership rewards can only be granted by quests, not by ${r}`:null}function H(e,r,t,n){for(let[a,c]of r.entries()){let i=jt(c,n);i&&e.addIssue({code:"custom",message:i,path:[...t,a]})}}function Tr(e){return b("badge",q("Badge",te,e))}function Br(e){return b("ledger",q("Point ledger",ft,e))}function Dr(e){let{target:r,ledger:t,...n}=e,a=vt.parse({...n,qualifiedBy:e.qualifiedBy.key,balance:x(t)}),c=B(j(e.metrics),_.shape.target);return{key:a.key,describe:()=>a,score(i){let u=yt.parse(i);return _.parse({target:r({metrics:c.parse(u.metrics)}),baseline:r({metrics:c.parse(u.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 De.strict().parse({kind:"streak",...e})},Pr=e=>Te.brand().parse({kind:"count",count:e}),Ir=(e,r={})=>U.brand().parse({kind:"calendar",period:e,...r}),Or=({days:e})=>U.brand().parse({kind:"rolling",durationMs:e*864e5}),Nr=e=>({kind:"quest",quest:e}),ir=St.superRefine((e,r)=>{let t=jt(e.reward,"offers");t&&r.addIssue({code:"custom",message:t,path:["reward"]})});function Kr(e){return b("offer",q("Offer",ir,e))}var ur=bt.superRefine((e,r)=>{for(let t of["inviter","invitee"])H(r,e.rewards[t],["rewards",t],"referral programs");for(let[t,n]of e.milestones.entries())H(r,n.rewards,["milestones",t,"rewards"],"referral programs")});function Qr(e){let{qualification:r,inviterGroup:t,milestones:n,bonuses:a,...c}=e,i=q("Referral",ur,{...c,qualification:r.kind==="quest"?{kind:"quest",quest:r.quest.key}:r,...t?{inviterGroup:D.parse(t.key)}:{},milestones:n?.map(({key:u,...d})=>({...d,id:C({key:u,...d})})),bonuses:a?.map(({key:u,ledger:d,quests:s,...m})=>({...m,id:C({key:u,...m}),balance:x(d),quests:s?.map(y=>y.key)}))});return b("referral",i)}function Ur(e={}){return{kind:"earned",...e}}var dr=gt.superRefine((e,r)=>{for(let[t,n]of(e.settle?.prizes??[]).entries())H(r,n.rewards,["settle","prizes",t,"rewards"],"leaderboard prizes")});function lr(e){let r=e.ties??"shared";return!e.settle||e.settle.ties===r?null:`Leaderboard${e.key?` "${e.key}"`:""} orders equal scores "${r}" in its live standings${e.ties===void 0?" (ties left out)":""} but "${e.settle.ties}" when it settles, so the ranks members see are not the ranks prizes pay. Set ties: "${e.settle.ties}" beside settle.ties to show the order prizes pay.`}function Vr(e){let{ledger:r,group:t,score:n,settle:a,...c}=e,i=a?.pool,u=q("Leaderboard",dr,{...c,...a?{settle:{...a,prizes:a.prizes??[],...i?{pool:{...i,...i.ledger===void 0?{}:{ledger:x(i.ledger)}}}:{}}}:{},balance:x(r),...t?{group:D.parse(t.key)}:{},score:n?.kind==="earned"?{...n,quests:n.quests?.map(s=>s.key)}:n}),d=lr(u);return d&&console.warn(d),b("leaderboard",u)}var Wr={provider:"x",search:e=>je.parse({kind:"x-search",...e})};function L(e,r){let{data:t,content:n,...a}=r??{};if(n!==void 0){if(t!==void 0)throw new Error(`customSource("${e}") takes data or content, not both: a content source's records carry { body, metrics }`);if(!$t(n.body))throw new Error(`customSource("${e}") needs a content body schema: customSource(namespace, { content: { body: z.object({ ... }), metrics: ["likes"] } })`);let c=[...n.metrics??[]];for(let i of c)ze.parse(i);return P.parse({kind:"custom",namespace:e,...a,data:A(N({body:n.body,metrics:ee(Object.fromEntries(c.map(i=>[i,$().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!$t(t))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return P.parse({kind:"custom",namespace:e,...a,data:A(t)})}function $t(e){return typeof e=="object"&&e!==null&&"_zod"in e}function Zr(e){return b("tracker",q("Tracker",Re,e))}function mr(e={}){return ve.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function fr(){return ye.parse({kind:"discord-reactions"})}var Fr={provider:"discord",grantRole:e=>qe.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),postMessage(e){return Ge.parse({provider:"discord",action:"post-message",...e})},messages:mr,reactions:fr,roles(e={}){return I.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return I.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"],...e.postable?{postable:!0}:{}})}},Gr={postMessage(e){return Fe.parse({provider:"telegram",action:"post-message",...e})},messages(){return L(ne,{identities:["member"],data:ie})},reactions(){return L(re,{identities:["member"],accounts:["messageAuthor"],data:ce})}},_r={shorts(){return L(ae,{identities:["member"],content:{body:ht,metrics:pt}})}},Hr={videos(){return L(oe,{identities:["member"],content:{body:kt,metrics:wt}})}};function gr(e){let{chain:r,token:t}=e,n=t===void 0?null:t;if(n!==null&&typeof n!="string")throw new Error("wallet.balances() takes the token as a string");if(r==="solana"||typeof r=="string"&&me(r)){if(n!==null&&!ue.safeParse(n).success)throw new Error("wallet.balances() on Solana takes an SPL or Token-2022 mint address (base58)");return{chain:r==="solana"?le:r,token:n}}if(typeof r=="string"&&fe(r)){if(n!==null&&!/^0x[0-9a-fA-F]{40}$/.test(n))throw new Error("wallet.balances() on an EVM chain takes an ERC-20 contract address: 0x and 40 hex digits");return{chain:r,token:n}}if(typeof r=="string"&&/^cosmos:[-_a-zA-Z0-9]{1,32}$/.test(r)){if(n===null||!de.safeParse(n).success)throw new Error("wallet.balances() on a Cosmos chain takes a bank denomination such as uatom");return{chain:r,token:n}}throw new Error('wallet.balances() reads "solana", an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"')}var Jr={balances(e){let r=gr(e),t=L(se,{identities:["wallet"],data:ge});return P.parse({...t,balance:r})}},Xr=()=>({provider:"domino",resource:"point-ledger"});function p(e,r){return r}var Yr={pointLedger(e){let r={...e,kind:"point-ledger",default:e.default?D.parse(e.default.key):""};return p("point-ledger",nt.prefault(r.default).meta(r))},datetime(e){let r={...e,kind:"datetime",default:W.parse(e.default)};return p("datetime",W.default(r.default).meta(r))},resource(e){let r={...e,source:I.parse(e.source),kind:"resource",default:Z.parse(e.default??"")};return p("resource",Z.default(r.default).meta(r))},quiz(e){let r=V.parse(e.default);return p("quiz",V.default(r).meta({...e,default:r,kind:"quiz"}))},text(e){let{secret:r,...t}=e,n={...t,kind:"text",default:"default"in e?e.default:"",minLength:e.minLength??(r?0:1),maxLength:e.maxLength??2e3,multiline:e.multiline??!1,...r?{secret:r}:{}};return p("text",E(n).default(n.default).meta(n))},telegramChat(e){let r={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return p("text",J().max(r.maxLength).default(r.default).meta(r))},amount(e){if(!Ye(e.default))throw new Error(`settings.amount() takes a base-unit integer string as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:100,multiline:!1,picker:"amount"};return p("text",E(r).default(r.default).meta(r))},chain(e){if(!et(e.default))throw new Error(`settings.chain() takes "solana", a Solana cluster ID or an EVM chain ID such as "eip155:8453" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:64,multiline:!1,picker:"chain"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},nft(e){if(!he(e.default))throw new Error(`settings.nft() takes an NFT collection such as "eip155:1/erc721:0x\u2026" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:200,multiline:!1,picker:"nft"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},contractCall(e){if(!pe(e.default))throw new Error(`settings.contractCall() takes a contract call such as "eip155:8453:0x\u2026 function stakedOf(address) view returns (uint256)" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:400,multiline:!1,picker:"contract-call"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},contractEvent(e){if(!ke(e.default))throw new Error(`settings.contractEvent() takes a contract event such as "eip155:1:0x\u2026 Transfer(address indexed from, address indexed to, uint256 value)" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:1e3,multiline:!1,picker:"contract-event"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},solanaProgram(e){if(!we(e.default))throw new Error(`settings.solanaProgram() takes a Solana program address such as "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:32,maxLength:44,multiline:!1,picker:"solana-program"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},integer(e){return p("integer",$().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return p("boolean",X().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return p("choice",j(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return N(e).strict()}};function At(e,r){let t=e.balanceChanges.find(n=>n.mint===r);return t?BigInt(t.delta):0n}function tn(e,r){let t=At(e,r);return t>0n?t.toString():"0"}function rn(e,r){let t=At(e,r);return t<0n?(-t).toString():"0"}function nn(e,r={}){let t=e.balanceChanges.filter(a=>BigInt(a.delta)>0n),n=e.balanceChanges.filter(a=>BigInt(a.delta)<0n);return t.some(a=>(r.into===void 0||a.mint===r.into)&&n.some(c=>c.mint!==a.mint&&(r.from===void 0||c.mint===r.from)))}function an(e,r){return e.programs.includes(r)}function on(e,r){return e.instructions?.find(t=>t.name===r)?.args??null}var sn=e=>ct(e.key,e.name),cn=e=>it(e.key,e.title),un=(e,r)=>at.parse({kind:"points",balance:x(e),amount:r}),dn={text:(e={})=>({input:"text",constraints:He.parse(e)}),url:(e={})=>({input:"url",constraints:Je.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function ln(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 Rt=new WeakMap,Lt=new WeakMap;function Tt(e,r){let{tracker:t,beneficiary:n="author",on:a,where:c,enrollment:i,since:u,historical:d,content:s}=e;if(!t?.source)throw new Error(r==="automatic"?"automatic() takes no argument, or { tracker } with a tracker handle from defineTracker":"content() takes { tracker } with a tracker handle from defineTracker");let{source:m}=t;if(!Ae(m))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(s&&!K(m))throw new Error(`content() needs a tracker whose source has content: x.search(), or customSource(namespace, { content: { body, metrics } }). Tracker "${t.key}" has none; use automatic({ tracker }) instead.`);if(u==="enrollment"&&i!=="required")throw new Error(`${r}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let y=xt(m);if(!y.includes(n))throw new Error(m.kind==="custom"?`Tracker "${t.key}" has no "${n}" account: declare it in customSource(namespace, { accounts: ["${n}"] })`:`Tracker "${t.key}" pays ${new Intl.ListFormat("en",{type:"disjunction"}).format(y.map(w=>`"${w}"`))}, not "${n}"`);let T=Oe.parse({tracker:t.key,source:m.kind,on:s?"new-record":a??Pe(m.kind,m.kind==="custom"?m.namespace:void 0),...c?{where:c}:{},beneficiary:n,...i==="required"?{enrollment:i}:{},...u&&u!=="activation"?{since:u}:{},...d&&d!==(s?"claim":"staff")?{historical:d}:{},...s?{content:s}:{}}),o=Mt(m),l=o?Me(o,T.where):null;if(l)throw new Error(l);let g={kind:"automatic",tracker:T};o&&Rt.set(g,o);let S=K(m);return S&&Lt.set(g,S.metrics),g}function mn(e){return e?Tt(e,"automatic"):{kind:"automatic"}}function fn(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 Tt({...e,content:!0},"content")}function hr(e){let{key:r,cost:t,...n}=e,a={...n,id:C(e),cost:typeof t=="number"?t:{balance:x(t.ledger)}};return n.scope==="author"?Ue.parse(a):Qe.parse(a)}var gn=hr,pr=(e=[])=>e.filter(r=>r.scope==="author"),kr=(e,r={})=>({kind:"keyed",key:e,...r.across?{across:r.across}:{}}),wr=e=>{let{distinct:r,...t}=e;return{...Be.parse({kind:"progress",window:{kind:"lifetime"},...t}),distinct:r}},hn=()=>({kind:"untracked"}),pn=()=>({kind:"staff-handover"}),kn=()=>({kind:"automatic"});function wn(e){let{key:r,tiers:t,...n}=e,a=C(e),c=ot.parse({id:a,...n,tiers:t.map(({key:i,...u})=>({...u,id:C({key:i,...u})}))});return b("tiered-reward",{key:c.id,tier:i=>st.parse({kind:"tier",reward:c,tier:i})})}var vr=()=>({kind:"once"});function yr(e={}){return{kind:"accept",...e}}function br(e){return{kind:"review",...e}}var M={accept:yr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:br};function zt(e){let r=e.kind==="reject"&&e.code!==void 0?Ke(e.code):null;if(r)throw new Error(r)}var vn={quiz(e,r={}){let t=lt.parse(e),n=Object.keys(t),a=$().int().min(1).max(n.length).parse(r.minimumCorrect??n.length);return async({input:c})=>{let i=Object.keys(c.answers).length===n.length&&n.every(d=>Object.hasOwn(c.answers,d)),u=n.filter(d=>c.answers[d]===t[d]).length;return i&&u>=a?M.accept():M.reject({reason:"Review your answers and try again."})}},photo(e){return async r=>{let t=e(r),n=await r.review.photo({image:r.input.photo,criteria:t.criteria});return n.kind==="unclear"?t.unclear==="human-review"?M.review({reason:n.reason}):M.reject({reason:n.reason}):n.kind==="pass"?M.accept():M.reject({reason:n.reason})}}},Sr={once:vr,keyed:kr,streak:cr,progress:wr};function Bt(e){return function(t){let n=C(t),a=[...new Set((t.integrations??[]).map(o=>We.parse(o.provider)))],c=a.flatMap(o=>{let l=Ve.safeParse(o);return l.success?[l.data]:[]}),i=t.trigger.kind==="automatic"&&t.trigger.tracker?.content===!0,u=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0,d=t.completion,s=typeof d=="function"?d(Sr):d;if(i&&s!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!i&&s===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");let m=pr(t.budgets);if(Ct({trigger:t.trigger,completion:s??{kind:"keyed"},requires:t.requires??[],authorBudgets:m,performance:t.performance?Q.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs}):void 0,...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs}},{template:e}),t.retryCooldownMs!==void 0&&!F.safeParse(t.retryCooldownMs).success)throw new Error("retryCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.completionCooldownMs!==void 0&&!F.safeParse(t.completionCooldownMs).success)throw new Error("completionCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.performance){let o=Lt.get(t.trigger)??[],l=t.performance.metrics.filter(g=>!o.includes(g));if(l.length)throw new Error(`The tracker's source does not measure ${l.join(", ")}`)}if(t.trigger.kind==="manual"&&t.trigger.input!=="none"&&!t.evaluate)throw new Error("Evidence quests require an evaluator");let y=Object.fromEntries(Object.entries(t.settings.shape).map(([o,l])=>{let g=Xe.safeParse(l.meta());if(!g.success)throw new Error(`Setting "${o}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);if(g.data.kind==="text"&&g.data.secret&&g.data.default!=="")throw new Error(`Secret setting "${o}" must default to "": set its value in Console, not in source or deploy settings`);return[o,g.data]}));for(let o of Ie(t.trigger.kind==="automatic"?t.trigger.tracker?.where:void 0))if(!tt(y[o]))throw new Error(`The tracker filter compares with setting "${o}", which is not an integer or amount setting`);function T(o){let l=t.settings.parse(o),g=rt(y,l),S=ut.parse(typeof t.rewards=="function"?t.rewards({settings:l}):t.rewards),w=Y(_e).max(3,"A quest posts at most three announcements").parse((typeof t.announcements=="function"?t.announcements({settings:l}):t.announcements)??[]),z=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0;for(let f of w){let v=Ze(f.text),O="segments"in v&&v.segments.some(k=>k.kind==="placeholder"&&k.name==="author");if(!z&&O)throw new Error("An announcement names {author} only on a quest with an automatic tracker trigger");if(!z&&f.replyToTriggeringMessage)throw new Error("An announcement replies to the triggering message only on a quest with an automatic tracker trigger")}let h=[...S.flatMap(f=>f.kind==="integration"?[f.provider]:[]),...w.flatMap(f=>f.provider==="discord"?["discord"]:[]),...Object.values(y).flatMap(f=>f.kind==="resource"&&f.source.provider!=="domino"?[f.source.provider]:[])];for(let f of h)if(!c.includes(f))throw new Error(`Declare the ${f} integration on this quest`);return dt.parse({quest:n,evaluatorProtocol:G,title:typeof t.title=="function"?t.title({settings:l}):t.title,presentation:t.presentation?.({settings:l})??{},fields:y,values:g,rewards:S,...w.length?{announcements:w}:{},humanReview:t.review?.({settings:l})?.enabled??!0,trigger:t.trigger,...t.performance?{performance:Q.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs})}:{},integrations:c,...a.length>c.length?{integrationModules:a}:{},completion:s?s.kind==="progress"?{kind:s.kind,goal:s.goal,window:s.window,repeat:s.repeat}:s.kind==="streak"?s:s.kind==="keyed"&&s.across?{kind:s.kind,across:s.across}:{kind:s.kind}:{kind:"keyed"},visibility:t.visibility??"visible",profile:t.profile??{visible:!1},budgets:(t.budgets??[]).filter(f=>f.scope!=="author"),...m.length?{authorBudgets:m}:{},requires:t.requires??[],...t.campaign?{campaign:t.campaign}:{},...t.availability?{availability:t.availability}:{},...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs}})}return b("quest",{protocol:G,key:n,describe:T,async evaluate(o){let l=t.settings.parse(o.settings),g=u?Ne.parse(o.tracker):null,S=Rt.get(t.trigger),w=g&&S?Ce(S,g.record.data):null;if(w)return R.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${w.path} ${w.reason}`});let z=g;if(o.performance){if(!t.performance)throw new Error("Quest has no performance evaluator");let v=mt.parse(o.performance),O=B(j(t.performance.metrics),$().int().safe().nonnegative()).parse(v.metrics),k=await t.performance.evaluate({settings:l,member:o.member,tracker:z,metrics:O,observedAt:v.observedAt});if(!k)throw new Error("Performance evaluator returned no decision");if(k.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 zt(k),R.parse(k.kind==="accept"?{kind:"accept",rewards:v.rewards}:k.kind==="review"&&o.humanReview?{kind:"review",reason:k.reason,rewards:v.rewards}:{kind:"reject",reason:k.reason,...k.kind==="review"?{requestedReview:!0}:k.code===void 0?{}:{code:k.code}})}let h=t.evaluate?await t.evaluate({settings:l,member:o.member,input:o.input,tracker:z,eligibleAt:o.eligibleAt,calendar:o.calendar,now:o.now,review:o.review,trackers:xe(o.trackers),wallet:o.wallet,images:o.images,...o.telegram?{telegram:o.telegram}:{},...Object.fromEntries(c.map(v=>[v,o[v]]))}):M.accept();if(!h)throw new Error("Evaluator returned no decision");if(zt(h),h.kind==="review"&&!o.humanReview)return R.parse({kind:"reject",reason:h.reason,requestedReview:!0});(h.kind==="accept"||h.kind==="review")&&h.completionKey!==void 0&&s?.kind!=="keyed"&&o.diagnose?.({code:"completion-key-ignored",message:Er(s,h.completionKey)});let f={...o,settings:l,tracker:g};return R.parse(h.kind==="accept"||h.kind==="review"?{...h,rewards:h.rewards??o.rewards,...s?.kind==="keyed"||s?.kind==="progress"?{completionKey:s.kind==="progress"?s.distinct(f):h.completionKey??s.key(f)}:{}}:h)}})}}function Er(e,r){let t=`ignores completionKey ${JSON.stringify(r)}`;switch(e?.kind){case void 0:return`A content quest completes once per content item, under a key Relay sets, so it ${t}`;case"once":return`once() completes the quest once per member and ${t}: use keyed(...) to complete it once per key`;case"streak":return`streak(...) keys its own completions and ${t}`;case"progress":return`progress(...) keys each contribution with its distinct(...) and ${t}: derive the key in distinct(...)`}}var yn=Bt(!1),bn=Bt(!0);export{er as CapabilityError,mn as automatic,kn as automaticFulfillment,sn as badge,Ht as balanceAtLeast,gn as budget,Ir as calendar,Yt as capabilityErrorCodes,_t as completed,fn as content,de as cosmosDenomSchema,It as cosmosNetworkSchema,Pr as count,L as customSource,M as decision,Tr as defineBadge,Ft as defineCampaign,Xt as defineDashboard,Dr as defineEngagementReward,Gt as defineGroup,Vr as defineLeaderboard,Br as defineLedger,Kr as defineOffer,yn as defineQuest,bn as defineQuestType,Qr as defineReferral,wn as defineTieredReward,Zr as defineTracker,Fr as discord,Ur as earned,vn as evaluators,dn as evidence,rr as formatUnits,cn as groupMembership,Jt as inGroup,on as instruction,an as invoked,pe as isContractCall,ke as isContractEvent,fe as isEvmChainId,he as isNftCollection,we as isSolanaProgram,kr as keyed,lr as leaderboardTiesWarning,Pt as limits,ln as manual,Ut as maxWalletEventLogs,Vt as maxWalletEventLookback,Zt as maxWalletTransactionLookback,Wt as maxWalletTransactions,vr as once,Kt as parseContractCall,Qt as parseContractEvent,Nt as parseContractFunction,Ot as parseNftCollection,tr as parseUnits,Xr as pointLedgers,un as points,wr as progress,Nr as questCompleted,tn as received,Or as rolling,Yr as settings,rn as spent,pn as staffHandover,cr as streak,nn as swapped,Gr as telegram,Hr as tiktok,A as trackerDataSchema,Ne as trackerTriggerContextSchema,hn as untracked,Jr as wallet,Wr as x,_r as youtube,Dt as z};
1
+ import{$a as dr,Ce as kt,Ci as kr,De as vt,Di as Pt,Ee as yt,Ei as Lt,Fe as E,Fi as Bt,Gd as at,Ge as bt,Gi as Dt,Hi as vr,Ia as Ce,Id as nt,If as ee,J as de,Ja as Ae,Ji as yr,K as me,Ka as or,Ke as x,Kf as D,L as ge,La as V,Lb as Fe,Li as Nt,M as fe,Mb as Qe,Mi as It,N as he,Na as xe,Ne as gr,Nf as $t,Ni as re,O as pe,Oa as sr,P as we,Pa as cr,Q as ke,Qa as $e,Qb as Ue,R as ve,Sb as We,Sd as ot,Ta as ir,Tb as Ze,Td as st,Th as Tt,Ua as Me,Ub as Ve,Ue as y,Va as ur,Vb as S,Vc as _,Ve as St,Vf as te,Wa as lr,Wc as Je,Wd as ct,We as $,Xc as H,Xd as it,Xf as Mt,Ya as ze,Yb as Ge,Yc as Ye,Ye as fr,Zb as G,Zg as Rt,_b as _e,a as A,ab as mr,b as oe,bc as He,be as ut,bj as Ot,c as T,ca as ye,d as Q,da as be,de as lt,dg as zt,ea as ar,ee as dt,eh as jt,f as le,fa as Se,fe as mt,ge as gt,ha as nr,hb as Re,he as ft,ia as Ee,ib as je,ka as L,kb as Te,lb as Pe,ma as Z,mb as Le,nb as Be,nd as Xe,nf as hr,ob as De,of as pr,pb as Ne,pf as wr,qd as et,qe as J,qf as Et,re as ht,rf as qt,rj as Kt,sa as qe,se as pt,tf as Ct,ub as B,ue as U,vb as Ie,vd as tt,vf as At,wb as Oe,xb as Ke,xe as Y,xf as xt,ye as X,zd as rt,ze as wt}from"./chunks/HKAI5OQA.js";import{Cb as R,Ec as P,Kb as ce,Pd as rr,fc as ie,ic as W,jc as ue,va as se,wc as F}from"./chunks/EWU4OKSY.js";function Ft(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function br(e,r){Ft(r);let t=/^(\d+)(?:\.(\d+))?$/.exec(e.trim());if(!t)throw new Error(`Use a decimal amount such as "1.5", not "${e}"`);let[,a,n=""]=t,c=n.replace(/0+$/,"");if(c.length>r)throw new Error(`"${e}" has more than ${r} decimal places, which this token cannot hold`);return BigInt(a+c.padEnd(r,"0"))}function Sr(e,r){Ft(r);let t=typeof e=="bigint"?e:BigInt(e),a=t<0n?"-":"",n=(t<0n?-t:t).toString().padStart(r+1,"0"),c=n.slice(0,n.length-r),i=n.slice(n.length-r).replace(/0+$/,"");return a+c+(i?"."+i:"")}function Ut(e,r={}){let{trigger:t,completion:a,requires:n,performance:c,retryCooldownMs:i,completionCooldownMs:u,authorBudgets:l=[],stations:h}=e,s=t.kind==="automatic"?t.tracker:void 0,k=s?.content===!0;if(c&&!k)throw new Error("Performance requires a content quest");if(!s&&l.length)throw new Error('A budget with scope "author" counts per tracker record author: use it only on a quest with a tracker trigger');if(k){if(a.kind!=="keyed"||a.across)throw new Error("Content quests complete once per content item");if(s.beneficiary!=="author"||s.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&&(t.kind!=="manual"||t.actor==="staff"))throw new Error("A retry cooldown applies only to quests members submit themselves");if(u!==void 0){if(t.kind!=="manual"||t.actor==="staff")throw new Error("A completion cooldown applies only to quests members submit themselves");if(a.kind==="once")throw new Error("A completion cooldown needs a quest members can complete more than once: this one completes once per member")}if(h&&r.template)throw new Error("Reusable quest types cannot declare check-in stations: declare them on a quest written in code");if(h&&!ht(t))throw new Error("Stations are for quests a signed Solana transaction completes: a member-submitted manual() quest without input");if(t.kind==="automatic"&&!s){if(!r.template&&n.length===0)throw new Error("Automatic quests need at least one prerequisite");if(a.kind!=="once")throw new Error("Prerequisite-only automatic quests complete once")}}var Er=["author"],qr=["author","messageAuthor"];function Wt(e){if(!He(e))return[];switch(e.kind){case"x-search":return Fe;case"discord-messages":return Er;case"discord-reactions":return qr;case"custom":return["author",...e.accounts??[]]}}var Qt=new Map;function Cr(e){let r=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,t=Qt.get(r);return t||(t=B(r==="messages-text"?Be:r==="discord-messages"?Le:De),Qt.set(r,t)),t}function Zt(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return Cr(e);case"custom":return e.data}}function _t(e,r){let t=typeof e=="object"&&e!==null&&"kind"in e&&e.kind==="tier"&&"reward"in e&&typeof e.reward=="object"&&e.reward!==null?e.reward:null;return t&&"badge"in t&&t.badge!==void 0?`Badge rewards can only be granted by quests or manually, not by ${r}`:t&&"group"in t&&t.group!==void 0?`Group membership rewards can only be granted by quests, not by ${r}`:null}function ae(e,r,t,a){for(let[n,c]of r.entries()){let i=_t(c,a);i&&e.addIssue({code:"custom",message:i,path:[...t,n]})}}function ta(e){return y("badge",A("Badge",le,e))}function ra(e){return y("ledger",A("Point ledger",jt,e))}function aa(e){let{target:r,ledger:t,...a}=e,n=Nt.parse({...a,qualifiedBy:e.qualifiedBy.key,balance:$(t)}),c=F(P(e.metrics),re.shape.target);return{key:n.key,describe:()=>n,score(i){let u=It.parse(i);return re.parse({target:r({metrics:c.parse(u.metrics)}),baseline:r({metrics:c.parse(u.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 Xe.strict().parse({kind:"streak",...e})},na=e=>Je.brand().parse({kind:"count",count:e}),oa=(e,r={})=>H.brand().parse({kind:"calendar",period:e,...r}),sa=({days:e})=>H.brand().parse({kind:"rolling",durationMs:e*864e5}),ca=e=>({kind:"quest",quest:e}),$r=Kt.superRefine((e,r)=>{let t=_t(e.reward,"offers");t&&r.addIssue({code:"custom",message:t,path:["reward"]})});function ia(e){return y("offer",A("Offer",$r,e))}var Mr=Ot.superRefine((e,r)=>{for(let t of["inviter","invitee"])ae(r,e.rewards[t],["rewards",t],"referral programs");for(let[t,a]of e.milestones.entries())ae(r,a.rewards,["milestones",t,"rewards"],"referral programs")});function ua(e){let{qualification:r,inviterGroup:t,milestones:a,bonuses:n,...c}=e,i=A("Referral",Mr,{...c,qualification:r.kind==="quest"?{kind:"quest",quest:r.quest.key}:r,...t?{inviterGroup:Q.parse(t.key)}:{},milestones:a?.map(({key:u,...l})=>({...l,id:x({key:u,...l})})),bonuses:n?.map(({key:u,ledger:l,quests:h,...s})=>({...s,id:x({key:u,...s}),balance:$(l),quests:h?.map(k=>k.key)}))});return y("referral",i)}function la(e={}){return{kind:"earned",...e}}var zr=Tt.superRefine((e,r)=>{for(let[t,a]of(e.settle?.prizes??[]).entries())ae(r,a.rewards,["settle","prizes",t,"rewards"],"leaderboard prizes")});function Rr(e){let r=e.ties??"shared";return!e.settle||e.settle.ties===r?null:`Leaderboard${e.key?` "${e.key}"`:""} orders equal scores "${r}" in its live standings${e.ties===void 0?" (ties left out)":""} but "${e.settle.ties}" when it settles, so the ranks members see are not the ranks prizes pay. Set ties: "${e.settle.ties}" beside settle.ties to show the order prizes pay.`}function da(e){let{ledger:r,group:t,score:a,settle:n,...c}=e,i=n?.pool,u=A("Leaderboard",zr,{...c,...n?{settle:{...n,prizes:n.prizes??[],...i?{pool:{...i,...i.ledger===void 0?{}:{ledger:$(i.ledger)}}}:{}}}:{},balance:$(r),...t?{group:Q.parse(t.key)}:{},score:a?.kind==="earned"?{...a,quests:a.quests?.map(h=>h.key)}:a}),l=Rr(u);return l&&console.warn(l),y("leaderboard",u)}var ma={provider:"x",search:e=>Ve.parse({kind:"x-search",...e})};function b(e,r){let{data:t,content:a,...n}=r??{};if(a!==void 0){if(t!==void 0)throw new Error(`customSource("${e}") takes data or content, not both: a content source's records carry { body, metrics }`);if(!Vt(a.body))throw new Error(`customSource("${e}") needs a content body schema: customSource(namespace, { content: { body: z.object({ ... }), metrics: ["likes"] } })`);let c=[...a.metrics??[]];for(let i of c)Qe.parse(i);return S.parse({kind:"custom",namespace:e,...n,data:B(W({body:a.body,metrics:ue(Object.fromEntries(c.map(i=>[i,R().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!Vt(t))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return S.parse({kind:"custom",namespace:e,...n,data:B(t)})}function Vt(e){return typeof e=="object"&&e!==null&&"_zod"in e}function ga(e){return y("tracker",A("Tracker",_e,e))}function jr(e={}){return Te.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function Tr(){return Pe.parse({kind:"discord-reactions"})}var fa={provider:"discord",grantRole:e=>Ne.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),postMessage(e){return dt.parse({provider:"discord",action:"post-message",...e})},messages:jr,reactions:Tr,roles(e={}){return U.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return U.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"],...e.postable?{postable:!0}:{}})}},ha={postMessage(e){return lt.parse({provider:"telegram",action:"post-message",...e})},messages(){return b(me,{identities:["member"],data:be})},reactions(){return b(de,{identities:["member"],accounts:["messageAuthor"],data:ye})}},pa={shorts(){return b(ge,{identities:["member"],content:{body:Pt,metrics:Lt}})}},wa={videos(){return b(fe,{identities:["member"],content:{body:Bt,metrics:Dt}})}};function Pr(e){let{chain:r,token:t}=e,a=t===void 0?null:t;if(a!==null&&typeof a!="string")throw new Error("wallet.balances() takes the token as a string");if(r==="solana"||typeof r=="string"&&Z(r)){if(a!==null&&!Se.safeParse(a).success)throw new Error("wallet.balances() on Solana takes an SPL or Token-2022 mint address (base58)");return{chain:r==="solana"?L:r,token:a}}if(typeof r=="string"&&qe(r)){if(a!==null&&!/^0x[0-9a-fA-F]{40}$/.test(a))throw new Error("wallet.balances() on an EVM chain takes an ERC-20 contract address: 0x and 40 hex digits");return{chain:r,token:a}}if(typeof r=="string"&&/^cosmos:[-_a-zA-Z0-9]{1,32}$/.test(r)){if(a===null||!Ee.safeParse(a).success)throw new Error("wallet.balances() on a Cosmos chain takes a bank denomination such as uatom");return{chain:r,token:a}}throw new Error('wallet.balances() reads "solana", an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"')}function Lr(e){let{chain:r="solana",program:t,instruction:a,mint:n,minAmount:c,signer:i="wallet"}=e;if(r!=="solana"&&!(typeof r=="string"&&Z(r)))throw new Error('wallet.programActivity() reads "solana" (mainnet) or Solana devnet, solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1');if(i!=="wallet"&&i!=="any")throw new Error('wallet.programActivity() takes signer "wallet" or "any"');let u=Ue.safeParse({chain:r==="solana"?L:r,program:t,instruction:a??null,mint:n??null,minAmount:c??null,anySigner:i==="any"});if(!u.success){let l=u.error.issues[0];throw new Error(`wallet.programActivity()${l.path.length?` ${l.path.join(".")}`:""}: ${l.message}`)}return u.data}var ka={balances(e){let r=Pr(e),t=b(he,{identities:["wallet"],data:Ce});return S.parse({...t,balance:r})},programActivity(e){let r=Lr(e),t=b(pe,{identities:["wallet"],data:Ae});return S.parse({...t,activity:r})},nfts(e){let{collection:r}=e;if(typeof r!="string"||!V(r))throw new Error('wallet.nfts() takes an NFT collection such as "eip155:1/erc721:0x\u2026", "eip155:8453/erc1155:0x\u2026/1" or "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/nft:<collection mint>"');let t=b(we,{identities:["wallet"],data:xe}),a={collection:r};return S.parse({...t,nfts:a})},stake(e={}){let{chain:r="solana",voteAccount:t}=e,a=We.safeParse({chain:r==="solana"?L:r,voteAccount:t??null});if(!a.success)throw new Error(`wallet.stake() ${a.error.issues[0].path.join(".")}: ${a.error.issues[0].message}`);let n=b(ke,{identities:["wallet"],data:Re});return S.parse({...n,stake:a.data})},programAccounts(e){let{chain:r="solana",idl:t,...a}=e,n=Ze.safeParse({...a,chain:r==="solana"?L:r,...t===void 0?{}:{idl:{program:a.program,source:"pasted",idl:t}}});if(!n.success)throw new Error(`wallet.programAccounts() ${n.error.issues[0].path.join(".")}: ${n.error.issues[0].message}`);let c=b(ve,{identities:["wallet"],data:je});return S.parse({...c,programAccount:n.data})}},va=()=>({provider:"domino",resource:"point-ledger"});function p(e,r){return r}var ya={pointLedger(e){let r={...e,kind:"point-ledger",default:e.default?Q.parse(e.default.key):""};return p("point-ledger",St.prefault(r.default).meta(r))},datetime(e){let r={...e,kind:"datetime",default:Y.parse(e.default)};return p("datetime",Y.default(r.default).meta(r))},resource(e){let r={...e,source:U.parse(e.source),kind:"resource",default:X.parse(e.default??"")};return p("resource",X.default(r.default).meta(r))},quiz(e){let r=J.parse(e.default);return p("quiz",J.default(r).meta({...e,default:r,kind:"quiz"}))},text(e){let{secret:r,...t}=e,a={...t,kind:"text",default:"default"in e?e.default:"",minLength:e.minLength??(r?0:1),maxLength:e.maxLength??2e3,multiline:e.multiline??!1,...r?{secret:r}:{}};return p("text",E(a).default(a.default).meta(a))},telegramChat(e){let r={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return p("text",se().max(r.maxLength).default(r.default).meta(r))},amount(e){if(!kt(e.default))throw new Error(`settings.amount() takes a base-unit integer string as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:100,multiline:!1,picker:"amount"};return p("text",E(r).default(r.default).meta(r))},chain(e){if(!vt(e.default))throw new Error(`settings.chain() takes "solana", a Solana cluster ID or an EVM chain ID such as "eip155:8453" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:64,multiline:!1,picker:"chain"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},nft(e){if(!V(e.default))throw new Error(`settings.nft() takes an NFT collection such as "eip155:1/erc721:0x\u2026" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:200,multiline:!1,picker:"nft"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},contractCall(e){if(!$e(e.default))throw new Error(`settings.contractCall() takes a contract call such as "eip155:8453:0x\u2026 function stakedOf(address) view returns (uint256)" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:400,multiline:!1,picker:"contract-call"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},contractEvent(e){if(!Me(e.default))throw new Error(`settings.contractEvent() takes a contract event such as "eip155:1:0x\u2026 Transfer(address indexed from, address indexed to, uint256 value)" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:1e3,multiline:!1,picker:"contract-event"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},solanaProgram(e){if(!ze(e.default))throw new Error(`settings.solanaProgram() takes a Solana program address such as "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:32,maxLength:44,multiline:!1,picker:"solana-program"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},integer(e){return p("integer",R().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return p("boolean",ce().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return p("choice",P(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return W(e).strict()}};function Ht(e,r){let t=e.balanceChanges.find(a=>a.mint===r);return t?BigInt(t.delta):0n}function Sa(e,r){let t=Ht(e,r);return t>0n?t.toString():"0"}function Ea(e,r){let t=Ht(e,r);return t<0n?(-t).toString():"0"}function qa(e,r={}){let t=e.balanceChanges.filter(n=>BigInt(n.delta)>0n),a=e.balanceChanges.filter(n=>BigInt(n.delta)<0n);return t.some(n=>(r.into===void 0||n.mint===r.into)&&a.some(c=>c.mint!==n.mint&&(r.from===void 0||c.mint===r.from)))}function Ca(e,r){return e.programs.includes(r)}function Aa(e,r){return e.instructions?.find(t=>t.name===r)?.args??null}var xa=e=>At(e.key,e.name),$a=e=>xt(e.key,e.title),Ma=(e,r)=>Et.parse({kind:"points",balance:$(e),amount:r}),za={text:(e={})=>({input:"text",constraints:gt.parse(e)}),url:(e={})=>({input:"url",constraints:ft.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function Ra(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 Jt=new WeakMap,Yt=new WeakMap;function Xt(e,r){let{tracker:t,beneficiary:a="author",on:n,where:c,enrollment:i,since:u,historical:l,content:h}=e;if(!t?.source)throw new Error(r==="automatic"?"automatic() takes no argument, or { tracker } with a tracker handle from defineTracker":"content() takes { tracker } with a tracker handle from defineTracker");let{source:s}=t;if(!Ge(s))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(h&&!G(s))throw new Error(`content() needs a tracker whose source has content: x.search(), or customSource(namespace, { content: { body, metrics } }). Tracker "${t.key}" has none; use automatic({ tracker }) instead.`);if(u==="enrollment"&&i!=="required")throw new Error(`${r}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let k=Wt(s);if(!k.includes(a))throw new Error(s.kind==="custom"?`Tracker "${t.key}" has no "${a}" account: declare it in customSource(namespace, { accounts: ["${a}"] })`:`Tracker "${t.key}" pays ${new Intl.ListFormat("en",{type:"disjunction"}).format(k.map(m=>`"${m}"`))}, not "${a}"`);let q=rt.parse({tracker:t.key,source:s.kind,on:h?"new-record":n??et(s.kind,s.kind==="custom"?s.namespace:void 0),...c?{where:c}:{},beneficiary:a,...i==="required"?{enrollment:i}:{},...u&&u!=="activation"?{since:u}:{},...l&&l!==(h?"claim":"staff")?{historical:l}:{},...h?{content:h}:{}}),v=Zt(s),N=v?Ke(v,q.where):null;if(N)throw new Error(N);let j={kind:"automatic",tracker:q};v&&Jt.set(j,v);let o=G(s);return o&&Yt.set(j,o.metrics),j}function ja(e){return e?Xt(e,"automatic"):{kind:"automatic"}}function Ta(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 Xt({...e,content:!0},"content")}function Br(e){let{key:r,cost:t,...a}=e,n={...a,id:x(e),cost:typeof t=="number"?t:{balance:$(t.ledger)}};return a.scope==="author"?st.parse(n):ot.parse(n)}var Pa=Br,Dr=(e=[])=>e.filter(r=>r.scope==="author"),er=(e,r={})=>({kind:"keyed",key:e,...r.across?{across:r.across}:{}}),Nr=()=>er(e=>{let r=e.action?.reference;if(!r)throw new Error("perStation() completes from a signed transaction whose memo names a station");return r}),Ir=e=>{let{distinct:r,...t}=e;return{...Ye.parse({kind:"progress",window:{kind:"lifetime"},...t}),distinct:r}},La=()=>({kind:"untracked"}),Ba=()=>({kind:"staff-handover"}),Da=()=>({kind:"automatic"});function Na(e){let{key:r,tiers:t,...a}=e,n=x(e),c=qt.parse({id:n,...a,tiers:t.map(({key:i,...u})=>({...u,id:x({key:i,...u})}))});return y("tiered-reward",{key:c.id,tier:i=>Ct.parse({kind:"tier",reward:c,tier:i})})}var Or=()=>({kind:"once"});function Kr(e={}){return{kind:"accept",...e}}function Fr(e){return{kind:"review",...e}}var M={accept:Kr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:Fr};function Gt(e){let r=e.kind==="reject"&&e.code!==void 0?nt(e.code):null;if(r)throw new Error(r)}var Ia={quiz(e,r={}){let t=zt.parse(e),a=Object.keys(t),n=R().int().min(1).max(a.length).parse(r.minimumCorrect??a.length);return async({input:c})=>{let i=Object.keys(c.answers).length===a.length&&a.every(l=>Object.hasOwn(c.answers,l)),u=a.filter(l=>c.answers[l]===t[l]).length;return i&&u>=n?M.accept():M.reject({reason:"Review your answers and try again."})}},photo(e){return async r=>{let t=e(r),a=await r.review.photo({image:r.input.photo,criteria:t.criteria});return a.kind==="unclear"?t.unclear==="human-review"?M.review({reason:a.reason}):M.reject({reason:a.reason}):a.kind==="pass"?M.accept():M.reject({reason:a.reason})}}},Qr={once:Or,keyed:er,streak:xr,progress:Ir,perStation:Nr};function tr(e){return function(t){let a=x(t),n=`${e?"Quest type":"Quest"} "${a}"`;if(t.rewards===void 0)throw new Error(`${n}: rewards is missing. Return [] for a quest that gives none.`);let c=[...new Set((t.integrations??[]).map(o=>it.parse(o.provider)))],i=c.flatMap(o=>{let m=ct.safeParse(o);return m.success?[m.data]:[]}),u=t.trigger.kind==="automatic"&&t.trigger.tracker?.content===!0,l=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0,h=t.completion,s=typeof h=="function"?h(Qr):h;if(u&&s!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!u&&s===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");let k=Dr(t.budgets),q=t.stations?pt.parse(t.stations):void 0;if(Ut({trigger:t.trigger,completion:s??{kind:"keyed"},requires:t.requires??[],authorBudgets:k,performance:t.performance?_.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs}):void 0,...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs},...q?{stations:q}:{}},{template:e}),t.retryCooldownMs!==void 0&&!ee.safeParse(t.retryCooldownMs).success)throw new Error("retryCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.completionCooldownMs!==void 0&&!ee.safeParse(t.completionCooldownMs).success)throw new Error("completionCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.performance){let o=Yt.get(t.trigger)??[],m=t.performance.metrics.filter(g=>!o.includes(g));if(m.length)throw new Error(`The tracker's source does not measure ${m.join(", ")}`)}if(t.trigger.kind==="manual"&&t.trigger.input!=="none"&&!t.evaluate)throw new Error("Evidence quests require an evaluator");let v=Object.fromEntries(Object.entries(t.settings.shape).map(([o,m])=>{let g=wt.safeParse(m.meta());if(!g.success)throw new Error(`Setting "${o}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);if(g.data.kind==="text"&&g.data.secret&&g.data.default!=="")throw new Error(`Secret setting "${o}" must default to "": set its value in Console, not in source or deploy settings`);return[o,g.data]}));for(let o of tt(t.trigger.kind==="automatic"?t.trigger.tracker?.where:void 0))if(!yt(v[o]))throw new Error(`The tracker filter compares with setting "${o}", which is not an integer or amount setting`);function N(o){try{return j(o)}catch(m){throw oe(n,m)}}function j(o){let{performance:m}=t,g=T("settings",()=>t.settings.parse(o)),I=bt(v,g),z=T("rewards",()=>$t.parse(typeof t.rewards=="function"?t.rewards({settings:g}):t.rewards)),C=T("announcements",()=>ie(mt).max(3,"A quest posts at most three announcements").parse((typeof t.announcements=="function"?t.announcements({settings:g}):t.announcements)??[])),f=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0;for(let d of C){let K=ut(d.text),w="segments"in K&&K.segments.some(ne=>ne.kind==="placeholder"&&ne.name==="author");if(!f&&w)throw new Error("An announcement names {author} only on a quest with an automatic tracker trigger");if(!f&&d.replyToTriggeringMessage)throw new Error("An announcement replies to the triggering message only on a quest with an automatic tracker trigger")}let O=[...z.flatMap(d=>d.kind==="integration"?[d.provider]:[]),...C.flatMap(d=>d.provider==="discord"?["discord"]:[]),...Object.values(v).flatMap(d=>d.kind==="resource"&&d.source.provider!=="domino"?[d.source.provider]:[])];for(let d of O)if(!i.includes(d))throw new Error(`Declare the ${d} integration on this quest`);return Mt.parse({quest:a,evaluatorProtocol:te,title:typeof t.title=="function"?t.title({settings:g}):t.title,presentation:t.presentation?.({settings:g})??{},fields:v,values:I,rewards:z,...C.length?{announcements:C}:{},humanReview:t.review?.({settings:g})?.enabled??!0,trigger:t.trigger,...m?{performance:T("performance",()=>_.parse({metrics:m.metrics,maxAgeMs:m.maxAgeMs}))}:{},integrations:i,...c.length>i.length?{integrationModules:c}:{},completion:s?s.kind==="progress"?{kind:s.kind,goal:s.goal,window:s.window,repeat:s.repeat}:s.kind==="streak"?s:s.kind==="keyed"&&s.across?{kind:s.kind,across:s.across}:{kind:s.kind}:{kind:"keyed"},visibility:t.visibility??"visible",profile:t.profile??{visible:!1},budgets:(t.budgets??[]).filter(d=>d.scope!=="author"),...k.length?{authorBudgets:k}:{},requires:t.requires??[],...t.campaign?{campaign:t.campaign}:{},...t.availability?{availability:t.availability}:{},...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs},...q?{stations:q}:{}})}return y("quest",{protocol:te,key:a,describe:N,async evaluate(o){let m=t.settings.parse(o.settings),g=l?at.parse(o.tracker):null,I=Jt.get(t.trigger),z=g&&I?Ie(I,g.record.data):null;if(z)return D.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${z.path} ${z.reason}`});let C=g;if(o.performance){if(!t.performance)throw new Error("Quest has no performance evaluator");let d=Rt.parse(o.performance),K=F(P(t.performance.metrics),R().int().safe().nonnegative()).parse(d.metrics),w=await t.performance.evaluate({settings:m,member:o.member,tracker:C,metrics:K,observedAt:d.observedAt});if(!w)throw new Error("Performance evaluator returned no decision");if(w.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 Gt(w),D.parse(w.kind==="accept"?{kind:"accept",rewards:d.rewards}:w.kind==="review"&&o.humanReview?{kind:"review",reason:w.reason,rewards:d.rewards}:{kind:"reject",reason:w.reason,...w.kind==="review"?{requestedReview:!0}:w.code===void 0?{}:{code:w.code}})}let f=t.evaluate?await t.evaluate({settings:m,member:o.member,input:o.input,tracker:C,action:o.action??null,eligibleAt:o.eligibleAt,calendar:o.calendar,now:o.now,review:o.review,trackers:Oe(o.trackers),wallet:o.wallet,images:o.images,...o.telegram?{telegram:o.telegram}:{},...Object.fromEntries(i.map(d=>[d,o[d]]))}):M.accept();if(!f)throw new Error("Evaluator returned no decision");if(Gt(f),f.kind==="review"&&!o.humanReview)return D.parse({kind:"reject",reason:f.reason,requestedReview:!0});(f.kind==="accept"||f.kind==="review")&&f.completionKey!==void 0&&s?.kind!=="keyed"&&o.diagnose?.({code:"completion-key-ignored",message:Ur(s,f.completionKey)});let O={...o,settings:m,tracker:g,action:o.action??null};return D.parse(f.kind==="accept"||f.kind==="review"?{...f,rewards:f.rewards??o.rewards,...s?.kind==="keyed"||s?.kind==="progress"?{completionKey:s.kind==="progress"?s.distinct(O):f.completionKey??s.key(O)}:{}}:f)}})}}function Ur(e,r){let t=`ignores completionKey ${JSON.stringify(r)}`;switch(e?.kind){case void 0:return`A content quest completes once per content item, under a key Relay sets, so it ${t}`;case"once":return`once() completes the quest once per member and ${t}: use keyed(...) to complete it once per key`;case"streak":return`streak(...) keys its own completions and ${t}`;case"progress":return`progress(...) keys each contribution with its distinct(...) and ${t}: derive the key in distinct(...)`}}var Oa=tr(!1),Ka=tr(!0);export{yr as CapabilityError,ja as automatic,Da as automaticFulfillment,xa as badge,pr as balanceAtLeast,Pa as budget,oa as calendar,vr as capabilityErrorCodes,hr as completed,Ta as content,Ee as cosmosDenomSchema,nr as cosmosNetworkSchema,na as count,b as customSource,M as decision,ta as defineBadge,gr as defineCampaign,kr as defineDashboard,aa as defineEngagementReward,fr as defineGroup,da as defineLeaderboard,ra as defineLedger,ia as defineOffer,Oa as defineQuest,Ka as defineQuestType,ua as defineReferral,Na as defineTieredReward,ga as defineTracker,fa as discord,la as earned,Ia as evaluators,za as evidence,Sr as formatUnits,$a as groupMembership,wr as inGroup,Aa as instruction,Ca as invoked,$e as isContractCall,Me as isContractEvent,qe as isEvmChainId,V as isNftCollection,ze as isSolanaProgram,er as keyed,Rr as leaderboardTiesWarning,ar as limits,Ra as manual,ur as maxWalletEventLogs,lr as maxWalletEventLookback,mr as maxWalletTransactionLookback,dr as maxWalletTransactions,Or as once,cr as parseContractCall,ir as parseContractEvent,sr as parseContractFunction,or as parseNftCollection,br as parseUnits,Nr as perStation,va as pointLedgers,Ma as points,Ir as progress,ca as questCompleted,Sa as received,sa as rolling,ya as settings,Ea as spent,Ba as staffHandover,xr as streak,qa as swapped,ha as telegram,wa as tiktok,B as trackerDataSchema,at as trackerTriggerContextSchema,La as untracked,ka as wallet,ma as x,pa as youtube,rr as z};