@domino-sdk/relay 1.55.0 → 1.56.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/authoring.d.ts +146 -64
  3. package/dist/authoring.js +36 -6
  4. package/dist/browser.d.ts +5 -5
  5. package/dist/browser.js +10 -10
  6. package/dist/{chunk-VFBQVY4X.js → chunk-ABJ4G47X.js} +1 -1
  7. package/dist/{chunk-YCOKTQ4E.js → chunk-BHHUSBSD.js} +1 -1
  8. package/dist/{chunk-C7QZ4UBB.js → chunk-BJYMTCWG.js} +16 -3
  9. package/dist/{chunk-YEVD4A5X.js → chunk-CK7HO32Z.js} +1 -1
  10. package/dist/{chunk-IUF7DW76.js → chunk-CXKXPB7K.js} +12 -7
  11. package/dist/{chunk-WUEQOKJH.js → chunk-G6XVBYH7.js} +4 -4
  12. package/dist/{chunk-SABMNPF2.js → chunk-H2MD6E7Z.js} +1 -1
  13. package/dist/{chunk-WHG5WE43.js → chunk-INSWI2VZ.js} +1 -1
  14. package/dist/{chunk-TLK2MD4S.js → chunk-KBVH4XZC.js} +1 -1
  15. package/dist/{chunk-MLIXJPKL.js → chunk-MHPKEVEW.js} +1 -0
  16. package/dist/{chunk-XALIFNMD.js → chunk-MNU6UPXY.js} +1 -1
  17. package/dist/{chunk-GL43VQ5D.js → chunk-NK6EER33.js} +38 -8
  18. package/dist/{chunk-IZRITLVV.js → chunk-OTITLABX.js} +2 -2
  19. package/dist/{chunk-56DBFNR2.js → chunk-QNQNKIAA.js} +1 -1
  20. package/dist/{chunk-UY6KMLQG.js → chunk-RBPMT53S.js} +125 -99
  21. package/dist/{chunk-F6HECAXA.js → chunk-ULQU7KC4.js} +144 -101
  22. package/dist/{chunk-WHMXXHPX.js → chunk-VSHV7FEA.js} +1 -1
  23. package/dist/{chunk-YE3XYB2F.js → chunk-W5U2WXG3.js} +2 -2
  24. package/dist/{client-C4zUZKpj.d.ts → client-bX3oTpRu.d.ts} +79 -4
  25. package/dist/{deployments-B32QS1CI.d.ts → deployments-D3lxfQMB.d.ts} +824 -400
  26. package/dist/{groups-O6onGPmC.d.ts → groups-DPE004_V.d.ts} +4 -2
  27. package/dist/index.d.ts +5 -5
  28. package/dist/index.js +9 -9
  29. package/dist/{integrations-C6_uUh-s.d.ts → integrations-CcD5NPEA.d.ts} +50 -1
  30. package/dist/internal.d.ts +5 -5
  31. package/dist/internal.js +9 -9
  32. package/dist/{offers-BMDNcvwB.d.ts → offers-CtzMeB7O.d.ts} +206 -1
  33. package/dist/{pages-BFloMpyQ.d.ts → pages-BlLqB8ZQ.d.ts} +57 -1
  34. package/dist/portal-proxy.js +4 -4
  35. package/dist/react/index.d.ts +86 -8
  36. package/dist/react/index.js +65 -10
  37. package/dist/runtime/authoring.js +1 -1
  38. package/dist/runtime/chunks/NDB42VFF.js +1 -0
  39. package/dist/runtime/manifest.json +3 -3
  40. package/dist/runtime/schema.js +1 -1
  41. package/dist/schema.d.ts +634 -388
  42. package/dist/schema.js +30 -10
  43. package/dist/server/index.d.ts +5 -5
  44. package/dist/server/index.js +1232 -1072
  45. package/dist/{submission-input-BbdawqVy.d.ts → submission-input-wTiYGdgA.d.ts} +1 -1
  46. package/dist/{telegram-browser-CwaxROAZ.d.ts → telegram-browser-Bh3i0HiH.d.ts} +1 -1
  47. package/dist/testing.js +5 -5
  48. package/dist/{transport-CZJOW5Sr.d.ts → transport-CnKA-_RL.d.ts} +6451 -4210
  49. package/package.json +1 -1
  50. package/dist/runtime/chunks/WKATKZXE.js +0 -1
@@ -1,7 +1,8 @@
1
- import { B as Badge, b as MemberBadges, O as Offer, e as Redemption } from '../offers-BMDNcvwB.js';
1
+ import { B as Badge, b as MemberBadges, O as Offer, e as Redemption } from '../offers-CtzMeB7O.js';
2
2
  import { b as ParticipantSession, R as RelayEvent, P as ParticipantActivity, M as MemberSummary } from '../participant-activity-iciCEs_8.js';
3
- import { g as RelayError, R as RelayClient, m as SubmissionDraft } from '../client-C4zUZKpj.js';
4
- import { P as Page, D as collectionViewSchema, j as QuestView, g as QuestOutcomeQuery, e as QuestOutcome } from '../pages-BFloMpyQ.js';
3
+ import { g as RelayError, R as RelayClient, m as SubmissionDraft } from '../client-bX3oTpRu.js';
4
+ import { P as Page, G as collectionViewSchema, l as QuestView, a as CreatorAccountProvider, i as QuestOutcomeQuery, g as QuestOutcome } from '../pages-BlLqB8ZQ.js';
5
+ export { C as CreatorAccount, b as CreatorAccounts } from '../pages-BlLqB8ZQ.js';
5
6
  import * as react from 'react';
6
7
  import { ReactNode } from 'react';
7
8
  import { J as JSONType } from '../util.d-w9f9t3ua.js';
@@ -9,12 +10,12 @@ import { z } from 'zod';
9
10
  import { E as Entitlement, a as AttemptStatus, f as PointEntry, e as PointBalances, j as PointLedgerReference, T as TieredRewardReference } from '../schema-C4m9RhCR.js';
10
11
  import { a as AuthProvider, A as AccountConnection } from '../accounts-DRPENuZe.js';
11
12
  export { T as TelegramAccountConnection, b as TelegramSignInMethods } from '../accounts-DRPENuZe.js';
12
- import { c as SignInMethods, C as CosmosChains, d as SignInOption, f as SignInUnavailable, T as TelegramSignInOption, g as SignInWallet, D as DiscoveredWallet } from '../telegram-browser-CwaxROAZ.js';
13
- export { a as EmailSignInOption, O as OAuthSignInOption, b as SignInIcon, W as WalletSignInOption, t as telegramMiniAppInitData } from '../telegram-browser-CwaxROAZ.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-Bh3i0HiH.js';
14
+ export { a as EmailSignInOption, O as OAuthSignInOption, b as SignInIcon, W as WalletSignInOption, t as telegramMiniAppInitData } from '../telegram-browser-Bh3i0HiH.js';
14
15
  import { f as WalletSigner, d as WalletSignInNetwork, L as LinkedWallet } from '../wallet-Ac7OFpOr.js';
15
- import { h as LeaderboardPlacement, b0 as referralSummarySchema, g as LeaderboardPage } from '../groups-O6onGPmC.js';
16
+ import { h as LeaderboardPlacement, b0 as referralSummarySchema, g as LeaderboardPage } from '../groups-DPE004_V.js';
16
17
  import { f as ProfileUpdate, e as ProfileSummary, a as ProfileCompletion, d as ProfileReferral } from '../profiles-BoOK03cR.js';
17
- import '../submission-input-BbdawqVy.js';
18
+ import '../submission-input-wTiYGdgA.js';
18
19
  import '../action-DBzILFx9.js';
19
20
 
20
21
  /**
@@ -2078,6 +2079,83 @@ declare function useTelegramAccount(): {
2078
2079
  error: RelayError | null;
2079
2080
  refresh(): Promise<void>;
2080
2081
  };
2082
+ /**
2083
+ * The signed-in participant's creator accounts in `data` (`{ accounts }`): the platform accounts
2084
+ * they publish from, such as a YouTube channel. Creator accounts are not `useAccounts()`'s
2085
+ * providers in SDK 1.x, so they have this hook of their own, with the same behavior: `connect()`
2086
+ * leaves for the provider's consent screen and comes back linked, linking another account on the
2087
+ * same platform replaces it, and a failure lands in `actionError`.
2088
+ */
2089
+ declare function useCreatorAccounts(): {
2090
+ connect: (provider: CreatorAccountProvider) => Promise<boolean>;
2091
+ disconnect: (provider: CreatorAccountProvider) => Promise<boolean>;
2092
+ isPending: boolean;
2093
+ actionError: RelayError | null;
2094
+ resetAction: () => void;
2095
+ retry: () => Promise<boolean>;
2096
+ settle: () => boolean;
2097
+ /** True when the member's account on `provider` is linked and readable right now. */
2098
+ isConnected: (provider: CreatorAccountProvider) => boolean;
2099
+ status: "loading";
2100
+ data: undefined;
2101
+ error: null;
2102
+ refresh(): Promise<void>;
2103
+ } | {
2104
+ connect: (provider: CreatorAccountProvider) => Promise<boolean>;
2105
+ disconnect: (provider: CreatorAccountProvider) => Promise<boolean>;
2106
+ isPending: boolean;
2107
+ actionError: RelayError | null;
2108
+ resetAction: () => void;
2109
+ retry: () => Promise<boolean>;
2110
+ settle: () => boolean;
2111
+ /** True when the member's account on `provider` is linked and readable right now. */
2112
+ isConnected: (provider: CreatorAccountProvider) => boolean;
2113
+ status: "error";
2114
+ data: undefined;
2115
+ error: RelayError;
2116
+ refresh(): Promise<void>;
2117
+ } | {
2118
+ connect: (provider: CreatorAccountProvider) => Promise<boolean>;
2119
+ disconnect: (provider: CreatorAccountProvider) => Promise<boolean>;
2120
+ isPending: boolean;
2121
+ actionError: RelayError | null;
2122
+ resetAction: () => void;
2123
+ retry: () => Promise<boolean>;
2124
+ settle: () => boolean;
2125
+ /** True when the member's account on `provider` is linked and readable right now. */
2126
+ isConnected: (provider: CreatorAccountProvider) => boolean;
2127
+ status: "signed-out";
2128
+ data: undefined;
2129
+ error: null;
2130
+ refresh(): Promise<void>;
2131
+ } | {
2132
+ connect: (provider: CreatorAccountProvider) => Promise<boolean>;
2133
+ disconnect: (provider: CreatorAccountProvider) => Promise<boolean>;
2134
+ isPending: boolean;
2135
+ actionError: RelayError | null;
2136
+ resetAction: () => void;
2137
+ retry: () => Promise<boolean>;
2138
+ settle: () => boolean;
2139
+ /** True when the member's account on `provider` is linked and readable right now. */
2140
+ isConnected: (provider: CreatorAccountProvider) => boolean;
2141
+ status: "ready";
2142
+ data: {
2143
+ accounts: {
2144
+ provider: CreatorAccountProvider;
2145
+ configured: boolean;
2146
+ status: "disconnected" | "connected" | "reconnect";
2147
+ subject: string | null;
2148
+ revision: number;
2149
+ profile: {
2150
+ name?: string | undefined;
2151
+ username?: string | undefined;
2152
+ imageUrl?: string | undefined;
2153
+ } | null;
2154
+ }[];
2155
+ };
2156
+ error: RelayError | null;
2157
+ refresh(): Promise<void>;
2158
+ };
2081
2159
 
2082
2160
  /**
2083
2161
  * The signed-in participant's linked Solana, EVM and Cosmos wallets, in `data`.
@@ -2451,4 +2529,4 @@ declare function usePointLedgers(): Query<PointLedgerReference[]>;
2451
2529
  */
2452
2530
  declare function useTieredRewards(): Query<TieredRewardReference[]>;
2453
2531
 
2454
- export { type Collection, CosmosChains, DiscoveredWallet, type ExperienceData, type Invitation, type KnownQuestStatusCode, type KnownRoleDeliveryStatus, type MemberPagedQuery, type MemberQuery, type MemberQueryOptions, type MemberSnapshot, type Mutation, type MutationContext, type MutationOptions, type MutationStatus, type OAuthProvider, Page, type PageLoader, type PageRead, type PagedQuery, type Query, type QueryContext, type QueryKey, type QueryOptions, type QueryRead, type QuerySnapshot, type QuestActionState, type QuestInput, type QuestNotice, type QuestStatus, type QuestStatusCode, type QuestStatusText, type QuestTone, type ReferralSummary, type RelayActionResult, RelayClient, type RelayPolling, RelayProvider, type RelayQueryOptions, type RoleDelivery, type RoleDeliveryStatus, type SavedSubmission, SignInMethods, SignInOption, SignInUnavailable, SignInWallet, TelegramSignInOption, canRepeat, canSubmit, captureReferralCode, completionCountText, isAutomatic, isConnected, isCoolingDown, isFinished, progressOf, questActionState, questGroups, questStatus, questStatusText, relayKeys, roleDeliveryLabel, roleDeliveryStatus, useAccounts, useActivity, useBadgeCatalog, useBadges, useBalances, 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 };
2532
+ export { type Collection, CosmosChains, CreatorAccountProvider, DiscoveredWallet, type ExperienceData, type Invitation, type KnownQuestStatusCode, type KnownRoleDeliveryStatus, type MemberPagedQuery, type MemberQuery, type MemberQueryOptions, type MemberSnapshot, type Mutation, type MutationContext, type MutationOptions, type MutationStatus, type OAuthProvider, Page, type PageLoader, type PageRead, type PagedQuery, type Query, type QueryContext, type QueryKey, type QueryOptions, type QueryRead, type QuerySnapshot, type QuestActionState, type QuestInput, type QuestNotice, type QuestStatus, type QuestStatusCode, type QuestStatusText, type QuestTone, type ReferralSummary, type RelayActionResult, RelayClient, type RelayPolling, RelayProvider, type RelayQueryOptions, type RoleDelivery, type RoleDeliveryStatus, type SavedSubmission, SignInMethods, SignInOption, SignInUnavailable, SignInWallet, TelegramSignInOption, canRepeat, canSubmit, captureReferralCode, completionCountText, isAutomatic, isConnected, isCoolingDown, isFinished, progressOf, questActionState, questGroups, questStatus, questStatusText, relayKeys, roleDeliveryLabel, roleDeliveryStatus, useAccounts, useActivity, useBadgeCatalog, useBadges, useBalances, 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 };
@@ -9,20 +9,20 @@ import {
9
9
  readSignInMethods,
10
10
  signInOptionsFrom,
11
11
  telegramMiniAppInitData
12
- } from "../chunk-IZRITLVV.js";
13
- import "../chunk-GL43VQ5D.js";
12
+ } from "../chunk-OTITLABX.js";
13
+ import "../chunk-NK6EER33.js";
14
14
  import {
15
15
  createRelayAction
16
- } from "../chunk-WHG5WE43.js";
17
- import "../chunk-UY6KMLQG.js";
18
- import "../chunk-C7QZ4UBB.js";
19
- import "../chunk-WHMXXHPX.js";
16
+ } from "../chunk-INSWI2VZ.js";
17
+ import "../chunk-RBPMT53S.js";
18
+ import "../chunk-BJYMTCWG.js";
19
+ import "../chunk-VSHV7FEA.js";
20
20
  import "../chunk-KDR2VAJP.js";
21
- import "../chunk-TLK2MD4S.js";
22
- import "../chunk-VFBQVY4X.js";
21
+ import "../chunk-KBVH4XZC.js";
22
+ import "../chunk-ABJ4G47X.js";
23
23
  import {
24
24
  sessionMember
25
- } from "../chunk-56DBFNR2.js";
25
+ } from "../chunk-QNQNKIAA.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-YCOKTQ4E.js";
33
+ } from "../chunk-BHHUSBSD.js";
34
34
 
35
35
  // src/react/context.ts
36
36
  import { createContext, useContext } from "react";
@@ -2777,6 +2777,60 @@ function useTelegramAccount() {
2777
2777
  ]
2778
2778
  );
2779
2779
  }
2780
+ function useCreatorAccounts() {
2781
+ const relay = useRelay();
2782
+ const invalidate = useInvalidate();
2783
+ const session = useScopeSession();
2784
+ const query = useMemberQuery(
2785
+ [...relayKeys.accounts, "creator"],
2786
+ (options) => relay.auth.creatorAccounts.list(options),
2787
+ { refetchOnFocus: true }
2788
+ );
2789
+ const { isPending, actionError: actionError2, resetAction, run, retry, settle } = useAction();
2790
+ const actions = useMemo8(
2791
+ () => ({
2792
+ connect: (provider) => run(async () => {
2793
+ const { url } = await relay.auth.creatorAccounts.connect(provider, {
2794
+ session
2795
+ });
2796
+ window.location.assign(url);
2797
+ }),
2798
+ disconnect: (provider) => run(async () => {
2799
+ await relay.auth.creatorAccounts.disconnect(provider, { session });
2800
+ void invalidate([relayKeys.accounts, relayKeys.experience]);
2801
+ })
2802
+ }),
2803
+ [relay, invalidate, session, run]
2804
+ );
2805
+ const accounts = query.data?.accounts;
2806
+ return useMemo8(
2807
+ () => ({
2808
+ ...query,
2809
+ isPending,
2810
+ actionError: actionError2,
2811
+ resetAction,
2812
+ retry,
2813
+ settle,
2814
+ /** True when the member's account on `provider` is linked and readable right now. */
2815
+ isConnected: (provider) => Boolean(
2816
+ accounts?.some(
2817
+ (account) => account.provider === provider && account.configured && account.status === "connected"
2818
+ )
2819
+ ),
2820
+ ...actions
2821
+ }),
2822
+ [
2823
+ query,
2824
+ isPending,
2825
+ actionError2,
2826
+ resetAction,
2827
+ retry,
2828
+ settle,
2829
+ accounts,
2830
+ actions
2831
+ ]
2832
+ );
2833
+ }
2780
2834
 
