@domino-sdk/relay 1.69.0 → 1.70.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/build.mjs +3 -0
- package/dist/{accounts-DD4gAOCe.d.ts → accounts-B49TGZLk.d.ts} +3 -5
- package/dist/{attempt-captures-CbuCmthd.d.ts → attempt-captures-Dn-oGE1o.d.ts} +2 -2
- package/dist/authoring.d.ts +12 -12
- package/dist/authoring.js +7 -5
- package/dist/{automatic-outcomes-DE3vfi8g.d.ts → automatic-outcomes-DeRyox-X.d.ts} +2 -2
- package/dist/browser.d.ts +9 -9
- package/dist/browser.js +8 -8
- package/dist/{catalog-Cf3fHDNn.d.ts → catalog-CR_2iacf.d.ts} +2 -2
- package/dist/{chunk-UGM6DUB2.js → chunk-25WA4XYZ.js} +4 -3
- package/dist/{chunk-PO2ZDY27.js → chunk-2GVGZ7AN.js} +1 -1
- package/dist/{chunk-LGGD7S5T.js → chunk-3DUNFRKJ.js} +6 -6
- package/dist/{chunk-WVK3G2J2.js → chunk-4BBDHTBF.js} +1 -1
- package/dist/{chunk-CQVKOD3B.js → chunk-4VDRNYUG.js} +13 -8
- package/dist/{chunk-CZ23KRVK.js → chunk-BJ2W5ZVQ.js} +1 -1
- package/dist/{chunk-SWLW4VN3.js → chunk-FHOKCBTJ.js} +1 -1
- package/dist/{chunk-DIXYVGXO.js → chunk-HICAGUT5.js} +1 -1
- package/dist/{chunk-BRROI4CH.js → chunk-NOQSKRSS.js} +3 -3
- package/dist/{chunk-GEVARKEV.js → chunk-OKKZPDCQ.js} +1 -1
- package/dist/{chunk-WNEQEDMU.js → chunk-RSZAYW3T.js} +2 -2
- package/dist/{chunk-AZDZEQFK.js → chunk-RYUM6X2K.js} +1 -1
- package/dist/{chunk-RKTMSTT7.js → chunk-SDWG7CWQ.js} +2 -2
- package/dist/{chunk-ME2KUAVJ.js → chunk-SELJYCYY.js} +1 -1
- package/dist/{chunk-ODJGTFPY.js → chunk-UKUIE2ND.js} +6 -6
- package/dist/{chunk-2A3BJ262.js → chunk-XD6EUA27.js} +1 -1
- package/dist/{chunk-TCREFRPK.js → chunk-XZCTCSDG.js} +2 -2
- package/dist/{client-6eSYOl8h.d.ts → client-gJEheT2C.d.ts} +7 -7
- package/dist/{dashboards-DCOAXL54.d.ts → dashboards-DZaB94sz.d.ts} +3 -3
- package/dist/{deployments-BIfdCMd5.d.ts → deployments-QVGxC-fT.d.ts} +3 -3
- package/dist/{identity-integration-BlfOn8rc.d.ts → identity-integration-BAJdzbdl.d.ts} +1 -1
- package/dist/index.d.ts +10 -10
- package/dist/index.js +7 -7
- package/dist/internal.d.ts +13 -13
- package/dist/internal.js +13 -13
- package/dist/{limits-Ctaeq23J.d.ts → limits-UawUbr0S.d.ts} +1 -1
- package/dist/{offers-COqHGbHm.d.ts → offers-0hqbnogq.d.ts} +2 -2
- package/dist/portal-proxy.d.ts +2 -2
- package/dist/portal-proxy.js +10 -9
- package/dist/react/index.d.ts +11 -11
- package/dist/react/index.js +9 -8
- package/dist/{reward-deliveries-DFhYGJdx.d.ts → reward-deliveries-ARvt1UXb.d.ts} +1 -1
- package/dist/runtime/authoring.js +1 -1
- package/dist/runtime/chunks/447P2VLY.js +1 -0
- package/dist/runtime/manifest.json +3 -3
- package/dist/runtime/schema.js +1 -1
- package/dist/schema.d.ts +16 -16
- package/dist/schema.js +9 -7
- package/dist/server/index.d.ts +12 -12
- package/dist/server/index.js +17 -18
- package/dist/{sign-in-providers-C97mRNbG.d.ts → sign-in-providers-DCiufSGG.d.ts} +2 -2
- package/dist/solana.d.ts +12 -12
- package/dist/solana.js +8 -8
- package/dist/{submission-input-BD7nORuh.d.ts → submission-input-C0DLv5Dj.d.ts} +2 -2
- package/dist/{telegram-browser-gRMgGs7B.d.ts → telegram-browser-yx9WuNLX.d.ts} +5 -5
- package/dist/telegram.d.ts +7 -7
- package/dist/testing.d.ts +4 -4
- package/dist/testing.js +5 -5
- package/dist/{tracker-data-DQgX3FIc.d.ts → tracker-data-CUopgomU.d.ts} +1 -1
- package/dist/{transport-BLU8jrhg.d.ts → transport-e0uY1R7z.d.ts} +11 -11
- package/dist/{wallet-CPAjrW4k.d.ts → wallet-CJTULM0Q.d.ts} +4 -2
- package/dist/{wallet-browser-BzPt_Qb5.d.ts → wallet-browser-DScvrvIj.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/runtime/chunks/HKAI5OQA.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$a as dr,Ce as kt,Ci as kr,De as vt,Di as Pt,Ee as yt,Ei as Lt,Fe as E,Fi as Bt,Gd as at,Ge as bt,Gi as Dt,Hi as vr,Ia as Ce,Id as nt,If as ee,J as de,Ja as Ae,Ji as yr,K as me,Ka as or,Ke as x,Kf as D,L as ge,La as V,Lb as Fe,Li as Nt,M as fe,Mb as Qe,Mi as It,N as he,Na as xe,Ne as gr,Nf as $t,Ni as re,O as pe,Oa as sr,P as we,Pa as cr,Q as ke,Qa as $e,Qb as Ue,R as ve,Sb as We,Sd as ot,Ta as ir,Tb as Ze,Td as st,Th as Tt,Ua as Me,Ub as Ve,Ue as y,Va as ur,Vb as S,Vc as _,Ve as St,Vf as te,Wa as lr,Wc as Je,Wd as ct,We as $,Xc as H,Xd as it,Xf as Mt,Ya as ze,Yb as Ge,Yc as Ye,Ye as fr,Zb as G,Zg as Rt,_b as _e,a as A,ab as mr,b as oe,bc as He,be as ut,bj as Ot,c as T,ca as ye,d as Q,da as be,de as lt,dg as zt,ea as ar,ee as dt,eh as jt,f as le,fa as Se,fe as mt,ge as gt,ha as nr,hb as Re,he as ft,ia as Ee,ib as je,ka as L,kb as Te,lb as Pe,ma as Z,mb as Le,nb as Be,nd as Xe,nf as hr,ob as De,of as pr,pb as Ne,pf as wr,qd as et,qe as J,qf as Et,re as ht,rf as qt,rj as Kt,sa as qe,se as pt,tf as Ct,ub as B,ue as U,vb as Ie,vd as tt,vf as At,wb as Oe,xb as Ke,xe as Y,xf as xt,ye as X,zd as rt,ze as wt}from"./chunks/HKAI5OQA.js";import{Cb as R,Ec as P,Kb as ce,Pd as rr,fc as ie,ic as W,jc as ue,va as se,wc as F}from"./chunks/EWU4OKSY.js";function Ft(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function br(e,r){Ft(r);let t=/^(\d+)(?:\.(\d+))?$/.exec(e.trim());if(!t)throw new Error(`Use a decimal amount such as "1.5", not "${e}"`);let[,a,n=""]=t,c=n.replace(/0+$/,"");if(c.length>r)throw new Error(`"${e}" has more than ${r} decimal places, which this token cannot hold`);return BigInt(a+c.padEnd(r,"0"))}function Sr(e,r){Ft(r);let t=typeof e=="bigint"?e:BigInt(e),a=t<0n?"-":"",n=(t<0n?-t:t).toString().padStart(r+1,"0"),c=n.slice(0,n.length-r),i=n.slice(n.length-r).replace(/0+$/,"");return a+c+(i?"."+i:"")}function Ut(e,r={}){let{trigger:t,completion:a,requires:n,performance:c,retryCooldownMs:i,completionCooldownMs:u,authorBudgets:l=[],stations:h}=e,s=t.kind==="automatic"?t.tracker:void 0,k=s?.content===!0;if(c&&!k)throw new Error("Performance requires a content quest");if(!s&&l.length)throw new Error('A budget with scope "author" counts per tracker record author: use it only on a quest with a tracker trigger');if(k){if(a.kind!=="keyed"||a.across)throw new Error("Content quests complete once per content item");if(s.beneficiary!=="author"||s.on!=="new-record")throw new Error("A content quest pays each content item's author and fires on its first observation")}if(i!==void 0&&(t.kind!=="manual"||t.actor==="staff"))throw new Error("A retry cooldown applies only to quests members submit themselves");if(u!==void 0){if(t.kind!=="manual"||t.actor==="staff")throw new Error("A completion cooldown applies only to quests members submit themselves");if(a.kind==="once")throw new Error("A completion cooldown needs a quest members can complete more than once: this one completes once per member")}if(h&&r.template)throw new Error("Reusable quest types cannot declare check-in stations: declare them on a quest written in code");if(h&&!ht(t))throw new Error("Stations are for quests a signed Solana transaction completes: a member-submitted manual() quest without input");if(t.kind==="automatic"&&!s){if(!r.template&&n.length===0)throw new Error("Automatic quests need at least one prerequisite");if(a.kind!=="once")throw new Error("Prerequisite-only automatic quests complete once")}}var Er=["author"],qr=["author","messageAuthor"];function Wt(e){if(!He(e))return[];switch(e.kind){case"x-search":return Fe;case"discord-messages":return Er;case"discord-reactions":return qr;case"custom":return["author",...e.accounts??[]]}}var Qt=new Map;function Cr(e){let r=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,t=Qt.get(r);return t||(t=B(r==="messages-text"?Be:r==="discord-messages"?Le:De),Qt.set(r,t)),t}function Zt(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return Cr(e);case"custom":return e.data}}function _t(e,r){let t=typeof e=="object"&&e!==null&&"kind"in e&&e.kind==="tier"&&"reward"in e&&typeof e.reward=="object"&&e.reward!==null?e.reward:null;return t&&"badge"in t&&t.badge!==void 0?`Badge rewards can only be granted by quests or manually, not by ${r}`:t&&"group"in t&&t.group!==void 0?`Group membership rewards can only be granted by quests, not by ${r}`:null}function ae(e,r,t,a){for(let[n,c]of r.entries()){let i=_t(c,a);i&&e.addIssue({code:"custom",message:i,path:[...t,n]})}}function ta(e){return y("badge",A("Badge",le,e))}function ra(e){return y("ledger",A("Point ledger",jt,e))}function aa(e){let{target:r,ledger:t,...a}=e,n=Nt.parse({...a,qualifiedBy:e.qualifiedBy.key,balance:$(t)}),c=F(P(e.metrics),re.shape.target);return{key:n.key,describe:()=>n,score(i){let u=It.parse(i);return re.parse({target:r({metrics:c.parse(u.metrics)}),baseline:r({metrics:c.parse(u.baseline)})})}}}var xr=e=>{if("timeZone"in e)throw new Error("streak() no longer takes a timeZone. Set the project timezone with calendar.timeZone in relay.json or in Console settings.");return Xe.strict().parse({kind:"streak",...e})},na=e=>Je.brand().parse({kind:"count",count:e}),oa=(e,r={})=>H.brand().parse({kind:"calendar",period:e,...r}),sa=({days:e})=>H.brand().parse({kind:"rolling",durationMs:e*864e5}),ca=e=>({kind:"quest",quest:e}),$r=Kt.superRefine((e,r)=>{let t=_t(e.reward,"offers");t&&r.addIssue({code:"custom",message:t,path:["reward"]})});function ia(e){return y("offer",A("Offer",$r,e))}var Mr=Ot.superRefine((e,r)=>{for(let t of["inviter","invitee"])ae(r,e.rewards[t],["rewards",t],"referral programs");for(let[t,a]of e.milestones.entries())ae(r,a.rewards,["milestones",t,"rewards"],"referral programs")});function ua(e){let{qualification:r,inviterGroup:t,milestones:a,bonuses:n,...c}=e,i=A("Referral",Mr,{...c,qualification:r.kind==="quest"?{kind:"quest",quest:r.quest.key}:r,...t?{inviterGroup:Q.parse(t.key)}:{},milestones:a?.map(({key:u,...l})=>({...l,id:x({key:u,...l})})),bonuses:n?.map(({key:u,ledger:l,quests:h,...s})=>({...s,id:x({key:u,...s}),balance:$(l),quests:h?.map(k=>k.key)}))});return y("referral",i)}function la(e={}){return{kind:"earned",...e}}var zr=Tt.superRefine((e,r)=>{for(let[t,a]of(e.settle?.prizes??[]).entries())ae(r,a.rewards,["settle","prizes",t,"rewards"],"leaderboard prizes")});function Rr(e){let r=e.ties??"shared";return!e.settle||e.settle.ties===r?null:`Leaderboard${e.key?` "${e.key}"`:""} orders equal scores "${r}" in its live standings${e.ties===void 0?" (ties left out)":""} but "${e.settle.ties}" when it settles, so the ranks members see are not the ranks prizes pay. Set ties: "${e.settle.ties}" beside settle.ties to show the order prizes pay.`}function da(e){let{ledger:r,group:t,score:a,settle:n,...c}=e,i=n?.pool,u=A("Leaderboard",zr,{...c,...n?{settle:{...n,prizes:n.prizes??[],...i?{pool:{...i,...i.ledger===void 0?{}:{ledger:$(i.ledger)}}}:{}}}:{},balance:$(r),...t?{group:Q.parse(t.key)}:{},score:a?.kind==="earned"?{...a,quests:a.quests?.map(h=>h.key)}:a}),l=Rr(u);return l&&console.warn(l),y("leaderboard",u)}var ma={provider:"x",search:e=>Ve.parse({kind:"x-search",...e})};function b(e,r){let{data:t,content:a,...n}=r??{};if(a!==void 0){if(t!==void 0)throw new Error(`customSource("${e}") takes data or content, not both: a content source's records carry { body, metrics }`);if(!Vt(a.body))throw new Error(`customSource("${e}") needs a content body schema: customSource(namespace, { content: { body: z.object({ ... }), metrics: ["likes"] } })`);let c=[...a.metrics??[]];for(let i of c)Qe.parse(i);return S.parse({kind:"custom",namespace:e,...n,data:B(W({body:a.body,metrics:ue(Object.fromEntries(c.map(i=>[i,R().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!Vt(t))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return S.parse({kind:"custom",namespace:e,...n,data:B(t)})}function Vt(e){return typeof e=="object"&&e!==null&&"_zod"in e}function ga(e){return y("tracker",A("Tracker",_e,e))}function jr(e={}){return Te.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function Tr(){return Pe.parse({kind:"discord-reactions"})}var fa={provider:"discord",grantRole:e=>Ne.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),postMessage(e){return dt.parse({provider:"discord",action:"post-message",...e})},messages:jr,reactions:Tr,roles(e={}){return U.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return U.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"],...e.postable?{postable:!0}:{}})}},ha={postMessage(e){return lt.parse({provider:"telegram",action:"post-message",...e})},messages(){return b(me,{identities:["member"],data:be})},reactions(){return b(de,{identities:["member"],accounts:["messageAuthor"],data:ye})}},pa={shorts(){return b(ge,{identities:["member"],content:{body:Pt,metrics:Lt}})}},wa={videos(){return b(fe,{identities:["member"],content:{body:Bt,metrics:Dt}})}};function Pr(e){let{chain:r,token:t}=e,a=t===void 0?null:t;if(a!==null&&typeof a!="string")throw new Error("wallet.balances() takes the token as a string");if(r==="solana"||typeof r=="string"&&Z(r)){if(a!==null&&!Se.safeParse(a).success)throw new Error("wallet.balances() on Solana takes an SPL or Token-2022 mint address (base58)");return{chain:r==="solana"?L:r,token:a}}if(typeof r=="string"&&qe(r)){if(a!==null&&!/^0x[0-9a-fA-F]{40}$/.test(a))throw new Error("wallet.balances() on an EVM chain takes an ERC-20 contract address: 0x and 40 hex digits");return{chain:r,token:a}}if(typeof r=="string"&&/^cosmos:[-_a-zA-Z0-9]{1,32}$/.test(r)){if(a===null||!Ee.safeParse(a).success)throw new Error("wallet.balances() on a Cosmos chain takes a bank denomination such as uatom");return{chain:r,token:a}}throw new Error('wallet.balances() reads "solana", an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"')}function Lr(e){let{chain:r="solana",program:t,instruction:a,mint:n,minAmount:c,signer:i="wallet"}=e;if(r!=="solana"&&!(typeof r=="string"&&Z(r)))throw new Error('wallet.programActivity() reads "solana" (mainnet) or Solana devnet, solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1');if(i!=="wallet"&&i!=="any")throw new Error('wallet.programActivity() takes signer "wallet" or "any"');let u=Ue.safeParse({chain:r==="solana"?L:r,program:t,instruction:a??null,mint:n??null,minAmount:c??null,anySigner:i==="any"});if(!u.success){let l=u.error.issues[0];throw new Error(`wallet.programActivity()${l.path.length?` ${l.path.join(".")}`:""}: ${l.message}`)}return u.data}var ka={balances(e){let r=Pr(e),t=b(he,{identities:["wallet"],data:Ce});return S.parse({...t,balance:r})},programActivity(e){let r=Lr(e),t=b(pe,{identities:["wallet"],data:Ae});return S.parse({...t,activity:r})},nfts(e){let{collection:r}=e;if(typeof r!="string"||!V(r))throw new Error('wallet.nfts() takes an NFT collection such as "eip155:1/erc721:0x\u2026", "eip155:8453/erc1155:0x\u2026/1" or "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/nft:<collection mint>"');let t=b(we,{identities:["wallet"],data:xe}),a={collection:r};return S.parse({...t,nfts:a})},stake(e={}){let{chain:r="solana",voteAccount:t}=e,a=We.safeParse({chain:r==="solana"?L:r,voteAccount:t??null});if(!a.success)throw new Error(`wallet.stake() ${a.error.issues[0].path.join(".")}: ${a.error.issues[0].message}`);let n=b(ke,{identities:["wallet"],data:Re});return S.parse({...n,stake:a.data})},programAccounts(e){let{chain:r="solana",idl:t,...a}=e,n=Ze.safeParse({...a,chain:r==="solana"?L:r,...t===void 0?{}:{idl:{program:a.program,source:"pasted",idl:t}}});if(!n.success)throw new Error(`wallet.programAccounts() ${n.error.issues[0].path.join(".")}: ${n.error.issues[0].message}`);let c=b(ve,{identities:["wallet"],data:je});return S.parse({...c,programAccount:n.data})}},va=()=>({provider:"domino",resource:"point-ledger"});function p(e,r){return r}var ya={pointLedger(e){let r={...e,kind:"point-ledger",default:e.default?Q.parse(e.default.key):""};return p("point-ledger",St.prefault(r.default).meta(r))},datetime(e){let r={...e,kind:"datetime",default:Y.parse(e.default)};return p("datetime",Y.default(r.default).meta(r))},resource(e){let r={...e,source:U.parse(e.source),kind:"resource",default:X.parse(e.default??"")};return p("resource",X.default(r.default).meta(r))},quiz(e){let r=J.parse(e.default);return p("quiz",J.default(r).meta({...e,default:r,kind:"quiz"}))},text(e){let{secret:r,...t}=e,a={...t,kind:"text",default:"default"in e?e.default:"",minLength:e.minLength??(r?0:1),maxLength:e.maxLength??2e3,multiline:e.multiline??!1,...r?{secret:r}:{}};return p("text",E(a).default(a.default).meta(a))},telegramChat(e){let r={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return p("text",se().max(r.maxLength).default(r.default).meta(r))},amount(e){if(!kt(e.default))throw new Error(`settings.amount() takes a base-unit integer string as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:100,multiline:!1,picker:"amount"};return p("text",E(r).default(r.default).meta(r))},chain(e){if(!vt(e.default))throw new Error(`settings.chain() takes "solana", a Solana cluster ID or an EVM chain ID such as "eip155:8453" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:64,multiline:!1,picker:"chain"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},nft(e){if(!V(e.default))throw new Error(`settings.nft() takes an NFT collection such as "eip155:1/erc721:0x\u2026" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:200,multiline:!1,picker:"nft"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},contractCall(e){if(!$e(e.default))throw new Error(`settings.contractCall() takes a contract call such as "eip155:8453:0x\u2026 function stakedOf(address) view returns (uint256)" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:400,multiline:!1,picker:"contract-call"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},contractEvent(e){if(!Me(e.default))throw new Error(`settings.contractEvent() takes a contract event such as "eip155:1:0x\u2026 Transfer(address indexed from, address indexed to, uint256 value)" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:1e3,multiline:!1,picker:"contract-event"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},solanaProgram(e){if(!ze(e.default))throw new Error(`settings.solanaProgram() takes a Solana program address such as "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:32,maxLength:44,multiline:!1,picker:"solana-program"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},integer(e){return p("integer",R().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return p("boolean",ce().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return p("choice",P(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return W(e).strict()}};function Ht(e,r){let t=e.balanceChanges.find(a=>a.mint===r);return t?BigInt(t.delta):0n}function Sa(e,r){let t=Ht(e,r);return t>0n?t.toString():"0"}function Ea(e,r){let t=Ht(e,r);return t<0n?(-t).toString():"0"}function qa(e,r={}){let t=e.balanceChanges.filter(n=>BigInt(n.delta)>0n),a=e.balanceChanges.filter(n=>BigInt(n.delta)<0n);return t.some(n=>(r.into===void 0||n.mint===r.into)&&a.some(c=>c.mint!==n.mint&&(r.from===void 0||c.mint===r.from)))}function Ca(e,r){return e.programs.includes(r)}function Aa(e,r){return e.instructions?.find(t=>t.name===r)?.args??null}var xa=e=>At(e.key,e.name),$a=e=>xt(e.key,e.title),Ma=(e,r)=>Et.parse({kind:"points",balance:$(e),amount:r}),za={text:(e={})=>({input:"text",constraints:gt.parse(e)}),url:(e={})=>({input:"url",constraints:ft.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function Ra(e){if(e?.actor&&e.input!==void 0)throw new Error('manual() cannot combine actor "staff" with input: staff-captured evidence is not supported. Use manual({ actor: "staff" }) for a staff confirmation, or manual({ input }) for evidence the participant submits.');return typeof e?.input=="object"?{kind:"manual",...e.input}:{kind:"manual",input:e?.input??"none",...e?.actor?{actor:e.actor}:{}}}var Jt=new WeakMap,Yt=new WeakMap;function Xt(e,r){let{tracker:t,beneficiary:a="author",on:n,where:c,enrollment:i,since:u,historical:l,content:h}=e;if(!t?.source)throw new Error(r==="automatic"?"automatic() takes no argument, or { tracker } with a tracker handle from defineTracker":"content() takes { tracker } with a tracker handle from defineTracker");let{source:s}=t;if(!Ge(s))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(h&&!G(s))throw new Error(`content() needs a tracker whose source has content: x.search(), or customSource(namespace, { content: { body, metrics } }). Tracker "${t.key}" has none; use automatic({ tracker }) instead.`);if(u==="enrollment"&&i!=="required")throw new Error(`${r}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let k=Wt(s);if(!k.includes(a))throw new Error(s.kind==="custom"?`Tracker "${t.key}" has no "${a}" account: declare it in customSource(namespace, { accounts: ["${a}"] })`:`Tracker "${t.key}" pays ${new Intl.ListFormat("en",{type:"disjunction"}).format(k.map(m=>`"${m}"`))}, not "${a}"`);let q=rt.parse({tracker:t.key,source:s.kind,on:h?"new-record":n??et(s.kind,s.kind==="custom"?s.namespace:void 0),...c?{where:c}:{},beneficiary:a,...i==="required"?{enrollment:i}:{},...u&&u!=="activation"?{since:u}:{},...l&&l!==(h?"claim":"staff")?{historical:l}:{},...h?{content:h}:{}}),v=Zt(s),N=v?Ke(v,q.where):null;if(N)throw new Error(N);let j={kind:"automatic",tracker:q};v&&Jt.set(j,v);let o=G(s);return o&&Yt.set(j,o.metrics),j}function ja(e){return e?Xt(e,"automatic"):{kind:"automatic"}}function Ta(e){if(e&&typeof e=="object"&&"source"in e&&"key"in e&&!("tracker"in e))throw new Error("content() takes { tracker }: write content({ tracker: posts }) instead of content(posts)");return Xt({...e,content:!0},"content")}function Br(e){let{key:r,cost:t,...a}=e,n={...a,id:x(e),cost:typeof t=="number"?t:{balance:$(t.ledger)}};return a.scope==="author"?st.parse(n):ot.parse(n)}var Pa=Br,Dr=(e=[])=>e.filter(r=>r.scope==="author"),er=(e,r={})=>({kind:"keyed",key:e,...r.across?{across:r.across}:{}}),Nr=()=>er(e=>{let r=e.action?.reference;if(!r)throw new Error("perStation() completes from a signed transaction whose memo names a station");return r}),Ir=e=>{let{distinct:r,...t}=e;return{...Ye.parse({kind:"progress",window:{kind:"lifetime"},...t}),distinct:r}},La=()=>({kind:"untracked"}),Ba=()=>({kind:"staff-handover"}),Da=()=>({kind:"automatic"});function Na(e){let{key:r,tiers:t,...a}=e,n=x(e),c=qt.parse({id:n,...a,tiers:t.map(({key:i,...u})=>({...u,id:x({key:i,...u})}))});return y("tiered-reward",{key:c.id,tier:i=>Ct.parse({kind:"tier",reward:c,tier:i})})}var Or=()=>({kind:"once"});function Kr(e={}){return{kind:"accept",...e}}function Fr(e){return{kind:"review",...e}}var M={accept:Kr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:Fr};function Gt(e){let r=e.kind==="reject"&&e.code!==void 0?nt(e.code):null;if(r)throw new Error(r)}var Ia={quiz(e,r={}){let t=zt.parse(e),a=Object.keys(t),n=R().int().min(1).max(a.length).parse(r.minimumCorrect??a.length);return async({input:c})=>{let i=Object.keys(c.answers).length===a.length&&a.every(l=>Object.hasOwn(c.answers,l)),u=a.filter(l=>c.answers[l]===t[l]).length;return i&&u>=n?M.accept():M.reject({reason:"Review your answers and try again."})}},photo(e){return async r=>{let t=e(r),a=await r.review.photo({image:r.input.photo,criteria:t.criteria});return a.kind==="unclear"?t.unclear==="human-review"?M.review({reason:a.reason}):M.reject({reason:a.reason}):a.kind==="pass"?M.accept():M.reject({reason:a.reason})}}},Qr={once:Or,keyed:er,streak:xr,progress:Ir,perStation:Nr};function tr(e){return function(t){let a=x(t),n=`${e?"Quest type":"Quest"} "${a}"`;if(t.rewards===void 0)throw new Error(`${n}: rewards is missing. Return [] for a quest that gives none.`);let c=[...new Set((t.integrations??[]).map(o=>it.parse(o.provider)))],i=c.flatMap(o=>{let m=ct.safeParse(o);return m.success?[m.data]:[]}),u=t.trigger.kind==="automatic"&&t.trigger.tracker?.content===!0,l=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0,h=t.completion,s=typeof h=="function"?h(Qr):h;if(u&&s!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!u&&s===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");let k=Dr(t.budgets),q=t.stations?pt.parse(t.stations):void 0;if(Ut({trigger:t.trigger,completion:s??{kind:"keyed"},requires:t.requires??[],authorBudgets:k,performance:t.performance?_.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs}):void 0,...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs},...q?{stations:q}:{}},{template:e}),t.retryCooldownMs!==void 0&&!ee.safeParse(t.retryCooldownMs).success)throw new Error("retryCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.completionCooldownMs!==void 0&&!ee.safeParse(t.completionCooldownMs).success)throw new Error("completionCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.performance){let o=Yt.get(t.trigger)??[],m=t.performance.metrics.filter(g=>!o.includes(g));if(m.length)throw new Error(`The tracker's source does not measure ${m.join(", ")}`)}if(t.trigger.kind==="manual"&&t.trigger.input!=="none"&&!t.evaluate)throw new Error("Evidence quests require an evaluator");let v=Object.fromEntries(Object.entries(t.settings.shape).map(([o,m])=>{let g=wt.safeParse(m.meta());if(!g.success)throw new Error(`Setting "${o}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);if(g.data.kind==="text"&&g.data.secret&&g.data.default!=="")throw new Error(`Secret setting "${o}" must default to "": set its value in Console, not in source or deploy settings`);return[o,g.data]}));for(let o of tt(t.trigger.kind==="automatic"?t.trigger.tracker?.where:void 0))if(!yt(v[o]))throw new Error(`The tracker filter compares with setting "${o}", which is not an integer or amount setting`);function N(o){try{return j(o)}catch(m){throw oe(n,m)}}function j(o){let{performance:m}=t,g=T("settings",()=>t.settings.parse(o)),I=bt(v,g),z=T("rewards",()=>$t.parse(typeof t.rewards=="function"?t.rewards({settings:g}):t.rewards)),C=T("announcements",()=>ie(mt).max(3,"A quest posts at most three announcements").parse((typeof t.announcements=="function"?t.announcements({settings:g}):t.announcements)??[])),f=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0;for(let d of C){let K=ut(d.text),w="segments"in K&&K.segments.some(ne=>ne.kind==="placeholder"&&ne.name==="author");if(!f&&w)throw new Error("An announcement names {author} only on a quest with an automatic tracker trigger");if(!f&&d.replyToTriggeringMessage)throw new Error("An announcement replies to the triggering message only on a quest with an automatic tracker trigger")}let O=[...z.flatMap(d=>d.kind==="integration"?[d.provider]:[]),...C.flatMap(d=>d.provider==="discord"?["discord"]:[]),...Object.values(v).flatMap(d=>d.kind==="resource"&&d.source.provider!=="domino"?[d.source.provider]:[])];for(let d of O)if(!i.includes(d))throw new Error(`Declare the ${d} integration on this quest`);return Mt.parse({quest:a,evaluatorProtocol:te,title:typeof t.title=="function"?t.title({settings:g}):t.title,presentation:t.presentation?.({settings:g})??{},fields:v,values:I,rewards:z,...C.length?{announcements:C}:{},humanReview:t.review?.({settings:g})?.enabled??!0,trigger:t.trigger,...m?{performance:T("performance",()=>_.parse({metrics:m.metrics,maxAgeMs:m.maxAgeMs}))}:{},integrations:i,...c.length>i.length?{integrationModules:c}:{},completion:s?s.kind==="progress"?{kind:s.kind,goal:s.goal,window:s.window,repeat:s.repeat}:s.kind==="streak"?s:s.kind==="keyed"&&s.across?{kind:s.kind,across:s.across}:{kind:s.kind}:{kind:"keyed"},visibility:t.visibility??"visible",profile:t.profile??{visible:!1},budgets:(t.budgets??[]).filter(d=>d.scope!=="author"),...k.length?{authorBudgets:k}:{},requires:t.requires??[],...t.campaign?{campaign:t.campaign}:{},...t.availability?{availability:t.availability}:{},...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs},...q?{stations:q}:{}})}return y("quest",{protocol:te,key:a,describe:N,async evaluate(o){let m=t.settings.parse(o.settings),g=l?at.parse(o.tracker):null,I=Jt.get(t.trigger),z=g&&I?Ie(I,g.record.data):null;if(z)return D.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${z.path} ${z.reason}`});let C=g;if(o.performance){if(!t.performance)throw new Error("Quest has no performance evaluator");let d=Rt.parse(o.performance),K=F(P(t.performance.metrics),R().int().safe().nonnegative()).parse(d.metrics),w=await t.performance.evaluate({settings:m,member:o.member,tracker:C,metrics:K,observedAt:d.observedAt});if(!w)throw new Error("Performance evaluator returned no decision");if(w.rewards!==void 0)throw new Error("A performance evaluator cannot select rewards. It gates the rewards content evaluation selected: return accept, review or reject with a reason only.");return Gt(w),D.parse(w.kind==="accept"?{kind:"accept",rewards:d.rewards}:w.kind==="review"&&o.humanReview?{kind:"review",reason:w.reason,rewards:d.rewards}:{kind:"reject",reason:w.reason,...w.kind==="review"?{requestedReview:!0}:w.code===void 0?{}:{code:w.code}})}let f=t.evaluate?await t.evaluate({settings:m,member:o.member,input:o.input,tracker:C,action:o.action??null,eligibleAt:o.eligibleAt,calendar:o.calendar,now:o.now,review:o.review,trackers:Oe(o.trackers),wallet:o.wallet,images:o.images,...o.telegram?{telegram:o.telegram}:{},...Object.fromEntries(i.map(d=>[d,o[d]]))}):M.accept();if(!f)throw new Error("Evaluator returned no decision");if(Gt(f),f.kind==="review"&&!o.humanReview)return D.parse({kind:"reject",reason:f.reason,requestedReview:!0});(f.kind==="accept"||f.kind==="review")&&f.completionKey!==void 0&&s?.kind!=="keyed"&&o.diagnose?.({code:"completion-key-ignored",message:Ur(s,f.completionKey)});let O={...o,settings:m,tracker:g,action:o.action??null};return D.parse(f.kind==="accept"||f.kind==="review"?{...f,rewards:f.rewards??o.rewards,...s?.kind==="keyed"||s?.kind==="progress"?{completionKey:s.kind==="progress"?s.distinct(O):f.completionKey??s.key(O)}:{}}:f)}})}}function Ur(e,r){let t=`ignores completionKey ${JSON.stringify(r)}`;switch(e?.kind){case void 0:return`A content quest completes once per content item, under a key Relay sets, so it ${t}`;case"once":return`once() completes the quest once per member and ${t}: use keyed(...) to complete it once per key`;case"streak":return`streak(...) keys its own completions and ${t}`;case"progress":return`progress(...) keys each contribution with its distinct(...) and ${t}: derive the key in distinct(...)`}}var Oa=tr(!1),Ka=tr(!0);export{yr as CapabilityError,ja as automatic,Da as automaticFulfillment,xa as badge,pr as balanceAtLeast,Pa as budget,oa as calendar,vr as capabilityErrorCodes,hr as completed,Ta as content,Ee as cosmosDenomSchema,nr as cosmosNetworkSchema,na as count,b as customSource,M as decision,ta as defineBadge,gr as defineCampaign,kr as defineDashboard,aa as defineEngagementReward,fr as defineGroup,da as defineLeaderboard,ra as defineLedger,ia as defineOffer,Oa as defineQuest,Ka as defineQuestType,ua as defineReferral,Na as defineTieredReward,ga as defineTracker,fa as discord,la as earned,Ia as evaluators,za as evidence,Sr as formatUnits,$a as groupMembership,wr as inGroup,Aa as instruction,Ca as invoked,$e as isContractCall,Me as isContractEvent,qe as isEvmChainId,V as isNftCollection,ze as isSolanaProgram,er as keyed,Rr as leaderboardTiesWarning,ar as limits,Ra as manual,ur as maxWalletEventLogs,lr as maxWalletEventLookback,mr as maxWalletTransactionLookback,dr as maxWalletTransactions,Or as once,cr as parseContractCall,ir as parseContractEvent,sr as parseContractFunction,or as parseNftCollection,br as parseUnits,Nr as perStation,va as pointLedgers,Ma as points,Ir as progress,ca as questCompleted,Sa as received,sa as rolling,ya as settings,Ea as spent,Ba as staffHandover,xr as streak,qa as swapped,ha as telegram,wa as tiktok,B as trackerDataSchema,at as trackerTriggerContextSchema,La as untracked,ka as wallet,ma as x,pa as youtube,rr as z};
|
|
1
|
+
import{$b as He,Ad as at,Ae as kt,De as vt,Di as vr,Ee as yt,Ei as Lt,Fe as bt,Fi as Bt,Ge as E,Gi as Dt,Hd as nt,He as St,Hi as Nt,Ii as yr,J as de,Ja as Ae,Jd as ot,Jf as ee,K as me,Ka as xe,Ki as br,L as ge,La as sr,Le as x,Lf as D,M as he,Ma as V,Mb as Ue,Mi as It,N as fe,Nb as We,Ni as Ot,O as pe,Oa as Me,Oe as hr,Of as $t,Oi as re,P as we,Pa as cr,Q as ke,Qa as ir,R as ve,Ra as $e,Rb as Ze,Tb as Fe,Td as st,Ua as ur,Ub as Ve,Ud as ct,Uh as Pt,Va as ze,Vb as Ge,Ve as y,Wa as lr,Wb as S,Wc as _,We as Et,Wf as te,Xa as dr,Xc as Ye,Xd as it,Xe as M,Yc as H,Yd as ut,Yf as zt,Za as Re,Zb as _e,Zc as Xe,Ze as fr,_b as G,_g as jt,a as A,ab as mr,b as oe,bb as gr,c as T,ca as ye,cc as Je,ce as lt,cj as Kt,d as U,da as be,ea as nr,ee as dt,eg as Rt,f as le,fa as Se,fe as mt,fh as Tt,ge as gt,ha as or,he as ht,ia as Ee,ib as je,ie as ft,jb as Te,ka as L,lb as Pe,ma as F,mb as Le,na as qe,nb as Be,ob as De,od as et,of as pr,pb as Ne,pf as wr,qb as Ie,qf as kr,rd as tt,re as J,rf as qt,se as pt,sf as Ct,sj as Qt,ta as Ce,te as wt,uf as At,vb as B,ve as W,wb as Oe,wd as rt,wf as xt,xb as Ke,yb as Qe,ye as Y,yf as Mt,ze as X}from"./chunks/447P2VLY.js";import{Cb as R,Ec as P,Kb as ce,Pd as ar,fc as ie,ic as Z,jc as ue,va as se,wc as Q}from"./chunks/EWU4OKSY.js";function Ut(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,r){Ut(r);let t=/^(\d+)(?:\.(\d+))?$/.exec(e.trim());if(!t)throw new Error(`Use a decimal amount such as "1.5", not "${e}"`);let[,a,n=""]=t,c=n.replace(/0+$/,"");if(c.length>r)throw new Error(`"${e}" has more than ${r} decimal places, which this token cannot hold`);return BigInt(a+c.padEnd(r,"0"))}function Er(e,r){Ut(r);let t=typeof e=="bigint"?e:BigInt(e),a=t<0n?"-":"",n=(t<0n?-t:t).toString().padStart(r+1,"0"),c=n.slice(0,n.length-r),i=n.slice(n.length-r).replace(/0+$/,"");return a+c+(i?"."+i:"")}function Zt(e,r={}){let{trigger:t,completion:a,requires:n,performance:c,retryCooldownMs:i,completionCooldownMs:u,authorBudgets:l=[],stations:f}=e,s=t.kind==="automatic"?t.tracker:void 0,k=s?.content===!0;if(c&&!k)throw new Error("Performance requires a content quest");if(!s&&l.length)throw new Error('A budget with scope "author" counts per tracker record author: use it only on a quest with a tracker trigger');if(k){if(a.kind!=="keyed"||a.across)throw new Error("Content quests complete once per content item");if(s.beneficiary!=="author"||s.on!=="new-record")throw new Error("A content quest pays each content item's author and fires on its first observation")}if(i!==void 0&&(t.kind!=="manual"||t.actor==="staff"))throw new Error("A retry cooldown applies only to quests members submit themselves");if(u!==void 0){if(t.kind!=="manual"||t.actor==="staff")throw new Error("A completion cooldown applies only to quests members submit themselves");if(a.kind==="once")throw new Error("A completion cooldown needs a quest members can complete more than once: this one completes once per member")}if(f&&r.template)throw new Error("Reusable quest types cannot declare check-in stations: declare them on a quest written in code");if(f&&!pt(t))throw new Error("Stations are for quests a signed Solana transaction completes: a member-submitted manual() quest without input");if(t.kind==="automatic"&&!s){if(!r.template&&n.length===0)throw new Error("Automatic quests need at least one prerequisite");if(a.kind!=="once")throw new Error("Prerequisite-only automatic quests complete once")}}var qr=["author"],Cr=["author","messageAuthor"];function Ft(e){if(!Je(e))return[];switch(e.kind){case"x-search":return Ue;case"discord-messages":return qr;case"discord-reactions":return Cr;case"custom":return["author",...e.accounts??[]]}}var Wt=new Map;function Ar(e){let r=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,t=Wt.get(r);return t||(t=B(r==="messages-text"?De:r==="discord-messages"?Be:Ne),Wt.set(r,t)),t}function Vt(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return Ar(e);case"custom":return e.data}}function Ht(e,r){let t=typeof e=="object"&&e!==null&&"kind"in e&&e.kind==="tier"&&"reward"in e&&typeof e.reward=="object"&&e.reward!==null?e.reward:null;return t&&"badge"in t&&t.badge!==void 0?`Badge rewards can only be granted by quests or manually, not by ${r}`:t&&"group"in t&&t.group!==void 0?`Group membership rewards can only be granted by quests, not by ${r}`:null}function ae(e,r,t,a){for(let[n,c]of r.entries()){let i=Ht(c,a);i&&e.addIssue({code:"custom",message:i,path:[...t,n]})}}function ra(e){return y("badge",A("Badge",le,e))}function aa(e){return y("ledger",A("Point ledger",Tt,e))}function na(e){let{target:r,ledger:t,...a}=e,n=It.parse({...a,qualifiedBy:e.qualifiedBy.key,balance:M(t)}),c=Q(P(e.metrics),re.shape.target);return{key:n.key,describe:()=>n,score(i){let u=Ot.parse(i);return re.parse({target:r({metrics:c.parse(u.metrics)}),baseline:r({metrics:c.parse(u.baseline)})})}}}var Mr=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 et.strict().parse({kind:"streak",...e})},oa=e=>Ye.brand().parse({kind:"count",count:e}),sa=(e,r={})=>H.brand().parse({kind:"calendar",period:e,...r}),ca=({days:e})=>H.brand().parse({kind:"rolling",durationMs:e*864e5}),ia=e=>({kind:"quest",quest:e}),$r=Qt.superRefine((e,r)=>{let t=Ht(e.reward,"offers");t&&r.addIssue({code:"custom",message:t,path:["reward"]})});function ua(e){return y("offer",A("Offer",$r,e))}var zr=Kt.superRefine((e,r)=>{for(let t of["inviter","invitee"])ae(r,e.rewards[t],["rewards",t],"referral programs");for(let[t,a]of e.milestones.entries())ae(r,a.rewards,["milestones",t,"rewards"],"referral programs")});function la(e){let{qualification:r,inviterGroup:t,milestones:a,bonuses:n,...c}=e,i=A("Referral",zr,{...c,qualification:r.kind==="quest"?{kind:"quest",quest:r.quest.key}:r,...t?{inviterGroup:U.parse(t.key)}:{},milestones:a?.map(({key:u,...l})=>({...l,id:x({key:u,...l})})),bonuses:n?.map(({key:u,ledger:l,quests:f,...s})=>({...s,id:x({key:u,...s}),balance:M(l),quests:f?.map(k=>k.key)}))});return y("referral",i)}function da(e={}){return{kind:"earned",...e}}var Rr=Pt.superRefine((e,r)=>{for(let[t,a]of(e.settle?.prizes??[]).entries())ae(r,a.rewards,["settle","prizes",t,"rewards"],"leaderboard prizes")});function jr(e){let r=e.ties??"shared";return!e.settle||e.settle.ties===r?null:`Leaderboard${e.key?` "${e.key}"`:""} orders equal scores "${r}" in its live standings${e.ties===void 0?" (ties left out)":""} but "${e.settle.ties}" when it settles, so the ranks members see are not the ranks prizes pay. Set ties: "${e.settle.ties}" beside settle.ties to show the order prizes pay.`}function ma(e){let{ledger:r,group:t,score:a,settle:n,...c}=e,i=n?.pool,u=A("Leaderboard",Rr,{...c,...n?{settle:{...n,prizes:n.prizes??[],...i?{pool:{...i,...i.ledger===void 0?{}:{ledger:M(i.ledger)}}}:{}}}:{},balance:M(r),...t?{group:U.parse(t.key)}:{},score:a?.kind==="earned"?{...a,quests:a.quests?.map(f=>f.key)}:a}),l=jr(u);return l&&console.warn(l),y("leaderboard",u)}var ga={provider:"x",search:e=>Ge.parse({kind:"x-search",...e})};function b(e,r){let{data:t,content:a,...n}=r??{};if(a!==void 0){if(t!==void 0)throw new Error(`customSource("${e}") takes data or content, not both: a content source's records carry { body, metrics }`);if(!Gt(a.body))throw new Error(`customSource("${e}") needs a content body schema: customSource(namespace, { content: { body: z.object({ ... }), metrics: ["likes"] } })`);let c=[...a.metrics??[]];for(let i of c)We.parse(i);return S.parse({kind:"custom",namespace:e,...n,data:B(Z({body:a.body,metrics:ue(Object.fromEntries(c.map(i=>[i,R().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!Gt(t))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return S.parse({kind:"custom",namespace:e,...n,data:B(t)})}function Gt(e){return typeof e=="object"&&e!==null&&"_zod"in e}function ha(e){return y("tracker",A("Tracker",He,e))}function Tr(e={}){return Pe.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function Pr(){return Le.parse({kind:"discord-reactions"})}var fa={provider:"discord",grantRole:e=>Ie.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),postMessage(e){return mt.parse({provider:"discord",action:"post-message",...e})},messages:Tr,reactions:Pr,roles(e={}){return W.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return W.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"],...e.postable?{postable:!0}:{}})}},pa={postMessage(e){return dt.parse({provider:"telegram",action:"post-message",...e})},messages(){return b(me,{identities:["member"],data:be})},reactions(){return b(de,{identities:["member"],accounts:["messageAuthor"],data:ye})}},wa={shorts(){return b(ge,{identities:["member"],content:{body:Lt,metrics:Bt}})}},ka={videos(){return b(he,{identities:["member"],content:{body:Dt,metrics:Nt}})}};function Lr(e){let{chain:r,token:t}=e,a=t===void 0?null:t;if(a!==null&&typeof a!="string")throw new Error("wallet.balances() takes the token as a string");if(r==="solana"||typeof r=="string"&&F(r)){if(a!==null&&!Se.safeParse(a).success)throw new Error("wallet.balances() on Solana takes an SPL or Token-2022 mint address (base58)");return{chain:r==="solana"?L:r,token:a}}if(typeof r=="string"&&Ce(r)){if(a!==null&&!qe(a))throw new Error("wallet.balances() on an EVM chain takes an ERC-20 contract address: 0x and 40 hex digits");return{chain:r,token:a}}if(typeof r=="string"&&/^cosmos:[-_a-zA-Z0-9]{1,32}$/.test(r)){if(a===null||!Ee.safeParse(a).success)throw new Error("wallet.balances() on a Cosmos chain takes a bank denomination such as uatom");return{chain:r,token:a}}throw new Error('wallet.balances() reads "solana", an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"')}function Br(e){let{chain:r="solana",program:t,instruction:a,mint:n,minAmount:c,signer:i="wallet"}=e;if(r!=="solana"&&!(typeof r=="string"&&F(r)))throw new Error('wallet.programActivity() reads "solana" (mainnet) or Solana devnet, solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1');if(i!=="wallet"&&i!=="any")throw new Error('wallet.programActivity() takes signer "wallet" or "any"');let u=Ze.safeParse({chain:r==="solana"?L:r,program:t,instruction:a??null,mint:n??null,minAmount:c??null,anySigner:i==="any"});if(!u.success){let l=u.error.issues[0];throw new Error(`wallet.programActivity()${l.path.length?` ${l.path.join(".")}`:""}: ${l.message}`)}return u.data}var va={balances(e){let r=Lr(e),t=b(fe,{identities:["wallet"],data:Ae});return S.parse({...t,balance:r})},programActivity(e){let r=Br(e),t=b(pe,{identities:["wallet"],data:xe});return S.parse({...t,activity:r})},nfts(e){let{collection:r}=e;if(typeof r!="string"||!V(r))throw new Error('wallet.nfts() takes an NFT collection such as "eip155:1/erc721:0x\u2026", "eip155:8453/erc1155:0x\u2026/1" or "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/nft:<collection mint>"');let t=b(we,{identities:["wallet"],data:Me}),a={collection:r};return S.parse({...t,nfts:a})},stake(e={}){let{chain:r="solana",voteAccount:t}=e,a=Fe.safeParse({chain:r==="solana"?L:r,voteAccount:t??null});if(!a.success)throw new Error(`wallet.stake() ${a.error.issues[0].path.join(".")}: ${a.error.issues[0].message}`);let n=b(ke,{identities:["wallet"],data:je});return S.parse({...n,stake:a.data})},programAccounts(e){let{chain:r="solana",idl:t,...a}=e,n=Ve.safeParse({...a,chain:r==="solana"?L:r,...t===void 0?{}:{idl:{program:a.program,source:"pasted",idl:t}}});if(!n.success)throw new Error(`wallet.programAccounts() ${n.error.issues[0].path.join(".")}: ${n.error.issues[0].message}`);let c=b(ve,{identities:["wallet"],data:Te});return S.parse({...c,programAccount:n.data})}},ya=()=>({provider:"domino",resource:"point-ledger"});function p(e,r){return r}var ba={pointLedger(e){let r={...e,kind:"point-ledger",default:e.default?U.parse(e.default.key):""};return p("point-ledger",Et.prefault(r.default).meta(r))},datetime(e){let r={...e,kind:"datetime",default:Y.parse(e.default)};return p("datetime",Y.default(r.default).meta(r))},resource(e){let r={...e,source:W.parse(e.source),kind:"resource",default:X.parse(e.default??"")};return p("resource",X.default(r.default).meta(r))},quiz(e){let r=J.parse(e.default);return p("quiz",J.default(r).meta({...e,default:r,kind:"quiz"}))},text(e){let{secret:r,...t}=e,a={...t,kind:"text",default:"default"in e?e.default:"",minLength:e.minLength??(r?0:1),maxLength:e.maxLength??2e3,multiline:e.multiline??!1,...r?{secret:r}:{}};return p("text",E(a).default(a.default).meta(a))},telegramChat(e){let r={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return p("text",se().max(r.maxLength).default(r.default).meta(r))},amount(e){if(!vt(e.default))throw new Error(`settings.amount() takes a base-unit integer string as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:100,multiline:!1,picker:"amount"};return p("text",E(r).default(r.default).meta(r))},chain(e){if(!yt(e.default))throw new Error(`settings.chain() takes "solana", a Solana cluster ID or an EVM chain ID such as "eip155:8453" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:64,multiline:!1,picker:"chain"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},nft(e){if(!V(e.default))throw new Error(`settings.nft() takes an NFT collection such as "eip155:1/erc721:0x\u2026" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:200,multiline:!1,picker:"nft"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},contractCall(e){if(!$e(e.default))throw new Error(`settings.contractCall() takes a contract call such as "eip155:8453:0x\u2026 function stakedOf(address) view returns (uint256)" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:400,multiline:!1,picker:"contract-call"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},contractEvent(e){if(!ze(e.default))throw new Error(`settings.contractEvent() takes a contract event such as "eip155:1:0x\u2026 Transfer(address indexed from, address indexed to, uint256 value)" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:1e3,multiline:!1,picker:"contract-event"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},solanaProgram(e){if(!Re(e.default))throw new Error(`settings.solanaProgram() takes a Solana program address such as "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:32,maxLength:44,multiline:!1,picker:"solana-program"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},integer(e){return p("integer",R().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return p("boolean",ce().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return p("choice",P(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return Z(e).strict()}};function Jt(e,r){let t=e.balanceChanges.find(a=>a.mint===r);return t?BigInt(t.delta):0n}function Ea(e,r){let t=Jt(e,r);return t>0n?t.toString():"0"}function qa(e,r){let t=Jt(e,r);return t<0n?(-t).toString():"0"}function Ca(e,r={}){let t=e.balanceChanges.filter(n=>BigInt(n.delta)>0n),a=e.balanceChanges.filter(n=>BigInt(n.delta)<0n);return t.some(n=>(r.into===void 0||n.mint===r.into)&&a.some(c=>c.mint!==n.mint&&(r.from===void 0||c.mint===r.from)))}function Aa(e,r){return e.programs.includes(r)}function xa(e,r){return e.instructions?.find(t=>t.name===r)?.args??null}var Ma=e=>xt(e.key,e.name),$a=e=>Mt(e.key,e.title),za=(e,r)=>qt.parse({kind:"points",balance:M(e),amount:r}),Ra={text:(e={})=>({input:"text",constraints:ht.parse(e)}),url:(e={})=>({input:"url",constraints:ft.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function ja(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 Yt=new WeakMap,Xt=new WeakMap;function er(e,r){let{tracker:t,beneficiary:a="author",on:n,where:c,enrollment:i,since:u,historical:l,content:f}=e;if(!t?.source)throw new Error(r==="automatic"?"automatic() takes no argument, or { tracker } with a tracker handle from defineTracker":"content() takes { tracker } with a tracker handle from defineTracker");let{source:s}=t;if(!_e(s))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(f&&!G(s))throw new Error(`content() needs a tracker whose source has content: x.search(), or customSource(namespace, { content: { body, metrics } }). Tracker "${t.key}" has none; use automatic({ tracker }) instead.`);if(u==="enrollment"&&i!=="required")throw new Error(`${r}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let k=Ft(s);if(!k.includes(a))throw new Error(s.kind==="custom"?`Tracker "${t.key}" has no "${a}" account: declare it in customSource(namespace, { accounts: ["${a}"] })`:`Tracker "${t.key}" pays ${new Intl.ListFormat("en",{type:"disjunction"}).format(k.map(m=>`"${m}"`))}, not "${a}"`);let q=at.parse({tracker:t.key,source:s.kind,on:f?"new-record":n??tt(s.kind,s.kind==="custom"?s.namespace:void 0),...c?{where:c}:{},beneficiary:a,...i==="required"?{enrollment:i}:{},...u&&u!=="activation"?{since:u}:{},...l&&l!==(f?"claim":"staff")?{historical:l}:{},...f?{content:f}:{}}),v=Vt(s),N=v?Qe(v,q.where):null;if(N)throw new Error(N);let j={kind:"automatic",tracker:q};v&&Yt.set(j,v);let o=G(s);return o&&Xt.set(j,o.metrics),j}function Ta(e){return e?er(e,"automatic"):{kind:"automatic"}}function Pa(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 er({...e,content:!0},"content")}function Dr(e){let{key:r,cost:t,...a}=e,n={...a,id:x(e),cost:typeof t=="number"?t:{balance:M(t.ledger)}};return a.scope==="author"?ct.parse(n):st.parse(n)}var La=Dr,Nr=(e=[])=>e.filter(r=>r.scope==="author"),tr=(e,r={})=>({kind:"keyed",key:e,...r.across?{across:r.across}:{}}),Ir=()=>tr(e=>{let r=e.action?.reference;if(!r)throw new Error("perStation() completes from a signed transaction whose memo names a station");return r}),Or=e=>{let{distinct:r,...t}=e;return{...Xe.parse({kind:"progress",window:{kind:"lifetime"},...t}),distinct:r}},Ba=()=>({kind:"untracked"}),Da=()=>({kind:"staff-handover"}),Na=()=>({kind:"automatic"});function Ia(e){let{key:r,tiers:t,...a}=e,n=x(e),c=Ct.parse({id:n,...a,tiers:t.map(({key:i,...u})=>({...u,id:x({key:i,...u})}))});return y("tiered-reward",{key:c.id,tier:i=>At.parse({kind:"tier",reward:c,tier:i})})}var Kr=()=>({kind:"once"});function Qr(e={}){return{kind:"accept",...e}}function Ur(e){return{kind:"review",...e}}var $={accept:Qr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:Ur};function _t(e){let r=e.kind==="reject"&&e.code!==void 0?ot(e.code):null;if(r)throw new Error(r)}var Oa={quiz(e,r={}){let t=Rt.parse(e),a=Object.keys(t),n=R().int().min(1).max(a.length).parse(r.minimumCorrect??a.length);return async({input:c})=>{let i=Object.keys(c.answers).length===a.length&&a.every(l=>Object.hasOwn(c.answers,l)),u=a.filter(l=>c.answers[l]===t[l]).length;return i&&u>=n?$.accept():$.reject({reason:"Review your answers and try again."})}},photo(e){return async r=>{let t=e(r),a=await r.review.photo({image:r.input.photo,criteria:t.criteria});return a.kind==="unclear"?t.unclear==="human-review"?$.review({reason:a.reason}):$.reject({reason:a.reason}):a.kind==="pass"?$.accept():$.reject({reason:a.reason})}}},Wr={once:Kr,keyed:tr,streak:Mr,progress:Or,perStation:Ir};function rr(e){return function(t){let a=x(t),n=`${e?"Quest type":"Quest"} "${a}"`;if(t.rewards===void 0)throw new Error(`${n}: rewards is missing. Return [] for a quest that gives none.`);let c=[...new Set((t.integrations??[]).map(o=>ut.parse(o.provider)))],i=c.flatMap(o=>{let m=it.safeParse(o);return m.success?[m.data]:[]}),u=t.trigger.kind==="automatic"&&t.trigger.tracker?.content===!0,l=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0,f=t.completion,s=typeof f=="function"?f(Wr):f;if(u&&s!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!u&&s===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");let k=Nr(t.budgets),q=t.stations?wt.parse(t.stations):void 0;if(Zt({trigger:t.trigger,completion:s??{kind:"keyed"},requires:t.requires??[],authorBudgets:k,performance:t.performance?_.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs}):void 0,...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs},...q?{stations:q}:{}},{template:e}),t.retryCooldownMs!==void 0&&!ee.safeParse(t.retryCooldownMs).success)throw new Error("retryCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.completionCooldownMs!==void 0&&!ee.safeParse(t.completionCooldownMs).success)throw new Error("completionCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.performance){let o=Xt.get(t.trigger)??[],m=t.performance.metrics.filter(g=>!o.includes(g));if(m.length)throw new Error(`The tracker's source does not measure ${m.join(", ")}`)}if(t.trigger.kind==="manual"&&t.trigger.input!=="none"&&!t.evaluate)throw new Error("Evidence quests require an evaluator");let v=Object.fromEntries(Object.entries(t.settings.shape).map(([o,m])=>{let g=kt.safeParse(m.meta());if(!g.success)throw new Error(`Setting "${o}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);if(g.data.kind==="text"&&g.data.secret&&g.data.default!=="")throw new Error(`Secret setting "${o}" must default to "": set its value in Console, not in source or deploy settings`);return[o,g.data]}));for(let o of rt(t.trigger.kind==="automatic"?t.trigger.tracker?.where:void 0))if(!bt(v[o]))throw new Error(`The tracker filter compares with setting "${o}", which is not an integer or amount setting`);function N(o){try{return j(o)}catch(m){throw oe(n,m)}}function j(o){let{performance:m}=t,g=T("settings",()=>t.settings.parse(o)),I=St(v,g),z=T("rewards",()=>$t.parse(typeof t.rewards=="function"?t.rewards({settings:g}):t.rewards)),C=T("announcements",()=>ie(gt).max(3,"A quest posts at most three announcements").parse((typeof t.announcements=="function"?t.announcements({settings:g}):t.announcements)??[])),h=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0;for(let d of C){let K=lt(d.text),w="segments"in K&&K.segments.some(ne=>ne.kind==="placeholder"&&ne.name==="author");if(!h&&w)throw new Error("An announcement names {author} only on a quest with an automatic tracker trigger");if(!h&&d.replyToTriggeringMessage)throw new Error("An announcement replies to the triggering message only on a quest with an automatic tracker trigger")}let O=[...z.flatMap(d=>d.kind==="integration"?[d.provider]:[]),...C.flatMap(d=>d.provider==="discord"?["discord"]:[]),...Object.values(v).flatMap(d=>d.kind==="resource"&&d.source.provider!=="domino"?[d.source.provider]:[])];for(let d of O)if(!i.includes(d))throw new Error(`Declare the ${d} integration on this quest`);return zt.parse({quest:a,evaluatorProtocol:te,title:typeof t.title=="function"?t.title({settings:g}):t.title,presentation:t.presentation?.({settings:g})??{},fields:v,values:I,rewards:z,...C.length?{announcements:C}:{},humanReview:t.review?.({settings:g})?.enabled??!0,trigger:t.trigger,...m?{performance:T("performance",()=>_.parse({metrics:m.metrics,maxAgeMs:m.maxAgeMs}))}:{},integrations:i,...c.length>i.length?{integrationModules:c}:{},completion:s?s.kind==="progress"?{kind:s.kind,goal:s.goal,window:s.window,repeat:s.repeat}:s.kind==="streak"?s:s.kind==="keyed"&&s.across?{kind:s.kind,across:s.across}:{kind:s.kind}:{kind:"keyed"},visibility:t.visibility??"visible",profile:t.profile??{visible:!1},budgets:(t.budgets??[]).filter(d=>d.scope!=="author"),...k.length?{authorBudgets:k}:{},requires:t.requires??[],...t.campaign?{campaign:t.campaign}:{},...t.availability?{availability:t.availability}:{},...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs},...q?{stations:q}:{}})}return y("quest",{protocol:te,key:a,describe:N,async evaluate(o){let m=t.settings.parse(o.settings),g=l?nt.parse(o.tracker):null,I=Yt.get(t.trigger),z=g&&I?Oe(I,g.record.data):null;if(z)return D.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${z.path} ${z.reason}`});let C=g;if(o.performance){if(!t.performance)throw new Error("Quest has no performance evaluator");let d=jt.parse(o.performance),K=Q(P(t.performance.metrics),R().int().safe().nonnegative()).parse(d.metrics),w=await t.performance.evaluate({settings:m,member:o.member,tracker:C,metrics:K,observedAt:d.observedAt});if(!w)throw new Error("Performance evaluator returned no decision");if(w.rewards!==void 0)throw new Error("A performance evaluator cannot select rewards. It gates the rewards content evaluation selected: return accept, review or reject with a reason only.");return _t(w),D.parse(w.kind==="accept"?{kind:"accept",rewards:d.rewards}:w.kind==="review"&&o.humanReview?{kind:"review",reason:w.reason,rewards:d.rewards}:{kind:"reject",reason:w.reason,...w.kind==="review"?{requestedReview:!0}:w.code===void 0?{}:{code:w.code}})}let h=t.evaluate?await t.evaluate({settings:m,member:o.member,input:o.input,tracker:C,action:o.action??null,eligibleAt:o.eligibleAt,calendar:o.calendar,now:o.now,review:o.review,trackers:Ke(o.trackers),wallet:o.wallet,images:o.images,...o.telegram?{telegram:o.telegram}:{},...Object.fromEntries(i.map(d=>[d,o[d]]))}):$.accept();if(!h)throw new Error("Evaluator returned no decision");if(_t(h),h.kind==="review"&&!o.humanReview)return D.parse({kind:"reject",reason:h.reason,requestedReview:!0});(h.kind==="accept"||h.kind==="review")&&h.completionKey!==void 0&&s?.kind!=="keyed"&&o.diagnose?.({code:"completion-key-ignored",message:Zr(s,h.completionKey)});let O={...o,settings:m,tracker:g,action:o.action??null};return D.parse(h.kind==="accept"||h.kind==="review"?{...h,rewards:h.rewards??o.rewards,...s?.kind==="keyed"||s?.kind==="progress"?{completionKey:s.kind==="progress"?s.distinct(O):h.completionKey??s.key(O)}:{}}:h)}})}}function Zr(e,r){let t=`ignores completionKey ${JSON.stringify(r)}`;switch(e?.kind){case void 0:return`A content quest completes once per content item, under a key Relay sets, so it ${t}`;case"once":return`once() completes the quest once per member and ${t}: use keyed(...) to complete it once per key`;case"streak":return`streak(...) keys its own completions and ${t}`;case"progress":return`progress(...) keys each contribution with its distinct(...) and ${t}: derive the key in distinct(...)`}}var Ka=rr(!1),Qa=rr(!0);export{br as CapabilityError,Ta as automatic,Na as automaticFulfillment,Ma as badge,wr as balanceAtLeast,La as budget,sa as calendar,yr as capabilityErrorCodes,pr as completed,Pa as content,Ee as cosmosDenomSchema,or as cosmosNetworkSchema,oa as count,b as customSource,$ as decision,ra as defineBadge,hr as defineCampaign,vr as defineDashboard,na as defineEngagementReward,fr as defineGroup,ma as defineLeaderboard,aa as defineLedger,ua as defineOffer,Ka as defineQuest,Qa as defineQuestType,la as defineReferral,Ia as defineTieredReward,ha as defineTracker,fa as discord,da as earned,Oa as evaluators,Ra as evidence,Er as formatUnits,$a as groupMembership,kr as inGroup,xa as instruction,Aa as invoked,$e as isContractCall,ze as isContractEvent,qe as isEvmAddress,Ce as isEvmChainId,V as isNftCollection,Re as isSolanaProgram,tr as keyed,jr as leaderboardTiesWarning,nr as limits,ja as manual,lr as maxWalletEventLogs,dr as maxWalletEventLookback,gr as maxWalletTransactionLookback,mr as maxWalletTransactions,Kr as once,ir as parseContractCall,ur as parseContractEvent,cr as parseContractFunction,sr as parseNftCollection,Sr as parseUnits,Ir as perStation,ya as pointLedgers,za as points,Or as progress,ia as questCompleted,Ea as received,ca as rolling,ba as settings,qa as spent,Da as staffHandover,Mr as streak,Ca as swapped,pa as telegram,ka as tiktok,B as trackerDataSchema,nt as trackerTriggerContextSchema,Ba as untracked,va as wallet,ga as x,wa as youtube,ar as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Bb as cr,Cb as o,Dc as et,Dd as $,Ec as p,Ed as Ie,Ga as sr,Gc as tt,Hc as s,Jd as zr,Kb as b,Od as R,Vb as oe,Zb as se,_b as lr,b as ar,ca as ir,d as V,dd as rt,ec as He,fc as d,hc as Oe,ia as or,ic as r,jc as z,kc as ce,lc as Ge,mc as g,md as mr,nd as nt,od as ur,qc as h,rc as Je,sa as ie,tc as Ye,uc as dr,va as t,vc as Xe,vd as le,wc as y}from"./EWU4OKSY.js";var Da=Symbol.for("@domino-sdk/relay.RequestError");var Za=class extends Error{name="RequestError";[Da]=!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}};function _a(e){return[...new Set(e.map(n=>n.path.length?n.path.map(String).join(".")+": "+n.message:n.message))].join("; ")}function qe(e,n,i){let c=n.safeParse(i);if(c.success)return c.data;let l=typeof i=="object"&&i!==null&&"key"in i&&typeof i.key=="string"?` "${i.key}"`:"";throw La(e+l,c.error)}var br=e=>e instanceof Error&&Array.isArray(e.issues);function La(e,n){return br(n)&&Object.defineProperty(n,"message",{value:`${e} is invalid: ${_a(n.issues)}`,configurable:!0,writable:!0}),n}function Vc(e,n){try{return n()}catch(i){if(br(i))for(let c of i.issues)c.path.unshift(e);throw i}}var pr={NotSignedIn:"not-signed-in",StaleSession:"stale-session",Unauthenticated:"unauthenticated",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",MemberBanned:"member-banned",ProfileLocked:"profile-locked",InvitationNotFound:"invitation-not-found",InvalidCode:"invalid-code",CodeExpired:"code-expired",ChallengeExpired:"challenge-expired",RateLimited:"rate-limited",TransactionNotFinal:"transaction-not-final",TransactionNotFound:"transaction-not-found",TransactionFailed:"transaction-failed",ProofMismatch:"proof-mismatch",ChallengeUsed:"challenge-used"},Ba=Symbol.for("@domino-sdk/relay.RelayError");var Ka=class extends Za{name="RelayError";[Ba]=!0;window;missing;retryAt;constructor(e,n){super(e,n),this.window=n.window,this.missing=n.missing??[],this.retryAt=n.retryAt}};function gr(e,n,i={}){return new Ka(e,{...i,kind:"client",code:n})}var at="use 1\u2013100 letters, digits, _ or - (no :, . or spaces)",a=t().min(1,at).max(100,at).regex(/^[a-zA-Z0-9_-]+$/,at),Dr=r({name:t().trim().min(1).max(120),description:t().trim().max(1e3).default(""),image:t().url().max(2048)}).strict(),Zr=Dr.extend({key:a}).strict(),Rt=Dr.extend({id:a,key:a.nullable()}).strip(),Yc=Rt.extend({archivedAt:o().int().nonnegative().nullable()}),Xc=Zr.extend({actionId:a}).strict(),el=g([Zr,r({code:t().min(1).max(2e6)}).strict()]),Qa=r({badge:Rt,awardedAt:o().int().nonnegative()}),tl=r({items:d(Qa)}),rl=r({items:d(Rt)}),nl=r({actionId:a,reason:t().trim().min(1).max(1e3)}).strict(),al=r({badge:a,member:a,awarded:b(),changed:b()}),Fa=Symbol("domino.response.tolerant-v1");function _r(e){return Object.assign(e,{[Fa]:!0})}var it=new WeakMap;function il(e){let n=i=>{let c={};for(let[l,m]of Object.entries(e)){let u=f=>(Object.defineProperty(c,l,{value:f,writable:!0,enumerable:!0,configurable:!0}),f);Object.defineProperty(c,l,{get:()=>u(i(m())),set:u,enumerable:!0,configurable:!0})}return c};return{known:n(Lr),tolerant:n(Kr)}}function k(e){let n=it.get(e);if(n)return n;let i=Object.create(Object.getPrototypeOf(e._zod.def),Object.getOwnPropertyDescriptors(e._zod.def));if(e instanceof Oe){let l;Object.defineProperty(i,"shape",{get:()=>l??=Object.fromEntries(Object.entries(e.shape).map(([m,u])=>[m,k(u)])),configurable:!0,enumerable:!0}),Object.assign(i,{catchall:e._zod.def.catchall instanceof lr||!e._zod.def.catchall?void 0:k(e._zod.def.catchall)})}else e instanceof cr?Object.assign(i,{checks:e._zod.def.checks?.filter(l=>{let m=l._zod.def;return m.check!=="less_than"||!("value"in m)||m.value===Number.MAX_SAFE_INTEGER||m.value===864e13})}):e instanceof He?Object.assign(i,{element:k(e.element),checks:[]}):e instanceof Ge?Object.assign(i,{options:e.options.map(k)}):e instanceof Ye?Object.assign(i,{items:e._zod.def.items.map(k),rest:e._zod.def.rest?k(e._zod.def.rest):null}):e instanceof Je?Object.assign(i,{left:k(e._zod.def.left),right:k(e._zod.def.right)}):e instanceof nt?Object.assign(i,{getter:()=>k(e._zod.def.getter())}):e instanceof Xe?Object.assign(i,{valueType:k(e.valueType)}):e instanceof rt?Object.assign(i,{in:k(e.in),out:k(e.out)}):"innerType"in i&&i.innerType instanceof ie&&Object.assign(i,{innerType:k(i.innerType)});let c=ar(e,i);return it.set(e,c),it.set(c,c),c}function Lr(e){return k(e)}function Br(e){if(e instanceof Oe)return e.shape;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof ie)return Br(e._zod.def.innerType)}function bt(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 ie)return bt(e._zod.def.innerType)}function U(e,n){if(e instanceof tt)return typeof n=="string"&&[...e.values].every(i=>typeof i=="string")&&!e.values.has(n);if(e instanceof et)return typeof n=="string"&&!e.options.includes(n);if(e instanceof He&&Array.isArray(n))return n.some(i=>U(e.element,i));if(e instanceof Ye&&Array.isArray(n))return n.some((i,c)=>{let l=e._zod.def.items[c]??e._zod.def.rest;return l?U(l,i):!1});if(e instanceof Je)return U(e._zod.def.left,n)||U(e._zod.def.right,n);if(e instanceof nt)return U(e._zod.def.getter(),n);if(e instanceof Xe&&n!==null&&typeof n=="object"&&!Array.isArray(n))return Object.entries(n).some(([i,c])=>U(e.keyType,i)||U(e.valueType,c));if(e instanceof Ge){let i=[...e.options];if(typeof n=="string"){let c=i.flatMap(l=>bt(l)??[]);if(c.some(l=>typeof l=="string")&&!c.includes(n))return!0}if(n!==null&&typeof n=="object"&&!Array.isArray(n)){let c=y(t(),se()).parse(n),l=["kind","status","provider","input","type","mode"];for(let m of l){if(typeof c[m]!="string")continue;let u=i.map(S=>{let C=Br(S)?.[m];return C?bt(C):void 0});if(u.some(S=>!S))continue;let f=i.filter((S,C)=>u[C]?.includes(c[m]));if(!f.length)return!0;i=f}}return i.every(c=>U(c,n))}if(e instanceof Oe&&n!==null&&typeof n=="object"&&!Array.isArray(n)){let i=y(t(),se()).parse(n);return Object.entries(e.shape).some(([c,l])=>U(l,i[c]))||Object.entries(i).some(([c,l])=>!(c in e.shape)&&!!e._zod.def.catchall&&U(e._zod.def.catchall,l))}if(e instanceof rt){if(U(e.in,n))return!0;let i=or(e.in,n);return i.success&&U(e.out,i.data)}return"innerType"in e._zod.def&&e._zod.def.innerType instanceof ie?U(e._zod.def.innerType,n):!1}function Kr(e){return _r($().transform((n,i)=>{let c=Lr(e),l=c.safeParse(n);if(l.success)return{kind:"supported",value:l.data};if(U(c,n))return{kind:"unsupported",raw:n};for(let m of l.error.issues)i.addIssue({...m});return V}))}function ol(e){return _r(d(Kr(e)).transform(n=>({items:n,unsupportedCount:n.filter(i=>i.kind==="unsupported").length})))}var w=t().min(1).max(4096);var sl=z({cursor:w.optional()});async function*cl(e){let n;do{let i=await e(n);yield*i.items,n=i.nextCursor??void 0}while(n!==void 0)}var ll=z({cursor:w.optional(),limit:R.number().int().min(1).max(100).default(50)}),Pt=p(["google","apple","x","discord"]),Va=r({provider:Pt,configured:b(),status:p(["disconnected","connected","reconnect"]),subject:t().nullable(),revision:o().int().nonnegative()}),dl={Google:"google",Apple:"apple",X:"x",Discord:"discord",Telegram:"telegram"},Qr=t(),ml=t().regex(/^[a-z][a-z0-9-]{0,63}$/,"Name a sign-in provider, such as google"),ul={Disconnected:"disconnected",Connected:"connected",Reconnect:"reconnect"},Wa=t(),zl=r({provider:Qr,configured:b()}),bl=r({provider:Qr,configured:b(),status:Wa,subject:t().nullable(),revision:o().int().nonnegative()}),pl=r({}).strict(),gl=r({channelId:t().regex(/^[0-9]{1,20}$/),messageId:t().regex(/^[0-9]{1,20}$/)}).strict(),fl=r({userId:t().regex(/^[0-9]{1,20}$/).nullable().default(null),nickname:t().nullable().default(null),displayName:t().nullable().default(null),boostingSince:t().datetime({offset:!0}).nullable().default(null),roles:d(t().regex(/^[0-9]{1,20}$/)),joinedAt:t().datetime({offset:!0}).nullable(),pending:b()}),Fr="telegram-reactions",Vr="telegram-messages",Ha="youtube-shorts",Ga="tiktok-videos",Wr="wallet-balances",Hr="wallet-program-activity",Ja="wallet-nfts",Ya="wallet-stake",Xa="wallet-program-accounts",hl=r({login:b(),miniApp:b()}),vl=Va.extend({provider:s("telegram")}),ei=t().min(1,"Pass the Mini App's Telegram.WebApp.initData").max(8192),yl=r({initData:ei,mode:p(["sign-in","connect"])}).strict(),Gr=t().regex(/^-?[1-9][0-9]{0,19}$/,"Use the chat's numeric ID, such as -1001234567890"),ti=r({id:Gr,type:t(),title:t(),username:t().nullable(),status:t(),issue:t().nullable(),canPost:b().optional(),connectedAt:o()}),kl=r({configured:b(),bot:r({username:t()}).nullable(),chats:d(ti)}),Sl=r({url:t(),expiresAt:o()}),jl=r({chat:t().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(),xl=r({operation:s("connection")}).strict(),wl=r({userId:t()}),Al=r({userId:t(),username:t().nullable(),status:le(e=>typeof e=="string"),isMember:b(),isAdmin:b(),untilDate:o().nullable()}),Ol=r({chatId:t(),chatType:t(),messageId:o(),reactionType:t(),emoji:t().nullable(),customEmojiId:t().nullable(),reactorStatus:t(),reactorIsAdmin:b()}),Il=r({chatId:t(),chatType:t(),messageId:o(),replyToMessageId:o().nullable(),threadId:o().nullable()}),I=Object.freeze({quests:1e3,questTypes:200,collections:1e3,sdkRuntime:Object.freeze({modules:200,size:2e6}),memberCompletions:100,dashboardPanels:24,dashboards:20,defer:Object.freeze({minRetryAfterMs:1e3,maxRetryAfterMs:36e5,retryAfterMs:6e4,horizonMs:864e5,maxDefers:100}),retryCooldown:Object.freeze({minMs:1e3,maxMs:6048e5}),analyticsQueryRows:100,apps:Object.freeze({secrets:50,kvStores:5,sqlStores:5,migrations:100,migrationFileBytes:9e4,migrationTotalBytes:1e6,storageRows:50,storagePreviewCharacters:2e3,storageCellCharacters:1e5,storageClearKeys:1e4,storageClearCountKeys:1e5,schedules:10,scheduleMinIntervalMs:3e5,scheduleTimeoutMs:3e4,scheduleResultBytes:16384}),stagedDeployment:Object.freeze({size:64e6,compressedSize:1e7}),capabilityCalls:8,trackerData:Object.freeze({branches:16,entries:256}),trackerPreview:Object.freeze({pages:3,posts:100,days:30}),walletsPerChain:5,walletEventLogs:1e3,walletTransactions:1e3,transactionFixtureSignatures:20}),Jr="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";function ri(e){let n=0;for(;n<e.length&&e[n]===0;)n++;let i=[];for(let l=n;l<e.length;l++){let m=e[l];for(let u=0;u<i.length;u++)m+=i[u]*256,i[u]=m%58,m=Math.floor(m/58);for(;m>0;)i.push(m%58),m=Math.floor(m/58)}let c="1".repeat(n);for(let l=i.length-1;l>=0;l--)c+=Jr[i[l]];return c}function Yr(e,n){if(e.length>Math.ceil(n*Math.log(256)/Math.log(58)))return null;let i=0;for(;i<e.length&&e[i]==="1";)i++;let c=[];for(let m=i;m<e.length;m++){let u=Jr.indexOf(e[m]);if(u<0)return null;for(let f=0;f<c.length;f++)u+=c[f]*58,c[f]=u&255,u>>=8;for(;u>0;)c.push(u&255),u>>=8}let l=new Uint8Array(i+c.length);return l.set(c.reverse(),i),l.length===n&&ri(l)===e?l:null}var Y=t().min(32).max(44).regex(/^[1-9A-HJ-NP-Za-km-z]+$/),pt=/^[1-9A-HJ-NP-Za-km-z]{32,44}$/,ge=p(["solana","eip155","cosmos"]),Xr=/^cosmos:[-_a-zA-Z0-9]{1,32}$/,Ct=le(e=>typeof e=="string"&&Xr.test(e),"Use a Cosmos network: cosmos:<chain ID>"),ql=t().regex(/^[a-zA-Z][a-zA-Z0-9/:._-]{2,127}$/,"Use a Cosmos bank denomination such as uatom or uosmo");function Rl(e){if(typeof e=="string"&&!e.startsWith("cosmos:"))throw new Error('Use a Cosmos network such as "cosmos:cosmoshub-4"');let n=typeof e=="string"?{chainId:e.slice(7)}:e;if(typeof n?.chainId!="string")throw new Error('Pass a Cosmos chain as { chainId } or a network such as "cosmos:cosmoshub-4"');let i=`cosmos:${n.chainId}`;if(!Xr.test(i))throw new Error("A Cosmos chain ID has 1 to 32 letters, digits, hyphens or underscores");if(n.chainInfo&&n.chainInfo.chainId!==n.chainId)throw new Error("The chain info describes another chain ID");return{...n,network:i}}var Ue="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",en="solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";function tn(e){return e===Ue||e===en}var rn=/^0x[0-9a-fA-F]{40}$/;function Pl(e){return rn.test(e)}var ni=t().regex(rn),ai=t().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,})$/),Cl=h("chain",[r({chain:s("solana"),address:Y}).strict(),r({chain:s("eip155"),address:ni,chainId:o().int().positive().safe().optional()}).strict(),r({chain:s("cosmos"),network:Ct,address:ai}).strict()]),$l=r({id:t().min(1).max(200),purpose:p(["link","sign-in"]),chain:ge,network:Ct.nullable(),address:t(),message:t().max(4096),expiresAt:o().int()}),Tl=r({challenge:t().min(1).max(200),signature:t().min(1).max(16384),publicKey:t().max(128).optional()}).strict();function $t(e){return/^eip155:[1-9][0-9]{0,15}$/.test(e)}var ii=/^(?:solana:(?:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp|EtWTRABZaYq6iMfeYKouRu166VU2xqa1)|eip155:[1-9][0-9]{0,15}|cosmos:[-_a-zA-Z0-9]{1,32})$/,oi=le(e=>typeof e=="string"&&$t(e),'Use an EVM chain ID such as "eip155:8453"'),El="MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr",nn=t().min(64).max(88).refine(e=>Yr(e,64)!==null,{message:"Use a Solana transaction signature: base58, 64 bytes"}),Ml=r({id:t().min(1).max(200),chain:ge,address:t(),memo:t().max(566),memoProgram:t(),expiresAt:o().int()}),Ul=r({chain:s("solana"),address:Y,signature:nn}).strict(),Nl=r({chain:ge,network:Ct.nullable(),address:t(),provedOn:oi.optional(),provedBy:t().optional(),proofTransaction:t().optional(),verifiedAt:o().int().nonnegative(),revision:o().int().positive(),signIn:b()}),Dl=r({chain:ge,address:t().min(1).max(100)}).strict();async function Zl(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 gr("Choose the Cosmos chain for this wallet",pr.InvalidInput);return{chain:"cosmos",network:e.network,address:n}}}var _l=5,gt=["solana","eip155","cosmos"],si=p(gt),Ll=d(si).max(gt.length).refine(e=>new Set(e).size===e.length,{message:"Duplicate wallet family"}).transform(e=>gt.filter(n=>e.includes(n)));function Bl(e){return e.chain}function Kl(e,n){if(e.chain==="eip155"&&e.provedOn){if(n&&n!==e.provedOn)throw new Error(`A smart-contract wallet is an account on ${e.provedOn} only`);return`${e.provedOn}:${e.address}`}if(e.chain==="cosmos"){if(!e.network||n&&n!==e.network)throw new Error("A Cosmos wallet belongs to its own network");return`${e.network}:${e.address}`}let i=n??(e.chain==="solana"?Ue:"eip155:1");if(!(e.chain==="solana"?/^solana:[1-9A-HJ-NP-Za-km-z]{32}$/.test(i):$t(i)))throw new Error(`Use a ${e.chain} network for this wallet`);return`${i}:${e.address}`}var A=t().regex(/^(0|[1-9][0-9]*)$/),Ql=k(r({chain:t(),token:t().nullable(),decimals:o().int().min(0).max(255).nullable(),total:A,wallets:d(r({address:t(),amount:A}).strict()),at:r({kind:p(["slot","block"]),number:A}).strict(),observedAt:o().int().nonnegative()}).strict()),Fl=r({amount:t(),decimals:o().int().min(0).max(255).nullable(),block:t()}),Vl=r({signature:t(),slot:t(),timestamp:o().int().nonnegative(),signer:b(),instruction:t().nullable(),amount:t().nullable(),delta:t().nullable()}),ci=/^(eip155:[1-9][0-9]{0,15})\/(erc721|erc1155):(0x[0-9a-fA-F]{40})(?:\/(0|[1-9][0-9]{0,77}))?$/,li=/^(solana:[1-9A-HJ-NP-Za-km-z]{32})\/nft:(.*)$/,di=2n**256n-1n;function mi(e){let n=li.exec(e);if(n){let[,f,S]=n;return tn(f)&&Y.safeParse(S).success?{chain:f,standard:"metaplex",mint:S}:null}let i=ci.exec(e);if(!i)return null;let[,c,l,m,u]=i;return l==="erc1155"!=(u!==void 0)||u!==void 0&&BigInt(u)>di?null:{chain:c,standard:l,contract:m,tokenId:u??null}}function an(e){return mi(e)!==null}var Wl=k(r({collection:t(),chain:t(),standard:p(["erc721","erc1155","metaplex"]),kind:t().optional(),total:A,wallets:d(r({address:t(),count:A}).strict()),at:r({kind:p(["slot","block"]),number:A}).strict(),observedAt:o().int().nonnegative()}).strict()),Hl=r({count:t(),block:t()}),on=/^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/,ui=/^bytes([1-9]|[12][0-9]|3[0-2])?$/;function zi(e){let n=on.exec(e);return n?`${n[1]}${n[2]??"256"}`:e==="address"||e==="bool"||e==="string"||ui.test(e)?e:null}function fr(e){let n=/^([a-z0-9]+)(?:\s+[A-Za-z_$][A-Za-z0-9_$]*)?$/.exec(e.trim());return n?zi(n[1]):null}function bi(e){let n=/^function\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(([^()]*)\)\s+(?:external\s+)?(view|pure)\s+returns\s*\(([^()]*)\)$/.exec(e.trim());if(!n)return null;let[,i,c,l,m]=n,u=c.trim()?c.split(",").map(fr):[],f=m.includes(",")?null:fr(m);return u.length>16||u.some(S=>S===null)||!f||!(f==="bool"||f==="address"||on.test(f))?null:{name:i,inputs:u,returns:f,mutability:l,signature:`function ${i}(${u.join(",")}) ${l} returns (${f})`}}function pi(e){let n=/^(eip155:[1-9][0-9]{0,15}):(0x[0-9a-fA-F]{40}) (function .+)$/.exec(e),i=n&&e.length<=400?bi(n[3]):null;return i?{chain:n[1],contract:n[2],function:i}:null}function gi(e){return pi(e)!==null}var sn=t().regex(/^(0|-?[1-9][0-9]*)$/),Gl=k(r({call:t(),chain:t(),contract:t(),returns:t(),total:sn.nullable(),wallets:d(r({address:t(),value:g([t(),b()])}).strict()),at:r({kind:p(["block"]),number:A}).strict(),observedAt:o().int().nonnegative()}).strict()),Jl=k(r({chain:t(),denom:t(),validator:t().nullable(),total:A,wallets:d(r({address:t(),amount:A}).strict()),validators:d(r({validator:t(),amount:A}).strict()),at:r({kind:p(["block"]),number:A}).strict(),observedAt:o().int().nonnegative()}).strict()),fi=/^(eip155:[1-9][0-9]{0,15}):(0x[0-9a-fA-F]{40})\s+(?:event\s+)?([A-Za-z_$][A-Za-z0-9_$]*)\s*\(([^()]*)\)\s*;?$/,hi=/^([a-z0-9]+(?:\[[0-9]*\])*)(\s+indexed)?\s+([A-Za-z_$][A-Za-z0-9_$]*)$/;function vi(e){let n=/^([a-z]+)([0-9]*)((?:\[[0-9]*\])*)$/.exec(e);if(!n)return null;let[,i,c,l]=n,m=c===""?256:Number(c),u=null;return c.startsWith("0")?null:(i==="uint"||i==="int"?u=m>=8&&m<=256&&m%8===0?i+m:null:i==="bytes"?u=c===""||m<=32?i+c:null:(i==="address"||i==="bool"||i==="string")&&c===""&&(u=i),u&&/^(\[([1-9][0-9]*)?\])?$/.test(l)?u+l:null)}function yi(e){let n=fi.exec(e.trim());if(!n)return null;let[,i,c,l,m]=n,u=[];for(let S of m.trim()?m.split(","):[]){let C=hi.exec(S.trim()),ae=C&&vi(C[1]);if(!C||!ae||C[3]==="indexed"||u.some(Ae=>Ae.name===C[3]))return null;u.push({name:C[3],type:ae,indexed:!!C[2]})}let f=u.filter(S=>S.indexed);return f.length>3||!f.some(S=>S.type==="address")?null:{chain:i,contract:c,name:l,inputs:u,signature:`${l}(${u.map(S=>S.type).join(",")})`}}function ki(e){return yi(e)!==null}var Yl=1e3,Xl=720*60*60*1e3,hr=g([t(),b()]),Si=g([hr,d(hr)]),ed=k(r({event:t(),chain:t(),contract:t(),since:o().int().nonnegative(),at:r({kind:p(["block"]),number:A}).strict(),finality:p(["finalized","safe"]),complete:b().optional(),logs:d(r({wallet:t(),block:A,timestamp:o().int().nonnegative(),tx:t(),logIndex:o().int().nonnegative(),args:y(t(),Si)}).strict()).max(I.walletEventLogs),observedAt:o().int().nonnegative()}).strict());function ji(e){return Y.safeParse(e).success}var Be=y(t(),$()),cn=r({program:t(),source:t(),idl:Be}).strict(),td=1e3,rd=720*60*60*1e3,nd=k(r({program:t(),chain:t(),mint:t().nullable(),since:o().int().nonnegative(),at:r({kind:p(["slot"]),number:A}).strict(),complete:b(),transactions:d(r({wallet:t(),signature:t(),slot:A,timestamp:o().int().nonnegative(),signer:b().default(!1),programs:d(t()),balanceChanges:d(r({mint:t(),delta:sn}).strict()),instructions:d(r({name:t(),args:y(t(),$()),accounts:y(t(),t())}).strict()).optional()}).strict()),observedAt:o().int().nonnegative()}).strict()),ad=r({chain:p([Ue,en]).default(Ue),program:Y,signatures:d(nn).min(1).max(I.transactionFixtureSignatures).refine(e=>new Set(e).size===e.length,{message:"List each signature once"}),wallet:Y.optional(),idl:Be.optional()}).strict(),D=g([o().finite(),t().max(64)]),xi=g([z({wallet:s(!0)}),t().max(200),z({pubkey:t().max(64)}),z({u8:D}),z({u16:D}),z({u32:D}),z({u64:D}),z({u128:D}),z({i8:D}),z({i16:D}),z({i32:D}),z({i64:D}),z({i128:D})]),wi=15,id=k(r({program:t(),chain:t(),account:t(),wallets:d(r({address:t(),pda:t(),fields:y(t(),$()).nullable()})),at:r({kind:t(),number:A}),observedAt:o().int().nonnegative()})),vr={amount:A,activating:A,deactivating:A},od=k(r({chain:t(),voteAccount:t().nullable(),epoch:o().int().nonnegative(),total:A,activating:A,deactivating:A,wallets:d(r({address:t(),...vr})),voteAccounts:d(r({voteAccount:t(),...vr})),at:r({kind:t(),number:A}),observedAt:o().int().nonnegative()})),sd=r({amount:t(),activating:t(),deactivating:t(),block:t()}),cd=r({amount:t().nullable(),pda:t(),block:t()}),ld=r({guildId:t(),channelId:t(),messageId:t(),userId:t(),content:t().nullable(),replyTo:t().nullable(),publishedAt:o()}).strict(),Tt=z({kind:s("discord-messages"),text:b().optional()}),Et=z({kind:s("discord-reactions")}),Ai=r({guildId:t(),channelId:t(),parentChannelId:t().nullable().optional(),messageId:t(),replyTo:t().nullable(),publishedAt:o()}),dd=Ai.extend({text:t().nullable()}),md=r({guildId:t(),channelId:t(),parentChannelId:t().nullable().optional(),messageId:t(),emoji:r({id:t().nullable(),name:t()}),reactorRoles:d(t()),messagePublishedAt:o()}),Oi=z({kind:s("integration"),provider:s("discord"),action:s("grant-role"),roleId:t().regex(/^[0-9]{1,20}$/)}),Ii=g([z({provider:s("discord"),resource:s("channel"),types:d(p(["text","announcement"])).min(1),postable:s(!0).optional()}),z({provider:s("discord"),resource:s("role"),assignable:b().default(!1)})]),qi=16,Ri=32768,ud=16,zd=256,yr=g([t(),o().finite(),b(),oe()]),Re=o().int().safe().nonnegative(),Pe=o().finite(),ot=()=>d(me).min(1).max(I.trackerData.branches),me=ur(()=>z({type:p(["object","array","string","number","integer","boolean","null"]).optional(),properties:y(t(),me).refine(e=>Object.keys(e).length<=I.trackerData.entries,`An object schema lists at most ${I.trackerData.entries} properties`).optional(),required:d(t()).max(I.trackerData.entries).optional(),additionalProperties:g([b(),me]).optional(),propertyNames:z({type:s("string"),enum:d(t()).max(I.trackerData.entries).optional()}).optional(),items:me.optional(),minItems:Re.optional(),maxItems:Re.optional(),minLength:Re.optional(),maxLength:Re.optional(),minimum:Pe.optional(),maximum:Pe.optional(),exclusiveMinimum:Pe.optional(),exclusiveMaximum:Pe.optional(),enum:d(yr).min(1).max(I.trackerData.entries).optional(),const:yr.optional(),anyOf:ot().optional(),oneOf:ot().optional(),allOf:ot().optional()}));function Pi(e){let n=[[e,0]];for(;n.length;){let[i,c]=n.pop();if(!(typeof i!="object"||i===null)){if(c>=qi)return"Tracker data schemas are at most 32 KB and 16 levels deep";if(!Array.isArray(i)&&Object.hasOwn(i,"__proto__"))return"Tracker data schemas cannot name a property __proto__";for(let l of Object.values(i))n.push([l,c+1])}}return new TextEncoder().encode(JSON.stringify(e)).byteLength>Ri?"Tracker data schemas are at most 32 KB and 16 levels deep":null}var ln=e=>[...e.anyOf??[],...e.oneOf??[],...e.allOf??[]],Ci=e=>e.properties!==void 0||e.items!==void 0||typeof e.additionalProperties=="object"||ln(e).length>0;function ft(e,n,i){let c=ln(e);if(i&&c.filter(Ci).length>1)return n;let l=[...Object.entries(e.properties??{}).map(([m,u])=>[u,`${n}.${m}`])];e.items&&l.push([e.items,n]),typeof e.additionalProperties=="object"&&l.push([e.additionalProperties,n]);for(let[m,u]of l){let f=ft(m,u,i);if(f)return f}for(let m of c){let u=ft(m,n,!0);if(u)return u}return null}var dn=se().superRefine((e,n)=>{let i=Pi(e);i&&n.addIssue({code:"custom",message:i,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 i=ft(e,"data",!1);i&&n.addIssue({code:"custom",message:`Tracker data schemas cannot nest a union with several object, array or union branches inside another union's branch (${i}): flatten it into one union`})}),kr={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"},mn=new Set(["additionalProperties","items","propertyNames"]),un=new Set(["anyOf","oneOf","allOf"]),$i=new Set(["type","properties","required","minItems","maxItems","minLength","maxLength","minimum","maximum","exclusiveMinimum","exclusiveMaximum","enum","const",...mn,...un]),Ti=new Set(["$schema","$id","$comment","title","description","default","examples","deprecated","readOnly","writeOnly"]);function ht(e){if(Array.isArray(e))return e.map(ht);if(typeof e!="object"||e===null)return e;let n=Object.fromEntries(Object.entries(e).map(([l,m])=>[l,ht(m)]));if(!Array.isArray(n.type))return n;let{type:i,...c}=n;return{anyOf:i.map(l=>l==="null"?{type:l}:{...c,type:l})}}function Me(e,n){if(typeof e!="object"||e===null||Array.isArray(e))return e;let i={};for(let[c,l]of Object.entries(e)){if(Object.hasOwn(kr,c))throw new Error(`Tracker data schemas cannot use ${c} (${n}): ${kr[c]}`);if(!Ti.has(c)){if(!$i.has(c))throw new Error(`Tracker data schemas cannot use the keyword ${c} (${n}): keep metadata to title, description, default and examples`);if(c==="properties"&&Object.hasOwn(l,"__proto__")||c==="required"&&l.includes("__proto__"))throw new Error(`Tracker data schemas cannot name a property __proto__ (${n})`);i[c]=c==="properties"?Object.fromEntries(Object.entries(l).map(([m,u])=>[m,Me(u,`${n}.${m}`)])):mn.has(c)?Me(l,n):un.has(c)?l.map(m=>Me(m,n)):l}}return i}function bd(e){let n;try{n=ir(e,{target:"draft-2020-12",io:"input",unrepresentable:"throw",cycles:"throw",reused:"inline",override:({zodSchema:c,path:l})=>{let m=c._zod.def,u=["data",...l].join(".");if(m.type==="pipe"||m.type==="transform")throw new Error(`Tracker data schemas cannot transform values (${u}): records are stored as sent`);if(m.checks?.some(f=>f._zod.def.check==="custom"))throw new Error(`Tracker data schemas cannot use refinements (${u}): check the value in your evaluator`)}})}catch(c){let l=c instanceof Error?c.message:String(c);throw new Error(l.startsWith("Tracker data schemas")?l:`Tracker data schemas describe JSON: ${l}. Use z.unknown() for any JSON value.`)}let i=dn.safeParse(Me(ht(n),"data"));if(!i.success)throw new Error(i.error.issues.map(c=>c.message).join("; "));return i.data}var zn=25e4,Ei=6e6,bn=class extends Error{};function Ce(e,n){if(e.steps-=n,e.steps<0)throw new bn}var pn=64,Mi=256;function vt(e,n){return e.length>n?e.slice(0,n-1)+"\u2026":e}function Ui(e){let n=[];for(let i=e;i;i=i.parent)n.push(vt(String(i.key),pn));return vt(["data",...n.reverse()].join("."),Mi)}var H=e=>e===null?"null":Array.isArray(e)?"an array":typeof e,st=10;function Ni(e){let n=e.slice(0,st).map(i=>JSON.stringify(i)).join(", ");return e.length>st?`expected one of ${n}, or ${e.length-st} more`:`expected one of ${n}`}var Sr=new WeakMap,jr=new WeakMap;function xr(e,n){let i=Sr.get(e);return i||(i=new Set(n),Sr.set(e,i)),i}function Di(e){let n=jr.get(e);return n||(n=Object.entries(e.properties??{}).filter(([,i])=>i.const!==void 0),jr.set(e,n)),n}function J(e,n,i,c){Ce(c,1);let l=m=>({at:i,reason:m});if(e.const!==void 0&&n!==e.const)return l(()=>`expected ${JSON.stringify(e.const)}`);if(e.enum&&!xr(e,e.enum).has(n)){let m=e.enum;return l(()=>Ni(m))}switch(e.type){case"null":if(n!==null)return l(()=>`expected null, got ${H(n)}`);break;case"boolean":case"string":if(typeof n!==e.type){let m=e.type;return l(()=>`expected a ${m}, got ${H(n)}`)}break;case"number":if(typeof n!="number")return l(()=>`expected a number, got ${H(n)}`);break;case"integer":if(!Number.isInteger(n))return l(()=>typeof n=="number"?"expected an integer":`expected an integer, got ${H(n)}`);break;case"array":if(!Array.isArray(n))return l(()=>`expected an array, got ${H(n)}`);break;case"object":if(typeof n!="object"||n===null||Array.isArray(n))return l(()=>`expected an object, got ${H(n)}`);break}if(typeof n=="string"){let{minLength:m,maxLength:u}=e;if(m!==void 0&&n.length<m)return l(()=>`expected at least ${m} characters`);if(u!==void 0&&n.length>u)return l(()=>`expected at most ${u} characters`)}if(typeof n=="number"){let m=[[e.minimum,u=>n>=u,"at least"],[e.exclusiveMinimum,u=>n>u,"more than"],[e.maximum,u=>n<=u,"at most"],[e.exclusiveMaximum,u=>n<u,"less than"]];for(let[u,f,S]of m)if(u!==void 0&&!f(u))return l(()=>`expected ${S} ${u}`)}if(Array.isArray(n)){let{minItems:m,maxItems:u}=e;if(m!==void 0&&n.length<m)return l(()=>`expected at least ${m} items`);if(u!==void 0&&n.length>u)return l(()=>`expected at most ${u} items`);if(e.items)for(let f=0;f<n.length;f++){let S=J(e.items,n[f],{parent:i,key:f},c);if(S)return S}}if(typeof n=="object"&&n!==null&&!Array.isArray(n)){let m=n,u=e.properties??{},f=e.required??[];Ce(c,f.length);for(let M of f)if(!Object.hasOwn(m,M))return l(()=>`missing required key "${vt(M,pn)}"`);let S=Di(e);Ce(c,S.length);for(let[M,F]of S)if(Object.hasOwn(m,M)&&m[M]!==F.const)return{at:{parent:i,key:M},reason:()=>`expected ${JSON.stringify(F.const)}`};let C=Object.keys(m);Ce(c,C.length);let ae=e.propertyNames?.enum,Ae=ae&&xr(e.propertyNames,ae);for(let M of C){if(Ae&&!Ae.has(M))return{at:{parent:i,key:M},reason:()=>"is not an allowed key"};let F=Object.hasOwn(u,M)?u[M]:e.additionalProperties;if(F===!1)return{at:{parent:i,key:M},reason:()=>"is not an allowed key"};if(F&&F!==!0){let nr=J(F,m[M],{parent:i,key:M},c);if(nr)return nr}}}for(let m of e.allOf??[]){let u=J(m,n,i,c);if(u)return u}if(e.anyOf&&!e.anyOf.some(m=>!J(m,n,i,c)))return l(()=>"matches none of the allowed shapes");if(e.oneOf){let m=0;for(let u of e.oneOf)if(!J(u,n,i,c)&&++m>1)return l(()=>"matches more than one of the allowed shapes");if(!m)return l(()=>"matches none of the allowed shapes")}return null}function Zi(e,n,i={steps:zn}){try{let c=J(e,n,null,i);return c&&{kind:"mismatch",path:Ui(c.at),reason:c.reason()}}catch(c){if(c instanceof bn)return{kind:"too-complex",path:"data",reason:"is too complex to validate against the tracker's schema"};throw c}}function _i(e,n){let i={steps:Ei};return n.map(c=>{let l={steps:Math.min(zn,i.steps)},m=l.steps,u=Zi(e,c,l);return i.steps-=m-Math.max(l.steps,0),u})}function yt(e){return e.flatMap(n=>n.anyOf||n.oneOf||n.allOf?yt([...n.anyOf??[],...n.oneOf??[],...n.allOf??[]]):[n])}var wr=e=>e.type===void 0&&e.properties===void 0&&e.const===void 0&&e.enum===void 0;function Li(e,n){let i=new Set(["string","number","boolean","null","object","array"]),c=[e];for(let m of n.split(".")){let u=[];for(let f of yt(c))if(wr(f))u.push({});else{if(f.type!=="object")continue;f.properties&&Object.hasOwn(f.properties,m)?u.push(f.properties[m]):f.additionalProperties===!0?u.push({}):f.additionalProperties&&u.push(f.additionalProperties)}if(!u.length)return null;c=u}let l=new Set;for(let m of yt(c)){if(wr(m))return i;m.type&&l.add(m.type==="integer"?"number":m.type);for(let u of[...m.const!==void 0?[m.const]:[],...m.enum??[]])l.add(u===null?"null":typeof u)}return l}function pd(e){return{content:(n,i)=>e.content(n,i),summary:(n,i)=>e.summary(n,i),records:(async(n,i)=>{let c=await e.records(n,i),l=n.source,m=l?.kind==="custom"?l.data:void 0;if(!m)return c;let u=_i(m,c.items.map(S=>S.data)),f=c.items.filter((S,C)=>!u[C]);return{...c,items:f,excluded:c.items.length-f.length}})}}function gd(e,n){let i=n===void 0?[]:Array.isArray(n)?n:[n];for(let c of i){let l=Li(e,c.path);if(!l)return`The tracker filter reads data.${c.path}, which the tracker's data schema does not declare`;if(!("equals"in c?[typeof c.equals]:["number","string"]).some(u=>l.has(u)))return`The tracker filter compares data.${c.path} with ${"equals"in c?JSON.stringify(c.equals):"a number"}, but the field holds ${[...l].join(" or ")}`}return null}var gn=t().trim().min(1).max(500),Bi=/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/;function fn(){return zr.datetime({offset:!0,pattern:Bi})}var x=o().int().safe().nonnegative().max(864e13),P=o().int().safe().nonnegative(),N=t().min(1).max(256),G=P.nullable().default(null),Ki=ce({id:N,userId:N,content:t(),createdAt:fn(),author:ce({id:N,username:t(),name:t(),verified:b().nullable().default(null)}),likeCount:G,replyCount:G,retweetCount:G,quoteCount:G,viewCount:G,bookmarkCount:G,isReply:b(),isRetweet:b(),isQuoteTweet:b()}),Qi=z({version:s(1),id:t().min(1),authorId:t().min(1),publishedAt:x,text:t(),isReply:b(),isRetweet:b(),isQuoteTweet:b(),media:d(z({type:t(),url:t()})).nullable(),mentionedAuthorIds:d(t().min(1)).nullable(),videoLengthSeconds:o().nonnegative().nullable(),references:z({replyId:t().nullable(),replyAuthorId:t().nullable(),quoteId:t().nullable(),quoteAuthorId:t().nullable(),repostId:t().nullable(),repostAuthorId:t().nullable()})}),Fi=z({id:N,observation:t().regex(/^observation_[a-f0-9]{64}$/)}),fd=Fi.extend({member:a}),ct={member:a,capturedAt:x},hn=z({contentRevision:a,observation:a}),hd=z({tracker:a,source:s("x"),evidence:hn,content:Qi,observedAt:x,removed:b(),attribution:h("kind",[z({...ct,kind:s("linked"),account:z({provider:s("x"),issuer:t().min(1),subject:N,revision:P,linkedAt:x.nullable()})}),z({...ct,kind:s("unlinked")}),z({...ct,kind:s("different-author")})])}),Vi=["wallet","x","discord","member"],vn=mr(["app:",t().regex(/^[a-z0-9][a-z0-9_-]{0,39}$/,"Name an app identity kind like app:game: lowercase letters, digits, _ or -, at most 40")]),Mt=g([p(Vi),vn]),vd=e=>e.startsWith("app:"),fe=t().min(1).max(64),yd=r({kind:fe,subject:N,revision:P,linkedAt:x.nullable()}),he=t().regex(/^[a-zA-Z][a-zA-Z0-9_]{0,39}$/,"Name roles like author or recipient: a letter, then letters, digits or underscores"),kd=["author","inReplyTo","quoted","reposted"],kt=e=>new Set(e).size===e.length,yn=t().regex(/^[a-z][a-zA-Z0-9]{0,39}$/,"Name metrics like likes or watchTime: a lowercase letter, then letters or digits"),Wi=["likes","replies","reposts","quotes","views","bookmarks"],Hi=z({metrics:d(yn).max(10).refine(kt,"List each metric once")}),kn=z({chain:t().regex(ii,'Use "solana", Solana devnet ("solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"), an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"'),token:t().min(1).max(128).nullable()}),Ut=t().regex(/^solana:(?:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp|EtWTRABZaYq6iMfeYKouRu166VU2xqa1)$/,'Use "solana" or Solana devnet ("solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1")'),Nt=z({chain:Ut,program:t().regex(pt,"Use a base58 program address"),instruction:t().regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}$/,"Use the instruction's name as the program's IDL spells it").nullable(),mint:t().regex(pt,"Use a base58 SPL mint address").nullable(),minAmount:t().regex(/^[1-9][0-9]{0,77}$/,"Use a positive whole number of base units").nullable(),anySigner:b()}).refine(e=>e.minAmount===null||e.mint!==null,"minAmount needs a mint"),Sn=z({collection:t().max(200).refine(e=>an(e),"Use an NFT collection")}),jn=z({chain:Ut,voteAccount:t().refine(e=>Yr(e,32)!==null,"Use a base58 vote account address").nullable()}),xn=z({chain:Ut,program:t().regex(pt,"Use a base58 program address"),account:t().min(1).max(128),seeds:d(xi).min(1).max(wi).refine(e=>e.some(n=>typeof n=="object"&&"wallet"in n),"Place the member's wallet in the seeds with { wallet: true }"),field:t().min(1).max(128),idl:cn.optional()}),ee=r({kind:s("x-search"),query:t().trim().min(1).max(2e3)}).strict(),wn=r({kind:s("custom"),namespace:a,identities:d(Mt).min(1).max(8).refine(kt,"List each identity kind once").optional(),accounts:d(he).min(1).max(10).refine(kt,"List each account role once").refine(e=>!e.includes("author"),"author is every record's own role; name other accounts").optional(),data:dn.optional(),content:Hi.optional(),balance:kn.optional(),activity:Nt.optional(),nfts:Sn.optional(),stake:jn.optional(),programAccount:xn.optional()}).strict().refine(e=>e.balance===void 0||e.namespace===Wr,"Only wallet.balances() samples a balance").refine(e=>e.activity===void 0||e.namespace===Hr,"Only wallet.programActivity() records program activity").refine(e=>e.nfts===void 0||e.namespace===Ja,"Only wallet.nfts() samples NFTs").refine(e=>e.stake===void 0||e.namespace===Ya,"Only wallet.stake() samples stake").refine(e=>e.programAccount===void 0||e.namespace===Xa,"Only wallet.programAccounts() samples program accounts").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"),Gi=h("kind",[ee,wn,Tt,Et]),Ji=["x-search","custom","discord-messages","discord-reactions"];function Sd(e){if(On(e))switch(e.kind){case"x-search":return["x"];case"discord-messages":case"discord-reactions":return["discord"];case"custom":return e.identities}}function jd(e){switch(e.kind){case"x-search":return{metrics:Wi};case"custom":return e.content;case"discord-messages":case"discord-reactions":return}}var Dt=r({start:x,end:x.optional()}).strict().refine(e=>e.end===void 0||e.end>e.start,"End must follow start"),W=r({key:a,title:t().trim().min(1).max(120),source:Gi,window:Dt,refreshSeconds:o().int().min(300).max(86400).default(21600),maxPages:o().int().min(1).max(1e3).default(60)}).strict(),xd=g([W,r({code:t().min(1).max(2e6)}).strict()]),An=h("kind",[r(ee.shape),r({...wn.shape,identities:d(fe).optional(),activity:r(Nt.shape).optional(),nfts:r({collection:t()}).optional(),stake:r({chain:t(),voteAccount:t().nullable()}).optional(),programAccount:r({chain:t(),program:t(),account:t(),seeds:d($()),field:t(),idl:r({program:t(),source:t(),idl:$()}).optional()}).optional()}),r(Tt.shape),r(Et.shape)]),Yi=g([An,r({kind:t().min(1).refine(e=>!Ji.some(n=>n===e),"Known source kinds must match their schema")}).catchall($())]);function On(e){return An.safeParse(e).success}var Xi=r({...W.shape,source:Yi,window:r(Dt.shape)}),eo=r({id:a,version:a,definition:Xi,publishedAt:x,actor:t().nullable()}),In=r({archivedAt:o().int().nonnegative().nullable().optional(),published:eo,paused:b(),pauseReason:t().nullable().optional(),resumesAt:x.nullable().optional(),effectiveRefreshSeconds:o().int().positive().optional(),state:p(["idle","syncing","error","complete"]),lastStartedAt:x.nullable(),lastCompletedAt:x.nullable(),nextSyncAt:x.nullable(),coverage:p(["unknown","partial","complete"]),error:t().nullable(),records:P,origin:p(["code","data"]).optional()}),qn=h("kind",[ee,Tt,Et,z({kind:s("telegram-messages")}),z({kind:s("telegram-reactions")}),z({kind:s("youtube-shorts")}),z({kind:s("tiktok-videos")}),z({kind:s("wallet-balances"),...kn.shape})]),wd=["x-search","discord-messages","discord-reactions","telegram-messages","telegram-reactions","youtube-shorts","tiktok-videos","wallet-balances"],Ar={[Vr]:"telegram-messages",[Fr]:"telegram-reactions",[Ha]:"youtube-shorts",[Ga]:"tiktok-videos"};function Ad(e){if(On(e))switch(e.kind){case"x-search":return{kind:"x-search",query:e.query};case"discord-messages":return{kind:"discord-messages",text:e.text??!1};case"discord-reactions":return{kind:"discord-reactions"};case"custom":return e.namespace===Wr?e.balance?{kind:"wallet-balances",...e.balance}:void 0:Object.hasOwn(Ar,e.namespace)?{kind:Ar[e.namespace]}:void 0}}var Rn=r({title:W.shape.title,query:ee.shape.query,window:Dt,refreshSeconds:W.shape.refreshSeconds.unwrap(),maxPages:W.shape.maxPages.unwrap()}).strict(),ve=Rn.extend({key:a,refreshSeconds:W.shape.refreshSeconds,maxPages:W.shape.maxPages,actionId:a}).strict(),Od=ve.extend({query:ee.shape.query.optional(),source:qn.optional()}).refine(e=>e.query===void 0!=(e.source===void 0),"Name the source with source, or an X search with query, not both"),to=z({kind:s("wallet-program-activity"),...Nt.shape}).refine(e=>e.minAmount===null||e.mint!==null,"minAmount needs a mint"),Id=ve.omit({query:!0}).extend({source:to}),ro=z({kind:s("wallet-nfts"),...Sn.shape}),qd=ve.omit({query:!0}).extend({source:ro}),no=z({kind:s("wallet-stake"),...jn.shape}),Rd=ve.omit({query:!0}).extend({source:no}),ao=z({kind:s("wallet-program-accounts"),...xn.shape,idl:Be.optional()}),Pd=ve.omit({query:!0}).extend({source:ao}),Cd=Rn.partial().extend({source:qn.optional(),actionId:a}).strict().refine(({actionId:e,...n})=>Object.values(n).some(i=>i!==void 0),"Change at least one field").refine(e=>e.query===void 0||e.source===void 0,"Change the query with source or query, not both"),$d=r({actionId:a,action:p(["pause","resume","refresh"]),reason:gn.optional()}).strict(),io=z({kind:Mt.optional(),id:N}),oo=r({id:N,occurredAt:x,observedAt:x,author:r({id:N,verified:b().nullable().default(null),kind:Mt.optional()}).strict().nullable().default(null),accounts:y(he,io).refine(e=>Object.keys(e).length<=10,"At most 10 accounts").optional(),data:y(t(),$()),removed:b().default(!1)}).strict().refine(e=>new TextEncoder().encode(JSON.stringify(e.data)).byteLength<=131072,"Record exceeds 128 KB"),Pn=r({kind:fe.optional(),id:t()}),so=r({id:t(),occurredAt:x,observedAt:x,author:r({id:t(),verified:b().nullable().default(null),kind:fe.optional()}).nullable().default(null),accounts:y(t(),Pn).optional(),data:y(t(),$()),removed:b().default(!1),source:t(),firstSeenAt:x,synthetic:s(!0).optional(),evidence:hn.nullable().optional()}),Td=r({actionId:a,records:d(oo).min(1).max(100)}).strict(),Ed=r({stored:P,admissions:r({admitted:P,skipped:P,filtered:P.optional()}).optional()}),Or={quest:a,tracker:a,record:N,observedAt:x,release:a,account:t().nullable(),createdAt:x,updatedAt:x,actor:t().nullable()},Md=["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","member-banned","already-completed","not-enrolled","before-enrollment","historical","prerequisites-incomplete"],co=t().optional(),Cn=h("state",[r({...Or,state:s("admitted"),code:oe(),reason:oe(),member:a,attempt:a}),r({...Or,state:s("skipped"),code:t().min(1),reason:t(),window:p(["tracker","quest"]).optional(),enrollment:co,member:a.nullable(),attempt:a.nullable()})]),$n={quest:a.optional(),record:N.optional(),member:a.optional(),state:p(["admitted","skipped"]).optional(),code:t().min(1).max(100).optional(),limit:R.number().int().min(1).max(100).default(25)},Ud=z({...$n,cursor:w.optional()}),Nd=r({items:d(Cn).max(100),nextCursor:w.nullable()}),Dd=z({...$n,before:t().max(512).optional()}),Zd=z({items:d(Cn).max(100),next:t().nullable()}),_d=z({actionId:a,quest:a,record:N,observedAt:x}),lt=g([b(),p(["true","false"]).transform(e=>e==="true")]),Ld=r({author:N.optional(),member:a.optional(),verified:lt.optional(),since:R.number().int().safe().nonnegative().optional(),until:R.number().int().safe().nonnegative().optional(),removed:lt.default(!1),minLikes:R.number().int().safe().nonnegative().optional(),minViews:R.number().int().safe().nonnegative().optional(),limit:R.number().int().min(1).max(100).default(25),cursor:t().max(2048).optional(),includeEvidence:lt.optional()}).strict().refine(e=>e.since===void 0||e.until===void 0||e.until>e.since,"Until must follow since"),Bd=r({tracker:a,items:d(so),nextCursor:t().nullable(),total:P,status:In}),Kd=r({records:P,authors:P,metrics:r({likes:P,replies:P,reposts:P,quotes:P,views:P,bookmarks:P}),missingMetrics:P,status:In}),Qd={pages:3,posts:100,days:30},Fd=r({query:ee.shape.query,since:x}).strict(),Vd=r({query:t(),since:x,fetchedAt:x,pages:P,posts:d(Ki).max(I.trackerPreview.posts),more:b()}),Wd=z({kind:p(["accept","reject","review","defer","progress","superseded"]),reason:t().nullable()}),lo=z({quest:a,member:a.optional(),content:t().min(1).max(256).optional(),cursor:w.optional()}),Tn=z({quest:a,content:t(),member:a,release:a,attempt:a,revision:a,observation:a,current:b(),state:p(["pending","qualified","unqualified","needs-review","failed","superseded","stale","blocked","unavailable"]),reason:t().nullable(),reward:z({attempt:a.nullable(),completion:a.nullable(),state:p(["unresolved","awarded","excluded"])})}),Hd=z({items:d(Tn),nextCursor:w.nullable()}),Ke=yn,K=y(Ke,o().int().safe().nonnegative()),mo=z({metrics:d(Ke).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),maxAgeMs:o().int().positive().max(864e5).default(36e5)}),dt=864e5,uo=r({kind:s("count"),count:o().int().min(1).max(1e4)}).strict(),zo=h("kind",[r({kind:s("lifetime")}).strict(),r({kind:s("calendar"),period:p(["day","week","month"]),latenessMs:o().int().min(0).max(90*dt).default(7*dt)}).strict(),r({kind:s("rolling"),durationMs:o().int().min(1).max(365*dt)}).strict()]),bo=r({kind:s("progress"),goal:uo,window:zo,repeat:p(["once","repeat"]).default("once")}).strict(),mt=r({id:a,ordinal:o().int().positive(),achievedAt:o().int(),window:t()}),En=h("status",[mt.extend({status:s("revoked"),completion:a,revokedAt:o().int()}),mt.extend({status:s("awarded"),completion:a}),mt.extend({status:s("budget-exhausted"),budget:a})]),po=r({goal:o().int().positive(),current:o().int().nonnegative(),window:r({key:t(),start:o().int().nullable(),end:o().int().nullable()}),repeat:p(["once","repeat"]),settled:o().int().nonnegative(),latest:En.nullable()}),go=r({id:a,distinct:t(),attempt:a,occurredAt:o().int(),recordedAt:o().int(),window:t(),status:p(["counted","late","future","excluded"]),achievement:En.nullable(),reason:t().nullable()}),Gd=r({items:d(go),nextCursor:t().nullable()}),Jd=r({actionId:sr(),excluded:b(),reason:t().trim().min(1).max(2e3)}).strict(),Yd=r({cursor:t().max(2e3).optional(),limit:R.number().int().min(1).max(100).optional()}).strict(),Xd=r({excluded:b()}),Ir=o().int().safe(),St=/^(?:[+-]|(?:Etc\/)?GMT[+-]\d|(?:EST|MST|HST)$)/i;function fo(e){let n;try{n=new Intl.DateTimeFormat("en",{timeZone:e}).resolvedOptions().timeZone}catch{return null}return n==="UTC"?"UTC":St.test(e)||St.test(n)?null:n}var Mn=t().min(1).max(100).transform((e,n)=>{let i=fo(e);return i===null?(n.addIssue({code:"custom",message:St.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):i}),ue=t().min(1).max(100),Un=e=>`${e} no longer take a timeZone: they follow the project calendar. Set calendar.timeZone in relay.json or in Console settings.`,jt=e=>typeof e=="object"&&e!==null;function ho(e,n){return jt(e)&&e.kind==="streak"&&"timeZone"in e&&n.addIssue({code:"custom",path:["timeZone"],message:Un("Streaks")}),e}function vo(e,n){let i=jt(e)?e.window:void 0;return jt(i)&&i.kind==="calendar"&&"timeZone"in i&&n.addIssue({code:"custom",path:["window","timeZone"],message:Un("Calendar leaderboard windows")}),e}var te=p(["lifetime","day","week","month"]),em=r({timeZone:ue,today:t(),nextBoundary:Ir,pending:r({timeZone:ue,effectiveAt:Ir}).nullable(),declared:ue.nullable(),unsupported:t().nullable().default(null)}),tm=r({actionId:a,timeZone:Mn,reason:t().trim().min(1).max(500)}).strict(),rm=r({timeZone:Mn}).strict(),yo=r({kind:s("streak"),days:o().int().min(1).max(3650)}),ko=r({goal:o().int().positive(),current:o().int().nonnegative(),best:o().int().nonnegative(),today:t(),todayQualified:b(),timeZone:ue,nextBoundary:o().int(),pendingTimeZone:r({timeZone:ue,effectiveAt:o().int()}).nullable(),days:d(r({day:o().int(),date:t(),timeZone:t(),occurredAt:o().int()})),milestone:h("status",[r({status:s("pending")}),r({status:s("awarded"),completion:t(),achievedAt:o().int()}),r({status:s("budget-exhausted"),budget:t(),achievedAt:o().int()})])}),L=o().int().safe().nonnegative().max(864e13),xt=o().int().safe().nonnegative(),So=p(["new-record","new-observation","data-changed"]);function nm(e,n){return e==="custom"&&n!==Vr&&n!==Fr&&n!==Hr?"new-observation":"new-record"}var $e=g([o().finite(),z({setting:t().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/)})]),qr=t().max(200).regex(/^[^.\s]+(\.[^.\s]+)*$/,"Use dot-separated keys, such as metrics.likes"),Rr=g([z({path:qr,equals:g([t().max(1e3),o().finite(),b()])}),z({path:qr,gt:$e.optional(),gte:$e.optional(),lt:$e.optional(),lte:$e.optional()}).refine(e=>[e.gt,e.gte,e.lt,e.lte].some(n=>n!==void 0),"Compare with equals, gt, gte, lt or lte")]),jo=g([Rr,d(Rr).min(1).max(10)]);function xo(e){return e===void 0?[]:Array.isArray(e)?e:[e]}function am(e){return xo(e).flatMap(n=>"equals"in n?[]:[n.gt,n.gte,n.lt,n.lte].flatMap(i=>typeof i=="object"?[i.setting]:[]))}var wo=p(["none","required"]),Ao=p(["activation","window","enrollment"]),Oo=p(["staff","claim","automatic"]),Io=z({tracker:a,source:t().min(1).max(100),on:So,where:jo.optional(),beneficiary:he,enrollment:wo.optional(),since:Ao.optional(),historical:Oo.optional(),content:s(!0).optional()}).refine(e=>e.since!=="enrollment"||e.enrollment==="required",'since: "enrollment" needs enrollment: "required"');function im(e){return e.on}function om(e){return{enrollment:e.enrollment??"none",since:e.since??"activation",historical:e.historical??(e.content?"claim":"staff")}}function sm(e){return e.beneficiary}var Pr={issuer:t().min(1),subject:t().min(1).max(256),revision:xt,linkedAt:L.nullable()},qo=r({member:a,capturedAt:L,account:g([r({provider:s("wallet"),id:t().min(5).max(256),revision:xt,linkedAt:L.nullable()}),r({provider:s("x"),...Pr}),r({provider:s("discord"),...Pr}),r({provider:s("member"),id:a}),r({provider:vn,subject:t().min(1).max(256),revision:xt,linkedAt:L.nullable()}),r({provider:t().min(1)})])}),Ro=r({id:t().min(1).max(256),source:t(),occurredAt:L,observedAt:L,firstSeenAt:L,author:r({id:t().min(1).max(256),verified:b().nullable(),kind:fe.optional()}).nullable(),accounts:y(he,Pn).optional(),data:y(t(),$()),removed:b()}),Po=r({revision:a,observation:a,body:y(t(),$())}),cm=r({tracker:a,key:a,beneficiary:he,record:Ro,content:Po.optional(),attribution:qo,enrolledAt:L.optional()}),Cr=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"]),$r=64,Co=/^[a-z0-9-]+$/;function $o(e){return typeof e!="string"||e.length===0||e.length>$r||!Co.test(e)?`Invalid reject code ${JSON.stringify(e)}: use lowercase letters, digits and hyphens, at most ${$r} characters, such as "wrong-answers"`:Cr.includes(e)?`Invalid reject code ${JSON.stringify(e)}: Relay writes it itself. A reject code cannot be ${Cr.join(", ")}`:null}var To=t().superRefine((e,n)=>{let i=$o(e);i&&n.addIssue({code:"custom",message:i})}),lm={quests:1e3,questTypes:200,collections:1e3},dm={modules:200,size:2e6},Eo=t().regex(/^[0-9a-f]{64}$/),Mo=t().max(200).regex(/^[a-z0-9_][a-z0-9_.-]*(\/[a-z0-9_][a-z0-9_.-]*)*\.js$/i).refine(e=>!e.split("/").some(n=>n==="."||n===".."),"Runtime module paths cannot contain . or .. segments"),Zt=r({digest:Eo,sdkVersion:t().min(1).max(64)}).strict(),Uo=y(Mo,t().min(1)).refine(e=>{let n=Object.values(e);return n.length>0&&n.length<=I.sdkRuntime.modules&&n.reduce((i,c)=>i+c.length,0)<=I.sdkRuntime.size},`A runtime has 1 to ${I.sdkRuntime.modules} modules and at most ${I.sdkRuntime.size} characters of source`),mm=Zt.extend({zodVersion:t().min(1).max(64),modules:Uo}).strict();async function um(e){let n=JSON.stringify(Object.entries(e).sort(([c],[l])=>c<l?-1:c>l?1:0)),i=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n));return[...new Uint8Array(i)].map(c=>c.toString(16).padStart(2,"0")).join("")}var Tr=t().regex(/^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,199}$/),_t=h("kind",[yo,bo,r({kind:s("once")}).strict(),r({kind:s("keyed"),across:s("members").optional()}).strict()]),wt=t().min(1).max(500),Nn=r({id:Tr,scope:p(["member","project"]),period:te,limit:o().int().positive().max(Number.MAX_SAFE_INTEGER),cost:g([o().int().positive().max(Number.MAX_SAFE_INTEGER),r({balance:Tr}).strict()])}).strict(),No=Nn.extend({scope:s("author")}).strict(),zm=r({quest:t().min(1).max(200),key:wt,completedAt:o().int().nonnegative().safe().nullable()}),bm=100,Do=p(["discord","x"]),Zo=t().regex(/^[a-z][a-z0-9-]{0,63}$/,"Name an integration module provider, such as discord"),_o=p(["discord"]),Dn=r({id:t().regex(/^[0-9]{1,20}$/),name:t().min(1),icon:t().nullable()}),pm=r({provider:_o,configured:b(),status:p(["disconnected","ready","attention"]),revision:o().int().nonnegative(),server:Dn.nullable(),issue:t().nullable(),connectedAt:o().default(0)}),gm=r({servers:d(Dn)}),Zn=["beneficiary","author","quest","points","rewards"],Lo=new Set(Zn);function Bo(e){let n=[],i="",c=0;for(;c<e.length;){let l=e[c];if(l==="{"&&e[c+1]==="{"){i+="{",c+=2;continue}if(l==="}"&&e[c+1]==="}"){i+="}",c+=2;continue}if(l==="}")return{error:"Write }} for a literal } in an announcement"};if(l!=="{"){i+=l,c+=1;continue}let m=e.indexOf("}",c),u=m===-1?"":e.slice(c+1,m);if(!Lo.has(u))return{error:`Unknown announcement placeholder {${u}}: use ${Zn.map(f=>`{${f}}`).join(", ")}, or {{ for a literal {`};i&&(n.push({kind:"text",text:i}),i=""),n.push({kind:"placeholder",name:u}),c=m+1}return i&&n.push({kind:"text",text:i}),{segments:n}}var Ko=t().trim().min(1).max(1e3).superRefine((e,n)=>{let i=Bo(e);"error"in i&&n.addIssue({code:"custom",message:i.error})}),_n={action:s("post-message"),text:Ko,replyToTriggeringMessage:b().optional()},Qo=z({provider:s("telegram"),chat:Gr,..._n}),Fo=z({provider:s("discord"),channel:t().regex(/^[0-9]{1,20}$/),..._n}),Vo=h("provider",[Qo,Fo]),Wo=r({required:b().default(!0),minLength:o().int().min(0).max(1e4).default(1),maxLength:o().int().min(1).max(1e4).default(1e4)}).strict().refine(e=>e.minLength<=e.maxLength,"minLength must not exceed maxLength"),Ho=t().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"),Go=r({required:b().default(!0),allowedHosts:d(Ho).min(1).max(100).optional()}).strict(),Ln=r({kind:s("text"),value:t().max(1e4)}).strict(),Bn=r({kind:s("url"),value:t().max(2048)}).strict(),fm=h("kind",[Ln,Bn]);function hm(e,n){let i=e.kind==="text"?1e4:2048;if(e.value.length>i)return`Enter no more than ${i} characters`;if(e.kind!==n.input)return`This quest requires ${n.input} input`;if(!e.value.trim())return n.constraints.required?"This field is required":null;if(n.input==="text")return e.value.length<n.constraints.minLength?`Enter at least ${n.constraints.minLength} characters`:e.value.length>n.constraints.maxLength?`Enter no more than ${n.constraints.maxLength} characters`:null;let c=Kn(e.value);return c?n.constraints.allowedHosts&&!n.constraints.allowedHosts.some(l=>l.toLowerCase()===c.hostname.toLowerCase())?`Use a URL hosted on: ${n.constraints.allowedHosts.join(", ")}`:null:"Enter a valid HTTP or HTTPS URL without credentials"}function Kn(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 vm(e){let n=Kn(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 Lt=t().regex(/^[a-zA-Z0-9_-]+$/).max(100),Jo=r({id:Lt,label:t().trim().min(1).max(500)}).strict(),Qn=r({id:Lt,prompt:t().trim().min(1).max(1e3),choices:d(Jo).min(2).max(8).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Choice IDs must be unique")}).strict(),Yo=d(Qn).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Question IDs must be unique"),Bt=d(Qn.extend({correct:Lt}).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"),B=o().int().safe().nonnegative(),Fn=e=>e.from===void 0||e.until===void 0||e.until>e.from;var Xo=64;var es=t().min(1).max(Xo).regex(/^[a-zA-Z0-9_-]+$/,"use letters, digits, _ or -");function ym(e){return e.kind==="manual"&&e.actor!=="staff"&&e.input==="none"}var ts=r({key:es,label:t().trim().min(1).max(120),opensAt:B.optional(),closesAt:B.optional()}).strict().refine(e=>Fn({from:e.opensAt,until:e.closesAt}),{message:"A station must close after it opens",path:["closesAt"]}),rs=d(ts).min(1).max(200).refine(e=>new Set(e.map(n=>n.key)).size===e.length,"Give each station its own key");var ns=r({kind:t(),chain:t(),signature:t(),wallet:t(),reference:t().nullable()}),Vn=g([z({provider:s("domino"),resource:s("point-ledger")}),Ii]),km=r({source:Vn,query:t().max(100).optional(),cursor:t().regex(/^\d{1,6}$/).optional(),ids:d(t().min(1).max(100)).max(50).optional()}).strict(),Sm=r({revision:o().int(),options:d(r({id:t(),label:t(),description:t().optional(),group:t().optional(),disabledReason:t().optional()})),nextCursor:t().nullable().default(null),cursor:t().nullable()}),Wn=fn().transform(e=>new Date(e).toISOString()),At=g([s(""),t().regex(/^\S{1,200}$/)]),_={label:t().min(1),description:t().optional()},as=h("kind",[r({..._,kind:s("point-ledger"),default:a.or(s(""))}).strict(),r({..._,kind:s("datetime"),default:Wn}).strict(),r({..._,kind:s("resource"),default:At,source:Vn}).strict(),r({..._,kind:s("quiz"),default:Bt}).strict(),r({..._,kind:s("text"),default:t(),minLength:o().int().nonnegative(),maxLength:o().int().positive(),multiline:b(),picker:t().optional(),decimals:o().int().min(0).max(255).optional(),secret:s(!0).optional()}).strict(),r({..._,kind:s("integer"),default:o().int(),min:o().int(),max:o().int()}).strict(),r({..._,kind:s("boolean"),default:b()}).strict(),r({..._,kind:s("choice"),default:t(),options:d(t().min(1)).min(1)}).strict()]),is=y(t().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/),as),X=y(t(),g([t(),o().finite(),b(),Bt]));function os(e){return e.length<=100&&/^(0|[1-9][0-9]*)$/.test(e)}function ss(e){return e==="solana"||tn(e)||$t(e)}function jm(e){return e?.kind==="integer"||e?.kind==="text"&&e.picker==="amount"}function cs(e){let n=e.secret?t().max(e.maxLength).refine(i=>i===""||i.length>=e.minLength,`Use at least ${e.minLength} characters`):t().min(e.minLength).max(e.maxLength);switch(e.picker){case"amount":return n.refine(os,"Use a whole number of base units, such as 1000000");case"chain":return n.refine(ss,'Use "solana", a Solana cluster ID such as "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1" (devnet), or an EVM chain ID such as "eip155:8453"');case"nft":return n.refine(an,'Use an NFT collection such as "eip155:1/erc721:0x\u2026", "eip155:8453/erc1155:0x\u2026/1" for one ERC-1155 token ID, or "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/nft:<collection>" (mainnet; devnet is "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/nft:<collection>")');case"contract-call":return n.refine(gi,`Use a contract call: the contract's CAIP-10 ID and a view or pure function returning one uint, int, bool or address, such as "eip155:8453:0x\u2026 function stakedOf(address) view returns (uint256)"`);case"contract-event":return n.refine(ki,'Use a contract event such as "eip155:8453:0x\u2026 Transfer(address indexed from, address indexed to, uint256 value)": name every argument, and index at least one address argument');case"solana-program":return n.refine(ji,'Use a Solana program address in base58, such as "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"');default:return n}}function xm(e,n){let i={};for(let[c,l]of Object.entries(e))switch(l.kind){case"point-ledger":i[c]=At.default(l.default);break;case"datetime":i[c]=Wn.default(l.default);break;case"resource":i[c]=At.default(l.default);break;case"quiz":i[c]=Bt.default(l.default);break;case"text":i[c]=cs(l).default(l.default);break;case"integer":i[c]=o().int().min(l.min).max(l.max).default(l.default);break;case"boolean":i[c]=b().default(l.default);break;case"choice":i[c]=p(l.options).default(l.default);break}return X.parse(r(i).strict().parse(n))}function wm(e,n){return Object.entries(e).filter(([i,c])=>(c.kind==="resource"||c.kind==="point-ledger")&&!n[i]).map(([i])=>i)}function Am(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 Om(e){if("id"in e)throw new Error("Authoring definitions use key, not id");return a.parse(e.key)}var Kt=r({from:B,until:B}).strict().refine(Fn,{message:"Window end must follow its start",path:["until"]}),Ne=r({key:a,title:t().trim().min(1).max(120),window:Kt.optional(),enrollment:p(["none","required"]).default("none")}).strict(),ls=Ne.omit({key:!0,title:!0}).extend({...re,title:t().trim().min(1).max(120).optional()}).strict().transform(e=>{let n=e;return Ne.parse({...n,title:e.title??n.key})});function Im(e){return ls.parse(e)}var ds=Ne.extend({enrolledAt:B.nullable(),withdrawnAt:B.nullable().default(null),withdrawalReason:t().nullable().default(null)}),Hn=r({actionId:a,campaign:a}).strict(),qm=Hn.extend({member:a}),ms=Hn,Rm=ms.extend({member:a,reason:t().trim().min(1).max(500)}),Pm=r({campaign:a,member:a,enrolledAt:B,withdrawnAt:B.nullable().default(null),withdrawalReason:t().nullable().default(null)});function ye(e,n){return n}var Cm=a.or(s("")).brand();function us(e){return typeof e=="string"?e:e.key}var Er=r({key:a,title:t().trim().min(1).max(120)}).strict(),zs=Er.omit({key:!0,title:!0}).extend({...re,title:t().trim().min(1).max(120).optional()}).strict().transform(e=>Er.parse({...e,title:e.title??e.key}));function $m(e){return ye("group",zs.parse(e))}function bs(e){return a.parse(e.key)}var Gn=t().trim().min(1).max(120),Jn=t().trim().min(1).max(1e3),Ot=o().int().nonnegative().max(864e13),Tm=r({actionId:a,key:a,title:Gn}).strict(),Em=r({title:Gn}).strict(),Mm=r({actionId:a,member:a,reason:Jn}).strict(),Um=r({actionId:a,reason:Jn}).strict(),Nm=r({reason:gn.optional()}).strict(),Dm=z({cursor:w.optional(),limit:o().int().min(1).max(100).optional()}),ps=r({key:a,title:t(),members:o().int().nonnegative(),createdAt:Ot,archivedAt:Ot.nullable()}),Zm=r({items:d(ps),nextCursor:w.nullable()}),gs=r({member:a,addedAt:Ot.nullable()}),_m=r({items:d(gs),nextCursor:w.nullable()}),Yn=o().int().safe().nonnegative(),Xn=Yn.positive(),ea=h("scope",[r({kind:s("completion"),quest:a,scope:s("ever")}).strict(),r({kind:s("completion"),quest:a,scope:s("period"),period:te.exclude(["lifetime"])}).strict()]),ta=r({kind:s("balance"),balance:a,minimum:Xn}).strict(),ra=r({kind:s("group"),group:a,title:t()}).strict(),Qt=h("kind",[ea,ta,ra]),ke=g([r({kind:s("completion"),quest:a,title:t(),scope:s("ever")}),r({kind:s("completion"),quest:a,title:t(),scope:s("period"),period:te.exclude(["lifetime"]),resetsAt:o().int().safe()}),r({kind:s("balance"),balance:a,title:t(),minimum:Xn,current:Yn}),r({kind:s("group"),group:a,title:t()})]);function Lm(e,n={}){let i=e.key;return ea.parse({kind:"completion",quest:i,scope:n.scope??"ever",..."period"in n?{period:n.period}:{}})}function Bm(e,n){return ta.parse({kind:"balance",balance:us(e),minimum:n})}function Km(e){return ra.parse({kind:"group",group:bs(e),title:e.title})}var be=2147483647,Se=r({kind:s("points").default("points"),balance:a,amount:o().int().min(0).max(be)}).strict(),Ft=r({badge:a.optional(),group:a.optional(),id:a,title:t().min(1).max(120),tiers:d(r({id:a,title:t().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:r({kind:s("untracked")}).strict(),fulfillment:h("kind",[r({kind:s("staff-handover")}).strict(),r({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"),Qm=r({id:a,key:a.nullable()}),Q=r({kind:s("tier"),reward:Ft,tier:a}).strict().refine(e=>e.reward.tiers.some(n=>n.id===e.tier),"Unknown reward tier"),fs=Q.transform((e,n)=>{let i=e.reward.badge;return!i||e.reward.fulfillment.kind!=="automatic"||e.reward.tiers.length!==1||e.tier!=="awarded"?(n.addIssue({code:"custom",message:"Invalid badge reward"}),V):{...e,reward:{...e.reward,badge:i}}});function Fm(e,n){return fs.parse({kind:"tier",tier:"awarded",reward:{id:e,badge:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var hs=Q.transform((e,n)=>{let i=e.reward.group;return!i||e.reward.fulfillment.kind!=="automatic"||e.reward.tiers.length!==1||e.tier!=="awarded"?(n.addIssue({code:"custom",message:"Invalid group reward"}),V):{...e,reward:{...e.reward,group:i}}});function Vm(e,n){return hs.parse({kind:"tier",tier:"awarded",reward:{id:e,group:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var vs=Oi,It=g([Se,Q,vs]),ys=t(),ks=r({type:ys,data:y(t(),$())});function na(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 aa=g([r({kind:s("manual"),input:s("text"),constraints:Wo,actor:p(["member","staff"]).optional()}).strict(),r({kind:s("manual"),input:s("url"),constraints:Go,actor:p(["member","staff"]).optional()}).strict(),r({kind:s("manual"),input:p(["photo","quiz","none"]),actor:p(["member","staff"]).optional()}).strict(),r({kind:s("automatic"),tracker:Io.optional()}).strict()]),Ss=g(aa.options.map(e=>e.strip())),ia=r({kind:p(["pass","fail","unclear"]),reason:t().min(1).max(2e3)}).strict(),Wm=r({text:t().min(1).max(16e3).refine(e=>e.trim().length>0,"Text must not be blank"),criteria:t().trim().min(1).max(2e3)}).strict(),Hm=ia,Gm={minRetryAfterMs:1e3,maxRetryAfterMs:36e5,retryAfterMs:6e4,horizonMs:864e5,maxDefers:100},Jm={minMs:1e3,maxMs:6048e5},Mr=o().int().min(I.retryCooldown.minMs).max(I.retryCooldown.maxMs),Vt=r({current:o().finite().nonnegative(),target:o().finite().positive(),reason:t().min(1).max(2e3)}).refine(e=>e.current<=e.target,{message:"Progress current must not exceed target"}),Ym=h("kind",[z({kind:s("defer"),reason:t().min(1).max(2e3),retryAfterMs:o().int().min(I.defer.minRetryAfterMs).max(I.defer.maxRetryAfterMs).optional(),until:o().int().safe().nonnegative().optional()}),Vt.safeExtend({kind:s("progress")}).strict(),r({kind:s("accept"),rewards:d(It).max(10),completionKey:wt.optional()}).strict(),r({kind:s("reject"),reason:t().min(1).max(2e3),code:To.optional(),requestedReview:s(!0).optional()}).strict(),r({kind:s("review"),reason:t().min(1).max(2e3),rewards:d(It).max(10).optional(),completionKey:wt.optional()}).strict()]),js=p(["workers-ai"]),xs=p(["fixture-pass","fixture-fail","fixture-unclear","fixture-error","workers-ai"]),Wt=d(It).max(10).refine(e=>new Set(e.map(na)).size===e.length,"Use one entry per balance or shared reward"),ze=t().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 /"),ws=h("kind",[r({kind:s("link"),url:ze.refine(e=>e.startsWith("https://"),"Use an HTTPS URL"),label:t().trim().min(1).max(120)}).strict()]),As=r({title:t().trim().min(1).max(120),description:t().max(4e3).optional(),action:ws.optional()}).strict(),Os=h("kind",[r({kind:s("account"),provider:Pt}).strict(),r({kind:s("wallet"),chain:ge.optional()}).strict()]),De=r({steps:d(As).max(30).optional(),image:ze.optional(),imageAlt:t().max(500).optional(),requirements:d(Os).max(10).optional()}).strict(),oa=De.extend({quiz:Yo.optional(),instructions:t().max(4e3).optional(),video:r({url:ze,poster:ze.optional(),captions:r({url:ze,language:t().min(2).max(20),label:t().min(1).max(80)}).strict().optional()}).strict().optional()}).strict(),Is=r({visible:b()}).strict(),qs=2,Rs=s(qs),sa=r({quest:a,evaluatorProtocol:Rs,title:t().min(1).max(120),presentation:oa.default({}),integrations:d(Do).max(10).default([]),integrationModules:d(Zo).max(10).optional(),fields:is,values:X,rewards:Wt,announcements:d(Vo).max(3).optional(),humanReview:b(),trigger:aa,performance:mo.optional(),requires:d(Qt).max(30).default([]),campaign:Ne.optional(),availability:Kt.optional(),completion:Ie(ho,_t),visibility:p(["visible","hidden"]).default("visible"),profile:Is.default({visible:!1}),budgets:d(Nn).max(20).default([]),authorBudgets:d(No).max(20).optional(),retryCooldownMs:Mr.optional(),completionCooldownMs:Mr.optional(),stations:rs.optional()}).strict(),Ps=r({code:t().min(1).max(1e6)}).strict(),Cs=Ps.extend({runtime:Zt.optional(),settings:X,provider:js,expectedRelease:a.nullable().optional(),settingRenames:y(t(),t()).optional()}).strict(),Xm=r({releases:d(Cs).min(1).max(I.quests)}).strict(),eu=r({quest:a,expectedRelease:a,set:X,reset:d(t()),presentation:De.nullable().optional(),solanaIdls:y(t(),Be.nullable()).optional()}).strict(),$s=sa.extend({completion:_t}),Ts=k($s.extend({rewardEntries:d(ks).optional(),key:a.optional(),code:t(),runtime:Zt.optional(),provider:xs,id:a,createdAt:o(),origin:r({typeVersion:a}).strict().optional(),lifecycle:p(["active","paused","archived"]).default("active"),configuration:r({defaults:X,overrides:X,preserved:d(t()),presentation:De.optional(),presentationDefaults:De.optional()}).strict().optional(),solanaIdls:y(t(),cn).optional(),withheldSettings:d(t()).optional()})),tu=r({code:t(),definition:sa}),Es=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],[i])=>n.localeCompare(i)))),Ms=r({kind:s("quiz"),release:a.optional(),answers:Es}).strict(),Qe=g([Ms,Ln,Bn]),ru=r({actionId:a,quest:a,member:a,evidence:a.optional(),input:Qe.optional(),release:a.optional(),faultAfterReview:b().optional()}).strict(),nu={Queued:"queued",Evaluating:"evaluating",Deferred:"deferred",Accepted:"accepted",Progressed:"progressed",Rejected:"rejected",NeedsReview:"needs-review",Failed:"failed"},Us=t(),au={Relay:"relay",Evaluator:"evaluator"},Ns=t(),Fe=r({id:a,release:a,quest:a,member:a,evidence:a.nullable(),input:Qe.optional(),status:Us,reason:t().nullable(),retries:o(),generation:o(),completion:t().nullable(),reviewRewards:Wt.nullable().default(null),evaluationRun:o().int().nonnegative().default(0),deferCount:o().int().nonnegative().default(0),deferUntil:o().int().safe().nullable().default(null),nextEvaluationAt:o().int().safe().nullable().default(null),code:t().nullable().default(null),codeSource:Ns.nullable().optional(),progress:Vt.nullable().default(null),requestedReview:b().default(!1),createdAt:o(),action:ns.nullable().optional()}),iu={Open:"open",Submitted:"submitted",Discarded:"discarded",Expired:"expired"},Ds=t(),Zs=k(r({id:a,quest:a,member:a,release:a.nullable(),input:Qe.nullable(),evidence:a.nullable(),reviewRequired:b(),status:Ds,attempt:a.nullable(),createdAt:o(),updatedAt:o(),expiresAt:o()})),ou=r({release:a.nullable().optional(),input:Qe.nullable().optional(),evidence:a.nullable().optional()}).strict(),su=k(r({submission:Zs,attempt:Fe,replayed:b()})),_s=r({id:o(),attempt:t().nullable(),kind:t(),detail:t(),actor:t().nullable().default(null),at:o()}),Ls=r({item:a,revision:o().int().nonnegative()}).strict(),pe=r({item:a,label:t().min(1).max(80)}).strict(),Bs=h("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),tiers:d(r({tier:a,variants:d(pe).min(1).max(100)}).strict()).min(1).max(100)}).strict()]),cu=r({reward:Ft,revision:o().int().nonnegative(),policy:Bs}),lu=h("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),revision:o().int().nonnegative(),variants:d(pe.extend({available:o().int().nonnegative()}))}).strict()]),du=r({reward:a,revision:o().int().nonnegative(),actionId:a,policy:h("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),tiers:d(r({tier:a,variants:d(pe.extend({item:a.optional()})).min(1).max(100)}).strict()).min(1).max(100)}).strict()])}).strict(),ca=r({completion:a,reason:t(),flaggedAt:o(),remainingTier:a.nullable()}),Te={id:a,member:a,reward:Ft,earnedTier:a,tier:a,revision:o().int().positive()},mu=h("status",[r({...Te,status:s("available")}).strict(),r({...Te,status:s("handing-over"),handover:a,startedAt:o(),allocation:pe.optional()}).strict(),r({...Te,status:s("collected"),handover:a,startedAt:o(),allocation:pe.optional(),collectedAt:o(),recovery:ca.optional()}).strict(),r({...Te,status:s("void"),voidedAt:o()}).strict()]),Ks=r({id:a,title:t(),tiers:d(r({id:a,title:t()}).loose()),inventory:r({kind:t()}).loose(),fulfillment:r({kind:t()}).loose(),key:a.nullish()}).loose(),de={id:a,member:a,reward:Ks,earnedTier:a,tier:a,revision:o().int()},Ur=r({item:a,label:t()}).loose(),la=g([h("status",[r({...de,status:s("available")}).loose(),r({...de,status:s("handing-over"),handover:a,startedAt:o(),allocation:Ur.optional()}).loose(),r({...de,status:s("collected"),handover:a,startedAt:o(),allocation:Ur.optional(),collectedAt:o(),recovery:ca.optional()}).loose(),r({...de,status:s("void"),voidedAt:o()}).loose()]),r({...de,status:t()}).loose().transform(({status:e,...n})=>({...n,status:"unsupported",reportedStatus:e}))]),uu=r({actionId:a,revision:o().int().positive(),selection:Ls.optional()}).strict(),zu=r({actionId:a,handover:a}).strict(),bu=r({actionId:a,revision:o().int().positive(),reason:t().trim().min(1).max(500)}).strict(),pu={Quest:"quest",Leaderboard:"leaderboard"},Qs=t().min(1).max(64),Fs=r({kind:Qs,id:a}),Vs=r({key:t().default("once"),id:a,quest:a,member:a,source:Fs.optional()}),Ws=h("kind",[r({kind:s("available"),input:p(["photo","quiz","none","text","url"])}).strict(),r({kind:s("completed")}).strict(),r({kind:s("locked"),missing:d(ke).min(1)}).strict(),r({kind:s("blocked"),reason:p(["budget-exhausted","connection-required","wallet-required","paused","outside-window","enrollment-required"]),window:p(["tracker","quest"]).optional(),resetsAt:o().int().safe().optional()}).strict(),r({kind:s("staff-required")}).strict(),r({kind:s("automatic")}).strict(),r({kind:s("checking"),attempt:a}).strict(),r({kind:s("needs-review"),attempt:a}).strict(),r({kind:s("retryable"),attempt:a}).strict()]),Hs=g(Ws.options.map(e=>e.strip())),Gs=r({id:a,scope:p(["member","project"]),period:p(["day","week","month","lifetime"]),remaining:o().int().safe().nonnegative(),resetsAt:o().int().safe().nullable()}),gu=k(r({member:a,quests:d(r({quest:a,key:a.optional(),release:a.optional(),title:t(),presentation:oa.default({}),connections:d(Pt).default([]),trigger:Ss,availability:Hs,completed:b(),completion:_t.default({kind:"once"}),streak:ko.nullable().optional(),counter:po.nullable().optional(),progress:Vt.nullable().default(null),completionCount:o().int().nonnegative().default(0),visibility:p(["visible","hidden"]).default("visible"),missing:d(ke),campaign:ds.nullable().default(null),window:Kt.nullable().default(null),budgets:d(Gs).default([]),retryAt:o().int().safe().optional(),nextAvailableAt:o().int().safe().optional(),attempt:Fe.nullable()})),entitlements:d(la)})),fu=k(r({releases:d(Ts),completions:d(Vs),entitlements:d(la),attempts:d(Fe),balances:d(r({member:t(),balance:t(),earned:o(),held:o(),available:o()})),events:d(_s)})),hu=r({id:a,member:a,type:p(["image/jpeg","image/png"]),size:o()}),vu=r({error:t(),code:t().optional(),window:p(["tracker","quest"]).optional(),missing:d(ke).optional(),retryAt:o().int().safe().optional()}),yu=r({actionId:a,generation:o().int().nonnegative(),decision:p(["accept","reject"]),reason:t().trim().min(1).max(2e3)}).strict(),ku=r({actionId:a,reason:t().trim().min(1).max(2e3)}).strict(),Su=r({actionId:a,reason:t().trim().min(1).max(2e3)}).strict(),ju=r({actionId:a,quest:a,decidedBefore:o().int().nonnegative(),reason:t().trim().min(1).max(2e3)}).strict(),Js=g([r({days:o().int().min(1).max(3650)}).strict(),s("keep")]),xu=r({actionId:a,evidenceRetention:Js}).strict(),wu=r({item:a,quantity:o().int().min(0).max(1e4)}).strict(),Au=r({actionId:a,member:a,item:a,balance:a,price:o().int().positive().max(1e4)}).strict(),da={limit:o().int().min(1).max(100).default(25),cursor:t().min(1).max(4096).optional()},Ou=r({...da,member:a.optional(),quest:a.optional()}).strict(),Iu=r({...da,prefix:a.optional()}).strict(),Ys=r({attempt:Fe,title:t(),checks:d(r({criteria:t(),result:ia}))}),qu=r({items:d(Ys).max(100),nextCursor:t().nullable()}),Ru=r({items:d(r({member:a})).max(100),nextCursor:t().nullable()}),Pu=r({actionId:a,name:t().trim().min(1).max(80)}).strict(),Cu=r({id:a,name:t()}),$u=z({contentAttempt:a,observation:a,observedAt:o().int().safe().nonnegative(),metrics:K,rewards:Wt}),Tu=lo.extend({content:t().min(1).max(256)}),Eu=z({current:z({state:p(["content-pending","content-unqualified","waiting","pending","qualified","unqualified","needs-review","failed","superseded"]),reason:t().nullable(),contentAttempt:a,attempt:a.nullable(),reward:Tn.shape.reward}),items:d(z({attempt:a,contentAttempt:a,observation:a,observedAt:o(),metrics:K,state:p(["pending","qualified","unqualified","needs-review","failed","superseded"]),reason:t().nullable()})),nextCursor:w.nullable()}),Ht=r({name:t().trim().min(1).max(120),description:t().trim().max(1e3).default("")}).strict(),Mu=Ht.extend({actionId:a,key:a.optional()}).strict(),Xs=Ht.extend({id:a}),Uu=Xs.extend({archivedAt:o().int().nonnegative().nullable()}),ec=Ht.extend({key:a}).strict(),Nu=g([ec,r({code:t().min(1).max(2e6)}).strict()]),tc=r({id:a,key:a.nullable(),name:t()}),Ze=o().int().safe(),rc=r({ledger:tc,balance:Ze,available:Ze}),Du=r({items:d(rc)}),Zu={Award:"award",Spend:"spend",Adjust:"adjust",Reverse:"reverse"},nc=t().min(1).max(64),ma=r({id:a,amount:Ze,kind:nc,at:Ze.nonnegative(),quest:a.nullable(),reverses:a.nullable(),imported:b().optional()}),_u=z({ledger:a,cursor:w.optional()}),Lu=r({items:d(ma),nextCursor:w.nullable()}),Z=o().int().nonnegative().safe(),ua=p(["private","participants","public"]),_e=p(["x","discord","google"]),ac=p(["x","discord"]);function za(e){return d(e).max(e.options.length).refine(n=>new Set(n).size===n.length,"List each provider once")}var ic=za(ac),oc=["x","discord","sol"],sc=za(p(oc)),cc=p(["sol"]),qt=t().min(1).max(64),ut=t().min(1).max(100),lc=h("source",[r({source:s("upload"),url:t().url(),seed:ut}),r({source:s("account"),provider:_e,url:t().url(),seed:ut}),r({source:s("generated"),seed:ut})]),ba=r({id:a,name:t(),avatar:lc}),dc=/[\p{Cc}----]/u,mc=t().max(200).transform(e=>e.normalize("NFC").replace(/\s+/g," ").trim()).pipe(t().min(1,"Enter a name").max(40,"Use at most 40 characters").refine(e=>!dc.test(e),"Use visible characters only")),Bu=r({displayName:mc.nullable().optional(),nameSource:cc.nullable().optional(),avatar:h("source",[r({source:s("account"),provider:_e}).strict(),r({source:s("generated")}).strict()]).nullable().optional(),hidden:b().optional()}).strict().refine(e=>Object.values(e).some(n=>n!==void 0),"Change at least one field").refine(e=>!(e.displayName!==void 0&&e.nameSource),{message:"Choose a name or a name source, not both",path:["nameSource"]}),uc=ba.extend({displayName:t().nullable(),avatarChoice:p(["default","upload","account","generated"]),avatarProvider:_e.nullable(),hidden:b(),locked:b(),visibility:ua,options:d(r({provider:_e,name:t().nullable(),givenName:t().nullable().default(null),imageUrl:t().url().nullable()})),nameSource:qt.nullable().optional(),nameOptions:d(r({source:qt,name:t()})).optional()}),pa=t().min(1).max(512),Ku=r({limit:R.number().int().min(1).max(100).default(20),cursor:pa.optional()}).strict(),zc=r({quest:a,key:a.optional(),title:t(),completions:Z.positive(),lastCompletedAt:Z.nullable()}),Qu=r({items:d(zc),nextCursor:pa.nullable()}),Fu=r({program:a,key:a.optional(),title:t(),invited:Z,qualified:Z,milestones:d(r({id:a,count:Z,reached:b()}))}),bc=r({visibility:ua,defaults:ic,defaultSources:d(qt).optional(),revision:Z,actor:t().nullable(),updatedAt:Z.nullable()}),Vu=bc.omit({revision:!0,actor:!0,updatedAt:!0,defaultSources:!0}).extend({defaultSources:sc.optional(),actionId:a,expectedRevision:Z,reason:t().trim().min(1).max(500)}).strict().refine(e=>!e.defaultSources||e.defaultSources.filter(n=>n!=="sol").join()===e.defaults.join(),{message:"List defaultSources' accounts in defaults, in the same order",path:["defaults"]}),Wu=r({actionId:a,resetName:b().default(!1),removeAvatar:b().default(!1),lock:b().optional(),reason:t().trim().min(1).max(1e3)}).strict().refine(e=>e.resetName||e.removeAvatar||e.lock!==void 0,"Choose an action"),Hu=uc.omit({options:!0,nameOptions:!0}).extend({member:a,lockedAt:Z.nullable(),lockedBy:t().nullable(),lockedReason:t().nullable(),updatedAt:Z}),Gu=5*1024*1024,Ju=["image/jpeg","image/png","image/webp"],j=o().int().safe(),q=j.nonnegative().max(864e13),ga=h("kind",[r({kind:s("all-time")}).strict(),r({kind:s("fixed"),start:q,end:q}).strict().refine(e=>e.end>e.start,"Window end must follow its start"),r({kind:s("rolling"),days:j.min(1).max(3660)}).strict(),r({kind:s("calendar"),period:te.exclude(["lifetime"])})]),pc={window:ga.default({kind:"all-time"}),quests:d(a).min(1).max(100).optional()},fa=h("kind",[r({kind:s("balance")}).strict(),r({kind:s("earned"),...pc}).strict(),r({kind:s("net"),window:ga.default({kind:"all-time"})}).strict()]).default({kind:"balance"}),gc=g([Se,Q]),ha=r({ranks:dr([j.positive(),j.positive()]).refine(([e,n])=>n>=e,{message:"Prize rank range must end at or after it starts"}),rewards:d(gc).min(1).max(20)}).strict(),Le=t().regex(/^(0|[1-9]\d{0,77})$/,'Use a whole number of base units, such as "1000000"'),fc=g([s("points"),r({code:t().trim().min(1).max(32),decimals:j.min(0).max(36)}).strict()]),va={amount:Le.refine(e=>e!=="0",{message:"A pool must hold a positive amount"}),unit:fc,ledger:a.optional(),minScore:j.optional()},hc=(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)>be&&n.addIssue({code:"custom",message:`A points pool holds at most ${be} points`,path:["amount"]})):e.ledger!==void 0&&n.addIssue({code:"custom",message:"Only a points pool pays into a point ledger",path:["ledger"]})},vc=r(va).strict().superRefine(hc),yc=r({at:s("window-end"),ties:p(["shared","earliest"]),prizes:d(ha).max(50),pool:vc.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[i,c]of e.prizes.entries()){let l=c.rewards.map(na);new Set(l).size!==l.length&&n.addIssue({code:"custom",message:"A prize may grant each point ledger or tiered reward only once",path:["prizes",i,"rewards"]})}for(let i=1;i<e.prizes.length;i++){let c=e.prizes[i-1];e.prizes[i].ranks[0]<=c.ranks[1]&&n.addIssue({code:"custom",message:"Prize rank ranges must be ordered and must not overlap",path:["prizes",i,"ranks"]})}}),ya=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),balance:a,score:fa,access:p(["participants","public"]).default("participants"),group:a.optional(),includeUnscored:b().optional(),ties:p(["shared","earliest"]).optional(),settle:yc.optional()}).strict(),ka=(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"]})},kc=ya.superRefine(ka),Sc=k(kc),jc=ya.omit({id:!0}).extend({...re,score:Ie(vo,fa),group:a.optional()}).strict().superRefine(ka),Yu=g([jc,r({code:t().min(1).max(2e6)}).strict()]),xc=r({archivedAt:o().int().nonnegative().nullable().optional(),version:a,definition:Sc,publishedAt:q,actor:t().nullable()}),Xu=r({limit:R.number().int().min(1).max(100).default(25),cursor:t().max(4096).optional()}).strict(),zt=r({participant:a,member:a.optional(),name:t(),score:j,rank:j.positive(),profile:ba.nullable()}),Nr=r({leaderboard:a,title:t(),version:a,calculation:p(["balance","earned","net"]),period:r({start:q.nullable(),end:q.nullable()}),calculatedAt:q,lastEntryAt:q.nullable(),total:j.nonnegative(),items:d(zt),me:zt.nullable(),nearby:d(zt),nextCursor:t().nullable()}),ez=r({leaderboard:a,key:a.optional(),title:t(),profile:a,rank:j.positive().nullable(),score:j.nullable(),total:j.nonnegative()}),tz=z({board:a,cursor:w.optional()}),rz=r({leaderboard:a,period:r({start:q.nullable(),end:q.nullable()}),items:d(ma),nextCursor:w.nullable()}),nz=r({published:xc,before:Nr.nullable(),after:Nr}),Sa={actionId:a,member:a,balance:a,reason:t().trim().min(1).max(1e3)},Ee={...Sa,effectiveAt:q.optional()},az=h("kind",[r({...Ee,kind:s("award"),referralEligible:b().optional(),amount:j.positive()}).strict(),r({...Ee,kind:s("spend"),amount:j.positive()}).strict(),r({...Ee,kind:s("adjust"),amount:j.refine(e=>e!==0)}).strict(),r({...Ee,kind:s("set"),total:j.nonnegative(),expectedTotal:j.nonnegative(),classification:p(["earned","spend"])}).strict(),r({...Sa,kind:s("reverse"),entry:a,amount:j.positive()}).strict()]),ja=r({id:a,completion:t().nullable(),member:a,balance:a,amount:j,kind:p(["award","spend","adjust","reverse"]),effectiveAt:q,receivedAt:q,quest:a.nullable(),original:a.nullable(),reason:t(),actor:t().nullable(),import:a.nullable().optional()}),iz=r({items:d(ja),nextCursor:w.nullable(),next:o().nullable()}),oz=r({entry:ja,total:j.nonnegative()}),sz=r({member:a,balance:a,total:j.nonnegative(),held:j.nonnegative()}),cz=r({actionId:a,member:a,excluded:b(),reason:t().trim().min(1).max(1e3)}).strict(),lz=r({leaderboard:a,group:a,generated:b(),boundAt:q.nullable()}),dz=r({actionId:a,group:a,reason:t().trim().min(1).max(1e3)}).strict(),mz=r({actionId:a,member:a,included:b(),reason:t().trim().min(1).max(1e3)}).strict(),wc=p(["pending","approved"]),Ac=r({id:a,leaderboard:a,version:a,title:t(),period:r({start:q,end:q}),ties:p(["shared","earliest"]),status:wc,total:j.nonnegative(),winners:j.nonnegative(),createdAt:q,approvedAt:q.nullable(),approvedBy:t().nullable(),approvalReason:t().nullable()}),Oc=r({status:t(),network:t().nullable(),signature:t().nullable(),paidAt:q.nullable()}),Ic=r({member:a,score:j,rank:j.positive(),position:j.positive(),scoredAt:q,prizes:d(j.nonnegative()),completion:a.nullable(),revokedAt:q.nullable(),share:Le.optional(),payment:Oc.optional()}),qc=r({...va,allocated:Le,unallocated:Le}),Rc=r({content:t(),member:a,observedAt:q.nullable()}),uz=Ac.extend({prizes:d(ha),excluded:d(a),unmeasured:d(Rc).optional(),pool:qc.nullable().optional(),rows:d(Ic)}),zz=r({actionId:a,reason:t().trim().min(1).max(500)}).strict();var Aa=["7d","30d","90d","all"];var Pc=["number","line","bar","table"],T=["number","line","bar","table"],xa=["number","line","table"],Cc=["number","bar","table"],je=["quest","group","tracker"],wa={"members.signUps":{definition:"Members who joined the project, by when they joined.",kind:"count",breakdowns:[],filters:["group"],charts:T,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:T,ledger:!1},"quests.attempts":{definition:"Attempts, by when they were created.",kind:"count",breakdowns:["quest"],filters:je,charts:T,ledger:!1},"quests.completions":{definition:"Quest completions never revoked, by when they completed.",kind:"count",breakdowns:["quest"],filters:je,charts:T,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:je,charts:T,ledger:!1},"quests.rejections":{definition:"Rejected attempts, by when they were decided.",kind:"count",breakdowns:["quest","source","reason"],filters:je,charts:T,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:je,charts:xa,ledger:!1,minimumDenominator:10},"points.awarded":{definition:"Points in the ledger's award entries, by effective date.",kind:"count",breakdowns:[],filters:["group"],charts:T,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:T,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:T,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:T,ledger:!0},"offers.redemptions":{definition:"Fulfilled offer redemptions, by when they were redeemed.",kind:"count",breakdowns:["offer"],filters:["offer","group"],charts:T,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:T,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:T,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:xa,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:T,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:T,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:T,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:Cc,ledger:!1}};var hz={panels:24,dashboards:20},$c={number:1,line:2,bar:2,table:4},xe=t().trim().min(1).max(120),Jt=t().trim().min(1).max(500),Tc=g([a,d(a).min(1).max(100)]),Ec=y(t().min(1).max(100),Tc),Oa={key:a,title:xe,description:Jt.optional(),metric:t().min(1).max(100),breakdown:t().min(1).max(100).optional(),filter:Ec.optional(),ledger:a.optional(),chart:p(Pc)},Mc=z({...Oa,width:o().int().min(1).max(4).optional()}),Yt=z({key:a,title:xe,description:Jt.optional(),defaultRange:p(Aa).optional(),position:o().int().min(0).max(1e3).optional(),sections:d(z({title:xe.optional(),panels:d(Mc).min(1).max(100)})).min(1).max(100)}),Ia=z({key:a,title:xe,description:Jt.optional(),defaultRange:p(Aa),position:o().int().min(0).max(1e3).optional(),sections:d(z({title:xe.optional(),panels:d(z({...Oa,width:o().int().min(1).max(4)}))}))}),vz=g([Yt,r({code:t().min(1).max(2e6)}).strict()]);function yz(e){let n=Yt.parse(e);return Ia.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(i=>({...i.title===void 0?{}:{title:i.title},panels:i.panels.map(c=>({...c,width:c.width??$c[c.chart]}))}))})}function kz(e){return e.sections.flatMap(n=>[...n.panels])}function Sz(e){let n=e.sections.flatMap(l=>[...l.panels]),i=`dashboard "${e.key}"`;if(n.length>I.dashboardPanels)return{code:"too-many-panels",message:`The ${i} has ${n.length} panels; a dashboard holds at most ${I.dashboardPanels}.`};let c=new Set;for(let l of n){let m=`Panel "${l.key}" of ${i}`;if(c.has(l.key))return{code:"duplicate-key",panel:l.key,message:`The ${i} has two panels with the key "${l.key}".`};if(c.add(l.key),!Object.hasOwn(wa,l.metric))return{code:"unknown-metric",panel:l.key,message:`${m} names the unknown metric "${l.metric}". Run domino analytics metrics for the catalog.`};let u=wa[l.metric];if(l.breakdown!==void 0&&!u.breakdowns.includes(l.breakdown))return{code:"breakdown-not-accepted",panel:l.key,message:`${m}: ${l.metric} has no "${l.breakdown}" breakdown; it takes ${u.breakdowns.join(", ")||"none"}.`};for(let f of Object.keys(l.filter??{}))if(!u.filters.includes(f))return{code:"filter-not-accepted",panel:l.key,message:`${m}: ${l.metric} takes no "${f}" filter; it takes ${u.filters.join(", ")||"none"}.`};if(!u.charts.includes(l.chart))return{code:"chart-not-accepted",panel:l.key,message:`${m}: ${l.metric} can't be drawn as "${l.chart}"; it takes ${u.charts.join(", ")}.`};if(l.chart==="number"&&l.breakdown!==void 0)return{code:"breakdown-not-accepted",panel:l.key,message:`${m}: a number panel shows one value and takes no breakdown.`};if(l.chart==="table"&&l.breakdown===void 0)return{code:"breakdown-required",panel:l.key,message:`${m}: a table panel needs a breakdown; ${l.metric} takes ${u.breakdowns.join(", ")||"none"}.`};if(u.ledger&&l.ledger===void 0)return{code:"ledger-required",panel:l.key,message:`${m}: ${l.metric} needs a point ledger; set ledger to its key.`};if(!u.ledger&&l.ledger!==void 0)return{code:"ledger-not-accepted",panel:l.key,message:`${m}: ${l.metric} reads no point ledger; remove ledger.`}}return null}var jz=k(r({key:a,title:t(),change:p(["created","updated","unchanged"]),definition:Ia})),Gt=e=>typeof e=="string"?e:e.key;function xz(e){let n=qe("Dashboard",Yt,{...e,sections:e.sections.map(i=>({...i,panels:i.panels.map(c=>({...c,...c.ledger===void 0?{}:{ledger:Gt(c.ledger)},...c.filter===void 0?{}:{filter:Object.fromEntries(Object.entries(c.filter).map(([l,m])=>[l,Array.isArray(m)?m.map(Gt):Gt(m)]))}}))}))});return ye("dashboard",n)}var wz=r({title:t(),description:t(),tags:d(t()),durationSeconds:o().int().nonnegative(),publishedAt:o().int().nonnegative()}),Az=["views","likes","comments"],Oz=r({title:t(),description:t(),durationSeconds:o().int().nonnegative(),width:o().int().nonnegative(),height:o().int().nonnegative(),createdAt:o().int().nonnegative(),shareUrl:t(),isAigc:b()}),Iz=["views","likes","comments","shares"];var Uc=["not-linked","provider-unavailable","author-error"],Nc=e=>Uc.includes(e),Rz=ce({code:t().min(1),message:t().min(1),retryable:b()}),qa=Symbol.for("@domino-sdk/relay/CapabilityError"),Pz=class Ra extends Error{code;retryable;constructor(n,i,c={}){super(i),this.name="CapabilityError",this.code=n,this.retryable=c.retryable??n==="provider-unavailable",Object.defineProperty(this,qa,{value:!0})}static[Symbol.hasInstance](n){return typeof n=="object"&&n!==null&&n[qa]===!0}static from(n){return new Ra(n.code,n.message,{retryable:Nc(n.code)&&n.retryable})}};var O=o().int().safe().nonnegative(),Ca=z({scope:p(["member","project"]),period:te,limit:O}),tr=z({key:a,qualifiedBy:a,balance:a,metrics:d(Ke).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),baseline:s("historical"),maxAgeMs:o().int().positive().max(864e5).default(36e5),budgets:d(Ca).max(8).default([]).refine(e=>new Set(e.map(n=>n.scope+":"+n.period)).size===e.length,"Give each scope and period one budget")}),Ez=z({metrics:K,baseline:K}),Mz=z({target:O,baseline:O}),$a=z({actionId:a,code:t().min(1).max(1e6)}),we=z({version:a,definition:tr,publishedAt:O}),Uz=z({rule:a,content:t().min(1).max(256),member:a.optional(),cursor:w.optional()}),Ta=z({id:a,day:t(),observation:a,qualification:a,earned:O,growth:O,paid:O,excluded:O,entry:a.nullable(),createdAt:O}),Nz=z({rule:we,account:z({member:a,earned:O,accounted:O,paid:O,excluded:O,pending:O,counters:K,baseline:K,observation:a.nullable(),nextSettlementAt:O.nullable(),reason:t().nullable()}).nullable(),items:d(Ta),nextCursor:w.nullable()}),Dz=z({code:t().min(1).max(1e6)}),Zz=$a.extend({expectedVersion:a,previewHash:a}),Ve=t().regex(/^(0|[1-9][0-9]*)$/),Dc=z({rule:a,fromVersion:a,toVersion:a,previewHash:a,definition:tr,boundary:s("available-eligible-observation"),settlement:s("deferred"),summary:z({knownAdmissions:O,accounts:O,uninitialized:O,pendingTransitions:O,earned:Ve,paid:Ve,excluded:Ve,pending:Ve})}),Zc=we.extend({previousVersion:a.nullable()}),_z=r({items:d(r({version:a,definition:r({...tr.shape,budgets:d(r(Ca.shape)).max(8).default([])}),publishedAt:O,previousVersion:a.nullable()})),nextCursor:w.nullable()}),Lz=z({items:d(Zc),next:O.nullable()}),Bz=z({rule:a,before:R.number().int().positive().safe().optional()}),Kz=z({current:we.nullable(),requested:we,items:d(z({from:a,to:a,baseline:K,observedAt:O,settlement:Ta})),nextCursor:w.nullable()}),_c=$a.omit({actionId:!0}),Xt=_c.extend({rule:we}),Qz=h("kind",[Xt.extend({kind:s("create")}),Xt.extend({kind:s("unchanged")}),Xt.extend({kind:s("change"),change:Dc})]),er=g([Se,Q]),E=o().int().safe().nonnegative(),ne=t().trim().min(1).max(1e3),rr=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),enabled:b().default(!0),qualification:h("kind",[r({kind:s("signup")}).strict(),r({kind:s("quest"),quest:a}).strict(),r({kind:s("external")}).strict()]),inviterGroup:a.optional(),rewards:r({inviter:d(er).max(10).default([]),invitee:d(er).max(10).default([])}).strict().default({inviter:[],invitee:[]}),milestones:d(r({id:a,count:E.min(1),rewards:d(er).min(1).max(10)}).strict()).max(30).default([]),bonuses:d(r({id:a,balance:a,basisPoints:E.min(1).max(1e4),quests:d(a).min(1).max(100).optional(),external:b().default(!1),durationDays:E.min(1).max(36500).optional(),maxPoints:E.min(1).optional()}).strict()).max(20).default([])}).strict().superRefine((e,n)=>{for(let i of[e.milestones,e.bonuses])new Set(i.map(c=>c.id)).size!==i.length&&n.addIssue({code:"custom",message:"Rule IDs must be unique"})}),Lc=r(rr.shape).omit({id:!0}).extend({...re,inviterGroup:a.optional()}).strict().superRefine((e,n)=>{for(let i of[e.milestones,e.bonuses])new Set(i.map(c=>c.id)).size!==i.length&&n.addIssue({code:"custom",message:"Rule keys must be unique"})}),Fz=g([Lc,r({code:t().min(1).max(2e6)}).strict()]),Vz=r({archivedAt:o().int().nonnegative().nullable().optional(),version:a,definition:rr,publishedAt:E,actor:t().nullable()}),Wz=r({actionId:a,code:a}).strict(),Hz=r({actionId:a,suspended:b(),reason:ne}).strict(),Gz=r({actionId:a,qualified:b(),reason:ne}).strict(),Jz=r({actionId:a,reason:ne}).strict(),Yz=h("kind",[r({kind:s("suspend"),actionId:a,member:a,suspended:b(),reason:ne}).strict(),r({kind:s("qualify"),actionId:a,member:a,program:a,qualified:b(),reason:ne}).strict(),r({kind:s("resolve-reward"),actionId:a,entitlement:a,reason:ne}).strict()]),Bc=r({member:a,inviter:a,acceptedAt:E,suspended:b(),import:a.nullable().optional()}),Ea=r({id:a,program:a,kind:p(["bonus","fixed","milestone"]),balance:a,earned:E,settled:E,outstanding:E}),Xz=r({code:a,attributed:E,programs:d(r({definition:rr,qualified:E,milestones:d(r({id:a,count:E,reached:b()}))})),accounts:d(Ea)}),eb=r({items:d(r({id:E,program:a,balance:a,amount:o().int().safe(),at:E,reason:t()})),nextCursor:w.nullable()}),tb=r({relationships:d(Bc),qualifications:d(r({member:a,program:a,qualified:b(),qualifiedAt:E,import:a.nullable().optional()})),accounts:d(Ea.extend({member:a,invitee:t()})),reviews:d(r({entitlement:a,member:a,program:a,reason:t()})),nextCursor:w.nullable().default(null),next:E.nullable()}),We=o().int().safe().nonnegative(),Ma=Se.extend({amount:o().int().positive().max(be)}),Kc=r({perMember:o().int().positive().max(1e4)}).strict(),Ua=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),price:Ma,reward:Q,stock:We.max(1e6),limit:Kc.default({perMember:1}),requires:d(Qt).max(30).optional(),enabled:b().default(!0)}).strict(),Na=Ua.omit({id:!0,title:!0,enabled:!0}).extend({...re,title:t().trim().min(1).max(120).optional(),enabled:s(!0).optional()}).strict().transform(({enabled:e,...n})=>({...n,title:n.title??n.reward.reward.title,enabled:!0})),rb=g([Na,r({code:t().min(1).max(2e6)}).strict()]),Qc=k(h("kind",[r({kind:s("available"),remaining:We}).strict(),r({kind:s("out-of-stock")}).strict(),r({kind:s("limit-reached")}).strict(),r({kind:s("paused")}).strict()])),nb=k(Ua.extend({revision:o().int().positive(),available:We,redeemed:We,availability:Qc,archivedAt:o().int().nonnegative().nullable().optional(),missing:d(ke).default([])})),ab=r({actionId:a}).strict(),Pa={id:a,offer:a,member:a,reservation:a,price:Ma,reward:Q,entitlement:a,revision:o().int().positive(),redeemedAt:o().int().safe().nonnegative()},Fc=k(h("status",[r({...Pa,status:s("fulfilled")}).strict(),r({...Pa,status:s("canceled"),canceledAt:o().int().safe().nonnegative(),reason:t().min(1).max(500)}).strict()])),ib=z({member:a.optional(),cursor:w.optional(),limit:R.number().int().min(1).max(100).optional()}),ob=r({items:d(Fc),nextCursor:w.nullable()}),sb=r({actionId:a,revision:o().int().positive(),enabled:b(),reason:t().trim().min(1).max(500)}).strict(),cb=r({actionId:a,revision:o().int().positive(),reason:t().trim().min(1).max(500)}).strict();function lb(e){return ye("offer",qe("Offer",Na,e))}export{qe as a,La as b,Vc as c,a as d,Dr as e,Zr as f,Rt as g,Yc as h,Xc as i,el as j,Qa as k,tl as l,rl as m,nl as n,al as o,_r as p,il as q,k as r,Kr as s,ol as t,w as u,sl as v,cl as w,ll as x,Pt as y,Va as z,dl as A,Qr as B,ml as C,ul as D,zl as E,bl as F,pl as G,gl as H,fl as I,Fr as J,Vr as K,Ha as L,Ga as M,Wr as N,Hr as O,Ja as P,Ya as Q,Xa as R,hl as S,vl as T,ei as U,yl as V,Gr as W,ti as X,kl as Y,Sl as Z,jl as _,xl as $,wl as aa,Al as ba,Ol as ca,Il as da,I as ea,Y as fa,ge as ga,Ct as ha,ql as ia,Rl as ja,Ue as ka,en as la,tn as ma,Pl as na,ni as oa,ai as pa,Cl as qa,$l as ra,Tl as sa,$t as ta,oi as ua,El as va,nn as wa,Ml as xa,Ul as ya,Nl as za,Dl as Aa,Zl as Ba,_l as Ca,gt as Da,si as Ea,Ll as Fa,Bl as Ga,Kl as Ha,Ql as Ia,Fl as Ja,Vl as Ka,mi as La,an as Ma,Wl as Na,Hl as Oa,bi as Pa,pi as Qa,gi as Ra,Gl as Sa,Jl as Ta,yi as Ua,ki as Va,Yl as Wa,Xl as Xa,ed as Ya,ji as Za,Be as _a,cn as $a,td as ab,rd as bb,nd as cb,ad as db,xi as eb,wi as fb,id as gb,od as hb,sd as ib,cd as jb,ld as kb,Tt as lb,Et as mb,Ai as nb,dd as ob,md as pb,Oi as qb,Ii as rb,ud as sb,zd as tb,dn as ub,bd as vb,Zi as wb,pd as xb,gd as yb,Ki as zb,Qi as Ab,Fi as Bb,fd as Cb,hn as Db,hd as Eb,Vi as Fb,vn as Gb,Mt as Hb,vd as Ib,fe as Jb,yd as Kb,he as Lb,kd as Mb,yn as Nb,Wi as Ob,Hi as Pb,kn as Qb,Nt as Rb,Sn as Sb,jn as Tb,xn as Ub,ee as Vb,wn as Wb,Gi as Xb,Ji as Yb,Sd as Zb,jd as _b,W as $b,xd as ac,Yi as bc,On as cc,Xi as dc,eo as ec,In as fc,qn as gc,wd as hc,Ad as ic,Rn as jc,ve as kc,Od as lc,to as mc,Id as nc,ro as oc,qd as pc,no as qc,Rd as rc,ao as sc,Pd as tc,Cd as uc,$d as vc,io as wc,oo as xc,Pn as yc,so as zc,Td as Ac,Ed as Bc,Md as Cc,co as Dc,Cn as Ec,Ud as Fc,Nd as Gc,Dd as Hc,Zd as Ic,_d as Jc,Ld as Kc,Bd as Lc,Kd as Mc,Qd as Nc,Fd as Oc,Vd as Pc,Wd as Qc,lo as Rc,Tn as Sc,Hd as Tc,Ke as Uc,K as Vc,mo as Wc,uo as Xc,zo as Yc,bo as Zc,En as _c,po as $c,go as ad,Gd as bd,Jd as cd,Yd as dd,Xd as ed,fo as fd,Mn as gd,ue as hd,ho as id,vo as jd,te as kd,em as ld,tm as md,rm as nd,yo as od,ko as pd,So as qd,nm as rd,$e as sd,Rr as td,jo as ud,xo as vd,am as wd,wo as xd,Ao as yd,Oo as zd,Io as Ad,im as Bd,om as Cd,sm as Dd,qo as Ed,Ro as Fd,Po as Gd,cm as Hd,Cr as Id,$o as Jd,lm as Kd,dm as Ld,Mo as Md,Zt as Nd,Uo as Od,mm as Pd,um as Qd,_t as Rd,wt as Sd,Nn as Td,No as Ud,zm as Vd,bm as Wd,Do as Xd,Zo as Yd,_o as Zd,Dn as _d,pm as $d,gm as ae,Zn as be,Bo as ce,Ko as de,Qo as ee,Fo as fe,Vo as ge,Wo as he,Go as ie,Ln as je,Bn as ke,fm as le,hm as me,vm as ne,Jo as oe,Qn as pe,Yo as qe,Bt as re,ym as se,rs as te,ns as ue,Vn as ve,km as we,Sm as xe,Wn as ye,At as ze,as as Ae,is as Be,X as Ce,os as De,ss as Ee,jm as Fe,cs as Ge,xm as He,wm as Ie,Am as Je,re as Ke,Om as Le,Kt as Me,Ne,Im as Oe,ds as Pe,Hn as Qe,qm as Re,ms as Se,Rm as Te,Pm as Ue,ye as Ve,Cm as We,us as Xe,Er as Ye,$m as Ze,bs as _e,Tm as $e,Em as af,Mm as bf,Um as cf,Nm as df,Dm as ef,ps as ff,Zm as gf,gs as hf,_m as if,ea as jf,ta as kf,ra as lf,Qt as mf,ke as nf,Lm as of,Bm as pf,Km as qf,Se as rf,Ft as sf,Qm as tf,Q as uf,fs as vf,Fm as wf,hs as xf,Vm as yf,vs as zf,It as Af,ks as Bf,na as Cf,aa as Df,ia as Ef,Wm as Ff,Hm as Gf,Gm as Hf,Jm as If,Mr as Jf,Vt as Kf,Ym as Lf,js as Mf,xs as Nf,Wt as Of,ze as Pf,ws as Qf,As as Rf,Os as Sf,De as Tf,oa as Uf,Is as Vf,qs as Wf,Rs as Xf,sa as Yf,Ps as Zf,Cs as _f,Xm as $f,eu as ag,$s as bg,Ts as cg,tu as dg,Es as eg,Ms as fg,Qe as gg,ru as hg,nu as ig,au as jg,Fe as kg,iu as lg,Zs as mg,ou as ng,su as og,_s as pg,Ls as qg,pe as rg,Bs as sg,cu as tg,lu as ug,du as vg,ca as wg,mu as xg,la as yg,uu as zg,zu as Ag,bu as Bg,pu as Cg,Fs as Dg,Vs as Eg,Ws as Fg,Gs as Gg,gu as Hg,fu as Ig,hu as Jg,vu as Kg,yu as Lg,ku as Mg,Su as Ng,ju as Og,Js as Pg,xu as Qg,wu as Rg,Au as Sg,Ou as Tg,Iu as Ug,Ys as Vg,qu as Wg,Ru as Xg,Pu as Yg,Cu as Zg,$u as _g,Tu as $g,Eu as ah,Ht as bh,Mu as ch,Xs as dh,Uu as eh,ec as fh,Nu as gh,tc as hh,rc as ih,Du as jh,Zu as kh,ma as lh,_u as mh,Lu as nh,ua as oh,_e as ph,ac as qh,ic as rh,oc as sh,sc as th,cc as uh,ut as vh,lc as wh,ba as xh,mc as yh,Bu as zh,uc as Ah,Ku as Bh,zc as Ch,Qu as Dh,Fu as Eh,bc as Fh,Vu as Gh,Wu as Hh,Hu as Ih,Gu as Jh,Ju as Kh,ga as Lh,gc as Mh,ha as Nh,Le as Oh,fc as Ph,vc as Qh,yc as Rh,kc as Sh,Sc as Th,jc as Uh,Yu as Vh,xc as Wh,Xu as Xh,zt as Yh,Nr as Zh,ez as _h,tz as $h,rz as ai,nz as bi,az as ci,ja as di,iz as ei,oz as fi,sz as gi,cz as hi,lz as ii,dz as ji,mz as ki,wc as li,Ac as mi,Oc as ni,Ic as oi,qc as pi,Rc as qi,uz as ri,zz as si,hz as ti,$c as ui,Mc as vi,Yt as wi,Ia as xi,vz as yi,yz as zi,kz as Ai,Sz as Bi,jz as Ci,xz as Di,wz as Ei,Az as Fi,Oz as Gi,Iz as Hi,Uc as Ii,Rz as Ji,Pz as Ki,Ca as Li,tr as Mi,Ez as Ni,Mz as Oi,$a as Pi,we as Qi,Uz as Ri,Ta as Si,Nz as Ti,Dz as Ui,Zz as Vi,Dc as Wi,_z as Xi,Lz as Yi,Bz as Zi,Kz as _i,_c as $i,Qz as aj,rr as bj,Lc as cj,Fz as dj,Vz as ej,Wz as fj,Hz as gj,Gz as hj,Jz as ij,Yz as jj,Bc as kj,Ea as lj,Xz as mj,eb as nj,tb as oj,Ma as pj,Kc as qj,Ua as rj,Na as sj,rb as tj,Qc as uj,nb as vj,ab as wj,Fc as xj,ib as yj,ob as zj,sb as Aj,cb as Bj,lb as Cj};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": 1,
|
|
3
|
-
"sdkVersion": "1.
|
|
3
|
+
"sdkVersion": "1.70.0",
|
|
4
4
|
"zodVersion": "4.6.5",
|
|
5
5
|
"entries": {
|
|
6
6
|
"@domino-sdk/relay/authoring": "authoring.js",
|
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
},
|
|
10
10
|
"modules": [
|
|
11
11
|
"authoring.js",
|
|
12
|
+
"chunks/447P2VLY.js",
|
|
12
13
|
"chunks/EWU4OKSY.js",
|
|
13
|
-
"chunks/HKAI5OQA.js",
|
|
14
14
|
"schema.js",
|
|
15
15
|
"zod.js"
|
|
16
16
|
],
|
|
17
|
-
"digest": "
|
|
17
|
+
"digest": "e488176f13fca217a64328f5e665623e6e701a7e4320278d909a98d6cb7f3cb6"
|
|
18
18
|
}
|