@domino-sdk/relay 1.56.0 → 1.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +100 -0
- package/dist/{accounts-DRPENuZe.d.ts → accounts-DoabriBX.d.ts} +21 -7
- package/dist/{attempt-captures-CxxO7DeD.d.ts → attempt-captures-W2dgzGqE.d.ts} +1 -1
- package/dist/authoring.d.ts +323 -39
- package/dist/authoring.js +312 -18
- package/dist/{automatic-outcomes-DxW_v5Wc.d.ts → automatic-outcomes-Cmou89IS.d.ts} +1 -1
- package/dist/avatar.d.ts +1 -2
- package/dist/browser.d.ts +19 -11
- package/dist/browser.js +12 -10
- package/dist/{capability-error-DSd8EMQC.d.ts → capability-error-DufwG3G0.d.ts} +21 -7
- package/dist/{chunk-OTITLABX.js → chunk-2FHNY52R.js} +8 -2
- package/dist/{chunk-QNQNKIAA.js → chunk-422J3QRW.js} +12 -2
- package/dist/{chunk-INSWI2VZ.js → chunk-4OFH4BNX.js} +1 -1
- package/dist/{chunk-KBVH4XZC.js → chunk-6ZG7WNYX.js} +1 -1
- package/dist/{chunk-BHHUSBSD.js → chunk-GBSDAD3N.js} +1627 -887
- package/dist/{chunk-W5U2WXG3.js → chunk-KUPVQXUJ.js} +2 -2
- package/dist/{chunk-G6XVBYH7.js → chunk-KWFY7L7X.js} +4 -4
- package/dist/{chunk-BJYMTCWG.js → chunk-MJEJQH5A.js} +18 -6
- package/dist/{chunk-ULQU7KC4.js → chunk-N3LJ6GFK.js} +1 -5
- package/dist/{chunk-ABJ4G47X.js → chunk-N7YOS4ZU.js} +1 -1
- package/dist/{chunk-MNU6UPXY.js → chunk-OTEUP2SG.js} +1 -1
- package/dist/{chunk-NK6EER33.js → chunk-VVRQQRMQ.js} +12 -12
- package/dist/{chunk-H2MD6E7Z.js → chunk-VWMIA2TT.js} +8 -2
- package/dist/{chunk-RBPMT53S.js → chunk-XQKUJL7H.js} +25 -5
- package/dist/{chunk-CXKXPB7K.js → chunk-Y2IGFLD2.js} +36 -11
- package/dist/{chunk-VSHV7FEA.js → chunk-YNW2ZUUP.js} +56 -153
- package/dist/{chunk-CK7HO32Z.js → chunk-YOAPPIWN.js} +2 -2
- package/dist/{client-bX3oTpRu.d.ts → client-Cw1pB5sv.d.ts} +121 -117
- package/dist/{deployments-D3lxfQMB.d.ts → deployments-DI-W7fBq.d.ts} +1105 -182
- package/dist/{groups-DPE004_V.d.ts → groups-9Jm3peq3.d.ts} +14 -7
- package/dist/index.d.ts +10 -11
- package/dist/index.js +9 -9
- package/dist/{integrations-CcD5NPEA.d.ts → integrations-CmIkP1Gi.d.ts} +48 -32
- package/dist/internal.d.ts +10 -10
- package/dist/internal.js +8 -8
- package/dist/{offers-CtzMeB7O.d.ts → offers-CqXfMIxq.d.ts} +7 -2
- package/dist/{pages-BlLqB8ZQ.d.ts → pages-Bti7g5mX.d.ts} +184 -10
- package/dist/{participant-activity-iciCEs_8.d.ts → participant-activity-DHL8QYks.d.ts} +4 -0
- package/dist/portal-proxy.js +3 -3
- package/dist/react/index.d.ts +74 -74
- package/dist/react/index.js +10 -10
- package/dist/runtime/authoring.js +1 -1
- package/dist/runtime/chunks/ADUMK6CR.js +1 -0
- package/dist/runtime/chunks/EWU4OKSY.js +62 -0
- package/dist/runtime/manifest.json +5 -5
- package/dist/runtime/schema.js +1 -1
- package/dist/runtime/zod.js +1 -1
- package/dist/{schema-C4m9RhCR.d.ts → schema-CwbRkmlr.d.ts} +324 -35
- package/dist/schema.d.ts +854 -437
- package/dist/schema.js +103 -25
- package/dist/server/index.d.ts +10 -10
- package/dist/server/index.js +711 -81
- package/dist/{submission-input-wTiYGdgA.d.ts → submission-input-D9EGH_yb.d.ts} +2 -2
- package/dist/{telegram-browser-Bh3i0HiH.d.ts → telegram-browser-CTJh4Ro_.d.ts} +4 -4
- package/dist/testing.d.ts +89 -9
- package/dist/testing.js +218 -13
- package/dist/{transport-CnKA-_RL.d.ts → transport-B8Ss5lcz.d.ts} +9189 -2009
- package/dist/wallet-DZWL7lJH.d.ts +972 -0
- package/dist/{x-1czZFVUW.d.ts → x-KFJD2x8y.d.ts} +3 -3
- package/package.json +2 -2
- package/dist/profiles-BoOK03cR.d.ts +0 -299
- package/dist/runtime/chunks/IDOMZWRY.js +0 -40
- package/dist/runtime/chunks/NDB42VFF.js +0 -1
- package/dist/util.d-w9f9t3ua.d.ts +0 -5
- package/dist/wallet-Ac7OFpOr.d.ts +0 -228
package/dist/react/index.d.ts
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import { B as Badge, b as MemberBadges, O as Offer, e as Redemption } from '../offers-
|
|
2
|
-
import { b as ParticipantSession, R as RelayEvent, P as ParticipantActivity, M as MemberSummary } from '../participant-activity-
|
|
3
|
-
import { g as RelayError, R as RelayClient, m as SubmissionDraft } from '../client-
|
|
4
|
-
import { P as Page,
|
|
5
|
-
export { C as CreatorAccount, b as CreatorAccounts } from '../pages-
|
|
1
|
+
import { B as Badge, b as MemberBadges, O as Offer, e as Redemption } from '../offers-CqXfMIxq.js';
|
|
2
|
+
import { b as ParticipantSession, R as RelayEvent, P as ParticipantActivity, M as MemberSummary } from '../participant-activity-DHL8QYks.js';
|
|
3
|
+
import { g as RelayError, R as RelayClient, m as SubmissionDraft } from '../client-Cw1pB5sv.js';
|
|
4
|
+
import { P as Page, H as collectionViewSchema, l as QuestView, a as CreatorAccountProvider, i as QuestOutcomeQuery, g as QuestOutcome } from '../pages-Bti7g5mX.js';
|
|
5
|
+
export { C as CreatorAccount, b as CreatorAccounts } from '../pages-Bti7g5mX.js';
|
|
6
6
|
import * as react from 'react';
|
|
7
7
|
import { ReactNode } from 'react';
|
|
8
|
-
import
|
|
9
|
-
import { z } from 'zod';
|
|
10
|
-
import { E as Entitlement, a as AttemptStatus, f as PointEntry, e as PointBalances, j as PointLedgerReference, T as TieredRewardReference } from '../schema-
|
|
11
|
-
import { a as AuthProvider, A as AccountConnection } from '../accounts-
|
|
12
|
-
export { T as TelegramAccountConnection, b as TelegramSignInMethods } from '../accounts-
|
|
13
|
-
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-
|
|
14
|
-
export { a as EmailSignInOption, O as OAuthSignInOption, b as SignInIcon, W as WalletSignInOption, t as telegramMiniAppInitData } from '../telegram-browser-
|
|
15
|
-
import {
|
|
16
|
-
import { h as LeaderboardPlacement,
|
|
17
|
-
import
|
|
18
|
-
import '../submission-input-wTiYGdgA.js';
|
|
8
|
+
import * as z from 'zod';
|
|
9
|
+
import { z as z$1 } from 'zod';
|
|
10
|
+
import { E as Entitlement, a as AttemptStatus, f as PointEntry, e as PointBalances, j as PointLedgerReference, T as TieredRewardReference } from '../schema-CwbRkmlr.js';
|
|
11
|
+
import { a as AuthProvider, A as AccountConnection } from '../accounts-DoabriBX.js';
|
|
12
|
+
export { T as TelegramAccountConnection, b as TelegramSignInMethods } from '../accounts-DoabriBX.js';
|
|
13
|
+
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-CTJh4Ro_.js';
|
|
14
|
+
export { a as EmailSignInOption, O as OAuthSignInOption, b as SignInIcon, W as WalletSignInOption, t as telegramMiniAppInitData } from '../telegram-browser-CTJh4Ro_.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-DZWL7lJH.js';
|
|
16
|
+
import { h as LeaderboardPlacement, b2 as referralSummarySchema, g as LeaderboardPage } from '../groups-9Jm3peq3.js';
|
|
17
|
+
import '../submission-input-D9EGH_yb.js';
|
|
19
18
|
import '../action-DBzILFx9.js';
|
|
20
19
|
|
|
21
20
|
/**
|
|
@@ -298,7 +297,7 @@ type MutationOptions<TData, TVariables> = {
|
|
|
298
297
|
*/
|
|
299
298
|
declare function useRelayMutation<TData = unknown, TVariables = void>(mutation: (variables: TVariables, context: MutationContext) => Promise<TData>, options?: MutationOptions<TData, TVariables>): Mutation<TData, TVariables>;
|
|
300
299
|
|
|
301
|
-
type Collection = z.infer<typeof collectionViewSchema>;
|
|
300
|
+
type Collection = z$1.infer<typeof collectionViewSchema>;
|
|
302
301
|
/** The participant's quests and collections, as `useExperience().data` holds them. */
|
|
303
302
|
type ExperienceData = {
|
|
304
303
|
entitlements: Entitlement[];
|
|
@@ -394,8 +393,8 @@ declare const relayKeys: {
|
|
|
394
393
|
*/
|
|
395
394
|
declare function useEntitlements(options?: QueryOptions): MemberQuery<{
|
|
396
395
|
items: ({
|
|
397
|
-
|
|
398
|
-
|
|
396
|
+
status: "unsupported";
|
|
397
|
+
reportedStatus: string;
|
|
399
398
|
id: string;
|
|
400
399
|
member: string;
|
|
401
400
|
reward: {
|
|
@@ -421,9 +420,7 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
|
|
|
421
420
|
revision: number;
|
|
422
421
|
} | {
|
|
423
422
|
[x: string]: unknown;
|
|
424
|
-
status: "
|
|
425
|
-
handover: string;
|
|
426
|
-
startedAt: number;
|
|
423
|
+
status: "available";
|
|
427
424
|
id: string;
|
|
428
425
|
member: string;
|
|
429
426
|
reward: {
|
|
@@ -447,17 +444,11 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
|
|
|
447
444
|
earnedTier: string;
|
|
448
445
|
tier: string;
|
|
449
446
|
revision: number;
|
|
450
|
-
allocation?: {
|
|
451
|
-
[x: string]: unknown;
|
|
452
|
-
item: string;
|
|
453
|
-
label: string;
|
|
454
|
-
} | undefined;
|
|
455
447
|
} | {
|
|
456
448
|
[x: string]: unknown;
|
|
457
|
-
status: "
|
|
449
|
+
status: "handing-over";
|
|
458
450
|
handover: string;
|
|
459
451
|
startedAt: number;
|
|
460
|
-
collectedAt: number;
|
|
461
452
|
id: string;
|
|
462
453
|
member: string;
|
|
463
454
|
reward: {
|
|
@@ -486,16 +477,12 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
|
|
|
486
477
|
item: string;
|
|
487
478
|
label: string;
|
|
488
479
|
} | undefined;
|
|
489
|
-
recovery?: {
|
|
490
|
-
completion: string;
|
|
491
|
-
reason: string;
|
|
492
|
-
flaggedAt: number;
|
|
493
|
-
remainingTier: string | null;
|
|
494
|
-
} | undefined;
|
|
495
480
|
} | {
|
|
496
481
|
[x: string]: unknown;
|
|
497
|
-
status: "
|
|
498
|
-
|
|
482
|
+
status: "collected";
|
|
483
|
+
handover: string;
|
|
484
|
+
startedAt: number;
|
|
485
|
+
collectedAt: number;
|
|
499
486
|
id: string;
|
|
500
487
|
member: string;
|
|
501
488
|
reward: {
|
|
@@ -519,9 +506,21 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
|
|
|
519
506
|
earnedTier: string;
|
|
520
507
|
tier: string;
|
|
521
508
|
revision: number;
|
|
509
|
+
allocation?: {
|
|
510
|
+
[x: string]: unknown;
|
|
511
|
+
item: string;
|
|
512
|
+
label: string;
|
|
513
|
+
} | undefined;
|
|
514
|
+
recovery?: {
|
|
515
|
+
completion: string;
|
|
516
|
+
reason: string;
|
|
517
|
+
flaggedAt: number;
|
|
518
|
+
remainingTier: string | null;
|
|
519
|
+
} | undefined;
|
|
522
520
|
} | {
|
|
523
|
-
|
|
524
|
-
|
|
521
|
+
[x: string]: unknown;
|
|
522
|
+
status: "void";
|
|
523
|
+
voidedAt: number;
|
|
525
524
|
id: string;
|
|
526
525
|
member: string;
|
|
527
526
|
reward: {
|
|
@@ -554,7 +553,15 @@ declare function useEntitlements(options?: QueryOptions): MemberQuery<{
|
|
|
554
553
|
*/
|
|
555
554
|
declare function useDeliveries(options?: QueryOptions): MemberQuery<{
|
|
556
555
|
items: ({
|
|
557
|
-
|
|
556
|
+
kind: "unknown";
|
|
557
|
+
reportedKind: string;
|
|
558
|
+
id: string;
|
|
559
|
+
status: string;
|
|
560
|
+
at: number | null;
|
|
561
|
+
quest: string | null;
|
|
562
|
+
completion: string | null;
|
|
563
|
+
} | {
|
|
564
|
+
[x: string]: z.JSONType;
|
|
558
565
|
kind: "points";
|
|
559
566
|
ledger: {
|
|
560
567
|
id: string;
|
|
@@ -572,8 +579,8 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
|
|
|
572
579
|
[x: string]: unknown;
|
|
573
580
|
kind: "tier";
|
|
574
581
|
entitlement: {
|
|
575
|
-
|
|
576
|
-
|
|
582
|
+
status: "unsupported";
|
|
583
|
+
reportedStatus: string;
|
|
577
584
|
id: string;
|
|
578
585
|
member: string;
|
|
579
586
|
reward: {
|
|
@@ -599,9 +606,7 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
|
|
|
599
606
|
revision: number;
|
|
600
607
|
} | {
|
|
601
608
|
[x: string]: unknown;
|
|
602
|
-
status: "
|
|
603
|
-
handover: string;
|
|
604
|
-
startedAt: number;
|
|
609
|
+
status: "available";
|
|
605
610
|
id: string;
|
|
606
611
|
member: string;
|
|
607
612
|
reward: {
|
|
@@ -625,17 +630,11 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
|
|
|
625
630
|
earnedTier: string;
|
|
626
631
|
tier: string;
|
|
627
632
|
revision: number;
|
|
628
|
-
allocation?: {
|
|
629
|
-
[x: string]: unknown;
|
|
630
|
-
item: string;
|
|
631
|
-
label: string;
|
|
632
|
-
} | undefined;
|
|
633
633
|
} | {
|
|
634
634
|
[x: string]: unknown;
|
|
635
|
-
status: "
|
|
635
|
+
status: "handing-over";
|
|
636
636
|
handover: string;
|
|
637
637
|
startedAt: number;
|
|
638
|
-
collectedAt: number;
|
|
639
638
|
id: string;
|
|
640
639
|
member: string;
|
|
641
640
|
reward: {
|
|
@@ -664,16 +663,12 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
|
|
|
664
663
|
item: string;
|
|
665
664
|
label: string;
|
|
666
665
|
} | undefined;
|
|
667
|
-
recovery?: {
|
|
668
|
-
completion: string;
|
|
669
|
-
reason: string;
|
|
670
|
-
flaggedAt: number;
|
|
671
|
-
remainingTier: string | null;
|
|
672
|
-
} | undefined;
|
|
673
666
|
} | {
|
|
674
667
|
[x: string]: unknown;
|
|
675
|
-
status: "
|
|
676
|
-
|
|
668
|
+
status: "collected";
|
|
669
|
+
handover: string;
|
|
670
|
+
startedAt: number;
|
|
671
|
+
collectedAt: number;
|
|
677
672
|
id: string;
|
|
678
673
|
member: string;
|
|
679
674
|
reward: {
|
|
@@ -697,9 +692,21 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
|
|
|
697
692
|
earnedTier: string;
|
|
698
693
|
tier: string;
|
|
699
694
|
revision: number;
|
|
695
|
+
allocation?: {
|
|
696
|
+
[x: string]: unknown;
|
|
697
|
+
item: string;
|
|
698
|
+
label: string;
|
|
699
|
+
} | undefined;
|
|
700
|
+
recovery?: {
|
|
701
|
+
completion: string;
|
|
702
|
+
reason: string;
|
|
703
|
+
flaggedAt: number;
|
|
704
|
+
remainingTier: string | null;
|
|
705
|
+
} | undefined;
|
|
700
706
|
} | {
|
|
701
|
-
|
|
702
|
-
|
|
707
|
+
[x: string]: unknown;
|
|
708
|
+
status: "void";
|
|
709
|
+
voidedAt: number;
|
|
703
710
|
id: string;
|
|
704
711
|
member: string;
|
|
705
712
|
reward: {
|
|
@@ -730,14 +737,14 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
|
|
|
730
737
|
quest: string | null;
|
|
731
738
|
completion: string | null;
|
|
732
739
|
} | {
|
|
733
|
-
[x: string]: JSONType | undefined;
|
|
740
|
+
[x: string]: z.JSONType | undefined;
|
|
734
741
|
kind: "integration";
|
|
735
742
|
provider: string;
|
|
736
743
|
action: string;
|
|
737
744
|
deliveredAt: number | null;
|
|
738
745
|
revokedAt: number | null;
|
|
739
746
|
reconciliation: {
|
|
740
|
-
[x: string]: JSONType;
|
|
747
|
+
[x: string]: z.JSONType;
|
|
741
748
|
status: string;
|
|
742
749
|
ownership: string;
|
|
743
750
|
at: number;
|
|
@@ -748,14 +755,6 @@ declare function useDeliveries(options?: QueryOptions): MemberQuery<{
|
|
|
748
755
|
quest: string | null;
|
|
749
756
|
completion: string | null;
|
|
750
757
|
roleId?: string | undefined;
|
|
751
|
-
} | {
|
|
752
|
-
kind: "unknown";
|
|
753
|
-
reportedKind: string;
|
|
754
|
-
id: string;
|
|
755
|
-
status: string;
|
|
756
|
-
at: number | null;
|
|
757
|
-
quest: string | null;
|
|
758
|
-
completion: string | null;
|
|
759
758
|
})[];
|
|
760
759
|
}>;
|
|
761
760
|
|
|
@@ -1844,7 +1843,8 @@ declare function useSignInMethods(): Query<SignInMethods>;
|
|
|
1844
1843
|
* `<img src={defaultAvatar(me.data.avatarSeed)} />`. The seed is derived from the member and
|
|
1845
1844
|
* reveals nothing about them; linking wallets or accounts does not change it. `data.email` is the
|
|
1846
1845
|
* member's own sign-in email address for "signed in as", or null when they have none, and
|
|
1847
|
-
* `data.emails` lists every verified address that signs them in.
|
|
1846
|
+
* `data.emails` lists every verified address that signs them in. `data.clock` is the member's
|
|
1847
|
+
* clock: pass `data` to `memberTime()` from `@domino-sdk/relay/browser` for their current time.
|
|
1848
1848
|
*/
|
|
1849
1849
|
declare function useMe(): MemberQuery<MemberSummary>;
|
|
1850
1850
|
/**
|
|
@@ -2393,7 +2393,7 @@ declare function useProfileCompletions(profile: string, options?: {
|
|
|
2393
2393
|
limit?: number;
|
|
2394
2394
|
}): PagedQuery<ProfileCompletion>;
|
|
2395
2395
|
|
|
2396
|
-
type ReferralSummary = z.infer<typeof referralSummarySchema>;
|
|
2396
|
+
type ReferralSummary = z$1.infer<typeof referralSummarySchema>;
|
|
2397
2397
|
/**
|
|
2398
2398
|
* Keeps an invitation code from the landing URL (`?ref=CODE` by default)
|
|
2399
2399
|
* through sign-in, including the round trip to an OAuth provider.
|
package/dist/react/index.js
CHANGED
|
@@ -9,20 +9,20 @@ import {
|
|
|
9
9
|
readSignInMethods,
|
|
10
10
|
signInOptionsFrom,
|
|
11
11
|
telegramMiniAppInitData
|
|
12
|
-
} from "../chunk-
|
|
13
|
-
import "../chunk-
|
|
12
|
+
} from "../chunk-2FHNY52R.js";
|
|
13
|
+
import "../chunk-VVRQQRMQ.js";
|
|
14
14
|
import {
|
|
15
15
|
createRelayAction
|
|
16
|
-
} from "../chunk-
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
19
|
-
import "../chunk-
|
|
16
|
+
} from "../chunk-4OFH4BNX.js";
|
|
17
|
+
import "../chunk-XQKUJL7H.js";
|
|
18
|
+
import "../chunk-MJEJQH5A.js";
|
|
19
|
+
import "../chunk-YNW2ZUUP.js";
|
|
20
20
|
import "../chunk-KDR2VAJP.js";
|
|
21
|
-
import "../chunk-
|
|
22
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-6ZG7WNYX.js";
|
|
22
|
+
import "../chunk-N7YOS4ZU.js";
|
|
23
23
|
import {
|
|
24
24
|
sessionMember
|
|
25
|
-
} from "../chunk-
|
|
25
|
+
} from "../chunk-422J3QRW.js";
|
|
26
26
|
import {
|
|
27
27
|
RelayError,
|
|
28
28
|
RelayErrorCode,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
clientError,
|
|
31
31
|
isRelayError,
|
|
32
32
|
isRequestError
|
|
33
|
-
} from "../chunk-
|
|
33
|
+
} from "../chunk-GBSDAD3N.js";
|
|
34
34
|
|
|
35
35
|
// src/react/context.ts
|
|
36
36
|
import { createContext, useContext } from "react";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as L,B as z,C as re,Cc as qe,D as te,Dc as Ee,E as ne,Ec as Me,Fc as N,Gc as Ce,Gd as Q,Hb as we,Id as j,Jf as Ge,Ka as I,Kb as ve,Kc as S,Kf as Ve,La as ue,Ld as De,Ma as P,Na as me,Nc as pr,Nh as br,Og as Fe,Qb as ur,Rb as mr,Re as Ie,S as ae,T as oe,Td as U,Uc as y,Ue as Pe,Vc as ze,Vd as Te,Ve as Oe,W as se,Wc as q,We as Be,X as T,Xe as Ke,Yc as hr,Ye as Ne,Ze as Qe,_ as ce,a as R,aa as ie,be as Le,cb as le,da as de,eg as Ze,fb as pe,gc as lr,if as wr,jc as ye,jf as vr,kb as he,kc as be,lf as yr,md as gr,nd as fr,nh as He,ob as ge,od as kr,og as _e,pd as je,pg as We,qd as $e,qf as Ue,qg as G,r as F,s as H,sd as Re,t as J,tc as O,u as X,uc as x,ud as xe,v as Y,vb as fe,w as ee,wd as Ae,xb as ke,xc as B,yc as K,zc as Se}from"./chunks/NDB42VFF.js";import{Vb as D,Wb as W,hc as $,nb as M,pa as A,pc as C,td as dr,vb as _}from"./chunks/IDOMZWRY.js";function Je(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){Je(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,s=""]=r,c=s.replace(/0+$/,"");if(c.length>t)throw new Error(`"${e}" has more than ${t} decimal places, which this token cannot hold`);return BigInt(n+c.padEnd(t,"0"))}function qr(e,t){Je(t);let r=typeof e=="bigint"?e:BigInt(e),n=r<0n?"-":"",s=(r<0n?-r:r).toString().padStart(t+1,"0"),c=s.slice(0,s.length-t),i=s.slice(s.length-t).replace(/0+$/,"");return n+c+(i?"."+i:"")}function Ye(e,t={}){let{trigger:r,completion:n,requires:s,performance:c,retryCooldownMs:i,completionCooldownMs:d}=e,a=r.kind==="automatic"?r.tracker:void 0,p=a?.content===!0;if(c&&!p)throw new Error("Performance requires a content quest");if(p){if(n.kind!=="keyed")throw new Error("Content quests complete once per content item");if(a.beneficiary!=="author"||a.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(d!==void 0){if(r.kind!=="manual"||r.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(r.kind==="automatic"&&!a){if(!t.template&&s.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 Er=["author"],Mr=["author","messageAuthor"];function er(e){if(!de(e))return[];switch(e.kind){case"x-search":return ae;case"discord-messages":return Er;case"discord-reactions":return Mr;case"custom":return["author",...e.accounts??[]]}}var Xe=new Map;function Cr(e){let t=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,r=Xe.get(t);return r||(r=z(t==="messages-text"?X:t==="discord-messages"?J:Y),Xe.set(t,r)),r}function rr(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return Cr(e);case"custom":return e.data}}function Wr(e){return y("badge",Ze.parse(e))}function Fr(e){return y("ledger",Ue.parse(e))}function Hr(e){let{target:t,ledger:r,...n}=e,s=_e.parse({...n,qualifiedBy:e.qualifiedBy.key,balance:q(r)}),c=$(C(e.metrics),G.shape.target);return{key:s.key,describe:()=>s,score(i){let d=We.parse(i);return G.parse({target:t({metrics:c.parse(d.metrics)}),baseline:t({metrics:c.parse(d.baseline)})})}}}var jr=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 le.strict().parse({kind:"streak",...e})},Jr=e=>ue.brand().parse({kind:"count",count:e}),Xr=(e,t={})=>P.brand().parse({kind:"calendar",period:e,...t}),Yr=({days:e})=>P.brand().parse({kind:"rolling",durationMs:e*864e5}),et=e=>({kind:"quest",quest:e});function rt(e){let{qualification:t,inviterGroup:r,milestones:n,bonuses:s,...c}=e,i=He.parse({...c,qualification:t.kind==="quest"?{kind:"quest",quest:t.quest.key}:t,...r?{inviterGroup:R.parse(r.key)}:{},milestones:n?.map(({key:d,...a})=>({...a,id:S({key:d,...a})})),bonuses:s?.map(({key:d,ledger:a,quests:p,...g})=>({...g,id:S({key:d,...g}),balance:q(a),quests:p?.map(o=>o.key)}))});return y("referral",i)}function tt(e={}){return{kind:"earned",...e}}function nt(e){let{ledger:t,group:r,score:n,settle:s,...c}=e,i=s?.pool,d=Fe.parse({...c,...s?{settle:{...s,prizes:s.prizes??[],...i?{pool:{...i,...i.ledger===void 0?{}:{ledger:q(i.ledger)}}}:{}}}:{},balance:q(t),...r?{group:R.parse(r.key)}:{},score:n?.kind==="earned"?{...n,quests:n.quests?.map(a=>a.key)}:n});return y("leaderboard",d)}var at={provider:"x",search:e=>se.parse({kind:"x-search",...e})};function V(e,t){let{data:r,content:n,...s}=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(!tr(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)oe.parse(i);return T.parse({kind:"custom",namespace:e,...s,data:z(D({body:n.body,metrics:W(Object.fromEntries(c.map(i=>[i,M().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!tr(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,...s,data:z(r)})}function tr(e){return typeof e=="object"&&e!==null&&"_zod"in e}function ot(e){return y("tracker",ie.parse(e))}function $r(e={}){return F.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function Rr(){return H.parse({kind:"discord-reactions"})}var st={provider:"discord",grantRole:e=>ee.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),messages:$r,reactions:Rr,roles(e={}){return x.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return x.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"]})}},ct={reactions(){return V(Ge,{identities:["member"],accounts:["messageAuthor"],data:Ve})}},it={shorts(){return V(Pe,{identities:["member"],content:{body:Oe,metrics:Be}})}},dt={videos(){return V(Ke,{identities:["member"],content:{body:Ne,metrics:Qe}})}},ut=()=>({provider:"domino",resource:"point-ledger"});function f(e,t){return t}var mt={pointLedger(e){let t={...e,kind:"point-ledger",default:e.default?R.parse(e.default.key):""};return f("point-ledger",ze.prefault(t.default).meta(t))},datetime(e){let t={...e,kind:"datetime",default:B.parse(e.default)};return f("datetime",B.default(t.default).meta(t))},resource(e){let t={...e,source:x.parse(e.source),kind:"resource",default:K.parse(e.default??"")};return f("resource",K.default(t.default).meta(t))},quiz(e){let t=O.parse(e.default);return f("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 f("text",A().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 f("text",A().max(t.maxLength).default(t.default).meta(t))},amount(e){if(!qe(e.default))throw new Error(`settings.amount() takes a base-unit integer string as its default, not "${e.default}"`);let t={...e,kind:"text",minLength:1,maxLength:100,multiline:!1,picker:"amount"};return f("text",N(t).default(t.default).meta(t))},chain(e){if(!Ee(e.default))throw new Error(`settings.chain() takes "solana" or an EVM chain ID such as "eip155:8453" as its default, not "${e.default}"`);let t={...e,kind:"text",minLength:1,maxLength:64,multiline:!1,picker:"chain"};return f("text",N(t).transform(r=>r).default(t.default).meta(t))},integer(e){return f("integer",M().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return f("boolean",_().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return f("choice",C(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return D(e).strict()}},pt=e=>xe(e.key,e.name),ht=e=>Ae(e.key,e.title),gt=(e,t)=>je.parse({kind:"points",balance:q(e),amount:t}),ft={text:(e={})=>({input:"text",constraints:ye.parse(e)}),url:(e={})=>({input:"url",constraints:be.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function kt(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 ar=new WeakMap,or=new WeakMap;function sr(e,t){let{tracker:r,beneficiary:n="author",on:s,where:c,enrollment:i,since:d,historical:a,content:p}=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:g}=r;if(!ce(g))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(p&&!L(g))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(d==="enrollment"&&i!=="required")throw new Error(`${t}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let o=er(g);if(!o.includes(n))throw new Error(g.kind==="custom"?`Tracker "${r.key}" has no "${n}" account: declare it in customSource(namespace, { accounts: ["${n}"] })`:`Tracker "${r.key}" pays ${o.map(l=>`"${l}"`).join(" or ")}, not "${n}"`);let u=ge.parse({tracker:r.key,source:g.kind,on:p?"new-record":s??pe(g.kind),...c?{where:c}:{},beneficiary:n,...i==="required"?{enrollment:i}:{},...d&&d!=="activation"?{since:d}:{},...a&&a!==(p?"claim":"staff")?{historical:a}:{},...p?{content:p}:{}}),m=rr(g),v=m?ne(m,u.where):null;if(v)throw new Error(v);let w={kind:"automatic",tracker:u};m&&ar.set(w,m);let h=L(g);return h&&or.set(w,h.metrics),w}function wt(e){return e?sr(e,"automatic"):{kind:"automatic"}}function vt(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 sr({...e,content:!0},"content")}var yt=e=>{let{key:t,cost:r,...n}=e;return we.parse({...n,id:S(e),cost:typeof r=="number"?r:{balance:q(r.ledger)}})},xr=e=>({kind:"keyed",key:e}),Ar=e=>{let{distinct:t,...r}=e;return{...me.parse({kind:"progress",window:{kind:"lifetime"},...r}),distinct:t}},bt=()=>({kind:"untracked"}),St=()=>({kind:"staff-handover"}),qt=()=>({kind:"automatic"});function Et(e){let{key:t,tiers:r,...n}=e,s=S(e),c=$e.parse({id:s,...n,tiers:r.map(({key:i,...d})=>({...d,id:S({key:i,...d})}))});return y("tiered-reward",{key:c.id,tier:i=>Re.parse({kind:"tier",reward:c,tier:i})})}var Dr=()=>({kind:"once"});function Tr(e={}){return{kind:"accept",...e}}function Lr(e){return{kind:"review",...e}}var E={accept:Tr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:Lr};function nr(e){let t=e.kind==="reject"&&e.code!==void 0?ke(e.code):null;if(t)throw new Error(t)}var Mt={quiz(e,t={}){let r=Le.parse(e),n=Object.keys(r),s=M().int().min(1).max(n.length).parse(t.minimumCorrect??n.length);return async({input:c})=>{let i=Object.keys(c.answers).length===n.length&&n.every(a=>Object.hasOwn(c.answers,a)),d=n.filter(a=>c.answers[a]===r[a]).length;return i&&d>=s?E.accept():E.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"?E.review({reason:n.reason}):E.reject({reason:n.reason}):n.kind==="pass"?E.accept():E.reject({reason:n.reason})}}},Ir={once:Dr,keyed:xr,streak:jr,progress:Ar};function cr(e){return function(r){let n=S(r),s=[...new Set((r.integrations??[]).map(o=>ve.parse(o.provider)))],c=r.trigger.kind==="automatic"&&r.trigger.tracker?.content===!0,i=r.trigger.kind==="automatic"&&r.trigger.tracker!==void 0,d=r.completion,a=typeof d=="function"?d(Ir):d;if(c&&a!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!c&&a===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");if(Ye({trigger:r.trigger,completion:a??{kind:"keyed"},requires:r.requires??[],performance:r.performance?I.parse({metrics:r.performance.metrics,maxAgeMs:r.performance.maxAgeMs}):void 0,...r.retryCooldownMs===void 0?{}:{retryCooldownMs:r.retryCooldownMs},...r.completionCooldownMs===void 0?{}:{completionCooldownMs:r.completionCooldownMs}},{template:e}),r.retryCooldownMs!==void 0&&!Q.safeParse(r.retryCooldownMs).success)throw new Error("retryCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(r.completionCooldownMs!==void 0&&!Q.safeParse(r.completionCooldownMs).success)throw new Error("completionCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(r.performance){let o=or.get(r.trigger)??[],u=r.performance.metrics.filter(m=>!o.includes(m));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 p=Object.fromEntries(Object.entries(r.settings.shape).map(([o,u])=>{let m=Se.safeParse(u.meta());if(!m.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 })`);return[o,m.data]}));for(let o of he(r.trigger.kind==="automatic"?r.trigger.tracker?.where:void 0))if(!Me(p[o]))throw new Error(`The tracker filter compares with setting "${o}", which is not an integer or amount setting`);function g(o){let u=r.settings.parse(o),m=Ce(p,u),v=De.parse(typeof r.rewards=="function"?r.rewards({settings:u}):r.rewards),w=[...v.flatMap(h=>h.kind==="integration"?[h.provider]:[]),...Object.values(p).flatMap(h=>h.kind==="resource"&&h.source.provider!=="domino"?[h.source.provider]:[])];for(let h of w)if(!s.includes(h))throw new Error(`Declare the ${h} integration on this quest`);return Te.parse({quest:n,evaluatorProtocol:U,title:typeof r.title=="function"?r.title({settings:u}):r.title,presentation:r.presentation?.({settings:u})??{},fields:p,values:m,rewards:v,humanReview:r.review?.({settings:u})?.enabled??!0,trigger:r.trigger,...r.performance?{performance:I.parse({metrics:r.performance.metrics,maxAgeMs:r.performance.maxAgeMs})}:{},integrations:s,completion:a?a.kind==="progress"?{kind:a.kind,goal:a.goal,window:a.window,repeat:a.repeat}:a.kind==="streak"?a:{kind:a.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},...r.completionCooldownMs===void 0?{}:{completionCooldownMs:r.completionCooldownMs}})}return y("quest",{protocol:U,key:n,describe:g,async evaluate(o){let u=r.settings.parse(o.settings),m=i?fe.parse(o.tracker):null,v=ar.get(r.trigger),w=m&&v?re(v,m.record.data):null;if(w)return j.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${w.path} ${w.reason}`});let h=m;if(o.performance){if(!r.performance)throw new Error("Quest has no performance evaluator");let b=Ie.parse(o.performance),ir=$(C(r.performance.metrics),M().int().safe().nonnegative()).parse(b.metrics),k=await r.performance.evaluate({settings:u,member:o.member,tracker:h,metrics:ir,observedAt:b.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 nr(k),j.parse(k.kind==="accept"?{kind:"accept",rewards:b.rewards}:k.kind==="review"&&o.humanReview?{kind:"review",reason:k.reason,rewards:b.rewards}:{kind:"reject",reason:k.reason,...k.kind==="review"?{requestedReview:!0}:k.code===void 0?{}:{code:k.code}})}let l=r.evaluate?await r.evaluate({settings:u,member:o.member,input:o.input,tracker:h,eligibleAt:o.eligibleAt,calendar:o.calendar,now:o.now,review:o.review,trackers:te(o.trackers),wallet:o.wallet,images:o.images,...o.telegram?{telegram:o.telegram}:{},...Object.fromEntries(s.map(b=>[b,o[b]]))}):E.accept();if(!l)throw new Error("Evaluator returned no decision");if(nr(l),l.kind==="review"&&!o.humanReview)return j.parse({kind:"reject",reason:l.reason,requestedReview:!0});(l.kind==="accept"||l.kind==="review")&&l.completionKey!==void 0&&a?.kind!=="keyed"&&o.diagnose?.({code:"completion-key-ignored",message:Pr(a,l.completionKey)});let Z={...o,settings:u,tracker:m};return j.parse(l.kind==="accept"||l.kind==="review"?{...l,rewards:l.rewards??o.rewards,...a?.kind==="keyed"||a?.kind==="progress"?{completionKey:a.kind==="progress"?a.distinct(Z):l.completionKey??a.key(Z)}:{}}:l)}})}}function Pr(e,t){let r=`ignores completionKey ${JSON.stringify(t)}`;switch(e?.kind){case void 0:return`A content quest completes once per content item, under a key Relay sets, so it ${r}`;case"once":return`once() completes the quest once per member and ${r}: use keyed(...) to complete it once per key`;case"streak":return`streak(...) keys its own completions and ${r}`;case"progress":return`progress(...) keys each contribution with its distinct(...) and ${r}: derive the key in distinct(...)`}}var Ct=cr(!1),zt=cr(!0);export{yr as CapabilityError,wt as automatic,qt as automaticFulfillment,pt as badge,fr as balanceAtLeast,yt as budget,Xr as calendar,vr as capabilityErrorCodes,gr as completed,vt as content,mr as cosmosDenomSchema,ur as cosmosNetworkSchema,Jr as count,V as customSource,E as decision,Wr as defineBadge,pr as defineCampaign,wr as defineDashboard,Hr as defineEngagementReward,hr as defineGroup,nt as defineLeaderboard,Fr as defineLedger,br as defineOffer,Ct as defineQuest,zt as defineQuestType,rt as defineReferral,Et as defineTieredReward,ot as defineTracker,st as discord,tt as earned,Mt as evaluators,ft as evidence,qr as formatUnits,ht as groupMembership,kr as inGroup,lr as isEvmChainId,xr as keyed,kt as manual,Dr as once,Sr as parseUnits,ut as pointLedgers,gt as points,Ar as progress,et as questCompleted,Yr as rolling,mt as settings,St as staffHandover,jr as streak,ct as telegram,dt as tiktok,z as trackerDataSchema,fe as trackerTriggerContextSchema,bt as untracked,at as x,it as youtube,dr as z};
|
|
1
|
+
import{$g as _,Ad as E,B as A,Bd as He,C as oe,Ce as F,D as se,E as ce,Ee as j,F as ie,Fb as Ce,Fd as q,G as ue,H as de,Hb as xe,He as at,I as le,Id as Ot,J as me,Jc as Ie,Mc as Oe,Nc as jt,Oc as Ne,Of as st,Pd as y,Pe as G,Pg as mt,Qc as Lt,Qd as Je,Rb as Me,Rc as Rt,Rd as C,Re as nt,Rf as ct,Sb as ze,Sc as Ke,Sf as it,Td as Nt,Tf as ut,Ua as K,Uf as dt,Va as ve,Vb as $e,Vc as Tt,Wa as U,Wc as Ue,X as ge,Xa as be,Xc as Bt,Y as he,Yc as Dt,Yh as ft,Ze as ot,Zg as gt,_b as Ae,_c as Ve,_g as ht,a as T,aa as pe,ba as B,bd as Pt,cd as It,dg as Zt,ea as fe,ed as Ze,eg as Qt,fa as N,fd as Qe,ga as ke,gg as Wt,ie as Kt,ja as we,jc as je,je as Ut,kc as Le,ke as Vt,le as Xe,lg as lt,mb as ye,mc as Re,me as Ye,nc as Te,oc as Be,od as Z,oe as et,pb as Se,pc as De,pd as D,qe as tt,r as Y,rc as At,s as ee,sc as Pe,sd as Q,se as rt,t as te,td as W,u as re,ub as Ee,uc as V,ud as We,v as ae,w as ne,wi as Ft,xd as Fe,xh as pt,yb as qe,yd as Ge,zd as _e}from"./chunks/ADUMK6CR.js";import{Cb as z,Ec as $,Kb as H,Pd as $t,fc as J,ic as O,jc as X,va as I,wc as R}from"./chunks/EWU4OKSY.js";function kt(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function Gt(e,r){kt(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 _t(e,r){kt(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 vt(e,r={}){let{trigger:t,completion:a,requires:n,performance:c,retryCooldownMs:i,completionCooldownMs:u,authorBudgets:o=[]}=e,g=t.kind==="automatic"?t.tracker:void 0,l=g?.content===!0;if(c&&!l)throw new Error("Performance requires a content quest");if(!g&&o.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(l){if(a.kind!=="keyed")throw new Error("Content quests complete once per content item");if(g.beneficiary!=="author"||g.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(t.kind==="automatic"&&!g){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 Ht=["author"],Jt=["author","messageAuthor"];function bt(e){if(!we(e))return[];switch(e.kind){case"x-search":return ge;case"discord-messages":return Ht;case"discord-reactions":return Jt;case"custom":return["author",...e.accounts??[]]}}var wt=new Map;function Xt(e){let r=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,t=wt.get(r);return t||(t=A(r==="messages-text"?re:r==="discord-messages"?te:ae),wt.set(r,t)),t}function yt(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return Xt(e);case"custom":return e.data}}function Er(e){return y("badge",mt.parse(e))}function qr(e){return y("ledger",lt.parse(e))}function Cr(e){let{target:r,ledger:t,...a}=e,n=gt.parse({...a,qualifiedBy:e.qualifiedBy.key,balance:C(t)}),c=R($(e.metrics),_.shape.target);return{key:n.key,describe:()=>n,score(i){let u=ht.parse(i);return _.parse({target:r({metrics:c.parse(u.metrics)}),baseline:r({metrics:c.parse(u.baseline)})})}}}var er=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 ye.strict().parse({kind:"streak",...e})},xr=e=>ve.brand().parse({kind:"count",count:e}),Mr=(e,r={})=>U.brand().parse({kind:"calendar",period:e,...r}),zr=({days:e})=>U.brand().parse({kind:"rolling",durationMs:e*864e5}),$r=e=>({kind:"quest",quest:e});function Ar(e){let{qualification:r,inviterGroup:t,milestones:a,bonuses:n,...c}=e,i=ft.parse({...c,qualification:r.kind==="quest"?{kind:"quest",quest:r.quest.key}:r,...t?{inviterGroup:T.parse(t.key)}:{},milestones:a?.map(({key:u,...o})=>({...o,id:q({key:u,...o})})),bonuses:n?.map(({key:u,ledger:o,quests:g,...l})=>({...l,id:q({key:u,...l}),balance:C(o),quests:g?.map(M=>M.key)}))});return y("referral",i)}function jr(e={}){return{kind:"earned",...e}}function Lr(e){let{ledger:r,group:t,score:a,settle:n,...c}=e,i=n?.pool,u=pt.parse({...c,...n?{settle:{...n,prizes:n.prizes??[],...i?{pool:{...i,...i.ledger===void 0?{}:{ledger:C(i.ledger)}}}:{}}}:{},balance:C(r),...t?{group:T.parse(t.key)}:{},score:a?.kind==="earned"?{...a,quests:a.quests?.map(o=>o.key)}:a});return y("leaderboard",u)}var Rr={provider:"x",search:e=>pe.parse({kind:"x-search",...e})};function L(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(!St(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)he.parse(i);return B.parse({kind:"custom",namespace:e,...n,data:A(O({body:a.body,metrics:X(Object.fromEntries(c.map(i=>[i,z().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!St(t))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return B.parse({kind:"custom",namespace:e,...n,data:A(t)})}function St(e){return typeof e=="object"&&e!==null&&"_zod"in e}function Tr(e){return y("tracker",ke.parse(e))}function tr(e={}){return Y.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function rr(){return ee.parse({kind:"discord-reactions"})}var Br={provider:"discord",grantRole:e=>ne.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),postMessage(e){return Te.parse({provider:"discord",action:"post-message",...e})},messages:tr,reactions:rr,roles(e={}){return D.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return D.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"],...e.postable?{postable:!0}:{}})}},Dr={postMessage(e){return Re.parse({provider:"telegram",action:"post-message",...e})},messages(){return L(ue,{identities:["member"],data:Le})},reactions(){return L(ie,{identities:["member"],accounts:["messageAuthor"],data:je})}},Pr={shorts(){return L(de,{identities:["member"],content:{body:ct,metrics:it}})}},Ir={videos(){return L(le,{identities:["member"],content:{body:ut,metrics:dt}})}};function ar(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"||r===V){if(a!==null&&!De.safeParse(a).success)throw new Error("wallet.balances() on Solana takes an SPL or Token-2022 mint address (base58)");return{chain:V,token:a}}if(typeof r=="string"&&Ie(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||!Pe.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"')}var Or={balances(e){let r=ar(e),t=L(me,{identities:["wallet"],data:Oe});return B.parse({...t,balance:r})}},Nr=()=>({provider:"domino",resource:"point-ledger"});function p(e,r){return r}var Kr={pointLedger(e){let r={...e,kind:"point-ledger",default:e.default?T.parse(e.default.key):""};return p("point-ledger",Je.prefault(r.default).meta(r))},datetime(e){let r={...e,kind:"datetime",default:Q.parse(e.default)};return p("datetime",Q.default(r.default).meta(r))},resource(e){let r={...e,source:D.parse(e.source),kind:"resource",default:W.parse(e.default??"")};return p("resource",W.default(r.default).meta(r))},quiz(e){let r=Z.parse(e.default);return p("quiz",Z.default(r).meta({...e,default:r,kind:"quiz"}))},text(e){let r={...e,kind:"text",minLength:e.minLength??1,maxLength:e.maxLength??2e3,multiline:e.multiline??!1};return p("text",I().min(r.minLength).max(r.maxLength).default(r.default).meta(r))},telegramChat(e){let r={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return p("text",I().max(r.maxLength).default(r.default).meta(r))},amount(e){if(!Fe(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(!Ge(e.default))throw new Error(`settings.chain() takes "solana" 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(!Ne(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(!Ke(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(!Ue(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(!Ve(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",z().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return p("boolean",H().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return p("choice",$(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return O(e).strict()}};function qt(e,r){let t=e.balanceChanges.find(a=>a.mint===r);return t?BigInt(t.delta):0n}function Vr(e,r){let t=qt(e,r);return t>0n?t.toString():"0"}function Zr(e,r){let t=qt(e,r);return t<0n?(-t).toString():"0"}function Qr(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 Wr(e,r){return e.programs.includes(r)}function Fr(e,r){return e.instructions?.find(t=>t.name===r)?.args??null}var Gr=e=>tt(e.key,e.name),_r=e=>rt(e.key,e.title),Hr=(e,r)=>Xe.parse({kind:"points",balance:C(e),amount:r}),Jr={text:(e={})=>({input:"text",constraints:Ze.parse(e)}),url:(e={})=>({input:"url",constraints:Qe.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function Xr(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 Ct=new WeakMap,xt=new WeakMap;function Mt(e,r){let{tracker:t,beneficiary:a="author",on:n,where:c,enrollment:i,since:u,historical:o,content:g}=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:l}=t;if(!fe(l))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(g&&!N(l))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 M=bt(l);if(!M.includes(a))throw new Error(l.kind==="custom"?`Tracker "${t.key}" has no "${a}" account: declare it in customSource(namespace, { accounts: ["${a}"] })`:`Tracker "${t.key}" pays ${M.map(S=>`"${S}"`).join(" or ")}, not "${a}"`);let s=qe.parse({tracker:t.key,source:l.kind,on:g?"new-record":n??Se(l.kind),...c?{where:c}:{},beneficiary:a,...i==="required"?{enrollment:i}:{},...u&&u!=="activation"?{since:u}:{},...o&&o!==(g?"claim":"staff")?{historical:o}:{},...g?{content:g}:{}}),d=yt(l),f=d?ce(d,s.where):null;if(f)throw new Error(f);let b={kind:"automatic",tracker:s};d&&Ct.set(b,d);let w=N(l);return w&&xt.set(b,w.metrics),b}function Yr(e){return e?Mt(e,"automatic"):{kind:"automatic"}}function ea(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 Mt({...e,content:!0},"content")}function nr(e){let{key:r,cost:t,...a}=e,n={...a,id:q(e),cost:typeof t=="number"?t:{balance:C(t.ledger)}};return a.scope==="author"?ze.parse(n):Me.parse(n)}var ta=nr,or=(e=[])=>e.filter(r=>r.scope==="author"),sr=e=>({kind:"keyed",key:e}),cr=e=>{let{distinct:r,...t}=e;return{...be.parse({kind:"progress",window:{kind:"lifetime"},...t}),distinct:r}},ra=()=>({kind:"untracked"}),aa=()=>({kind:"staff-handover"}),na=()=>({kind:"automatic"});function oa(e){let{key:r,tiers:t,...a}=e,n=q(e),c=Ye.parse({id:n,...a,tiers:t.map(({key:i,...u})=>({...u,id:q({key:i,...u})}))});return y("tiered-reward",{key:c.id,tier:i=>et.parse({kind:"tier",reward:c,tier:i})})}var ir=()=>({kind:"once"});function ur(e={}){return{kind:"accept",...e}}function dr(e){return{kind:"review",...e}}var x={accept:ur,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:dr};function Et(e){let r=e.kind==="reject"&&e.code!==void 0?xe(e.code):null;if(r)throw new Error(r)}var sa={quiz(e,r={}){let t=ot.parse(e),a=Object.keys(t),n=z().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(o=>Object.hasOwn(c.answers,o)),u=a.filter(o=>c.answers[o]===t[o]).length;return i&&u>=n?x.accept():x.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"?x.review({reason:a.reason}):x.reject({reason:a.reason}):a.kind==="pass"?x.accept():x.reject({reason:a.reason})}}},lr={once:ir,keyed:sr,streak:er,progress:cr};function zt(e){return function(t){let a=q(t),n=[...new Set((t.integrations??[]).map(s=>$e.parse(s.provider)))],c=t.trigger.kind==="automatic"&&t.trigger.tracker?.content===!0,i=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0,u=t.completion,o=typeof u=="function"?u(lr):u;if(c&&o!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!c&&o===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");let g=or(t.budgets);if(vt({trigger:t.trigger,completion:o??{kind:"keyed"},requires:t.requires??[],authorBudgets:g,performance:t.performance?K.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 s=xt.get(t.trigger)??[],d=t.performance.metrics.filter(f=>!s.includes(f));if(d.length)throw new Error(`The tracker's source does not measure ${d.join(", ")}`)}if(t.trigger.kind==="manual"&&t.trigger.input!=="none"&&!t.evaluate)throw new Error("Evidence quests require an evaluator");let l=Object.fromEntries(Object.entries(t.settings.shape).map(([s,d])=>{let f=We.safeParse(d.meta());if(!f.success)throw new Error(`Setting "${s}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);return[s,f.data]}));for(let s of Ee(t.trigger.kind==="automatic"?t.trigger.tracker?.where:void 0))if(!_e(l[s]))throw new Error(`The tracker filter compares with setting "${s}", which is not an integer or amount setting`);function M(s){let d=t.settings.parse(s),f=He(l,d),b=at.parse(typeof t.rewards=="function"?t.rewards({settings:d}):t.rewards),w=J(Be).max(3,"A quest posts at most three announcements").parse((typeof t.announcements=="function"?t.announcements({settings:d}):t.announcements)??[]),S=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0;for(let m of w){let v=Ae(m.text),P="segments"in v&&v.segments.some(k=>k.kind==="placeholder"&&k.name==="author");if(!S&&P)throw new Error("An announcement names {author} only on a quest with an automatic tracker trigger");if(!S&&m.replyToTriggeringMessage)throw new Error("An announcement replies to the triggering message only on a quest with an automatic tracker trigger")}let h=[...b.flatMap(m=>m.kind==="integration"?[m.provider]:[]),...w.flatMap(m=>m.provider==="discord"?["discord"]:[]),...Object.values(l).flatMap(m=>m.kind==="resource"&&m.source.provider!=="domino"?[m.source.provider]:[])];for(let m of h)if(!n.includes(m))throw new Error(`Declare the ${m} integration on this quest`);return nt.parse({quest:a,evaluatorProtocol:G,title:typeof t.title=="function"?t.title({settings:d}):t.title,presentation:t.presentation?.({settings:d})??{},fields:l,values:f,rewards:b,...w.length?{announcements:w}:{},humanReview:t.review?.({settings:d})?.enabled??!0,trigger:t.trigger,...t.performance?{performance:K.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs})}:{},integrations:n,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:t.visibility??"visible",profile:t.profile??{visible:!1},budgets:(t.budgets??[]).filter(m=>m.scope!=="author"),...g.length?{authorBudgets:g}:{},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 y("quest",{protocol:G,key:a,describe:M,async evaluate(s){let d=t.settings.parse(s.settings),f=i?Ce.parse(s.tracker):null,b=Ct.get(t.trigger),w=f&&b?oe(b,f.record.data):null;if(w)return j.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${w.path} ${w.reason}`});let S=f;if(s.performance){if(!t.performance)throw new Error("Quest has no performance evaluator");let v=st.parse(s.performance),P=R($(t.performance.metrics),z().int().safe().nonnegative()).parse(v.metrics),k=await t.performance.evaluate({settings:d,member:s.member,tracker:S,metrics:P,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 Et(k),j.parse(k.kind==="accept"?{kind:"accept",rewards:v.rewards}:k.kind==="review"&&s.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:d,member:s.member,input:s.input,tracker:S,eligibleAt:s.eligibleAt,calendar:s.calendar,now:s.now,review:s.review,trackers:se(s.trackers),wallet:s.wallet,images:s.images,...s.telegram?{telegram:s.telegram}:{},...Object.fromEntries(n.map(v=>[v,s[v]]))}):x.accept();if(!h)throw new Error("Evaluator returned no decision");if(Et(h),h.kind==="review"&&!s.humanReview)return j.parse({kind:"reject",reason:h.reason,requestedReview:!0});(h.kind==="accept"||h.kind==="review")&&h.completionKey!==void 0&&o?.kind!=="keyed"&&s.diagnose?.({code:"completion-key-ignored",message:mr(o,h.completionKey)});let m={...s,settings:d,tracker:f};return j.parse(h.kind==="accept"||h.kind==="review"?{...h,rewards:h.rewards??s.rewards,...o?.kind==="keyed"||o?.kind==="progress"?{completionKey:o.kind==="progress"?o.distinct(m):h.completionKey??o.key(m)}:{}}:h)}})}}function mr(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 ca=zt(!1),ia=zt(!0);export{Wt as CapabilityError,Yr as automatic,na as automaticFulfillment,Gr as badge,Ut as balanceAtLeast,ta as budget,Mr as calendar,Qt as capabilityErrorCodes,Kt as completed,ea as content,Pe as cosmosDenomSchema,At as cosmosNetworkSchema,xr as count,L as customSource,x as decision,Er as defineBadge,Ot as defineCampaign,Zt as defineDashboard,Cr as defineEngagementReward,Nt as defineGroup,Lr as defineLeaderboard,qr as defineLedger,Ft as defineOffer,ca as defineQuest,ia as defineQuestType,Ar as defineReferral,oa as defineTieredReward,Tr as defineTracker,Br as discord,jr as earned,sa as evaluators,Jr as evidence,_t as formatUnits,_r as groupMembership,Vt as inGroup,Fr as instruction,Wr as invoked,Ke as isContractCall,Ue as isContractEvent,Ie as isEvmChainId,Ne as isNftCollection,Ve as isSolanaProgram,sr as keyed,Xr as manual,Bt as maxWalletEventLogs,Dt as maxWalletEventLookback,It as maxWalletTransactionLookback,Pt as maxWalletTransactions,ir as once,Rt as parseContractCall,Tt as parseContractEvent,Lt as parseContractFunction,jt as parseNftCollection,Gt as parseUnits,Nr as pointLedgers,Hr as points,cr as progress,$r as questCompleted,Vr as received,zr as rolling,Kr as settings,Zr as spent,aa as staffHandover,er as streak,Qr as swapped,Dr as telegram,Ir as tiktok,A as trackerDataSchema,Ce as trackerTriggerContextSchema,ra as untracked,Or as wallet,Rr as x,Pr as youtube,$t as z};
|