@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.
- package/CHANGELOG.md +65 -0
- package/dist/{accounts-C2O8mpB8.d.ts → accounts-DD4gAOCe.d.ts} +232 -3
- package/dist/{action-9Xl0StBg.d.ts → action-BDFKqGlH.d.ts} +3 -2
- package/dist/{attempt-captures-ClHAoo_n.d.ts → attempt-captures-CbuCmthd.d.ts} +11 -2
- package/dist/authoring.d.ts +534 -48
- package/dist/authoring.js +192 -29
- package/dist/{automatic-outcomes-BEnPn4Uh.d.ts → automatic-outcomes-DE3vfi8g.d.ts} +11 -3
- package/dist/avatar.d.ts +2 -1
- package/dist/browser.d.ts +15 -13
- package/dist/browser.js +12 -13
- package/dist/{capability-error-CuI_F7yM.d.ts → capability-error-db7kO8-P.d.ts} +2 -1
- package/dist/{catalog-CbiftcxQ.d.ts → catalog-Cf3fHDNn.d.ts} +69 -3
- package/dist/{chunk-5DZNMLDM.js → chunk-2A3BJ262.js} +2 -2
- package/dist/{chunk-BQXRCJ3N.js → chunk-5RLIPTL7.js} +1 -1
- package/dist/{chunk-MVQQDPQX.js → chunk-AZDZEQFK.js} +14 -2
- package/dist/{chunk-JK3XV2CR.js → chunk-BRROI4CH.js} +50 -8
- package/dist/{chunk-P33ZAJMS.js → chunk-CQVKOD3B.js} +1266 -677
- package/dist/{chunk-QYC3CZVD.js → chunk-CZ23KRVK.js} +2 -2
- package/dist/{chunk-X3FMVRMM.js → chunk-DIXYVGXO.js} +1 -1
- package/dist/{chunk-RDUSFUXX.js → chunk-GEVARKEV.js} +9 -1
- package/dist/{chunk-2HHZV7U3.js → chunk-LDO5GP7G.js} +1 -1
- package/dist/{chunk-Z2Z5DBNW.js → chunk-LGGD7S5T.js} +45 -9
- package/dist/{chunk-U66GUVSG.js → chunk-LZXDYSUH.js} +2 -0
- package/dist/{chunk-NRMQVK2W.js → chunk-ME2KUAVJ.js} +1 -1
- package/dist/{chunk-KUNPCDN6.js → chunk-ODJGTFPY.js} +16 -9
- package/dist/{chunk-DSJ46QLB.js → chunk-PO2ZDY27.js} +1 -1
- package/dist/{chunk-RWR2LOPA.js → chunk-RKTMSTT7.js} +2 -2
- package/dist/{chunk-5SBA6X5X.js → chunk-SWLW4VN3.js} +2 -2
- package/dist/{chunk-BMJHFWVT.js → chunk-TCREFRPK.js} +10 -43
- package/dist/{chunk-Q5QVAF7R.js → chunk-UGM6DUB2.js} +42 -25
- package/dist/chunk-VAGGGB6B.js +87 -0
- package/dist/{chunk-FGXLXENM.js → chunk-VNEJH4NT.js} +47 -3
- package/dist/chunk-WNEQEDMU.js +427 -0
- package/dist/{chunk-Q6KTTVOI.js → chunk-WVK3G2J2.js} +1 -1
- package/dist/{client-CZPewB9h.d.ts → client-6eSYOl8h.d.ts} +159 -11
- package/dist/{dashboards-jGPM3AxF.d.ts → dashboards-DCOAXL54.d.ts} +6 -5
- package/dist/{deployments-BVFd7ddA.d.ts → deployments-BIfdCMd5.d.ts} +911 -309
- package/dist/{host-environment-FN4zg3hw.d.ts → host-environment-DUw5-Cvj.d.ts} +2 -1
- package/dist/{identity-integration-W1Vo3Ql9.d.ts → identity-integration-BlfOn8rc.d.ts} +3 -2
- package/dist/index.d.ts +16 -15
- package/dist/index.js +10 -10
- package/dist/internal.d.ts +155 -17
- package/dist/internal.js +266 -19
- package/dist/{limits-C4RzrOV4.d.ts → limits-Ctaeq23J.d.ts} +8 -2
- package/dist/{offers-BpYenB9i.d.ts → offers-COqHGbHm.d.ts} +4 -3
- package/dist/{participant-activity-DXRq4s6K.d.ts → participant-activity-BznrcePT.d.ts} +2 -1
- package/dist/{participant-rewards-BcWkBRn_.d.ts → participant-rewards-s5Gn23qb.d.ts} +23 -1
- package/dist/portal-proxy.d.ts +7 -4
- package/dist/portal-proxy.js +14 -18
- package/dist/profiles-CLDKZVFx.d.ts +370 -0
- package/dist/react/index.d.ts +71 -30
- package/dist/react/index.js +12 -13
- package/dist/{request-error-D_dUPLwo.d.ts → request-error-C24SY7n9.d.ts} +2 -1
- package/dist/{reward-deliveries-BOWpMytr.d.ts → reward-deliveries-DFhYGJdx.d.ts} +3 -2
- package/dist/runtime/authoring.js +1 -1
- package/dist/runtime/chunks/HKAI5OQA.js +1 -0
- package/dist/runtime/manifest.json +3 -3
- package/dist/runtime/schema.js +1 -1
- package/dist/schema.d.ts +556 -180
- package/dist/schema.js +70 -8
- package/dist/server/index.d.ts +15 -14
- package/dist/server/index.js +2053 -893
- package/dist/{sign-in-providers-BRYVOSlG.d.ts → sign-in-providers-C97mRNbG.d.ts} +4 -3
- package/dist/solana.d.ts +287 -0
- package/dist/solana.js +699 -0
- package/dist/{streaks-0YuipsUQ.d.ts → streaks-MAqKHbHC.d.ts} +2 -1
- package/dist/{submission-input-C152xIdn.d.ts → submission-input-BD7nORuh.d.ts} +4 -3
- package/dist/{telegram-browser-657QqiQl.d.ts → telegram-browser-gRMgGs7B.d.ts} +8 -109
- package/dist/telegram.d.ts +14 -12
- package/dist/telegram.js +2 -2
- package/dist/testing.d.ts +99 -18
- package/dist/testing.js +101 -11
- package/dist/{tracker-data-BqY-9Vu-.d.ts → tracker-data-DQgX3FIc.d.ts} +493 -1
- package/dist/{transport-CthYgZXK.d.ts → transport-BLU8jrhg.d.ts} +7340 -2134
- package/dist/vite.d.ts +2 -1
- package/dist/{wallet-Btng186v.d.ts → wallet-CPAjrW4k.d.ts} +339 -308
- package/dist/wallet-browser-BzPt_Qb5.d.ts +107 -0
- package/package.json +21 -3
- package/dist/chunk-UWUS4OOV.js +0 -59
- package/dist/chunk-UYVJZR33.js +0 -34
- package/dist/runtime/chunks/C2MGLQXC.js +0 -1
package/dist/react/index.d.ts
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
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 {
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
import '../
|
|
19
|
-
import '../
|
|
20
|
-
|
|
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" | "
|
|
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" | "
|
|
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?: "
|
|
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: "
|
|
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" | "
|
|
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" | "
|
|
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?: "
|
|
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: "
|
|
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" | "
|
|
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" | "
|
|
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" | "
|
|
2476
|
-
avatarProvider: "discord" | "
|
|
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" | "
|
|
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 {
|
|
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 };
|
package/dist/react/index.js
CHANGED
|
@@ -8,25 +8,24 @@ import {
|
|
|
8
8
|
discoverSolanaWallets,
|
|
9
9
|
readSignInMethods,
|
|
10
10
|
signInOptionsFrom
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-TCREFRPK.js";
|
|
12
12
|
import {
|
|
13
13
|
telegramMiniAppInitData
|
|
14
14
|
} from "../chunk-FWLQ5XCS.js";
|
|
15
|
-
import "../chunk-
|
|
15
|
+
import "../chunk-LGGD7S5T.js";
|
|
16
16
|
import {
|
|
17
17
|
createRelayAction
|
|
18
|
-
} from "../chunk-
|
|
19
|
-
import "../chunk-
|
|
20
|
-
import "../chunk-
|
|
21
|
-
import "../chunk-
|
|
22
|
-
import "../chunk-
|
|
23
|
-
import "../chunk-
|
|
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-
|
|
28
|
-
import "../chunk-
|
|
29
|
-
import "../chunk-
|
|
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-
|
|
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,
|
|
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-
|
|
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 $,
|
|
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};
|