@domino-sdk/relay 1.69.0 → 1.71.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 (66) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/build.mjs +3 -0
  3. package/dist/{accounts-DD4gAOCe.d.ts → accounts-COLmXRbW.d.ts} +144 -13
  4. package/dist/{attempt-captures-CbuCmthd.d.ts → attempt-captures-CVl161qB.d.ts} +3 -2
  5. package/dist/authoring.d.ts +68 -25
  6. package/dist/authoring.js +15 -9
  7. package/dist/{automatic-outcomes-DE3vfi8g.d.ts → automatic-outcomes-5l68PGr1.d.ts} +2 -2
  8. package/dist/browser.d.ts +9 -9
  9. package/dist/browser.js +11 -9
  10. package/dist/{catalog-Cf3fHDNn.d.ts → catalog-BR3g-1H9.d.ts} +41 -2
  11. package/dist/{chunk-ME2KUAVJ.js → chunk-3KKRXN5E.js} +1 -1
  12. package/dist/{chunk-CQVKOD3B.js → chunk-74SMLZZ5.js} +723 -685
  13. package/dist/{chunk-CZ23KRVK.js → chunk-CVJTIVAP.js} +1 -1
  14. package/dist/{chunk-TCREFRPK.js → chunk-DDID5QX5.js} +153 -4
  15. package/dist/{chunk-WVK3G2J2.js → chunk-EMKYDGZ3.js} +1 -1
  16. package/dist/{chunk-2A3BJ262.js → chunk-FGZGL5PG.js} +1 -1
  17. package/dist/{chunk-GEVARKEV.js → chunk-GHBYWDEZ.js} +8 -1
  18. package/dist/{chunk-RKTMSTT7.js → chunk-HN7DE2UN.js} +2 -2
  19. package/dist/{chunk-LGGD7S5T.js → chunk-IDG2VPYG.js} +32 -6
  20. package/dist/{chunk-SWLW4VN3.js → chunk-KC4UB4ZX.js} +1 -1
  21. package/dist/{chunk-ODJGTFPY.js → chunk-KIRXE37T.js} +6 -6
  22. package/dist/{chunk-VAGGGB6B.js → chunk-MDSSIOBC.js} +58 -1
  23. package/dist/{chunk-BRROI4CH.js → chunk-OFSJYXGI.js} +12 -4
  24. package/dist/{chunk-LZXDYSUH.js → chunk-PYZSCFMJ.js} +4 -0
  25. package/dist/{chunk-UGM6DUB2.js → chunk-QMKTYPK6.js} +4 -3
  26. package/dist/{chunk-PO2ZDY27.js → chunk-TW4RABVS.js} +1 -1
  27. package/dist/{chunk-AZDZEQFK.js → chunk-UEVZ3TST.js} +29 -2
  28. package/dist/{chunk-DIXYVGXO.js → chunk-VFHLMNYV.js} +1 -1
  29. package/dist/{chunk-WNEQEDMU.js → chunk-W6DBNBMT.js} +2 -2
  30. package/dist/{client-6eSYOl8h.d.ts → client-B__hMWtK.d.ts} +104 -7
  31. package/dist/{dashboards-DCOAXL54.d.ts → dashboards-DXpjHnq-.d.ts} +3 -3
  32. package/dist/{deployments-BIfdCMd5.d.ts → deployments-CT2kQloT.d.ts} +199 -3
  33. package/dist/{identity-integration-BlfOn8rc.d.ts → identity-integration-ClX4oUAu.d.ts} +4 -4
  34. package/dist/index.d.ts +10 -10
  35. package/dist/index.js +7 -7
  36. package/dist/internal.d.ts +44 -26
  37. package/dist/internal.js +26 -50
  38. package/dist/{limits-Ctaeq23J.d.ts → limits-B7wbnWhd.d.ts} +1 -1
  39. package/dist/{offers-COqHGbHm.d.ts → offers-D4pyeY9b.d.ts} +2 -2
  40. package/dist/portal-proxy.d.ts +2 -2
  41. package/dist/portal-proxy.js +11 -10
  42. package/dist/react/index.d.ts +31 -12
  43. package/dist/react/index.js +116 -41
  44. package/dist/{reward-deliveries-DFhYGJdx.d.ts → reward-deliveries-HGpj1VFz.d.ts} +1 -1
  45. package/dist/runtime/authoring.js +1 -1
  46. package/dist/runtime/chunks/A7G5P76B.js +1 -0
  47. package/dist/runtime/manifest.json +3 -3
  48. package/dist/runtime/schema.js +1 -1
  49. package/dist/schema.d.ts +40 -16
  50. package/dist/schema.js +9 -7
  51. package/dist/server/index.d.ts +12 -12
  52. package/dist/server/index.js +944 -579
  53. package/dist/{sign-in-providers-C97mRNbG.d.ts → sign-in-providers-lbOXCF8N.d.ts} +2 -2
  54. package/dist/solana.d.ts +12 -12
  55. package/dist/solana.js +8 -8
  56. package/dist/{telegram-browser-gRMgGs7B.d.ts → station-check-in-qBiaftfE.d.ts} +89 -7
  57. package/dist/{submission-input-BD7nORuh.d.ts → submission-input-U4aIkJuT.d.ts} +2 -2
  58. package/dist/telegram.d.ts +7 -7
  59. package/dist/testing.d.ts +15 -11
  60. package/dist/testing.js +23 -12
  61. package/dist/{tracker-data-DQgX3FIc.d.ts → tracker-data-2BYXZjsN.d.ts} +3 -3
  62. package/dist/{transport-BLU8jrhg.d.ts → transport-fszraZPi.d.ts} +1736 -19
  63. package/dist/{wallet-CPAjrW4k.d.ts → wallet-BqswMAqZ.d.ts} +3 -1
  64. package/dist/{wallet-browser-BzPt_Qb5.d.ts → wallet-browser-B5r7u3xB.d.ts} +1 -1
  65. package/package.json +1 -1
  66. package/dist/runtime/chunks/HKAI5OQA.js +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @domino-sdk/relay
2
2
 
