@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.
- package/dist/authoring.js +4 -4
- package/dist/browser.js +10 -10
- package/dist/{chunk-YBMCF54E.js → chunk-2VBCWGBG.js} +10 -7
- package/dist/{chunk-HO4FZJSH.js → chunk-3UCK2C2P.js} +2 -2
- package/dist/{chunk-ZTPILNSV.js → chunk-4W4FXLGM.js} +2 -2
- package/dist/{chunk-ILH73K3H.js → chunk-6IC332LX.js} +1 -1
- package/dist/{chunk-PMSCHJKX.js → chunk-DJAIFEV4.js} +9 -1
- package/dist/{chunk-UOHYYB7V.js → chunk-EC5MEEZD.js} +1 -1
- package/dist/{chunk-W5UBRNDT.js → chunk-JPFPLYQS.js} +1 -1
- package/dist/{chunk-Q5PX3GDA.js → chunk-KHFDDXAM.js} +1 -1
- package/dist/{chunk-TFQNNOFR.js → chunk-OXIXMXFB.js} +1 -1
- package/dist/{chunk-ZY4RI4DJ.js → chunk-R5BDN7US.js} +1 -1
- package/dist/{chunk-LXHO3LYB.js → chunk-SESHFICW.js} +8 -8
- package/dist/{chunk-WSOUOG6S.js → chunk-SKBZ7UVZ.js} +1 -1
- package/dist/{chunk-J7YJHMF7.js → chunk-TJ2OH3MQ.js} +1 -1
- package/dist/{chunk-NNGGEUMQ.js → chunk-WE6LLVR5.js} +1 -1
- package/dist/{chunk-TEPZZXDI.js → chunk-Y22GX76Y.js} +7 -6
- package/dist/{chunk-K3PLZ4CR.js → chunk-ZRTNPNNG.js} +4 -4
- package/dist/index.js +9 -9
- package/dist/internal.js +8 -8
- package/dist/portal-proxy.js +3 -3
- package/dist/react/index.js +10 -10
- package/dist/runtime/authoring.js +1 -1
- package/dist/runtime/chunks/KMKCMYDX.js +1 -0
- package/dist/runtime/manifest.json +3 -3
- package/dist/runtime/schema.js +1 -1
- package/dist/schema.d.ts +7 -1
- package/dist/schema.js +9 -7
- package/dist/server/index.js +14 -14
- package/dist/testing.js +5 -5
- package/package.json +1 -1
- 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-
|
|
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-
|
|
23
|
+
} from "./chunk-SKBZ7UVZ.js";
|
|
24
24
|
import {
|
|
25
25
|
telegramReactionDataSchema,
|
|
26
26
|
telegramReactionsNamespace
|
|
27
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
24
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
61
|
+
} from "./chunk-SKBZ7UVZ.js";
|
|
62
62
|
import {
|
|
63
63
|
telegramAccountConnectionSchema
|
|
64
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-TJ2OH3MQ.js";
|
|
65
65
|
import {
|
|
66
66
|
exchangeResultSchema,
|
|
67
67
|
memberSummarySchema,
|
|
68
68
|
participantSessionSchema
|
|
69
|
-
} from "./chunk-
|
|
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-
|
|
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({
|
|
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-
|
|
7
|
+
} from "./chunk-6IC332LX.js";
|
|
8
8
|
import {
|
|
9
9
|
photoResultSchema
|
|
10
|
-
} from "./chunk-
|
|
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-
|
|
3
|
+
} from "./chunk-SESHFICW.js";
|
|
4
4
|
import {
|
|
5
5
|
RelayErrorCode,
|
|
6
6
|
asRelayError,
|
|
7
7
|
clientError,
|
|
8
8
|
cosmosChain
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DJAIFEV4.js";
|
|
10
10
|
|
|
11
11
|
// src/base58.ts
|
|
12
12
|
var alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
@@ -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({
|
|
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,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createRelayAction,
|
|
3
3
|
withActionId
|
|
4
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
51
|
+
} from "./chunk-SKBZ7UVZ.js";
|
|
52
52
|
import {
|
|
53
53
|
telegramAccountConnectionSchema,
|
|
54
54
|
telegramMiniAppSignInSchema,
|
|
55
55
|
telegramSignInMethodsSchema
|
|
56
|
-
} from "./chunk-
|
|
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-
|
|
63
|
+
} from "./chunk-WE6LLVR5.js";
|
|
64
64
|
import {
|
|
65
65
|
clientIdentity
|
|
66
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
112
|
+
} from "./chunk-DJAIFEV4.js";
|
|
113
113
|
|
|
114
114
|
// src/legacy-submissions.ts
|
|
115
115
|
import * as z from "zod";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
badgeSchema,
|
|
3
3
|
pointLedgerReferenceSchema
|
|
4
|
-
} from "./chunk-
|
|
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-
|
|
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(
|
|
174
|
-
collections: z2.array(questCollectionSchema.omit({ archivedAt: true })).max(
|
|
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(
|
|
211
|
-
collections: z2.array(collectionSlotDeclarationSchema).max(
|
|
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-
|
|
7
|
+
} from "./chunk-WE6LLVR5.js";
|
|
8
8
|
import {
|
|
9
9
|
clientIdentity
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-OXIXMXFB.js";
|
|
11
11
|
import {
|
|
12
12
|
authScopeSchema
|
|
13
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
8
|
+
} from "./chunk-SESHFICW.js";
|
|
9
9
|
import {
|
|
10
10
|
createRelayAction
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-EC5MEEZD.js";
|
|
12
12
|
import {
|
|
13
13
|
QuestOutcomeState
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-Y22GX76Y.js";
|
|
15
15
|
import {
|
|
16
16
|
PointEntryKind
|
|
17
|
-
} from "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
12
|
+
} from "./chunk-ZRTNPNNG.js";
|
|
13
13
|
import {
|
|
14
14
|
parseImageExtraction,
|
|
15
15
|
parseImageResult
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
35
|
-
import "./chunk-
|
|
36
|
-
import "./chunk-
|
|
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-
|
|
45
|
+
} from "./chunk-DJAIFEV4.js";
|
|
46
46
|
export {
|
|
47
47
|
MANAGEMENT_TIMEOUT,
|
|
48
48
|
REFERRAL_INTEGRATION_REWARD_ERROR,
|
package/dist/portal-proxy.js
CHANGED
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
} from "./chunk-MLIXJPKL.js";
|
|
4
4
|
import {
|
|
5
5
|
clientIdentity
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OXIXMXFB.js";
|
|
7
7
|
import {
|
|
8
8
|
exchangeResultSchema
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-KHFDDXAM.js";
|
|
10
|
+
import "./chunk-DJAIFEV4.js";
|
|
11
11
|
|
|
12
12
|
// src/portal-proxy.ts
|
|
13
13
|
var statusCode = (status) => ({
|
package/dist/react/index.js
CHANGED
|
@@ -9,19 +9,19 @@ import {
|
|
|
9
9
|
readSignInMethods,
|
|
10
10
|
signInOptionsFrom,
|
|
11
11
|
telegramMiniAppInitData
|
|
12
|
-
} from "../chunk-
|
|
13
|
-
import "../chunk-
|
|
12
|
+
} from "../chunk-4W4FXLGM.js";
|
|
13
|
+
import "../chunk-SESHFICW.js";
|
|
14
14
|
import {
|
|
15
15
|
createRelayAction
|
|
16
|
-
} from "../chunk-
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
19
|
-
import "../chunk-
|
|
20
|
-
import "../chunk-
|
|
21
|
-
import "../chunk-
|
|
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-
|
|
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-
|
|
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};
|