@domino-sdk/relay 1.44.0 → 1.46.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 (35) hide show
  1. package/build.d.mts +16 -3
  2. package/build.mjs +176 -3
  3. package/dist/authoring.js +4 -4
  4. package/dist/browser.js +10 -10
  5. package/dist/{chunk-YBMCF54E.js → chunk-2VBCWGBG.js} +10 -7
  6. package/dist/{chunk-HO4FZJSH.js → chunk-3UCK2C2P.js} +2 -2
  7. package/dist/{chunk-IGUT3HCM.js → chunk-4W4FXLGM.js} +2 -2
  8. package/dist/{chunk-ILH73K3H.js → chunk-6IC332LX.js} +1 -1
  9. package/dist/{chunk-PMSCHJKX.js → chunk-DJAIFEV4.js} +9 -1
  10. package/dist/{chunk-UOHYYB7V.js → chunk-EC5MEEZD.js} +1 -1
  11. package/dist/{chunk-W5UBRNDT.js → chunk-JPFPLYQS.js} +1 -1
  12. package/dist/{chunk-Q5PX3GDA.js → chunk-KHFDDXAM.js} +1 -1
  13. package/dist/{chunk-ZNFAIBTJ.js → chunk-OXIXMXFB.js} +1 -1
  14. package/dist/{chunk-ZY4RI4DJ.js → chunk-R5BDN7US.js} +1 -1
  15. package/dist/{chunk-RXM7LBLH.js → chunk-SESHFICW.js} +8 -8
  16. package/dist/{chunk-WSOUOG6S.js → chunk-SKBZ7UVZ.js} +1 -1
  17. package/dist/{chunk-J7YJHMF7.js → chunk-TJ2OH3MQ.js} +1 -1
  18. package/dist/{chunk-NNGGEUMQ.js → chunk-WE6LLVR5.js} +1 -1
  19. package/dist/{chunk-TEPZZXDI.js → chunk-Y22GX76Y.js} +7 -6
  20. package/dist/{chunk-REANELDK.js → chunk-ZRTNPNNG.js} +4 -4
  21. package/dist/index.js +9 -9
  22. package/dist/internal.js +8 -8
  23. package/dist/portal-proxy.js +3 -3
  24. package/dist/react/index.js +10 -10
  25. package/dist/runtime/authoring.js +1 -0
  26. package/dist/runtime/chunks/IDOMZWRY.js +40 -0
  27. package/dist/runtime/chunks/KMKCMYDX.js +1 -0
  28. package/dist/runtime/manifest.json +18 -0
  29. package/dist/runtime/schema.js +1 -0
  30. package/dist/runtime/zod.js +1 -0
  31. package/dist/schema.d.ts +7 -1
  32. package/dist/schema.js +9 -7
  33. package/dist/server/index.js +14 -14
  34. package/dist/testing.js +5 -5
  35. package/package.json +2 -2
package/dist/internal.js CHANGED
@@ -9,17 +9,17 @@ import {
9
9
  participantExchangeSchema,
10
10
  questConfiguration,
11
11
  sequenceCursorSchema
12
- } from "./chunk-REANELDK.js";
12
+ } from "./chunk-ZRTNPNNG.js";
13
13
  import {
14
14
  parseImageExtraction,
15
15
  parseImageResult
16
- } from "./chunk-HO4FZJSH.js";
17
- import "./chunk-ILH73K3H.js";
16
+ } from "./chunk-3UCK2C2P.js";
17
+ import "./chunk-6IC332LX.js";
18
18
  import {
19
19
  sourceDataSchema,
20
20
  sourceRoles,
21
21
  validateQuestShape
22
- } from "./chunk-ZY4RI4DJ.js";
22
+ } from "./chunk-R5BDN7US.js";
23
23
  import {
24
24
  isIntegrationParticipantPath,
25
25
  isParticipantRoute,
@@ -31,9 +31,9 @@ import {
31
31
  lifetime,
32
32
  retryAfter,
33
33
  retrying
34
- } from "./chunk-NNGGEUMQ.js";
35
- import "./chunk-ZNFAIBTJ.js";
36
- import "./chunk-Q5PX3GDA.js";
34
+ } from "./chunk-WE6LLVR5.js";
35
+ import "./chunk-OXIXMXFB.js";
36
+ import "./chunk-KHFDDXAM.js";
37
37
  import {
38
38
  schemaCheckedReader,
39
39
  trackerDataBatchSteps,
@@ -42,7 +42,7 @@ import {
42
42
  trackerDataPathTypes,
43
43
  trackerDataRecordSteps,
44
44
  whereSchemaIssue
45
- } from "./chunk-PMSCHJKX.js";
45
+ } from "./chunk-DJAIFEV4.js";
46
46
  export {
47
47
  MANAGEMENT_TIMEOUT,
48
48
  REFERRAL_INTEGRATION_REWARD_ERROR,
@@ -3,11 +3,11 @@ import {
3
3
  } from "./chunk-MLIXJPKL.js";
4
4
  import {
5
5
  clientIdentity
6
- } from "./chunk-ZNFAIBTJ.js";
6
+ } from "./chunk-OXIXMXFB.js";
7
7
  import {
8
8
  exchangeResultSchema
9
- } from "./chunk-Q5PX3GDA.js";
10
- import "./chunk-PMSCHJKX.js";
9
+ } from "./chunk-KHFDDXAM.js";
10
+ import "./chunk-DJAIFEV4.js";
11
11
 