3
+ ## 1.71.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 9f36a17: **Contest winners (experimental).** A reviewer marks any number of photos in a contest gallery as winners, and unmarks them: `management.galleries.markWinner({ attempt, reward? })` and `management.galleries.unmarkWinner({ attempt })`, also `markWinner(attempt, { reward })`, under `review` permission. Each answers `{ attempt, winner }`, where `winner` is `{ at, actor, reward }` or `null`. `reward: { quest }` names a staff-confirmed quest and also needs `confirm`: the mark confirms that quest for the photo's member as `attempts.confirm` does, so its rules, rewards, budgets and webhooks apply, and `winner.reward` is `{ quest, attempt }`. A photo's prize is confirmed once: marking it again, even after unmarking, pays nothing more. A refused confirmation, such as `member-banned` or `already-completed`, fails the mark and saves nothing. A wall's photo answers 409 `gallery-not-contest`, a hidden photo 409 `gallery-photo-hidden`, and hiding a winner now answers 409 `gallery-photo-winner`. Unmarking leaves the prize. Each change records a `gallery-winner-marked` or `gallery-winner-unmarked` event in the `reviews` audit category, and deleting the photo's evidence deletes its mark.
8
+
9
+ Gallery photos now carry `winner`, and `management.galleries.photos({ winners: true })` answers only winners. The CLI has `domino galleries winner ATTEMPT [--reward-quest QUEST]`, `domino galleries unwinner ATTEMPT` and `domino galleries photos --winners`. Console's **Photos** page marks contest photos as winners with an optional prize, shows a **Winner** badge, and filters to winners.
10
+
11
+ - 2560bcc: **Gallery export (experimental).** A reviewer downloads a gallery's photos as zips: `management.galleries.export({ quest?, day?, includeHidden?, cursor? })` (`GET /management/v1/galleries/export`), under `review` permission, answers one part as `{ body, photos, nextCursor }`, with `body` the zip as it streams and `nextCursor` the next part's cursor, `null` on the last. A part holds at most 1,000 photos and 2 GiB of stored photos, oldest first, so it stays a classic zip every unzip tool opens and a dropped connection restarts one part. Each photo is `<day>/<quest key>/<attempt>.jpg` or `.png`, a full-size copy without EXIF, GPS or other metadata, and `manifest.csv` lists `file, attempt, quest, quest_title, member, display_name, submitted_at, winner`, plus `hidden` with `includeHidden`; a photo that can't be re-encoded is listed in `skipped.csv` instead. Hidden photos are left out unless `includeHidden: true`. Each part records a `gallery-exported` event in the `reviews` audit category.
12
+
13
+ The CLI has `domino galleries export --out DIR [--quest QUEST] [--day YYYY-MM-DD] [--include-hidden] [--force]`, which writes `photos-1.zip`, `photos-2.zip`, … and prints the parts with their photos; a download that breaks off prints the `--cursor` and `--part` that continue from it. Console's **Photos** page has **Export**, which downloads the open gallery and day, with hidden photos when **Show** includes them.
14
+
15
+ - 1ff29d4: **Hide gallery photos (experimental).** A reviewer hides a gallery photo with a reason, and unhides it later: `management.galleries.hide({ attempt, reason })` and `management.galleries.unhide({ attempt, reason })`, also `hide(attempt, { reason })`, under `review` permission. Each answers `{ attempt, hidden }`, where `hidden` is `{ at, actor, reason }` or `null`. Hiding is presentation only: the attempt, its completion and rewards stay. Hiding a hidden photo records nothing, and the action ID replays the first answer. A photo that is not in a gallery, or whose evidence was deleted, answers 404 `not-found`. Each change records a `gallery-photo-hidden` or `gallery-photo-unhidden` event in the `reviews` audit category, and deleting the photo's evidence deletes its hiding; the events keep their reason until the member is erased.
16
+
17
+ Gallery photos now carry `hidden`, and `management.galleries.photos({ hidden })` takes `include` (the default), `exclude` or `only`. In `management.galleries.list()`, `photos` counts the visible photos and the new `hiddenPhotos` the hidden ones. The CLI has `domino galleries hide ATTEMPT --reason TEXT`, `domino galleries unhide ATTEMPT --reason TEXT` and `domino galleries photos --hidden`. Console's **Photos** page hides and unhides each photo with a reason and filters all, visible or hidden photos.
18
+
19
+ - f2ac4c3: **Photo galleries (experimental).** A quest whose input is a photo can declare `gallery: { kind: "wall" | "contest" }` in `defineQuest`, for a selfie wall or a photo contest. Publication refuses `gallery` on any other quest with 422 `gallery-requires-photo`, and on a reusable quest type. A gallery holds the quest's accepted photos whose evidence is kept, so evidence deleted by staff, by the retention period or by erasing the member leaves the gallery with it. `management.galleries.list()` answers each gallery with its photo count, and `management.galleries.photos({ quest?, day?, cursor?, limit? })` a page of photos, newest submission first, with the member's display name and the evidence to download; `day` is a project-calendar day of submission. Both need `review` permission. `GET /management/v1/evidence/:id?variant=preview` answers a copy at most 512 px on its longest edge, rotated and without EXIF, GPS or other metadata. The CLI has `domino galleries list` and `domino galleries photos [--quest QUEST] [--day YYYY-MM-DD] [--limit N] [--cursor CURSOR]`, and Console a **Photos** page that shows a gallery's photos as a grid filtered by day and quest.
20
+ - 8a1cadc: **Check in at a code station (experimental).** A member checks in at a station declared `proof: "code"` with its code and no wallet. From the browser, `relay.quests.checkIn(quest, station, { code })` checks in the signed-in member (`POST /v1/me/quests/<quest>/stations/<station>/check-in`). This is a new participant route: an app's portal proxy forwards it only from this SDK version on, so upgrade `@domino-sdk/relay` before calling it. From an app's server that checks codes itself, `management.attempts.submitStationCode({ quest, station, code, member })` (`POST /management/v1/attempts/station-code`, permission `ingest`) checks in the member it names. Domino refuses, in this order, 422 `station-unknown`, 422 `station-proof-mismatch`, 409 `station-code-not-set` (no code in this environment), 409 `station-revoked`, 409 `station-closed` (the window is judged at submission) and 422 `station-code-invalid`, and limits guessing: only wrong codes count, 10 per member and station an hour and 600 per station in 10 minutes, and while either is spent every check-in it covers answers 429 `rate-limited` with `Retry-After`, right codes included. The quest's evaluator and `perStation()` read `{ kind: "station-code", reference }` in `ctx.action`, whose type is now `QuestAction`, a union with `StationCodeAction`: check `ctx.action.kind` before reading a transaction's `signature` or `wallet`. Attempt reads carry a code check-in's station in a new `station` field and leave `action` out, so released clients keep parsing them; `management.quests.stations.list()` counts code check-ins in `completions`. `runQuest(quest, { action: { kind: "station-code", reference } })` simulates a code check-in. No answer, log line or stored record holds a submitted code.
21
+ - bed59d4: **Printable QR codes for code stations (experimental).** `management.quests.stations.codeQr(quest, station, { url })` (`GET /management/v1/quests/<quest>/stations/<station>/code/qr?url=<scan page>`, permission `publish`, test or live) answers a code station's QR code as SVG, drawn by Domino from the code it keeps sealed, so no read returns the code itself. The code links to your app's https scan page with `quest`, `station` and `code` query parameters added, keeping the page's own, and prints the station's label under it. A station without a code in that environment is refused with 409 `station-code-not-set`, a transaction station with 422 `station-proof-mismatch`, and a `url` that is not https with 422 `validation-failed`. In Console, a quest's **Check-in stations** section shows whether each code station has its code, and with `publish` generates (shown once), sets, rotates (after a confirmation) and clears it, and downloads its QR code as SVG or PNG for a **Scan page URL** Console remembers per quest and environment.
22
+ - 865ea20: **Check-in stations a secret code proves (experimental).** A station in `defineQuest({ stations })` can declare `proof: "code"`; left out, it stays `"transaction"`, and one quest can mix both. Domino refuses every Solana transaction that names a code station with 422 `station-proof-mismatch`, before it looks up the signers, and `defineStationAction` and `runQuest` refuse it the same way. Members check in there with the code (see the code check-ins entry). Each environment holds its own code for each code station, sealed, and a promotion never copies it: `management.quests.stations.setCode(quest, station, { code })` sets a chosen code (6 to 64 letters, digits, `-` or `_`), `generateCode(quest, station)` sets a 12-character code without look-alike characters and answers it this once, and `clearCode(quest, station)` removes it (`PUT`, `POST …/generate` and `DELETE /management/v1/quests/<quest>/stations/<station>/code`, permission `publish`; a CLI session may change live's). No read returns a code: `management.quests.stations.list()` adds each station's `proof` and `codeSet`, and the audit records `station-code-set` and `station-code-cleared` without the code. Preparing a promotion warns `binding-missing` with kind `station-code` and key `<quest key>/<station key>` for each code station live has no code for.
23
+ - 6d8e4e1: **A code station's scan page in a few lines (experimental).** `useStationCheckIn({ stations? })` from `@domino-sdk/relay/react` runs the page a station's printed QR code opens: it reads the quest, station and code from the link, takes the code out of the address bar with `history.replaceState` so a screenshot or a shared link doesn't show it, keeps the check-in in the tab's session storage through sign-in, even one that leaves the page, and checks the member in with `relay.quests.checkIn()` once someone is signed in. It reports `none`, `sign-in-required`, `checking`, `checked-in` (with the attempt and the station's label), `refused` (with the refusal code, such as `station-code-invalid`, `station-closed`, `station-revoked` or `rate-limited`, and `retryAfter`) or `failed`, and `retry()` sends a failed, rate-limited or pending check-in again with the same action ID. `checkInAtStation(relay, { stations? })` from `@domino-sdk/relay/browser` does the same without React. The new `station-codes` snippet installs a quest with code stations and its scan page, and the new guide "In-person check-ins with a code" walks through codes per environment, printing, the scan page and the event day.
24
+
25
+ ## 1.70.0
26
+
27
+ ### Minor Changes
28
+
29
+ - 020ae33: **`isEvmAddress` checks an EVM address in quest code.** `@domino-sdk/relay/authoring` and `@domino-sdk/relay/schema` export `isEvmAddress(value)`: whether `value` is `0x` and 40 hex digits, in either case, the rule `evmAddressSchema` applies. The `token-holder` snippet uses it. `solanaSignatureSchema` from `@domino-sdk/relay/server` is now the one `@domino-sdk/relay/schema` exports, which refuses a base58 string that doesn't decode to 64 bytes (it accepted any 64 to 88 base58 characters), with `Use a Solana transaction signature: base58, 64 bytes`. Settlement payout signatures are checked the same way.
30
+
3
31
  ## 1.69.0
4
32
 
5
33
  ### Minor Changes
package/build.mjs CHANGED
@@ -39,6 +39,7 @@ async function packageRoot(file, name) {
39
39
 
40
40
  while (dirname(dir) !== dir) {
41
41
  const manifest = await readFile(join(dir, "package.json"), "utf8").catch(
42
+ // No package.json here; the walk goes on to the parent.
42
43
  () => null
43
44
  )
44
45
 
@@ -62,6 +63,7 @@ const runtimes = new Map()
62
63
  async function installedRuntime(root) {
63
64
  const changed = await stat(join(root, "dist/runtime/manifest.json")).then(
64
65
  (manifest) => manifest.mtimeMs,
66
+ // No manifest: an SDK built without a runtime.
65
67
  () => null
66
68
  )
67
69
  const key = `${root}\0${changed}`
@@ -73,6 +75,7 @@ async function installedRuntime(root) {
73
75
  const dir = join(root, "dist/runtime")
74
76
  const manifest = await readFile(join(dir, "manifest.json"), "utf8")
75
77
  .then(JSON.parse)
78
+ // No readable runtime manifest: the build bundles the SDK instead of sharing a runtime.
76
79
  .catch(() => null)
77
80
 
78
81
  if (manifest?.format !== 1) {
@@ -1,6 +1,33 @@
1
1
  import * as z from 'zod';
2
- import { R as ResourceHandle, G as GroupHandle } from './tracker-data-DQgX3FIc.js';
3
- import { l as SolanaNetwork, S as SolanaIdlSource } from './wallet-CPAjrW4k.js';
2
+ import { R as ResourceHandle, G as GroupHandle } from './tracker-data-2BYXZjsN.js';
3
+ import { l as SolanaNetwork, S as SolanaIdlSource } from './wallet-BqswMAqZ.js';
4
+
5
+ /**
6
+ * The gallery kinds this SDK knows: a `wall` shows every accepted photo, a `contest` collects
7
+ * entries to pick winners from. Type-only, to keep the browser entrypoints within their size
8
+ * budgets.
9
+ *
10
+ * @compat open
11
+ * @experimental A minor release can change photo galleries.
12
+ */
13
+ type KnownGalleryKind = "wall" | "contest";
14
+ /**
15
+ * A photo gallery's kind. A newer Relay may name kinds this SDK does not know.
16
+ *
17
+ * @experimental A minor release can change photo galleries.
18
+ */
19
+ type GalleryKind = KnownGalleryKind | (string & {});
20
+ /**
21
+ * A photo quest's gallery, `{ kind }`. The kind parses as an open string, so a release read keeps a
22
+ * kind this SDK does not know; publication checks it against `galleryKinds`.
23
+ *
24
+ * @experimental A minor release can change photo galleries.
25
+ */
26
+ declare const questGallerySchema: z.ZodObject<{
27
+ kind: z.ZodType<GalleryKind>;
28
+ }, z.core.$strict>;
29
+ /** @experimental A minor release can change photo galleries. */
30
+ type QuestGallery = z.infer<typeof questGallerySchema>;
4
31
 
5
32
  /**
6
33
  * The modules this SDK knows a quest can declare to enable provider readers. Project connections
@@ -3213,31 +3240,74 @@ declare function takesSolanaTransaction(trigger: {
3213
3240
  /**
3214
3241
  * A check-in station of a quest: a place members complete it from, named by the `reference` of
3215
3242
  * the memo they sign. Its key is the reference, so it stays fixed once codes for it are printed.
3216
- * The station takes transactions whose block time falls in `opensAt <= time < closesAt`, epoch
3217
- * milliseconds; a bound left out leaves that side open.
3243
+ * The station takes check-ins whose time falls in `opensAt <= time < closesAt`, epoch
3244
+ * milliseconds; a bound left out leaves that side open. `proof` says what proves a check-in:
3245
+ * `"transaction"` (the default), a member-signed Solana transaction whose memo names the station,
3246
+ * or `"code"`, the secret code an operator sets for the station in each environment. A code
3247
+ * station refuses every transaction, since a transaction station's Solana Pay URL is public.
3218
3248
  */
3219
3249
  declare const questStationSchema: z.ZodObject<{
3220
3250
  key: z.ZodString;
3221
3251
  label: z.ZodString;
3222
3252
  opensAt: z.ZodOptional<z.ZodNumber>;
3223
3253
  closesAt: z.ZodOptional<z.ZodNumber>;
3254
+ proof: z.ZodOptional<z.ZodEnum<{
3255
+ code: "code";
3256
+ transaction: "transaction";
3257
+ }>>;
3224
3258
  }, z.core.$strict>;
3225
3259
  /**
3226
- * A check-in station of a quest: `{ key, label, opensAt?, closesAt? }`.
3260
+ * A check-in station of a quest: `{ key, label, opensAt?, closesAt?, proof? }`.
3227
3261
  *
3228
3262
  * @experimental A minor release can change check-in stations.
3229
3263
  */
3230
3264
  type QuestStation = z.infer<typeof questStationSchema>;
3231
3265
  /**
3232
- * Why `station` does not take a transaction from `blockTime` (epoch milliseconds): it is not one
3233
- * of the quest's stations, or closed then. Null when it takes it.
3266
+ * Why `station` does not take a check-in at `time` (epoch milliseconds) proved by `proof`: it is
3267
+ * not one of the quest's stations, the other proof proves it, or it was closed then. A
3268
+ * transaction's time is its block time; a code's is when it is submitted, since a code carries no
3269
+ * time of its own. Null when it takes it.
3234
3270
  */
3235
- declare function stationRefusal(stations: readonly QuestStation[], reference: string | null, blockTime: number): {
3236
- code: "station-unknown" | "station-closed";
3271
+ declare function stationRefusal(stations: readonly QuestStation[], reference: string | null, time: number, proof?: "transaction" | "code"): {
3272
+ code: "station-unknown" | "station-proof-mismatch" | "station-closed";
3237
3273
  message: string;
3238
3274
  } | null;
3239
- /** A Solana transaction signature: 64 bytes in base58. */
3240
- declare const solanaSignatureSchema: z.ZodString;
3275
+ /**
3276
+ * A member's check-in at a code station, as the participant route takes it: the code they were
3277
+ * given, and the action ID a retry repeats.
3278
+ *
3279
+ * @experimental A minor release can change check-in stations.
3280
+ */
3281
+ declare const stationCheckInSchema: z.ZodObject<{
3282
+ code: z.ZodString;
3283
+ actionId: z.ZodString;
3284
+ }, z.core.$strict>;
3285
+ /**
3286
+ * What `quests.checkIn` sends for the signed-in member.
3287
+ *
3288
+ * @experimental A minor release can change check-in stations.
3289
+ */
3290
+ type StationCheckIn = z.input<typeof stationCheckInSchema>;
3291
+ /**
3292
+ * A check-in at a code station that an app's server sends for a member: the quest by key or ID,
3293
+ * the station's key, the code the member entered, and the member, such as `signedInMember`'s.
3294
+ *
3295
+ * @experimental A minor release can change check-in stations.
3296
+ */
3297
+ declare const stationCodeSubmissionSchema: z.ZodObject<{
3298
+ code: z.ZodString;
3299
+ actionId: z.ZodString;
3300
+ quest: z.ZodString;
3301
+ station: z.ZodString;
3302
+ member: z.ZodString;
3303
+ }, z.core.$strict>;
3304
+ /**
3305
+ * What `management.attempts.submitStationCode()` takes: `{ quest, station, code, member,
3306
+ * actionId? }`.
3307
+ *
3308
+ * @experimental A minor release can change check-in stations.
3309
+ */
3310
+ type StationCodeSubmission = z.input<typeof stationCodeSubmissionSchema>;
3241
3311
  /**
3242
3312
  * What `management.attempts.submitSolanaTransaction()` sends: the quest, the signature of the
3243
3313
  * transaction a member signed with the quest's memo, and its cluster, `"solana"` or the mainnet
@@ -3271,6 +3341,26 @@ type SolanaTransactionAction = {
3271
3341
  /** The memo's reference, or null when it has none. */
3272
3342
  reference: string | null;
3273
3343
  };
3344
+ /**
3345
+ * The action that started an attempt at a code station, as the evaluator and a `keyed()`
3346
+ * completion read it in `ctx.action`: a check-in with the station's code, which an app's server
3347
+ * sent with `management.attempts.submitStationCode()` or the member's browser with
3348
+ * `quests.checkIn()`. `reference` is the station's key. Attempt reads carry it as the attempt's
3349
+ * `station` instead of its `action`.
3350
+ *
3351
+ * @experimental A minor release can change quest actions.
3352
+ */
3353
+ type StationCodeAction = {
3354
+ kind: "station-code";
3355
+ /** The key of the station the member checked in at. */
3356
+ reference: string;
3357
+ };
3358
+ /**
3359
+ * What started an attempt, as the evaluator reads it in `ctx.action`.
3360
+ *
3361
+ * @experimental A minor release can change quest actions.
3362
+ */
3363
+ type QuestAction = SolanaTransactionAction | StationCodeAction;
3274
3364
  /** @compat open */
3275
3365
  type KnownAttemptActionKind = SolanaTransactionAction["kind"];
3276
3366
  /**
@@ -4400,7 +4490,14 @@ declare const questDescriptionSchema: z.ZodObject<{
4400
4490
  label: z.ZodString;
4401
4491
  opensAt: z.ZodOptional<z.ZodNumber>;
4402
4492
  closesAt: z.ZodOptional<z.ZodNumber>;
4493
+ proof: z.ZodOptional<z.ZodEnum<{
4494
+ code: "code";
4495
+ transaction: "transaction";
4496
+ }>>;
4403
4497
  }, z.core.$strict>>>;
4498
+ gallery: z.ZodOptional<z.ZodObject<{
4499
+ kind: z.ZodType<GalleryKind>;
4500
+ }, z.core.$strict>>;
4404
4501
  }, z.core.$strict>;
4405
4502
  type QuestDescription = z.infer<typeof questDescriptionSchema>;
4406
4503
  declare const artifactSchema: z.ZodObject<{
@@ -4868,7 +4965,14 @@ declare const storedQuestDescriptionSchema: z.ZodObject<{
4868
4965
  label: z.ZodString;
4869
4966
  opensAt: z.ZodOptional<z.ZodNumber>;
4870
4967
  closesAt: z.ZodOptional<z.ZodNumber>;
4968
+ proof: z.ZodOptional<z.ZodEnum<{
4969
+ code: "code";
4970
+ transaction: "transaction";
4971
+ }>>;
4871
4972
  }, z.core.$strict>>>;
4973
+ gallery: z.ZodOptional<z.ZodObject<{
4974
+ kind: z.ZodType<GalleryKind>;
4975
+ }, z.core.$strict>>;
4872
4976
  completion: z.ZodDiscriminatedUnion<[z.ZodObject<{
4873
4977
  kind: z.ZodLiteral<"streak">;
4874
4978
  days: z.ZodNumber;
@@ -5271,7 +5375,14 @@ declare const publishedReleaseSchema: z.ZodObject<{
5271
5375
  label: z.ZodString;
5272
5376
  opensAt: z.ZodOptional<z.ZodNumber>;
5273
5377
  closesAt: z.ZodOptional<z.ZodNumber>;
5378
+ proof: z.ZodOptional<z.ZodEnum<{
5379
+ code: "code";
5380
+ transaction: "transaction";
5381
+ }>>;
5274
5382
  }, z.core.$strict>>>;
5383
+ gallery: z.ZodOptional<z.ZodObject<{
5384
+ kind: z.ZodType<GalleryKind>;
5385
+ }, z.core.$strict>>;
5275
5386
  completion: z.ZodDiscriminatedUnion<[z.ZodObject<{
5276
5387
  kind: z.ZodLiteral<"streak">;
5277
5388
  days: z.ZodNumber;
@@ -5822,7 +5933,14 @@ declare const templateSchema: z.ZodObject<{
5822
5933
  label: z.ZodString;
5823
5934
  opensAt: z.ZodOptional<z.ZodNumber>;
5824
5935
  closesAt: z.ZodOptional<z.ZodNumber>;
5936
+ proof: z.ZodOptional<z.ZodEnum<{
5937
+ code: "code";
5938
+ transaction: "transaction";
5939
+ }>>;
5825
5940
  }, z.core.$strict>>>;
5941
+ gallery: z.ZodOptional<z.ZodObject<{
5942
+ kind: z.ZodType<GalleryKind>;
5943
+ }, z.core.$strict>>;
5826
5944
  }, z.core.$strict>;
5827
5945
  }, z.core.$strip>;
5828
5946
  declare const quizAnswersSchema: z.ZodPipe<z.ZodRecord<z.ZodString, z.ZodString>, z.ZodTransform<{
@@ -5968,6 +6086,7 @@ declare const attemptSchema: z.ZodObject<{
5968
6086
  wallet: z.ZodString;
5969
6087
  reference: z.ZodNullable<z.ZodString>;
5970
6088
  }, z.core.$strip>>>;
6089
+ station: z.ZodOptional<z.ZodString>;
5971
6090
  }, z.core.$strip>;
5972
6091
  type Attempt = z.infer<typeof attemptSchema>;
5973
6092
  /** @compat open */
@@ -6137,6 +6256,7 @@ declare const questSubmissionResultSchema: z.ZodObject<{
6137
6256
  wallet: z.ZodString;
6138
6257
  reference: z.ZodNullable<z.ZodString>;
6139
6258
  }, z.core.$strip>>>;
6259
+ station: z.ZodOptional<z.ZodString>;
6140
6260
  }, z.core.$strip>;
6141
6261
  replayed: z.ZodBoolean;
6142
6262
  }, z.core.$strip>;
@@ -7163,6 +7283,7 @@ declare const memberProgressSchema: z.ZodObject<{
7163
7283
  wallet: z.ZodString;
7164
7284
  reference: z.ZodNullable<z.ZodString>;
7165
7285
  }, z.core.$strip>>>;
7286
+ station: z.ZodOptional<z.ZodString>;
7166
7287
  }, z.core.$strip>>;
7167
7288
  }, z.core.$strip>>;
7168
7289
  entitlements: z.ZodArray<z.ZodUnion<readonly [z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -7720,7 +7841,14 @@ declare const snapshotSchema: z.ZodObject<{
7720
7841
  label: z.ZodString;
7721
7842
  opensAt: z.ZodOptional<z.ZodNumber>;
7722
7843
  closesAt: z.ZodOptional<z.ZodNumber>;
7844
+ proof: z.ZodOptional<z.ZodEnum<{
7845
+ code: "code";
7846
+ transaction: "transaction";
7847
+ }>>;
7723
7848
  }, z.core.$strict>>>;
7849
+ gallery: z.ZodOptional<z.ZodObject<{
7850
+ kind: z.ZodType<GalleryKind>;
7851
+ }, z.core.$strict>>;
7724
7852
  completion: z.ZodDiscriminatedUnion<[z.ZodObject<{
7725
7853
  kind: z.ZodLiteral<"streak">;
7726
7854
  days: z.ZodNumber;
@@ -8137,6 +8265,7 @@ declare const snapshotSchema: z.ZodObject<{
8137
8265
  wallet: z.ZodString;
8138
8266
  reference: z.ZodNullable<z.ZodString>;
8139
8267
  }, z.core.$strip>>>;
8268
+ station: z.ZodOptional<z.ZodString>;
8140
8269
  }, z.core.$strip>>;
8141
8270
  balances: z.ZodArray<z.ZodObject<{
8142
8271
  member: z.ZodString;
@@ -8354,6 +8483,7 @@ declare const reviewItemSchema: z.ZodObject<{
8354
8483
  wallet: z.ZodString;
8355
8484
  reference: z.ZodNullable<z.ZodString>;
8356
8485
  }, z.core.$strip>>>;
8486
+ station: z.ZodOptional<z.ZodString>;
8357
8487
  }, z.core.$strip>;
8358
8488
  title: z.ZodString;
8359
8489
  checks: z.ZodArray<z.ZodObject<{
@@ -8445,6 +8575,7 @@ declare const reviewPageSchema: z.ZodObject<{
8445
8575
  wallet: z.ZodString;
8446
8576
  reference: z.ZodNullable<z.ZodString>;
8447
8577
  }, z.core.$strip>>>;
8578
+ station: z.ZodOptional<z.ZodString>;
8448
8579
  }, z.core.$strip>;
8449
8580
  title: z.ZodString;
8450
8581
  checks: z.ZodArray<z.ZodObject<{
@@ -8681,5 +8812,5 @@ interface DiscordReader {
8681
8812
  }): Promise<DiscordMessage | null>;
8682
8813
  }
8683
8814
 
8684
- export { SignInAccountStatus as I, SignInProvider as J, AttemptCodeSource as W, questDescriptionSchema as Z, leaderboardDefinitionSchema as a0, pointLedgerDeclarationSchema as a1, referralAuthoringSchema as a2, discordMessagesSourceSchema as a3, discordReactionsSourceSchema as a6, rewardSchema as af, triggerSchema as ag, defineCampaign as al, defineGroup as am, referralAcceptSchema as an, submitSchema as ao, engagementPageQuerySchema as ap, contentPerformanceQuerySchema as aq, stationRefusal as ar, CompletionSourceKind as au, AttemptStatus as b, engagementDefinitionSchema as b$, completionRecordSchema as bA, completionSourceSchema as bB, configurePickupSchema as bC, confirmHandoverSchema as bD, contentPerformancePageSchema as bE, contentPerformanceSnapshotSchema as bF, createGroupSchema as bG, createPointLedgerSchema as bH, createStockItemSchema as bI, decisionSchema as bJ, deferPolicy as bK, discordMemberInputSchema as bL, discordMemberSchema as bM, discordMessageDataSchema as bN, discordMessageInputSchema as bO, discordMessageSchema as bP, discordMessageTextDataSchema as bQ, discordReactionDataSchema as bR, discordResourceSourceSchema as bS, discordRewardSchema as bT, discordServerSchema as bU, engagementArtifactSchema as bV, engagementBoundaryPageSchema as bW, engagementBudgetSchema as bX, engagementChangePreviewInputSchema as bY, engagementChangePreviewSchema as bZ, engagementChangeSchema as b_, QuestSubmissionStatus as ba, acceptAnywaySchema as bi, accountConnectionSchema as bj, addGroupMemberSchema as bk, artifactSchema as bl, attemptActionSchema as bm, attemptSchema as bn, authProviderSchema as bo, availabilityWindowSchema as bp, badgeReward as bq, badgeRewardSchema as br, baseUnitsSchema as bs, batchReleaseSchema as bt, beginHandoverSchema as bu, campaignDefinitionSchema as bv, campaignEnrollmentInputSchema as bw, campaignEnrollmentSchema as bx, campaignViewSchema as by, campaignWithdrawalInputSchema as bz, managedPointHistoryPageSchema as c$, engagementDeploymentEntrySchema as c0, engagementPageSchema as c1, engagementPublishSchema as c2, engagementRuleSchema as c3, engagementRuleVersionPageSchema as c4, engagementScoreInputSchema as c5, engagementScoreSchema as c6, engagementSettlementSchema as c7, engagementVersionPageSchema as c8, engagementVersionQuerySchema as c9, leaderboardAuthoringSchema as cA, leaderboardDefinitionResponseSchema as cB, leaderboardExclusionGroupBindingSchema as cC, leaderboardExclusionGroupSchema as cD, leaderboardExclusionSchema as cE, leaderboardGroupSchema as cF, leaderboardHistoryPageSchema as cG, leaderboardHistoryQuerySchema as cH, leaderboardPageSchema as cI, leaderboardPlacementSchema as cJ, leaderboardPoolSchema as cK, leaderboardPoolUnitSchema as cL, leaderboardPreviewSchema as cM, leaderboardPrizeRewardSchema as cN, leaderboardPrizeSchema as cO, leaderboardQuerySchema as cP, leaderboardRowSchema as cQ, leaderboardSettlementApprovalSchema as cR, leaderboardSettlementPolicySchema as cS, leaderboardSettlementPoolSchema as cT, leaderboardSettlementRowSchema as cU, leaderboardSettlementSchema as cV, leaderboardSettlementStatusSchema as cW, leaderboardSettlementSummarySchema as cX, leaderboardSettlementUnmeasuredSchema as cY, leaderboardWindowSchema as cZ, managedGroupSchema as c_, entitlementCorrectionSchema as ca, entitlementRecoverySchema as cb, entitlementSchema as cc, entitlementStateSchema as cd, errorSchema as ce, evaluatorIntegrationProviderSchema as cf, evaluatorProgressSchema as cg, evaluatorProtocol as ch, evaluatorProtocolSchema as ci, eventSchema as cj, evidenceRedactionInputSchema as ck, evidenceRetentionInputSchema as cl, evidenceRetentionPeriodSchema as cm, evidenceRetentionSettingInputSchema as cn, evidenceSchema as co, groupArchiveInputSchema as cp, groupMemberPageSchema as cq, groupMemberSchema as cr, groupPageQuerySchema as cs, groupPageSchema as ct, groupReward as cu, groupRewardSchema as cv, integrationModuleProviderSchema as cw, integrationProviderSchema as cx, integrationRewardSchema as cy, leaderboardArtifactSchema as cz, retryCooldownMsSchema as d$, managedPointLedgerSchema as d0, mediaUrlSchema as d1, memberCampaignEnrollmentInputSchema as d2, memberCampaignWithdrawalInputSchema as d3, memberListSchema as d4, memberPageSchema as d5, memberProgressSchema as d6, organizationDiscordServersSchema as d7, photoResultSchema as d8, pickupAllocationSchema as d9, questBudgetViewSchema as dA, questPresentationContentSchema as dB, questPresentationRequirementSchema as dC, questPresentationSchema as dD, questProfileSchema as dE, questSettingsInputSchema as dF, questStepActionSchema as dG, questStepSchema as dH, questSubmissionResultSchema as dI, questSubmissionSchema as dJ, questSubmissionUpdateSchema as dK, quizAnswersSchema as dL, quizEvidenceSchema as dM, referralAccountSchema as dN, referralArtifactSchema as dO, referralControlSchema as dP, referralDefinitionSchema as dQ, referralHistorySchema as dR, referralManagementSchema as dS, referralQualificationSchema as dT, referralRelationshipSchema as dU, referralRewardResolutionSchema as dV, referralSummarySchema as dW, referralSuspensionSchema as dX, releaseSchema as dY, removeGroupMemberSchema as dZ, reservationSchema as d_, pickupAvailabilitySchema as da, pickupCatalogSchema as db, pickupPolicySchema as dc, pickupSelectionSchema as dd, pointBalanceSchema as de, pointBalancesSchema as df, pointEntrySchema as dg, pointHistoryPageSchema as dh, pointHistoryQuerySchema as di, pointLedgerArtifactSchema as dj, pointLedgerPropertiesSchema as dk, pointLedgerReferenceSchema as dl, pointLedgerSchema as dm, pointsAccountSchema as dn, pointsEntrySchema as dp, pointsMutationSchema as dq, pointsResultSchema as dr, pointsRewardSchema as ds, projectGroupKey as dt, projectGroupSchema as du, projectIntegrationSchema as dv, publishedLeaderboardSchema as dw, publishedReferralSchema as dx, publishedReleaseSchema as dy, questAvailabilitySchema as dz, retryCooldownPolicy as e0, reviewItemSchema as e1, reviewListSchema as e2, reviewModeSchema as e3, reviewPageSchema as e4, rewardBundleSchema as e5, rewardEntrySchema as e6, rewardKey as e7, settlementPaymentSchema as e8, signInAccountSchema as e9, signInProviderInputSchema as ea, signInProviderOptionSchema as eb, signInProviderSchema as ec, snapshotSchema as ed, staffDecisionSchema as ee, stockItemSchema as ef, stockSchema as eg, storedQuestDescriptionSchema as eh, storedReviewModeSchema as ei, submissionEvidenceSchema as ej, templateSchema as ek, textResultSchema as el, textReviewInputSchema as em, tierRewardSchema as en, tieredRewardDefinitionSchema as eo, tieredRewardReferenceSchema as ep, updateGroupSchema as eq, maxSolanaActionReference as es, parseSolanaActionMemo as et, solanaActionMemo as eu, solanaSignatureSchema as ev, solanaTransactionSubmissionSchema as ew, takesSolanaTransaction as ex, PointEntryKind as v };
8685
- export type { EngagementBudget as $, AccountConnection as A, ProjectGroupReference as B, CampaignDefinition as C, QuestPresentation as D, Entitlement as E, QuestProfile as F, QuizEvidence as G, Reward as H, KnownAttemptStatus as K, LeaderboardDefinition as L, MemberCampaignEnrollmentInput as M, SignInProviderOption as N, SubmissionEvidence as O, PointBalance as P, QuestBudgetView as Q, ReferralDefinition as R, SignInAccount as S, SubmitInput as T, TieredRewardReference as U, KnownAttemptActionKind as V, IntegrationModuleProvider as X, RewardType as Y, AuthoringIdentity as _, Attempt as a, PointLedger as a$, DiscordMessageData as a4, DiscordMessageTextData as a5, DiscordReactionData as a7, KnownIntegrationModule as a8, SolanaTransactionAction as a9, EntitlementCorrection as aA, EntitlementState as aB, EvaluatorIntegrationProvider as aC, GroupArchiveInput as aD, GroupMember as aE, GroupMemberPage as aF, GroupPage as aG, GroupPageQuery as aH, IntegrationProvider as aI, KnownAttemptCodeSource as aJ, KnownCompletionSourceKind as aK, KnownQuestSubmissionStatus as aL, KnownRewardType as aM, KnownSettlementPaymentStatus as aN, LeaderboardExclusionGroup as aO, LeaderboardPool as aP, LeaderboardPoolUnit as aQ, LeaderboardSettlement as aR, LeaderboardSettlementPolicy as aS, LeaderboardSettlementPool as aT, LeaderboardSettlementSummary as aU, ManagedGroup as aV, ManagedPointHistoryPage as aW, ManagedPointLedger as aX, MemberPage as aY, OrganizationDiscordServers as aZ, PickupAvailability as a_, TextReviewInput as aa, TextResult as ab, PhotoResult as ac, DiscordReader as ad, Decision as ae, IntegrationModule as ah, QuestStation as ai, TieredRewardDefinition as aj, KnownIntegrationModuleProvider as ak, AttemptAction as as, CompletionSource as at, ContentPerformanceSnapshot as av, DiscordMember as aw, DiscordMessage as ax, EngagementDefinition as ay, EngagementRuleVersionPage as az, ProjectIntegration as b0, PublishedRelease as b1, QuestAvailability as b2, QuestDescription as b3, QuestPresentationContent as b4, QuestSettingsInput as b5, QuestStep as b6, QuestStepAction as b7, QuestSubmission as b8, QuestSubmissionResult as b9, QuestSubmissionUpdate as bb, ReleaseInput as bc, ReviewPage as bd, RewardEntry as be, SettlementPayment as bf, SettlementPaymentStatus as bg, Snapshot as bh, AuthProvider as c, AvailabilityWindow as d, CampaignEnrollment as e, SolanaTransactionSubmission as er, CampaignEnrollmentInput as f, CampaignView as g, CampaignWithdrawalInput as h, EvaluatorProgress as i, KnownPointEntryKind as j, KnownSignInAccountStatus as k, KnownSignInProvider as l, LeaderboardHistoryPage as m, LeaderboardHistoryQuery as n, LeaderboardPage as o, LeaderboardPlacement as p, LeaderboardQuery as q, MemberCampaignWithdrawalInput as r, MemberProgress as s, PointBalances as t, PointEntry as u, PointHistoryPage as w, PointHistoryQuery as x, PointLedgerReference as y, ProjectGroup as z };
8815
+ export { questDescriptionSchema as $, SignInAccountStatus as I, SignInProvider as J, AttemptCodeSource as X, leaderboardDefinitionSchema as a2, pointLedgerDeclarationSchema as a3, referralAuthoringSchema as a4, discordMessagesSourceSchema as a5, discordReactionsSourceSchema as a8, rewardSchema as ah, triggerSchema as ai, defineCampaign as ar, defineGroup as as, referralAcceptSchema as at, submitSchema as au, engagementPageQuerySchema as av, contentPerformanceQuerySchema as aw, CompletionSourceKind as az, AttemptStatus as b, engagementBoundaryPageSchema as b$, campaignDefinitionSchema as bA, campaignEnrollmentInputSchema as bB, campaignEnrollmentSchema as bC, campaignViewSchema as bD, campaignWithdrawalInputSchema as bE, completionRecordSchema as bF, completionSourceSchema as bG, configurePickupSchema as bH, confirmHandoverSchema as bI, contentPerformancePageSchema as bJ, contentPerformanceSnapshotSchema as bK, createGroupSchema as bL, createPointLedgerSchema as bM, createStockItemSchema as bN, decisionSchema as bO, deferPolicy as bP, discordMemberInputSchema as bQ, discordMemberSchema as bR, discordMessageDataSchema as bS, discordMessageInputSchema as bT, discordMessageSchema as bU, discordMessageTextDataSchema as bV, discordReactionDataSchema as bW, discordResourceSourceSchema as bX, discordRewardSchema as bY, discordServerSchema as bZ, engagementArtifactSchema as b_, QuestSubmissionStatus as bf, acceptAnywaySchema as bn, accountConnectionSchema as bo, addGroupMemberSchema as bp, artifactSchema as bq, attemptActionSchema as br, attemptSchema as bs, authProviderSchema as bt, availabilityWindowSchema as bu, badgeReward as bv, badgeRewardSchema as bw, baseUnitsSchema as bx, batchReleaseSchema as by, beginHandoverSchema as bz, leaderboardSettlementStatusSchema as c$, engagementBudgetSchema as c0, engagementChangePreviewInputSchema as c1, engagementChangePreviewSchema as c2, engagementChangeSchema as c3, engagementDefinitionSchema as c4, engagementDeploymentEntrySchema as c5, engagementPageSchema as c6, engagementPublishSchema as c7, engagementRuleSchema as c8, engagementRuleVersionPageSchema as c9, groupRewardSchema as cA, integrationModuleProviderSchema as cB, integrationProviderSchema as cC, integrationRewardSchema as cD, leaderboardArtifactSchema as cE, leaderboardAuthoringSchema as cF, leaderboardDefinitionResponseSchema as cG, leaderboardExclusionGroupBindingSchema as cH, leaderboardExclusionGroupSchema as cI, leaderboardExclusionSchema as cJ, leaderboardGroupSchema as cK, leaderboardHistoryPageSchema as cL, leaderboardHistoryQuerySchema as cM, leaderboardPageSchema as cN, leaderboardPlacementSchema as cO, leaderboardPoolSchema as cP, leaderboardPoolUnitSchema as cQ, leaderboardPreviewSchema as cR, leaderboardPrizeRewardSchema as cS, leaderboardPrizeSchema as cT, leaderboardQuerySchema as cU, leaderboardRowSchema as cV, leaderboardSettlementApprovalSchema as cW, leaderboardSettlementPolicySchema as cX, leaderboardSettlementPoolSchema as cY, leaderboardSettlementRowSchema as cZ, leaderboardSettlementSchema as c_, engagementScoreInputSchema as ca, engagementScoreSchema as cb, engagementSettlementSchema as cc, engagementVersionPageSchema as cd, engagementVersionQuerySchema as ce, entitlementCorrectionSchema as cf, entitlementRecoverySchema as cg, entitlementSchema as ch, entitlementStateSchema as ci, errorSchema as cj, evaluatorIntegrationProviderSchema as ck, evaluatorProgressSchema as cl, evaluatorProtocol as cm, evaluatorProtocolSchema as cn, eventSchema as co, evidenceRedactionInputSchema as cp, evidenceRetentionInputSchema as cq, evidenceRetentionPeriodSchema as cr, evidenceRetentionSettingInputSchema as cs, evidenceSchema as ct, groupArchiveInputSchema as cu, groupMemberPageSchema as cv, groupMemberSchema as cw, groupPageQuerySchema as cx, groupPageSchema as cy, groupReward as cz, referralSummarySchema as d$, leaderboardSettlementSummarySchema as d0, leaderboardSettlementUnmeasuredSchema as d1, leaderboardWindowSchema as d2, managedGroupSchema as d3, managedPointHistoryPageSchema as d4, managedPointLedgerSchema as d5, mediaUrlSchema as d6, memberCampaignEnrollmentInputSchema as d7, memberCampaignWithdrawalInputSchema as d8, memberListSchema as d9, projectIntegrationSchema as dA, publishedLeaderboardSchema as dB, publishedReferralSchema as dC, publishedReleaseSchema as dD, questAvailabilitySchema as dE, questBudgetViewSchema as dF, questPresentationContentSchema as dG, questPresentationRequirementSchema as dH, questPresentationSchema as dI, questProfileSchema as dJ, questSettingsInputSchema as dK, questStepActionSchema as dL, questStepSchema as dM, questSubmissionResultSchema as dN, questSubmissionSchema as dO, questSubmissionUpdateSchema as dP, quizAnswersSchema as dQ, quizEvidenceSchema as dR, referralAccountSchema as dS, referralArtifactSchema as dT, referralControlSchema as dU, referralDefinitionSchema as dV, referralHistorySchema as dW, referralManagementSchema as dX, referralQualificationSchema as dY, referralRelationshipSchema as dZ, referralRewardResolutionSchema as d_, memberPageSchema as da, memberProgressSchema as db, organizationDiscordServersSchema as dc, photoResultSchema as dd, pickupAllocationSchema as de, pickupAvailabilitySchema as df, pickupCatalogSchema as dg, pickupPolicySchema as dh, pickupSelectionSchema as di, pointBalanceSchema as dj, pointBalancesSchema as dk, pointEntrySchema as dl, pointHistoryPageSchema as dm, pointHistoryQuerySchema as dn, pointLedgerArtifactSchema as dp, pointLedgerPropertiesSchema as dq, pointLedgerReferenceSchema as dr, pointLedgerSchema as ds, pointsAccountSchema as dt, pointsEntrySchema as du, pointsMutationSchema as dv, pointsResultSchema as dw, pointsRewardSchema as dx, projectGroupKey as dy, projectGroupSchema as dz, referralSuspensionSchema as e0, releaseSchema as e1, removeGroupMemberSchema as e2, reservationSchema as e3, retryCooldownMsSchema as e4, retryCooldownPolicy as e5, reviewItemSchema as e6, reviewListSchema as e7, reviewModeSchema as e8, reviewPageSchema as e9, parseSolanaActionMemo as eA, solanaActionMemo as eB, solanaTransactionSubmissionSchema as eC, stationCheckInSchema as eD, stationCodeSubmissionSchema as eE, takesSolanaTransaction as eF, rewardBundleSchema as ea, rewardEntrySchema as eb, rewardKey as ec, settlementPaymentSchema as ed, signInAccountSchema as ee, signInProviderInputSchema as ef, signInProviderOptionSchema as eg, signInProviderSchema as eh, snapshotSchema as ei, staffDecisionSchema as ej, stockItemSchema as ek, stockSchema as el, storedQuestDescriptionSchema as em, storedReviewModeSchema as en, submissionEvidenceSchema as eo, templateSchema as ep, textResultSchema as eq, textReviewInputSchema as er, tierRewardSchema as es, tieredRewardDefinitionSchema as et, tieredRewardReferenceSchema as eu, updateGroupSchema as ev, stationRefusal as ew, maxSolanaActionReference as ez, PointEntryKind as v };
8816
+ export type { AccountConnection as A, ProjectGroupReference as B, CampaignDefinition as C, QuestPresentation as D, Entitlement as E, QuestProfile as F, QuizEvidence as G, Reward as H, KnownAttemptStatus as K, LeaderboardDefinition as L, MemberCampaignEnrollmentInput as M, SignInProviderOption as N, StationCheckIn as O, PointBalance as P, QuestBudgetView as Q, ReferralDefinition as R, SignInAccount as S, SubmissionEvidence as T, SubmitInput as U, TieredRewardReference as V, KnownAttemptActionKind as W, IntegrationModuleProvider as Y, GalleryKind as Z, RewardType as _, Attempt as a, ManagedPointHistoryPage as a$, AuthoringIdentity as a0, EngagementBudget as a1, DiscordMessageData as a6, DiscordMessageTextData as a7, DiscordReactionData as a9, ContentPerformanceSnapshot as aA, DiscordMember as aB, DiscordMessage as aC, EngagementDefinition as aD, EngagementRuleVersionPage as aE, EntitlementCorrection as aF, EntitlementState as aG, EvaluatorIntegrationProvider as aH, GroupArchiveInput as aI, GroupMember as aJ, GroupMemberPage as aK, GroupPage as aL, GroupPageQuery as aM, IntegrationProvider as aN, KnownAttemptCodeSource as aO, KnownCompletionSourceKind as aP, KnownQuestSubmissionStatus as aQ, KnownRewardType as aR, KnownSettlementPaymentStatus as aS, LeaderboardExclusionGroup as aT, LeaderboardPool as aU, LeaderboardPoolUnit as aV, LeaderboardSettlement as aW, LeaderboardSettlementPolicy as aX, LeaderboardSettlementPool as aY, LeaderboardSettlementSummary as aZ, ManagedGroup as a_, KnownIntegrationModule as aa, QuestAction as ab, TextReviewInput as ac, TextResult as ad, PhotoResult as ae, DiscordReader as af, Decision as ag, IntegrationModule as aj, QuestStation as ak, KnownGalleryKind as al, TieredRewardDefinition as am, KnownIntegrationModuleProvider as an, QuestGallery as ao, SolanaTransactionAction as ap, StationCodeAction as aq, AttemptAction as ax, CompletionSource as ay, ManagedPointLedger as b0, MemberPage as b1, OrganizationDiscordServers as b2, PickupAvailability as b3, PointLedger as b4, ProjectIntegration as b5, PublishedRelease as b6, QuestAvailability as b7, QuestDescription as b8, QuestPresentationContent as b9, QuestSettingsInput as ba, QuestStep as bb, QuestStepAction as bc, QuestSubmission as bd, QuestSubmissionResult as be, QuestSubmissionUpdate as bg, ReleaseInput as bh, ReviewPage as bi, RewardEntry as bj, SettlementPayment as bk, SettlementPaymentStatus as bl, Snapshot as bm, AuthProvider as c, AvailabilityWindow as d, CampaignEnrollment as e, SolanaTransactionSubmission as ex, StationCodeSubmission as ey, CampaignEnrollmentInput as f, CampaignView as g, CampaignWithdrawalInput as h, EvaluatorProgress as i, KnownPointEntryKind as j, KnownSignInAccountStatus as k, KnownSignInProvider as l, LeaderboardHistoryPage as m, LeaderboardHistoryQuery as n, LeaderboardPage as o, LeaderboardPlacement as p, LeaderboardQuery as q, MemberCampaignWithdrawalInput as r, MemberProgress as s, PointBalances as t, PointEntry as u, PointHistoryPage as w, PointHistoryQuery as x, PointLedgerReference as y, ProjectGroup as z };
@@ -1,5 +1,5 @@
1
- import { V as KnownAttemptActionKind } from './accounts-DD4gAOCe.js';
2
- import { O as OpenIdentityKind } from './tracker-data-DQgX3FIc.js';
1
+ import { W as KnownAttemptActionKind } from './accounts-COLmXRbW.js';
2
+ import { O as OpenIdentityKind } from './tracker-data-2BYXZjsN.js';
3
3
  import * as z from 'zod';
4
4
 
5
5
  /** One capability call of the captured evaluation run, as Relay stored it. */
@@ -151,6 +151,7 @@ declare const attemptCaptureSchema: z.ZodObject<{
151
151
  wallet: z.ZodString;
152
152
  reference: z.ZodNullable<z.ZodString>;
153
153
  }, z.core.$strip>>>;
154
+ station: z.ZodOptional<z.ZodString>;
154
155
  eligibleAt: z.ZodNumber;
155
156
  calendar: z.ZodObject<{
156
157
  segments: z.ZodArray<z.ZodObject<{
@@ -1,31 +1,31 @@
1
- import { _ as AuthoringIdentity, a4 as DiscordMessageData, a5 as DiscordMessageTextData, a7 as DiscordReactionData, a8 as KnownIntegrationModule, P as PointBalance, a9 as SolanaTransactionAction, ad as DiscordReader, ah as IntegrationModule, ai as QuestStation, X as IntegrationModuleProvider } from './accounts-DD4gAOCe.js';
1
+ import { a0 as AuthoringIdentity, a6 as DiscordMessageData, a7 as DiscordMessageTextData, a9 as DiscordReactionData, aa as KnownIntegrationModule, P as PointBalance, ab as QuestAction, af as DiscordReader, aj as IntegrationModule, ak as QuestStation, al as KnownGalleryKind, Y as IntegrationModuleProvider, Z as GalleryKind } from './accounts-COLmXRbW.js';
2
2
  import { CampaignDefinition, QuestPresentation, AvailabilityWindow, QuestProfile, QuizEvidence } from './index.js';
3
3
  import { EngagementBudget, leaderboardDefinitionSchema, pointLedgerDeclarationSchema, referralAuthoringSchema, discordMessagesSourceSchema, discordReactionsSourceSchema, TextReviewInput, TextResult, PhotoResult, Decision, rewardSchema, triggerSchema, TieredRewardDefinition } from './schema.js';
4
- export { ak as KnownIntegrationModuleProvider, al as defineCampaign, am as defineGroup } from './accounts-DD4gAOCe.js';
5
- import { I as IdentityKind, R as ResourceHandle, Q as QuestHandle, L as LedgerReference, G as GroupHandle, g as Tracker, h as TrackerData, j as LedgerHandle, b as TrackerDataSchema, n as Where, M as MemberIdentity, o as ReferralHandle, p as TrackerTriggerContext, q as TrackerReader, s as RoleOf, C as ContentBody, B as BadgeHandle, v as ContentMetricName } from './tracker-data-DQgX3FIc.js';
4
+ export { an as KnownIntegrationModuleProvider, ao as QuestGallery, ap as SolanaTransactionAction, aq as StationCodeAction, ar as defineCampaign, as as defineGroup } from './accounts-COLmXRbW.js';
5
+ import { I as IdentityKind, R as ResourceHandle, Q as QuestHandle, L as LedgerReference, G as GroupHandle, g as Tracker, h as TrackerData, j as LedgerHandle, b as TrackerDataSchema, n as Where, M as MemberIdentity, o as ReferralHandle, p as TrackerTriggerContext, q as TrackerReader, s as RoleOf, C as ContentBody, B as BadgeHandle, v as ContentMetricName } from './tracker-data-2BYXZjsN.js';
6
6
  import { xContentBodySchema, customSourceSchema, WithRecordData, WithContent, WithAccountRoles, TrackerSource, trackerDefinitionSchema, SourceRoles, xSearchSourceSchema, XTweet, XContentMetric, TrackerTriggerPolicy, TrackerTriggerMode, WhereSetting } from './schema.js';
7
- export { w as LedgerSetting, y as TrackerPage, z as TrackerReadQuery, A as trackerDataSchema, D as trackerTriggerContextSchema } from './tracker-data-DQgX3FIc.js';
7
+ export { w as LedgerSetting, y as TrackerPage, z as TrackerReadQuery, A as trackerDataSchema, D as trackerTriggerContextSchema } from './tracker-data-2BYXZjsN.js';
8
8
  import { M as MemberCompletion } from './capability-error-db7kO8-P.js';
9
9
  import { ResourceSource, Budget, AuthorBudget, Announcement } from './schema.js';
10
10
  export { C as CapabilityError, b as CapabilityErrorCode, T as TikTokVideoBody, c as TikTokVideoMetric, Y as YouTubeShortBody, d as YouTubeShortMetric, e as capabilityErrorCodes } from './capability-error-db7kO8-P.js';
11
11
  import { e as ProfileReferral } from './profiles-CLDKZVFx.js';
12
- import { N as NftCollection, o as ContractCall, p as ContractEvent, q as SolanaProgram, n as SolanaSeed, r as WalletBalanceSourceQuery, t as WalletProgramActivitySourceQuery, u as WalletNftSourceQuery, v as WalletStakeSourceQuery, w as WalletProgramAccountSourceQuery, x as WalletTransaction, y as WalletInstruction, z as WalletReader } from './wallet-CPAjrW4k.js';
12
+ import { N as NftCollection, o as ContractCall, p as ContractEvent, q as SolanaProgram, n as SolanaSeed, r as WalletBalanceSourceQuery, t as WalletProgramActivitySourceQuery, u as WalletNftSourceQuery, v as WalletStakeSourceQuery, w as WalletProgramAccountSourceQuery, x as WalletTransaction, y as WalletInstruction, z as WalletReader } from './wallet-BqswMAqZ.js';
13
13
  import { SolanaIdlSource } from './schema.js';
14
- export { A as ContractCallParts, B as ContractCallReturnType, D as ContractEventInput, E as ContractEventParts, F as ContractFunction, G as CosmosDenom, a as CosmosNetwork, H as EvmChainId, I as NftCollectionParts, J as NftStandard, K as SolanaSeedInteger, M as WalletBalance, O as WalletBalanceChange, k as WalletBalanceQuery, P as WalletBalanceSample, Q as WalletCall, R as WalletCallArgument, T as WalletCallQuery, U as WalletDelegations, V as WalletDelegationsQuery, X as WalletEventCondition, Y as WalletEventValue, Z as WalletEvents, _ as WalletEventsQuery, $ as WalletNftSample, a0 as WalletNfts, a1 as WalletNftsQuery, a2 as WalletProgramAccount, a3 as WalletProgramAccountQuery, a4 as WalletProgramAccountSample, a5 as WalletProgramActivity, a6 as WalletStake, a7 as WalletStakeQuery, a8 as WalletStakeSample, a9 as WalletTransactions, aa as WalletTransactionsQuery, ab as cosmosDenomSchema, ac as cosmosNetworkSchema, ad as isContractCall, ae as isContractEvent, af as isEvmChainId, ag as isNftCollection, ah as isSolanaProgram, ai as maxWalletEventLogs, aj as maxWalletEventLookback, ak as maxWalletTransactionLookback, al as maxWalletTransactions, am as parseContractCall, an as parseContractEvent, ao as parseContractFunction, ap as parseNftCollection } from './wallet-CPAjrW4k.js';
14
+ export { A as ContractCallParts, B as ContractCallReturnType, D as ContractEventInput, E as ContractEventParts, F as ContractFunction, G as CosmosDenom, a as CosmosNetwork, H as EvmChainId, I as NftCollectionParts, J as NftStandard, K as SolanaSeedInteger, M as WalletBalance, O as WalletBalanceChange, k as WalletBalanceQuery, P as WalletBalanceSample, Q as WalletCall, R as WalletCallArgument, T as WalletCallQuery, U as WalletDelegations, V as WalletDelegationsQuery, X as WalletEventCondition, Y as WalletEventValue, Z as WalletEvents, _ as WalletEventsQuery, $ as WalletNftSample, a0 as WalletNfts, a1 as WalletNftsQuery, a2 as WalletProgramAccount, a3 as WalletProgramAccountQuery, a4 as WalletProgramAccountSample, a5 as WalletProgramActivity, a6 as WalletStake, a7 as WalletStakeQuery, a8 as WalletStakeSample, a9 as WalletTransactions, aa as WalletTransactionsQuery, ab as cosmosDenomSchema, ac as cosmosNetworkSchema, ad as isContractCall, ae as isContractEvent, af as isEvmAddress, ag as isEvmChainId, ah as isNftCollection, ai as isSolanaProgram, aj as maxWalletEventLogs, ak as maxWalletEventLookback, al as maxWalletTransactionLookback, am as maxWalletTransactions, an as parseContractCall, ao as parseContractEvent, ap as parseContractFunction, aq as parseNftCollection } from './wallet-BqswMAqZ.js';
15
15
  import * as z from 'zod';
16
16
  export { z } from 'zod';
17
17
  import { Badge } from './index.js';
18
18
  import { badgeDeclarationSchema, OfferAuthoring } from './schema.js';
19
19
  import { QuizContent } from './index.js';
20
20
  import { StreakPolicy } from './schema.js';
21
- import { S as Setting, A as AmountSetting, B as BalanceChain } from './dashboards-DCOAXL54.js';
21
+ import { S as Setting, A as AmountSetting, B as BalanceChain } from './dashboards-DXpjHnq-.js';
22
22
  import { BoundSettings } from './schema.js';
23
- export { D as DashboardInput, b as DashboardPanelInput, d as defineDashboard } from './dashboards-DCOAXL54.js';
24
- import { e as TelegramReader } from './submission-input-BD7nORuh.js';
23
+ export { D as DashboardInput, b as DashboardPanelInput, d as defineDashboard } from './dashboards-DXpjHnq-.js';
24
+ import { e as TelegramReader } from './submission-input-U4aIkJuT.js';
25
25
  import { Prerequisite, TextEvidence, UrlEvidence, TextOptions, UrlOptions } from './index.js';
26
- export { f as TelegramChatMember, g as TelegramChatMemberStatus, h as TelegramConnection, i as TelegramMessageData, j as TelegramReactionData, k as balanceAtLeast, l as completed, m as inGroup } from './submission-input-BD7nORuh.js';
27
- import { I as ImageReader, X as XReader } from './limits-Ctaeq23J.js';
28
- export { L as Limits, l as limits } from './limits-Ctaeq23J.js';
26
+ export { f as TelegramChatMember, g as TelegramChatMemberStatus, h as TelegramConnection, i as TelegramMessageData, j as TelegramReactionData, k as balanceAtLeast, l as completed, m as inGroup } from './submission-input-U4aIkJuT.js';
27
+ import { I as ImageReader, X as XReader } from './limits-B7wbnWhd.js';
28
+ export { L as Limits, l as limits } from './limits-B7wbnWhd.js';
29
29
  export { f as formatUnits, p as parseUnits } from './units-CwgsPB_r.js';
30
30
 
31
31
  declare function defineBadge(input: z.input<typeof badgeDeclarationSchema>): {
@@ -1587,13 +1587,14 @@ type KeyedContext = {
1587
1587
  /** The pinned tracker observation of a tracker-triggered quest; null for other triggers. */
1588
1588
  tracker: TrackerTriggerContext | null;
1589
1589
  /**
1590
- * The signed Solana transaction that started the attempt, with its memo's `reference`; null or
1591
- * absent for any other attempt. `keyed((ctx) => ctx.action?.reference ?? "app")` completes once per
1592
- * reference.
1590
+ * The action that started the attempt: the signed Solana transaction, with its memo's
1591
+ * `reference`, or a check-in with a station's code, whose `reference` is the station's key. Null
1592
+ * or absent for any other attempt. `keyed((ctx) => ctx.action?.reference ?? "app")` completes
1593
+ * once per reference.
1593
1594
  *
1594
1595
  * @experimental A minor release can change quest actions.
1595
1596
  */
1596
- action?: SolanaTransactionAction | null;
1597
+ action?: QuestAction | null;
1597
1598
  eligibleAt: number;
1598
1599
  /** The evaluation run's pinned project calendar. */
1599
1600
  calendar: EvaluationCalendar;
@@ -1642,8 +1643,9 @@ declare const keyed: (key: (ctx: KeyedContext) => string, options?: KeyedOptions
1642
1643
  };
1643
1644
  /**
1644
1645
  * The completion of a quest with `stations`: each member completes it once per station, keyed by
1645
- * the station the signed transaction's memo names. Relay refuses a transaction for an unknown or
1646
- * closed station before the quest runs, and a member's own submission of the quest.
1646
+ * the station the check-in names: the signed transaction's memo, or the code station the member
1647
+ * checked in at. Relay refuses a check-in at an unknown or closed station before the quest runs,
1648
+ * and a member's own submission of the quest.
1647
1649
  *
1648
1650
  * @experimental A minor release can change check-in stations.
1649
1651
  */
@@ -1911,11 +1913,14 @@ type EvaluationContext<T, I = {
1911
1913
  /**
1912
1914
  * The action that started this attempt: the Solana transaction the member signed, which an app's
1913
1915
  * server submitted with `management.attempts.submitSolanaTransaction()`, with the signing wallet
1914
- * and the memo's `reference`. Null or absent for any other attempt.
1916
+ * and the memo's `reference`; or a check-in with a station's code
1917
+ * (`management.attempts.submitStationCode()` or `quests.checkIn()`), `{ kind: "station-code",
1918
+ * reference }` with the station's key. Null or absent for any other attempt; check `kind` before
1919
+ * reading a transaction's fields.
1915
1920
  *
1916
1921
  * @experimental A minor release can change quest actions.
1917
1922
  */
1918
- action?: SolanaTransactionAction | null;
1923
+ action?: QuestAction | null;
1919
1924
  /**
1920
1925
  * When the activity happened, in epoch milliseconds: the tracker record's occurrence time, else
1921
1926
  * when the attempt was admitted. Budgets and daily keys use it.
@@ -2081,6 +2086,18 @@ declare const defineQuest: <T extends Record<string, Setting>, const G extends T
2081
2086
  * @experimental A minor release can change check-in stations.
2082
2087
  */
2083
2088
  stations?: readonly QuestStation[];
2089
+ /**
2090
+ * Makes the quest's accepted photos a photo gallery: `{ kind: "wall" }` for a selfie wall,
2091
+ * `{ kind: "contest" }` for a photo contest. Reviewers browse it by day and quest in
2092
+ * Console, `management.galleries` and `domino galleries`. Only on a quest whose input is a
2093
+ * photo; publication refuses it elsewhere with `gallery-requires-photo`. For a selfie wall
2094
+ * that takes any photo, `evaluate` returns `decision.accept()`.
2095
+ *
2096
+ * @experimental A minor release can change photo galleries.
2097
+ */
2098
+ gallery?: {
2099
+ kind: KnownGalleryKind;
2100
+ } | undefined;
2084
2101
  /**
2085
2102
  * Whether staff can review this quest's attempts. Human review is on unless this returns
2086
2103
  * `{ enabled: false }`. With it off, `decision.review(...)` becomes a reject that keeps the
@@ -2487,7 +2504,11 @@ declare const defineQuest: <T extends Record<string, Setting>, const G extends T
2487
2504
  label: string;
2488
2505
  opensAt?: number | undefined;
2489
2506
  closesAt?: number | undefined;
2507
+ proof?: "code" | "transaction" | undefined;
2490
2508
  }[] | undefined;
2509
+ gallery?: {
2510
+ kind: GalleryKind;
2511
+ } | undefined;
2491
2512
  };
2492
2513
  evaluate(ctx: {
2493
2514
  settings: unknown;
@@ -2503,11 +2524,14 @@ declare const defineQuest: <T extends Record<string, Setting>, const G extends T
2503
2524
  /**
2504
2525
  * The action that started this attempt: the Solana transaction the member signed, which an app's
2505
2526
  * server submitted with `management.attempts.submitSolanaTransaction()`, with the signing wallet
2506
- * and the memo's `reference`. Null or absent for any other attempt.
2527
+ * and the memo's `reference`; or a check-in with a station's code
2528
+ * (`management.attempts.submitStationCode()` or `quests.checkIn()`), `{ kind: "station-code",
2529
+ * reference }` with the station's key. Null or absent for any other attempt; check `kind` before
2530
+ * reading a transaction's fields.
2507
2531
  *
2508
2532
  * @experimental A minor release can change quest actions.
2509
2533
  */
2510
- action?: SolanaTransactionAction | null;
2534
+ action?: QuestAction | null;
2511
2535
  /**
2512
2536
  * When the activity happened, in epoch milliseconds: the tracker record's occurrence time, else
2513
2537
  * when the attempt was admitted. Budgets and daily keys use it.
@@ -2608,6 +2632,18 @@ declare const defineQuestType: <T extends Record<string, Setting>, const G exten
2608
2632
  * @experimental A minor release can change check-in stations.
2609
2633
  */
2610
2634
  stations?: readonly QuestStation[];
2635
+ /**
2636
+ * Makes the quest's accepted photos a photo gallery: `{ kind: "wall" }` for a selfie wall,
2637
+ * `{ kind: "contest" }` for a photo contest. Reviewers browse it by day and quest in
2638
+ * Console, `management.galleries` and `domino galleries`. Only on a quest whose input is a
2639
+ * photo; publication refuses it elsewhere with `gallery-requires-photo`. For a selfie wall
2640
+ * that takes any photo, `evaluate` returns `decision.accept()`.
2641
+ *
2642
+ * @experimental A minor release can change photo galleries.
2643
+ */
2644
+ gallery?: {
2645
+ kind: KnownGalleryKind;
2646
+ } | undefined;
2611
2647
  /**
2612
2648
  * Whether staff can review this quest's attempts. Human review is on unless this returns
2613
2649
  * `{ enabled: false }`. With it off, `decision.review(...)` becomes a reject that keeps the
@@ -3014,7 +3050,11 @@ declare const defineQuestType: <T extends Record<string, Setting>, const G exten
3014
3050
  label: string;
3015
3051
  opensAt?: number | undefined;
3016
3052
  closesAt?: number | undefined;
3053
+ proof?: "code" | "transaction" | undefined;
3017
3054
  }[] | undefined;
3055
+ gallery?: {
3056
+ kind: GalleryKind;
3057
+ } | undefined;
3018
3058
  };
3019
3059
  evaluate(ctx: {
3020
3060
  settings: unknown;
@@ -3030,11 +3070,14 @@ declare const defineQuestType: <T extends Record<string, Setting>, const G exten
3030
3070
  /**
3031
3071
  * The action that started this attempt: the Solana transaction the member signed, which an app's
3032
3072
  * server submitted with `management.attempts.submitSolanaTransaction()`, with the signing wallet
3033
- * and the memo's `reference`. Null or absent for any other attempt.
3073
+ * and the memo's `reference`; or a check-in with a station's code
3074
+ * (`management.attempts.submitStationCode()` or `quests.checkIn()`), `{ kind: "station-code",
3075
+ * reference }` with the station's key. Null or absent for any other attempt; check `kind` before
3076
+ * reading a transaction's fields.
3034
3077
  *
3035
3078
  * @experimental A minor release can change quest actions.
3036
3079
  */
3037
- action?: SolanaTransactionAction | null;
3080
+ action?: QuestAction | null;
3038
3081
  /**
3039
3082
  * When the activity happened, in epoch milliseconds: the tracker record's occurrence time, else
3040
3083
  * when the attempt was admitted. Budgets and daily keys use it.
@@ -3084,5 +3127,5 @@ declare const defineQuestType: <T extends Record<string, Setting>, const G exten
3084
3127
  }): Promise<Decision>;
3085
3128
  } & ResourceHandle<"quest">;
3086
3129
 
3087
- export { AmountSetting, BalanceChain, ContentBody, ContentMetricName, ContractCall, ContractEvent, DiscordMessageData, DiscordMessageTextData, DiscordReactionData, DiscordReader, GroupHandle, IdentityKind, ImageReader, IntegrationModule, IntegrationModuleProvider, KnownIntegrationModule, LedgerHandle, LedgerReference, MemberCompletion, MemberIdentity, NftCollection, PointBalance, ProfileReferral, QuestHandle, QuestStation, ReferralHandle, RoleOf, Setting, SolanaProgram, SolanaSeed, SolanaTransactionAction, TelegramReader, Tracker, TrackerData, TrackerDataSchema, TrackerReader, TrackerTriggerContext, WalletBalanceSourceQuery, WalletInstruction, WalletNftSourceQuery, WalletProgramAccountSourceQuery, WalletProgramActivitySourceQuery, WalletReader, WalletStakeSourceQuery, WalletTransaction, Where, XReader, automatic, automaticFulfillment, badge, budget, calendar, content, count, customSource, decision, defineBadge, defineEngagementReward, defineLeaderboard, defineLedger, defineOffer, defineQuest, defineQuestType, defineReferral, defineTieredReward, defineTracker, discord, earned, evaluators, evidence, groupMembership, instruction, invoked, keyed, leaderboardTiesWarning, manual, once, perStation, pointLedgers, points, progress, questCompleted, received, rolling, settings, spent, staffHandover, streak, swapped, telegram, tiktok, untracked, wallet, x, youtube };
3130
+ export { AmountSetting, BalanceChain, ContentBody, ContentMetricName, ContractCall, ContractEvent, DiscordMessageData, DiscordMessageTextData, DiscordReactionData, DiscordReader, GalleryKind, GroupHandle, IdentityKind, ImageReader, IntegrationModule, IntegrationModuleProvider, KnownGalleryKind, KnownIntegrationModule, LedgerHandle, LedgerReference, MemberCompletion, MemberIdentity, NftCollection, PointBalance, ProfileReferral, QuestAction, QuestHandle, QuestStation, ReferralHandle, RoleOf, Setting, SolanaProgram, SolanaSeed, TelegramReader, Tracker, TrackerData, TrackerDataSchema, TrackerReader, TrackerTriggerContext, WalletBalanceSourceQuery, WalletInstruction, WalletNftSourceQuery, WalletProgramAccountSourceQuery, WalletProgramActivitySourceQuery, WalletReader, WalletStakeSourceQuery, WalletTransaction, Where, XReader, automatic, automaticFulfillment, badge, budget, calendar, content, count, customSource, decision, defineBadge, defineEngagementReward, defineLeaderboard, defineLedger, defineOffer, defineQuest, defineQuestType, defineReferral, defineTieredReward, defineTracker, discord, earned, evaluators, evidence, groupMembership, instruction, invoked, keyed, leaderboardTiesWarning, manual, once, perStation, pointLedgers, points, progress, questCompleted, received, rolling, settings, spent, staffHandover, streak, swapped, telegram, tiktok, untracked, wallet, x, youtube };
3088
3131
  export type { ContentData, ContentTrigger, ContentTriggerInput, EvaluationCalendar, EvaluationCalendarDay, EvaluationContext, EvaluationMember, KeyedContext, KeyedOptions, MemberCompletionQuery, Outcome, PerformanceContext, PerformanceOutcome, QuestKeyedContext, TrackerTrigger, TrackerTriggerInput, TriggerAdmission, XContentBody };