@domino-sdk/relay 1.45.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 (32) hide show
  1. package/dist/authoring.js +4 -4
  2. package/dist/browser.js +10 -10
  3. package/dist/{chunk-YBMCF54E.js → chunk-2VBCWGBG.js} +10 -7
  4. package/dist/{chunk-HO4FZJSH.js → chunk-3UCK2C2P.js} +2 -2
  5. package/dist/{chunk-ZTPILNSV.js → chunk-4W4FXLGM.js} +2 -2
  6. package/dist/{chunk-ILH73K3H.js → chunk-6IC332LX.js} +1 -1
  7. package/dist/{chunk-PMSCHJKX.js → chunk-DJAIFEV4.js} +9 -1
  8. package/dist/{chunk-UOHYYB7V.js → chunk-EC5MEEZD.js} +1 -1
  9. package/dist/{chunk-W5UBRNDT.js → chunk-JPFPLYQS.js} +1 -1
  10. package/dist/{chunk-Q5PX3GDA.js → chunk-KHFDDXAM.js} +1 -1
  11. package/dist/{chunk-TFQNNOFR.js → chunk-OXIXMXFB.js} +1 -1
  12. package/dist/{chunk-ZY4RI4DJ.js → chunk-R5BDN7US.js} +1 -1
  13. package/dist/{chunk-LXHO3LYB.js → chunk-SESHFICW.js} +8 -8
  14. package/dist/{chunk-WSOUOG6S.js → chunk-SKBZ7UVZ.js} +1 -1
  15. package/dist/{chunk-J7YJHMF7.js → chunk-TJ2OH3MQ.js} +1 -1
  16. package/dist/{chunk-NNGGEUMQ.js → chunk-WE6LLVR5.js} +1 -1
  17. package/dist/{chunk-TEPZZXDI.js → chunk-Y22GX76Y.js} +7 -6
  18. package/dist/{chunk-K3PLZ4CR.js → chunk-ZRTNPNNG.js} +4 -4
  19. package/dist/index.js +9 -9
  20. package/dist/internal.js +8 -8
  21. package/dist/portal-proxy.js +3 -3
  22. package/dist/react/index.js +10 -10
  23. package/dist/runtime/authoring.js +1 -1
  24. package/dist/runtime/chunks/KMKCMYDX.js +1 -0
  25. package/dist/runtime/manifest.json +3 -3
  26. package/dist/runtime/schema.js +1 -1
  27. package/dist/schema.d.ts +7 -1
  28. package/dist/schema.js +9 -7
  29. package/dist/server/index.js +14 -14
  30. package/dist/testing.js +5 -5
  31. package/package.json +1 -1
  32. package/dist/runtime/chunks/DALOQGNI.js +0 -1
package/dist/authoring.js CHANGED
@@ -10,7 +10,7 @@ import {
10
10
  sourceDataSchema,
11
11
  sourceRoles,
12
12
  validateQuestShape
13
- } from "./chunk-ZY4RI4DJ.js";
13
+ } from "./chunk-R5BDN7US.js";
14
14
  import {
15
15
  badgeDeclarationSchema,
16
16
  defineOffer,
@@ -20,11 +20,11 @@ import {
20
20
  leaderboardAuthoringSchema,
21
21
  pointLedgerDeclarationSchema,
22
22
  referralAuthoringSchema
23
- } from "./chunk-WSOUOG6S.js";
23
+ } from "./chunk-SKBZ7UVZ.js";
24
24
  import {
25
25
  telegramReactionDataSchema,
26
26
  telegramReactionsNamespace
27
- } from "./chunk-J7YJHMF7.js";
27
+ } from "./chunk-TJ2OH3MQ.js";
28
28
  import {
29
29
  authoringKey,
30
30
  badgeReward,
@@ -82,7 +82,7 @@ import {
82
82
  whereSchemaIssue,
83
83
  whereSettings,
84
84
  xSearchSourceSchema
85
- } from "./chunk-PMSCHJKX.js";
85
+ } from "./chunk-DJAIFEV4.js";
86
86
 