12
12
  // src/portal-proxy.ts
13
13
  var statusCode = (status) => ({
@@ -9,19 +9,19 @@ import {
9
9
  readSignInMethods,
10
10
  signInOptionsFrom,
11
11
  telegramMiniAppInitData
12
- } from "../chunk-IGUT3HCM.js";
13
- import "../chunk-RXM7LBLH.js";
12
+ } from "../chunk-4W4FXLGM.js";
13
+ import "../chunk-SESHFICW.js";
14
14
  import {
15
15
  createRelayAction
16
- } from "../chunk-UOHYYB7V.js";
17
- import "../chunk-TEPZZXDI.js";
18
- import "../chunk-WSOUOG6S.js";
19
- import "../chunk-J7YJHMF7.js";
20
- import "../chunk-NNGGEUMQ.js";
21
- import "../chunk-ZNFAIBTJ.js";
16
+ } from "../chunk-EC5MEEZD.js";
17
+ import "../chunk-Y22GX76Y.js";
18
+ import "../chunk-SKBZ7UVZ.js";
19
+ import "../chunk-TJ2OH3MQ.js";
20
+ import "../chunk-WE6LLVR5.js";
21
+ import "../chunk-OXIXMXFB.js";
22
22
  import {
23
23
  sessionMember
24
- } from "../chunk-Q5PX3GDA.js";
24
+ } from "../chunk-KHFDDXAM.js";
25
25
  import {
26
26
  RelayError,
27
27
  RelayErrorCode,
@@ -29,7 +29,7 @@ import {
29
29
  clientError,
30
30
  isRelayError,
31
31
  isRequestError
32
- } from "../chunk-PMSCHJKX.js";
32
+ } from "../chunk-DJAIFEV4.js";
33
33
 
34
34
  // src/react/context.ts
35
35
  import { createContext, useContext } from "react";
