@domino-sdk/relay 1.59.0 → 1.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/{accounts-CVonEkdb.d.ts → accounts-DoabriBX.d.ts} +4 -1
  3. package/dist/{integrations-DrbKQSTD.d.ts → announcements-CHx3-HBw.d.ts} +48 -42
  4. package/dist/{attempt-captures-DBj-rxak.d.ts → attempt-captures-DYnJVkfg.d.ts} +1 -1
  5. package/dist/authoring.d.ts +161 -29
  6. package/dist/authoring.js +116 -36
  7. package/dist/{automatic-outcomes-FS9okvBP.d.ts → automatic-outcomes-If88LR9f.d.ts} +1 -1
  8. package/dist/avatar.d.ts +1 -1
  9. package/dist/browser.d.ts +19 -10
  10. package/dist/browser.js +12 -10
  11. package/dist/{capability-error-DDJl0LY-.d.ts → capability-error-DufwG3G0.d.ts} +21 -1
  12. package/dist/{chunk-2LKGAL63.js → chunk-24I4R732.js} +39 -2
  13. package/dist/{chunk-UEMLYPKJ.js → chunk-3Y3L2F54.js} +34 -5
  14. package/dist/{chunk-YRSU2X2P.js → chunk-5I54XBK2.js} +2 -2
  15. package/dist/{chunk-KBCTII6C.js → chunk-7A4J67ZL.js} +1 -1
  16. package/dist/{chunk-LDLOB2UZ.js → chunk-DHXDBAJF.js} +4 -4
  17. package/dist/{chunk-W42KMMH5.js → chunk-DYXDZFKA.js} +5 -2
  18. package/dist/{chunk-TZJT5CRF.js → chunk-EN3M5Z4J.js} +1 -1
  19. package/dist/{chunk-IBROKMFV.js → chunk-L77O64I4.js} +1 -1
  20. package/dist/{chunk-EQF4ID47.js → chunk-PPB7HALD.js} +12 -2
  21. package/dist/{chunk-KYUQEZZA.js → chunk-QEAS4ZGS.js} +1 -1
  22. package/dist/{chunk-6U5WWH3W.js → chunk-QNUHWK7R.js} +9 -4
  23. package/dist/{chunk-YMWRLAAP.js → chunk-RHBS5FJL.js} +8 -2
  24. package/dist/chunk-SE4PFJPT.js +247 -0
  25. package/dist/{chunk-577DG2IT.js → chunk-SKGTNTLF.js} +12 -12
  26. package/dist/{chunk-M2JQPDUX.js → chunk-VURRFVNP.js} +9 -9
  27. package/dist/{chunk-R4S6BFOH.js → chunk-XBV2CK2H.js} +1 -1
  28. package/dist/{chunk-AWWCEP7F.js → chunk-ZDJLPN4L.js} +815 -592
  29. package/dist/{client-3b9HjSzZ.d.ts → client-C51w7fMb.d.ts} +12 -7
  30. package/dist/{deployments-BydFVj4Q.d.ts → deployments-kWoHFaqj.d.ts} +786 -2
  31. package/dist/{groups-CFuTfFqG.d.ts → groups-CqcA2Ycs.d.ts} +4 -1
  32. package/dist/index.d.ts +10 -10
  33. package/dist/index.js +9 -9
  34. package/dist/{analytics-URV-mxjH.d.ts → integrations-B3y36OaB.d.ts} +55 -1
  35. package/dist/internal.d.ts +11 -11
  36. package/dist/internal.js +8 -8
  37. package/dist/{offers-DAfe1O3_.d.ts → offers-BoV4ryUc.d.ts} +3 -2
  38. package/dist/{pages-ChDVLrgR.d.ts → pages-K7-KjSXw.d.ts} +147 -2
  39. package/dist/{participant-activity-iciCEs_8.d.ts → participant-activity-DHL8QYks.d.ts} +4 -0
  40. package/dist/portal-proxy.js +3 -3
  41. package/dist/react/index.d.ts +20 -15
  42. package/dist/react/index.js +143 -14
  43. package/dist/runtime/authoring.js +1 -1
  44. package/dist/runtime/chunks/5QVFB4TU.js +1 -0
  45. package/dist/runtime/manifest.json +3 -3
  46. package/dist/runtime/schema.js +1 -1
  47. package/dist/{schema-BA0nRRlt.d.ts → schema-CZ6Rj0ZF.d.ts} +142 -2
  48. package/dist/schema.d.ts +113 -18
  49. package/dist/schema.js +37 -21
  50. package/dist/server/index.d.ts +11 -11
  51. package/dist/server/index.js +346 -41
  52. package/dist/{submission-input-DxQ6RnKo.d.ts → submission-input-C54Q8yAD.d.ts} +2 -2
  53. package/dist/{telegram-browser-o3OIxGrJ.d.ts → telegram-browser-BUceZIGZ.d.ts} +7 -4
  54. package/dist/testing.d.ts +7 -7
  55. package/dist/testing.js +8 -8
  56. package/dist/{transport-D_Eqf78J.d.ts → transport-BrX9pIGN.d.ts} +5374 -62
  57. package/dist/{wallet-B06zvDXp.d.ts → wallet-CIqFoxdm.d.ts} +8 -1
  58. package/dist/{x-C28SNifw.d.ts → x-D1PGi8Sq.d.ts} +2 -2
  59. package/package.json +1 -1
  60. package/dist/chunk-XGXDINGM.js +0 -357
  61. package/dist/runtime/chunks/BG43KQ2T.js +0 -1
@@ -9,20 +9,20 @@ import {
9
9
  readSignInMethods,
10
10
  signInOptionsFrom,
11
11
  telegramMiniAppInitData
12
- } from "../chunk-2LKGAL63.js";
13
- import "../chunk-577DG2IT.js";
12
+ } from "../chunk-24I4R732.js";
13
+ import "../chunk-SKGTNTLF.js";
14
14
  import {
15
15
  createRelayAction
16
- } from "../chunk-KYUQEZZA.js";
17
- import "../chunk-6U5WWH3W.js";
18
- import "../chunk-UEMLYPKJ.js";
19
- import "../chunk-XGXDINGM.js";
16
+ } from "../chunk-QEAS4ZGS.js";
17
+ import "../chunk-QNUHWK7R.js";
18
+ import "../chunk-3Y3L2F54.js";
19
+ import "../chunk-SE4PFJPT.js";
20
20
  import "../chunk-KDR2VAJP.js";
21
- import "../chunk-R4S6BFOH.js";
22
- import "../chunk-TZJT5CRF.js";
21
+ import "../chunk-XBV2CK2H.js";
22
+ import "../chunk-EN3M5Z4J.js";
23
23
  import {
24
24
  sessionMember
25
- } from "../chunk-EQF4ID47.js";
25
+ } from "../chunk-PPB7HALD.js";
26
26
  import {
27
27
  RelayError,
28
28
  RelayErrorCode,
@@ -30,7 +30,7 @@ import {
30
30
  clientError,
31
31
  isRelayError,
32
32
  isRequestError
33
- } from "../chunk-AWWCEP7F.js";
33
+ } from "../chunk-ZDJLPN4L.js";
34
34
 
35
35
  // src/react/context.ts
36
36
  import { createContext, useContext } from "react";
@@ -1055,6 +1055,40 @@ var TEST_STATE_CHANGED_EVENT = "domino:test-state-changed";
1055
1055
  function isVisible() {
1056
1056
  return typeof document === "undefined" || document.visibilityState !== "hidden";
1057
1057
  }
1058
+ var WALLET_SIGN_IN_KEY = "domino:wallet-sign-in";
1059
+ function readWalletSignIn() {
1060
+ try {
1061
+ const value = JSON.parse(
1062
+ window.sessionStorage.getItem(WALLET_SIGN_IN_KEY) ?? "null"
1063
+ );
1064
+ return typeof value?.session === "string" && typeof value.address === "string" && typeof value.chain === "string" ? value : null;
1065
+ } catch {
1066
+ return null;
1067
+ }
1068
+ }
1069
+ function writeWalletSignIn(value) {
1070
+ try {
1071
+ if (value) {
1072
+ window.sessionStorage.setItem(WALLET_SIGN_IN_KEY, JSON.stringify(value));
1073
+ } else {
1074
+ window.sessionStorage.removeItem(WALLET_SIGN_IN_KEY);
1075
+ }
1076
+ } catch {
1077
+ }
1078
+ }
1079
+ function reportingSigner(signer, signed) {
1080
+ return {
1081
+ chain: signer.chain,
1082
+ network: signer.network,
1083
+ name: signer.name,
1084
+ address: () => signer.address(),
1085
+ ...signer.chainId ? { chainId: () => signer.chainId() } : {},
1086
+ sign: (message, address) => {
1087
+ signed(address);
1088
+ return signer.sign(message, address);
1089
+ }
1090
+ };
1091
+ }
1058
1092
  var ACTIVITY_MS = 5e3;
1059
1093
  var SNAPSHOT_MS = 3e4;
1060
1094
  var FOCUS_GAP_MS = 2e3;
@@ -1089,6 +1123,9 @@ var RelayStore = class {
1089
1123
  /** The first cache of this mount: a public read's `initialData` seeds only it. */
1090
1124
  #firstCache = null;
1091
1125
  #settled = null;
1126
+ /** The wallet the current session signed in with, while the store follows its accounts. */
1127
+ #wallet = null;
1128
+ #walletSigningOut = false;
1092
1129
  constructor(client, polling = {}) {
1093
1130
  this.client = client;
1094
1131
  this.#polling = {
@@ -1167,6 +1204,7 @@ var RelayStore = class {
1167
1204
  this.#observer?.dispose();
1168
1205
  this.#observer = null;
1169
1206
  this.#stopFeed();
1207
+ this.#stopWallet(false);
1170
1208
  this.#sessionRead?.abort();
1171
1209
  this.#sessionRead = null;
1172
1210
  this.#sessionVersion++;
@@ -1226,6 +1264,32 @@ var RelayStore = class {
1226
1264
  this.#setSession({ status: "ready", data: null, error: null });
1227
1265
  this.#emit();
1228
1266
  }
1267
+ /**
1268
+ * Signs in with a wallet through the client, then follows the wallet's accounts when the signer
1269
+ * can watch them: a switch to another account, or an empty list, signs out.
1270
+ */
1271
+ async signInWithWallet(signer) {
1272
+ if (!signer.watchAccounts) {
1273
+ await this.client.auth.wallet.signIn(signer);
1274
+ return;
1275
+ }
1276
+ let address;
1277
+ const session = await this.client.auth.wallet.signIn(
1278
+ reportingSigner(signer, (signed) => {
1279
+ address = signed;
1280
+ })
1281
+ );
1282
+ if (!this.#mounted || !address || typeof session?.id !== "string") {
1283
+ return;
1284
+ }
1285
+ writeWalletSignIn({
1286
+ session: session.id,
1287
+ chain: signer.chain,
1288
+ address,
1289
+ ...signer.name ? { name: signer.name } : {}
1290
+ });
1291
+ this.#watchWallet(signer, address, session.id);
1292
+ }
1229
1293
  /**
1230
1294
  * Reads the experience again. With a feed, it is read first: the events it finds read the
1231
1295
  * experience and whatever else they changed, so a change the participant just made shows its
@@ -1319,6 +1383,63 @@ var RelayStore = class {
1319
1383
  this.#feed = null;
1320
1384
  feed?.dispose();
1321
1385
  }
1386
+ /** Signs out when the wallet `session` signed in with reports another account, or none. */
1387
+ #watchWallet(signer, address, session) {
1388
+ this.#stopWallet(false);
1389
+ const signedIn = address.toLowerCase();
1390
+ const watch = { session, stop: () => {
1391
+ } };
1392
+ this.#wallet = watch;
1393
+ watch.stop = signer.watchAccounts((accounts) => {
1394
+ if (this.#wallet === watch && accounts[0]?.toLowerCase() !== signedIn) {
1395
+ void this.#walletSwitched();
1396
+ }
1397
+ });
1398
+ }
1399
+ async #walletSwitched() {
1400
+ if (this.#walletSigningOut) {
1401
+ return;
1402
+ }
1403
+ this.#walletSigningOut = true;
1404
+ try {
1405
+ await this.signOut();
1406
+ } catch {
1407
+ } finally {
1408
+ this.#walletSigningOut = false;
1409
+ }
1410
+ }
1411
+ #stopWallet(forget) {
1412
+ const watch = this.#wallet;
1413
+ this.#wallet = null;
1414
+ watch?.stop();
1415
+ if (forget) {
1416
+ writeWalletSignIn(null);
1417
+ }
1418
+ }
1419
+ /** Follows the wallet a session restored after a reload signed in with, if it is installed. */
1420
+ async #restoreWallet(record) {
1421
+ const wallets = await discoverEvmWallets();
1422
+ const wallet = record.name ? wallets.find((candidate) => candidate.name === record.name) : wallets.length === 1 ? wallets[0] : void 0;
1423
+ if (wallet?.signer.watchAccounts && this.#mounted && !this.#wallet && this.#scope?.session?.id === record.session) {
1424
+ this.#watchWallet(wallet.signer, record.address, record.session);
1425
+ }
1426
+ }
1427
+ /** Stops following a wallet once its session ended; resumes after a reload or remount. */
1428
+ #syncWallet(session) {
1429
+ const id = session?.id ?? null;
1430
+ if (this.#wallet && this.#wallet.session !== id) {
1431
+ this.#stopWallet(true);
1432
+ }
1433
+ if (this.#wallet || !id) {
1434
+ return;
1435
+ }
1436
+ const record = readWalletSignIn();
1437
+ if (record?.session === id && record.chain === "eip155") {
1438
+ void this.#restoreWallet(record);
1439
+ } else if (record) {
1440
+ writeWalletSignIn(null);
1441
+ }
1442
+ }
1322
1443
  /** Reads again, once each, the queries the events change. */
1323
1444
  #applyEvents(events) {
1324
1445
  const keys = /* @__PURE__ */ new Map();
@@ -1457,6 +1578,9 @@ var RelayStore = class {
1457
1578
  };
1458
1579
  this.#firstCache ??= this.#scope.cache;
1459
1580
  this.#syncFeed();
1581
+ if (next.status === "ready") {
1582
+ this.#syncWallet(session);
1583
+ }
1460
1584
  }
1461
1585
  #deriveExperience() {
1462
1586
  const session = this.#session;
@@ -2444,7 +2568,8 @@ function useMe() {
2444
2568
  return useMemberQuery(relayKeys.me, (options) => relay.me.get(options));
2445
2569
  }