87
87
  // src/builders.ts
88
88
  import * as z from "zod";
package/dist/browser.js CHANGED
@@ -12,16 +12,16 @@ import {
12
12
  solanaSigner,
13
13
  telegramMiniAppInitData,
14
14
  walletStandardSolanaSigner
15
- } from "./chunk-ZTPILNSV.js";
16
- import "./chunk-LXHO3LYB.js";
17
- import "./chunk-UOHYYB7V.js";
18
- import "./chunk-TEPZZXDI.js";
19
- import "./chunk-WSOUOG6S.js";
20
- import "./chunk-J7YJHMF7.js";
21
- import "./chunk-NNGGEUMQ.js";
22
- import "./chunk-TFQNNOFR.js";
23
- import "./chunk-Q5PX3GDA.js";
24
- import "./chunk-PMSCHJKX.js";
15
+ } from "./chunk-4W4FXLGM.js";
16
+ import "./chunk-SESHFICW.js";
17
+ import "./chunk-EC5MEEZD.js";
18
+ import "./chunk-Y22GX76Y.js";
19
+ import "./chunk-SKBZ7UVZ.js";
20
+ import "./chunk-TJ2OH3MQ.js";
21
+ import "./chunk-WE6LLVR5.js";
22
+ import "./chunk-OXIXMXFB.js";
23
+ import "./chunk-KHFDDXAM.js";
24
+ import "./chunk-DJAIFEV4.js";
25
25
  export {
26
26
  browserSubmissionStore,
27
27
  cosmosChainList,
@@ -6,7 +6,7 @@ import {
6
6
  imageSightingsSchema,
7
7
  imageUploadsSchema,
8
8
  publishedImageSchema
9
- } from "./chunk-ILH73K3H.js";
9
+ } from "./chunk-6IC332LX.js";
10
10
  import {
11
11
  catalogDeploymentSchema,
12
12
  collectionPassSchema,
@@ -24,7 +24,7 @@ import {
24
24
  questTypeVersionSchema,
25
25
  questViewSchema,
26
26
  rewardDeliveriesSchema
27
- } from "./chunk-TEPZZXDI.js";
27
+ } from "./chunk-Y22GX76Y.js";
28
28
  import {
29
29
  badgeArtifactSchema,
30
30
  badgeSchema,
@@ -58,15 +58,15 @@ import {
58
58
  referralDefinitionSchema,
59
59
  referralHistorySchema,
60
60
  referralSummarySchema
61
- } from "./chunk-WSOUOG6S.js";
61
+ } from "./chunk-SKBZ7UVZ.js";
62
62
  import {
63
63
  telegramAccountConnectionSchema
64
- } from "./chunk-J7YJHMF7.js";
64
+ } from "./chunk-TJ2OH3MQ.js";
65
65
  import {
66
66
  exchangeResultSchema,
67
67
  memberSummarySchema,
68
68
  participantSessionSchema
69
- } from "./chunk-Q5PX3GDA.js";
69
+ } from "./chunk-KHFDDXAM.js";
70
70
  import {
71
71
  accountConnectionSchema,
72
72
  attemptSchema,
@@ -87,6 +87,7 @@ import {
87
87
  publishedReleaseSchema,
88
88
  publishedTrackerSchema,
89
89
  questBudgetViewSchema,
90
+ questScaleLimits,
90
91
  releaseSchema,
91
92
  responseListSchema,
92
93
  responseSchema,
@@ -98,7 +99,7 @@ import {
98
99
  walletBalanceSchema,
99
100
  walletMessageChallengeSchema,
100
101
  walletSignInNetworksSchema
101
- } from "./chunk-PMSCHJKX.js";
102
+ } from "./chunk-DJAIFEV4.js";
102
103
 
103
104
  // src/deployments.ts
104
105
  import * as z from "zod";
@@ -119,7 +120,9 @@ var projectCatalogArtifactSchema = catalogDeploymentSchema.omit({ expectedRevisi
119
120
  */
120
121
  runtimes: z.array(sdkRuntimeSchema).max(4).default([])
121
122
  });
122
- var projectDeploymentSchema = projectCatalogArtifactSchema.extend({ releases: z.array(releaseSchema).max(50).default([]) }).refine(
123
+ var projectDeploymentSchema = projectCatalogArtifactSchema.extend({
124
+ releases: z.array(releaseSchema).max(questScaleLimits.quests).default([])
125
+ }).refine(
123
126
  (value) => value.engagement.length > 0 || value.trackers.length > 0 || value.pointLedgers.length > 0 || value.badges.length > 0 || value.offers.length > 0 || value.releases.length > 0 || value.leaderboards.length > 0 || value.referrals.length > 0 || value.images.length > 0 || value.types.length > 0 || value.collections.length > 0 || value.supportedInteractions !== void 0 || value.calendar !== void 0,
124
127
  "No resources configured. Add engagement, trackers, quests, questTypes, badges, pointLedgers, offers, leaderboards, referrals, images, collections, supportedInteractions, or calendar to relay.json."
125
128
  );
@@ -4,10 +4,10 @@ import {
4
4
  imageFieldsSchema,
5
5
  imageInspectionSchema,
6
6
  imageSightingsSchema
7
- } from "./chunk-ILH73K3H.js";
7
+ } from "./chunk-6IC332LX.js";
8
8
  import {
9
9
  photoResultSchema
10
- } from "./chunk-PMSCHJKX.js";
10
+ } from "./chunk-DJAIFEV4.js";
11
11
 