@@ -0,0 +1 @@
1
+ import{$e as Ce,Bc as ke,Bd as M,E as j,Ed as Ee,F as J,Fc as y,G as V,H as X,Ib as le,Ic as Ye,Jb as pe,Ke as Me,Md as Q,Na as L,Oa as oe,Od as ze,Oe as Re,Pa as I,Pb as Je,Pc as v,Qa as se,Qb as Ve,Qc as we,Rc as E,Tc as er,V as Y,W as ee,Wd as je,Xg as nr,Z as re,_ as T,_f as Ae,a as Fe,ba as te,c as He,ca as D,d as C,da as ae,fb as ce,fc as Xe,ga as ne,gh as De,hd as rr,hh as Le,ib as ie,ic as ge,id as tr,jc as he,jd as ar,jf as $e,kd as ve,kf as xe,ld as be,lf as U,nb as ue,nd as ye,pd as Se,rb as de,sc as O,tc as $,u as N,v as Z,w as _,wc as P,x as W,xc as B,xg as Te,y as F,yb as me,yc as fe,z as H,zd as qe}from"./chunks/KMKCMYDX.js";import{Vb as A,Wb as K,hc as R,nb as q,pa as x,pc as z,td as We,vb as G}from"./chunks/IDOMZWRY.js";function Ie(e){if(!Number.isInteger(e)||e<0||e>255)throw new Error("Token decimals must be an integer from 0 to 255")}function or(e,t){Ie(t);let r=/^(\d+)(?:\.(\d+))?$/.exec(e.trim());if(!r)throw new Error(`Use a decimal amount such as "1.5", not "${e}"`);let[,n,c=""]=r,s=c.replace(/0+$/,"");if(s.length>t)throw new Error(`"${e}" has more than ${t} decimal places, which this token cannot hold`);return BigInt(n+s.padEnd(t,"0"))}function sr(e,t){Ie(t);let r=typeof e=="bigint"?e:BigInt(e),n=r<0n?"-":"",c=(r<0n?-r:r).toString().padStart(t+1,"0"),s=c.slice(0,c.length-t),i=c.slice(c.length-t).replace(/0+$/,"");return n+s+(i?"."+i:"")}function Pe(e,t={}){let{trigger:r,completion:n,requires:c,performance:s,retryCooldownMs:i}=e,o=r.kind==="automatic"?r.tracker:void 0,u=o?.content===!0;if(s&&!u)throw new Error("Performance requires a content quest");if(u){if(n.kind!=="keyed")throw new Error("Content quests complete once per content item");if(o.beneficiary!=="author"||o.on!=="new-record")throw new Error("A content quest pays each content item's author and fires on its first observation")}if(i!==void 0&&(r.kind!=="manual"||r.actor==="staff"))throw new Error("A retry cooldown applies only to quests members submit themselves");if(r.kind==="automatic"&&!o){if(!t.template&&c.length===0)throw new Error("Automatic quests need at least one prerequisite");if(n.kind!=="once")throw new Error("Prerequisite-only automatic quests complete once")}}var cr=["author"],ir=["author","messageAuthor"];function Be(e){if(!ne(e))return[];switch(e.kind){case"x-search":return Y;case"discord-messages":return cr;case"discord-reactions":return ir;case"custom":return["author",...e.accounts??[]]}}var Oe=new Map;function ur(e){let t=e.kind==="discord-messages"&&e.text?"messages-text":e.kind,r=Oe.get(t);return r||(r=j(t==="messages-text"?W:t==="discord-messages"?_:F),Oe.set(t,r)),r}function Qe(e){switch(e.kind){case"x-search":return;case"discord-messages":case"discord-reactions":return ur(e);case"custom":return e.data}}function zr(e){return v("badge",Re.parse(e))}function jr(e){return v("ledger",Ce.parse(e))}function Mr(e){let{target:t,ledger:r,...n}=e,c=$e.parse({...n,qualifiedBy:e.qualifiedBy.key,balance:E(r)}),s=R(z(e.metrics),U.shape.target);return{key:c.key,describe:()=>c,score(i){let o=xe.parse(i);return U.parse({target:t({metrics:s.parse(o.metrics)}),baseline:t({metrics:s.parse(o.baseline)})})}}}var Rr=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 ce.strict().parse({kind:"streak",...e})},Cr=e=>oe.brand().parse({kind:"count",count:e}),$r=(e,t={})=>I.brand().parse({kind:"calendar",period:e,...t}),xr=({days:e})=>I.brand().parse({kind:"rolling",durationMs:e*864e5}),Ar=e=>({kind:"quest",quest:e});function Tr(e){let{qualification:t,inviterGroup:r,milestones:n,bonuses:c,...s}=e,i=Te.parse({...s,qualification:t.kind==="quest"?{kind:"quest",quest:t.quest.key}:t,...r?{inviterGroup:C.parse(r.key)}:{},milestones:n?.map(({key:o,...u})=>({...u,id:y({key:o,...u})})),bonuses:c?.map(({key:o,ledger:u,quests:h,...a})=>({...a,id:y({key:o,...a}),balance:E(u),quests:h?.map(d=>d.key)}))});return v("referral",i)}function Dr(e={}){return{kind:"earned",...e}}function Lr(e){let{ledger:t,group:r,score:n,...c}=e,s=Ae.parse({...c,balance:E(t),...r?{group:C.parse(r.key)}:{},score:n?.kind==="earned"?{...n,quests:n.quests?.map(i=>i.key)}:n});return v("leaderboard",s)}var Ir={provider:"x",search:e=>re.parse({kind:"x-search",...e})};function mr(e,t){let{data:r,content:n,...c}=t??{};if(n!==void 0){if(r!==void 0)throw new Error(`customSource("${e}") takes data or content, not both: a content source's records carry { body, metrics }`);if(!Ue(n.body))throw new Error(`customSource("${e}") needs a content body schema: customSource(namespace, { content: { body: z.object({ ... }), metrics: ["likes"] } })`);let s=[...n.metrics??[]];for(let i of s)ee.parse(i);return T.parse({kind:"custom",namespace:e,...c,data:j(A({body:n.body,metrics:K(Object.fromEntries(s.map(i=>[i,q().int().safe().nonnegative().optional()]))).optional()})),content:{metrics:s}})}if(!Ue(r))throw new Error(`customSource("${e}") needs a data schema: customSource(namespace, { data: z.object({ ... }) }) describes each record's data`);return T.parse({kind:"custom",namespace:e,...c,data:j(r)})}function Ue(e){return typeof e=="object"&&e!==null&&"_zod"in e}function Or(e){return v("tracker",ae.parse(e))}function lr(e={}){return N.parse({kind:"discord-messages",...e.text?{text:!0}:{}})}function pr(){return Z.parse({kind:"discord-reactions"})}var Pr={provider:"discord",grantRole:e=>H.parse({kind:"integration",provider:"discord",action:"grant-role",roleId:e}),messages:lr,reactions:pr,roles(e={}){return $.parse({provider:"discord",resource:"role",assignable:e.assignable??!1})},channels(e={}){return $.parse({provider:"discord",resource:"channel",types:e.types??["text","announcement"]})}},Br={reactions(){return mr(De,{identities:["member"],accounts:["messageAuthor"],data:Le})}},Qr=()=>({provider:"domino",resource:"point-ledger"});function k(e,t){return t}var Ur={pointLedger(e){let t={...e,kind:"point-ledger",default:e.default?C.parse(e.default.key):""};return k("point-ledger",we.prefault(t.default).meta(t))},datetime(e){let t={...e,kind:"datetime",default:P.parse(e.default)};return k("datetime",P.default(t.default).meta(t))},resource(e){let t={...e,source:$.parse(e.source),kind:"resource",default:B.parse(e.default??"")};return k("resource",B.default(t.default).meta(t))},quiz(e){let t=O.parse(e.default);return k("quiz",O.default(t).meta({...e,default:t,kind:"quiz"}))},text(e){let t={...e,kind:"text",minLength:e.minLength??1,maxLength:e.maxLength??2e3,multiline:e.multiline??!1};return k("text",x().min(t.minLength).max(t.maxLength).default(t.default).meta(t))},telegramChat(e){let t={...e,kind:"text",default:e.default??"",minLength:0,maxLength:64,multiline:!1,picker:"telegram-chat"};return k("text",x().max(t.maxLength).default(t.default).meta(t))},integer(e){return k("integer",q().int().min(e.min).max(e.max).default(e.default).meta({...e,kind:"integer"}))},boolean(e){return k("boolean",G().default(e.default).meta({...e,kind:"boolean"}))},choice(e){return k("choice",z(e.options).default(e.default).meta({...e,kind:"choice"}))},object(e){return A(e).strict()}},Kr=e=>Se(e.key,e.name),Nr=(e,t)=>ve.parse({kind:"points",balance:E(e),amount:t}),Zr={text:(e={})=>({input:"text",constraints:ge.parse(e)}),url:(e={})=>({input:"url",constraints:he.parse(e)}),photo:()=>"photo",quiz:()=>"quiz"};function _r(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 Ge=new WeakMap,Ke=new WeakMap;function Ne(e,t){let{tracker:r,beneficiary:n="author",on:c,where:s,enrollment:i,since:o,historical:u,content:h}=e;if(!r?.source)throw new Error(t==="automatic"?"automatic() takes no argument, or { tracker } with a tracker handle from defineTracker":"content() takes { tracker } with a tracker handle from defineTracker");let{source:a}=r;if(!te(a))throw new Error('Tracker triggers need attributable records: declare customSource(namespace, { identities: ["wallet"] }) or other identity kinds');if(h&&!D(a))throw new Error(`content() needs a tracker whose source has content: x.search(), or customSource(namespace, { content: { body, metrics } }). Tracker "${r.key}" has none; use automatic({ tracker }) instead.`);if(o==="enrollment"&&i!=="required")throw new Error(`${t}() counts from enrollment only on a quest that requires it: add enrollment: "required"`);let d=Be(a);if(!d.includes(n))throw new Error(a.kind==="custom"?`Tracker "${r.key}" has no "${n}" account: declare it in customSource(namespace, { accounts: ["${n}"] })`:`Tracker "${r.key}" pays ${d.map(f=>`"${f}"`).join(" or ")}, not "${n}"`);let l=de.parse({tracker:r.key,source:a.kind,on:h?"new-record":c??ie(a.kind),...s?{where:s}:{},beneficiary:n,...i==="required"?{enrollment:i}:{},...o&&o!=="activation"?{since:o}:{},...u&&u!==(h?"claim":"staff")?{historical:u}:{},...h?{content:h}:{}}),g=Qe(a),w=g?X(g,l.where):null;if(w)throw new Error(w);let m={kind:"automatic",tracker:l};g&&Ge.set(m,g);let p=D(a);return p&&Ke.set(m,p.metrics),m}function Wr(e){return e?Ne(e,"automatic"):{kind:"automatic"}}function Fr(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 Ne({...e,content:!0},"content")}var Hr=e=>{let{key:t,cost:r,...n}=e;return le.parse({...n,id:y(e),cost:typeof r=="number"?r:{balance:E(r.ledger)}})},Jr=e=>({kind:"keyed",key:e}),Vr=e=>{let{distinct:t,...r}=e;return{...se.parse({kind:"progress",window:{kind:"lifetime"},...r}),distinct:t}},Xr=()=>({kind:"untracked"}),Yr=()=>({kind:"staff-handover"}),et=()=>({kind:"automatic"});function rt(e){let{key:t,tiers:r,...n}=e,c=y(e),s=be.parse({id:c,...n,tiers:r.map(({key:i,...o})=>({...o,id:y({key:i,...o})}))});return v("tiered-reward",{key:s.id,tier:i=>ye.parse({kind:"tier",reward:s,tier:i})})}var tt=()=>({kind:"once"});function gr(e={}){return{kind:"accept",...e}}function hr(e){return{kind:"review",...e}}var S={accept:gr,defer:e=>({kind:"defer",...e}),progress:e=>({kind:"progress",...e}),reject:e=>({kind:"reject",...e}),review:hr},at={quiz(e,t={}){let r=je.parse(e),n=Object.keys(r),c=q().int().min(1).max(n.length).parse(t.minimumCorrect??n.length);return async({input:s})=>{let i=Object.keys(s.answers).length===n.length&&n.every(u=>Object.hasOwn(s.answers,u)),o=n.filter(u=>s.answers[u]===r[u]).length;return i&&o>=c?S.accept():S.reject({reason:"Review your answers and try again."})}},photo(e){return async t=>{let r=e(t),n=await t.review.photo({image:t.input.photo,criteria:r.criteria});return n.kind==="unclear"?r.unclear==="human-review"?S.review({reason:n.reason}):S.reject({reason:n.reason}):n.kind==="pass"?S.accept():S.reject({reason:n.reason})}}};function Ze(e){return function(r){let n=y(r),c=[...new Set((r.integrations??[]).map(a=>pe.parse(a.provider)))],s=r.trigger.kind==="automatic"&&r.trigger.tracker?.content===!0,i=r.trigger.kind==="automatic"&&r.trigger.tracker!==void 0,o=r.completion;if(s&&o!==void 0)throw new Error("A content quest completes once per content item: remove its completion");if(!s&&o===void 0)throw new Error("A quest needs a completion, such as once(), keyed(...), streak(...) or progress(...)");if(Pe({trigger:r.trigger,completion:o??{kind:"keyed"},requires:r.requires??[],performance:r.performance?L.parse({metrics:r.performance.metrics,maxAgeMs:r.performance.maxAgeMs}):void 0,...r.retryCooldownMs===void 0?{}:{retryCooldownMs:r.retryCooldownMs}},{template:e}),r.retryCooldownMs!==void 0&&!qe.safeParse(r.retryCooldownMs).success)throw new Error("retryCooldownMs must be whole milliseconds from 1000 (one second) to 604800000 (seven days)");if(r.performance){let a=Ke.get(r.trigger)??[],d=r.performance.metrics.filter(l=>!a.includes(l));if(d.length)throw new Error(`The tracker's source does not measure ${d.join(", ")}`)}if(r.trigger.kind==="manual"&&r.trigger.input!=="none"&&!r.evaluate)throw new Error("Evidence quests require an evaluator");let u=Object.fromEntries(Object.entries(r.settings.shape).map(([a,d])=>{let l=fe.safeParse(d.meta());if(!l.success)throw new Error(`Setting "${a}" is not a quest setting: build it with a settings builder, such as settings.integer({ label, default, min, max })`);return[a,l.data]}));for(let a of ue(r.trigger.kind==="automatic"?r.trigger.tracker?.where:void 0))if(u[a]?.kind!=="integer")throw new Error(`The tracker filter compares with setting "${a}", which is not an integer setting`);function h(a){let d=r.settings.parse(a),l=ke(u,d),g=Ee.parse(typeof r.rewards=="function"?r.rewards({settings:d}):r.rewards),w=[...g.flatMap(m=>m.kind==="integration"?[m.provider]:[]),...Object.values(u).flatMap(m=>m.kind==="resource"&&m.source.provider!=="domino"?[m.source.provider]:[])];for(let m of w)if(!c.includes(m))throw new Error(`Declare the ${m} integration on this quest`);return ze.parse({quest:n,evaluatorProtocol:Q,title:typeof r.title=="function"?r.title({settings:d}):r.title,presentation:r.presentation?.({settings:d})??{},fields:u,values:l,rewards:g,humanReview:r.review?.({settings:d})?.enabled??!0,trigger:r.trigger,...r.performance?{performance:L.parse({metrics:r.performance.metrics,maxAgeMs:r.performance.maxAgeMs})}:{},integrations:c,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:r.visibility??"visible",profile:r.profile??{visible:!1},budgets:r.budgets??[],requires:r.requires??[],...r.campaign?{campaign:r.campaign}:{},...r.availability?{availability:r.availability}:{},...r.retryCooldownMs===void 0?{}:{retryCooldownMs:r.retryCooldownMs}})}return v("quest",{protocol:Q,key:n,describe:h,async evaluate(a){let d=r.settings.parse(a.settings),l=i?me.parse(a.tracker):null,g=Ge.get(r.trigger),w=l&&g?J(g,l.record.data):null;if(w)return M.parse({kind:"reject",reason:`The record's data does not match the data schema this quest was built with: ${w.path} ${w.reason}`});let m=l;if(a.performance){if(!r.performance)throw new Error("Quest has no performance evaluator");let f=Me.parse(a.performance),_e=R(z(r.performance.metrics),q().int().safe().nonnegative()).parse(f.metrics),b=await r.performance.evaluate({settings:d,member:a.member,tracker:m,metrics:_e,observedAt:f.observedAt});if(!b)throw new Error("Performance evaluator returned no decision");if(b.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 M.parse(b.kind==="accept"?{kind:"accept",rewards:f.rewards}:b.kind==="review"&&a.humanReview?{kind:"review",reason:b.reason,rewards:f.rewards}:{kind:"reject",reason:b.reason,...b.kind==="review"?{requestedReview:!0}:{}})}let p=r.evaluate?await r.evaluate({settings:d,member:a.member,input:a.input,tracker:m,eligibleAt:a.eligibleAt,calendar:a.calendar,now:a.now,review:a.review,trackers:V(a.trackers),wallet:a.wallet,images:a.images,...a.telegram?{telegram:a.telegram}:{},...Object.fromEntries(c.map(f=>[f,a[f]]))}):S.accept();if(!p)throw new Error("Evaluator returned no decision");return p.kind==="review"&&!a.humanReview?M.parse({kind:"reject",reason:p.reason,requestedReview:!0}):M.parse(p.kind==="accept"||p.kind==="review"?{...p,rewards:p.rewards??a.rewards,...o?.kind==="keyed"||o?.kind==="progress"?{completionKey:o.kind==="progress"?o.distinct({...a,tracker:l}):p.completionKey??o.key({...a,tracker:l})}:{}}:p)}})}}var nt=Ze(!1),ot=Ze(!0);export{He as CapabilityError,Wr as automatic,et as automaticFulfillment,Kr as badge,tr as balanceAtLeast,Hr as budget,$r as calendar,Fe as capabilityErrorCodes,rr as completed,Fr as content,Ve as cosmosDenomSchema,Je as cosmosNetworkSchema,Cr as count,mr as customSource,S as decision,zr as defineBadge,Ye as defineCampaign,Mr as defineEngagementReward,er as defineGroup,Lr as defineLeaderboard,jr as defineLedger,nr as defineOffer,nt as defineQuest,ot as defineQuestType,Tr as defineReferral,rt as defineTieredReward,Or as defineTracker,Pr as discord,Dr as earned,at as evaluators,Zr as evidence,sr as formatUnits,ar as inGroup,Xe as isEvmChainId,Jr as keyed,_r as manual,tt as once,or as parseUnits,Qr as pointLedgers,Nr as points,Vr as progress,Ar as questCompleted,xr as rolling,Ur as settings,Yr as staffHandover,Rr as streak,Br as telegram,j as trackerDataSchema,me as trackerTriggerContextSchema,Xr as untracked,Ir as x,We as z};