2446
2570
  function useSignIn() {
2447
- const relay = useRelay();
2571
+ const store = useStore();
2572
+ const relay = store.client;
2448
2573
  const [challenge, setChallengeState] = useState7(null);
2449
2574
  const latest = useRef6(null);
2450
2575
  const [busy, setBusy] = useState7(false);
@@ -2519,10 +2644,10 @@ function useSignIn() {
2519
2644
  );
2520
2645
  const withWallet = useCallback7(
2521
2646
  (signer) => run(async () => {
2522
- await relay.auth.wallet.signIn(signer);
2647
+ await store.signInWithWallet(signer);
2523
2648
  setChallenge(null);
2524
2649
  }, "Couldn't sign in with this wallet. Try again."),
2525
- [relay, run, setChallenge]
2650
+ [store, run, setChallenge]
2526
2651
  );
2527
2652
  const codeSent = challenge !== null;
2528
2653
  return useMemo7(
@@ -2540,7 +2665,11 @@ function useSignIn() {
2540
2665
  verifyCode,
2541
2666
  startOver,
2542
2667
  withProvider,
2543
- /** Signs in, or signs up, with a wallet; the wallet asks the participant to sign a message. */
2668
+ /**
2669
+ * Signs in, or signs up, with a wallet; the wallet asks the participant to sign a message. A
2670
+ * wallet that can watch its accounts, such as an EVM browser wallet, is followed: switching
2671
+ * to another account in it, or locking it, signs out.
2672
+ */
2544
2673
  withWallet,
2545
2674
  /** Leaves for Telegram Login, where the platform configured it. */
2546
2675
  withTelegram,
@@ -1 +1 @@
1
- import{$b as Me,$c as U,$d as We,Ad as At,Af as Ye,B as $,Bf as et,C as re,Cc as Mt,D as ae,Dc as Re,E as ne,Ec as $t,F as oe,Fb as Se,Fc as zt,G as se,Ge as _e,H as ce,Hb as Ee,Hc as Ae,I as ie,Ig as nt,J as de,Kc as jt,Lc as Lt,Mf as It,Nc as Te,Nf as Bt,Oc as De,Pf as Ot,Rb as qe,Rd as Tt,Rh as it,Sd as Dt,Sg as ot,Td as Pt,Tg as st,Ua as B,Ub as Ce,Ud as Ue,Uf as tt,Ug as W,Va as pe,Vd as Ve,Wa as O,X as ue,Xa as ke,Xc as K,Xd as Ze,Y as le,Yb as xe,Yc as T,Zd as Qe,_b as Et,a as R,aa as me,ad as V,ba as A,bc as N,bd as Pe,ea as fe,ed as Ie,fa as I,fd as Be,ga as he,gd as Oe,hd as S,id as Ne,ja as ge,je as Z,le as z,lg as rt,mb as we,md as E,mg as at,oe as Fe,pb as ve,pd as Rt,pi as Nt,qc as $e,qh as ct,r as H,s as J,t as X,tc as ze,u as Y,ub as be,uc as qt,v as ee,vc as je,vf as He,w as te,wd as b,we as Q,xc as Ct,xd as Ke,yb as ye,yc as xt,yd as q,ye as Ge,yf as Je,zc as Le,zf as Xe}from"./chunks/BG43KQ2T.js";import{Cb as x,Ec as M,Kb as G,Pd as St,ic as P,jc as _,va as D,wc as L}from"./chunks/EWU4OKSY.js";function dt(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function Kt(e,r){dt(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,s=""]=t,c=s.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 Ut(e,r){dt(r);let t=typeof e=="bigint"?e:BigInt(e),a=t<0n?"-":"",s=(t<0n?-t:t).toString().padStart(r+1,"0"),c=s.slice(0,s.length-r),i=s.slice(s.length-r).replace(/0+$/,"");return a+c+(i?"."+i:"")}function lt(e,r={}){let{trigger:t,completion:a,requires:s,performance:c,retryCooldownMs:i,completionCooldownMs:d}=e,n=t.kind==="automatic"?t.tracker:void 0,f=n?.content===!0;if(c&&!f)throw new Error("Performance requires a content quest");if(f){if(a.kind!=="keyed")throw new Error("Content quests complete once per content item");if(n.beneficiary!=="author"||n.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(d!==void 0){if(t.kind!=="manual"||t.actor==="staff")throw new Error("A completion cooldown applies only to quests members submit themselves");if(a.kind==="once")throw new Error("A completion cooldown needs a quest members can complete more than once: this one completes once per member")}if(t.kind==="automatic"&&!n){if(!r.template&&s.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 Vt=["author"],Zt=["author","messageAuthor"];function mt(e){if(!ge(e))return[];switch(e.kind){case"x-search":return ue;case"discord-messages":return Vt;case"discord-reactions":return Zt;case"custom":return["author",...e.accounts??[]]}}var ut=new Map;function Qt(e){let r=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,t=ut.get(r);return t||(t=$(r==="messages-text"?Y:r==="discord-messages"?X:ee),ut.set(r,t)),t}function ft(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return Qt(e);case"custom":return e.data}}function hr(e){return b("badge",nt.parse(e))}function gr(e){return b("ledger",tt.parse(e))}function pr(e){let{target:r,ledger:t,...a}=e,s=ot.parse({...a,qualifiedBy:e.qualifiedBy.key,balance:q(t)}),c=L(M(e.metrics),W.shape.target);return{key:s.key,describe:()=>s,score(i){let d=st.parse(i);return W.parse({target:r({metrics:c.parse(d.metrics)}),baseline:r({metrics:c.parse(d.baseline)})})}}}var Ft=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 we.strict().parse({kind:"streak",...e})},kr=e=>pe.brand().parse({kind:"count",count:e}),wr=(e,r={})=>O.brand().parse({kind:"calendar",period:e,...r}),vr=({days:e})=>O.brand().parse({kind:"rolling",durationMs:e*864e5}),br=e=>({kind:"quest",quest:e});function yr(e){let{qualification:r,inviterGroup:t,milestones:a,bonuses:s,...c}=e,i=it.parse({...c,qualification:r.kind==="quest"?{kind:"quest",quest:r.quest.key}:r,...t?{inviterGroup:R.parse(t.key)}:{},milestones:a?.map(({key:d,...n})=>({...n,id:E({key:d,...n})})),bonuses:s?.map(({key:d,ledger:n,quests:f,...p})=>({...p,id:E({key:d,...p}),balance:q(n),quests:f?.map(o=>o.key)}))});return b("referral",i)}function Sr(e={}){return{kind:"earned",...e}}function Er(e){let{ledger:r,group:t,score:a,settle:s,...c}=e,i=s?.pool,d=ct.parse({...c,...s?{settle:{...s,prizes:s.prizes??[],...i?{pool:{...i,...i.ledger===void 0?{}:{ledger:q(i.ledger)}}}:{}}}:{},balance:q(r),...t?{group:R.parse(t.key)}:{},score:a?.kind==="earned"?{...a,quests:a.quests?.map(n=>n.key)}:a});return b("leaderboard",d)}var qr={provider:"x",search:e=>me.parse({kind:"x-search",...e})};function j(e,r){let{data:t,content:a,...s}=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(!ht(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)le.parse(i);return A.parse({kind:"custom",namespace:e,...s,data:$(P({body:a.body,metrics:_(Object.fromEntries(c.map(i=>[i,x().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!ht(t))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return A.parse({kind:"custom",namespace:e,...s,data:$(t)})}function ht(e){return typeof e=="object"&&e!==null&&"_zod"in e}function Cr(e){return b("tracker",he.parse(e))}function Gt(e={}){return H.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function _t(){return J.parse({kind:"discord-reactions"})}var xr={provider:"discord",grantRole:e=>te.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),messages:Gt,reactions:_t,roles(e={}){return T.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return T.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"]})}},Mr={messages(){return j(se,{identities:["member"],data:at})},reactions(){return j(oe,{identities:["member"],accounts:["messageAuthor"],data:rt})}},$r={shorts(){return j(ce,{identities:["member"],content:{body:Je,metrics:Xe}})}},zr={videos(){return j(ie,{identities:["member"],content:{body:Ye,metrics:et}})}};function Ht(e){let{chain:r,token:t}=e,a=t===void 0?null:t;if(a!==null&&typeof a!="string")throw new Error("wallet.balances() takes the token as a string");if(r==="solana"||r===N){if(a!==null&&!xe.safeParse(a).success)throw new Error("wallet.balances() on Solana takes an SPL or Token-2022 mint address (base58)");return{chain:N,token:a}}if(typeof r=="string"&&$e(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||!Me.safeParse(a).success)throw new Error("wallet.balances() on a Cosmos chain takes a bank denomination such as uatom");return{chain:r,token:a}}throw new Error('wallet.balances() reads "solana", an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"')}var jr={balances(e){let r=Ht(e),t=j(de,{identities:["wallet"],data:ze});return A.parse({...t,balance:r})}},Lr=()=>({provider:"domino",resource:"point-ledger"});function g(e,r){return r}var Rr={pointLedger(e){let r={...e,kind:"point-ledger",default:e.default?R.parse(e.default.key):""};return g("point-ledger",Ke.prefault(r.default).meta(r))},datetime(e){let r={...e,kind:"datetime",default:U.parse(e.default)};return g("datetime",U.default(r.default).meta(r))},resource(e){let r={...e,source:T.parse(e.source),kind:"resource",default:V.parse(e.default??"")};return g("resource",V.default(r.default).meta(r))},quiz(e){let r=K.parse(e.default);return g("quiz",K.default(r).meta({...e,default:r,kind:"quiz"}))},text(e){let r={...e,kind:"text",minLength:e.minLength??1,maxLength:e.maxLength??2e3,multiline:e.multiline??!1};return g("text",D().min(r.minLength).max(r.maxLength).default(r.default).meta(r))},telegramChat(e){let r={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return g("text",D().max(r.maxLength).default(r.default).meta(r))},amount(e){if(!Ie(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 g("text",S(r).default(r.default).meta(r))},chain(e){if(!Be(e.default))throw new Error(`settings.chain() takes "solana" or an EVM chain ID such as "eip155:8453" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:64,multiline:!1,picker:"chain"};return g("text",S(r).transform(t=>t).default(r.default).meta(r))},nft(e){if(!je(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 g("text",S(r).transform(t=>t).default(r.default).meta(r))},contractCall(e){if(!Le(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 g("text",S(r).transform(t=>t).default(r.default).meta(r))},contractEvent(e){if(!Re(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 g("text",S(r).transform(t=>t).default(r.default).meta(r))},solanaProgram(e){if(!Ae(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 g("text",S(r).transform(t=>t).default(r.default).meta(r))},integer(e){return g("integer",x().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return g("boolean",G().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return g("choice",M(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return P(e).strict()}};function pt(e,r){let t=e.balanceChanges.find(a=>a.mint===r);return t?BigInt(t.delta):0n}function Tr(e,r){let t=pt(e,r);return t>0n?t.toString():"0"}function Dr(e,r){let t=pt(e,r);return t<0n?(-t).toString():"0"}function Pr(e,r={}){let t=e.balanceChanges.filter(s=>BigInt(s.delta)>0n),a=e.balanceChanges.filter(s=>BigInt(s.delta)<0n);return t.some(s=>(r.into===void 0||s.mint===r.into)&&a.some(c=>c.mint!==s.mint&&(r.from===void 0||c.mint===r.from)))}function Ir(e,r){return e.programs.includes(r)}function Br(e,r){return e.instructions?.find(t=>t.name===r)?.args??null}var Or=e=>Qe(e.key,e.name),Nr=e=>We(e.key,e.title),Kr=(e,r)=>Ue.parse({kind:"points",balance:q(e),amount:r}),Ur={text:(e={})=>({input:"text",constraints:Te.parse(e)}),url:(e={})=>({input:"url",constraints:De.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function Vr(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 kt=new WeakMap,wt=new WeakMap;function vt(e,r){let{tracker:t,beneficiary:a="author",on:s,where:c,enrollment:i,since:d,historical:n,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:p}=t;if(!fe(p))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(f&&!I(p))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(d==="enrollment"&&i!=="required")throw new Error(`${r}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let o=mt(p);if(!o.includes(a))throw new Error(p.kind==="custom"?`Tracker "${t.key}" has no "${a}" account: declare it in customSource(namespace, { accounts: ["${a}"] })`:`Tracker "${t.key}" pays ${o.map(m=>`"${m}"`).join(" or ")}, not "${a}"`);let u=ye.parse({tracker:t.key,source:p.kind,on:f?"new-record":s??ve(p.kind),...c?{where:c}:{},beneficiary:a,...i==="required"?{enrollment:i}:{},...d&&d!=="activation"?{since:d}:{},...n&&n!==(f?"claim":"staff")?{historical:n}:{},...f?{content:f}:{}}),l=ft(p),v=l?ne(l,u.where):null;if(v)throw new Error(v);let w={kind:"automatic",tracker:u};l&&kt.set(w,l);let h=I(p);return h&&wt.set(w,h.metrics),w}function Zr(e){return e?vt(e,"automatic"):{kind:"automatic"}}function Qr(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 vt({...e,content:!0},"content")}var Wr=e=>{let{key:r,cost:t,...a}=e;return qe.parse({...a,id:E(e),cost:typeof t=="number"?t:{balance:q(t.ledger)}})},Jt=e=>({kind:"keyed",key:e}),Xt=e=>{let{distinct:r,...t}=e;return{...ke.parse({kind:"progress",window:{kind:"lifetime"},...t}),distinct:r}},Fr=()=>({kind:"untracked"}),Gr=()=>({kind:"staff-handover"}),_r=()=>({kind:"automatic"});function Hr(e){let{key:r,tiers:t,...a}=e,s=E(e),c=Ve.parse({id:s,...a,tiers:t.map(({key:i,...d})=>({...d,id:E({key:i,...d})}))});return b("tiered-reward",{key:c.id,tier:i=>Ze.parse({kind:"tier",reward:c,tier:i})})}var Yt=()=>({kind:"once"});function er(e={}){return{kind:"accept",...e}}function tr(e){return{kind:"review",...e}}var C={accept:er,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:tr};function gt(e){let r=e.kind==="reject"&&e.code!==void 0?Ee(e.code):null;if(r)throw new Error(r)}var Jr={quiz(e,r={}){let t=_e.parse(e),a=Object.keys(t),s=x().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(n=>Object.hasOwn(c.answers,n)),d=a.filter(n=>c.answers[n]===t[n]).length;return i&&d>=s?C.accept():C.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"?C.review({reason:a.reason}):C.reject({reason:a.reason}):a.kind==="pass"?C.accept():C.reject({reason:a.reason})}}},rr={once:Yt,keyed:Jt,streak:Ft,progress:Xt};function bt(e){return function(t){let a=E(t),s=[...new Set((t.integrations??[]).map(o=>Ce.parse(o.provider)))],c=t.trigger.kind==="automatic"&&t.trigger.tracker?.content===!0,i=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0,d=t.completion,n=typeof d=="function"?d(rr):d;if(c&&n!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!c&&n===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");if(lt({trigger:t.trigger,completion:n??{kind:"keyed"},requires:t.requires??[],performance:t.performance?B.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs}):void 0,...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs}},{template:e}),t.retryCooldownMs!==void 0&&!Z.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&&!Z.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=wt.get(t.trigger)??[],u=t.performance.metrics.filter(l=>!o.includes(l));if(u.length)throw new Error(`The tracker's source does not measure ${u.join(", ")}`)}if(t.trigger.kind==="manual"&&t.trigger.input!=="none"&&!t.evaluate)throw new Error("Evidence quests require an evaluator");let f=Object.fromEntries(Object.entries(t.settings.shape).map(([o,u])=>{let l=Pe.safeParse(u.meta());if(!l.success)throw new Error(`Setting "${o}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);return[o,l.data]}));for(let o of be(t.trigger.kind==="automatic"?t.trigger.tracker?.where:void 0))if(!Oe(f[o]))throw new Error(`The tracker filter compares with setting "${o}", which is not an integer or amount setting`);function p(o){let u=t.settings.parse(o),l=Ne(f,u),v=Fe.parse(typeof t.rewards=="function"?t.rewards({settings:u}):t.rewards),w=[...v.flatMap(h=>h.kind==="integration"?[h.provider]:[]),...Object.values(f).flatMap(h=>h.kind==="resource"&&h.source.provider!=="domino"?[h.source.provider]:[])];for(let h of w)if(!s.includes(h))throw new Error(`Declare the ${h} integration on this quest`);return Ge.parse({quest:a,evaluatorProtocol:Q,title:typeof t.title=="function"?t.title({settings:u}):t.title,presentation:t.presentation?.({settings:u})??{},fields:f,values:l,rewards:v,humanReview:t.review?.({settings:u})?.enabled??!0,trigger:t.trigger,...t.performance?{performance:B.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs})}:{},integrations:s,completion:n?n.kind==="progress"?{kind:n.kind,goal:n.goal,window:n.window,repeat:n.repeat}:n.kind==="streak"?n:{kind:n.kind}:{kind:"keyed"},visibility:t.visibility??"visible",profile:t.profile??{visible:!1},budgets:t.budgets??[],requires:t.requires??[],...t.campaign?{campaign:t.campaign}:{},...t.availability?{availability:t.availability}:{},...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs}})}return b("quest",{protocol:Q,key:a,describe:p,async evaluate(o){let u=t.settings.parse(o.settings),l=i?Se.parse(o.tracker):null,v=kt.get(t.trigger),w=l&&v?re(v,l.record.data):null;if(w)return z.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${w.path} ${w.reason}`});let h=l;if(o.performance){if(!t.performance)throw new Error("Quest has no performance evaluator");let y=He.parse(o.performance),yt=L(M(t.performance.metrics),x().int().safe().nonnegative()).parse(y.metrics),k=await t.performance.evaluate({settings:u,member:o.member,tracker:h,metrics:yt,observedAt:y.observedAt});if(!k)throw new Error("Performance evaluator returned no decision");if(k.rewards!==void 0)throw new Error("A performance evaluator cannot select rewards. It gates the rewards content evaluation selected: return accept, review or reject with a reason only.");return gt(k),z.parse(k.kind==="accept"?{kind:"accept",rewards:y.rewards}:k.kind==="review"&&o.humanReview?{kind:"review",reason:k.reason,rewards:y.rewards}:{kind:"reject",reason:k.reason,...k.kind==="review"?{requestedReview:!0}:k.code===void 0?{}:{code:k.code}})}let m=t.evaluate?await t.evaluate({settings:u,member:o.member,input:o.input,tracker:h,eligibleAt:o.eligibleAt,calendar:o.calendar,now:o.now,review:o.review,trackers:ae(o.trackers),wallet:o.wallet,images:o.images,...o.telegram?{telegram:o.telegram}:{},...Object.fromEntries(s.map(y=>[y,o[y]]))}):C.accept();if(!m)throw new Error("Evaluator returned no decision");if(gt(m),m.kind==="review"&&!o.humanReview)return z.parse({kind:"reject",reason:m.reason,requestedReview:!0});(m.kind==="accept"||m.kind==="review")&&m.completionKey!==void 0&&n?.kind!=="keyed"&&o.diagnose?.({code:"completion-key-ignored",message:ar(n,m.completionKey)});let F={...o,settings:u,tracker:l};return z.parse(m.kind==="accept"||m.kind==="review"?{...m,rewards:m.rewards??o.rewards,...n?.kind==="keyed"||n?.kind==="progress"?{completionKey:n.kind==="progress"?n.distinct(F):m.completionKey??n.key(F)}:{}}:m)}})}}function ar(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 Xr=bt(!1),Yr=bt(!0);export{Ot as CapabilityError,Zr as automatic,_r as automaticFulfillment,Or as badge,Dt as balanceAtLeast,Wr as budget,wr as calendar,Bt as capabilityErrorCodes,Tt as completed,Qr as content,Me as cosmosDenomSchema,Et as cosmosNetworkSchema,kr as count,j as customSource,C as decision,hr as defineBadge,Rt as defineCampaign,It as defineDashboard,pr as defineEngagementReward,At as defineGroup,Er as defineLeaderboard,gr as defineLedger,Nt as defineOffer,Xr as defineQuest,Yr as defineQuestType,yr as defineReferral,Hr as defineTieredReward,Cr as defineTracker,xr as discord,Sr as earned,Jr as evaluators,Ur as evidence,Ut as formatUnits,Nr as groupMembership,Pt as inGroup,Br as instruction,Ir as invoked,Le as isContractCall,Re as isContractEvent,$e as isEvmChainId,je as isNftCollection,Ae as isSolanaProgram,Jt as keyed,Vr as manual,$t as maxWalletEventLogs,zt as maxWalletEventLookback,Lt as maxWalletTransactionLookback,jt as maxWalletTransactions,Yt as once,xt as parseContractCall,Mt as parseContractEvent,Ct as parseContractFunction,qt as parseNftCollection,Kt as parseUnits,Lr as pointLedgers,Kr as points,Xt as progress,br as questCompleted,Tr as received,vr as rolling,Rr as settings,Dr as spent,Gr as staffHandover,Ft as streak,Pr as swapped,Mr as telegram,zr as tiktok,$ as trackerDataSchema,Se as trackerTriggerContextSchema,Fr as untracked,jr as wallet,qr as x,$r as youtube,St as z};
1
+ import{$b as je,$c as Ze,Ad as He,B as j,Bd as E,C as se,Cd as Je,D as ce,De as G,E as ie,F as ue,Fb as xe,Fe as L,G as de,Gd as q,H as le,Hb as Me,Hh as gt,I as me,Ie as nt,Ig as dt,J as ge,Jd as Nt,Jg as lt,Kc as Oe,Kg as H,Nc as Ne,Oc as Lt,Pc as Ke,Pf as ct,Qd as y,Qe as _,Rb as ze,Rc as Rt,Rd as Xe,Sb as $e,Sc as Tt,Sd as C,Se as ot,Tc as Ue,Ua as U,Ud as Kt,Uh as $,Va as be,Vb as Ae,Wa as V,Wc as Bt,Wf as it,X as he,Xa as ye,Xc as Ve,Y as pe,Yc as Dt,Zc as Pt,_e as st,a as B,aa as fe,ba as D,cd as It,dd as Ot,ea as ke,fa as K,fd as Qe,ga as we,gd as We,gh as mt,gi as Qt,hi as ht,ii as pt,ja as ve,je as Ut,ji as ft,kc as Le,ke as Vt,ki as kt,lc as Re,le as Zt,mb as Se,me as Ye,nc as Te,ne as et,oc as Be,pb as Ee,pc as De,pd as Q,pe as tt,qc as Pe,qd as P,r as ee,re as rt,s as te,sc as jt,t as re,tc as Ie,td as W,te as at,u as ae,ub as qe,ud as F,v as ne,vc as Z,vd as Fe,vi as Wt,w as oe,wi as Ft,yb as Ce,yd as Ge,yg as ut,yi as Gt,zd as _e}from"./chunks/5QVFB4TU.js";import{Cb as z,Ec as A,Kb as J,Pd as At,fc as X,ic as N,jc as Y,va as O,wc as T}from"./chunks/EWU4OKSY.js";function wt(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function _t(e,r){wt(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 Ht(e,r){wt(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 bt(e,r={}){let{trigger:t,completion:a,requires:n,performance:c,retryCooldownMs:i,completionCooldownMs:u,authorBudgets:o=[]}=e,g=t.kind==="automatic"?t.tracker:void 0,l=g?.content===!0;if(c&&!l)throw new Error("Performance requires a content quest");if(!g&&o.length)throw new Error('A budget with scope "author" counts per tracker record author: use it only on a quest with a tracker trigger');if(l){if(a.kind!=="keyed")throw new Error("Content quests complete once per content item");if(g.beneficiary!=="author"||g.on!=="new-record")throw new Error("A content quest pays each content item's author and fires on its first observation")}if(i!==void 0&&(t.kind!=="manual"||t.actor==="staff"))throw new Error("A retry cooldown applies only to quests members submit themselves");if(u!==void 0){if(t.kind!=="manual"||t.actor==="staff")throw new Error("A completion cooldown applies only to quests members submit themselves");if(a.kind==="once")throw new Error("A completion cooldown needs a quest members can complete more than once: this one completes once per member")}if(t.kind==="automatic"&&!g){if(!r.template&&n.length===0)throw new Error("Automatic quests need at least one prerequisite");if(a.kind!=="once")throw new Error("Prerequisite-only automatic quests complete once")}}var Jt=["author"],Xt=["author","messageAuthor"];function yt(e){if(!ve(e))return[];switch(e.kind){case"x-search":return he;case"discord-messages":return Jt;case"discord-reactions":return Xt;case"custom":return["author",...e.accounts??[]]}}var vt=new Map;function Yt(e){let r=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,t=vt.get(r);return t||(t=j(r==="messages-text"?ae:r==="discord-messages"?re:ne),vt.set(r,t)),t}function St(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return Yt(e);case"custom":return e.data}}function qr(e){return y("badge",$("Badge",ut,e))}function Cr(e){return y("ledger",$("Point ledger",it,e))}function xr(e){let{target:r,ledger:t,...a}=e,n=dt.parse({...a,qualifiedBy:e.qualifiedBy.key,balance:C(t)}),c=T(A(e.metrics),H.shape.target);return{key:n.key,describe:()=>n,score(i){let u=lt.parse(i);return H.parse({target:r({metrics:c.parse(u.metrics)}),baseline:r({metrics:c.parse(u.baseline)})})}}}var tr=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 Se.strict().parse({kind:"streak",...e})},Mr=e=>be.brand().parse({kind:"count",count:e}),zr=(e,r={})=>V.brand().parse({kind:"calendar",period:e,...r}),$r=({days:e})=>V.brand().parse({kind:"rolling",durationMs:e*864e5}),Ar=e=>({kind:"quest",quest:e});function jr(e){let{qualification:r,inviterGroup:t,milestones:a,bonuses:n,...c}=e,i=$("Referral",gt,{...c,qualification:r.kind==="quest"?{kind:"quest",quest:r.quest.key}:r,...t?{inviterGroup:B.parse(t.key)}:{},milestones:a?.map(({key:u,...o})=>({...o,id:q({key:u,...o})})),bonuses:n?.map(({key:u,ledger:o,quests:g,...l})=>({...l,id:q({key:u,...l}),balance:C(o),quests:g?.map(M=>M.key)}))});return y("referral",i)}function Lr(e={}){return{kind:"earned",...e}}function Rr(e){let{ledger:r,group:t,score:a,settle:n,...c}=e,i=n?.pool,u=$("Leaderboard",mt,{...c,...n?{settle:{...n,prizes:n.prizes??[],...i?{pool:{...i,...i.ledger===void 0?{}:{ledger:C(i.ledger)}}}:{}}}:{},balance:C(r),...t?{group:B.parse(t.key)}:{},score:a?.kind==="earned"?{...a,quests:a.quests?.map(o=>o.key)}:a});return y("leaderboard",u)}var Tr={provider:"x",search:e=>fe.parse({kind:"x-search",...e})};function R(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(!Et(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)pe.parse(i);return D.parse({kind:"custom",namespace:e,...n,data:j(N({body:a.body,metrics:Y(Object.fromEntries(c.map(i=>[i,z().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:c}})}if(!Et(t))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return D.parse({kind:"custom",namespace:e,...n,data:j(t)})}function Et(e){return typeof e=="object"&&e!==null&&"_zod"in e}function Br(e){return y("tracker",$("Tracker",we,e))}function rr(e={}){return ee.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function ar(){return te.parse({kind:"discord-reactions"})}var Dr={provider:"discord",grantRole:e=>oe.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),postMessage(e){return Be.parse({provider:"discord",action:"post-message",...e})},messages:rr,reactions:ar,roles(e={}){return P.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return P.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"],...e.postable?{postable:!0}:{}})}},Pr={postMessage(e){return Te.parse({provider:"telegram",action:"post-message",...e})},messages(){return R(de,{identities:["member"],data:Re})},reactions(){return R(ue,{identities:["member"],accounts:["messageAuthor"],data:Le})}},Ir={shorts(){return R(le,{identities:["member"],content:{body:ht,metrics:pt}})}},Or={videos(){return R(me,{identities:["member"],content:{body:ft,metrics:kt}})}};function nr(e){let{chain:r,token:t}=e,a=t===void 0?null:t;if(a!==null&&typeof a!="string")throw new Error("wallet.balances() takes the token as a string");if(r==="solana"||r===Z){if(a!==null&&!Pe.safeParse(a).success)throw new Error("wallet.balances() on Solana takes an SPL or Token-2022 mint address (base58)");return{chain:Z,token:a}}if(typeof r=="string"&&Oe(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||!Ie.safeParse(a).success)throw new Error("wallet.balances() on a Cosmos chain takes a bank denomination such as uatom");return{chain:r,token:a}}throw new Error('wallet.balances() reads "solana", an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"')}var Nr={balances(e){let r=nr(e),t=R(ge,{identities:["wallet"],data:Ne});return D.parse({...t,balance:r})}},Kr=()=>({provider:"domino",resource:"point-ledger"});function p(e,r){return r}var Ur={pointLedger(e){let r={...e,kind:"point-ledger",default:e.default?B.parse(e.default.key):""};return p("point-ledger",Xe.prefault(r.default).meta(r))},datetime(e){let r={...e,kind:"datetime",default:W.parse(e.default)};return p("datetime",W.default(r.default).meta(r))},resource(e){let r={...e,source:P.parse(e.source),kind:"resource",default:F.parse(e.default??"")};return p("resource",F.default(r.default).meta(r))},quiz(e){let r=Q.parse(e.default);return p("quiz",Q.default(r).meta({...e,default:r,kind:"quiz"}))},text(e){let r={...e,kind:"text",minLength:e.minLength??1,maxLength:e.maxLength??2e3,multiline:e.multiline??!1};return p("text",O().min(r.minLength).max(r.maxLength).default(r.default).meta(r))},telegramChat(e){let r={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return p("text",O().max(r.maxLength).default(r.default).meta(r))},amount(e){if(!Ge(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(!_e(e.default))throw new Error(`settings.chain() takes "solana" or an EVM chain ID such as "eip155:8453" as its default, not "${e.default}"`);let r={...e,kind:"text",minLength:1,maxLength:64,multiline:!1,picker:"chain"};return p("text",E(r).transform(t=>t).default(r.default).meta(r))},nft(e){if(!Ke(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(!Ue(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(!Ve(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",z().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return p("boolean",J().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return p("choice",A(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return N(e).strict()}};function Ct(e,r){let t=e.balanceChanges.find(a=>a.mint===r);return t?BigInt(t.delta):0n}function Zr(e,r){let t=Ct(e,r);return t>0n?t.toString():"0"}function Qr(e,r){let t=Ct(e,r);return t<0n?(-t).toString():"0"}function Wr(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 Fr(e,r){return e.programs.includes(r)}function Gr(e,r){return e.instructions?.find(t=>t.name===r)?.args??null}var _r=e=>rt(e.key,e.name),Hr=e=>at(e.key,e.title),Jr=(e,r)=>Ye.parse({kind:"points",balance:C(e),amount:r}),Xr={text:(e={})=>({input:"text",constraints:Qe.parse(e)}),url:(e={})=>({input:"url",constraints:We.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function Yr(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 xt=new WeakMap,Mt=new WeakMap;function zt(e,r){let{tracker:t,beneficiary:a="author",on:n,where:c,enrollment:i,since:u,historical:o,content:g}=e;if(!t?.source)throw new Error(r==="automatic"?"automatic() takes no argument, or { tracker } with a tracker handle from defineTracker":"content() takes { tracker } with a tracker handle from defineTracker");let{source:l}=t;if(!ke(l))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(g&&!K(l))throw new Error(`content() needs a tracker whose source has content: x.search(), or customSource(namespace, { content: { body, metrics } }). Tracker "${t.key}" has none; use automatic({ tracker }) instead.`);if(u==="enrollment"&&i!=="required")throw new Error(`${r}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let M=yt(l);if(!M.includes(a))throw new Error(l.kind==="custom"?`Tracker "${t.key}" has no "${a}" account: declare it in customSource(namespace, { accounts: ["${a}"] })`:`Tracker "${t.key}" pays ${M.map(S=>`"${S}"`).join(" or ")}, not "${a}"`);let s=Ce.parse({tracker:t.key,source:l.kind,on:g?"new-record":n??Ee(l.kind),...c?{where:c}:{},beneficiary:a,...i==="required"?{enrollment:i}:{},...u&&u!=="activation"?{since:u}:{},...o&&o!==(g?"claim":"staff")?{historical:o}:{},...g?{content:g}:{}}),d=St(l),f=d?ie(d,s.where):null;if(f)throw new Error(f);let b={kind:"automatic",tracker:s};d&&xt.set(b,d);let w=K(l);return w&&Mt.set(b,w.metrics),b}function ea(e){return e?zt(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 zt({...e,content:!0},"content")}function or(e){let{key:r,cost:t,...a}=e,n={...a,id:q(e),cost:typeof t=="number"?t:{balance:C(t.ledger)}};return a.scope==="author"?$e.parse(n):ze.parse(n)}var ra=or,sr=(e=[])=>e.filter(r=>r.scope==="author"),cr=e=>({kind:"keyed",key:e}),ir=e=>{let{distinct:r,...t}=e;return{...ye.parse({kind:"progress",window:{kind:"lifetime"},...t}),distinct:r}},aa=()=>({kind:"untracked"}),na=()=>({kind:"staff-handover"}),oa=()=>({kind:"automatic"});function sa(e){let{key:r,tiers:t,...a}=e,n=q(e),c=et.parse({id:n,...a,tiers:t.map(({key:i,...u})=>({...u,id:q({key:i,...u})}))});return y("tiered-reward",{key:c.id,tier:i=>tt.parse({kind:"tier",reward:c,tier:i})})}var ur=()=>({kind:"once"});function dr(e={}){return{kind:"accept",...e}}function lr(e){return{kind:"review",...e}}var x={accept:dr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:lr};function qt(e){let r=e.kind==="reject"&&e.code!==void 0?Me(e.code):null;if(r)throw new Error(r)}var ca={quiz(e,r={}){let t=st.parse(e),a=Object.keys(t),n=z().int().min(1).max(a.length).parse(r.minimumCorrect??a.length);return async({input:c})=>{let i=Object.keys(c.answers).length===a.length&&a.every(o=>Object.hasOwn(c.answers,o)),u=a.filter(o=>c.answers[o]===t[o]).length;return i&&u>=n?x.accept():x.reject({reason:"Review your answers and try again."})}},photo(e){return async r=>{let t=e(r),a=await r.review.photo({image:r.input.photo,criteria:t.criteria});return a.kind==="unclear"?t.unclear==="human-review"?x.review({reason:a.reason}):x.reject({reason:a.reason}):a.kind==="pass"?x.accept():x.reject({reason:a.reason})}}},mr={once:ur,keyed:cr,streak:tr,progress:ir};function $t(e){return function(t){let a=q(t),n=[...new Set((t.integrations??[]).map(s=>Ae.parse(s.provider)))],c=t.trigger.kind==="automatic"&&t.trigger.tracker?.content===!0,i=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0,u=t.completion,o=typeof u=="function"?u(mr):u;if(c&&o!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!c&&o===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");let g=sr(t.budgets);if(bt({trigger:t.trigger,completion:o??{kind:"keyed"},requires:t.requires??[],authorBudgets:g,performance:t.performance?U.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs}):void 0,...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs}},{template:e}),t.retryCooldownMs!==void 0&&!G.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&&!G.safeParse(t.completionCooldownMs).success)throw new Error("completionCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(t.performance){let s=Mt.get(t.trigger)??[],d=t.performance.metrics.filter(f=>!s.includes(f));if(d.length)throw new Error(`The tracker's source does not measure ${d.join(", ")}`)}if(t.trigger.kind==="manual"&&t.trigger.input!=="none"&&!t.evaluate)throw new Error("Evidence quests require an evaluator");let l=Object.fromEntries(Object.entries(t.settings.shape).map(([s,d])=>{let f=Fe.safeParse(d.meta());if(!f.success)throw new Error(`Setting "${s}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);return[s,f.data]}));for(let s of qe(t.trigger.kind==="automatic"?t.trigger.tracker?.where:void 0))if(!He(l[s]))throw new Error(`The tracker filter compares with setting "${s}", which is not an integer or amount setting`);function M(s){let d=t.settings.parse(s),f=Je(l,d),b=nt.parse(typeof t.rewards=="function"?t.rewards({settings:d}):t.rewards),w=X(De).max(3,"A quest posts at most three announcements").parse((typeof t.announcements=="function"?t.announcements({settings:d}):t.announcements)??[]),S=t.trigger.kind==="automatic"&&t.trigger.tracker!==void 0;for(let m of w){let v=je(m.text),I="segments"in v&&v.segments.some(k=>k.kind==="placeholder"&&k.name==="author");if(!S&&I)throw new Error("An announcement names {author} only on a quest with an automatic tracker trigger");if(!S&&m.replyToTriggeringMessage)throw new Error("An announcement replies to the triggering message only on a quest with an automatic tracker trigger")}let h=[...b.flatMap(m=>m.kind==="integration"?[m.provider]:[]),...w.flatMap(m=>m.provider==="discord"?["discord"]:[]),...Object.values(l).flatMap(m=>m.kind==="resource"&&m.source.provider!=="domino"?[m.source.provider]:[])];for(let m of h)if(!n.includes(m))throw new Error(`Declare the ${m} integration on this quest`);return ot.parse({quest:a,evaluatorProtocol:_,title:typeof t.title=="function"?t.title({settings:d}):t.title,presentation:t.presentation?.({settings:d})??{},fields:l,values:f,rewards:b,...w.length?{announcements:w}:{},humanReview:t.review?.({settings:d})?.enabled??!0,trigger:t.trigger,...t.performance?{performance:U.parse({metrics:t.performance.metrics,maxAgeMs:t.performance.maxAgeMs})}:{},integrations:n,completion:o?o.kind==="progress"?{kind:o.kind,goal:o.goal,window:o.window,repeat:o.repeat}:o.kind==="streak"?o:{kind:o.kind}:{kind:"keyed"},visibility:t.visibility??"visible",profile:t.profile??{visible:!1},budgets:(t.budgets??[]).filter(m=>m.scope!=="author"),...g.length?{authorBudgets:g}:{},requires:t.requires??[],...t.campaign?{campaign:t.campaign}:{},...t.availability?{availability:t.availability}:{},...t.retryCooldownMs===void 0?{}:{retryCooldownMs:t.retryCooldownMs},...t.completionCooldownMs===void 0?{}:{completionCooldownMs:t.completionCooldownMs}})}return y("quest",{protocol:_,key:a,describe:M,async evaluate(s){let d=t.settings.parse(s.settings),f=i?xe.parse(s.tracker):null,b=xt.get(t.trigger),w=f&&b?se(b,f.record.data):null;if(w)return L.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${w.path} ${w.reason}`});let S=f;if(s.performance){if(!t.performance)throw new Error("Quest has no performance evaluator");let v=ct.parse(s.performance),I=T(A(t.performance.metrics),z().int().safe().nonnegative()).parse(v.metrics),k=await t.performance.evaluate({settings:d,member:s.member,tracker:S,metrics:I,observedAt:v.observedAt});if(!k)throw new Error("Performance evaluator returned no decision");if(k.rewards!==void 0)throw new Error("A performance evaluator cannot select rewards. It gates the rewards content evaluation selected: return accept, review or reject with a reason only.");return qt(k),L.parse(k.kind==="accept"?{kind:"accept",rewards:v.rewards}:k.kind==="review"&&s.humanReview?{kind:"review",reason:k.reason,rewards:v.rewards}:{kind:"reject",reason:k.reason,...k.kind==="review"?{requestedReview:!0}:k.code===void 0?{}:{code:k.code}})}let h=t.evaluate?await t.evaluate({settings:d,member:s.member,input:s.input,tracker:S,eligibleAt:s.eligibleAt,calendar:s.calendar,now:s.now,review:s.review,trackers:ce(s.trackers),wallet:s.wallet,images:s.images,...s.telegram?{telegram:s.telegram}:{},...Object.fromEntries(n.map(v=>[v,s[v]]))}):x.accept();if(!h)throw new Error("Evaluator returned no decision");if(qt(h),h.kind==="review"&&!s.humanReview)return L.parse({kind:"reject",reason:h.reason,requestedReview:!0});(h.kind==="accept"||h.kind==="review")&&h.completionKey!==void 0&&o?.kind!=="keyed"&&s.diagnose?.({code:"completion-key-ignored",message:gr(o,h.completionKey)});let m={...s,settings:d,tracker:f};return L.parse(h.kind==="accept"||h.kind==="review"?{...h,rewards:h.rewards??s.rewards,...o?.kind==="keyed"||o?.kind==="progress"?{completionKey:o.kind==="progress"?o.distinct(m):h.completionKey??o.key(m)}:{}}:h)}})}}function gr(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 ia=$t(!1),ua=$t(!0);export{Gt as CapabilityError,ea as automatic,oa as automaticFulfillment,_r as badge,Vt as balanceAtLeast,ra as budget,zr as calendar,Ft as capabilityErrorCodes,Ut as completed,ta as content,Ie as cosmosDenomSchema,jt as cosmosNetworkSchema,Mr as count,R as customSource,x as decision,qr as defineBadge,Nt as defineCampaign,Wt as defineDashboard,xr as defineEngagementReward,Kt as defineGroup,Rr as defineLeaderboard,Cr as defineLedger,Qt as defineOffer,ia as defineQuest,ua as defineQuestType,jr as defineReferral,sa as defineTieredReward,Br as defineTracker,Dr as discord,Lr as earned,ca as evaluators,Xr as evidence,Ht as formatUnits,Hr as groupMembership,Zt as inGroup,Gr as instruction,Fr as invoked,Ue as isContractCall,Ve as isContractEvent,Oe as isEvmChainId,Ke as isNftCollection,Ze as isSolanaProgram,cr as keyed,Yr as manual,Dt as maxWalletEventLogs,Pt as maxWalletEventLookback,Ot as maxWalletTransactionLookback,It as maxWalletTransactions,ur as once,Tt as parseContractCall,Bt as parseContractEvent,Rt as parseContractFunction,Lt as parseNftCollection,_t as parseUnits,Kr as pointLedgers,Jr as points,ir as progress,Ar as questCompleted,Zr as received,$r as rolling,Ur as settings,Qr as spent,na as staffHandover,tr as streak,Wr as swapped,Pr as telegram,Or as tiktok,j as trackerDataSchema,xe as trackerTriggerContextSchema,aa as untracked,Nr as wallet,Tr as x,Ir as youtube,At as z};
@@ -0,0 +1 @@
1
+ import{Bb as br,Cb as o,Dc as at,Dd as _,Ec as z,Ed as Re,Ga as zr,Gc as it,Hc as s,Jd as Pe,Kb as m,Od as O,Vb as se,Zb as ce,_b as pr,b as dr,ca as mr,d as F,dd as ot,ec as Ye,fc as c,hc as qe,ia as ur,ic as r,jc as p,kc as le,lc as et,mc as g,md as fr,nd as st,od as vr,qc as f,rc as tt,sa as oe,tc as rt,uc as gr,va as t,vc as nt,vd as de,wc as y}from"./EWU4OKSY.js";var Ia=Symbol.for("@domino-sdk/relay.RequestError");var Oa=class extends Error{name="RequestError";[Ia]=!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}},qa={NotSignedIn:"not-signed-in",StaleSession:"stale-session",InvalidInput:"invalid-input",InvalidResponse:"invalid-response",Network:"network",Timeout:"timeout",Aborted:"aborted",NotFound:"not-found",RetryUnavailable:"retry-unavailable",SubmissionStorage:"submission-storage",SubmissionStorageQuota:"submission-storage-quota",SubmissionConflict:"submission-conflict",OperationRetired:"operation-retired",QuestUpdated:"quest-updated",AttemptPending:"attempt-pending",RetryCooldown:"retry-cooldown",CompletionCooldown:"completion-cooldown",StaleQuiz:"stale-quiz",InvalidSubmission:"invalid-submission",InvalidCursor:"invalid-cursor",PointLedgerNotFound:"point-ledger-not-found",NotJoined:"not-joined",OutsideWindow:"outside-window",EnrollmentRequired:"enrollment-required",BudgetExhausted:"budget-exhausted",OfferNotFound:"offer-not-found",OfferPaused:"offer-paused",OfferLimitReached:"offer-limit-reached",OfferOutOfStock:"offer-out-of-stock",InsufficientPoints:"insufficient-points",Credential:"credential",WalletSigner:"wallet-signer",PrerequisitesIncomplete:"prerequisites-incomplete",QuestClosed:"quest-closed",QuestPaused:"quest-paused",ProfileLocked:"profile-locked",InvitationNotFound:"invitation-not-found",InvalidCode:"invalid-code",CodeExpired:"code-expired",ChallengeExpired:"challenge-expired",RateLimited:"rate-limited"},Ra=Symbol.for("@domino-sdk/relay.RelayError");var Pa=class extends Oa{name="RelayError";[Ra]=!0;window;missing;retryAt;constructor(e,n){super(e,n),this.window=n.window,this.missing=n.missing??[],this.retryAt=n.retryAt}};function $a(e,n,i={}){return new Pa(e,{...i,kind:"client",code:n})}var a=t().min(1).max(100).regex(/^[a-zA-Z0-9_-]+$/),Ca=Symbol("domino.response.tolerant-v1");function Lr(e){return Object.assign(e,{[Ca]:!0})}var ct=new WeakMap;function vc(e){for(let n of Object.keys(e)){let i=Object.getOwnPropertyDescriptor(e,n)?.get;if(!i)continue;let l=d=>(Object.defineProperty(e,n,{value:d,writable:!0,enumerable:!0,configurable:!0}),d);Object.defineProperty(e,n,{get:()=>l(i.call(e)),set:l,enumerable:!0,configurable:!0})}return e}function k(e){let n=ct.get(e);if(n)return n;let i=Object.create(Object.getPrototypeOf(e._zod.def),Object.getOwnPropertyDescriptors(e._zod.def));if(e instanceof qe){let d;Object.defineProperty(i,"shape",{get:()=>d??=Object.fromEntries(Object.entries(e.shape).map(([u,b])=>[u,k(b)])),configurable:!0,enumerable:!0}),Object.assign(i,{catchall:e._zod.def.catchall instanceof pr||!e._zod.def.catchall?void 0:k(e._zod.def.catchall)})}else e instanceof br?Object.assign(i,{checks:e._zod.def.checks?.filter(d=>{let u=d._zod.def;return u.check!=="less_than"||!("value"in u)||u.value===Number.MAX_SAFE_INTEGER||u.value===864e13})}):e instanceof Ye?Object.assign(i,{element:k(e.element),checks:[]}):e instanceof et?Object.assign(i,{options:e.options.map(k)}):e instanceof rt?Object.assign(i,{items:e._zod.def.items.map(k),rest:e._zod.def.rest?k(e._zod.def.rest):null}):e instanceof tt?Object.assign(i,{left:k(e._zod.def.left),right:k(e._zod.def.right)}):e instanceof st?Object.assign(i,{getter:()=>k(e._zod.def.getter())}):e instanceof nt?Object.assign(i,{valueType:k(e.valueType)}):e instanceof ot?Object.assign(i,{in:k(e.in),out:k(e.out)}):"innerType"in i&&i.innerType instanceof oe&&Object.assign(i,{innerType:k(i.innerType)});let l=dr(e,i);return ct.set(e,l),ct.set(l,l),l}function Ta(e){return k(e)}function Br(e){if(e instanceof qe)return e.shape;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof oe)return Br(e._zod.def.innerType)}function pt(e){if(e instanceof it)return[...e.values];if(e instanceof at)return e.options;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof oe)return pt(e._zod.def.innerType)}function M(e,n){if(e instanceof it)return typeof n=="string"&&[...e.values].every(i=>typeof i=="string")&&!e.values.has(n);if(e instanceof at)return typeof n=="string"&&!e.options.includes(n);if(e instanceof Ye&&Array.isArray(n))return n.some(i=>M(e.element,i));if(e instanceof rt&&Array.isArray(n))return n.some((i,l)=>{let d=e._zod.def.items[l]??e._zod.def.rest;return d?M(d,i):!1});if(e instanceof tt)return M(e._zod.def.left,n)||M(e._zod.def.right,n);if(e instanceof st)return M(e._zod.def.getter(),n);if(e instanceof nt&&n!==null&&typeof n=="object"&&!Array.isArray(n))return Object.entries(n).some(([i,l])=>M(e.keyType,i)||M(e.valueType,l));if(e instanceof et){let i=[...e.options];if(typeof n=="string"){let l=i.flatMap(d=>pt(d)??[]);if(l.some(d=>typeof d=="string")&&!l.includes(n))return!0}if(n!==null&&typeof n=="object"&&!Array.isArray(n)){let l=y(t(),ce()).parse(n),d=["kind","status","provider","input","type","mode"];for(let u of d){if(typeof l[u]!="string")continue;let b=i.map(S=>{let P=Br(S)?.[u];return P?pt(P):void 0});if(b.some(S=>!S))continue;let v=i.filter((S,P)=>b[P]?.includes(l[u]));if(!v.length)return!0;i=v}}return i.every(l=>M(l,n))}if(e instanceof qe&&n!==null&&typeof n=="object"&&!Array.isArray(n)){let i=y(t(),ce()).parse(n);return Object.entries(e.shape).some(([l,d])=>M(d,i[l]))||Object.entries(i).some(([l,d])=>!(l in e.shape)&&!!e._zod.def.catchall&&M(e._zod.def.catchall,d))}if(e instanceof ot){if(M(e.in,n))return!0;let i=ur(e.in,n);return i.success&&M(e.out,i.data)}return"innerType"in e._zod.def&&e._zod.def.innerType instanceof oe?M(e._zod.def.innerType,n):!1}function Ea(e){return Lr(_().transform((n,i)=>{let l=Ta(e),d=l.safeParse(n);if(d.success)return{kind:"supported",value:d.data};if(M(l,n))return{kind:"unsupported",raw:n};for(let u of d.error.issues)i.addIssue({...u});return F}))}function hc(e){return Lr(c(Ea(e)).transform(n=>({items:n,unsupportedCount:n.filter(i=>i.kind==="unsupported").length})))}var x=t().min(1).max(4096),yc=p({cursor:x.optional()});async function*kc(e){let n;do{let i=await e(n);yield*i.items,n=i.nextCursor??void 0}while(n!==void 0)}var jc=p({cursor:x.optional(),limit:O.number().int().min(1).max(100).default(50)}),qt=z(["google","apple","x","discord"]),Ma=r({provider:qt,configured:m(),status:z(["disconnected","connected","reconnect"]),subject:t().nullable(),revision:o().int().nonnegative()}),Sc=r({}).strict(),xc=r({channelId:t().regex(/^[0-9]{1,20}$/),messageId:t().regex(/^[0-9]{1,20}$/)}).strict(),wc=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:c(t().regex(/^[0-9]{1,20}$/)),joinedAt:t().datetime({offset:!0}).nullable(),pending:m()}),Ac=r({guildId:t(),channelId:t(),messageId:t(),userId:t(),content:t().nullable(),replyTo:t().nullable(),publishedAt:o()}).strict(),Rt=p({kind:s("discord-messages"),text:m().optional()}),Pt=p({kind:s("discord-reactions")}),Ua=r({guildId:t(),channelId:t(),messageId:t(),replyTo:t().nullable(),publishedAt:o()}),Ic=Ua.extend({text:t().nullable()}),Oc=r({guildId:t(),channelId:t(),messageId:t(),emoji:r({id:t().nullable(),name:t()}),reactorRoles:c(t()),messagePublishedAt:o()}),_a=p({kind:s("integration"),provider:s("discord"),action:s("grant-role"),roleId:t().regex(/^[0-9]{1,20}$/)}),Za=g([p({provider:s("discord"),resource:s("channel"),types:c(z(["text","announcement"])).min(1),postable:s(!0).optional()}),p({provider:s("discord"),resource:s("role"),assignable:m().default(!1)})]),Da=16,Na=32768,La=16,me=256,hr=g([t(),o().finite(),m(),se()]),$e=o().int().safe().nonnegative(),Ce=o().finite(),lt=()=>c(ze).min(1).max(La),ze=vr(()=>p({type:z(["object","array","string","number","integer","boolean","null"]).optional(),properties:y(t(),ze).refine(e=>Object.keys(e).length<=me,`An object schema lists at most ${me} properties`).optional(),required:c(t()).max(me).optional(),additionalProperties:g([m(),ze]).optional(),propertyNames:p({type:s("string"),enum:c(t()).max(me).optional()}).optional(),items:ze.optional(),minItems:$e.optional(),maxItems:$e.optional(),minLength:$e.optional(),maxLength:$e.optional(),minimum:Ce.optional(),maximum:Ce.optional(),exclusiveMinimum:Ce.optional(),exclusiveMaximum:Ce.optional(),enum:c(hr).min(1).max(me).optional(),const:hr.optional(),anyOf:lt().optional(),oneOf:lt().optional(),allOf:lt().optional()}));function Ba(e){let n=[[e,0]];for(;n.length;){let[i,l]=n.pop();if(!(typeof i!="object"||i===null)){if(l>=Da)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 d of Object.values(i))n.push([d,l+1])}}return new TextEncoder().encode(JSON.stringify(e)).byteLength>Na?"Tracker data schemas are at most 32 KB and 16 levels deep":null}var Qr=e=>[...e.anyOf??[],...e.oneOf??[],...e.allOf??[]],Qa=e=>e.properties!==void 0||e.items!==void 0||typeof e.additionalProperties=="object"||Qr(e).length>0;function gt(e,n,i){let l=Qr(e);if(i&&l.filter(Qa).length>1)return n;let d=[...Object.entries(e.properties??{}).map(([u,b])=>[b,`${n}.${u}`])];e.items&&d.push([e.items,n]),typeof e.additionalProperties=="object"&&d.push([e.additionalProperties,n]);for(let[u,b]of d){let v=gt(u,b,i);if(v)return v}for(let u of l){let b=gt(u,n,!0);if(b)return b}return null}var Kr=ce().superRefine((e,n)=>{let i=Ba(e);i&&n.addIssue({code:"custom",message:i,abort:!0})}).pipe(ze).refine(e=>e.type==="object","A tracker's record data is an object: declare it with z.object({ ... })").superRefine((e,n)=>{let i=gt(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`})}),yr={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"},Vr=new Set(["additionalProperties","items","propertyNames"]),Fr=new Set(["anyOf","oneOf","allOf"]),Ka=new Set(["type","properties","required","minItems","maxItems","minLength","maxLength","minimum","maximum","exclusiveMinimum","exclusiveMaximum","enum","const",...Vr,...Fr]),Va=new Set(["$schema","$id","$comment","title","description","default","examples","deprecated","readOnly","writeOnly"]);function ft(e){if(Array.isArray(e))return e.map(ft);if(typeof e!="object"||e===null)return e;let n=Object.fromEntries(Object.entries(e).map(([d,u])=>[d,ft(u)]));if(!Array.isArray(n.type))return n;let{type:i,...l}=n;return{anyOf:i.map(d=>d==="null"?{type:d}:{...l,type:d})}}function _e(e,n){if(typeof e!="object"||e===null||Array.isArray(e))return e;let i={};for(let[l,d]of Object.entries(e)){if(Object.hasOwn(yr,l))throw new Error(`Tracker data schemas cannot use ${l} (${n}): ${yr[l]}`);if(!Va.has(l)){if(!Ka.has(l))throw new Error(`Tracker data schemas cannot use the keyword ${l} (${n}): keep metadata to title, description, default and examples`);if(l==="properties"&&Object.hasOwn(d,"__proto__")||l==="required"&&d.includes("__proto__"))throw new Error(`Tracker data schemas cannot name a property __proto__ (${n})`);i[l]=l==="properties"?Object.fromEntries(Object.entries(d).map(([u,b])=>[u,_e(b,`${n}.${u}`)])):Vr.has(l)?_e(d,n):Fr.has(l)?d.map(u=>_e(u,n)):d}}return i}function qc(e){let n;try{n=mr(e,{target:"draft-2020-12",io:"input",unrepresentable:"throw",cycles:"throw",reused:"inline",override:({zodSchema:l,path:d})=>{let u=l._zod.def,b=["data",...d].join(".");if(u.type==="pipe"||u.type==="transform")throw new Error(`Tracker data schemas cannot transform values (${b}): records are stored as sent`);if(u.checks?.some(v=>v._zod.def.check==="custom"))throw new Error(`Tracker data schemas cannot use refinements (${b}): check the value in your evaluator`)}})}catch(l){let d=l instanceof Error?l.message:String(l);throw new Error(d.startsWith("Tracker data schemas")?d:`Tracker data schemas describe JSON: ${d}. Use z.unknown() for any JSON value.`)}let i=Kr.safeParse(_e(ft(n),"data"));if(!i.success)throw new Error(i.error.issues.map(l=>l.message).join("; "));return i.data}var Hr=25e4,Fa=6e6,Wr=class extends Error{};function Te(e,n){if(e.steps-=n,e.steps<0)throw new Wr}var Gr=64,Ha=256;function vt(e,n){return e.length>n?e.slice(0,n-1)+"\u2026":e}function Wa(e){let n=[];for(let i=e;i;i=i.parent)n.push(vt(String(i.key),Gr));return vt(["data",...n.reverse()].join("."),Ha)}var G=e=>e===null?"null":Array.isArray(e)?"an array":typeof e,dt=10;function Ga(e){let n=e.slice(0,dt).map(i=>JSON.stringify(i)).join(", ");return e.length>dt?`expected one of ${n}, or ${e.length-dt} more`:`expected one of ${n}`}var kr=new WeakMap,jr=new WeakMap;function Sr(e,n){let i=kr.get(e);return i||(i=new Set(n),kr.set(e,i)),i}function Ja(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 X(e,n,i,l){Te(l,1);let d=u=>({at:i,reason:u});if(e.const!==void 0&&n!==e.const)return d(()=>`expected ${JSON.stringify(e.const)}`);if(e.enum&&!Sr(e,e.enum).has(n)){let u=e.enum;return d(()=>Ga(u))}switch(e.type){case"null":if(n!==null)return d(()=>`expected null, got ${G(n)}`);break;case"boolean":case"string":if(typeof n!==e.type){let u=e.type;return d(()=>`expected a ${u}, got ${G(n)}`)}break;case"number":if(typeof n!="number")return d(()=>`expected a number, got ${G(n)}`);break;case"integer":if(!Number.isInteger(n))return d(()=>typeof n=="number"?"expected an integer":`expected an integer, got ${G(n)}`);break;case"array":if(!Array.isArray(n))return d(()=>`expected an array, got ${G(n)}`);break;case"object":if(typeof n!="object"||n===null||Array.isArray(n))return d(()=>`expected an object, got ${G(n)}`);break}if(typeof n=="string"){let{minLength:u,maxLength:b}=e;if(u!==void 0&&n.length<u)return d(()=>`expected at least ${u} characters`);if(b!==void 0&&n.length>b)return d(()=>`expected at most ${b} characters`)}if(typeof n=="number"){let u=[[e.minimum,b=>n>=b,"at least"],[e.exclusiveMinimum,b=>n>b,"more than"],[e.maximum,b=>n<=b,"at most"],[e.exclusiveMaximum,b=>n<b,"less than"]];for(let[b,v,S]of u)if(b!==void 0&&!v(b))return d(()=>`expected ${S} ${b}`)}if(Array.isArray(n)){let{minItems:u,maxItems:b}=e;if(u!==void 0&&n.length<u)return d(()=>`expected at least ${u} items`);if(b!==void 0&&n.length>b)return d(()=>`expected at most ${b} items`);if(e.items)for(let v=0;v<n.length;v++){let S=X(e.items,n[v],{parent:i,key:v},l);if(S)return S}}if(typeof n=="object"&&n!==null&&!Array.isArray(n)){let u=n,b=e.properties??{},v=e.required??[];Te(l,v.length);for(let E of v)if(!Object.hasOwn(u,E))return d(()=>`missing required key "${vt(E,Gr)}"`);let S=Ja(e);Te(l,S.length);for(let[E,V]of S)if(Object.hasOwn(u,E)&&u[E]!==V.const)return{at:{parent:i,key:E},reason:()=>`expected ${JSON.stringify(V.const)}`};let P=Object.keys(u);Te(l,P.length);let ie=e.propertyNames?.enum,Oe=ie&&Sr(e.propertyNames,ie);for(let E of P){if(Oe&&!Oe.has(E))return{at:{parent:i,key:E},reason:()=>"is not an allowed key"};let V=Object.hasOwn(b,E)?b[E]:e.additionalProperties;if(V===!1)return{at:{parent:i,key:E},reason:()=>"is not an allowed key"};if(V&&V!==!0){let lr=X(V,u[E],{parent:i,key:E},l);if(lr)return lr}}}for(let u of e.allOf??[]){let b=X(u,n,i,l);if(b)return b}if(e.anyOf&&!e.anyOf.some(u=>!X(u,n,i,l)))return d(()=>"matches none of the allowed shapes");if(e.oneOf){let u=0;for(let b of e.oneOf)if(!X(b,n,i,l)&&++u>1)return d(()=>"matches more than one of the allowed shapes");if(!u)return d(()=>"matches none of the allowed shapes")}return null}function Xa(e,n,i={steps:Hr}){try{let l=X(e,n,null,i);return l&&{kind:"mismatch",path:Wa(l.at),reason:l.reason()}}catch(l){if(l instanceof Wr)return{kind:"too-complex",path:"data",reason:"is too complex to validate against the tracker's schema"};throw l}}function Ya(e,n){let i={steps:Fa};return n.map(l=>{let d={steps:Math.min(Hr,i.steps)},u=d.steps,b=Xa(e,l,d);return i.steps-=u-Math.max(d.steps,0),b})}function ht(e){return e.flatMap(n=>n.anyOf||n.oneOf||n.allOf?ht([...n.anyOf??[],...n.oneOf??[],...n.allOf??[]]):[n])}var xr=e=>e.type===void 0&&e.properties===void 0&&e.const===void 0&&e.enum===void 0;function ei(e,n){let i=new Set(["string","number","boolean","null","object","array"]),l=[e];for(let u of n.split(".")){let b=[];for(let v of ht(l))if(xr(v))b.push({});else{if(v.type!=="object")continue;v.properties&&Object.hasOwn(v.properties,u)?b.push(v.properties[u]):v.additionalProperties===!0?b.push({}):v.additionalProperties&&b.push(v.additionalProperties)}if(!b.length)return null;l=b}let d=new Set;for(let u of ht(l)){if(xr(u))return i;u.type&&d.add(u.type==="integer"?"number":u.type);for(let b of[...u.const!==void 0?[u.const]:[],...u.enum??[]])d.add(b===null?"null":typeof b)}return d}function Rc(e){return{content:(n,i)=>e.content(n,i),summary:(n,i)=>e.summary(n,i),records:(async(n,i)=>{let l=await e.records(n,i),d=n.source,u=d?.kind==="custom"?d.data:void 0;if(!u)return l;let b=Ya(u,l.items.map(S=>S.data)),v=l.items.filter((S,P)=>!b[P]);return{...l,items:v,excluded:l.items.length-v.length}})}}function Pc(e,n){let i=n===void 0?[]:Array.isArray(n)?n:[n];for(let l of i){let d=ei(e,l.path);if(!d)return`The tracker filter reads data.${l.path}, which the tracker's data schema does not declare`;if(!("equals"in l?[typeof l.equals]:["number","string"]).some(b=>d.has(b)))return`The tracker filter compares data.${l.path} with ${"equals"in l?JSON.stringify(l.equals):"a number"}, but the field holds ${[...d].join(" or ")}`}return null}var ti="telegram-reactions",ri="telegram-messages",ni="youtube-shorts",ai="tiktok-videos",Jr="wallet-balances",Xr=t().trim().min(1).max(500),ii=/^(?:(?:\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 Yr(){return Pe.datetime({offset:!0,pattern:ii})}var w=o().int().safe().nonnegative().max(864e13),q=o().int().safe().nonnegative(),U=t().min(1).max(256),J=q.nullable().default(null),oi=le({id:U,userId:U,content:t(),createdAt:Yr(),author:le({id:U,username:t(),name:t(),verified:m().nullable().default(null)}),likeCount:J,replyCount:J,retweetCount:J,quoteCount:J,viewCount:J,bookmarkCount:J,isReply:m(),isRetweet:m(),isQuoteTweet:m()}),si=p({version:s(1),id:t().min(1),authorId:t().min(1),publishedAt:w,text:t(),isReply:m(),isRetweet:m(),isQuoteTweet:m(),media:c(p({type:t(),url:t()})).nullable(),mentionedAuthorIds:c(t().min(1)).nullable(),videoLengthSeconds:o().nonnegative().nullable(),references:p({replyId:t().nullable(),replyAuthorId:t().nullable(),quoteId:t().nullable(),quoteAuthorId:t().nullable(),repostId:t().nullable(),repostAuthorId:t().nullable()})}),ci=p({id:U,observation:t().regex(/^observation_[a-f0-9]{64}$/)}),$c=ci.extend({member:a}),mt={member:a,capturedAt:w},en=p({contentRevision:a,observation:a}),Cc=p({tracker:a,source:s("x"),evidence:en,content:si,observedAt:w,removed:m(),attribution:f("kind",[p({...mt,kind:s("linked"),account:p({provider:s("x"),issuer:t().min(1),subject:U,revision:q,linkedAt:w.nullable()})}),p({...mt,kind:s("unlinked")}),p({...mt,kind:s("different-author")})])}),li=["wallet","x","discord","member"],tn=fr(["app:",t().regex(/^[a-z0-9][a-z0-9_-]{0,39}$/,"Name an app identity kind like app:telegram: lowercase letters, digits, _ or -, at most 40")]),$t=g([z(li),tn]),Tc=e=>e.startsWith("app:"),fe=t().min(1).max(64),Ec=r({kind:fe,subject:U,revision:q,linkedAt:w.nullable()}),ve=t().regex(/^[a-zA-Z][a-zA-Z0-9_]{0,39}$/,"Name roles like author or recipient: a letter, then letters, digits or underscores"),Mc=["author","inReplyTo"],yt=e=>new Set(e).size===e.length,rn=t().regex(/^[a-z][a-zA-Z0-9]{0,39}$/,"Name metrics like likes or watchTime: a lowercase letter, then letters or digits"),di=["likes","replies","reposts","quotes","views","bookmarks"],mi=p({metrics:c(rn).max(10).refine(yt,"List each metric once")}),nn=p({chain:t().regex(/^(?:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp|eip155:[1-9][0-9]{0,15}|cosmos:[-_a-zA-Z0-9]{1,32})$/,'Use "solana", an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"'),token:t().min(1).max(128).nullable()}),te=r({kind:s("x-search"),query:t().trim().min(1).max(2e3)}).strict(),an=r({kind:s("custom"),namespace:a,identities:c($t).min(1).max(8).refine(yt,"List each identity kind once").optional(),accounts:c(ve).min(1).max(10).refine(yt,"List each account role once").refine(e=>!e.includes("author"),"author is every record's own role; name other accounts").optional(),data:Kr.optional(),content:mi.optional(),balance:nn.optional()}).strict().refine(e=>e.balance===void 0||e.namespace===Jr,"Only wallet.balances() samples a balance").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"),ui=f("kind",[te,an,Rt,Pt]),zi=["x-search","custom","discord-messages","discord-reactions"];function Uc(e){if(sn(e))switch(e.kind){case"x-search":return["x"];case"discord-messages":case"discord-reactions":return["discord"];case"custom":return e.identities}}function _c(e){switch(e.kind){case"x-search":return{metrics:di};case"custom":return e.content;case"discord-messages":case"discord-reactions":return}}var Ct=r({start:w,end:w.optional()}).strict().refine(e=>e.end===void 0||e.end>e.start,"End must follow start"),H=r({key:a,title:t().trim().min(1).max(120),source:ui,window:Ct,refreshSeconds:o().int().min(300).max(86400).default(21600),maxPages:o().int().min(1).max(1e3).default(60)}).strict(),Zc=g([H,r({code:t().min(1).max(2e6)}).strict()]),on=f("kind",[r(te.shape),r({...an.shape,identities:c(fe).optional()}),r(Rt.shape),r(Pt.shape)]),bi=g([on,r({kind:t().min(1).refine(e=>!zi.some(n=>n===e),"Known source kinds must match their schema")}).catchall(_())]);function sn(e){return on.safeParse(e).success}var pi=r({...H.shape,source:bi,window:r(Ct.shape)}),gi=r({id:a,version:a,definition:pi,publishedAt:w,actor:t().nullable()}),cn=r({archivedAt:o().int().nonnegative().nullable().optional(),published:gi,paused:m(),pauseReason:t().nullable().optional(),resumesAt:w.nullable().optional(),effectiveRefreshSeconds:o().int().positive().optional(),state:z(["idle","syncing","error","complete"]),lastStartedAt:w.nullable(),lastCompletedAt:w.nullable(),nextSyncAt:w.nullable(),coverage:z(["unknown","partial","complete"]),error:t().nullable(),records:q,origin:z(["code","data"]).optional()}),ln=f("kind",[te,Rt,Pt,p({kind:s("telegram-messages")}),p({kind:s("telegram-reactions")}),p({kind:s("youtube-shorts")}),p({kind:s("tiktok-videos")}),p({kind:s("wallet-balances"),...nn.shape})]),Dc=["x-search","discord-messages","discord-reactions","telegram-messages","telegram-reactions","youtube-shorts","tiktok-videos","wallet-balances"],wr={[ri]:"telegram-messages",[ti]:"telegram-reactions",[ni]:"youtube-shorts",[ai]:"tiktok-videos"};function Nc(e){if(sn(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===Jr?e.balance?{kind:"wallet-balances",...e.balance}:void 0:Object.hasOwn(wr,e.namespace)?{kind:wr[e.namespace]}:void 0}}var dn=r({title:H.shape.title,query:te.shape.query,window:Ct,refreshSeconds:H.shape.refreshSeconds.unwrap(),maxPages:H.shape.maxPages.unwrap()}).strict(),fi=dn.extend({key:a,refreshSeconds:H.shape.refreshSeconds,maxPages:H.shape.maxPages,actionId:a}).strict(),Lc=fi.extend({query:te.shape.query.optional(),source:ln.optional()}).refine(e=>e.query===void 0!=(e.source===void 0),"Name the source with source, or an X search with query, not both"),Bc=dn.partial().extend({source:ln.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"),Qc=r({actionId:a,action:z(["pause","resume","refresh"]),reason:Xr.optional()}).strict(),vi=p({kind:$t.optional(),id:U}),hi=r({id:U,occurredAt:w,observedAt:w,author:r({id:U,verified:m().nullable().default(null),kind:$t.optional()}).strict().nullable().default(null),accounts:y(ve,vi).refine(e=>Object.keys(e).length<=10,"At most 10 accounts").optional(),data:y(t(),_()),removed:m().default(!1)}).strict().refine(e=>new TextEncoder().encode(JSON.stringify(e.data)).byteLength<=131072,"Record exceeds 128 KB"),mn=r({kind:fe.optional(),id:t()}),yi=r({id:t(),occurredAt:w,observedAt:w,author:r({id:t(),verified:m().nullable().default(null),kind:fe.optional()}).nullable().default(null),accounts:y(t(),mn).optional(),data:y(t(),_()),removed:m().default(!1),source:t(),firstSeenAt:w,synthetic:s(!0).optional(),evidence:en.nullable().optional()}),Kc=r({actionId:a,records:c(hi).min(1).max(100)}).strict(),Vc=r({stored:q,admissions:r({admitted:q,skipped:q,filtered:q.optional()}).optional()}),Ar={quest:a,tracker:a,record:U,observedAt:w,release:a,account:t().nullable(),createdAt:w,updatedAt:w,actor:t().nullable()},Fc=["quest-paused","before-activation","outside-window","future-record","record-removed","invalid-record-data","content-unavailable","no-account","beneficiary-is-author","unlinked-account","ambiguous-account","not-joined","already-completed","not-enrolled","before-enrollment","historical","prerequisites-incomplete"],un=f("state",[r({...Ar,state:s("admitted"),code:se(),reason:se(),member:a,attempt:a}),r({...Ar,state:s("skipped"),code:t().min(1),reason:t(),window:z(["tracker","quest"]).optional(),member:a.nullable(),attempt:a.nullable()})]),zn={quest:a.optional(),record:U.optional(),member:a.optional(),state:z(["admitted","skipped"]).optional(),code:t().min(1).max(100).optional(),limit:O.number().int().min(1).max(100).default(25)},Hc=p({...zn,cursor:x.optional()}),Wc=r({items:c(un).max(100),nextCursor:x.nullable()}),Gc=p({...zn,before:t().max(512).optional()}),Jc=p({items:c(un).max(100),next:t().nullable()}),Xc=p({actionId:a,quest:a,record:U,observedAt:w}),ut=g([m(),z(["true","false"]).transform(e=>e==="true")]),Yc=r({author:U.optional(),member:a.optional(),verified:ut.optional(),since:O.number().int().safe().nonnegative().optional(),until:O.number().int().safe().nonnegative().optional(),removed:ut.default(!1),minLikes:O.number().int().safe().nonnegative().optional(),minViews:O.number().int().safe().nonnegative().optional(),limit:O.number().int().min(1).max(100).default(25),cursor:t().max(2048).optional(),includeEvidence:ut.optional()}).strict().refine(e=>e.since===void 0||e.until===void 0||e.until>e.since,"Until must follow since"),el=r({tracker:a,items:c(yi),nextCursor:t().nullable(),total:q,status:cn}),tl=r({records:q,authors:q,metrics:r({likes:q,replies:q,reposts:q,quotes:q,views:q,bookmarks:q}),missingMetrics:q,status:cn}),ki={pages:3,posts:100,days:30},rl=r({query:te.shape.query,since:w}).strict(),nl=r({query:t(),since:w,fetchedAt:w,pages:q,posts:c(oi).max(ki.posts),more:m()}),al=p({kind:z(["accept","reject","review","defer","progress","superseded"]),reason:t().nullable()}),ji=p({quest:a,member:a.optional(),content:t().min(1).max(256).optional(),cursor:x.optional()}),bn=p({quest:a,content:t(),member:a,release:a,attempt:a,revision:a,observation:a,current:m(),state:z(["pending","qualified","unqualified","needs-review","failed","superseded","stale","blocked","unavailable"]),reason:t().nullable(),reward:p({attempt:a.nullable(),completion:a.nullable(),state:z(["unresolved","awarded","excluded"])})}),il=p({items:c(bn),nextCursor:x.nullable()}),Ne=rn,Q=y(Ne,o().int().safe().nonnegative()),Si=p({metrics:c(Ne).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),maxAgeMs:o().int().positive().max(864e5).default(36e5)}),zt=864e5,xi=r({kind:s("count"),count:o().int().min(1).max(1e4)}).strict(),wi=f("kind",[r({kind:s("lifetime")}).strict(),r({kind:s("calendar"),period:z(["day","week","month"]),latenessMs:o().int().min(0).max(90*zt).default(7*zt)}).strict(),r({kind:s("rolling"),durationMs:o().int().min(1).max(365*zt)}).strict()]),Ai=r({kind:s("progress"),goal:xi,window:wi,repeat:z(["once","repeat"]).default("once")}).strict(),bt=r({id:a,ordinal:o().int().positive(),achievedAt:o().int(),window:t()}),pn=f("status",[bt.extend({status:s("revoked"),completion:a,revokedAt:o().int()}),bt.extend({status:s("awarded"),completion:a}),bt.extend({status:s("budget-exhausted"),budget:a})]),Ii=r({goal:o().int().positive(),current:o().int().nonnegative(),window:r({key:t(),start:o().int().nullable(),end:o().int().nullable()}),repeat:z(["once","repeat"]),settled:o().int().nonnegative(),latest:pn.nullable()}),Oi=r({id:a,distinct:t(),attempt:a,occurredAt:o().int(),recordedAt:o().int(),window:t(),status:z(["counted","late","future","excluded"]),achievement:pn.nullable(),reason:t().nullable()}),ol=r({items:c(Oi),nextCursor:t().nullable()}),sl=r({actionId:zr(),excluded:m(),reason:t().trim().min(1).max(2e3)}).strict(),cl=r({cursor:t().max(2e3).optional(),limit:O.number().int().min(1).max(100).optional()}).strict(),ll=r({excluded:m()}),Ir=o().int().safe(),kt=/^(?:[+-]|(?:Etc\/)?GMT[+-]\d|(?:EST|MST|HST)$)/i;function qi(e){let n;try{n=new Intl.DateTimeFormat("en",{timeZone:e}).resolvedOptions().timeZone}catch{return null}return n==="UTC"?"UTC":kt.test(e)||kt.test(n)?null:n}var gn=t().min(1).max(100).transform((e,n)=>{let i=qi(e);return i===null?(n.addIssue({code:"custom",message:kt.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"}),F):i}),be=t().min(1).max(100),fn=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 Ri(e,n){return jt(e)&&e.kind==="streak"&&"timeZone"in e&&n.addIssue({code:"custom",path:["timeZone"],message:fn("Streaks")}),e}function vn(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:fn("Calendar leaderboard windows")}),e}var re=z(["lifetime","day","week","month"]),dl=r({timeZone:be,today:t(),nextBoundary:Ir,pending:r({timeZone:be,effectiveAt:Ir}).nullable(),declared:be.nullable(),unsupported:t().nullable().default(null)}),ml=r({actionId:a,timeZone:gn,reason:t().trim().min(1).max(500)}).strict(),ul=r({timeZone:gn}).strict(),Pi=r({kind:s("streak"),days:o().int().min(1).max(3650)}),$i=r({goal:o().int().positive(),current:o().int().nonnegative(),best:o().int().nonnegative(),today:t(),todayQualified:m(),timeZone:be,nextBoundary:o().int(),pendingTimeZone:r({timeZone:be,effectiveAt:o().int()}).nullable(),days:c(r({day:o().int(),date:t(),timeZone:t(),occurredAt:o().int()})),milestone:f("status",[r({status:s("pending")}),r({status:s("awarded"),completion:t(),achievedAt:o().int()}),r({status:s("budget-exhausted"),budget:t(),achievedAt:o().int()})])}),B=o().int().safe().nonnegative().max(864e13),St=o().int().safe().nonnegative(),Ci=z(["new-record","new-observation","data-changed"]);function zl(e){return e==="custom"?"new-observation":"new-record"}var Ee=g([o().finite(),p({setting:t().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/)})]),Or=t().max(200).regex(/^[^.\s]+(\.[^.\s]+)*$/,"Use dot-separated keys, such as metrics.likes"),qr=g([p({path:Or,equals:g([t().max(1e3),o().finite(),m()])}),p({path:Or,gt:Ee.optional(),gte:Ee.optional(),lt:Ee.optional(),lte:Ee.optional()}).refine(e=>[e.gt,e.gte,e.lt,e.lte].some(n=>n!==void 0),"Compare with equals, gt, gte, lt or lte")]),Ti=g([qr,c(qr).min(1).max(10)]);function Ei(e){return e===void 0?[]:Array.isArray(e)?e:[e]}function bl(e){return Ei(e).flatMap(n=>"equals"in n?[]:[n.gt,n.gte,n.lt,n.lte].flatMap(i=>typeof i=="object"?[i.setting]:[]))}var Mi=z(["none","required"]),Ui=z(["activation","window","enrollment"]),_i=z(["staff","claim","automatic"]),Zi=p({tracker:a,source:t().min(1).max(100),on:Ci,where:Ti.optional(),beneficiary:ve,enrollment:Mi.optional(),since:Ui.optional(),historical:_i.optional(),content:s(!0).optional()}).refine(e=>e.since!=="enrollment"||e.enrollment==="required",'since: "enrollment" needs enrollment: "required"');function pl(e){return e.on}function gl(e){return{enrollment:e.enrollment??"none",since:e.since??"activation",historical:e.historical??(e.content?"claim":"staff")}}function fl(e){return e.beneficiary}var Rr={issuer:t().min(1),subject:t().min(1).max(256),revision:St,linkedAt:B.nullable()},Di=r({member:a,capturedAt:B,account:g([r({provider:s("wallet"),id:t().min(5).max(256),revision:St,linkedAt:B.nullable()}),r({provider:s("x"),...Rr}),r({provider:s("discord"),...Rr}),r({provider:s("member"),id:a}),r({provider:tn,subject:t().min(1).max(256),revision:St,linkedAt:B.nullable()}),r({provider:t().min(1)})])}),Ni=r({id:t().min(1).max(256),source:t(),occurredAt:B,observedAt:B,firstSeenAt:B,author:r({id:t().min(1).max(256),verified:m().nullable(),kind:fe.optional()}).nullable(),accounts:y(ve,mn).optional(),data:y(t(),_()),removed:m()}),Li=r({revision:a,observation:a,body:y(t(),_())}),vl=r({tracker:a,key:a,beneficiary:ve,record:Ni,content:Li.optional(),attribution:Di,enrolledAt:B.optional()}),Pr=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,Bi=/^[a-z0-9-]+$/;function Qi(e){return typeof e!="string"||e.length===0||e.length>$r||!Bi.test(e)?`Invalid reject code ${JSON.stringify(e)}: use lowercase letters, digits and hyphens, at most ${$r} characters, such as "wrong-answers"`:Pr.includes(e)?`Invalid reject code ${JSON.stringify(e)}: Relay writes it itself. A reject code cannot be ${Pr.join(", ")}`:null}var Ki=t().superRefine((e,n)=>{let i=Qi(e);i&&n.addIssue({code:"custom",message:i})}),Vi={quests:1e3,questTypes:200,collections:1e3},Me={modules:200,size:2e6},Fi=t().regex(/^[0-9a-f]{64}$/),Hi=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"),Tt=r({digest:Fi,sdkVersion:t().min(1).max(64)}).strict(),Wi=y(Hi,t().min(1)).refine(e=>{let n=Object.values(e);return n.length>0&&n.length<=Me.modules&&n.reduce((i,l)=>i+l.length,0)<=Me.size},`A runtime has 1 to ${Me.modules} modules and at most ${Me.size} characters of source`),hl=Tt.extend({zodVersion:t().min(1).max(64),modules:Wi}).strict();async function yl(e){let n=JSON.stringify(Object.entries(e).sort(([l],[d])=>l<d?-1:l>d?1:0)),i=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n));return[...new Uint8Array(i)].map(l=>l.toString(16).padStart(2,"0")).join("")}var Cr=t().regex(/^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,199}$/),Et=f("kind",[Pi,Ai,r({kind:s("once")}).strict(),r({kind:s("keyed")}).strict()]),xt=t().min(1).max(500),hn=r({id:Cr,scope:z(["member","project"]),period:re,limit:o().int().positive().max(Number.MAX_SAFE_INTEGER),cost:g([o().int().positive().max(Number.MAX_SAFE_INTEGER),r({balance:Cr}).strict()])}).strict(),Gi=hn.extend({scope:s("author")}).strict(),kl=r({quest:t().min(1).max(200),key:xt,completedAt:o().int().nonnegative().safe().nullable()}),jl=100,Ji=z(["discord","x"]),Xi=z(["discord"]),yn=r({id:t().regex(/^[0-9]{1,20}$/),name:t().min(1),icon:t().nullable()}),Sl=r({provider:Xi,configured:m(),status:z(["disconnected","ready","attention"]),revision:o().int().nonnegative(),server:yn.nullable(),issue:t().nullable(),connectedAt:o().default(0)}),xl=r({servers:c(yn)}),kn=["beneficiary","author","quest","points","rewards"],Yi=new Set(kn);function eo(e){let n=[],i="",l=0;for(;l<e.length;){let d=e[l];if(d==="{"&&e[l+1]==="{"){i+="{",l+=2;continue}if(d==="}"&&e[l+1]==="}"){i+="}",l+=2;continue}if(d==="}")return{error:"Write }} for a literal } in an announcement"};if(d!=="{"){i+=d,l+=1;continue}let u=e.indexOf("}",l),b=u===-1?"":e.slice(l+1,u);if(!Yi.has(b))return{error:`Unknown announcement placeholder {${b}}: use ${kn.map(v=>`{${v}}`).join(", ")}, or {{ for a literal {`};i&&(n.push({kind:"text",text:i}),i=""),n.push({kind:"placeholder",name:b}),l=u+1}return i&&n.push({kind:"text",text:i}),{segments:n}}var wl=r({login:m(),miniApp:m()}),Al=Ma.extend({provider:s("telegram")}),to=t().min(1,"Pass the Mini App's Telegram.WebApp.initData").max(8192),Il=r({initData:to,mode:z(["sign-in","connect"])}).strict(),jn=t().regex(/^-?[1-9][0-9]{0,19}$/,"Use the chat's numeric ID, such as -1001234567890"),ro=r({id:jn,type:t(),title:t(),username:t().nullable(),status:t(),issue:t().nullable(),canPost:m().optional(),connectedAt:o()}),Ol=r({configured:m(),bot:r({username:t()}).nullable(),chats:c(ro)}),ql=r({url:t(),expiresAt:o()}),Rl=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(),Pl=r({userId:t(),username:t().nullable(),status:de(e=>typeof e=="string"),isMember:m(),isAdmin:m(),untilDate:o().nullable()}),$l=r({chatId:t(),chatType:t(),messageId:o(),reactionType:t(),emoji:t().nullable(),customEmojiId:t().nullable(),reactorStatus:t(),reactorIsAdmin:m()}),Cl=r({chatId:t(),chatType:t(),messageId:o(),replyToMessageId:o().nullable(),threadId:o().nullable()}),no=t().trim().min(1).max(1e3).superRefine((e,n)=>{let i=eo(e);"error"in i&&n.addIssue({code:"custom",message:i.error})}),Sn={action:s("post-message"),text:no,replyToTriggeringMessage:m().optional()},ao=p({provider:s("telegram"),chat:jn,...Sn}),io=p({provider:s("discord"),channel:t().regex(/^[0-9]{1,20}$/),...Sn}),oo=f("provider",[ao,io]),Mt=t().min(32).max(44).regex(/^[1-9A-HJ-NP-Za-km-z]+$/),Le=z(["solana","eip155","cosmos"]),xn=/^cosmos:[-_a-zA-Z0-9]{1,32}$/,Ut=de(e=>typeof e=="string"&&xn.test(e),"Use a Cosmos network: cosmos:<chain ID>"),Tl=t().regex(/^[a-zA-Z][a-zA-Z0-9/:._-]{2,127}$/,"Use a Cosmos bank denomination such as uatom or uosmo");function El(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(!xn.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 Be="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",so=t().regex(/^0x[0-9a-fA-F]{40}$/),co=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,})$/),Ml=f("chain",[r({chain:s("solana"),address:Mt}).strict(),r({chain:s("eip155"),address:so,chainId:o().int().positive().safe().optional()}).strict(),r({chain:s("cosmos"),network:Ut,address:co}).strict()]),Ul=r({id:t().min(1).max(200),purpose:z(["link","sign-in"]),chain:Le,network:Ut.nullable(),address:t(),message:t().max(4096),expiresAt:o().int()}),_l=r({challenge:t().min(1).max(200),signature:t().min(1).max(256),publicKey:t().max(128).optional()}).strict(),Zl=r({chain:Le,network:Ut.nullable(),address:t(),verifiedAt:o().int().nonnegative(),revision:o().int().positive(),signIn:m()}),Dl=r({chain:Le,address:t().min(1).max(100)}).strict();async function Nl(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 $a("Choose the Cosmos chain for this wallet",qa.InvalidInput);return{chain:"cosmos",network:e.network,address:n}}}var Ll=5,wt=["solana","eip155","cosmos"],lo=z(wt),Bl=c(lo).max(wt.length).refine(e=>new Set(e).size===e.length,{message:"Duplicate wallet family"}).transform(e=>wt.filter(n=>e.includes(n)));function Ql(e){return e.chain}function Kl(e,n){if(e.chain==="cosmos"){if(!e.network||n&&n!==e.network)throw new Error("A Cosmos wallet belongs to its own network");return`${e.network}:${e.address}`}let i=n??(e.chain==="solana"?Be:"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}`}function _t(e){return/^eip155:[1-9][0-9]{0,15}$/.test(e)}var Vl=de(e=>typeof e=="string"&&_t(e),'Use an EVM chain ID such as "eip155:8453"'),T=t().regex(/^(0|[1-9][0-9]*)$/),Fl=k(r({chain:t(),token:t().nullable(),decimals:o().int().min(0).max(255).nullable(),total:T,wallets:c(r({address:t(),amount:T}).strict()),at:r({kind:z(["slot","block"]),number:T}).strict(),observedAt:o().int().nonnegative()}).strict()),Hl=r({amount:t(),decimals:o().int().min(0).max(255).nullable(),block:t()}),mo=/^(eip155:[1-9][0-9]{0,15})\/(erc721|erc1155):(0x[0-9a-fA-F]{40})(?:\/(0|[1-9][0-9]{0,77}))?$/,Tr=`${Be}/nft:`,uo=2n**256n-1n;function zo(e){if(e.startsWith(Tr)){let b=e.slice(Tr.length);return Mt.safeParse(b).success?{chain:Be,standard:"metaplex",mint:b}:null}let n=mo.exec(e);if(!n)return null;let[,i,l,d,u]=n;return l==="erc1155"!=(u!==void 0)||u!==void 0&&BigInt(u)>uo?null:{chain:i,standard:l,contract:d,tokenId:u??null}}function bo(e){return zo(e)!==null}var Wl=k(r({collection:t(),chain:t(),standard:z(["erc721","erc1155","metaplex"]),total:T,wallets:c(r({address:t(),count:T}).strict()),at:r({kind:z(["slot","block"]),number:T}).strict(),observedAt:o().int().nonnegative()}).strict()),wn=/^(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)?$/,po=/^bytes([1-9]|[12][0-9]|3[0-2])?$/;function go(e){let n=wn.exec(e);return n?`${n[1]}${n[2]??"256"}`:e==="address"||e==="bool"||e==="string"||po.test(e)?e:null}function Er(e){let n=/^([a-z0-9]+)(?:\s+[A-Za-z_$][A-Za-z0-9_$]*)?$/.exec(e.trim());return n?go(n[1]):null}function fo(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,l,d,u]=n,b=l.trim()?l.split(",").map(Er):[],v=u.includes(",")?null:Er(u);return b.length>16||b.some(S=>S===null)||!v||!(v==="bool"||v==="address"||wn.test(v))?null:{name:i,inputs:b,returns:v,mutability:d,signature:`function ${i}(${b.join(",")}) ${d} returns (${v})`}}function vo(e){let n=/^(eip155:[1-9][0-9]{0,15}):(0x[0-9a-fA-F]{40}) (function .+)$/.exec(e),i=n&&e.length<=400?fo(n[3]):null;return i?{chain:n[1],contract:n[2],function:i}:null}function ho(e){return vo(e)!==null}var An=t().regex(/^(0|-?[1-9][0-9]*)$/),Gl=k(r({call:t(),chain:t(),contract:t(),returns:t(),total:An.nullable(),wallets:c(r({address:t(),value:g([t(),m()])}).strict()),at:r({kind:z(["block"]),number:T}).strict(),observedAt:o().int().nonnegative()}).strict()),Jl=k(r({chain:t(),denom:t(),validator:t().nullable(),total:T,wallets:c(r({address:t(),amount:T}).strict()),validators:c(r({validator:t(),amount:T}).strict()),at:r({kind:z(["block"]),number:T}).strict(),observedAt:o().int().nonnegative()}).strict()),yo=/^(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*;?$/,ko=/^([a-z0-9]+(?:\[[0-9]*\])*)(\s+indexed)?\s+([A-Za-z_$][A-Za-z0-9_$]*)$/;function jo(e){let n=/^([a-z]+)([0-9]*)((?:\[[0-9]*\])*)$/.exec(e);if(!n)return null;let[,i,l,d]=n,u=l===""?256:Number(l),b=null;return l.startsWith("0")?null:(i==="uint"||i==="int"?b=u>=8&&u<=256&&u%8===0?i+u:null:i==="bytes"?b=l===""||u<=32?i+l:null:(i==="address"||i==="bool"||i==="string")&&l===""&&(b=i),b&&/^(\[([1-9][0-9]*)?\])?$/.test(d)?b+d:null)}function So(e){let n=yo.exec(e.trim());if(!n)return null;let[,i,l,d,u]=n,b=[];for(let S of u.trim()?u.split(","):[]){let P=ko.exec(S.trim()),ie=P&&jo(P[1]);if(!P||!ie||P[3]==="indexed"||b.some(Oe=>Oe.name===P[3]))return null;b.push({name:P[3],type:ie,indexed:!!P[2]})}let v=b.filter(S=>S.indexed);return v.length>3||!v.some(S=>S.type==="address")?null:{chain:i,contract:l,name:d,inputs:b,signature:`${d}(${b.map(S=>S.type).join(",")})`}}function xo(e){return So(e)!==null}var wo=1e3,Xl=720*60*60*1e3,Mr=g([t(),m()]),Ao=g([Mr,c(Mr)]),Yl=k(r({event:t(),chain:t(),contract:t(),since:o().int().nonnegative(),at:r({kind:z(["block"]),number:T}).strict(),finality:z(["finalized","safe"]),logs:c(r({wallet:t(),block:T,timestamp:o().int().nonnegative(),tx:t(),logIndex:o().int().nonnegative(),args:y(t(),Ao)}).strict()).max(wo),observedAt:o().int().nonnegative()}).strict());function Io(e){return Mt.safeParse(e).success}var In=y(t(),_()),Oo=r({program:t(),source:t(),idl:In}).strict(),ed=1e3,td=720*60*60*1e3,rd=k(r({program:t(),chain:t(),mint:t().nullable(),since:o().int().nonnegative(),at:r({kind:z(["slot"]),number:T}).strict(),complete:m(),transactions:c(r({wallet:t(),signature:t(),slot:T,timestamp:o().int().nonnegative(),signer:m().default(!1),programs:c(t()),balanceChanges:c(r({mint:t(),delta:An}).strict()),instructions:c(r({name:t(),args:y(t(),_()),accounts:y(t(),t())}).strict()).optional()}).strict()),observedAt:o().int().nonnegative()}).strict()),qo=r({required:m().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"),Ro=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"),Po=r({required:m().default(!0),allowedHosts:c(Ro).min(1).max(100).optional()}).strict(),On=r({kind:s("text"),value:t().max(1e4)}).strict(),qn=r({kind:s("url"),value:t().max(2048)}).strict(),nd=f("kind",[On,qn]);function ad(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 l=Rn(e.value);return l?n.constraints.allowedHosts&&!n.constraints.allowedHosts.some(d=>d.toLowerCase()===l.hostname.toLowerCase())?`Use a URL hosted on: ${n.constraints.allowedHosts.join(", ")}`:null:"Enter a valid HTTP or HTTPS URL without credentials"}function Rn(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 id(e){let n=Rn(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 Zt=t().regex(/^[a-zA-Z0-9_-]+$/).max(100),$o=r({id:Zt,label:t().trim().min(1).max(500)}).strict(),Pn=r({id:Zt,prompt:t().trim().min(1).max(1e3),choices:c($o).min(2).max(8).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Choice IDs must be unique")}).strict(),Co=c(Pn).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Question IDs must be unique"),Dt=c(Pn.extend({correct:Zt}).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"),$n=g([p({provider:s("domino"),resource:s("point-ledger")}),Za]),od=r({source:$n,query:t().max(100).optional(),cursor:t().regex(/^\d{1,6}$/).optional(),ids:c(t().min(1).max(100)).max(50).optional()}).strict(),sd=r({revision:o().int(),options:c(r({id:t(),label:t(),description:t().optional(),group:t().optional(),disabledReason:t().optional()})),nextCursor:t().nullable().default(null),cursor:t().nullable()}),Cn=Yr().transform(e=>new Date(e).toISOString()),At=g([s(""),t().regex(/^\S{1,200}$/)]),L={label:t().min(1),description:t().optional()},To=f("kind",[r({...L,kind:s("point-ledger"),default:a.or(s(""))}).strict(),r({...L,kind:s("datetime"),default:Cn}).strict(),r({...L,kind:s("resource"),default:At,source:$n}).strict(),r({...L,kind:s("quiz"),default:Dt}).strict(),r({...L,kind:s("text"),default:t(),minLength:o().int().nonnegative(),maxLength:o().int().positive(),multiline:m(),picker:t().optional(),decimals:o().int().min(0).max(255).optional()}).strict(),r({...L,kind:s("integer"),default:o().int(),min:o().int(),max:o().int()}).strict(),r({...L,kind:s("boolean"),default:m()}).strict(),r({...L,kind:s("choice"),default:t(),options:c(t().min(1)).min(1)}).strict()]),Eo=y(t().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/),To),Y=y(t(),g([t(),o().finite(),m(),Dt]));function Mo(e){return e.length<=100&&/^(0|[1-9][0-9]*)$/.test(e)}function Uo(e){return e==="solana"||e===Be||_t(e)}function cd(e){return e?.kind==="integer"||e?.kind==="text"&&e.picker==="amount"}function _o(e){let n=t().min(e.minLength).max(e.maxLength);switch(e.picker){case"amount":return n.refine(Mo,"Use a whole number of base units, such as 1000000");case"chain":return n.refine(Uo,'Use "solana" or an EVM chain ID such as "eip155:8453"');case"nft":return n.refine(bo,'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 mint>"');case"contract-call":return n.refine(ho,`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(xo,'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(Io,'Use a Solana program address in base58, such as "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"');default:return n}}function ld(e,n){let i={};for(let[l,d]of Object.entries(e))switch(d.kind){case"point-ledger":i[l]=At.default(d.default);break;case"datetime":i[l]=Cn.default(d.default);break;case"resource":i[l]=At.default(d.default);break;case"quiz":i[l]=Dt.default(d.default);break;case"text":i[l]=_o(d).default(d.default);break;case"integer":i[l]=o().int().min(d.min).max(d.max).default(d.default);break;case"boolean":i[l]=m().default(d.default);break;case"choice":i[l]=z(d.options).default(d.default);break}return Y.parse(r(i).strict().parse(n))}function dd(e,n){return Object.entries(e).filter(([i,l])=>(l.kind==="resource"||l.kind==="point-ledger")&&!n[i]).map(([i])=>i)}function md(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 ne={key:a};function ud(e){if("id"in e)throw new Error("Authoring definitions use key, not id");return a.parse(e.key)}var ee=o().int().safe().nonnegative(),Nt=r({from:ee,until:ee}).strict().refine(e=>e.until>e.from,{message:"Window end must follow its start",path:["until"]}),Ze=r({key:a,title:t().trim().min(1).max(120),window:Nt.optional(),enrollment:z(["none","required"]).default("none")}).strict(),Zo=Ze.omit({key:!0,title:!0}).extend({...ne,title:t().trim().min(1).max(120).optional()}).strict().transform(e=>{let n=e;return Ze.parse({...n,title:e.title??n.key})});function zd(e){return Zo.parse(e)}var Do=Ze.extend({enrolledAt:ee.nullable(),withdrawnAt:ee.nullable().default(null),withdrawalReason:t().nullable().default(null)}),Tn=r({actionId:a,campaign:a}).strict(),bd=Tn.extend({member:a}),No=Tn,pd=No.extend({member:a,reason:t().trim().min(1).max(500)}),gd=r({campaign:a,member:a,enrolledAt:ee,withdrawnAt:ee.nullable().default(null),withdrawalReason:t().nullable().default(null)});function he(e,n){return n}var fd=a.or(s("")).brand();function Lo(e){return typeof e=="string"?e:e.key}var Ur=r({key:a,title:t().trim().min(1).max(120)}).strict(),Bo=Ur.omit({key:!0,title:!0}).extend({...ne,title:t().trim().min(1).max(120).optional()}).strict().transform(e=>Ur.parse({...e,title:e.title??e.key}));function vd(e){return he("group",Bo.parse(e))}function Qo(e){return a.parse(e.key)}var En=t().trim().min(1).max(120),Mn=t().trim().min(1).max(1e3),It=o().int().nonnegative().max(864e13),hd=r({actionId:a,key:a,title:En}).strict(),yd=r({title:En}).strict(),kd=r({actionId:a,member:a,reason:Mn}).strict(),jd=r({actionId:a,reason:Mn}).strict(),Sd=r({reason:Xr.optional()}).strict(),xd=p({cursor:x.optional(),limit:o().int().min(1).max(100).optional()}),Ko=r({key:a,title:t(),members:o().int().nonnegative(),createdAt:It,archivedAt:It.nullable()}),wd=r({items:c(Ko),nextCursor:x.nullable()}),Vo=r({member:a,addedAt:It.nullable()}),Ad=r({items:c(Vo),nextCursor:x.nullable()}),Un=o().int().safe().nonnegative(),_n=Un.positive(),Zn=f("scope",[r({kind:s("completion"),quest:a,scope:s("ever")}).strict(),r({kind:s("completion"),quest:a,scope:s("period"),period:re.exclude(["lifetime"])}).strict()]),Dn=r({kind:s("balance"),balance:a,minimum:_n}).strict(),Nn=r({kind:s("group"),group:a,title:t()}).strict(),Lt=f("kind",[Zn,Dn,Nn]),ye=g([r({kind:s("completion"),quest:a,title:t(),scope:s("ever")}),r({kind:s("completion"),quest:a,title:t(),scope:s("period"),period:re.exclude(["lifetime"]),resetsAt:o().int().safe()}),r({kind:s("balance"),balance:a,title:t(),minimum:_n,current:Un}),r({kind:s("group"),group:a,title:t()})]);function Id(e,n={}){let i=e.key;return Zn.parse({kind:"completion",quest:i,scope:n.scope??"ever",..."period"in n?{period:n.period}:{}})}function Od(e,n){return Dn.parse({kind:"balance",balance:Lo(e),minimum:n})}function qd(e){return Nn.parse({kind:"group",group:Qo(e),title:e.title})}var ke=2147483647,je=r({kind:s("points").default("points"),balance:a,amount:o().int().min(0).max(ke)}).strict(),Bt=r({badge:a.optional(),group:a.optional(),id:a,title:t().min(1).max(120),tiers:c(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:f("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"),Rd=r({id:a,key:a.nullable()}),K=r({kind:s("tier"),reward:Bt,tier:a}).strict().refine(e=>e.reward.tiers.some(n=>n.id===e.tier),"Unknown reward tier"),Fo=K.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"}),F):{...e,reward:{...e.reward,badge:i}}});function Pd(e,n){return Fo.parse({kind:"tier",tier:"awarded",reward:{id:e,badge:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var Ho=K.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"}),F):{...e,reward:{...e.reward,group:i}}});function $d(e,n){return Ho.parse({kind:"tier",tier:"awarded",reward:{id:e,group:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var Wo=_a,Ot=g([je,K,Wo]);function Qt(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 Ln=g([r({kind:s("manual"),input:s("text"),constraints:qo,actor:z(["member","staff"]).optional()}).strict(),r({kind:s("manual"),input:s("url"),constraints:Po,actor:z(["member","staff"]).optional()}).strict(),r({kind:s("manual"),input:z(["photo","quiz","none"]),actor:z(["member","staff"]).optional()}).strict(),r({kind:s("automatic"),tracker:Zi.optional()}).strict()]),Go=g(Ln.options.map(e=>e.strip())),Bn=r({kind:z(["pass","fail","unclear"]),reason:t().min(1).max(2e3)}).strict(),Cd=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(),Td=Bn,_r={minRetryAfterMs:1e3,maxRetryAfterMs:36e5,retryAfterMs:6e4,horizonMs:864e5,maxDefers:100},Zr={minMs:1e3,maxMs:6048e5},Dr=o().int().min(Zr.minMs).max(Zr.maxMs),Kt=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"}),Ed=f("kind",[p({kind:s("defer"),reason:t().min(1).max(2e3),retryAfterMs:o().int().min(_r.minRetryAfterMs).max(_r.maxRetryAfterMs).optional(),until:o().int().safe().nonnegative().optional()}),Kt.safeExtend({kind:s("progress")}).strict(),r({kind:s("accept"),rewards:c(Ot).max(10),completionKey:xt.optional()}).strict(),r({kind:s("reject"),reason:t().min(1).max(2e3),code:Ki.optional(),requestedReview:s(!0).optional()}).strict(),r({kind:s("review"),reason:t().min(1).max(2e3),rewards:c(Ot).max(10).optional(),completionKey:xt.optional()}).strict()]),Jo=z(["workers-ai"]),Xo=z(["fixture-pass","fixture-fail","fixture-unclear","fixture-error","workers-ai"]),Vt=c(Ot).max(10).refine(e=>new Set(e.map(Qt)).size===e.length,"Use one entry per balance or shared reward"),pe=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 /"),Yo=f("kind",[r({kind:s("link"),url:pe.refine(e=>e.startsWith("https://"),"Use an HTTPS URL"),label:t().trim().min(1).max(120)}).strict()]),es=r({title:t().trim().min(1).max(120),description:t().max(4e3).optional(),action:Yo.optional()}).strict(),ts=f("kind",[r({kind:s("account"),provider:qt}).strict(),r({kind:s("wallet"),chain:Le.optional()}).strict()]),De=r({steps:c(es).max(30).optional(),image:pe.optional(),imageAlt:t().max(500).optional(),requirements:c(ts).max(10).optional()}).strict(),Qn=De.extend({quiz:Co.optional(),instructions:t().max(4e3).optional(),video:r({url:pe,poster:pe.optional(),captions:r({url:pe,language:t().min(2).max(20),label:t().min(1).max(80)}).strict().optional()}).strict().optional()}).strict(),rs=r({visible:m()}).strict(),ns=2,as=s(ns),Kn=r({quest:a,evaluatorProtocol:as,title:t().min(1).max(120),presentation:Qn.default({}),integrations:c(Ji).max(10).default([]),fields:Eo,values:Y,rewards:Vt,announcements:c(oo).max(3).optional(),humanReview:m(),trigger:Ln,performance:Si.optional(),requires:c(Lt).max(30).default([]),campaign:Ze.optional(),availability:Nt.optional(),completion:Re(Ri,Et),visibility:z(["visible","hidden"]).default("visible"),profile:rs.default({visible:!1}),budgets:c(hn).max(20).default([]),authorBudgets:c(Gi).max(20).optional(),retryCooldownMs:Dr.optional(),completionCooldownMs:Dr.optional()}).strict(),is=r({code:t().min(1).max(1e6)}).strict(),os=is.extend({runtime:Tt.optional(),settings:Y,provider:Jo,expectedRelease:a.nullable().optional(),settingRenames:y(t(),t()).optional()}).strict(),Md=r({releases:c(os).min(1).max(Vi.quests)}).strict(),Ud=r({quest:a,expectedRelease:a,set:Y,reset:c(t()),presentation:De.nullable().optional(),solanaIdls:y(t(),In.nullable()).optional()}).strict(),ss=Kn.extend({completion:Et}),cs=k(ss.extend({key:a.optional(),code:t(),runtime:Tt.optional(),provider:Xo,id:a,createdAt:o(),origin:r({typeVersion:a}).strict().optional(),lifecycle:z(["active","paused","archived"]).default("active"),configuration:r({defaults:Y,overrides:Y,preserved:c(t()),presentation:De.optional(),presentationDefaults:De.optional()}).strict().optional(),solanaIdls:y(t(),Oo).optional()})),_d=r({code:t(),definition:Kn}),ls=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)))),ds=r({kind:s("quiz"),release:a.optional(),answers:ls}).strict(),Qe=g([ds,On,qn]),Zd=r({actionId:a,quest:a,member:a,evidence:a.optional(),input:Qe.optional(),release:a.optional(),faultAfterReview:m().optional()}).strict(),Dd={Queued:"queued",Evaluating:"evaluating",Deferred:"deferred",Accepted:"accepted",Progressed:"progressed",Rejected:"rejected",NeedsReview:"needs-review",Failed:"failed"},ms=t(),Ke=r({id:a,release:a,quest:a,member:a,evidence:a.nullable(),input:Qe.optional(),status:ms,reason:t().nullable(),retries:o(),generation:o(),completion:t().nullable(),reviewRewards:Vt.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),progress:Kt.nullable().default(null),requestedReview:m().default(!1),createdAt:o()}),Nd={Open:"open",Submitted:"submitted",Discarded:"discarded",Expired:"expired"},us=t(),zs=k(r({id:a,quest:a,member:a,release:a.nullable(),input:Qe.nullable(),evidence:a.nullable(),reviewRequired:m(),status:us,attempt:a.nullable(),createdAt:o(),updatedAt:o(),expiresAt:o()})),Ld=r({release:a.nullable().optional(),input:Qe.nullable().optional(),evidence:a.nullable().optional()}).strict(),Bd=k(r({submission:zs,attempt:Ke,replayed:m()})),bs=r({id:o(),attempt:t().nullable(),kind:t(),detail:t(),actor:t().nullable().default(null),at:o()}),ps=r({item:a,revision:o().int().nonnegative()}).strict(),ge=r({item:a,label:t().min(1).max(80)}).strict(),gs=f("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),tiers:c(r({tier:a,variants:c(ge).min(1).max(100)}).strict()).min(1).max(100)}).strict()]),Qd=r({reward:Bt,revision:o().int().nonnegative(),policy:gs}),Kd=f("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),revision:o().int().nonnegative(),variants:c(ge.extend({available:o().int().nonnegative()}))}).strict()]),Vd=r({reward:a,revision:o().int().nonnegative(),actionId:a,policy:f("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),tiers:c(r({tier:a,variants:c(ge.extend({item:a.optional()})).min(1).max(100)}).strict()).min(1).max(100)}).strict()])}).strict(),Vn=r({completion:a,reason:t(),flaggedAt:o(),remainingTier:a.nullable()}),Ue={id:a,member:a,reward:Bt,earnedTier:a,tier:a,revision:o().int().positive()},Fd=f("status",[r({...Ue,status:s("available")}).strict(),r({...Ue,status:s("handing-over"),handover:a,startedAt:o(),allocation:ge.optional()}).strict(),r({...Ue,status:s("collected"),handover:a,startedAt:o(),allocation:ge.optional(),collectedAt:o(),recovery:Vn.optional()}).strict(),r({...Ue,status:s("void"),voidedAt:o()}).strict()]),fs=r({id:a,title:t(),tiers:c(r({id:a,title:t()}).loose()),inventory:r({kind:t()}).loose(),fulfillment:r({kind:t()}).loose()}).loose(),ue={id:a,member:a,reward:fs,earnedTier:a,tier:a,revision:o().int()},Nr=r({item:a,label:t()}).loose(),Fn=g([f("status",[r({...ue,status:s("available")}).loose(),r({...ue,status:s("handing-over"),handover:a,startedAt:o(),allocation:Nr.optional()}).loose(),r({...ue,status:s("collected"),handover:a,startedAt:o(),allocation:Nr.optional(),collectedAt:o(),recovery:Vn.optional()}).loose(),r({...ue,status:s("void"),voidedAt:o()}).loose()]),r({...ue,status:t()}).loose().transform(({status:e,...n})=>({...n,status:"unsupported",reportedStatus:e}))]),Hd=r({actionId:a,revision:o().int().positive(),selection:ps.optional()}).strict(),Wd=r({actionId:a,handover:a}).strict(),Gd=r({actionId:a,revision:o().int().positive(),reason:t().trim().min(1).max(500)}).strict(),Jd={Quest:"quest",Leaderboard:"leaderboard"},vs=t().min(1).max(64),hs=r({kind:vs,id:a}),ys=r({key:t().default("once"),id:a,quest:a,member:a,source:hs.optional()}),ks=f("kind",[r({kind:s("available"),input:z(["photo","quiz","none","text","url"])}).strict(),r({kind:s("completed")}).strict(),r({kind:s("locked"),missing:c(ye).min(1)}).strict(),r({kind:s("blocked"),reason:z(["budget-exhausted","connection-required","wallet-required","paused","outside-window","enrollment-required"]),window:z(["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()]),js=g(ks.options.map(e=>e.strip())),Ss=r({id:a,scope:z(["member","project"]),period:z(["day","week","month","lifetime"]),remaining:o().int().safe().nonnegative(),resetsAt:o().int().safe().nullable()}),Xd=k(r({member:a,quests:c(r({quest:a,key:a.optional(),release:a.optional(),title:t(),presentation:Qn.default({}),connections:c(qt).default([]),trigger:Go,availability:js,completed:m(),completion:Et.default({kind:"once"}),streak:$i.nullable().optional(),counter:Ii.nullable().optional(),progress:Kt.nullable().default(null),completionCount:o().int().nonnegative().default(0),visibility:z(["visible","hidden"]).default("visible"),missing:c(ye),campaign:Do.nullable().default(null),window:Nt.nullable().default(null),budgets:c(Ss).default([]),retryAt:o().int().safe().optional(),nextAvailableAt:o().int().safe().optional(),attempt:Ke.nullable()})),entitlements:c(Fn)})),Yd=k(r({releases:c(cs),completions:c(ys),entitlements:c(Fn),attempts:c(Ke),balances:c(r({member:t(),balance:t(),earned:o(),held:o(),available:o()})),events:c(bs)})),em=r({id:a,member:a,type:z(["image/jpeg","image/png"]),size:o()}),tm=r({error:t(),code:t().optional(),window:z(["tracker","quest"]).optional(),missing:c(ye).optional(),retryAt:o().int().safe().optional()}),rm=r({actionId:a,generation:o().int().nonnegative(),decision:z(["accept","reject"]),reason:t().trim().min(1).max(2e3)}).strict(),nm=r({actionId:a,reason:t().trim().min(1).max(2e3)}).strict(),am=r({item:a,quantity:o().int().min(0).max(1e4)}).strict(),im=r({actionId:a,member:a,item:a,balance:a,price:o().int().positive().max(1e4)}).strict(),Hn={limit:o().int().min(1).max(100).default(25),cursor:t().min(1).max(4096).optional()},om=r({...Hn,member:a.optional(),quest:a.optional()}).strict(),sm=r({...Hn,prefix:a.optional()}).strict(),xs=r({attempt:Ke,title:t(),checks:c(r({criteria:t(),result:Bn}))}),cm=r({items:c(xs).max(100),nextCursor:t().nullable()}),lm=r({items:c(r({member:a})).max(100),nextCursor:t().nullable()}),dm=r({actionId:a,name:t().trim().min(1).max(80)}).strict(),mm=r({id:a,name:t()}),um=p({contentAttempt:a,observation:a,observedAt:o().int().safe().nonnegative(),metrics:Q,rewards:Vt}),zm=ji.extend({content:t().min(1).max(256)}),bm=p({current:p({state:z(["content-pending","content-unqualified","waiting","pending","qualified","unqualified","needs-review","failed","superseded"]),reason:t().nullable(),contentAttempt:a,attempt:a.nullable(),reward:bn.shape.reward}),items:c(p({attempt:a,contentAttempt:a,observation:a,observedAt:o(),metrics:Q,state:z(["pending","qualified","unqualified","needs-review","failed","superseded"]),reason:t().nullable()})),nextCursor:x.nullable()});var Ht=r({name:t().trim().min(1).max(120),description:t().trim().max(1e3).default("")}).strict(),ym=Ht.extend({actionId:a,key:a.optional()}).strict(),ws=Ht.extend({id:a}),km=ws.extend({archivedAt:o().int().nonnegative().nullable()}),As=Ht.extend({key:a}).strict(),jm=g([As,r({code:t().min(1).max(2e6)}).strict()]),Is=r({id:a,key:a.nullable(),name:t()}),Ve=o().int().safe(),Os=r({ledger:Is,balance:Ve,available:Ve}),Sm=r({items:c(Os)}),xm={Award:"award",Spend:"spend",Adjust:"adjust",Reverse:"reverse"},qs=t().min(1).max(64),Wt=r({id:a,amount:Ve,kind:qs,at:Ve.nonnegative(),quest:a.nullable(),reverses:a.nullable(),imported:m().optional()}),wm=p({ledger:a,cursor:x.optional()}),Am=r({items:c(Wt),nextCursor:x.nullable()}),N=o().int().nonnegative().safe(),Gn=z(["private","participants","public"]),Fe=z(["x","discord","google"]),Wn=z(["x","discord"]),Rs=c(Wn).max(Wn.options.length).refine(e=>new Set(e).size===e.length,"List each provider once"),Ft=t().min(1).max(100),Ps=f("source",[r({source:s("upload"),url:t().url(),seed:Ft}),r({source:s("account"),provider:Fe,url:t().url(),seed:Ft}),r({source:s("generated"),seed:Ft})]),Gt=r({id:a,name:t(),avatar:Ps}),$s=/[\p{Cc}؜᠎​-‏‪-‮⁠-⁤⁦-⁩]/u,Cs=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=>!$s.test(e),"Use visible characters only")),Im=r({displayName:Cs.nullable().optional(),avatar:f("source",[r({source:s("account"),provider:Fe}).strict(),r({source:s("generated")}).strict()]).nullable().optional(),hidden:m().optional()}).strict().refine(e=>Object.values(e).some(n=>n!==void 0),"Change at least one field"),Ts=Gt.extend({displayName:t().nullable(),avatarChoice:z(["default","upload","account","generated"]),avatarProvider:Fe.nullable(),hidden:m(),locked:m(),visibility:Gn,options:c(r({provider:Fe,name:t().nullable(),givenName:t().nullable().default(null),imageUrl:t().url().nullable()}))}),Jn=t().min(1).max(512),Om=r({limit:O.number().int().min(1).max(100).default(20),cursor:Jn.optional()}).strict(),Es=r({quest:a,key:a.optional(),title:t(),completions:N.positive(),lastCompletedAt:N.nullable()}),qm=r({items:c(Es),nextCursor:Jn.nullable()}),Rm=r({program:a,key:a.optional(),title:t(),invited:N,qualified:N,milestones:c(r({id:a,count:N,reached:m()}))}),Ms=r({visibility:Gn,defaults:Rs,revision:N,actor:t().nullable(),updatedAt:N.nullable()}),Pm=Ms.omit({revision:!0,actor:!0,updatedAt:!0}).extend({actionId:a,expectedRevision:N,reason:t().trim().min(1).max(500)}).strict(),$m=r({actionId:a,resetName:m().default(!1),removeAvatar:m().default(!1),lock:m().optional(),reason:t().trim().min(1).max(1e3)}).strict().refine(e=>e.resetName||e.removeAvatar||e.lock!==void 0,"Choose an action"),Cm=Ts.omit({options:!0}).extend({member:a,lockedAt:N.nullable(),lockedBy:t().nullable(),lockedReason:t().nullable(),updatedAt:N}),Tm=5*1024*1024,Em=["image/jpeg","image/png","image/webp"];var ea=r({name:t().trim().min(1).max(120),description:t().trim().max(1e3).default(""),image:t().url().max(2048)}).strict(),ta=ea.extend({key:a}).strict(),ra=ea.extend({id:a,key:a.nullable()}).strip(),Zm=ra.extend({archivedAt:o().int().nonnegative().nullable()}),Dm=ta.extend({actionId:a}).strict(),Nm=g([ta,r({code:t().min(1).max(2e6)}).strict()]),Us=r({badge:ra,awardedAt:o().int().nonnegative()}),Lm=r({items:c(Us)}),Bm=r({actionId:a,reason:t().trim().min(1).max(1e3)}).strict(),Qm=r({badge:a,member:a,awarded:m(),changed:m()}),A=o().int().safe().nonnegative(),na=p({scope:z(["member","project"]),period:re,limit:A}),er=p({key:a,qualifiedBy:a,balance:a,metrics:c(Ne).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:c(na).max(8).default([]).refine(e=>new Set(e.map(n=>n.scope+":"+n.period)).size===e.length,"Give each scope and period one budget")}),Km=p({metrics:Q,baseline:Q}),Vm=p({target:A,baseline:A}),aa=p({actionId:a,code:t().min(1).max(1e6)}),Se=p({version:a,definition:er,publishedAt:A}),Fm=p({rule:a,content:t().min(1).max(256),member:a.optional(),cursor:x.optional()}),ia=p({id:a,day:t(),observation:a,qualification:a,earned:A,growth:A,paid:A,excluded:A,entry:a.nullable(),createdAt:A}),Hm=p({rule:Se,account:p({member:a,earned:A,accounted:A,paid:A,excluded:A,pending:A,counters:Q,baseline:Q,observation:a.nullable(),nextSettlementAt:A.nullable(),reason:t().nullable()}).nullable(),items:c(ia),nextCursor:x.nullable()}),Wm=p({code:t().min(1).max(1e6)}),Gm=aa.extend({expectedVersion:a,previewHash:a}),He=t().regex(/^(0|[1-9][0-9]*)$/),_s=p({rule:a,fromVersion:a,toVersion:a,previewHash:a,definition:er,boundary:s("available-eligible-observation"),settlement:s("deferred"),summary:p({knownAdmissions:A,accounts:A,uninitialized:A,pendingTransitions:A,earned:He,paid:He,excluded:He,pending:He})}),Zs=Se.extend({previousVersion:a.nullable()}),Jm=r({items:c(r({version:a,definition:r({...er.shape,budgets:c(r(na.shape)).max(8).default([])}),publishedAt:A,previousVersion:a.nullable()})),nextCursor:x.nullable()}),Xm=p({items:c(Zs),next:A.nullable()}),Ym=p({rule:a,before:O.number().int().positive().safe().optional()}),eu=p({current:Se.nullable(),requested:Se,items:c(p({from:a,to:a,baseline:Q,observedAt:A,settlement:ia})),nextCursor:x.nullable()}),Ds=aa.omit({actionId:!0}),Jt=Ds.extend({rule:Se}),tu=f("kind",[Jt.extend({kind:s("create")}),Jt.extend({kind:s("unchanged")}),Jt.extend({kind:s("change"),change:_s})]),j=o().int().safe(),I=j.nonnegative().max(864e13),oa=f("kind",[r({kind:s("all-time")}).strict(),r({kind:s("fixed"),start:I,end:I}).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:re.exclude(["lifetime"])})]),Ns={window:oa.default({kind:"all-time"}),quests:c(a).min(1).max(100).optional()},sa=f("kind",[r({kind:s("balance")}).strict(),r({kind:s("earned"),...Ns}).strict(),r({kind:s("net"),window:oa.default({kind:"all-time"})}).strict()]).default({kind:"balance"}),Ls=g([je,K]),ca=r({ranks:gr([j.positive(),j.positive()]).refine(([e,n])=>n>=e,{message:"Prize rank range must end at or after it starts"}),rewards:c(Ls).min(1).max(20)}).strict(),Ge=t().regex(/^(0|[1-9]\d{0,77})$/,'Use a whole number of base units, such as "1000000"'),Bs=g([s("points"),r({code:t().trim().min(1).max(32),decimals:j.min(0).max(36)}).strict()]),la={amount:Ge.refine(e=>e!=="0",{message:"A pool must hold a positive amount"}),unit:Bs,ledger:a.optional(),minScore:j.optional()},Qs=(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)>ke&&n.addIssue({code:"custom",message:`A points pool holds at most ${ke} points`,path:["amount"]})):e.ledger!==void 0&&n.addIssue({code:"custom",message:"Only a points pool pays into a point ledger",path:["ledger"]})},Ks=r(la).strict().superRefine(Qs),Vs=r({at:s("window-end"),ties:z(["shared","earliest"]),prizes:c(ca).max(50),pool:Ks.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,l]of e.prizes.entries()){let d=l.rewards.map(Qt);new Set(d).size!==d.length&&n.addIssue({code:"custom",message:"A prize may grant each point ledger or tiered reward only once",path:["prizes",i,"rewards"]})}for(let i=1;i<e.prizes.length;i++){let l=e.prizes[i-1];e.prizes[i].ranks[0]<=l.ranks[1]&&n.addIssue({code:"custom",message:"Prize rank ranges must be ordered and must not overlap",path:["prizes",i,"ranks"]})}}),da=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),balance:a,score:sa,access:z(["participants","public"]).default("participants"),group:a.optional(),includeUnscored:m().optional(),settle:Vs.optional()}).strict(),ma=(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"]})},Fs=da.superRefine(ma),Hs=k(Fs),Ws=da.omit({id:!0}).extend({...ne,score:Re(vn,sa),group:a.optional()}).strict().superRefine(ma),ru=g([Ws,r({code:t().min(1).max(2e6)}).strict()]),Gs=r({archivedAt:o().int().nonnegative().nullable().optional(),version:a,definition:Hs,publishedAt:I,actor:t().nullable()}),nu=r({limit:O.number().int().min(1).max(100).default(25),cursor:t().max(4096).optional()}).strict(),Xt=r({participant:a,member:a.optional(),name:t(),score:j,rank:j.positive(),profile:Gt.nullable()}),Xn=r({leaderboard:a,title:t(),version:a,calculation:z(["balance","earned","net"]),period:r({start:I.nullable(),end:I.nullable()}),calculatedAt:I,lastEntryAt:I.nullable(),total:j.nonnegative(),items:c(Xt),me:Xt.nullable(),nearby:c(Xt),nextCursor:t().nullable()}),au=r({leaderboard:a,key:a.optional(),title:t(),profile:a,rank:j.positive().nullable(),score:j.nullable(),total:j.nonnegative()}),iu=p({board:a,cursor:x.optional()}),ou=r({leaderboard:a,period:r({start:I.nullable(),end:I.nullable()}),items:c(Wt),nextCursor:x.nullable()}),su=r({published:Gs,before:Xn.nullable(),after:Xn}),ua={actionId:a,member:a,balance:a,reason:t().trim().min(1).max(1e3)},We={...ua,effectiveAt:I.optional()},cu=f("kind",[r({...We,kind:s("award"),referralEligible:m().optional(),amount:j.positive()}).strict(),r({...We,kind:s("spend"),amount:j.positive()}).strict(),r({...We,kind:s("adjust"),amount:j.refine(e=>e!==0)}).strict(),r({...We,kind:s("set"),total:j.nonnegative(),expectedTotal:j.nonnegative(),classification:z(["earned","spend"])}).strict(),r({...ua,kind:s("reverse"),entry:a,amount:j.positive()}).strict()]),za=r({id:a,completion:t().nullable(),member:a,balance:a,amount:j,kind:z(["award","spend","adjust","reverse"]),effectiveAt:I,receivedAt:I,quest:a.nullable(),original:a.nullable(),reason:t(),actor:t().nullable(),import:a.nullable().optional()}),lu=r({items:c(za),nextCursor:x.nullable(),next:o().nullable()}),du=r({entry:za,total:j.nonnegative()}),mu=r({member:a,balance:a,total:j.nonnegative(),held:j.nonnegative()}),uu=r({actionId:a,member:a,excluded:m(),reason:t().trim().min(1).max(1e3)}).strict(),zu=r({leaderboard:a,group:a,generated:m(),boundAt:I.nullable()}),bu=r({actionId:a,group:a,reason:t().trim().min(1).max(1e3)}).strict(),pu=r({actionId:a,member:a,included:m(),reason:t().trim().min(1).max(1e3)}).strict(),Js=z(["pending","approved"]),Xs=r({id:a,leaderboard:a,version:a,title:t(),period:r({start:I,end:I}),ties:z(["shared","earliest"]),status:Js,total:j.nonnegative(),winners:j.nonnegative(),createdAt:I,approvedAt:I.nullable(),approvedBy:t().nullable(),approvalReason:t().nullable()}),Ys=r({member:a,score:j,rank:j.positive(),position:j.positive(),scoredAt:I,prizes:c(j.nonnegative()),completion:a.nullable(),revokedAt:I.nullable(),share:Ge.optional()}),ec=r({...la,allocated:Ge,unallocated:Ge}),tc=r({content:t(),member:a,observedAt:I.nullable()}),gu=Xs.extend({prizes:c(ca),excluded:c(a),unmeasured:c(tc).optional(),pool:ec.nullable().optional(),rows:c(Ys)}),fu=r({actionId:a,reason:t().trim().min(1).max(500)}).strict(),Yt=g([je,K]),$=o().int().safe().nonnegative(),ae=t().trim().min(1).max(1e3),tr=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),enabled:m().default(!0),qualification:f("kind",[r({kind:s("signup")}).strict(),r({kind:s("quest"),quest:a}).strict(),r({kind:s("external")}).strict()]),inviterGroup:a.optional(),rewards:r({inviter:c(Yt).max(10).default([]),invitee:c(Yt).max(10).default([])}).strict().default({inviter:[],invitee:[]}),milestones:c(r({id:a,count:$.min(1),rewards:c(Yt).min(1).max(10)}).strict()).max(30).default([]),bonuses:c(r({id:a,balance:a,basisPoints:$.min(1).max(1e4),quests:c(a).min(1).max(100).optional(),external:m().default(!1),durationDays:$.min(1).max(36500).optional(),maxPoints:$.min(1).optional()}).strict()).max(20).default([])}).strict().superRefine((e,n)=>{for(let i of[e.milestones,e.bonuses])new Set(i.map(l=>l.id)).size!==i.length&&n.addIssue({code:"custom",message:"Rule IDs must be unique"})}),rc=r(tr.shape).omit({id:!0}).extend({...ne,inviterGroup:a.optional()}).strict().superRefine((e,n)=>{for(let i of[e.milestones,e.bonuses])new Set(i.map(l=>l.id)).size!==i.length&&n.addIssue({code:"custom",message:"Rule keys must be unique"})}),vu=g([rc,r({code:t().min(1).max(2e6)}).strict()]),hu=r({archivedAt:o().int().nonnegative().nullable().optional(),version:a,definition:tr,publishedAt:$,actor:t().nullable()}),yu=r({actionId:a,code:a}).strict(),ku=r({actionId:a,suspended:m(),reason:ae}).strict(),ju=r({actionId:a,qualified:m(),reason:ae}).strict(),Su=r({actionId:a,reason:ae}).strict(),xu=f("kind",[r({kind:s("suspend"),actionId:a,member:a,suspended:m(),reason:ae}).strict(),r({kind:s("qualify"),actionId:a,member:a,program:a,qualified:m(),reason:ae}).strict(),r({kind:s("resolve-reward"),actionId:a,entitlement:a,reason:ae}).strict()]),nc=r({member:a,inviter:a,acceptedAt:$,suspended:m(),import:a.nullable().optional()}),ba=r({id:a,program:a,kind:z(["bonus","fixed","milestone"]),balance:a,earned:$,settled:$,outstanding:$}),wu=r({code:a,attributed:$,programs:c(r({definition:tr,qualified:$,milestones:c(r({id:a,count:$,reached:m()}))})),accounts:c(ba)}),Au=r({items:c(r({id:$,program:a,balance:a,amount:o().int().safe(),at:$,reason:t()})),nextCursor:x.nullable()}),Iu=r({relationships:c(nc),qualifications:c(r({member:a,program:a,qualified:m(),qualifiedAt:$,import:a.nullable().optional()})),accounts:c(ba.extend({member:a,invitee:t()})),reviews:c(r({entitlement:a,member:a,program:a,reason:t()})),nextCursor:x.nullable().default(null),next:$.nullable()});function ac(e){return e.map(n=>n.path.length?n.path.map(String).join(".")+": "+n.message:n.message).join("; ")}function rr(e,n,i){let l=n.safeParse(i);if(l.success)return l.data;let d=typeof i=="object"&&i!==null&&"key"in i&&typeof i.key=="string"?` "${i.key}"`:"";throw l.error.message=`${e}${d} is invalid: ${ac(l.error.issues)}`,l.error}var Je=o().int().safe().nonnegative(),pa=je.extend({amount:o().int().positive().max(ke)}),ic=r({perMember:o().int().positive().max(1e4)}).strict(),ga=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),price:pa,reward:K,stock:Je.max(1e6),limit:ic.default({perMember:1}),requires:c(Lt).max(30).optional(),enabled:m().default(!0)}).strict(),fa=ga.omit({id:!0,title:!0,enabled:!0}).extend({...ne,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})),Ou=g([fa,r({code:t().min(1).max(2e6)}).strict()]),oc=k(f("kind",[r({kind:s("available"),remaining:Je}).strict(),r({kind:s("out-of-stock")}).strict(),r({kind:s("limit-reached")}).strict(),r({kind:s("paused")}).strict()])),qu=k(ga.extend({revision:o().int().positive(),available:Je,redeemed:Je,availability:oc,archivedAt:o().int().nonnegative().nullable().optional(),missing:c(ye).default([])})),Ru=r({actionId:a}).strict(),Yn={id:a,offer:a,member:a,reservation:a,price:pa,reward:K,entitlement:a,revision:o().int().positive(),redeemedAt:o().int().safe().nonnegative()},sc=k(f("status",[r({...Yn,status:s("fulfilled")}).strict(),r({...Yn,status:s("canceled"),canceledAt:o().int().safe().nonnegative(),reason:t().min(1).max(500)}).strict()])),Pu=p({member:a.optional(),cursor:x.optional(),limit:O.number().int().min(1).max(100).optional()}),$u=r({items:c(sc),nextCursor:x.nullable()}),Cu=r({actionId:a,revision:o().int().positive(),enabled:m(),reason:t().trim().min(1).max(500)}).strict(),Tu=r({actionId:a,revision:o().int().positive(),reason:t().trim().min(1).max(500)}).strict();function Eu(e){return he("offer",rr("Offer",fa,e))}var Zu=r({title:t(),description:t(),tags:c(t()),durationSeconds:o().int().nonnegative(),publishedAt:o().int().nonnegative()}),Du=["views","likes","comments"],Nu=r({title:t(),description:t(),durationSeconds:o().int().nonnegative(),width:o().int().nonnegative(),height:o().int().nonnegative(),createdAt:o().int().nonnegative(),shareUrl:t(),isAigc:m()}),Lu=["views","likes","comments","shares"];function D(e){let n;return()=>n??=e()}function Ae(e){let n={};for(let[i,l]of Object.entries(e))Object.defineProperty(n,i,{get:D(l),enumerable:!0,configurable:!0});return n}var Ie=["7d","30d","90d","all"],R=D(()=>o().int().safe()),Xe=D(()=>c(R())),W=D(()=>Pe.datetime({offset:!0})),cc=D(()=>r({key:t(),start:W(),end:W()})),ka=D(()=>r({key:z(Ie),from:W(),to:W(),bucket:z(["day","week"]),timeZone:t(),buckets:c(cc())})),ja=D(()=>r({from:W(),to:W()}).optional()),Bu=p(Ae({range:()=>z(Ie),ledger:()=>a.optional()})),Z=D(()=>r({total:R(),previousTotal:R().optional(),series:Xe()})),va=D(()=>Z().optional()),lc=D(()=>r({quest:a,title:t(),attempts:R(),completions:R(),decided:R(),rejected:R(),needsReview:R(),rejectionRate:o().min(0).max(1).nullable(),topReasons:c(r({reason:t(),code:t().nullable(),count:R()})),rejectionsBySource:r({evaluator:R(),staff:R(),budget:R(),expired:R()}),series:r({attempts:Xe(),completions:Xe()})})),Qu=r(Ae({range:ka,previous:ja,members:()=>r({signUps:Z(),active:Z()}),quests:()=>r({attempts:Z(),completions:Z(),rejections:Z(),needsReview:Z(),byQuest:c(lc())}),points:()=>r({ledgers:c(r({key:a,name:t(),archived:m()})),ledger:a.nullable(),hasSpending:m(),awarded:Z(),spent:va(),net:va(),membersEarning:Z()}),offers:()=>r({redemptions:Z(),byOffer:c(r({offer:a,title:t(),redemptions:R(),series:Xe()}))}).optional(),referrals:()=>r({accepted:Z(),qualified:Z(),acceptedQualified:r({total:R(),previousTotal:R().optional()})}).optional(),testEnvironment:()=>r({lastResetAt:W().nullable(),shiftedClockMembers:R()}).optional()}));var dc=["number","line","bar","table"],C=["number","line","bar","table"],ha=["number","line","table"],mc=["number","bar","table"],xe=["quest","group","tracker"],or={"members.signUps":{definition:"Members who joined the project, by when they joined.",kind:"count",breakdowns:[],filters:["group"],charts:C,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:C,ledger:!1},"quests.attempts":{definition:"Attempts, by when they were created.",kind:"count",breakdowns:["quest"],filters:xe,charts:C,ledger:!1},"quests.completions":{definition:"Quest completions never revoked, by when they completed.",kind:"count",breakdowns:["quest"],filters:xe,charts:C,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:xe,charts:C,ledger:!1},"quests.rejections":{definition:"Rejected attempts, by when they were decided.",kind:"count",breakdowns:["quest","source","reason"],filters:xe,charts:C,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:xe,charts:ha,ledger:!1,minimumDenominator:10},"points.awarded":{definition:"Points in the ledger's award entries, by effective date.",kind:"count",breakdowns:[],filters:["group"],charts:C,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:C,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:C,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:C,ledger:!0},"offers.redemptions":{definition:"Fulfilled offer redemptions, by when they were redeemed.",kind:"count",breakdowns:["offer"],filters:["offer","group"],charts:C,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:C,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:C,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:ha,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:C,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:C,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:C,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:mc,ledger:!1}},Ku=Object.keys(or),Vu=r(Ae({metrics:()=>c(r({id:t(),definition:t(),kind:z(["count","distinct","rate"]),breakdowns:c(t()),filters:c(t()),charts:c(t()),ledger:m(),minimumDenominator:R().optional()}))}));var Fu=p(Ae({metric:()=>t().min(1).max(100),range:()=>z(Ie),breakdown:()=>t().min(1).max(100).optional(),filter:()=>y(t().min(1).max(100),g([a,c(a).min(1).max(100)])).optional(),ledger:()=>a.optional(),limit:()=>o().int().optional()})),nr=D(()=>o().nullable()),ar=D(()=>({total:nr(),previousTotal:nr().optional(),series:c(nr())})),Hu=r(Ae({metric:()=>t(),kind:()=>z(["count","distinct","rate"]),range:ka,previous:ja,ledger:()=>a.optional(),value:()=>r(ar()),breakdown:()=>r({dimension:t(),rows:c(r({key:t(),title:t(),archived:m(),...ar()})),other:r({rows:R(),...ar()}).optional()}).optional()})),ya={panels:24,dashboards:20},uc={number:1,line:2,bar:2,table:4},we=t().trim().min(1).max(120),sr=t().trim().min(1).max(500),zc=g([a,c(a).min(1).max(100)]),bc=y(t().min(1).max(100),zc),Sa={key:a,title:we,description:sr.optional(),metric:t().min(1).max(100),breakdown:t().min(1).max(100).optional(),filter:bc.optional(),ledger:a.optional(),chart:z(dc)},pc=p({...Sa,width:o().int().min(1).max(4).optional()}),cr=p({key:a,title:we,description:sr.optional(),defaultRange:z(Ie).optional(),position:o().int().min(0).max(1e3).optional(),sections:c(p({title:we.optional(),panels:c(pc).min(1).max(100)})).min(1).max(100)}),xa=p({key:a,title:we,description:sr.optional(),defaultRange:z(Ie),position:o().int().min(0).max(1e3).optional(),sections:c(p({title:we.optional(),panels:c(p({...Sa,width:o().int().min(1).max(4)}))}))}),Wu=g([cr,r({code:t().min(1).max(2e6)}).strict()]);function Gu(e){let n=cr.parse(e);return xa.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(l=>({...l,width:l.width??uc[l.chart]}))}))})}function Ju(e){return e.sections.flatMap(n=>[...n.panels])}function Xu(e){let n=e.sections.flatMap(d=>[...d.panels]),i=`dashboard "${e.key}"`;if(n.length>ya.panels)return{code:"too-many-panels",message:`The ${i} has ${n.length} panels; a dashboard holds at most ${ya.panels}.`};let l=new Set;for(let d of n){let u=`Panel "${d.key}" of ${i}`;if(l.has(d.key))return{code:"duplicate-key",panel:d.key,message:`The ${i} has two panels with the key "${d.key}".`};if(l.add(d.key),!Object.hasOwn(or,d.metric))return{code:"unknown-metric",panel:d.key,message:`${u} names the unknown metric "${d.metric}". Run domino analytics metrics for the catalog.`};let b=or[d.metric];if(d.breakdown!==void 0&&!b.breakdowns.includes(d.breakdown))return{code:"breakdown-not-accepted",panel:d.key,message:`${u}: ${d.metric} has no "${d.breakdown}" breakdown; it takes ${b.breakdowns.join(", ")||"none"}.`};for(let v of Object.keys(d.filter??{}))if(!b.filters.includes(v))return{code:"filter-not-accepted",panel:d.key,message:`${u}: ${d.metric} takes no "${v}" filter; it takes ${b.filters.join(", ")||"none"}.`};if(!b.charts.includes(d.chart))return{code:"chart-not-accepted",panel:d.key,message:`${u}: ${d.metric} can't be drawn as "${d.chart}"; it takes ${b.charts.join(", ")}.`};if(d.chart==="number"&&d.breakdown!==void 0)return{code:"breakdown-not-accepted",panel:d.key,message:`${u}: a number panel shows one value and takes no breakdown.`};if(d.chart==="table"&&d.breakdown===void 0)return{code:"breakdown-required",panel:d.key,message:`${u}: a table panel needs a breakdown; ${d.metric} takes ${b.breakdowns.join(", ")||"none"}.`};if(b.ledger&&d.ledger===void 0)return{code:"ledger-required",panel:d.key,message:`${u}: ${d.metric} needs a point ledger; set ledger to its key.`};if(!b.ledger&&d.ledger!==void 0)return{code:"ledger-not-accepted",panel:d.key,message:`${u}: ${d.metric} reads no point ledger; remove ledger.`}}return null}var Yu=k(r({key:a,title:t(),change:z(["created","updated","unchanged"]),definition:xa})),ir=e=>typeof e=="string"?e:e.key;function ez(e){let n=rr("Dashboard",cr,{...e,sections:e.sections.map(i=>({...i,panels:i.panels.map(l=>({...l,...l.ledger===void 0?{}:{ledger:ir(l.ledger)},...l.filter===void 0?{}:{filter:Object.fromEntries(Object.entries(l.filter).map(([d,u])=>[d,Array.isArray(u)?u.map(ir):ir(u)]))}}))}))});return he("dashboard",n)}var gc=["not-linked","provider-unavailable","author-error"],fc=e=>gc.includes(e),rz=le({code:t().min(1),message:t().min(1),retryable:m()}),wa=Symbol.for("@domino-sdk/relay/CapabilityError"),nz=class Aa extends Error{code;retryable;constructor(n,i,l={}){super(i),this.name="CapabilityError",this.code=n,this.retryable=l.retryable??n==="provider-unavailable",Object.defineProperty(this,wa,{value:!0})}static[Symbol.hasInstance](n){return typeof n=="object"&&n!==null&&n[wa]===!0}static from(n){return new Aa(n.code,n.message,{retryable:fc(n.code)&&n.retryable})}};export{a,Lr as b,vc as c,k as d,Ta as e,Ea as f,hc as g,x as h,yc as i,kc as j,jc as k,qt as l,Ma as m,Sc as n,xc as o,wc as p,Ac as q,Rt as r,Pt as s,Ua as t,Ic as u,Oc as v,_a as w,Za as x,La as y,me as z,Kr as A,qc as B,Xa as C,Rc as D,Pc as E,ti as F,ri as G,ni as H,ai as I,Jr as J,oi as K,si as L,ci as M,$c as N,en as O,Cc as P,li as Q,tn as R,$t as S,Tc as T,fe as U,Ec as V,ve as W,Mc as X,rn as Y,di as Z,mi as _,nn as $,te as aa,an as ba,ui as ca,zi as da,Uc as ea,_c as fa,H as ga,Zc as ha,bi as ia,sn as ja,pi as ka,gi as la,cn as ma,ln as na,Dc as oa,Nc as pa,dn as qa,fi as ra,Lc as sa,Bc as ta,Qc as ua,vi as va,hi as wa,mn as xa,yi as ya,Kc as za,Vc as Aa,Fc as Ba,un as Ca,Hc as Da,Wc as Ea,Gc as Fa,Jc as Ga,Xc as Ha,Yc as Ia,el as Ja,tl as Ka,ki as La,rl as Ma,nl as Na,al as Oa,ji as Pa,bn as Qa,il as Ra,Ne as Sa,Q as Ta,Si as Ua,xi as Va,wi as Wa,Ai as Xa,pn as Ya,Ii as Za,Oi as _a,ol as $a,sl as ab,cl as bb,ll as cb,qi as db,gn as eb,be as fb,Ri as gb,vn as hb,re as ib,dl as jb,ml as kb,ul as lb,Pi as mb,$i as nb,Ci as ob,zl as pb,Ee as qb,qr as rb,Ti as sb,Ei as tb,bl as ub,Mi as vb,Ui as wb,_i as xb,Zi as yb,pl as zb,gl as Ab,fl as Bb,Di as Cb,Ni as Db,Li as Eb,vl as Fb,Pr as Gb,Qi as Hb,Vi as Ib,Me as Jb,Hi as Kb,Tt as Lb,Wi as Mb,hl as Nb,yl as Ob,Et as Pb,xt as Qb,hn as Rb,Gi as Sb,kl as Tb,jl as Ub,Ji as Vb,Xi as Wb,yn as Xb,Sl as Yb,xl as Zb,kn as _b,eo as $b,wl as ac,Al as bc,to as cc,Il as dc,jn as ec,ro as fc,Ol as gc,ql as hc,Rl as ic,Pl as jc,$l as kc,Cl as lc,no as mc,ao as nc,io as oc,oo as pc,Mt as qc,Le as rc,Ut as sc,Tl as tc,El as uc,Be as vc,so as wc,co as xc,Ml as yc,Ul as zc,_l as Ac,Zl as Bc,Dl as Cc,Nl as Dc,Ll as Ec,wt as Fc,lo as Gc,Bl as Hc,Ql as Ic,Kl as Jc,_t as Kc,Vl as Lc,Fl as Mc,Hl as Nc,zo as Oc,bo as Pc,Wl as Qc,fo as Rc,vo as Sc,ho as Tc,Gl as Uc,Jl as Vc,So as Wc,xo as Xc,wo as Yc,Xl as Zc,Yl as _c,Io as $c,In as ad,Oo as bd,ed as cd,td as dd,rd as ed,qo as fd,Po as gd,On as hd,qn as id,nd as jd,ad as kd,id as ld,$o as md,Pn as nd,Co as od,Dt as pd,$n as qd,od as rd,sd,Cn as td,At as ud,To as vd,Eo as wd,Y as xd,Mo as yd,Uo as zd,cd as Ad,_o as Bd,ld as Cd,dd as Dd,md as Ed,ne as Fd,ud as Gd,Nt as Hd,Ze as Id,zd as Jd,Do as Kd,Tn as Ld,bd as Md,No as Nd,pd as Od,gd as Pd,he as Qd,fd as Rd,Lo as Sd,Ur as Td,vd as Ud,Qo as Vd,hd as Wd,yd as Xd,kd as Yd,jd as Zd,Sd as _d,xd as $d,Ko as ae,wd as be,Vo as ce,Ad as de,Zn as ee,Dn as fe,Nn as ge,Lt as he,ye as ie,Id as je,Od as ke,qd as le,je as me,Bt as ne,Rd as oe,K as pe,Fo as qe,Pd as re,Ho as se,$d as te,Wo as ue,Ot as ve,Qt as we,Ln as xe,Bn as ye,Cd as ze,Td as Ae,_r as Be,Zr as Ce,Dr as De,Kt as Ee,Ed as Fe,Jo as Ge,Xo as He,Vt as Ie,pe as Je,Yo as Ke,es as Le,ts as Me,De as Ne,Qn as Oe,rs as Pe,ns as Qe,as as Re,Kn as Se,is as Te,os as Ue,Md as Ve,Ud as We,ss as Xe,cs as Ye,_d as Ze,ls as _e,ds as $e,Qe as af,Zd as bf,Dd as cf,Ke as df,Nd as ef,zs as ff,Ld as gf,Bd as hf,bs as if,ps as jf,ge as kf,gs as lf,Qd as mf,Kd as nf,Vd as of,Vn as pf,Fd as qf,Fn as rf,Hd as sf,Wd as tf,Gd as uf,Jd as vf,hs as wf,ys as xf,ks as yf,Ss as zf,Xd as Af,Yd as Bf,em as Cf,tm as Df,rm as Ef,nm as Ff,am as Gf,im as Hf,om as If,sm as Jf,xs as Kf,cm as Lf,lm as Mf,dm as Nf,mm as Of,um as Pf,zm as Qf,bm as Rf,Ht as Sf,ym as Tf,ws as Uf,km as Vf,As as Wf,jm as Xf,Is as Yf,Os as Zf,Sm as _f,xm as $f,Wt as ag,wm as bg,Am as cg,Gn as dg,Fe as eg,Wn as fg,Rs as gg,Ft as hg,Ps as ig,Gt as jg,Cs as kg,Im as lg,Ts as mg,Om as ng,Es as og,qm as pg,Rm as qg,Ms as rg,Pm as sg,$m as tg,Cm as ug,Tm as vg,Em as wg,ea as xg,ta as yg,ra as zg,Zm as Ag,Dm as Bg,Nm as Cg,Us as Dg,Lm as Eg,Bm as Fg,Qm as Gg,na as Hg,er as Ig,Km as Jg,Vm as Kg,aa as Lg,Se as Mg,Fm as Ng,ia as Og,Hm as Pg,Wm as Qg,Gm as Rg,_s as Sg,Jm as Tg,Xm as Ug,Ym as Vg,eu as Wg,Ds as Xg,tu as Yg,oa as Zg,Ls as _g,ca as $g,Ge as ah,Bs as bh,Ks as ch,Vs as dh,Fs as eh,Hs as fh,Ws as gh,ru as hh,Gs as ih,nu as jh,Xt as kh,Xn as lh,au as mh,iu as nh,ou as oh,su as ph,cu as qh,za as rh,lu as sh,du as th,mu as uh,uu as vh,zu as wh,bu as xh,pu as yh,Js as zh,Xs as Ah,Ys as Bh,ec as Ch,tc as Dh,gu as Eh,fu as Fh,tr as Gh,rc as Hh,vu as Ih,hu as Jh,yu as Kh,ku as Lh,ju as Mh,Su as Nh,xu as Oh,nc as Ph,ba as Qh,wu as Rh,Au as Sh,Iu as Th,rr as Uh,pa as Vh,ic as Wh,ga as Xh,fa as Yh,Ou as Zh,oc as _h,qu as $h,Ru as ai,sc as bi,Pu as ci,$u as di,Cu as ei,Tu as fi,Eu as gi,Zu as hi,Du as ii,Nu as ji,Lu as ki,ya as li,uc as mi,pc as ni,cr as oi,xa as pi,Wu as qi,Gu as ri,Ju as si,Xu as ti,Yu as ui,ez as vi,gc as wi,rz as xi,nz as yi};