2781
2835
  // src/react/profiles.ts
2782
2836
  import { useMemo as useMemo9 } from "react";
@@ -3103,6 +3157,7 @@ export {
3103
3157
  useBadgeCatalog,
3104
3158
  useBadges,
3105
3159
  useBalances,
3160
+ useCreatorAccounts,
3106
3161
  useDeliveries,
3107
3162
  useEntitlements,
3108
3163
  useExperience,
@@ -1 +1 @@
1
- import{$ as L,B as z,C as ee,Cc as Se,D as re,Dc as qe,Df as Pe,E as te,Ec as Ee,Ef as Oe,Fc as Q,Gc as Ce,Gd as U,Hb as ke,Hh as gr,Id as j,Ig as Ue,Ka as I,Kb as we,Kc as S,La as de,Ld as Ae,Ma as P,Na as ue,Nc as sr,Qb as nr,Rb as ar,Re as Le,S as ne,T as ae,Td as G,Uc as y,Vc as Me,Vd as De,W as oe,Wc as q,X as T,Yc as cr,_ as se,_f as Be,a as R,aa as ce,be as Te,cb as me,cf as mr,da as ie,df as lr,fb as le,ff as pr,gc as or,hh as Ge,ig as Ke,jc as ve,jg as Qe,kb as pe,kc as ye,kf as Ie,kg as N,md as ir,nd as dr,ob as ge,od as ur,pd as ze,qd as je,r as F,s as H,sd as $e,t as J,tc as O,u as V,uc as x,ud as Re,v as X,vb as he,w as Y,wd as xe,xb as fe,xc as B,yc as K,zc as be}from"./chunks/WKATKZXE.js";import{Vb as D,Wb as W,hc as $,nb as C,pa as A,pc as M,td as tr,vb as _}from"./chunks/IDOMZWRY.js";function Ne(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function hr(e,t){Ne(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 fr(e,t){Ne(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 _e(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 kr=["author"],wr=["author","messageAuthor"];function We(e){if(!ie(e))return[];switch(e.kind){case"x-search":return ne;case"discord-messages":return kr;case"discord-reactions":return wr;case"custom":return["author",...e.accounts??[]]}}var Ze=new Map;function vr(e){let t=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,r=Ze.get(t);return r||(r=z(t==="messages-text"?V:t==="discord-messages"?J:X),Ze.set(t,r)),r}function Fe(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return vr(e);case"custom":return e.data}}function Ur(e){return y("badge",Be.parse(e))}function Gr(e){return y("ledger",Ie.parse(e))}function Nr(e){let{target:t,ledger:r,...n}=e,s=Ke.parse({...n,qualifiedBy:e.qualifiedBy.key,balance:q(r)}),c=$(M(e.metrics),N.shape.target);return{key:s.key,describe:()=>s,score(i){let d=Qe.parse(i);return N.parse({target:t({metrics:c.parse(d.metrics)}),baseline:t({metrics:c.parse(d.baseline)})})}}}var br=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 me.strict().parse({kind:"streak",...e})},Zr=e=>de.brand().parse({kind:"count",count:e}),_r=(e,t={})=>P.brand().parse({kind:"calendar",period:e,...t}),Wr=({days:e})=>P.brand().parse({kind:"rolling",durationMs:e*864e5}),Fr=e=>({kind:"quest",quest:e});function Hr(e){let{qualification:t,inviterGroup:r,milestones:n,bonuses:s,...c}=e,i=Ge.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,...h})=>({...h,id:S({key:d,...h}),balance:q(a),quests:p?.map(o=>o.key)}))});return y("referral",i)}function Jr(e={}){return{kind:"earned",...e}}function Vr(e){let{ledger:t,group:r,score:n,settle:s,...c}=e,i=s?.pool,d=Ue.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 Xr={provider:"x",search:e=>oe.parse({kind:"x-search",...e})};function Sr(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(!He(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)ae.parse(i);return T.parse({kind:"custom",namespace:e,...s,data:z(D({body:n.body,metrics:W(Object.fromEntries(c.map(i=>[i,C().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!He(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 He(e){return typeof e=="object"&&e!==null&&"_zod"in e}function Yr(e){return y("tracker",ce.parse(e))}function qr(e={}){return F.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function Er(){return H.parse({kind:"discord-reactions"})}var et={provider:"discord",grantRole:e=>Y.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),messages:qr,reactions:Er,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"]})}},rt={reactions(){return Sr(Pe,{identities:["member"],accounts:["messageAuthor"],data:Oe})}},tt=()=>({provider:"domino",resource:"point-ledger"});function f(e,t){return t}var nt={pointLedger(e){let t={...e,kind:"point-ledger",default:e.default?R.parse(e.default.key):""};return f("point-ledger",Me.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(!Se(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",Q(t).default(t.default).meta(t))},chain(e){if(!qe(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",Q(t).transform(r=>r).default(t.default).meta(t))},integer(e){return f("integer",C().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",M(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return D(e).strict()}},ot=e=>Re(e.key,e.name),st=e=>xe(e.key,e.title),ct=(e,t)=>ze.parse({kind:"points",balance:q(e),amount:t}),it={text:(e={})=>({input:"text",constraints:ve.parse(e)}),url:(e={})=>({input:"url",constraints:ye.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function dt(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 Ve=new WeakMap,Xe=new WeakMap;function Ye(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:h}=r;if(!se(h))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(p&&!L(h))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=We(h);if(!o.includes(n))throw new Error(h.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:h.kind,on:p?"new-record":s??le(h.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=Fe(h),v=m?te(m,u.where):null;if(v)throw new Error(v);let w={kind:"automatic",tracker:u};m&&Ve.set(w,m);let g=L(h);return g&&Xe.set(w,g.metrics),w}function ut(e){return e?Ye(e,"automatic"):{kind:"automatic"}}function mt(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 Ye({...e,content:!0},"content")}var lt=e=>{let{key:t,cost:r,...n}=e;return ke.parse({...n,id:S(e),cost:typeof r=="number"?r:{balance:q(r.ledger)}})},Cr=e=>({kind:"keyed",key:e}),Mr=e=>{let{distinct:t,...r}=e;return{...ue.parse({kind:"progress",window:{kind:"lifetime"},...r}),distinct:t}},pt=()=>({kind:"untracked"}),gt=()=>({kind:"staff-handover"}),ht=()=>({kind:"automatic"});function ft(e){let{key:t,tiers:r,...n}=e,s=S(e),c=je.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=>$e.parse({kind:"tier",reward:c,tier:i})})}var zr=()=>({kind:"once"});function jr(e={}){return{kind:"accept",...e}}function $r(e){return{kind:"review",...e}}var E={accept:jr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:$r};function Je(e){let t=e.kind==="reject"&&e.code!==void 0?fe(e.code):null;if(t)throw new Error(t)}var kt={quiz(e,t={}){let r=Te.parse(e),n=Object.keys(r),s=C().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})}}},Rr={once:zr,keyed:Cr,streak:br,progress:Mr};function er(e){return function(r){let n=S(r),s=[...new Set((r.integrations??[]).map(o=>we.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(Rr):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(_e({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&&!U.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&&!U.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=Xe.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=be.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 pe(r.trigger.kind==="automatic"?r.trigger.tracker?.where:void 0))if(!Ee(p[o]))throw new Error(`The tracker filter compares with setting "${o}", which is not an integer or amount setting`);function h(o){let u=r.settings.parse(o),m=Ce(p,u),v=Ae.parse(typeof r.rewards=="function"?r.rewards({settings:u}):r.rewards),w=[...v.flatMap(g=>g.kind==="integration"?[g.provider]:[]),...Object.values(p).flatMap(g=>g.kind==="resource"&&g.source.provider!=="domino"?[g.source.provider]:[])];for(let g of w)if(!s.includes(g))throw new Error(`Declare the ${g} integration on this quest`);return De.parse({quest:n,evaluatorProtocol:G,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:G,key:n,describe:h,async evaluate(o){let u=r.settings.parse(o.settings),m=i?he.parse(o.tracker):null,v=Ve.get(r.trigger),w=m&&v?ee(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 g=m;if(o.performance){if(!r.performance)throw new Error("Quest has no performance evaluator");let b=Le.parse(o.performance),rr=$(M(r.performance.metrics),C().int().safe().nonnegative()).parse(b.metrics),k=await r.performance.evaluate({settings:u,member:o.member,tracker:g,metrics:rr,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 Je(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:g,eligibleAt:o.eligibleAt,calendar:o.calendar,now:o.now,review:o.review,trackers:re(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(Je(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:xr(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 xr(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 wt=er(!1),vt=er(!0);export{pr as CapabilityError,ut as automatic,ht as automaticFulfillment,ot as badge,dr as balanceAtLeast,lt as budget,_r as calendar,lr as capabilityErrorCodes,ir as completed,mt as content,ar as cosmosDenomSchema,nr as cosmosNetworkSchema,Zr as count,Sr as customSource,E as decision,Ur as defineBadge,sr as defineCampaign,mr as defineDashboard,Nr as defineEngagementReward,cr as defineGroup,Vr as defineLeaderboard,Gr as defineLedger,gr as defineOffer,wt as defineQuest,vt as defineQuestType,Hr as defineReferral,ft as defineTieredReward,Yr as defineTracker,et as discord,Jr as earned,kt as evaluators,it as evidence,fr as formatUnits,st as groupMembership,ur as inGroup,or as isEvmChainId,Cr as keyed,dt as manual,zr as once,hr as parseUnits,tt as pointLedgers,ct as points,Mr as progress,Fr as questCompleted,Wr as rolling,nt as settings,gt as staffHandover,br as streak,rt as telegram,z as trackerDataSchema,he as trackerTriggerContextSchema,pt as untracked,Xr as x,tr as z};
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};
@@ -0,0 +1 @@
1
+ import{Gb as ie,Kb as oe,Lb as lr,Qc as rt,Rb as We,Sb as c,T as ir,Ub as Ae,Vb as t,Wb as b,Xb as se,Xc as mr,Yb as Ge,Yc as nt,Z as W,Zb as g,Zc as ur,a as V,bc as f,ca as or,cc as Je,d as ar,ec as Xe,ed as ce,fc as dr,gc as Ye,hc as y,ld as L,ma as ae,mb as cr,md as Ie,nb as i,oc as et,pa as r,pc as u,rc as tt,sc as s,sd as I,vb as m,wa as sr}from"./IDOMZWRY.js";var sa=Symbol.for("@domino-sdk/relay.RequestError");var ca=class extends Error{name="RequestError";[sa]=!0;kind;uncertain;status;code;operationId;recovery;retryAfter;constructor(e,n){super(e,n.cause===void 0?{}:{cause:n.cause}),this.kind=n.kind,this.uncertain=n.uncertain??!1,this.status=n.status,this.code=n.code,this.operationId=n.operationId,this.retryAfter=n.retryAfter,this.recovery=this.uncertain?n.operationId&&(n.replaySafe??!0)?"replay":"reconcile":void 0}},la={NotSignedIn:"not-signed-in",StaleSession:"stale-session",InvalidInput:"invalid-input",InvalidResponse:"invalid-response",Network:"network",Timeout:"timeout",Aborted:"aborted",NotFound:"not-found",RetryUnavailable:"retry-unavailable",SubmissionStorage:"submission-storage",SubmissionStorageQuota:"submission-storage-quota",SubmissionConflict:"submission-conflict",OperationRetired:"operation-retired",QuestUpdated:"quest-updated",AttemptPending:"attempt-pending",RetryCooldown:"retry-cooldown",CompletionCooldown:"completion-cooldown",StaleQuiz:"stale-quiz",InvalidSubmission:"invalid-submission",InvalidCursor:"invalid-cursor",PointLedgerNotFound:"point-ledger-not-found",NotJoined:"not-joined",OutsideWindow:"outside-window",EnrollmentRequired:"enrollment-required",BudgetExhausted:"budget-exhausted",OfferNotFound:"offer-not-found",OfferPaused:"offer-paused",OfferLimitReached:"offer-limit-reached",OfferOutOfStock:"offer-out-of-stock",InsufficientPoints:"insufficient-points",Credential:"credential",WalletSigner:"wallet-signer",PrerequisitesIncomplete:"prerequisites-incomplete",QuestClosed:"quest-closed",QuestPaused:"quest-paused",ProfileLocked:"profile-locked",InvitationNotFound:"invitation-not-found",InvalidCode:"invalid-code",CodeExpired:"code-expired",ChallengeExpired:"challenge-expired",RateLimited:"rate-limited"},da=Symbol.for("@domino-sdk/relay.RelayError");var ma=class extends ca{name="RelayError";[da]=!0;window;missing;retryAt;constructor(e,n){super(e,n),this.window=n.window,this.missing=n.missing??[],this.retryAt=n.retryAt}};function ua(e,n,o={}){return new ma(e,{...o,kind:"client",code:n})}var a=r().min(1).max(100).regex(/^[a-zA-Z0-9_-]+$/),za=Symbol("domino.response.tolerant-v1");function Cr(e){return Object.assign(e,{[za]:!0})}var at=new WeakMap;function xs(e){for(let n of Object.keys(e)){let o=Object.getOwnPropertyDescriptor(e,n)?.get;if(!o)continue;let l=d=>(Object.defineProperty(e,n,{value:d,writable:!0,enumerable:!0,configurable:!0}),d);Object.defineProperty(e,n,{get:()=>l(o.call(e)),set:l,enumerable:!0,configurable:!0})}return e}function j(e){let n=at.get(e);if(n)return n;let o=Object.create(Object.getPrototypeOf(e._zod.def),Object.getOwnPropertyDescriptors(e._zod.def));if(e instanceof Ae){let d;Object.defineProperty(o,"shape",{get:()=>d??=Object.fromEntries(Object.entries(e.shape).map(([z,p])=>[z,j(p)])),configurable:!0,enumerable:!0}),Object.assign(o,{catchall:e._zod.def.catchall instanceof lr||!e._zod.def.catchall?void 0:j(e._zod.def.catchall)})}else e instanceof cr?Object.assign(o,{checks:e._zod.def.checks?.filter(d=>{let z=d._zod.def;return z.check!=="less_than"||!("value"in z)||z.value===Number.MAX_SAFE_INTEGER||z.value===864e13})}):e instanceof We?Object.assign(o,{element:j(e.element),checks:[]}):e instanceof Ge?Object.assign(o,{options:e.options.map(j)}):e instanceof Xe?Object.assign(o,{items:e._zod.def.items.map(j),rest:e._zod.def.rest?j(e._zod.def.rest):null}):e instanceof Je?Object.assign(o,{left:j(e._zod.def.left),right:j(e._zod.def.right)}):e instanceof nt?Object.assign(o,{getter:()=>j(e._zod.def.getter())}):e instanceof Ye?Object.assign(o,{valueType:j(e.valueType)}):e instanceof rt?Object.assign(o,{in:j(e.in),out:j(e.out)}):"innerType"in o&&o.innerType instanceof ae&&Object.assign(o,{innerType:j(o.innerType)});let l=ar(e,o);return at.set(e,l),at.set(l,l),l}function ba(e){return j(e)}function $r(e){if(e instanceof Ae)return e.shape;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof ae)return $r(e._zod.def.innerType)}function ut(e){if(e instanceof tt)return[...e.values];if(e instanceof et)return e.options;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof ae)return ut(e._zod.def.innerType)}function E(e,n){if(e instanceof tt)return typeof n=="string"&&[...e.values].every(o=>typeof o=="string")&&!e.values.has(n);if(e instanceof et)return typeof n=="string"&&!e.options.includes(n);if(e instanceof We&&Array.isArray(n))return n.some(o=>E(e.element,o));if(e instanceof Xe&&Array.isArray(n))return n.some((o,l)=>{let d=e._zod.def.items[l]??e._zod.def.rest;return d?E(d,o):!1});if(e instanceof Je)return E(e._zod.def.left,n)||E(e._zod.def.right,n);if(e instanceof nt)return E(e._zod.def.getter(),n);if(e instanceof Ye&&n!==null&&typeof n=="object"&&!Array.isArray(n))return Object.entries(n).some(([o,l])=>E(e.keyType,o)||E(e.valueType,l));if(e instanceof Ge){let o=[...e.options];if(typeof n=="string"){let l=o.flatMap(d=>ut(d)??[]);if(l.some(d=>typeof d=="string")&&!l.includes(n))return!0}if(n!==null&&typeof n=="object"&&!Array.isArray(n)){let l=y(r(),oe()).parse(n),d=["kind","status","provider","input","type","mode"];for(let z of d){if(typeof l[z]!="string")continue;let p=o.map(C=>{let D=$r(C)?.[z];return D?ut(D):void 0});if(p.some(C=>!C))continue;let v=o.filter((C,D)=>p[D]?.includes(l[z]));if(!v.length)return!0;o=v}}return o.every(l=>E(l,n))}if(e instanceof Ae&&n!==null&&typeof n=="object"&&!Array.isArray(n)){let o=y(r(),oe()).parse(n);return Object.entries(e.shape).some(([l,d])=>E(d,o[l]))||Object.entries(o).some(([l,d])=>!(l in e.shape)&&!!e._zod.def.catchall&&E(e._zod.def.catchall,d))}if(e instanceof rt){if(E(e.in,n))return!0;let o=or(e.in,n);return o.success&&E(e.out,o.data)}return"innerType"in e._zod.def&&e._zod.def.innerType instanceof ae?E(e._zod.def.innerType,n):!1}function pa(e){return Cr(L().transform((n,o)=>{let l=ba(e),d=l.safeParse(n);if(d.success)return{kind:"supported",value:d.data};if(E(l,n))return{kind:"unsupported",raw:n};for(let z of d.error.issues)o.addIssue({...z});return V}))}function ws(e){return Cr(c(pa(e)).transform(n=>({items:n,unsupportedCount:n.filter(o=>o.kind==="unsupported").length})))}var S=r().min(1).max(4096),As=b({cursor:S.optional()});async function*Is(e){let n;do{let o=await e(n);yield*o.items,n=o.nextCursor??void 0}while(n!==void 0)}var Os=b({cursor:S.optional(),limit:I.number().int().min(1).max(100).default(50)}),wt=u(["google","apple","x","discord"]),Er=t({provider:wt,configured:m(),status:u(["disconnected","connected","reconnect"]),subject:r().nullable(),revision:i().int().nonnegative()}),qs=t({}).strict(),Rs=t({channelId:r().regex(/^[0-9]{1,20}$/),messageId:r().regex(/^[0-9]{1,20}$/)}).strict(),Ps=t({userId:r().regex(/^[0-9]{1,20}$/).nullable().default(null),nickname:r().nullable().default(null),displayName:r().nullable().default(null),boostingSince:r().datetime({offset:!0}).nullable().default(null),roles:c(r().regex(/^[0-9]{1,20}$/)),joinedAt:r().datetime({offset:!0}).nullable(),pending:m()}),Cs=t({guildId:r(),channelId:r(),messageId:r(),userId:r(),content:r().nullable(),replyTo:r().nullable(),publishedAt:i()}).strict(),Tr=b({kind:s("discord-messages"),text:m().optional()}),Mr=b({kind:s("discord-reactions")}),ga=t({guildId:r(),channelId:r(),messageId:r(),replyTo:r().nullable(),publishedAt:i()}),$s=ga.extend({text:r().nullable()}),Es=t({guildId:r(),channelId:r(),messageId:r(),emoji:t({id:r().nullable(),name:r()}),reactorRoles:c(r()),messagePublishedAt:i()}),fa=b({kind:s("integration"),provider:s("discord"),action:s("grant-role"),roleId:r().regex(/^[0-9]{1,20}$/)}),ha=g([b({provider:s("discord"),resource:s("channel"),types:c(u(["text","announcement"])).min(1)}),b({provider:s("discord"),resource:s("role"),assignable:m().default(!1)})]),va=16,ya=32768,ka=16,le=256,zr=g([r(),i().finite(),m(),ie()]),Oe=i().int().safe().nonnegative(),qe=i().finite(),it=()=>c(me).min(1).max(ka),me=ur(()=>b({type:u(["object","array","string","number","integer","boolean","null"]).optional(),properties:y(r(),me).refine(e=>Object.keys(e).length<=le,`An object schema lists at most ${le} properties`).optional(),required:c(r()).max(le).optional(),additionalProperties:g([m(),me]).optional(),propertyNames:b({type:s("string"),enum:c(r()).max(le).optional()}).optional(),items:me.optional(),minItems:Oe.optional(),maxItems:Oe.optional(),minLength:Oe.optional(),maxLength:Oe.optional(),minimum:qe.optional(),maximum:qe.optional(),exclusiveMinimum:qe.optional(),exclusiveMaximum:qe.optional(),enum:c(zr).min(1).max(le).optional(),const:zr.optional(),anyOf:it().optional(),oneOf:it().optional(),allOf:it().optional()}));function ja(e){let n=[[e,0]];for(;n.length;){let[o,l]=n.pop();if(!(typeof o!="object"||o===null)){if(l>=va)return"Tracker data schemas are at most 32 KB and 16 levels deep";if(!Array.isArray(o)&&Object.hasOwn(o,"__proto__"))return"Tracker data schemas cannot name a property __proto__";for(let d of Object.values(o))n.push([d,l+1])}}return new TextEncoder().encode(JSON.stringify(e)).byteLength>ya?"Tracker data schemas are at most 32 KB and 16 levels deep":null}var Ur=e=>[...e.anyOf??[],...e.oneOf??[],...e.allOf??[]],Sa=e=>e.properties!==void 0||e.items!==void 0||typeof e.additionalProperties=="object"||Ur(e).length>0;function zt(e,n,o){let l=Ur(e);if(o&&l.filter(Sa).length>1)return n;let d=[...Object.entries(e.properties??{}).map(([z,p])=>[p,`${n}.${z}`])];e.items&&d.push([e.items,n]),typeof e.additionalProperties=="object"&&d.push([e.additionalProperties,n]);for(let[z,p]of d){let v=zt(z,p,o);if(v)return v}for(let z of l){let p=zt(z,n,!0);if(p)return p}return null}var _r=oe().superRefine((e,n)=>{let o=ja(e);o&&n.addIssue({code:"custom",message:o,abort:!0})}).pipe(me).refine(e=>e.type==="object","A tracker's record data is an object: declare it with z.object({ ... })").superRefine((e,n)=>{let o=zt(e,"data",!1);o&&n.addIssue({code:"custom",message:`Tracker data schemas cannot nest a union with several object, array or union branches inside another union's branch (${o}): flatten it into one union`})}),br={pattern:"check string patterns in your evaluator",format:"use z.string() and check the format in your evaluator",prefixItems:"use an array or an object instead of a tuple",multipleOf:"check divisibility in your evaluator",not:"describe the allowed values instead",$ref:"inline the schema instead of registering or reusing it by ID",$defs:"inline the schema instead of registering or reusing it by ID",definitions:"inline the schema instead of registering or reusing it by ID",if:"use a union instead",then:"use a union instead",else:"use a union instead",contains:"check array contents in your evaluator",minContains:"check array contents in your evaluator",maxContains:"check array contents in your evaluator",uniqueItems:"check uniqueness in your evaluator",minProperties:"check key counts in your evaluator",maxProperties:"check key counts in your evaluator",patternProperties:"use z.record(z.string(), value) instead",dependentRequired:"use a union instead",dependentSchemas:"use a union instead",unevaluatedProperties:"use a strict object instead",unevaluatedItems:"use an array instead"},Dr=new Set(["additionalProperties","items","propertyNames"]),Lr=new Set(["anyOf","oneOf","allOf"]),xa=new Set(["type","properties","required","minItems","maxItems","minLength","maxLength","minimum","maximum","exclusiveMinimum","exclusiveMaximum","enum","const",...Dr,...Lr]),wa=new Set(["$schema","$id","$comment","title","description","default","examples","deprecated","readOnly","writeOnly"]);function Ee(e,n){if(typeof e!="object"||e===null||Array.isArray(e))return e;let o={};for(let[l,d]of Object.entries(e)){if(Object.hasOwn(br,l))throw new Error(`Tracker data schemas cannot use ${l} (${n}): ${br[l]}`);if(!wa.has(l)){if(!xa.has(l))throw new Error(`Tracker data schemas cannot use the keyword ${l} (${n}): keep metadata to title, description, default and examples`);if(l==="properties"&&Object.hasOwn(d,"__proto__")||l==="required"&&d.includes("__proto__"))throw new Error(`Tracker data schemas cannot name a property __proto__ (${n})`);o[l]=l==="properties"?Object.fromEntries(Object.entries(d).map(([z,p])=>[z,Ee(p,`${n}.${z}`)])):Dr.has(l)?Ee(d,n):Lr.has(l)?d.map(z=>Ee(z,n)):d}}return o}function Ts(e){let n;try{n=ir(e,{target:"draft-2020-12",io:"input",unrepresentable:"throw",cycles:"throw",reused:"inline",override:({zodSchema:l,path:d})=>{let z=l._zod.def,p=["data",...d].join(".");if(z.type==="pipe"||z.type==="transform")throw new Error(`Tracker data schemas cannot transform values (${p}): records are stored as sent`);if(z.checks?.some(v=>v._zod.def.check==="custom"))throw new Error(`Tracker data schemas cannot use refinements (${p}): check the value in your evaluator`)}})}catch(l){let d=l instanceof Error?l.message:String(l);throw new Error(d.startsWith("Tracker data schemas")?d:`Tracker data schemas describe JSON: ${d}. Use z.unknown() for any JSON value.`)}let o=_r.safeParse(Ee(n,"data"));if(!o.success)throw new Error(o.error.issues.map(l=>l.message).join("; "));return o.data}var Zr=25e4,Aa=6e6,Nr=class extends Error{};function Re(e,n){if(e.steps-=n,e.steps<0)throw new Nr}var Qr=64,Ia=256;function bt(e,n){return e.length>n?e.slice(0,n-1)+"\u2026":e}function Oa(e){let n=[];for(let o=e;o;o=o.parent)n.push(bt(String(o.key),Qr));return bt(["data",...n.reverse()].join("."),Ia)}var G=e=>e===null?"null":Array.isArray(e)?"an array":typeof e,ot=10;function qa(e){let n=e.slice(0,ot).map(o=>JSON.stringify(o)).join(", ");return e.length>ot?`expected one of ${n}, or ${e.length-ot} more`:`expected one of ${n}`}var pr=new WeakMap,gr=new WeakMap;function fr(e,n){let o=pr.get(e);return o||(o=new Set(n),pr.set(e,o)),o}function Ra(e){let n=gr.get(e);return n||(n=Object.entries(e.properties??{}).filter(([,o])=>o.const!==void 0),gr.set(e,n)),n}function X(e,n,o,l){Re(l,1);let d=z=>({at:o,reason:z});if(e.const!==void 0&&n!==e.const)return d(()=>`expected ${JSON.stringify(e.const)}`);if(e.enum&&!fr(e,e.enum).has(n)){let z=e.enum;return d(()=>qa(z))}switch(e.type){case"null":if(n!==null)return d(()=>`expected null, got ${G(n)}`);break;case"boolean":case"string":if(typeof n!==e.type){let z=e.type;return d(()=>`expected a ${z}, got ${G(n)}`)}break;case"number":if(typeof n!="number")return d(()=>`expected a number, got ${G(n)}`);break;case"integer":if(!Number.isInteger(n))return d(()=>typeof n=="number"?"expected an integer":`expected an integer, got ${G(n)}`);break;case"array":if(!Array.isArray(n))return d(()=>`expected an array, got ${G(n)}`);break;case"object":if(typeof n!="object"||n===null||Array.isArray(n))return d(()=>`expected an object, got ${G(n)}`);break}if(typeof n=="string"){let{minLength:z,maxLength:p}=e;if(z!==void 0&&n.length<z)return d(()=>`expected at least ${z} characters`);if(p!==void 0&&n.length>p)return d(()=>`expected at most ${p} characters`)}if(typeof n=="number"){let z=[[e.minimum,p=>n>=p,"at least"],[e.exclusiveMinimum,p=>n>p,"more than"],[e.maximum,p=>n<=p,"at most"],[e.exclusiveMaximum,p=>n<p,"less than"]];for(let[p,v,C]of z)if(p!==void 0&&!v(p))return d(()=>`expected ${C} ${p}`)}if(Array.isArray(n)){let{minItems:z,maxItems:p}=e;if(z!==void 0&&n.length<z)return d(()=>`expected at least ${z} items`);if(p!==void 0&&n.length>p)return d(()=>`expected at most ${p} items`);if(e.items)for(let v=0;v<n.length;v++){let C=X(e.items,n[v],{parent:o,key:v},l);if(C)return C}}if(typeof n=="object"&&n!==null&&!Array.isArray(n)){let z=n,p=e.properties??{},v=e.required??[];Re(l,v.length);for(let $ of v)if(!Object.hasOwn(z,$))return d(()=>`missing required key "${bt($,Qr)}"`);let C=Ra(e);Re(l,C.length);for(let[$,H]of C)if(Object.hasOwn(z,$)&&z[$]!==H.const)return{at:{parent:o,key:$},reason:()=>`expected ${JSON.stringify(H.const)}`};let D=Object.keys(z);Re(l,D.length);let tr=e.propertyNames?.enum,rr=tr&&fr(e.propertyNames,tr);for(let $ of D){if(rr&&!rr.has($))return{at:{parent:o,key:$},reason:()=>"is not an allowed key"};let H=Object.hasOwn(p,$)?p[$]:e.additionalProperties;if(H===!1)return{at:{parent:o,key:$},reason:()=>"is not an allowed key"};if(H&&H!==!0){let nr=X(H,z[$],{parent:o,key:$},l);if(nr)return nr}}}for(let z of e.allOf??[]){let p=X(z,n,o,l);if(p)return p}if(e.anyOf&&!e.anyOf.some(z=>!X(z,n,o,l)))return d(()=>"matches none of the allowed shapes");if(e.oneOf){let z=0;for(let p of e.oneOf)if(!X(p,n,o,l)&&++z>1)return d(()=>"matches more than one of the allowed shapes");if(!z)return d(()=>"matches none of the allowed shapes")}return null}function Pa(e,n,o={steps:Zr}){try{let l=X(e,n,null,o);return l&&{kind:"mismatch",path:Oa(l.at),reason:l.reason()}}catch(l){if(l instanceof Nr)return{kind:"too-complex",path:"data",reason:"is too complex to validate against the tracker's schema"};throw l}}function Ca(e,n){let o={steps:Aa};return n.map(l=>{let d={steps:Math.min(Zr,o.steps)},z=d.steps,p=Pa(e,l,d);return o.steps-=z-Math.max(d.steps,0),p})}function pt(e){return e.flatMap(n=>n.anyOf||n.oneOf||n.allOf?pt([...n.anyOf??[],...n.oneOf??[],...n.allOf??[]]):[n])}var hr=e=>e.type===void 0&&e.properties===void 0&&e.const===void 0&&e.enum===void 0;function $a(e,n){let o=new Set(["string","number","boolean","null","object","array"]),l=[e];for(let z of n.split(".")){let p=[];for(let v of pt(l))if(hr(v))p.push({});else{if(v.type!=="object")continue;v.properties&&Object.hasOwn(v.properties,z)?p.push(v.properties[z]):v.additionalProperties===!0?p.push({}):v.additionalProperties&&p.push(v.additionalProperties)}if(!p.length)return null;l=p}let d=new Set;for(let z of pt(l)){if(hr(z))return o;z.type&&d.add(z.type==="integer"?"number":z.type);for(let p of[...z.const!==void 0?[z.const]:[],...z.enum??[]])d.add(p===null?"null":typeof p)}return d}function Ms(e){return{content:(n,o)=>e.content(n,o),summary:(n,o)=>e.summary(n,o),records:(async(n,o)=>{let l=await e.records(n,o),d=n.source,z=d?.kind==="custom"?d.data:void 0;if(!z)return l;let p=Ca(z,l.items.map(C=>C.data)),v=l.items.filter((C,D)=>!p[D]);return{...l,items:v,excluded:l.items.length-v.length}})}}function Us(e,n){let o=n===void 0?[]:Array.isArray(n)?n:[n];for(let l of o){let d=$a(e,l.path);if(!d)return`The tracker filter reads data.${l.path}, which the tracker's data schema does not declare`;if(!("equals"in l?[typeof l.equals]:["number","string"]).some(p=>d.has(p)))return`The tracker filter compares data.${l.path} with ${"equals"in l?JSON.stringify(l.equals):"a number"}, but the field holds ${[...d].join(" or ")}`}return null}var x=i().int().safe().nonnegative().max(864e13),O=i().int().safe().nonnegative(),T=r().min(1).max(256),J=O.nullable().default(null),Ea=se({id:T,userId:T,content:r(),createdAt:W.datetime({offset:!0}),author:se({id:T,username:r(),name:r(),verified:m().nullable().default(null)}),likeCount:J,replyCount:J,retweetCount:J,quoteCount:J,viewCount:J,bookmarkCount:J,isReply:m(),isRetweet:m(),isQuoteTweet:m()}),Ta=b({version:s(1),id:r().min(1),authorId:r().min(1),publishedAt:x,text:r(),isReply:m(),isRetweet:m(),isQuoteTweet:m(),media:c(b({type:r(),url:r()})).nullable(),mentionedAuthorIds:c(r().min(1)).nullable(),videoLengthSeconds:i().nonnegative().nullable(),references:b({replyId:r().nullable(),replyAuthorId:r().nullable(),quoteId:r().nullable(),quoteAuthorId:r().nullable(),repostId:r().nullable(),repostAuthorId:r().nullable()})}),Ma=b({id:T,observation:r().regex(/^observation_[a-f0-9]{64}$/)}),_s=Ma.extend({member:a}),st={member:a,capturedAt:x},Br=b({contentRevision:a,observation:a}),Ds=b({tracker:a,source:s("x"),evidence:Br,content:Ta,observedAt:x,removed:m(),attribution:f("kind",[b({...st,kind:s("linked"),account:b({provider:s("x"),issuer:r().min(1),subject:T,revision:O,linkedAt:x.nullable()})}),b({...st,kind:s("unlinked")}),b({...st,kind:s("different-author")})])}),Ua=["wallet","x","discord","member"],Hr=mr(["app:",r().regex(/^[a-z0-9][a-z0-9_-]{0,39}$/,"Name an app identity kind like app:telegram: lowercase letters, digits, _ or -, at most 40")]),At=g([u(Ua),Hr]),Ls=e=>e.startsWith("app:"),pe=r().min(1).max(64),Zs=t({kind:pe,subject:T,revision:O,linkedAt:x.nullable()}),ge=r().regex(/^[a-zA-Z][a-zA-Z0-9_]{0,39}$/,"Name roles like author or recipient: a letter, then letters, digits or underscores"),Ns=["author","inReplyTo"],gt=e=>new Set(e).size===e.length,Vr=r().regex(/^[a-z][a-zA-Z0-9]{0,39}$/,"Name metrics like likes or watchTime: a lowercase letter, then letters or digits"),_a=["likes","replies","reposts","quotes","views","bookmarks"],Da=b({metrics:c(Vr).max(10).refine(gt,"List each metric once")}),Ue=t({kind:s("x-search"),query:r().trim().min(1).max(2e3)}).strict(),Kr=t({kind:s("custom"),namespace:a,identities:c(At).min(1).max(8).refine(gt,"List each identity kind once").optional(),accounts:c(ge).min(1).max(10).refine(gt,"List each account role once").refine(e=>!e.includes("author"),"author is every record's own role; name other accounts").optional(),data:_r.optional(),content:Da.optional()}).strict().refine(e=>!e.content||e.data?.properties?.body?.type==="object"&&(e.data.required??[]).includes("body"),"A content source's data schema has a required object body").refine(e=>!e.accounts||e.identities,"Named accounts need identities"),La=f("kind",[Ue,Kr,Tr,Mr]),Za=["x-search","custom","discord-messages","discord-reactions"];function Qs(e){if(Qa(e))switch(e.kind){case"x-search":return["x"];case"discord-messages":case"discord-reactions":return["discord"];case"custom":return e.identities}}function Bs(e){switch(e.kind){case"x-search":return{metrics:_a};case"custom":return e.content;case"discord-messages":case"discord-reactions":return}}var It=t({start:x,end:x.optional()}).strict().refine(e=>e.end===void 0||e.end>e.start,"End must follow start"),K=t({key:a,title:r().trim().min(1).max(120),source:La,window:It,refreshSeconds:i().int().min(300).max(86400).default(21600),maxPages:i().int().min(1).max(1e3).default(60)}).strict(),Hs=g([K,t({code:r().min(1).max(2e6)}).strict()]),Fr=f("kind",[t(Ue.shape),t({...Kr.shape,identities:c(pe).optional()}),t(Tr.shape),t(Mr.shape)]),Na=g([Fr,t({kind:r().min(1).refine(e=>!Za.some(n=>n===e),"Known source kinds must match their schema")}).catchall(L())]);function Qa(e){return Fr.safeParse(e).success}var Ba=t({...K.shape,source:Na,window:t(It.shape)}),Ha=t({id:a,version:a,definition:Ba,publishedAt:x,actor:r().nullable()}),Wr=t({archivedAt:i().int().nonnegative().nullable().optional(),published:Ha,paused:m(),pauseReason:r().nullable().optional(),resumesAt:x.nullable().optional(),effectiveRefreshSeconds:i().int().positive().optional(),state:u(["idle","syncing","error","complete"]),lastStartedAt:x.nullable(),lastCompletedAt:x.nullable(),nextSyncAt:x.nullable(),coverage:u(["unknown","partial","complete"]),error:r().nullable(),records:O,origin:u(["code","data"]).optional()}),Gr=t({title:K.shape.title,query:Ue.shape.query,window:It,refreshSeconds:K.shape.refreshSeconds.unwrap(),maxPages:K.shape.maxPages.unwrap()}).strict(),Vs=Gr.extend({key:a,refreshSeconds:K.shape.refreshSeconds,maxPages:K.shape.maxPages,actionId:a}).strict(),Ks=Gr.partial().extend({actionId:a}).strict().refine(({actionId:e,...n})=>Object.values(n).some(o=>o!==void 0),"Change at least one field"),Fs=t({actionId:a,action:u(["pause","resume","refresh"])}).strict(),Va=b({kind:At.optional(),id:T}),Ka=t({id:T,occurredAt:x,observedAt:x,author:t({id:T,verified:m().nullable().default(null),kind:At.optional()}).strict().nullable().default(null),accounts:y(ge,Va).refine(e=>Object.keys(e).length<=10,"At most 10 accounts").optional(),data:y(r(),L()),removed:m().default(!1)}).strict().refine(e=>new TextEncoder().encode(JSON.stringify(e.data)).byteLength<=131072,"Record exceeds 128 KB"),Jr=t({kind:pe.optional(),id:r()}),Fa=t({id:r(),occurredAt:x,observedAt:x,author:t({id:r(),verified:m().nullable().default(null),kind:pe.optional()}).nullable().default(null),accounts:y(r(),Jr).optional(),data:y(r(),L()),removed:m().default(!1),source:r(),firstSeenAt:x,synthetic:s(!0).optional(),evidence:Br.nullable().optional()}),Ws=t({actionId:a,records:c(Ka).min(1).max(100)}).strict(),Gs=t({stored:O,admissions:t({admitted:O,skipped:O,filtered:O.optional()}).optional()}),vr={quest:a,tracker:a,record:T,observedAt:x,release:a,account:r().nullable(),createdAt:x,updatedAt:x,actor:r().nullable()},Js=["quest-paused","before-activation","outside-window","future-record","record-removed","invalid-record-data","content-unavailable","no-account","beneficiary-is-author","unlinked-account","ambiguous-account","not-joined","already-completed","not-enrolled","before-enrollment","historical","prerequisites-incomplete"],Xr=f("state",[t({...vr,state:s("admitted"),code:ie(),reason:ie(),member:a,attempt:a}),t({...vr,state:s("skipped"),code:r().min(1),reason:r(),window:u(["tracker","quest"]).optional(),member:a.nullable(),attempt:a.nullable()})]),Yr={quest:a.optional(),record:T.optional(),member:a.optional(),state:u(["admitted","skipped"]).optional(),code:r().min(1).max(100).optional(),limit:I.number().int().min(1).max(100).default(25)},Xs=b({...Yr,cursor:S.optional()}),Ys=t({items:c(Xr).max(100),nextCursor:S.nullable()}),ec=b({...Yr,before:r().max(512).optional()}),tc=b({items:c(Xr).max(100),next:r().nullable()}),rc=b({actionId:a,quest:a,record:T,observedAt:x}),ct=g([m(),u(["true","false"]).transform(e=>e==="true")]),nc=t({author:T.optional(),member:a.optional(),verified:ct.optional(),since:I.number().int().safe().nonnegative().optional(),until:I.number().int().safe().nonnegative().optional(),removed:ct.default(!1),minLikes:I.number().int().safe().nonnegative().optional(),minViews:I.number().int().safe().nonnegative().optional(),limit:I.number().int().min(1).max(100).default(25),cursor:r().max(2048).optional(),includeEvidence:ct.optional()}).strict().refine(e=>e.since===void 0||e.until===void 0||e.until>e.since,"Until must follow since"),ac=t({tracker:a,items:c(Fa),nextCursor:r().nullable(),total:O,status:Wr}),ic=t({records:O,authors:O,metrics:t({likes:O,replies:O,reposts:O,quotes:O,views:O,bookmarks:O}),missingMetrics:O,status:Wr}),Wa={pages:3,posts:100,days:30},oc=t({query:Ue.shape.query,since:x}).strict(),sc=t({query:r(),since:x,fetchedAt:x,pages:O,posts:c(Ea).max(Wa.posts),more:m()}),cc=b({kind:u(["accept","reject","review","defer","progress","superseded"]),reason:r().nullable()}),Ga=b({quest:a,member:a.optional(),content:r().min(1).max(256).optional(),cursor:S.optional()}),en=b({quest:a,content:r(),member:a,release:a,attempt:a,revision:a,observation:a,current:m(),state:u(["pending","qualified","unqualified","needs-review","failed","superseded","stale","blocked","unavailable"]),reason:r().nullable(),reward:b({attempt:a.nullable(),completion:a.nullable(),state:u(["unresolved","awarded","excluded"])})}),lc=b({items:c(en),nextCursor:S.nullable()}),_e=Vr,Q=y(_e,i().int().safe().nonnegative()),Ja=b({metrics:c(_e).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),maxAgeMs:i().int().positive().max(864e5).default(36e5)}),lt=864e5,Xa=t({kind:s("count"),count:i().int().min(1).max(1e4)}).strict(),Ya=f("kind",[t({kind:s("lifetime")}).strict(),t({kind:s("calendar"),period:u(["day","week","month"]),latenessMs:i().int().min(0).max(90*lt).default(7*lt)}).strict(),t({kind:s("rolling"),durationMs:i().int().min(1).max(365*lt)}).strict()]),ei=t({kind:s("progress"),goal:Xa,window:Ya,repeat:u(["once","repeat"]).default("once")}).strict(),dt=t({id:a,ordinal:i().int().positive(),achievedAt:i().int(),window:r()}),tn=f("status",[dt.extend({status:s("revoked"),completion:a,revokedAt:i().int()}),dt.extend({status:s("awarded"),completion:a}),dt.extend({status:s("budget-exhausted"),budget:a})]),ti=t({goal:i().int().positive(),current:i().int().nonnegative(),window:t({key:r(),start:i().int().nullable(),end:i().int().nullable()}),repeat:u(["once","repeat"]),settled:i().int().nonnegative(),latest:tn.nullable()}),ri=t({id:a,distinct:r(),attempt:a,occurredAt:i().int(),recordedAt:i().int(),window:r(),status:u(["counted","late","future","excluded"]),achievement:tn.nullable(),reason:r().nullable()}),dc=t({items:c(ri),nextCursor:r().nullable()}),mc=t({actionId:sr(),excluded:m(),reason:r().trim().min(1).max(2e3)}).strict(),uc=t({cursor:r().max(2e3).optional(),limit:I.number().int().min(1).max(100).optional()}).strict(),zc=t({excluded:m()}),yr=i().int().safe(),ft=/^(?:[+-]|(?:Etc\/)?GMT[+-]\d|(?:EST|MST|HST)$)/i;function ni(e){let n;try{n=new Intl.DateTimeFormat("en",{timeZone:e}).resolvedOptions().timeZone}catch{return null}return n==="UTC"?"UTC":ft.test(e)||ft.test(n)?null:n}var rn=r().min(1).max(100).transform((e,n)=>{let o=ni(e);return o===null?(n.addIssue({code:"custom",message:ft.test(e)?"Use a named IANA timezone, such as Europe/Budapest or UTC. Fixed offsets have no daylight-saving rules.":"Use an IANA timezone name, such as Europe/Budapest or UTC"}),V):o}),ue=r().min(1).max(100),nn=e=>`${e} no longer take a timeZone: they follow the project calendar. Set calendar.timeZone in relay.json or in Console settings.`,ht=e=>typeof e=="object"&&e!==null;function ai(e,n){return ht(e)&&e.kind==="streak"&&"timeZone"in e&&n.addIssue({code:"custom",path:["timeZone"],message:nn("Streaks")}),e}function an(e,n){let o=ht(e)?e.window:void 0;return ht(o)&&o.kind==="calendar"&&"timeZone"in o&&n.addIssue({code:"custom",path:["window","timeZone"],message:nn("Calendar leaderboard windows")}),e}var te=u(["lifetime","day","week","month"]),bc=t({timeZone:ue,today:r(),nextBoundary:yr,pending:t({timeZone:ue,effectiveAt:yr}).nullable(),declared:ue.nullable(),unsupported:r().nullable().default(null)}),pc=t({actionId:a,timeZone:rn,reason:r().trim().min(1).max(500)}).strict(),gc=t({timeZone:rn}).strict(),ii=t({kind:s("streak"),days:i().int().min(1).max(3650)}),oi=t({goal:i().int().positive(),current:i().int().nonnegative(),best:i().int().nonnegative(),today:r(),todayQualified:m(),timeZone:ue,nextBoundary:i().int(),pendingTimeZone:t({timeZone:ue,effectiveAt:i().int()}).nullable(),days:c(t({day:i().int(),date:r(),timeZone:r(),occurredAt:i().int()})),milestone:f("status",[t({status:s("pending")}),t({status:s("awarded"),completion:r(),achievedAt:i().int()}),t({status:s("budget-exhausted"),budget:r(),achievedAt:i().int()})])}),N=i().int().safe().nonnegative().max(864e13),vt=i().int().safe().nonnegative(),si=u(["new-record","new-observation","data-changed"]);function fc(e){return e==="custom"?"new-observation":"new-record"}var Pe=g([i().finite(),b({setting:r().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/)})]),kr=r().max(200).regex(/^[^.\s]+(\.[^.\s]+)*$/,"Use dot-separated keys, such as metrics.likes"),jr=g([b({path:kr,equals:g([r().max(1e3),i().finite(),m()])}),b({path:kr,gt:Pe.optional(),gte:Pe.optional(),lt:Pe.optional(),lte:Pe.optional()}).refine(e=>[e.gt,e.gte,e.lt,e.lte].some(n=>n!==void 0),"Compare with equals, gt, gte, lt or lte")]),ci=g([jr,c(jr).min(1).max(10)]);function li(e){return e===void 0?[]:Array.isArray(e)?e:[e]}function hc(e){return li(e).flatMap(n=>"equals"in n?[]:[n.gt,n.gte,n.lt,n.lte].flatMap(o=>typeof o=="object"?[o.setting]:[]))}var di=u(["none","required"]),mi=u(["activation","window","enrollment"]),ui=u(["staff","claim","automatic"]),zi=b({tracker:a,source:r().min(1).max(100),on:si,where:ci.optional(),beneficiary:ge,enrollment:di.optional(),since:mi.optional(),historical:ui.optional(),content:s(!0).optional()}).refine(e=>e.since!=="enrollment"||e.enrollment==="required",'since: "enrollment" needs enrollment: "required"');function vc(e){return e.on}function yc(e){return{enrollment:e.enrollment??"none",since:e.since??"activation",historical:e.historical??(e.content?"claim":"staff")}}function kc(e){return e.beneficiary}var Sr={issuer:r().min(1),subject:r().min(1).max(256),revision:vt,linkedAt:N.nullable()},bi=t({member:a,capturedAt:N,account:g([t({provider:s("wallet"),id:r().min(5).max(256),revision:vt,linkedAt:N.nullable()}),t({provider:s("x"),...Sr}),t({provider:s("discord"),...Sr}),t({provider:s("member"),id:a}),t({provider:Hr,subject:r().min(1).max(256),revision:vt,linkedAt:N.nullable()}),t({provider:r().min(1)})])}),pi=t({id:r().min(1).max(256),source:r(),occurredAt:N,observedAt:N,firstSeenAt:N,author:t({id:r().min(1).max(256),verified:m().nullable(),kind:pe.optional()}).nullable(),accounts:y(ge,Jr).optional(),data:y(r(),L()),removed:m()}),gi=t({revision:a,observation:a,body:y(r(),L())}),jc=t({tracker:a,key:a,beneficiary:ge,record:pi,content:gi.optional(),attribution:bi,enrolledAt:N.optional()}),xr=Object.freeze(["budget-exhausted","defer-expired","defer-limit-exceeded","evaluator-deferred","evaluator-progress","imported","integration-required","not-linked","provider-unavailable","author-error","evaluator-error","capability-limit"]),wr=64,fi=/^[a-z0-9-]+$/;function hi(e){return typeof e!="string"||e.length===0||e.length>wr||!fi.test(e)?`Invalid reject code ${JSON.stringify(e)}: use lowercase letters, digits and hyphens, at most ${wr} characters, such as "wrong-answers"`:xr.includes(e)?`Invalid reject code ${JSON.stringify(e)}: Relay writes it itself. A reject code cannot be ${xr.join(", ")}`:null}var vi=r().superRefine((e,n)=>{let o=hi(e);o&&n.addIssue({code:"custom",message:o})}),yi={quests:1e3,questTypes:200,collections:1e3},Ce={modules:200,size:2e6},ki=r().regex(/^[0-9a-f]{64}$/),ji=r().max(200).regex(/^[a-z0-9_][a-z0-9_.-]*(\/[a-z0-9_][a-z0-9_.-]*)*\.js$/i).refine(e=>!e.split("/").some(n=>n==="."||n===".."),"Runtime module paths cannot contain . or .. segments"),Ot=t({digest:ki,sdkVersion:r().min(1).max(64)}).strict(),Si=y(ji,r().min(1)).refine(e=>{let n=Object.values(e);return n.length>0&&n.length<=Ce.modules&&n.reduce((o,l)=>o+l.length,0)<=Ce.size},`A runtime has 1 to ${Ce.modules} modules and at most ${Ce.size} characters of source`),Sc=Ot.extend({zodVersion:r().min(1).max(64),modules:Si}).strict();async function xc(e){let n=JSON.stringify(Object.entries(e).sort(([l],[d])=>l<d?-1:l>d?1:0)),o=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n));return[...new Uint8Array(o)].map(l=>l.toString(16).padStart(2,"0")).join("")}var Ar=r().regex(/^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,199}$/),qt=f("kind",[ii,ei,t({kind:s("once")}).strict(),t({kind:s("keyed")}).strict()]),yt=r().min(1).max(500),xi=t({id:Ar,scope:u(["member","project"]),period:te,limit:i().int().positive().max(Number.MAX_SAFE_INTEGER),cost:g([i().int().positive().max(Number.MAX_SAFE_INTEGER),t({balance:Ar}).strict()])}).strict(),wc=t({quest:r().min(1).max(200),key:yt,completedAt:i().int().nonnegative().safe().nullable()}),Ac=100,wi=u(["discord","x"]),Ai=u(["discord"]),Ii=t({id:r().regex(/^[0-9]{1,20}$/),name:r().min(1),icon:r().nullable()}),Ic=t({provider:Ai,configured:m(),status:u(["disconnected","ready","attention"]),revision:i().int().nonnegative(),server:Ii.nullable(),issue:r().nullable(),connectedAt:i().default(0)}),Oi=r().min(32).max(44).regex(/^[1-9A-HJ-NP-Za-km-z]+$/),De=u(["solana","eip155","cosmos"]),on=/^cosmos:[-_a-zA-Z0-9]{1,32}$/,Rt=ce(e=>typeof e=="string"&&on.test(e),"Use a Cosmos network: cosmos:<chain ID>"),Oc=r().regex(/^[a-zA-Z][a-zA-Z0-9/:._-]{2,127}$/,"Use a Cosmos bank denomination such as uatom or uosmo");function qc(e){if(typeof e=="string"&&!e.startsWith("cosmos:"))throw new Error('Use a Cosmos network such as "cosmos:cosmoshub-4"');let n=typeof e=="string"?{chainId:e.slice(7)}:e;if(typeof n?.chainId!="string")throw new Error('Pass a Cosmos chain as { chainId } or a network such as "cosmos:cosmoshub-4"');let o=`cosmos:${n.chainId}`;if(!on.test(o))throw new Error("A Cosmos chain ID has 1 to 32 letters, digits, hyphens or underscores");if(n.chainInfo&&n.chainInfo.chainId!==n.chainId)throw new Error("The chain info describes another chain ID");return{...n,network:o}}var sn="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",qi=r().regex(/^0x[0-9a-fA-F]{40}$/),Ri=r().min(8).max(90).regex(/^(?:[a-z][a-z0-9]{0,82}1[02-9ac-hj-np-z]{38,}|[A-Z][A-Z0-9]{0,82}1[02-9AC-HJ-NP-Z]{38,})$/),Rc=f("chain",[t({chain:s("solana"),address:Oi}).strict(),t({chain:s("eip155"),address:qi,chainId:i().int().positive().safe().optional()}).strict(),t({chain:s("cosmos"),network:Rt,address:Ri}).strict()]),Pc=t({id:r().min(1).max(200),purpose:u(["link","sign-in"]),chain:De,network:Rt.nullable(),address:r(),message:r().max(4096),expiresAt:i().int()}),Cc=t({challenge:r().min(1).max(200),signature:r().min(1).max(256),publicKey:r().max(128).optional()}).strict(),$c=t({chain:De,network:Rt.nullable(),address:r(),verifiedAt:i().int().nonnegative(),revision:i().int().positive(),signIn:m()}),Ec=t({chain:De,address:r().min(1).max(100)}).strict();async function Tc(e){let n=await e.address();switch(e.chain){case"solana":return{chain:"solana",address:n};case"eip155":return{chain:"eip155",address:n,...e.chainId?{chainId:await e.chainId()}:{}};case"cosmos":if(!e.network)throw ua("Choose the Cosmos chain for this wallet",la.InvalidInput);return{chain:"cosmos",network:e.network,address:n}}}var Mc=5,kt=["solana","eip155","cosmos"],Pi=u(kt),Uc=c(Pi).max(kt.length).refine(e=>new Set(e).size===e.length,{message:"Duplicate wallet family"}).transform(e=>kt.filter(n=>e.includes(n)));function _c(e){return e.chain}function Dc(e,n){if(e.chain==="cosmos"){if(!e.network||n&&n!==e.network)throw new Error("A Cosmos wallet belongs to its own network");return`${e.network}:${e.address}`}let o=n??(e.chain==="solana"?sn:"eip155:1");if(!(e.chain==="solana"?/^solana:[1-9A-HJ-NP-Za-km-z]{32}$/.test(o):Pt(o)))throw new Error(`Use a ${e.chain} network for this wallet`);return`${o}:${e.address}`}function Pt(e){return/^eip155:[1-9][0-9]{0,15}$/.test(e)}var Lc=ce(e=>typeof e=="string"&&Pt(e),'Use an EVM chain ID such as "eip155:8453"'),mt=r().regex(/^(0|[1-9][0-9]*)$/),Zc=j(t({chain:r(),token:r().nullable(),decimals:i().int().min(0).max(255).nullable(),total:mt,wallets:c(t({address:r(),amount:mt}).strict()),at:t({kind:u(["slot","block"]),number:mt}).strict(),observedAt:i().int().nonnegative()}).strict()),Ci=t({required:m().default(!0),minLength:i().int().min(0).max(1e4).default(1),maxLength:i().int().min(1).max(1e4).default(1e4)}).strict().refine(e=>e.minLength<=e.maxLength,"minLength must not exceed maxLength"),$i=r().min(1).max(253).refine(e=>{if(!/^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/i.test(e)||e.includes(".."))return!1;try{let n=new URL(`https://${e}`);return n.hostname===e.toLowerCase()&&!n.port&&!n.username&&!n.password&&n.pathname==="/"&&!n.search&&!n.hash}catch{return!1}},"Use a hostname without a scheme, path, port, or wildcard"),Ei=t({required:m().default(!0),allowedHosts:c($i).min(1).max(100).optional()}).strict(),cn=t({kind:s("text"),value:r().max(1e4)}).strict(),ln=t({kind:s("url"),value:r().max(2048)}).strict(),Nc=f("kind",[cn,ln]);function Qc(e,n){let o=e.kind==="text"?1e4:2048;if(e.value.length>o)return`Enter no more than ${o} characters`;if(e.kind!==n.input)return`This quest requires ${n.input} input`;if(!e.value.trim())return n.constraints.required?"This field is required":null;if(n.input==="text")return e.value.length<n.constraints.minLength?`Enter at least ${n.constraints.minLength} characters`:e.value.length>n.constraints.maxLength?`Enter no more than ${n.constraints.maxLength} characters`:null;let l=dn(e.value);return l?n.constraints.allowedHosts&&!n.constraints.allowedHosts.some(d=>d.toLowerCase()===l.hostname.toLowerCase())?`Use a URL hosted on: ${n.constraints.allowedHosts.join(", ")}`:null:"Enter a valid HTTP or HTTPS URL without credentials"}function dn(e){if(e!==e.trim()||/[\\\s]/.test(e)||!/^https?:\/\//i.test(e))return null;try{let n=new URL(e);return["http:","https:"].includes(n.protocol)&&!n.username&&!n.password?n:null}catch{return null}}function Bc(e){let n=dn(e);return!n||n.port||!["x.com","www.x.com","twitter.com","www.twitter.com","mobile.twitter.com"].includes(n.hostname)?null:/^\/(?:[A-Za-z0-9_]+|i\/web)\/status\/([0-9]{1,20})\/?$/.exec(n.pathname)?.[1]??null}var Ct=r().regex(/^[a-zA-Z0-9_-]+$/).max(100),Ti=t({id:Ct,label:r().trim().min(1).max(500)}).strict(),mn=t({id:Ct,prompt:r().trim().min(1).max(1e3),choices:c(Ti).min(2).max(8).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Choice IDs must be unique")}).strict(),Mi=c(mn).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Question IDs must be unique"),$t=c(mn.extend({correct:Ct}).refine(e=>e.choices.some(n=>n.id===e.correct),"Choose a correct answer from the available choices")).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Question IDs must be unique"),un=g([b({provider:s("domino"),resource:s("point-ledger")}),ha]),Hc=t({source:un,query:r().max(100).optional(),cursor:r().regex(/^\d{1,6}$/).optional(),ids:c(r().min(1).max(100)).max(50).optional()}).strict(),Vc=t({revision:i().int(),options:c(t({id:r(),label:r(),description:r().optional(),group:r().optional(),disabledReason:r().optional()})),nextCursor:r().nullable().default(null),cursor:r().nullable()}),zn=W.datetime({offset:!0}).transform(e=>new Date(e).toISOString()),jt=g([s(""),r().regex(/^\S{1,200}$/)]),Z={label:r().min(1),description:r().optional()},Ui=f("kind",[t({...Z,kind:s("point-ledger"),default:a.or(s(""))}).strict(),t({...Z,kind:s("datetime"),default:zn}).strict(),t({...Z,kind:s("resource"),default:jt,source:un}).strict(),t({...Z,kind:s("quiz"),default:$t}).strict(),t({...Z,kind:s("text"),default:r(),minLength:i().int().nonnegative(),maxLength:i().int().positive(),multiline:m(),picker:r().optional(),decimals:i().int().min(0).max(255).optional()}).strict(),t({...Z,kind:s("integer"),default:i().int(),min:i().int(),max:i().int()}).strict(),t({...Z,kind:s("boolean"),default:m()}).strict(),t({...Z,kind:s("choice"),default:r(),options:c(r().min(1)).min(1)}).strict()]),_i=y(r().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/),Ui),Y=y(r(),g([r(),i().finite(),m(),$t]));function Di(e){return e.length<=100&&/^(0|[1-9][0-9]*)$/.test(e)}function Li(e){return e==="solana"||e===sn||Pt(e)}function Kc(e){return e?.kind==="integer"||e?.kind==="text"&&e.picker==="amount"}function Zi(e){let n=r().min(e.minLength).max(e.maxLength);switch(e.picker){case"amount":return n.refine(Di,"Use a whole number of base units, such as 1000000");case"chain":return n.refine(Li,'Use "solana" or an EVM chain ID such as "eip155:8453"');default:return n}}function Fc(e,n){let o={};for(let[l,d]of Object.entries(e))switch(d.kind){case"point-ledger":o[l]=jt.default(d.default);break;case"datetime":o[l]=zn.default(d.default);break;case"resource":o[l]=jt.default(d.default);break;case"quiz":o[l]=$t.default(d.default);break;case"text":o[l]=Zi(d).default(d.default);break;case"integer":o[l]=i().int().min(d.min).max(d.max).default(d.default);break;case"boolean":o[l]=m().default(d.default);break;case"choice":o[l]=u(d.options).default(d.default);break}return Y.parse(t(o).strict().parse(n))}function Wc(e,n){return Object.entries(e).filter(([o,l])=>(l.kind==="resource"||l.kind==="point-ledger")&&!n[o]).map(([o])=>o)}function Gc(e,n){return e.kind===n.kind||e.kind==="resource"&&e.source.provider==="domino"&&n.kind==="point-ledger"||n.kind==="resource"&&n.source.provider==="domino"&&e.kind==="point-ledger"||e.kind==="text"&&(n.kind==="resource"||n.kind==="datetime"||n.kind==="point-ledger")}var re={key:a};function Jc(e){if("id"in e)throw new Error("Authoring definitions use key, not id");return a.parse(e.key)}var ee=i().int().safe().nonnegative(),Et=t({from:ee,until:ee}).strict().refine(e=>e.until>e.from,{message:"Window end must follow its start",path:["until"]}),Te=t({key:a,title:r().trim().min(1).max(120),window:Et.optional(),enrollment:u(["none","required"]).default("none")}).strict(),Ni=Te.omit({key:!0,title:!0}).extend({...re,title:r().trim().min(1).max(120).optional()}).strict().transform(e=>{let n=e;return Te.parse({...n,title:e.title??n.key})});function Xc(e){return Ni.parse(e)}var Qi=Te.extend({enrolledAt:ee.nullable(),withdrawnAt:ee.nullable().default(null),withdrawalReason:r().nullable().default(null)}),bn=t({actionId:a,campaign:a}).strict(),Yc=bn.extend({member:a}),Bi=bn,el=Bi.extend({member:a,reason:r().trim().min(1).max(500)}),tl=t({campaign:a,member:a,enrolledAt:ee,withdrawnAt:ee.nullable().default(null),withdrawalReason:r().nullable().default(null)});function fe(e,n){return n}var rl=a.or(s("")).brand();function Hi(e){return typeof e=="string"?e:e.key}var Ir=t({key:a,title:r().trim().min(1).max(120)}).strict(),Vi=Ir.omit({key:!0,title:!0}).extend({...re,title:r().trim().min(1).max(120).optional()}).strict().transform(e=>Ir.parse({...e,title:e.title??e.key}));function nl(e){return fe("group",Vi.parse(e))}function Ki(e){return a.parse(e.key)}var pn=r().trim().min(1).max(120),gn=r().trim().min(1).max(1e3),St=i().int().nonnegative().max(864e13),al=t({actionId:a,key:a,title:pn}).strict(),il=t({title:pn}).strict(),ol=t({actionId:a,member:a,reason:gn}).strict(),sl=t({actionId:a,reason:gn}).strict(),cl=b({cursor:S.optional(),limit:i().int().min(1).max(100).optional()}),Fi=t({key:a,title:r(),members:i().int().nonnegative(),createdAt:St,archivedAt:St.nullable()}),ll=t({items:c(Fi),nextCursor:S.nullable()}),Wi=t({member:a,addedAt:St.nullable()}),dl=t({items:c(Wi),nextCursor:S.nullable()}),fn=i().int().safe().nonnegative(),hn=fn.positive(),vn=f("scope",[t({kind:s("completion"),quest:a,scope:s("ever")}).strict(),t({kind:s("completion"),quest:a,scope:s("period"),period:te.exclude(["lifetime"])}).strict()]),yn=t({kind:s("balance"),balance:a,minimum:hn}).strict(),kn=t({kind:s("group"),group:a,title:r()}).strict(),Tt=f("kind",[vn,yn,kn]),he=g([t({kind:s("completion"),quest:a,title:r(),scope:s("ever")}),t({kind:s("completion"),quest:a,title:r(),scope:s("period"),period:te.exclude(["lifetime"]),resetsAt:i().int().safe()}),t({kind:s("balance"),balance:a,title:r(),minimum:hn,current:fn}),t({kind:s("group"),group:a,title:r()})]);function ml(e,n={}){let o=e.key;return vn.parse({kind:"completion",quest:o,scope:n.scope??"ever",..."period"in n?{period:n.period}:{}})}function ul(e,n){return yn.parse({kind:"balance",balance:Hi(e),minimum:n})}function zl(e){return kn.parse({kind:"group",group:Ki(e),title:e.title})}var ve=2147483647,ye=t({kind:s("points").default("points"),balance:a,amount:i().int().min(0).max(ve)}).strict(),Mt=t({badge:a.optional(),group:a.optional(),id:a,title:r().min(1).max(120),tiers:c(t({id:a,title:r().min(1).max(120)}).strict()).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Tier IDs must be unique"),inventory:t({kind:s("untracked")}).strict(),fulfillment:f("kind",[t({kind:s("staff-handover")}).strict(),t({kind:s("automatic")}).strict()])}).strict().refine(e=>e.badge===void 0&&e.group===void 0||e.fulfillment.kind==="automatic"&&e.tiers.length===1&&e.tiers[0].id==="awarded","Badge and group rewards require the fixed automatic achievement envelope").refine(e=>e.badge===void 0||e.group===void 0,"A reward is either a badge or a group membership"),bl=t({id:a,key:a.nullable()}),B=t({kind:s("tier"),reward:Mt,tier:a}).strict().refine(e=>e.reward.tiers.some(n=>n.id===e.tier),"Unknown reward tier"),Gi=B.transform((e,n)=>{let o=e.reward.badge;return!o||e.reward.fulfillment.kind!=="automatic"||e.reward.tiers.length!==1||e.tier!=="awarded"?(n.addIssue({code:"custom",message:"Invalid badge reward"}),V):{...e,reward:{...e.reward,badge:o}}});function pl(e,n){return Gi.parse({kind:"tier",tier:"awarded",reward:{id:e,badge:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var Ji=B.transform((e,n)=>{let o=e.reward.group;return!o||e.reward.fulfillment.kind!=="automatic"||e.reward.tiers.length!==1||e.tier!=="awarded"?(n.addIssue({code:"custom",message:"Invalid group reward"}),V):{...e,reward:{...e.reward,group:o}}});function gl(e,n){return Ji.parse({kind:"tier",tier:"awarded",reward:{id:e,group:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var Xi=fa,xt=g([ye,B,Xi]);function Ut(e){return e.kind==="tier"&&e.reward.badge?"badge:"+e.reward.badge:e.kind==="tier"&&e.reward.group?"group:"+e.reward.group:e.kind==="integration"?`integration:${e.provider}:${e.action}:${e.roleId}`:e.kind==="points"?"points:"+e.balance:"tier:"+e.reward.id}var jn=g([t({kind:s("manual"),input:s("text"),constraints:Ci,actor:u(["member","staff"]).optional()}).strict(),t({kind:s("manual"),input:s("url"),constraints:Ei,actor:u(["member","staff"]).optional()}).strict(),t({kind:s("manual"),input:u(["photo","quiz","none"]),actor:u(["member","staff"]).optional()}).strict(),t({kind:s("automatic"),tracker:zi.optional()}).strict()]),Yi=g(jn.options.map(e=>e.strip())),Sn=t({kind:u(["pass","fail","unclear"]),reason:r().min(1).max(2e3)}).strict(),fl=t({text:r().min(1).max(16e3).refine(e=>e.trim().length>0,"Text must not be blank"),criteria:r().trim().min(1).max(2e3)}).strict(),hl=Sn,Or={minRetryAfterMs:1e3,maxRetryAfterMs:36e5,retryAfterMs:6e4,horizonMs:864e5,maxDefers:100},qr={minMs:1e3,maxMs:6048e5},Rr=i().int().min(qr.minMs).max(qr.maxMs),_t=t({current:i().finite().nonnegative(),target:i().finite().positive(),reason:r().min(1).max(2e3)}).refine(e=>e.current<=e.target,{message:"Progress current must not exceed target"}),vl=f("kind",[b({kind:s("defer"),reason:r().min(1).max(2e3),retryAfterMs:i().int().min(Or.minRetryAfterMs).max(Or.maxRetryAfterMs).optional(),until:i().int().safe().nonnegative().optional()}),_t.safeExtend({kind:s("progress")}).strict(),t({kind:s("accept"),rewards:c(xt).max(10),completionKey:yt.optional()}).strict(),t({kind:s("reject"),reason:r().min(1).max(2e3),code:vi.optional(),requestedReview:s(!0).optional()}).strict(),t({kind:s("review"),reason:r().min(1).max(2e3),rewards:c(xt).max(10).optional(),completionKey:yt.optional()}).strict()]),eo=u(["workers-ai"]),to=u(["fixture-pass","fixture-fail","fixture-unclear","fixture-error","workers-ai"]),Dt=c(xt).max(10).refine(e=>new Set(e.map(Ut)).size===e.length,"Use one entry per balance or shared reward"),ze=r().max(2e3).refine(e=>{if(/^\/(?!\/)[^\\\s]*$/.test(e))return!0;try{return new URL(e).protocol==="https:"}catch{return!1}},"Use an HTTPS URL or a same-site path beginning with /"),ro=f("kind",[t({kind:s("link"),url:ze.refine(e=>e.startsWith("https://"),"Use an HTTPS URL"),label:r().trim().min(1).max(120)}).strict()]),no=t({title:r().trim().min(1).max(120),description:r().max(4e3).optional(),action:ro.optional()}).strict(),ao=f("kind",[t({kind:s("account"),provider:wt}).strict(),t({kind:s("wallet"),chain:De.optional()}).strict()]),Me=t({steps:c(no).max(30).optional(),image:ze.optional(),imageAlt:r().max(500).optional(),requirements:c(ao).max(10).optional()}).strict(),xn=Me.extend({quiz:Mi.optional(),instructions:r().max(4e3).optional(),video:t({url:ze,poster:ze.optional(),captions:t({url:ze,language:r().min(2).max(20),label:r().min(1).max(80)}).strict().optional()}).strict().optional()}).strict(),io=t({visible:m()}).strict(),oo=2,so=s(oo),wn=t({quest:a,evaluatorProtocol:so,title:r().min(1).max(120),presentation:xn.default({}),integrations:c(wi).max(10).default([]),fields:_i,values:Y,rewards:Dt,humanReview:m(),trigger:jn,performance:Ja.optional(),requires:c(Tt).max(30).default([]),campaign:Te.optional(),availability:Et.optional(),completion:Ie(ai,qt),visibility:u(["visible","hidden"]).default("visible"),profile:io.default({visible:!1}),budgets:c(xi).max(20).default([]),retryCooldownMs:Rr.optional(),completionCooldownMs:Rr.optional()}).strict(),co=t({code:r().min(1).max(1e6)}).strict(),lo=co.extend({runtime:Ot.optional(),settings:Y,provider:eo,expectedRelease:a.nullable().optional(),settingRenames:y(r(),r()).optional()}).strict(),yl=t({releases:c(lo).min(1).max(yi.quests)}).strict(),kl=t({quest:a,expectedRelease:a,set:Y,reset:c(r()),presentation:Me.nullable().optional()}).strict(),mo=wn.extend({completion:qt}),uo=j(mo.extend({key:a.optional(),code:r(),runtime:Ot.optional(),provider:to,id:a,createdAt:i(),origin:t({typeVersion:a}).strict().optional(),lifecycle:u(["active","paused","archived"]).default("active"),configuration:t({defaults:Y,overrides:Y,preserved:c(r()),presentation:Me.optional(),presentationDefaults:Me.optional()}).strict().optional()})),jl=t({code:r(),definition:wn}),zo=y(a,a).refine(e=>Object.keys(e).length>0&&Object.keys(e).length<=50,"Provide between 1 and 50 answers").transform(e=>Object.fromEntries(Object.entries(e).sort(([n],[o])=>n.localeCompare(o)))),bo=t({kind:s("quiz"),release:a.optional(),answers:zo}).strict(),Le=g([bo,cn,ln]),Sl=t({actionId:a,quest:a,member:a,evidence:a.optional(),input:Le.optional(),release:a.optional(),faultAfterReview:m().optional()}).strict(),xl={Queued:"queued",Evaluating:"evaluating",Deferred:"deferred",Accepted:"accepted",Progressed:"progressed",Rejected:"rejected",NeedsReview:"needs-review",Failed:"failed"},po=r(),Ze=t({id:a,release:a,quest:a,member:a,evidence:a.nullable(),input:Le.optional(),status:po,reason:r().nullable(),retries:i(),generation:i(),completion:r().nullable(),reviewRewards:Dt.nullable().default(null),evaluationRun:i().int().nonnegative().default(0),deferCount:i().int().nonnegative().default(0),deferUntil:i().int().safe().nullable().default(null),nextEvaluationAt:i().int().safe().nullable().default(null),code:r().nullable().default(null),progress:_t.nullable().default(null),requestedReview:m().default(!1),createdAt:i()}),wl={Open:"open",Submitted:"submitted",Discarded:"discarded",Expired:"expired"},go=r(),fo=j(t({id:a,quest:a,member:a,release:a.nullable(),input:Le.nullable(),evidence:a.nullable(),reviewRequired:m(),status:go,attempt:a.nullable(),createdAt:i(),updatedAt:i(),expiresAt:i()})),Al=t({release:a.nullable().optional(),input:Le.nullable().optional(),evidence:a.nullable().optional()}).strict(),Il=j(t({submission:fo,attempt:Ze,replayed:m()})),ho=t({id:i(),attempt:r().nullable(),kind:r(),detail:r(),actor:r().nullable().default(null),at:i()}),vo=t({item:a,revision:i().int().nonnegative()}).strict(),be=t({item:a,label:r().min(1).max(80)}).strict(),yo=f("kind",[t({kind:s("untracked")}).strict(),t({kind:s("at-pickup"),tiers:c(t({tier:a,variants:c(be).min(1).max(100)}).strict()).min(1).max(100)}).strict()]),Ol=t({reward:Mt,revision:i().int().nonnegative(),policy:yo}),ql=f("kind",[t({kind:s("untracked")}).strict(),t({kind:s("at-pickup"),revision:i().int().nonnegative(),variants:c(be.extend({available:i().int().nonnegative()}))}).strict()]),Rl=t({reward:a,revision:i().int().nonnegative(),actionId:a,policy:f("kind",[t({kind:s("untracked")}).strict(),t({kind:s("at-pickup"),tiers:c(t({tier:a,variants:c(be.extend({item:a.optional()})).min(1).max(100)}).strict()).min(1).max(100)}).strict()])}).strict(),An=t({completion:a,reason:r(),flaggedAt:i(),remainingTier:a.nullable()}),$e={id:a,member:a,reward:Mt,earnedTier:a,tier:a,revision:i().int().positive()},Pl=f("status",[t({...$e,status:s("available")}).strict(),t({...$e,status:s("handing-over"),handover:a,startedAt:i(),allocation:be.optional()}).strict(),t({...$e,status:s("collected"),handover:a,startedAt:i(),allocation:be.optional(),collectedAt:i(),recovery:An.optional()}).strict(),t({...$e,status:s("void"),voidedAt:i()}).strict()]),ko=t({id:a,title:r(),tiers:c(t({id:a,title:r()}).loose()),inventory:t({kind:r()}).loose(),fulfillment:t({kind:r()}).loose()}).loose(),de={id:a,member:a,reward:ko,earnedTier:a,tier:a,revision:i().int()},Pr=t({item:a,label:r()}).loose(),In=g([f("status",[t({...de,status:s("available")}).loose(),t({...de,status:s("handing-over"),handover:a,startedAt:i(),allocation:Pr.optional()}).loose(),t({...de,status:s("collected"),handover:a,startedAt:i(),allocation:Pr.optional(),collectedAt:i(),recovery:An.optional()}).loose(),t({...de,status:s("void"),voidedAt:i()}).loose()]),t({...de,status:r()}).loose().transform(({status:e,...n})=>({...n,status:"unsupported",reportedStatus:e}))]),Cl=t({actionId:a,revision:i().int().positive(),selection:vo.optional()}).strict(),$l=t({actionId:a,handover:a}).strict(),El=t({actionId:a,revision:i().int().positive(),reason:r().trim().min(1).max(500)}).strict(),Tl={Quest:"quest",Leaderboard:"leaderboard"},jo=r().min(1).max(64),So=t({kind:jo,id:a}),xo=t({key:r().default("once"),id:a,quest:a,member:a,source:So.optional()}),wo=f("kind",[t({kind:s("available"),input:u(["photo","quiz","none","text","url"])}).strict(),t({kind:s("completed")}).strict(),t({kind:s("locked"),missing:c(he).min(1)}).strict(),t({kind:s("blocked"),reason:u(["budget-exhausted","connection-required","wallet-required","paused","outside-window","enrollment-required"]),window:u(["tracker","quest"]).optional(),resetsAt:i().int().safe().optional()}).strict(),t({kind:s("staff-required")}).strict(),t({kind:s("automatic")}).strict(),t({kind:s("checking"),attempt:a}).strict(),t({kind:s("needs-review"),attempt:a}).strict(),t({kind:s("retryable"),attempt:a}).strict()]),Ao=g(wo.options.map(e=>e.strip())),Io=t({id:a,scope:u(["member","project"]),period:u(["day","week","month","lifetime"]),remaining:i().int().safe().nonnegative(),resetsAt:i().int().safe().nullable()}),Ml=j(t({member:a,quests:c(t({quest:a,key:a.optional(),release:a.optional(),title:r(),presentation:xn.default({}),connections:c(wt).default([]),trigger:Yi,availability:Ao,completed:m(),completion:qt.default({kind:"once"}),streak:oi.nullable().optional(),counter:ti.nullable().optional(),progress:_t.nullable().default(null),completionCount:i().int().nonnegative().default(0),visibility:u(["visible","hidden"]).default("visible"),missing:c(he),campaign:Qi.nullable().default(null),window:Et.nullable().default(null),budgets:c(Io).default([]),retryAt:i().int().safe().optional(),nextAvailableAt:i().int().safe().optional(),attempt:Ze.nullable()})),entitlements:c(In)})),Ul=j(t({releases:c(uo),completions:c(xo),entitlements:c(In),attempts:c(Ze),balances:c(t({member:r(),balance:r(),earned:i(),held:i(),available:i()})),events:c(ho)})),_l=t({id:a,member:a,type:u(["image/jpeg","image/png"]),size:i()}),Dl=t({error:r(),code:r().optional(),window:u(["tracker","quest"]).optional(),missing:c(he).optional(),retryAt:i().int().safe().optional()}),Ll=t({actionId:a,generation:i().int().nonnegative(),decision:u(["accept","reject"]),reason:r().trim().min(1).max(2e3)}).strict(),Zl=t({item:a,quantity:i().int().min(0).max(1e4)}).strict(),Nl=t({actionId:a,member:a,item:a,balance:a,price:i().int().positive().max(1e4)}).strict(),On={limit:i().int().min(1).max(100).default(25),cursor:r().min(1).max(4096).optional()},Ql=t({...On,member:a.optional(),quest:a.optional()}).strict(),Bl=t({...On,prefix:a.optional()}).strict(),Oo=t({attempt:Ze,title:r(),checks:c(t({criteria:r(),result:Sn}))}),Hl=t({items:c(Oo).max(100),nextCursor:r().nullable()}),Vl=t({items:c(t({member:a})).max(100),nextCursor:r().nullable()}),Kl=t({actionId:a,name:r().trim().min(1).max(80)}).strict(),Fl=t({id:a,name:r()}),Wl=b({contentAttempt:a,observation:a,observedAt:i().int().safe().nonnegative(),metrics:Q,rewards:Dt}),Gl=Ga.extend({content:r().min(1).max(256)}),Jl=b({current:b({state:u(["content-pending","content-unqualified","waiting","pending","qualified","unqualified","needs-review","failed","superseded"]),reason:r().nullable(),contentAttempt:a,attempt:a.nullable(),reward:en.shape.reward}),items:c(b({attempt:a,contentAttempt:a,observation:a,observedAt:i(),metrics:Q,state:u(["pending","qualified","unqualified","needs-review","failed","superseded"]),reason:r().nullable()})),nextCursor:S.nullable()});var nd="youtube-shorts",ad=t({title:r(),description:r(),tags:c(r()),durationSeconds:i().int().nonnegative(),publishedAt:i().int().nonnegative()}),id=["views","likes","comments"],od="tiktok-videos",sd=t({title:r(),description:r(),durationSeconds:i().int().nonnegative(),width:i().int().nonnegative(),height:i().int().nonnegative(),createdAt:i().int().nonnegative(),shareUrl:r(),isAigc:m()}),cd=["views","likes","comments","shares"];function U(e){let n;return()=>n??=e()}function Se(e){let n={};for(let[o,l]of Object.entries(e))Object.defineProperty(n,o,{get:U(l),enumerable:!0,configurable:!0});return n}var xe=["7d","30d","90d","all"],q=U(()=>i().int().safe()),Ne=U(()=>c(q())),F=U(()=>W.datetime({offset:!0})),qo=U(()=>t({key:r(),start:F(),end:F()})),Cn=U(()=>t({key:u(xe),from:F(),to:F(),bucket:u(["day","week"]),timeZone:r(),buckets:c(qo())})),$n=U(()=>t({from:F(),to:F()}).optional()),ld=b(Se({range:()=>u(xe),ledger:()=>a.optional()})),M=U(()=>t({total:q(),previousTotal:q().optional(),series:Ne()})),qn=U(()=>M().optional()),Ro=U(()=>t({quest:a,title:r(),attempts:q(),completions:q(),decided:q(),rejected:q(),needsReview:q(),rejectionRate:i().min(0).max(1).nullable(),topReasons:c(t({reason:r(),code:r().nullable(),count:q()})),rejectionsBySource:t({evaluator:q(),staff:q(),budget:q(),expired:q()}),series:t({attempts:Ne(),completions:Ne()})})),dd=t(Se({range:Cn,previous:$n,members:()=>t({signUps:M(),active:M()}),quests:()=>t({attempts:M(),completions:M(),rejections:M(),needsReview:M(),byQuest:c(Ro())}),points:()=>t({ledgers:c(t({key:a,name:r(),archived:m()})),ledger:a.nullable(),hasSpending:m(),awarded:M(),spent:qn(),net:qn(),membersEarning:M()}),offers:()=>t({redemptions:M(),byOffer:c(t({offer:a,title:r(),redemptions:q(),series:Ne()}))}).optional(),referrals:()=>t({accepted:M(),qualified:M(),acceptedQualified:t({total:q(),previousTotal:q().optional()})}).optional(),testEnvironment:()=>t({lastResetAt:F().nullable(),shiftedClockMembers:q()}).optional()}));var Po=["number","line","bar","table"],R=["number","line","bar","table"],Rn=["number","line","table"],Co=["number","bar","table"],ke=["quest","group","tracker"],Qt={"members.signUps":{definition:"Members who joined the project, by when they joined.",kind:"count",breakdowns:[],filters:["group"],charts:R,ledger:!1},"members.active":{definition:"Distinct members with an attempt, by when it was created; the total counts each member once.",kind:"distinct",breakdowns:[],filters:["group"],charts:R,ledger:!1},"quests.attempts":{definition:"Attempts, by when they were created.",kind:"count",breakdowns:["quest"],filters:ke,charts:R,ledger:!1},"quests.completions":{definition:"Quest completions never revoked, by when they completed.",kind:"count",breakdowns:["quest"],filters:ke,charts:R,ledger:!1},"quests.needsReview":{definition:"Attempts the evaluator sent to staff review, by when they were created, whatever staff decided later.",kind:"count",breakdowns:["quest"],filters:ke,charts:R,ledger:!1},"quests.rejections":{definition:"Rejected attempts, by when they were decided.",kind:"count",breakdowns:["quest","source","reason"],filters:ke,charts:R,ledger:!1},"quests.rejectionRate":{definition:"Rejected attempts divided by decided attempts (accepted, progressed or rejected), by when they were decided; empty below 10 decided.",kind:"rate",breakdowns:["quest"],filters:ke,charts:Rn,ledger:!1,minimumDenominator:10},"points.awarded":{definition:"Points in the ledger's award entries, by effective date.",kind:"count",breakdowns:[],filters:["group"],charts:R,ledger:!0},"points.spent":{definition:"Points in the ledger's spend entries, as a positive number, by effective date.",kind:"count",breakdowns:[],filters:["group"],charts:R,ledger:!0},"points.net":{definition:"Every entry's signed amount in the ledger, by effective date; a reversal takes its original entry's date.",kind:"count",breakdowns:[],filters:["group"],charts:R,ledger:!0},"points.membersEarning":{definition:"Distinct members awarded more than 0 points in the ledger, by effective date; the total counts each member once.",kind:"distinct",breakdowns:[],filters:["group"],charts:R,ledger:!0},"offers.redemptions":{definition:"Fulfilled offer redemptions, by when they were redeemed.",kind:"count",breakdowns:["offer"],filters:["offer","group"],charts:R,ledger:!1},"referrals.accepted":{definition:"Accepted referrals, by when they were accepted. A referral belongs to no program, so it takes no program breakdown or filter.",kind:"count",breakdowns:[],filters:[],charts:R,ledger:!1},"referrals.qualified":{definition:"Active referral qualifications, one per program and friend, by when they first qualified; suspended referrals count.",kind:"count",breakdowns:["program"],filters:["program"],charts:R,ledger:!1},"referrals.qualificationRate":{definition:"Of the referrals accepted in a bucket, the share whose friend has an active qualification now (in the program, for a program row or filter), by acceptance; empty below 10 accepted.",kind:"rate",breakdowns:["program"],filters:["program"],charts:Rn,ledger:!1,minimumDenominator:10},"groups.joins":{definition:"Members added to a group, by when they were added. A change that left membership as it was, and a membership recorded without a date, don't count. The group filter keeps changes in those groups.",kind:"count",breakdowns:["group"],filters:["group"],charts:R,ledger:!1},"groups.leaves":{definition:"Members removed from a group, by when they were removed. A change that left membership as it was, and a membership recorded without a date, don't count. The group filter keeps changes in those groups.",kind:"count",breakdowns:["group"],filters:["group"],charts:R,ledger:!1},"trackers.records":{definition:"Tracker trigger outcomes, one per quest and record observation, by when the record was observed, counted by their current outcome (admitted or skipped). A retry overwrites an outcome, so a bucket shows today's outcome of its records, not the outcome they had then.",kind:"count",breakdowns:["outcome","tracker"],filters:["tracker"],charts:R,ledger:!1},"leaderboards.settledParticipants":{definition:"Participants in leaderboard settlements, one per member and settlement, by the settlement's cutoff. Pending and approved settlements count; a rejected settlement leaves its bucket.",kind:"count",breakdowns:["leaderboard"],filters:["leaderboard"],charts:Co,ledger:!1}},md=Object.keys(Qt),ud=t(Se({metrics:()=>c(t({id:r(),definition:r(),kind:u(["count","distinct","rate"]),breakdowns:c(r()),filters:c(r()),charts:c(r()),ledger:m(),minimumDenominator:q().optional()}))}));var zd=b(Se({metric:()=>r().min(1).max(100),range:()=>u(xe),breakdown:()=>r().min(1).max(100).optional(),filter:()=>y(r().min(1).max(100),g([a,c(a).min(1).max(100)])).optional(),ledger:()=>a.optional(),limit:()=>i().int().optional()})),Lt=U(()=>i().nullable()),Zt=U(()=>({total:Lt(),previousTotal:Lt().optional(),series:c(Lt())})),bd=t(Se({metric:()=>r(),kind:()=>u(["count","distinct","rate"]),range:Cn,previous:$n,ledger:()=>a.optional(),value:()=>t(Zt()),breakdown:()=>t({dimension:r(),rows:c(t({key:r(),title:r(),archived:m(),...Zt()})),other:t({rows:q(),...Zt()}).optional()}).optional()})),Pn={panels:24,dashboards:20},$o={number:1,line:2,bar:2,table:4},je=r().trim().min(1).max(120),Bt=r().trim().min(1).max(500),Eo=g([a,c(a).min(1).max(100)]),To=y(r().min(1).max(100),Eo),En={key:a,title:je,description:Bt.optional(),metric:r().min(1).max(100),breakdown:r().min(1).max(100).optional(),filter:To.optional(),ledger:a.optional(),chart:u(Po)},Mo=b({...En,width:i().int().min(1).max(4).optional()}),Ht=b({key:a,title:je,description:Bt.optional(),defaultRange:u(xe).optional(),position:i().int().min(0).max(1e3).optional(),sections:c(b({title:je.optional(),panels:c(Mo).min(1).max(100)})).min(1).max(100)}),Tn=b({key:a,title:je,description:Bt.optional(),defaultRange:u(xe),position:i().int().min(0).max(1e3).optional(),sections:c(b({title:je.optional(),panels:c(b({...En,width:i().int().min(1).max(4)}))}))}),pd=g([Ht,t({code:r().min(1).max(2e6)}).strict()]);function gd(e){let n=Ht.parse(e);return Tn.parse({key:n.key,title:n.title,...n.description===void 0?{}:{description:n.description},defaultRange:n.defaultRange??"30d",...n.position===void 0?{}:{position:n.position},sections:n.sections.map(o=>({...o.title===void 0?{}:{title:o.title},panels:o.panels.map(l=>({...l,width:l.width??$o[l.chart]}))}))})}function fd(e){return e.sections.flatMap(n=>[...n.panels])}function hd(e){let n=e.sections.flatMap(d=>[...d.panels]),o=`dashboard "${e.key}"`;if(n.length>Pn.panels)return{code:"too-many-panels",message:`The ${o} has ${n.length} panels; a dashboard holds at most ${Pn.panels}.`};let l=new Set;for(let d of n){let z=`Panel "${d.key}" of ${o}`;if(l.has(d.key))return{code:"duplicate-key",panel:d.key,message:`The ${o} has two panels with the key "${d.key}".`};if(l.add(d.key),!Object.hasOwn(Qt,d.metric))return{code:"unknown-metric",panel:d.key,message:`${z} names the unknown metric "${d.metric}". Run domino analytics metrics for the catalog.`};let p=Qt[d.metric];if(d.breakdown!==void 0&&!p.breakdowns.includes(d.breakdown))return{code:"breakdown-not-accepted",panel:d.key,message:`${z}: ${d.metric} has no "${d.breakdown}" breakdown; it takes ${p.breakdowns.join(", ")||"none"}.`};for(let v of Object.keys(d.filter??{}))if(!p.filters.includes(v))return{code:"filter-not-accepted",panel:d.key,message:`${z}: ${d.metric} takes no "${v}" filter; it takes ${p.filters.join(", ")||"none"}.`};if(!p.charts.includes(d.chart))return{code:"chart-not-accepted",panel:d.key,message:`${z}: ${d.metric} can't be drawn as "${d.chart}"; it takes ${p.charts.join(", ")}.`};if(d.chart==="number"&&d.breakdown!==void 0)return{code:"breakdown-not-accepted",panel:d.key,message:`${z}: a number panel shows one value and takes no breakdown.`};if(d.chart==="table"&&d.breakdown===void 0)return{code:"breakdown-required",panel:d.key,message:`${z}: a table panel needs a breakdown; ${d.metric} takes ${p.breakdowns.join(", ")||"none"}.`};if(p.ledger&&d.ledger===void 0)return{code:"ledger-required",panel:d.key,message:`${z}: ${d.metric} needs a point ledger; set ledger to its key.`};if(!p.ledger&&d.ledger!==void 0)return{code:"ledger-not-accepted",panel:d.key,message:`${z}: ${d.metric} reads no point ledger; remove ledger.`}}return null}var vd=j(t({key:a,title:r(),change:u(["created","updated","unchanged"]),definition:Tn})),Nt=e=>typeof e=="string"?e:e.key;function yd(e){let n=Ht.parse({...e,sections:e.sections.map(o=>({...o,panels:o.panels.map(l=>({...l,...l.ledger===void 0?{}:{ledger:Nt(l.ledger)},...l.filter===void 0?{}:{filter:Object.fromEntries(Object.entries(l.filter).map(([d,z])=>[d,Array.isArray(z)?z.map(Nt):Nt(z)]))}}))}))});return fe("dashboard",n)}var Uo=["not-linked","provider-unavailable","author-error"],_o=e=>Uo.includes(e),jd=se({code:r().min(1),message:r().min(1),retryable:m()}),Mn=Symbol.for("@domino-sdk/relay/CapabilityError"),Sd=class Un extends Error{code;retryable;constructor(n,o,l={}){super(o),this.name="CapabilityError",this.code=n,this.retryable=l.retryable??n==="provider-unavailable",Object.defineProperty(this,Mn,{value:!0})}static[Symbol.hasInstance](n){return typeof n=="object"&&n!==null&&n[Mn]===!0}static from(n){return new Un(n.code,n.message,{retryable:_o(n.code)&&n.retryable})}};var Kt=t({name:r().trim().min(1).max(120),description:r().trim().max(1e3).default("")}).strict(),Ad=Kt.extend({actionId:a,key:a.optional()}).strict(),Do=Kt.extend({id:a}),Id=Do.extend({archivedAt:i().int().nonnegative().nullable()}),Lo=Kt.extend({key:a}).strict(),Od=g([Lo,t({code:r().min(1).max(2e6)}).strict()]),Zo=t({id:a,key:a.nullable(),name:r()}),Qe=i().int().safe(),No=t({ledger:Zo,balance:Qe,available:Qe}),qd=t({items:c(No)}),Rd={Award:"award",Spend:"spend",Adjust:"adjust",Reverse:"reverse"},Qo=r().min(1).max(64),Ft=t({id:a,amount:Qe,kind:Qo,at:Qe.nonnegative(),quest:a.nullable(),reverses:a.nullable(),imported:m().optional()}),Pd=b({ledger:a,cursor:S.optional()}),Cd=t({items:c(Ft),nextCursor:S.nullable()}),$d=t({login:m(),miniApp:m()}),Ed=Er.extend({provider:s("telegram")}),Bo=r().min(1,"Pass the Mini App's Telegram.WebApp.initData").max(8192),Td=t({initData:Bo,mode:u(["sign-in","connect"])}).strict(),Ho=r().regex(/^-?[1-9][0-9]{0,19}$/,"Use the chat's numeric ID, such as -1001234567890"),Vo=t({id:Ho,type:r(),title:r(),username:r().nullable(),status:r(),issue:r().nullable(),connectedAt:i()}),Md=t({configured:m(),bot:t({username:r()}).nullable(),chats:c(Vo)}),Ud=t({url:r(),expiresAt:i()}),_d=t({chat:r().regex(/^(-?[1-9][0-9]{0,19}|@[A-Za-z][A-Za-z0-9_]{3,31})$/,"Name a chat the project connected, by its numeric ID or @username")}).strict(),Dd=t({userId:r(),username:r().nullable(),status:ce(e=>typeof e=="string"),isMember:m(),isAdmin:m(),untilDate:i().nullable()}),Ld="telegram-reactions",Zd=t({chatId:r(),chatType:r(),messageId:i(),reactionType:r(),emoji:r().nullable(),customEmojiId:r().nullable(),reactorStatus:r(),reactorIsAdmin:m()}),_=i().int().nonnegative().safe(),Dn=u(["private","participants","public"]),Be=u(["x","discord","google"]),_n=u(["x","discord"]),Ko=c(_n).max(_n.options.length).refine(e=>new Set(e).size===e.length,"List each provider once"),Vt=r().min(1).max(100),Fo=f("source",[t({source:s("upload"),url:r().url(),seed:Vt}),t({source:s("account"),provider:Be,url:r().url(),seed:Vt}),t({source:s("generated"),seed:Vt})]),Wt=t({id:a,name:r(),avatar:Fo}),Wo=/[\p{Cc}؜᠎​-‏‪-‮⁠-⁤⁦-⁩]/u,Go=r().max(200).transform(e=>e.normalize("NFC").replace(/\s+/g," ").trim()).pipe(r().min(1,"Enter a name").max(40,"Use at most 40 characters").refine(e=>!Wo.test(e),"Use visible characters only")),Nd=t({displayName:Go.nullable().optional(),avatar:f("source",[t({source:s("account"),provider:Be}).strict(),t({source:s("generated")}).strict()]).nullable().optional(),hidden:m().optional()}).strict().refine(e=>Object.values(e).some(n=>n!==void 0),"Change at least one field"),Jo=Wt.extend({displayName:r().nullable(),avatarChoice:u(["default","upload","account","generated"]),avatarProvider:Be.nullable(),hidden:m(),locked:m(),visibility:Dn,options:c(t({provider:Be,name:r().nullable(),givenName:r().nullable().default(null),imageUrl:r().url().nullable()}))}),Ln=r().min(1).max(512),Qd=t({limit:I.number().int().min(1).max(100).default(20),cursor:Ln.optional()}).strict(),Xo=t({quest:a,key:a.optional(),title:r(),completions:_.positive(),lastCompletedAt:_.nullable()}),Bd=t({items:c(Xo),nextCursor:Ln.nullable()}),Hd=t({program:a,key:a.optional(),title:r(),invited:_,qualified:_,milestones:c(t({id:a,count:_,reached:m()}))}),Yo=t({visibility:Dn,defaults:Ko,revision:_,actor:r().nullable(),updatedAt:_.nullable()}),Vd=Yo.omit({revision:!0,actor:!0,updatedAt:!0}).extend({actionId:a,expectedRevision:_,reason:r().trim().min(1).max(500)}).strict(),Kd=t({actionId:a,resetName:m().default(!1),removeAvatar:m().default(!1),lock:m().optional(),reason:r().trim().min(1).max(1e3)}).strict().refine(e=>e.resetName||e.removeAvatar||e.lock!==void 0,"Choose an action"),Fd=Jo.omit({options:!0}).extend({member:a,lockedAt:_.nullable(),lockedBy:r().nullable(),lockedReason:r().nullable(),updatedAt:_}),Wd=5*1024*1024,Gd=["image/jpeg","image/png","image/webp"];var Qn=t({name:r().trim().min(1).max(120),description:r().trim().max(1e3).default(""),image:r().url().max(2048)}).strict(),Bn=Qn.extend({key:a}).strict(),Hn=Qn.extend({id:a,key:a.nullable()}).strip(),em=Hn.extend({archivedAt:i().int().nonnegative().nullable()}),tm=Bn.extend({actionId:a}).strict(),rm=g([Bn,t({code:r().min(1).max(2e6)}).strict()]),es=t({badge:Hn,awardedAt:i().int().nonnegative()}),nm=t({items:c(es)}),am=t({actionId:a,reason:r().trim().min(1).max(1e3)}).strict(),im=t({badge:a,member:a,awarded:m(),changed:m()}),w=i().int().safe().nonnegative(),Vn=b({scope:u(["member","project"]),period:te,limit:w}),Yt=b({key:a,qualifiedBy:a,balance:a,metrics:c(_e).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),baseline:s("historical"),maxAgeMs:i().int().positive().max(864e5).default(36e5),budgets:c(Vn).max(8).default([]).refine(e=>new Set(e.map(n=>n.scope+":"+n.period)).size===e.length,"Give each scope and period one budget")}),om=b({metrics:Q,baseline:Q}),sm=b({target:w,baseline:w}),Kn=b({actionId:a,code:r().min(1).max(1e6)}),we=b({version:a,definition:Yt,publishedAt:w}),cm=b({rule:a,content:r().min(1).max(256),member:a.optional(),cursor:S.optional()}),Fn=b({id:a,day:r(),observation:a,qualification:a,earned:w,growth:w,paid:w,excluded:w,entry:a.nullable(),createdAt:w}),lm=b({rule:we,account:b({member:a,earned:w,accounted:w,paid:w,excluded:w,pending:w,counters:Q,baseline:Q,observation:a.nullable(),nextSettlementAt:w.nullable(),reason:r().nullable()}).nullable(),items:c(Fn),nextCursor:S.nullable()}),dm=b({code:r().min(1).max(1e6)}),mm=Kn.extend({expectedVersion:a,previewHash:a}),He=r().regex(/^(0|[1-9][0-9]*)$/),ts=b({rule:a,fromVersion:a,toVersion:a,previewHash:a,definition:Yt,boundary:s("available-eligible-observation"),settlement:s("deferred"),summary:b({knownAdmissions:w,accounts:w,uninitialized:w,pendingTransitions:w,earned:He,paid:He,excluded:He,pending:He})}),rs=we.extend({previousVersion:a.nullable()}),um=t({items:c(t({version:a,definition:t({...Yt.shape,budgets:c(t(Vn.shape)).max(8).default([])}),publishedAt:w,previousVersion:a.nullable()})),nextCursor:S.nullable()}),zm=b({items:c(rs),next:w.nullable()}),bm=b({rule:a,before:I.number().int().positive().safe().optional()}),pm=b({current:we.nullable(),requested:we,items:c(b({from:a,to:a,baseline:Q,observedAt:w,settlement:Fn})),nextCursor:S.nullable()}),ns=Kn.omit({actionId:!0}),Gt=ns.extend({rule:we}),gm=f("kind",[Gt.extend({kind:s("create")}),Gt.extend({kind:s("unchanged")}),Gt.extend({kind:s("change"),change:ts})]),k=i().int().safe(),A=k.nonnegative().max(864e13),Wn=f("kind",[t({kind:s("all-time")}).strict(),t({kind:s("fixed"),start:A,end:A}).strict().refine(e=>e.end>e.start,"Window end must follow its start"),t({kind:s("rolling"),days:k.min(1).max(3660)}).strict(),t({kind:s("calendar"),period:te.exclude(["lifetime"])})]),as={window:Wn.default({kind:"all-time"}),quests:c(a).min(1).max(100).optional()},Gn=f("kind",[t({kind:s("balance")}).strict(),t({kind:s("earned"),...as}).strict(),t({kind:s("net"),window:Wn.default({kind:"all-time"})}).strict()]).default({kind:"balance"}),is=g([ye,B]),Jn=t({ranks:dr([k.positive(),k.positive()]).refine(([e,n])=>n>=e,{message:"Prize rank range must end at or after it starts"}),rewards:c(is).min(1).max(20)}).strict(),Ke=r().regex(/^(0|[1-9]\d{0,77})$/,'Use a whole number of base units, such as "1000000"'),os=g([s("points"),t({code:r().trim().min(1).max(32),decimals:k.min(0).max(36)}).strict()]),Xn={amount:Ke.refine(e=>e!=="0",{message:"A pool must hold a positive amount"}),unit:os,ledger:a.optional(),minScore:k.optional()},ss=(e,n)=>{e.unit==="points"?(e.ledger||n.addIssue({code:"custom",message:"A points pool names the point ledger it pays into",path:["ledger"]}),/^\d+$/.test(e.amount)&&BigInt(e.amount)>ve&&n.addIssue({code:"custom",message:`A points pool holds at most ${ve} points`,path:["amount"]})):e.ledger!==void 0&&n.addIssue({code:"custom",message:"Only a points pool pays into a point ledger",path:["ledger"]})},cs=t(Xn).strict().superRefine(ss),ls=t({at:s("window-end"),ties:u(["shared","earliest"]),prizes:c(Jn).max(50),pool:cs.optional()}).strict().superRefine((e,n)=>{!e.prizes.length&&!e.pool&&n.addIssue({code:"custom",message:"A settlement awards rank prizes, a pool, or both",path:["prizes"]});for(let[o,l]of e.prizes.entries()){let d=l.rewards.map(Ut);new Set(d).size!==d.length&&n.addIssue({code:"custom",message:"A prize may grant each point ledger or tiered reward only once",path:["prizes",o,"rewards"]})}for(let o=1;o<e.prizes.length;o++){let l=e.prizes[o-1];e.prizes[o].ranks[0]<=l.ranks[1]&&n.addIssue({code:"custom",message:"Prize rank ranges must be ordered and must not overlap",path:["prizes",o,"ranks"]})}}),Yn=t({id:a,key:a.optional(),title:r().trim().min(1).max(120),balance:a,score:Gn,access:u(["participants","public"]).default("participants"),group:a.optional(),includeUnscored:m().optional(),settle:ls.optional()}).strict(),ea=(e,n)=>{e.settle&&(e.score.kind==="balance"||!["fixed","calendar"].includes(e.score.window.kind))&&n.addIssue({code:"custom",message:"Leaderboard prizes require an earned or net score with a fixed or calendar window",path:["settle"]})},ds=Yn.superRefine(ea),ms=j(ds),us=Yn.omit({id:!0}).extend({...re,score:Ie(an,Gn),group:a.optional()}).strict().superRefine(ea),fm=g([us,t({code:r().min(1).max(2e6)}).strict()]),zs=t({archivedAt:i().int().nonnegative().nullable().optional(),version:a,definition:ms,publishedAt:A,actor:r().nullable()}),hm=t({limit:I.number().int().min(1).max(100).default(25),cursor:r().max(4096).optional()}).strict(),Jt=t({participant:a,member:a.optional(),name:r(),score:k,rank:k.positive(),profile:Wt.nullable()}),Zn=t({leaderboard:a,title:r(),version:a,calculation:u(["balance","earned","net"]),period:t({start:A.nullable(),end:A.nullable()}),calculatedAt:A,lastEntryAt:A.nullable(),total:k.nonnegative(),items:c(Jt),me:Jt.nullable(),nearby:c(Jt),nextCursor:r().nullable()}),vm=t({leaderboard:a,key:a.optional(),title:r(),profile:a,rank:k.positive().nullable(),score:k.nullable(),total:k.nonnegative()}),ym=b({board:a,cursor:S.optional()}),km=t({leaderboard:a,period:t({start:A.nullable(),end:A.nullable()}),items:c(Ft),nextCursor:S.nullable()}),jm=t({published:zs,before:Zn.nullable(),after:Zn}),ta={actionId:a,member:a,balance:a,reason:r().trim().min(1).max(1e3)},Ve={...ta,effectiveAt:A.optional()},Sm=f("kind",[t({...Ve,kind:s("award"),referralEligible:m().optional(),amount:k.positive()}).strict(),t({...Ve,kind:s("spend"),amount:k.positive()}).strict(),t({...Ve,kind:s("adjust"),amount:k.refine(e=>e!==0)}).strict(),t({...Ve,kind:s("set"),total:k.nonnegative(),expectedTotal:k.nonnegative(),classification:u(["earned","spend"])}).strict(),t({...ta,kind:s("reverse"),entry:a,amount:k.positive()}).strict()]),ra=t({id:a,completion:r().nullable(),member:a,balance:a,amount:k,kind:u(["award","spend","adjust","reverse"]),effectiveAt:A,receivedAt:A,quest:a.nullable(),original:a.nullable(),reason:r(),actor:r().nullable(),import:a.nullable().optional()}),xm=t({items:c(ra),nextCursor:S.nullable(),next:i().nullable()}),wm=t({entry:ra,total:k.nonnegative()}),Am=t({member:a,balance:a,total:k.nonnegative(),held:k.nonnegative()}),Im=t({actionId:a,member:a,excluded:m(),reason:r().trim().min(1).max(1e3)}).strict(),Om=t({leaderboard:a,group:a,generated:m(),boundAt:A.nullable()}),qm=t({actionId:a,group:a,reason:r().trim().min(1).max(1e3)}).strict(),Rm=t({actionId:a,member:a,included:m(),reason:r().trim().min(1).max(1e3)}).strict(),bs=u(["pending","approved"]),ps=t({id:a,leaderboard:a,version:a,title:r(),period:t({start:A,end:A}),ties:u(["shared","earliest"]),status:bs,total:k.nonnegative(),winners:k.nonnegative(),createdAt:A,approvedAt:A.nullable(),approvedBy:r().nullable(),approvalReason:r().nullable()}),gs=t({member:a,score:k,rank:k.positive(),position:k.positive(),scoredAt:A,prizes:c(k.nonnegative()),completion:a.nullable(),revokedAt:A.nullable(),share:Ke.optional()}),fs=t({...Xn,allocated:Ke,unallocated:Ke}),hs=t({content:r(),member:a,observedAt:A.nullable()}),Pm=ps.extend({prizes:c(Jn),excluded:c(a),unmeasured:c(hs).optional(),pool:fs.nullable().optional(),rows:c(gs)}),Cm=t({actionId:a,reason:r().trim().min(1).max(500)}).strict(),Xt=g([ye,B]),P=i().int().safe().nonnegative(),ne=r().trim().min(1).max(1e3),er=t({id:a,key:a.optional(),title:r().trim().min(1).max(120),enabled:m().default(!0),qualification:f("kind",[t({kind:s("signup")}).strict(),t({kind:s("quest"),quest:a}).strict(),t({kind:s("external")}).strict()]),inviterGroup:a.optional(),rewards:t({inviter:c(Xt).max(10).default([]),invitee:c(Xt).max(10).default([])}).strict().default({inviter:[],invitee:[]}),milestones:c(t({id:a,count:P.min(1),rewards:c(Xt).min(1).max(10)}).strict()).max(30).default([]),bonuses:c(t({id:a,balance:a,basisPoints:P.min(1).max(1e4),quests:c(a).min(1).max(100).optional(),external:m().default(!1),durationDays:P.min(1).max(36500).optional(),maxPoints:P.min(1).optional()}).strict()).max(20).default([])}).strict().superRefine((e,n)=>{for(let o of[e.milestones,e.bonuses])new Set(o.map(l=>l.id)).size!==o.length&&n.addIssue({code:"custom",message:"Rule IDs must be unique"})}),vs=t(er.shape).omit({id:!0}).extend({...re,inviterGroup:a.optional()}).strict().superRefine((e,n)=>{for(let o of[e.milestones,e.bonuses])new Set(o.map(l=>l.id)).size!==o.length&&n.addIssue({code:"custom",message:"Rule keys must be unique"})}),$m=g([vs,t({code:r().min(1).max(2e6)}).strict()]),Em=t({archivedAt:i().int().nonnegative().nullable().optional(),version:a,definition:er,publishedAt:P,actor:r().nullable()}),Tm=t({actionId:a,code:a}).strict(),Mm=t({actionId:a,suspended:m(),reason:ne}).strict(),Um=t({actionId:a,qualified:m(),reason:ne}).strict(),_m=t({actionId:a,reason:ne}).strict(),Dm=f("kind",[t({kind:s("suspend"),actionId:a,member:a,suspended:m(),reason:ne}).strict(),t({kind:s("qualify"),actionId:a,member:a,program:a,qualified:m(),reason:ne}).strict(),t({kind:s("resolve-reward"),actionId:a,entitlement:a,reason:ne}).strict()]),ys=t({member:a,inviter:a,acceptedAt:P,suspended:m()}),na=t({id:a,program:a,kind:u(["bonus","fixed","milestone"]),balance:a,earned:P,settled:P,outstanding:P}),Lm=t({code:a,attributed:P,programs:c(t({definition:er,qualified:P,milestones:c(t({id:a,count:P,reached:m()}))})),accounts:c(na)}),Zm=t({items:c(t({id:P,program:a,balance:a,amount:i().int().safe(),at:P,reason:r()})),nextCursor:S.nullable()}),Nm=t({relationships:c(ys),qualifications:c(t({member:a,program:a,qualified:m(),qualifiedAt:P})),accounts:c(na.extend({member:a,invitee:r()})),reviews:c(t({entitlement:a,member:a,program:a,reason:r()})),nextCursor:S.nullable().default(null),next:P.nullable()}),Fe=i().int().safe().nonnegative(),aa=ye.extend({amount:i().int().positive().max(ve)}),ks=t({perMember:i().int().positive().max(1e4)}).strict(),ia=t({id:a,key:a.optional(),title:r().trim().min(1).max(120),price:aa,reward:B,stock:Fe.max(1e6),limit:ks.default({perMember:1}),requires:c(Tt).max(30).optional(),enabled:m().default(!0)}).strict(),oa=ia.omit({id:!0,title:!0,enabled:!0}).extend({...re,title:r().trim().min(1).max(120).optional()}).strict().transform(e=>({...e,title:e.title??e.reward.reward.title,enabled:!0})),Qm=g([oa,t({code:r().min(1).max(2e6)}).strict()]),js=j(f("kind",[t({kind:s("available"),remaining:Fe}).strict(),t({kind:s("out-of-stock")}).strict(),t({kind:s("limit-reached")}).strict(),t({kind:s("paused")}).strict()])),Bm=j(ia.extend({revision:i().int().positive(),available:Fe,redeemed:Fe,availability:js,missing:c(he).default([])})),Hm=t({actionId:a}).strict(),Nn={id:a,offer:a,member:a,reservation:a,price:aa,reward:B,entitlement:a,revision:i().int().positive(),redeemedAt:i().int().safe().nonnegative()},Ss=j(f("status",[t({...Nn,status:s("fulfilled")}).strict(),t({...Nn,status:s("canceled"),canceledAt:i().int().safe().nonnegative(),reason:r().min(1).max(500)}).strict()])),Vm=b({member:a.optional(),cursor:S.optional(),limit:I.number().int().min(1).max(100).optional()}),Km=t({items:c(Ss),nextCursor:S.nullable()}),Fm=t({actionId:a,revision:i().int().positive(),enabled:m(),reason:r().trim().min(1).max(500)}).strict(),Wm=t({actionId:a,revision:i().int().positive(),reason:r().trim().min(1).max(500)}).strict();function Gm(e){return fe("offer",oa.parse(e))}export{a,Cr as b,xs as c,j as d,ba as e,pa as f,ws as g,S as h,As as i,Is as j,Os as k,wt as l,Er as m,qs as n,Rs as o,Ps as p,Cs as q,Tr as r,Mr as s,ga as t,$s as u,Es as v,fa as w,ha as x,ka as y,le as z,_r as A,Ts as B,Pa as C,Ms as D,Us as E,Ea as F,Ta as G,Ma as H,_s as I,Br as J,Ds as K,Ua as L,Hr as M,At as N,Ls as O,pe as P,Zs as Q,ge as R,Ns as S,Vr as T,_a as U,Da as V,Ue as W,Kr as X,La as Y,Za as Z,Qs as _,Bs as $,K as aa,Hs as ba,Na as ca,Qa as da,Ba as ea,Ha as fa,Wr as ga,Gr as ha,Vs as ia,Ks as ja,Fs as ka,Va as la,Ka as ma,Jr as na,Fa as oa,Ws as pa,Gs as qa,Js as ra,Xr as sa,Xs as ta,Ys as ua,ec as va,tc as wa,rc as xa,nc as ya,ac as za,ic as Aa,Wa as Ba,oc as Ca,sc as Da,cc as Ea,Ga as Fa,en as Ga,lc as Ha,_e as Ia,Q as Ja,Ja as Ka,Xa as La,Ya as Ma,ei as Na,tn as Oa,ti as Pa,ri as Qa,dc as Ra,mc as Sa,uc as Ta,zc as Ua,ni as Va,rn as Wa,ue as Xa,ai as Ya,an as Za,te as _a,bc as $a,pc as ab,gc as bb,ii as cb,oi as db,si as eb,fc as fb,Pe as gb,jr as hb,ci as ib,li as jb,hc as kb,di as lb,mi as mb,ui as nb,zi as ob,vc as pb,yc as qb,kc as rb,bi as sb,pi as tb,gi as ub,jc as vb,xr as wb,hi as xb,yi as yb,Ce as zb,ji as Ab,Ot as Bb,Si as Cb,Sc as Db,xc as Eb,qt as Fb,yt as Gb,xi as Hb,wc as Ib,Ac as Jb,wi as Kb,Ai as Lb,Ii as Mb,Ic as Nb,Oi as Ob,De as Pb,Rt as Qb,Oc as Rb,qc as Sb,sn as Tb,qi as Ub,Ri as Vb,Rc as Wb,Pc as Xb,Cc as Yb,$c as Zb,Ec as _b,Tc as $b,Mc as ac,kt as bc,Pi as cc,Uc as dc,_c as ec,Dc as fc,Pt as gc,Lc as hc,Zc as ic,Ci as jc,Ei as kc,cn as lc,ln as mc,Nc as nc,Qc as oc,Bc as pc,Ti as qc,mn as rc,Mi as sc,$t as tc,un as uc,Hc as vc,Vc as wc,zn as xc,jt as yc,Ui as zc,_i as Ac,Y as Bc,Di as Cc,Li as Dc,Kc as Ec,Zi as Fc,Fc as Gc,Wc as Hc,Gc as Ic,re as Jc,Jc as Kc,Et as Lc,Te as Mc,Xc as Nc,Qi as Oc,bn as Pc,Yc as Qc,Bi as Rc,el as Sc,tl as Tc,fe as Uc,rl as Vc,Hi as Wc,Ir as Xc,nl as Yc,Ki as Zc,al as _c,il as $c,ol as ad,sl as bd,cl as cd,Fi as dd,ll as ed,Wi as fd,dl as gd,vn as hd,yn as id,kn as jd,Tt as kd,he as ld,ml as md,ul as nd,zl as od,ye as pd,Mt as qd,bl as rd,B as sd,Gi as td,pl as ud,Ji as vd,gl as wd,Xi as xd,xt as yd,Ut as zd,jn as Ad,Sn as Bd,fl as Cd,hl as Dd,Or as Ed,qr as Fd,Rr as Gd,_t as Hd,vl as Id,eo as Jd,to as Kd,Dt as Ld,ze as Md,ro as Nd,no as Od,ao as Pd,Me as Qd,xn as Rd,io as Sd,oo as Td,so as Ud,wn as Vd,co as Wd,lo as Xd,yl as Yd,kl as Zd,mo as _d,uo as $d,jl as ae,zo as be,bo as ce,Le as de,Sl as ee,xl as fe,Ze as ge,wl as he,fo as ie,Al as je,Il as ke,ho as le,vo as me,be as ne,yo as oe,Ol as pe,ql as qe,Rl as re,An as se,Pl as te,In as ue,Cl as ve,$l as we,El as xe,Tl as ye,So as ze,xo as Ae,wo as Be,Io as Ce,Ml as De,Ul as Ee,_l as Fe,Dl as Ge,Ll as He,Zl as Ie,Nl as Je,Ql as Ke,Bl as Le,Oo as Me,Hl as Ne,Vl as Oe,Kl as Pe,Fl as Qe,Wl as Re,Gl as Se,Jl as Te,nd as Ue,ad as Ve,id as We,od as Xe,sd as Ye,cd as Ze,Pn as _e,$o as $e,Mo as af,Ht as bf,Tn as cf,pd as df,gd as ef,fd as ff,hd as gf,vd as hf,yd as if,Uo as jf,jd as kf,Sd as lf,Kt as mf,Ad as nf,Do as of,Id as pf,Lo as qf,Od as rf,Zo as sf,No as tf,qd as uf,Rd as vf,Ft as wf,Pd as xf,Cd as yf,$d as zf,Ed as Af,Bo as Bf,Td as Cf,Ho as Df,Vo as Ef,Md as Ff,Ud as Gf,_d as Hf,Dd as If,Ld as Jf,Zd as Kf,Dn as Lf,Be as Mf,_n as Nf,Ko as Of,Vt as Pf,Fo as Qf,Wt as Rf,Go as Sf,Nd as Tf,Jo as Uf,Qd as Vf,Xo as Wf,Bd as Xf,Hd as Yf,Yo as Zf,Vd as _f,Kd as $f,Fd as ag,Wd as bg,Gd as cg,Qn as dg,Bn as eg,Hn as fg,em as gg,tm as hg,rm as ig,es as jg,nm as kg,am as lg,im as mg,Vn as ng,Yt as og,om as pg,sm as qg,Kn as rg,we as sg,cm as tg,Fn as ug,lm as vg,dm as wg,mm as xg,ts as yg,um as zg,zm as Ag,bm as Bg,pm as Cg,ns as Dg,gm as Eg,Wn as Fg,is as Gg,Jn as Hg,Ke as Ig,os as Jg,cs as Kg,ls as Lg,ds as Mg,ms as Ng,us as Og,fm as Pg,zs as Qg,hm as Rg,Jt as Sg,Zn as Tg,vm as Ug,ym as Vg,km as Wg,jm as Xg,Sm as Yg,ra as Zg,xm as _g,wm as $g,Am as ah,Im as bh,Om as ch,qm as dh,Rm as eh,bs as fh,ps as gh,gs as hh,fs as ih,hs as jh,Pm as kh,Cm as lh,er as mh,vs as nh,$m as oh,Em as ph,Tm as qh,Mm as rh,Um as sh,_m as th,Dm as uh,ys as vh,na as wh,Lm as xh,Zm as yh,Nm as zh,aa as Ah,ks as Bh,ia as Ch,oa as Dh,Qm as Eh,js as Fh,Bm as Gh,Hm as Hh,Ss as Ih,Vm as Jh,Km as Kh,Fm as Lh,Wm as Mh,Gm as Nh};
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "format": 1,
3
- "sdkVersion": "1.55.0",
3
+ "sdkVersion": "1.56.0",
4
4
  "zodVersion": "4.3.6",
5
5
  "entries": {
6
6
  "@domino-sdk/relay/authoring": "authoring.js",
@@ -10,9 +10,9 @@
10
10
  "modules": [
11
11
  "authoring.js",
12
12
  "chunks/IDOMZWRY.js",
13
- "chunks/WKATKZXE.js",
13
+ "chunks/NDB42VFF.js",
14
14
  "schema.js",
15
15
  "zod.js"
16
16
  ],
17
- "digest": "61be773bcdbd51d28f3c58ad7436e568047cc0a6b7e6446847afd640864c0147"
17
+ "digest": "49504c9b00d33a7219db1652d62cec090e66f1ebb4e1d0f743cdbba3e60638e4"
18
18
  }