12
12
  // src/image-results.ts
13
13
  import * as z from "zod";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  createRelayClient
3
- } from "./chunk-LXHO3LYB.js";
3
+ } from "./chunk-SESHFICW.js";
4
4
  import {
5
5
  RelayErrorCode,
6
6
  asRelayError,
7
7
  clientError,
8
8
  cosmosChain
9
- } from "./chunk-PMSCHJKX.js";
9
+ } from "./chunk-DJAIFEV4.js";
10
10
 
11
11
  // src/base58.ts
12
12
  var alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
@@ -2,7 +2,7 @@ import {
2
2
  identifier,
3
3
  responseShape,
4
4
  xTweetSchema
5
- } from "./chunk-PMSCHJKX.js";
5
+ } from "./chunk-DJAIFEV4.js";
6
6
 
7
7
  // src/x.ts
8
8
  import * as z from "zod";
@@ -2102,6 +2102,11 @@ var trackerTriggerContextSchema = z13.object({
2102
2102
 
2103
2103
  // src/sdk-runtime.ts
2104
2104
  import * as z14 from "zod";
2105
+ var questScaleLimits = {
2106
+ quests: 1e3,
2107
+ questTypes: 200,
2108
+ collections: 1e3
2109
+ };
2105
2110
  var sdkRuntimeLimits = {
2106
2111
  modules: 200,
2107
2112
  /** Characters of module source, summed over all modules. */
@@ -3043,7 +3048,9 @@ var releaseSchema = artifactSchema.extend({
3043
3048
  expectedRelease: identifier.nullable().optional(),
3044
3049
  settingRenames: z27.record(z27.string(), z27.string()).optional()
3045
3050
  }).strict();
3046
- var batchReleaseSchema = z27.object({ releases: z27.array(releaseSchema).min(1).max(50) }).strict();
3051
+ var batchReleaseSchema = z27.object({
3052
+ releases: z27.array(releaseSchema).min(1).max(questScaleLimits.quests)
3053
+ }).strict();
3047
3054
  var questSettingsInputSchema = z27.object({
3048
3055
  quest: identifier,
3049
3056
  expectedRelease: identifier,
@@ -3717,6 +3724,7 @@ export {
3717
3724
  trackerContentStageSchema,
3718
3725
  trackerTriggerContextSchema,
3719
3726
  maxPointsAmount,
3727
+ questScaleLimits,
3720
3728
  sdkRuntimeLimits,
3721
3729
  sdkRuntimeModulePathSchema,
3722
3730
  sdkRuntimeReferenceSchema,
@@ -2,7 +2,7 @@ import {
2
2
  RelayErrorCode,
3
3
  clientError,
4
4
  isRequestError
5
- } from "./chunk-PMSCHJKX.js";
5
+ } from "./chunk-DJAIFEV4.js";
6
6
 
7
7
  // src/action.ts
8
8
  function withActionId(value) {
@@ -8,7 +8,7 @@ import {
8
8
  rewardBundleSchema,
9
9
  settingsValuesSchema,
10
10
  trackerTriggerContextSchema
11
- } from "./chunk-PMSCHJKX.js";
11
+ } from "./chunk-DJAIFEV4.js";
12
12
 
13
13
  // src/server/attempt-captures.ts
14
14
  import * as z from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  identifier
3
- } from "./chunk-PMSCHJKX.js";
3
+ } from "./chunk-DJAIFEV4.js";
4
4
 
5
5
  // src/auth.ts
6
6
  import * as z from "zod";
@@ -1,6 +1,6 @@
1
1
  // package.json
2
2
  var name = "@domino-sdk/relay";
3
- var version = "1.45.0";
3
+ var version = "1.46.0";
4
4
 
5
5
  // src/client-identity.ts
6
6
  function clientIdentity() {
@@ -5,7 +5,7 @@ import {
5
5
  isKnownTrackerSource,
6
6
  trackerDataSchema,
7
7
  xAccountRoles
8
- } from "./chunk-PMSCHJKX.js";
8
+ } from "./chunk-DJAIFEV4.js";
9
9
 
10
10
  // src/quest-shape.ts
11
11
  function validateQuestShape(description, options = {}) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createRelayAction,
3
3
  withActionId
4
- } from "./chunk-UOHYYB7V.js";
4
+ } from "./chunk-EC5MEEZD.js";
5
5
  import {
6
6
  collectionPassSchema,
7
7
  participantActivityQuerySchema,
@@ -17,7 +17,7 @@ import {
17
17
  questOutcomeSchema,
18
18
  rewardDeliveriesSchema,
19
19
  rewardDeliveryQuerySchema
20
- } from "./chunk-TEPZZXDI.js";
20
+ } from "./chunk-Y22GX76Y.js";
21
21
  import {
22
22
  AVATAR_UPLOAD_LIMIT,
23
23
  avatarUploadTypes,
@@ -48,29 +48,29 @@ import {
48
48
  referralDefinitionSchema,
49
49
  referralHistorySchema,
50
50
  referralSummarySchema
51
- } from "./chunk-WSOUOG6S.js";
51
+ } from "./chunk-SKBZ7UVZ.js";
52
52
  import {
53
53
  telegramAccountConnectionSchema,
54
54
  telegramMiniAppSignInSchema,
55
55
  telegramSignInMethodsSchema
56
- } from "./chunk-J7YJHMF7.js";
56
+ } from "./chunk-TJ2OH3MQ.js";
57
57
  import {
58
58
  PARTICIPANT_TIMEOUT,
59
59
  lifetime,
60
60
  retryAfter,
61
61
  retrying,
62
62
  validTimeout
63
- } from "./chunk-NNGGEUMQ.js";
63
+ } from "./chunk-WE6LLVR5.js";
64
64
  import {
65
65
  clientIdentity
66
- } from "./chunk-TFQNNOFR.js";
66
+ } from "./chunk-OXIXMXFB.js";
67
67
  import {
68
68
  exchangeResultSchema,
69
69
  exchangeSchema,
70
70
  memberSummarySchema,
71
71
  participantSessionSchema,
72
72
  sessionMember
73
- } from "./chunk-Q5PX3GDA.js";
73
+ } from "./chunk-KHFDDXAM.js";
74
74
  import {
75
75
  RelayError,
76
76
  RelayErrorCode,
@@ -109,7 +109,7 @@ import {
109
109
  walletSignInNetworksSchema,
110
110
  walletSignatureSchema,
111
111
  walletUnlinkInputSchema
112
- } from "./chunk-PMSCHJKX.js";
112
+ } from "./chunk-DJAIFEV4.js";
113
113
 
114
114
  // src/legacy-submissions.ts
115
115
  import * as z from "zod";
@@ -12,7 +12,7 @@ import {
12
12
  responseShape,
13
13
  rewardKey,
14
14
  tierRewardSchema
15
- } from "./chunk-PMSCHJKX.js";
15
+ } from "./chunk-DJAIFEV4.js";
16
16
 
17
17
  // src/badges.ts
18
18
  import * as z from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  accountConnectionSchema
3
- } from "./chunk-PMSCHJKX.js";
3
+ } from "./chunk-DJAIFEV4.js";
4
4
 
5
5
  // src/telegram.ts
6
6
  import * as z from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isRequestError
3
- } from "./chunk-PMSCHJKX.js";
3
+ } from "./chunk-DJAIFEV4.js";
4
4
 
5
5
  // src/request-lifetime.ts
6
6
  var PARTICIPANT_TIMEOUT = 15e3;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  badgeSchema,
3
3
  pointLedgerReferenceSchema
4
- } from "./chunk-WSOUOG6S.js";
4
+ } from "./chunk-SKBZ7UVZ.js";
5
5
  import {
6
6
  authoringIdentityShape,
7
7
  entitlementSchema,
@@ -14,6 +14,7 @@ import {
14
14
  prerequisiteSchema,
15
15
  publishedReleaseSchema,
16
16
  questPresentationContentSchema,
17
+ questScaleLimits,
17
18
  responseShape,
18
19
  retryCooldownMsSchema,
19
20
  reviewModeSchema,
@@ -22,7 +23,7 @@ import {
22
23
  storedQuestDescriptionSchema,
23
24
  storedReviewModeSchema,
24
25
  tieredRewardReferenceSchema
25
- } from "./chunk-PMSCHJKX.js";
26
+ } from "./chunk-DJAIFEV4.js";
26
27
 
27
28
  // src/participant-activity.ts
28
29
  import * as z from "zod";
@@ -170,8 +171,8 @@ var questInstanceSchema = z2.object({
170
171
  var questDraftChangesSchema = z2.object({
171
172
  quests: z2.array(
172
173
  questInstanceSchema.extend({ expectedRelease: identifier.nullable() })
173
- ).max(50),
174
- collections: z2.array(questCollectionSchema.omit({ archivedAt: true })).max(50)
174
+ ).max(questScaleLimits.quests),
175
+ collections: z2.array(questCollectionSchema.omit({ archivedAt: true })).max(questScaleLimits.collections)
175
176
  }).strict();
176
177
  var draftBase = z2.object({
177
178
  id: identifier,
@@ -207,8 +208,8 @@ var catalogDeploymentSchema = z2.object({
207
208
  runtime: sdkRuntimeReferenceSchema.optional(),
208
209
  provider: reviewModeSchema
209
210
  })
210
- ).max(50).default([]),
211
- collections: z2.array(collectionSlotDeclarationSchema).max(50).default([]),
211
+ ).max(questScaleLimits.questTypes).default([]),
212
+ collections: z2.array(collectionSlotDeclarationSchema).max(questScaleLimits.collections).default([]),
212
213
  supportedInteractions: z2.array(interactionSchema).min(1).optional()
213
214
  }).strict();
214
215
  var catalogDeploymentPreviewSchema = responseShape(
@@ -4,20 +4,20 @@ import {
4
4
  retryAfter,
5
5
  retrying,
6
6
  validTimeout
7
- } from "./chunk-NNGGEUMQ.js";
7
+ } from "./chunk-WE6LLVR5.js";
8
8
  import {
9
9
  clientIdentity
10
- } from "./chunk-TFQNNOFR.js";
10
+ } from "./chunk-OXIXMXFB.js";
11
11
  import {
12
12
  authScopeSchema
13
- } from "./chunk-Q5PX3GDA.js";
13
+ } from "./chunk-KHFDDXAM.js";
14
14
  import {
15
15
  RequestError,
16
16
  appIdentityKindSchema,
17
17
  isRequestError,
18
18
  knownResponse,
19
19
  openIdentityKindSchema
20
- } from "./chunk-PMSCHJKX.js";
20
+ } from "./chunk-DJAIFEV4.js";
21
21
 
22
22
  // src/configuration.ts
23
23
  function questConfiguration(release) {
package/dist/index.js CHANGED
@@ -5,22 +5,22 @@ import {
5
5
  import {
6
6
  QuestUpdatedError,
7
7
  createRelayClient
8
- } from "./chunk-LXHO3LYB.js";
8
+ } from "./chunk-SESHFICW.js";
9
9
  import {
10
10
  createRelayAction
11
- } from "./chunk-UOHYYB7V.js";
11
+ } from "./chunk-EC5MEEZD.js";
12
12
  import {
13
13
  QuestOutcomeState
14
- } from "./chunk-TEPZZXDI.js";
14
+ } from "./chunk-Y22GX76Y.js";
15
15
  import {
16
16
  PointEntryKind
17
- } from "./chunk-WSOUOG6S.js";
18
- import "./chunk-J7YJHMF7.js";
19
- import "./chunk-NNGGEUMQ.js";
20
- import "./chunk-TFQNNOFR.js";
17
+ } from "./chunk-SKBZ7UVZ.js";
18
+ import "./chunk-TJ2OH3MQ.js";
19
+ import "./chunk-WE6LLVR5.js";
20
+ import "./chunk-OXIXMXFB.js";
21
21
  import {
22
22
  sessionMember
23
- } from "./chunk-Q5PX3GDA.js";
23
+ } from "./chunk-KHFDDXAM.js";
24
24
  import {
25
25
  AttemptStatus,
26
26
  RelayError,
@@ -29,7 +29,7 @@ import {
29
29
  isRelayError,
30
30
  isRequestError,
31
31
  paginate
32
- } from "./chunk-PMSCHJKX.js";
32
+ } from "./chunk-DJAIFEV4.js";
33
33
  export {
34
34
  AttemptStatus,
35
35
  PointEntryKind,
package/dist/internal.js CHANGED
@@ -9,17 +9,17 @@ import {
9
9
  participantExchangeSchema,
10
10
  questConfiguration,
11
11
  sequenceCursorSchema
12
- } from "./chunk-K3PLZ4CR.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-TFQNNOFR.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-TFQNNOFR.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-ZTPILNSV.js";
13
- import "../chunk-LXHO3LYB.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-TFQNNOFR.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";
@@ -1 +1 @@
1
- import{Ac as ke,Ad as M,Dd as Ee,E as j,Ec as y,F as J,G as V,H as X,Hb as le,Hc as Ye,Ib as pe,Je as Me,Ld as Q,Na as L,Nd as ze,Ne as Re,Oa as oe,Ob as Je,Oc as v,Pa as I,Pb as Ve,Pc as we,Qa as se,Qc as E,Sc as er,V as Y,Vd as je,W as ee,Wg as nr,Z as re,Zf as Ae,_ as T,_e as Ce,a as Fe,ba as te,c as He,ca as D,d as C,da as ae,ec as Xe,fb as ce,fh as De,ga as ne,gd as rr,gh as Le,hc as ge,hd as tr,ib as ie,ic as he,id as ar,if as $e,jd as ve,jf as xe,kd as be,kf as U,md as ye,nb as ue,od as Se,rb as de,rc as O,sc as $,u as N,v as Z,vc as P,w as _,wc as B,wg as Te,x as W,xc as fe,y as F,yb as me,yd as qe,z as H}from"./chunks/DALOQGNI.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};
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};