@domino-sdk/relay 1.66.0 → 1.67.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 (62) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/{accounts-_lNsiR2k.d.ts → accounts-C2O8mpB8.d.ts} +2 -2
  3. package/dist/{attempt-captures-BqPggxTU.d.ts → attempt-captures-ClHAoo_n.d.ts} +1 -1
  4. package/dist/authoring.d.ts +24 -23
  5. package/dist/authoring.js +17 -15
  6. package/dist/{automatic-outcomes-BzAvfcpd.d.ts → automatic-outcomes-BEnPn4Uh.d.ts} +2 -2
  7. package/dist/avatar.d.ts +1 -1
  8. package/dist/browser.d.ts +9 -9
  9. package/dist/browser.js +9 -8
  10. package/dist/{catalog-ByZMRS7I.d.ts → catalog-CbiftcxQ.d.ts} +2 -2
  11. package/dist/{chunk-5LD5DKOM.js → chunk-5DZNMLDM.js} +1 -1
  12. package/dist/{chunk-TCYDFNV4.js → chunk-5SBA6X5X.js} +1 -1
  13. package/dist/{chunk-PNVQ4RBG.js → chunk-BMJHFWVT.js} +5 -29
  14. package/dist/{chunk-7MQCQYEE.js → chunk-DSJ46QLB.js} +1 -1
  15. package/dist/{chunk-KHXCURXB.js → chunk-JK3XV2CR.js} +92 -3
  16. package/dist/{chunk-M66Y5OMJ.js → chunk-KUNPCDN6.js} +6 -6
  17. package/dist/{chunk-5DYS2OIP.js → chunk-MVQQDPQX.js} +1 -1
  18. package/dist/{chunk-CGUL4MRE.js → chunk-NRMQVK2W.js} +1 -1
  19. package/dist/{chunk-XCEGNKGH.js → chunk-P33ZAJMS.js} +56 -24
  20. package/dist/{chunk-CJDB6W6I.js → chunk-Q5QVAF7R.js} +41 -14
  21. package/dist/{chunk-5BMZZDGY.js → chunk-Q6KTTVOI.js} +1 -1
  22. package/dist/{chunk-QYHEHMCG.js → chunk-QYC3CZVD.js} +1 -1
  23. package/dist/{chunk-OWDIR7ZU.js → chunk-RDUSFUXX.js} +1 -1
  24. package/dist/{chunk-FU3W4IQN.js → chunk-RWR2LOPA.js} +2 -2
  25. package/dist/chunk-UWUS4OOV.js +59 -0
  26. package/dist/{chunk-ANVAUOJP.js → chunk-X3FMVRMM.js} +1 -1
  27. package/dist/{chunk-QZNLSK4U.js → chunk-Z2Z5DBNW.js} +6 -6
  28. package/dist/{client-Cze4lfwA.d.ts → client-CZPewB9h.d.ts} +10 -7
  29. package/dist/{dashboards-pVfclkyh.d.ts → dashboards-jGPM3AxF.d.ts} +3 -3
  30. package/dist/{deployments-Cr1tfqrr.d.ts → deployments-BVFd7ddA.d.ts} +3 -3
  31. package/dist/{identity-integration-Ci2vGKtX.d.ts → identity-integration-W1Vo3Ql9.d.ts} +10 -2
  32. package/dist/index.d.ts +10 -10
  33. package/dist/index.js +7 -7
  34. package/dist/internal.d.ts +32 -14
  35. package/dist/internal.js +29 -20
  36. package/dist/{limits-pE04y9O2.d.ts → limits-C4RzrOV4.d.ts} +1 -1
  37. package/dist/{offers-Hw2P6tcK.d.ts → offers-BpYenB9i.d.ts} +2 -2
  38. package/dist/portal-proxy.d.ts +5 -5
  39. package/dist/portal-proxy.js +11 -13
  40. package/dist/react/index.d.ts +14 -13
  41. package/dist/react/index.js +9 -8
  42. package/dist/{reward-deliveries-BCV8hznc.d.ts → reward-deliveries-BOWpMytr.d.ts} +1 -1
  43. package/dist/runtime/authoring.js +1 -1
  44. package/dist/runtime/chunks/C2MGLQXC.js +1 -0
  45. package/dist/runtime/manifest.json +3 -3
  46. package/dist/runtime/schema.js +1 -1
  47. package/dist/schema.d.ts +20 -17
  48. package/dist/schema.js +11 -7
  49. package/dist/server/index.d.ts +12 -12
  50. package/dist/server/index.js +277 -22
  51. package/dist/{sign-in-providers-BAkGjSXo.d.ts → sign-in-providers-BRYVOSlG.d.ts} +2 -2
  52. package/dist/{submission-input-ChL1aYNH.d.ts → submission-input-C152xIdn.d.ts} +2 -2
  53. package/dist/{telegram-browser-BFs4u7lC.d.ts → telegram-browser-657QqiQl.d.ts} +4 -4
  54. package/dist/telegram.d.ts +8 -8
  55. package/dist/testing.d.ts +12 -11
  56. package/dist/testing.js +14 -7
  57. package/dist/{tracker-data-Bl-qPIvZ.d.ts → tracker-data-BqY-9Vu-.d.ts} +2 -2
  58. package/dist/{transport-WE49Ta3A.d.ts → transport-CthYgZXK.d.ts} +618 -20
  59. package/dist/{wallet-B7e06v4m.d.ts → wallet-Btng186v.d.ts} +57 -26
  60. package/package.json +3 -1
  61. package/dist/chunk-UZ765UGH.js +0 -18
  62. package/dist/runtime/chunks/C5V267I7.js +0 -1
@@ -330,6 +330,15 @@ declare function cosmosChain(chain: CosmosChain | CosmosNetwork): CosmosChain &
330
330
  };
331
331
  /** The CAIP-2 ID of Solana mainnet (its genesis hash, truncated to 32 characters). */
332
332
  declare const solanaMainnet = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
333
+ /** The CAIP-2 ID of Solana devnet (its genesis hash, truncated to 32 characters). */
334
+ declare const solanaDevnet = "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1";
335
+ /**
336
+ * A Solana cluster Relay reads, by CAIP-2 ID: mainnet or devnet. A linked Solana wallet reads on
337
+ * both, since links are chain-family-wide.
338
+ */
339
+ type SolanaNetwork = typeof solanaMainnet | typeof solanaDevnet;
340
+ /** Whether `value` is the CAIP-2 ID of a Solana cluster Relay reads ({@link SolanaNetwork}). */
341
+ declare function isSolanaNetwork(value: string): value is SolanaNetwork;
333
342
  declare const evmAddressSchema: z.ZodString;
334
343
  /** Bech32 with any prefix, in one case. The server checks the checksum and stores lowercase. */
335
344
  declare const cosmosAddressSchema: z.ZodString;
@@ -371,6 +380,16 @@ declare const walletSignatureSchema: z.ZodObject<{
371
380
  publicKey: z.ZodOptional<z.ZodString>;
372
381
  }, z.core.$strict>;
373
382
  type WalletSignature = z.infer<typeof walletSignatureSchema>;
383
+ /** An EVM chain's CAIP-2 ID: `eip155:` and the chain ID in decimal, such as `"eip155:8453"` (Base). */
384
+ type EvmChainId = `eip155:${number}`;
385
+ /**
386
+ * Whether `value` is an EVM CAIP-2 ID in canonical form (no leading zeros, at most 16 digits).
387
+ * Syntax only: the chains Relay reads balances on are the platform's to list
388
+ * (`management.walletBalanceChains()`).
389
+ */
390
+ declare function isEvmChainId(value: string): value is EvmChainId;
391
+ /** {@link isEvmChainId} as a schema. */
392
+ declare const evmChainIdSchema: z.ZodCustom<`eip155:${number}`, `eip155:${number}`>;
374
393
  declare const linkedWalletSchema: z.ZodObject<{
375
394
  chain: z.ZodEnum<{
376
395
  solana: "solana";
@@ -379,6 +398,7 @@ declare const linkedWalletSchema: z.ZodObject<{
379
398
  }>;
380
399
  network: z.ZodNullable<z.ZodCustom<`cosmos:${string}`, `cosmos:${string}`>>;
381
400
  address: z.ZodString;
401
+ provedOn: z.ZodOptional<z.ZodCustom<`eip155:${number}`, `eip155:${number}`>>;
382
402
  verifiedAt: z.ZodNumber;
383
403
  revision: z.ZodNumber;
384
404
  signIn: z.ZodBoolean;
@@ -405,7 +425,7 @@ type WalletSigner = {
405
425
  readonly name?: string;
406
426
  /** Connect if needed and return the address to challenge. */
407
427
  address(): Promise<string>;
408
- /** EVM only: the wallet's current chain, shown in the message's Chain ID line. */
428
+ /** EVM only: the wallet's current chain, in the message's Chain ID line. A smart-contract wallet's signature is checked on it. */
409
429
  chainId?(): Promise<number>;
410
430
  /** Sign the exact UTF-8 message and return the encoding `walletSignatureSchema` documents. */
411
431
  sign(message: string, address: string): Promise<{
@@ -450,25 +470,29 @@ declare const walletSignInNetworksSchema: z.ZodPipe<z.ZodArray<z.ZodEnum<{
450
470
  /** The sign-in setting a wallet account falls under: its chain family. */
451
471
  declare function walletSignInNetwork(wallet: Pick<LinkedWallet, "chain" | "network">): WalletSignInNetwork;
452
472
  /**
453
- * The CAIP-10 account ID of a wallet on one network. Linked Solana and EVM wallets are
454
- * chain-agnostic, so pass the network you mean; the defaults are Solana mainnet and Ethereum
455
- * (`eip155:1`). A Cosmos wallet always uses the network it was linked on.
473
+ * Whether a linked wallet is an account on the EVM `chain` (CAIP-2). An EOA's address is one key
474
+ * on every EVM chain. A smart-contract wallet is the contract on the chain that proved it
475
+ * (`provedOn`): another chain's contract at the same address can belong to someone else. Relay's
476
+ * readers and the testing kit decide with this.
456
477
  */
457
- declare function caip10(wallet: Pick<LinkedWallet, "chain" | "network" | "address">, network?: string): string;
458
- /** An EVM chain's CAIP-2 ID: `eip155:` and the chain ID in decimal, such as `"eip155:8453"` (Base). */
459
- type EvmChainId = `eip155:${number}`;
478
+ declare function evmWalletOn(wallet: {
479
+ chain: string;
480
+ provedOn?: string | null;
481
+ }, chain: string): boolean;
460
482
  /**
461
- * Whether `value` is an EVM CAIP-2 ID in canonical form (no leading zeros, at most 16 digits).
462
- * Syntax only: the chains Relay reads balances on are the platform's to list
463
- * (`management.walletBalanceChains()`).
483
+ * The CAIP-10 account ID of a wallet on one network. Linked Solana wallets and EVM EOAs are
484
+ * chain-agnostic, so pass the network you mean; the defaults are Solana mainnet and Ethereum
485
+ * (`eip155:1`). A Cosmos wallet always uses the network it was linked on, and an EVM
486
+ * smart-contract wallet the network that proved it (`provedOn`).
464
487
  */
465
- declare function isEvmChainId(value: string): value is EvmChainId;
466
- /** {@link isEvmChainId} as a schema. */
467
- declare const evmChainIdSchema: z.ZodCustom<`eip155:${number}`, `eip155:${number}`>;
488
+ declare function caip10(wallet: Pick<LinkedWallet, "chain" | "network" | "address"> & Partial<Pick<LinkedWallet, "provedOn">>, network?: string): string;
468
489
  /** What `ctx.wallet.balance()` reads. Omit `token` for a Solana or EVM native coin. */
469
490
  type WalletBalanceQuery = {
470
- /** Solana mainnet: `"solana"` or its CAIP-2 ID. */
471
- chain: "solana" | typeof solanaMainnet;
491
+ /**
492
+ * A Solana cluster: `"solana"` or {@link solanaMainnet} for mainnet, {@link solanaDevnet} for
493
+ * devnet.
494
+ */
495
+ chain: "solana" | SolanaNetwork;
472
496
  /** An SPL or Token-2022 mint address (base58). */
473
497
  token?: string;
474
498
  /** One of the member's linked Solana wallets; omit to read all of them. */
@@ -529,17 +553,19 @@ type WalletBalanceSample = z.infer<typeof walletBalanceSampleSchema>;
529
553
  type WalletBalanceSourceQuery = WalletBalanceQuery extends infer Query ? Query extends unknown ? Omit<Query, "address"> : never : never;
530
554
  /**
531
555
  * An NFT standard `ctx.wallet.nfts()` reads: an ERC-721 or ERC-1155 contract on an EVM chain, or a
532
- * Metaplex verified collection on Solana mainnet.
556
+ * Metaplex verified collection on Solana mainnet or devnet.
533
557
  */
534
558
  type NftStandard = "erc721" | "erc1155" | "metaplex";
535
559
  /**
536
560
  * An NFT collection as a CAIP-19 asset type. On an EVM chain: the chain, the contract's standard
537
561
  * and its address, such as `"eip155:1/erc721:0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D"`; an
538
562
  * ERC-1155 collection names one token ID after the contract: `"eip155:8453/erc1155:0x…/1"`. On
539
- * Solana mainnet: the Metaplex collection NFT's mint, `"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/nft:<mint>"`,
540
- * which stands for every NFT whose metadata names that collection as verified.
563
+ * Solana: the cluster and the Metaplex collection NFT's mint, such as
564
+ * `"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/nft:<mint>"` on mainnet or
565
+ * `"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/nft:<mint>"` on devnet, which stands for every NFT
566
+ * whose metadata names that collection as verified.
541
567
  */
542
- type NftCollection = `${EvmChainId}/erc721:0x${string}` | `${EvmChainId}/erc1155:0x${string}/${string}` | `${typeof solanaMainnet}/nft:${string}`;
568
+ type NftCollection = `${EvmChainId}/erc721:0x${string}` | `${EvmChainId}/erc1155:0x${string}/${string}` | `${SolanaNetwork}/nft:${string}`;
543
569
  /** The parts of an NFT collection ({@link parseNftCollection}). */
544
570
  type NftCollectionParts = {
545
571
  chain: EvmChainId;
@@ -547,15 +573,15 @@ type NftCollectionParts = {
547
573
  contract: `0x${string}`;
548
574
  tokenId: string | null;
549
575
  } | {
550
- chain: typeof solanaMainnet;
576
+ chain: SolanaNetwork;
551
577
  standard: "metaplex";
552
578
  /** The Metaplex collection NFT's mint (base58). */
553
579
  mint: string;
554
580
  };
555
581
  /**
556
582
  * The parts of an NFT collection, or null when `value` is not one: an ERC-721 collection has no
557
- * token ID, an ERC-1155 one has a token ID that fits in 256 bits, and a Solana collection names a
558
- * base58 mint. Syntax only: the chains, contracts and mints Relay reads are checked when the
583
+ * token ID, an ERC-1155 one has a token ID that fits in 256 bits, and a Solana collection names
584
+ * mainnet or devnet and a base58 mint. Syntax only: the chains, contracts and mints Relay reads are checked when the
559
585
  * collection is set.
560
586
  */
561
587
  declare function parseNftCollection(value: string): NftCollectionParts | null;
@@ -816,7 +842,7 @@ declare const walletEventsSchema: z.ZodObject<{
816
842
  }, z.core.$strict>;
817
843
  type WalletEvents = z.infer<typeof walletEventsSchema>;
818
844
  /**
819
- * A Solana program address on mainnet, as `settings.solanaProgram()` holds it: base58, 32 bytes,
845
+ * A Solana program address on mainnet or devnet, as `settings.solanaProgram()` holds it: base58, 32 bytes,
820
846
  * such as Jupiter's `"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"`.
821
847
  */
822
848
  type SolanaProgram = string;
@@ -838,8 +864,8 @@ type KnownSolanaIdlSource = "chain" | "pasted";
838
864
  type SolanaIdlSource = KnownSolanaIdlSource | (string & {});
839
865
  /**
840
866
  * The Anchor IDL a `settings.solanaProgram()` setting decodes instructions with: fetched from the
841
- * program's on-chain IDL account when the setting was saved (`"chain"`), or pasted by an operator
842
- * for a program without one (`"pasted"`).
867
+ * program's on-chain IDL when the setting was saved (`"chain"`), or pasted by an operator, which
868
+ * takes precedence over the on-chain one (`"pasted"`).
843
869
  */
844
870
  declare const solanaProgramIdlSchema: z.ZodObject<{
845
871
  program: z.ZodString;
@@ -859,6 +885,11 @@ declare const maxWalletTransactionLookback: number;
859
885
  type WalletTransactionsQuery = {
860
886
  /** The program, from a `settings.solanaProgram()` setting: never from member input. */
861
887
  program: SolanaProgram;
888
+ /**
889
+ * The cluster to read: `"solana"` or {@link solanaMainnet} for mainnet (the default),
890
+ * {@link solanaDevnet} for devnet.
891
+ */
892
+ chain?: "solana" | SolanaNetwork;
862
893
  /**
863
894
  * The earliest block time read, in epoch milliseconds. At most 30 days before the evaluation
864
895
  * ({@link maxWalletTransactionLookback}); an earlier time throws `author-error`.
@@ -999,4 +1030,4 @@ interface WalletReader {
999
1030
  transactions?(query: WalletTransactionsQuery): Promise<WalletTransactions | null>;
1000
1031
  }
1001
1032
 
1002
- export { type WalletTransactions as $, type AvatarProvider as A, type ContractFunction as B, type CosmosChain as C, type CosmosDenom as D, type EvmChainId as E, type NftCollectionParts as F, type NftStandard as G, type WalletBalance as H, type WalletBalanceChange as I, type WalletBalanceSample as J, type WalletCall as K, type LinkedWallet as L, type WalletCallArgument as M, type NftCollection as N, type OwnProfile as O, type ProfileAvatar as P, type WalletCallQuery as Q, type WalletDelegations as R, type SolanaIdlSource as S, type WalletDelegationsQuery as T, type WalletEventCondition as U, type WalletEventValue as V, type WalletAddressInput as W, type WalletEvents as X, type WalletEventsQuery as Y, type WalletNfts as Z, type WalletNftsQuery as _, type CosmosNetwork as a, walletDelegationsSchema as a$, type WalletTransactionsQuery as a0, cosmosDenomSchema as a1, cosmosNetworkSchema as a2, isContractCall as a3, isContractEvent as a4, isEvmChainId as a5, isNftCollection as a6, isSolanaProgram as a7, maxWalletEventLogs as a8, maxWalletEventLookback as a9, cosmosChain as aA, displayNameSchema as aB, evmAddressSchema as aC, evmChainIdSchema as aD, linkedWalletSchema as aE, managedProfileSchema as aF, ownProfileSchema as aG, profileAvatarSchema as aH, profileCompletionPageSchema as aI, profileCompletionQuerySchema as aJ, profileCompletionSchema as aK, profileDefaultProviderSchema as aL, profileDefaultsSchema as aM, profileModerationSchema as aN, profileReferralSchema as aO, profileSettingsInputSchema as aP, profileSettingsSchema as aQ, profileSummarySchema as aR, profileVisibilitySchema as aS, solanaAddressSchema as aT, solanaMainnet as aU, solanaProgramIdlSchema as aV, walletAddressInput as aW, walletBalanceSampleSchema as aX, walletBalanceSchema as aY, walletCallSchema as aZ, walletChainSchema as a_, maxWalletTransactionLookback as aa, maxWalletTransactions as ab, parseContractCall as ac, parseContractEvent as ad, parseContractFunction as ae, parseNftCollection as af, profileUpdateSchema as ag, walletAddressInputSchema as ah, walletSignatureSchema as ai, AVATAR_UPLOAD_LIMIT as aj, type AnchorIdl as ak, type KnownSolanaIdlSource as al, type ManagedProfile as am, type ProfileDefaultProvider as an, type ProfileDefaults as ao, type ProfileModeration as ap, type ProfileSettings as aq, type ProfileSettingsInput as ar, type SolanaProgramIdl as as, WALLETS_PER_CHAIN as at, anchorIdlSchema as au, avatarProviderSchema as av, avatarSeedSchema as aw, avatarUploadTypes as ax, caip10 as ay, cosmosAddressSchema as az, type ProfileCompletion as b, walletEventsSchema as b0, walletMessageChallengeSchema as b1, walletNftsSchema as b2, walletSignInFamilies as b3, walletSignInNetwork as b4, walletSignInNetworkSchema as b5, walletSignInNetworksSchema as b6, walletTransactionsSchema as b7, walletUnlinkInputSchema as b8, type ProfileCompletionPage as c, type ProfileCompletionQuery as d, type ProfileReferral as e, type ProfileSummary as f, type ProfileUpdate as g, type ProfileVisibility as h, type WalletChain as i, type WalletMessageChallenge as j, type WalletSignInNetwork as k, type WalletSignature as l, type WalletSigner as m, type WalletUnlinkInput as n, type WalletBalanceQuery as o, type ContractCall as p, type ContractEvent as q, type SolanaProgram as r, type WalletBalanceSourceQuery as s, type WalletTransaction as t, type WalletInstruction as u, type WalletReader as v, type ContractCallParts as w, type ContractCallReturnType as x, type ContractEventInput as y, type ContractEventParts as z };
1033
+ export { type WalletNftsQuery as $, type AvatarProvider as A, type ContractEventParts as B, type CosmosChain as C, type ContractFunction as D, type CosmosDenom as E, type EvmChainId as F, type NftCollectionParts as G, type NftStandard as H, type WalletBalance as I, type WalletBalanceChange as J, type WalletBalanceSample as K, type LinkedWallet as L, type WalletCall as M, type NftCollection as N, type OwnProfile as O, type ProfileAvatar as P, type WalletCallArgument as Q, type WalletCallQuery as R, type SolanaIdlSource as S, type WalletDelegations as T, type WalletDelegationsQuery as U, type WalletEventCondition as V, type WalletAddressInput as W, type WalletEventValue as X, type WalletEvents as Y, type WalletEventsQuery as Z, type WalletNfts as _, type CosmosNetwork as a, walletBalanceSampleSchema as a$, type WalletTransactions as a0, type WalletTransactionsQuery as a1, cosmosDenomSchema as a2, cosmosNetworkSchema as a3, isContractCall as a4, isContractEvent as a5, isEvmChainId as a6, isNftCollection as a7, isSolanaProgram as a8, maxWalletEventLogs as a9, caip10 as aA, cosmosAddressSchema as aB, cosmosChain as aC, displayNameSchema as aD, evmAddressSchema as aE, evmChainIdSchema as aF, isSolanaNetwork as aG, linkedWalletSchema as aH, managedProfileSchema as aI, ownProfileSchema as aJ, profileAvatarSchema as aK, profileCompletionPageSchema as aL, profileCompletionQuerySchema as aM, profileCompletionSchema as aN, profileDefaultProviderSchema as aO, profileDefaultsSchema as aP, profileModerationSchema as aQ, profileReferralSchema as aR, profileSettingsInputSchema as aS, profileSettingsSchema as aT, profileSummarySchema as aU, profileVisibilitySchema as aV, solanaAddressSchema as aW, solanaDevnet as aX, solanaMainnet as aY, solanaProgramIdlSchema as aZ, walletAddressInput as a_, maxWalletEventLookback as aa, maxWalletTransactionLookback as ab, maxWalletTransactions as ac, parseContractCall as ad, parseContractEvent as ae, parseContractFunction as af, parseNftCollection as ag, profileUpdateSchema as ah, walletAddressInputSchema as ai, walletSignatureSchema as aj, AVATAR_UPLOAD_LIMIT as ak, type AnchorIdl as al, type KnownSolanaIdlSource as am, type ManagedProfile as an, type ProfileDefaultProvider as ao, type ProfileDefaults as ap, type ProfileModeration as aq, type ProfileSettings as ar, type ProfileSettingsInput as as, type SolanaNetwork as at, type SolanaProgramIdl as au, WALLETS_PER_CHAIN as av, anchorIdlSchema as aw, avatarProviderSchema as ax, avatarSeedSchema as ay, avatarUploadTypes as az, type ProfileCompletion as b, walletBalanceSchema as b0, walletCallSchema as b1, walletChainSchema as b2, walletDelegationsSchema as b3, walletEventsSchema as b4, walletMessageChallengeSchema as b5, walletNftsSchema as b6, walletSignInFamilies as b7, walletSignInNetwork as b8, walletSignInNetworkSchema as b9, walletSignInNetworksSchema as ba, walletTransactionsSchema as bb, walletUnlinkInputSchema as bc, type ProfileCompletionPage as c, type ProfileCompletionQuery as d, type ProfileReferral as e, type ProfileSummary as f, type ProfileUpdate as g, type ProfileVisibility as h, type WalletChain as i, type WalletMessageChallenge as j, type WalletSignInNetwork as k, type WalletSignature as l, type WalletSigner as m, type WalletUnlinkInput as n, type WalletBalanceQuery as o, evmWalletOn as p, type ContractCall as q, type ContractEvent as r, type SolanaProgram as s, type WalletBalanceSourceQuery as t, type WalletTransaction as u, type WalletInstruction as v, type WalletReader as w, type ContractCallParts as x, type ContractCallReturnType as y, type ContractEventInput as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@domino-sdk/relay",
3
- "version": "1.66.0",
3
+ "version": "1.67.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -60,6 +60,8 @@
60
60
  "dependencies": {
61
61
  "@dicebear/core": "9.4.3",
62
62
  "@dicebear/shapes": "9.4.3",
63
+ "@noble/curves": "2.4.0",
64
+ "@noble/hashes": "2.4.0",
63
65
  "croner": "10.0.1",
64
66
  "zod": "4.6.5"
65
67
  },
@@ -1,18 +0,0 @@
1
- // src/origins.ts
2
- var loopbackHosts = [
3
- "localhost",
4
- "127.0.0.1",
5
- "[::1]"
6
- ];
7
- function secureOrLoopbackOrigin(url, options = {}) {
8
- return url.protocol === "https:" || url.protocol === "http:" && (loopbackHosts.includes(url.hostname) || (options.localHosts ?? []).includes(url.hostname));
9
- }
10
- function bareOrigin(url) {
11
- return !url.username && !url.password && !url.search && !url.hash && url.pathname === "/";
12
- }
13
-
14
- export {
15
- loopbackHosts,
16
- secureOrLoopbackOrigin,
17
- bareOrigin
18
- };
@@ -1 +0,0 @@
1
- import{Bb as tr,Cb as o,Dc as Ge,Dd as M,Ec as z,Ed as xe,Ga as er,Gc as Je,Hc as s,Jd as or,Kb as u,Od as q,Vb as ae,Zb as ie,_b as rr,b as Jt,ca as Xt,d as K,dd as Xe,ec as Ke,fc as l,hc as Se,ia as Yt,ic as r,jc as p,kc as oe,lc as Ve,mc as g,md as ar,nd as Ye,od as ir,qc as f,rc as Fe,sa as ne,tc as He,uc as nr,va as t,vc as We,vd as se,wc as y}from"./EWU4OKSY.js";var ha=Symbol.for("@domino-sdk/relay.RequestError");var ya=class extends Error{name="RequestError";[ha]=!0;kind;uncertain;status;code;operationId;recovery;retryAfter;constructor(e,n){super(e,n.cause===void 0?{}:{cause:n.cause}),this.kind=n.kind,this.uncertain=n.uncertain??!1,this.status=n.status,this.code=n.code,this.operationId=n.operationId,this.retryAfter=n.retryAfter,this.recovery=this.uncertain?n.operationId&&(n.replaySafe??!0)?"replay":"reconcile":void 0}};function ka(e){return[...new Set(e.map(n=>n.path.length?n.path.map(String).join(".")+": "+n.message:n.message))].join("; ")}function we(e,n,i){let c=n.safeParse(i);if(c.success)return c.data;let d=typeof i=="object"&&i!==null&&"key"in i&&typeof i.key=="string"?` "${i.key}"`:"";throw c.error.message=`${e}${d} is invalid: ${ka(c.error.issues)}`,c.error}var sr={NotSignedIn:"not-signed-in",StaleSession:"stale-session",Unauthenticated:"unauthenticated",InvalidInput:"invalid-input",InvalidResponse:"invalid-response",Network:"network",Timeout:"timeout",Aborted:"aborted",NotFound:"not-found",RetryUnavailable:"retry-unavailable",SubmissionStorage:"submission-storage",SubmissionStorageQuota:"submission-storage-quota",SubmissionConflict:"submission-conflict",OperationRetired:"operation-retired",QuestUpdated:"quest-updated",AttemptPending:"attempt-pending",RetryCooldown:"retry-cooldown",CompletionCooldown:"completion-cooldown",StaleQuiz:"stale-quiz",InvalidSubmission:"invalid-submission",InvalidCursor:"invalid-cursor",PointLedgerNotFound:"point-ledger-not-found",NotJoined:"not-joined",OutsideWindow:"outside-window",EnrollmentRequired:"enrollment-required",BudgetExhausted:"budget-exhausted",OfferNotFound:"offer-not-found",OfferPaused:"offer-paused",OfferLimitReached:"offer-limit-reached",OfferOutOfStock:"offer-out-of-stock",InsufficientPoints:"insufficient-points",Credential:"credential",WalletSigner:"wallet-signer",PrerequisitesIncomplete:"prerequisites-incomplete",QuestClosed:"quest-closed",QuestPaused:"quest-paused",MemberBanned:"member-banned",ProfileLocked:"profile-locked",InvitationNotFound:"invitation-not-found",InvalidCode:"invalid-code",CodeExpired:"code-expired",ChallengeExpired:"challenge-expired",RateLimited:"rate-limited"},ja=Symbol.for("@domino-sdk/relay.RelayError");var Sa=class extends ya{name="RelayError";[ja]=!0;window;missing;retryAt;constructor(e,n){super(e,n),this.window=n.window,this.missing=n.missing??[],this.retryAt=n.retryAt}};function cr(e,n,i={}){return new Sa(e,{...i,kind:"client",code:n})}var et="use 1\u2013100 letters, digits, _ or - (no :, . or spaces)",a=t().min(1,et).max(100,et).regex(/^[a-zA-Z0-9_-]+$/,et),Cr=r({name:t().trim().min(1).max(120),description:t().trim().max(1e3).default(""),image:t().url().max(2048)}).strict(),$r=Cr.extend({key:a}).strict(),xt=Cr.extend({id:a,key:a.nullable()}).strip(),dc=xt.extend({archivedAt:o().int().nonnegative().nullable()}),mc=$r.extend({actionId:a}).strict(),uc=g([$r,r({code:t().min(1).max(2e6)}).strict()]),xa=r({badge:xt,awardedAt:o().int().nonnegative()}),zc=r({items:l(xa)}),bc=r({items:l(xt)}),pc=r({actionId:a,reason:t().trim().min(1).max(1e3)}).strict(),gc=r({badge:a,member:a,awarded:u(),changed:u()}),wa=Symbol("domino.response.tolerant-v1");function Tr(e){return Object.assign(e,{[wa]:!0})}var tt=new WeakMap;function fc(e){let n=i=>{let c={};for(let[d,m]of Object.entries(e)){let b=v=>(Object.defineProperty(c,d,{value:v,writable:!0,enumerable:!0,configurable:!0}),v);Object.defineProperty(c,d,{get:()=>b(i(m())),set:b,enumerable:!0,configurable:!0})}return c};return{known:n(Er),tolerant:n(Ur)}}function k(e){let n=tt.get(e);if(n)return n;let i=Object.create(Object.getPrototypeOf(e._zod.def),Object.getOwnPropertyDescriptors(e._zod.def));if(e instanceof Se){let d;Object.defineProperty(i,"shape",{get:()=>d??=Object.fromEntries(Object.entries(e.shape).map(([m,b])=>[m,k(b)])),configurable:!0,enumerable:!0}),Object.assign(i,{catchall:e._zod.def.catchall instanceof rr||!e._zod.def.catchall?void 0:k(e._zod.def.catchall)})}else e instanceof tr?Object.assign(i,{checks:e._zod.def.checks?.filter(d=>{let m=d._zod.def;return m.check!=="less_than"||!("value"in m)||m.value===Number.MAX_SAFE_INTEGER||m.value===864e13})}):e instanceof Ke?Object.assign(i,{element:k(e.element),checks:[]}):e instanceof Ve?Object.assign(i,{options:e.options.map(k)}):e instanceof He?Object.assign(i,{items:e._zod.def.items.map(k),rest:e._zod.def.rest?k(e._zod.def.rest):null}):e instanceof Fe?Object.assign(i,{left:k(e._zod.def.left),right:k(e._zod.def.right)}):e instanceof Ye?Object.assign(i,{getter:()=>k(e._zod.def.getter())}):e instanceof We?Object.assign(i,{valueType:k(e.valueType)}):e instanceof Xe?Object.assign(i,{in:k(e.in),out:k(e.out)}):"innerType"in i&&i.innerType instanceof ne&&Object.assign(i,{innerType:k(i.innerType)});let c=Jt(e,i);return tt.set(e,c),tt.set(c,c),c}function Er(e){return k(e)}function Mr(e){if(e instanceof Se)return e.shape;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof ne)return Mr(e._zod.def.innerType)}function dt(e){if(e instanceof Je)return[...e.values];if(e instanceof Ge)return e.options;if("innerType"in e._zod.def&&e._zod.def.innerType instanceof ne)return dt(e._zod.def.innerType)}function U(e,n){if(e instanceof Je)return typeof n=="string"&&[...e.values].every(i=>typeof i=="string")&&!e.values.has(n);if(e instanceof Ge)return typeof n=="string"&&!e.options.includes(n);if(e instanceof Ke&&Array.isArray(n))return n.some(i=>U(e.element,i));if(e instanceof He&&Array.isArray(n))return n.some((i,c)=>{let d=e._zod.def.items[c]??e._zod.def.rest;return d?U(d,i):!1});if(e instanceof Fe)return U(e._zod.def.left,n)||U(e._zod.def.right,n);if(e instanceof Ye)return U(e._zod.def.getter(),n);if(e instanceof We&&n!==null&&typeof n=="object"&&!Array.isArray(n))return Object.entries(n).some(([i,c])=>U(e.keyType,i)||U(e.valueType,c));if(e instanceof Ve){let i=[...e.options];if(typeof n=="string"){let c=i.flatMap(d=>dt(d)??[]);if(c.some(d=>typeof d=="string")&&!c.includes(n))return!0}if(n!==null&&typeof n=="object"&&!Array.isArray(n)){let c=y(t(),ie()).parse(n),d=["kind","status","provider","input","type","mode"];for(let m of d){if(typeof c[m]!="string")continue;let b=i.map(S=>{let P=Mr(S)?.[m];return P?dt(P):void 0});if(b.some(S=>!S))continue;let v=i.filter((S,P)=>b[P]?.includes(c[m]));if(!v.length)return!0;i=v}}return i.every(c=>U(c,n))}if(e instanceof Se&&n!==null&&typeof n=="object"&&!Array.isArray(n)){let i=y(t(),ie()).parse(n);return Object.entries(e.shape).some(([c,d])=>U(d,i[c]))||Object.entries(i).some(([c,d])=>!(c in e.shape)&&!!e._zod.def.catchall&&U(e._zod.def.catchall,d))}if(e instanceof Xe){if(U(e.in,n))return!0;let i=Yt(e.in,n);return i.success&&U(e.out,i.data)}return"innerType"in e._zod.def&&e._zod.def.innerType instanceof ne?U(e._zod.def.innerType,n):!1}function Ur(e){return Tr(M().transform((n,i)=>{let c=Er(e),d=c.safeParse(n);if(d.success)return{kind:"supported",value:d.data};if(U(c,n))return{kind:"unsupported",raw:n};for(let m of d.error.issues)i.addIssue({...m});return K}))}function vc(e){return Tr(l(Ur(e)).transform(n=>({items:n,unsupportedCount:n.filter(i=>i.kind==="unsupported").length})))}var w=t().min(1).max(4096);var hc=p({cursor:w.optional()});async function*yc(e){let n;do{let i=await e(n);yield*i.items,n=i.nextCursor??void 0}while(n!==void 0)}var kc=p({cursor:w.optional(),limit:q.number().int().min(1).max(100).default(50)}),wt=z(["google","apple","x","discord"]),Aa=r({provider:wt,configured:u(),status:z(["disconnected","connected","reconnect"]),subject:t().nullable(),revision:o().int().nonnegative()}),jc={Google:"google",Apple:"apple",X:"x",Discord:"discord",Telegram:"telegram"},Dr=t(),Sc=t().regex(/^[a-z][a-z0-9-]{0,63}$/,"Name a sign-in provider, such as google"),xc={Disconnected:"disconnected",Connected:"connected",Reconnect:"reconnect"},Ia=t(),wc=r({provider:Dr,configured:u()}),Ac=r({provider:Dr,configured:u(),status:Ia,subject:t().nullable(),revision:o().int().nonnegative()}),Ic=r({}).strict(),Oc=r({channelId:t().regex(/^[0-9]{1,20}$/),messageId:t().regex(/^[0-9]{1,20}$/)}).strict(),qc=r({userId:t().regex(/^[0-9]{1,20}$/).nullable().default(null),nickname:t().nullable().default(null),displayName:t().nullable().default(null),boostingSince:t().datetime({offset:!0}).nullable().default(null),roles:l(t().regex(/^[0-9]{1,20}$/)),joinedAt:t().datetime({offset:!0}).nullable(),pending:u()}),_r="telegram-reactions",Zr="telegram-messages",Oa="youtube-shorts",qa="tiktok-videos",Lr="wallet-balances",Rc=r({login:u(),miniApp:u()}),Pc=Aa.extend({provider:s("telegram")}),Ra=t().min(1,"Pass the Mini App's Telegram.WebApp.initData").max(8192),Cc=r({initData:Ra,mode:z(["sign-in","connect"])}).strict(),Nr=t().regex(/^-?[1-9][0-9]{0,19}$/,"Use the chat's numeric ID, such as -1001234567890"),Pa=r({id:Nr,type:t(),title:t(),username:t().nullable(),status:t(),issue:t().nullable(),canPost:u().optional(),connectedAt:o()}),$c=r({configured:u(),bot:r({username:t()}).nullable(),chats:l(Pa)}),Tc=r({url:t(),expiresAt:o()}),Ec=r({chat:t().regex(/^(-?[1-9][0-9]{0,19}|@[A-Za-z][A-Za-z0-9_]{3,31})$/,"Name a chat the project connected, by its numeric ID or @username")}).strict(),Mc=r({operation:s("connection")}).strict(),Uc=r({userId:t()}),Dc=r({userId:t(),username:t().nullable(),status:se(e=>typeof e=="string"),isMember:u(),isAdmin:u(),untilDate:o().nullable()}),_c=r({chatId:t(),chatType:t(),messageId:o(),reactionType:t(),emoji:t().nullable(),customEmojiId:t().nullable(),reactorStatus:t(),reactorIsAdmin:u()}),Zc=r({chatId:t(),chatType:t(),messageId:o(),replyToMessageId:o().nullable(),threadId:o().nullable()}),I=Object.freeze({quests:1e3,questTypes:200,collections:1e3,sdkRuntime:Object.freeze({modules:200,size:2e6}),memberCompletions:100,dashboardPanels:24,dashboards:20,defer:Object.freeze({minRetryAfterMs:1e3,maxRetryAfterMs:36e5,retryAfterMs:6e4,horizonMs:864e5,maxDefers:100}),retryCooldown:Object.freeze({minMs:1e3,maxMs:6048e5}),analyticsQueryRows:100,apps:Object.freeze({secrets:50,kvStores:5,sqlStores:5,migrations:100,migrationFileBytes:9e4,migrationTotalBytes:1e6,storageRows:50,storagePreviewCharacters:2e3,storageCellCharacters:1e5,storageClearKeys:1e4,storageClearCountKeys:1e5,schedules:10,scheduleMinIntervalMs:3e5,scheduleTimeoutMs:3e4,scheduleResultBytes:16384}),stagedDeployment:Object.freeze({size:64e6,compressedSize:1e7}),capabilityCalls:8,trackerData:Object.freeze({branches:16,entries:256}),trackerPreview:Object.freeze({pages:3,posts:100,days:30}),walletsPerChain:5,walletEventLogs:1e3,walletTransactions:1e3}),At=t().min(32).max(44).regex(/^[1-9A-HJ-NP-Za-km-z]+$/),De=z(["solana","eip155","cosmos"]),Br=/^cosmos:[-_a-zA-Z0-9]{1,32}$/,It=se(e=>typeof e=="string"&&Br.test(e),"Use a Cosmos network: cosmos:<chain ID>"),Lc=t().regex(/^[a-zA-Z][a-zA-Z0-9/:._-]{2,127}$/,"Use a Cosmos bank denomination such as uatom or uosmo");function Nc(e){if(typeof e=="string"&&!e.startsWith("cosmos:"))throw new Error('Use a Cosmos network such as "cosmos:cosmoshub-4"');let n=typeof e=="string"?{chainId:e.slice(7)}:e;if(typeof n?.chainId!="string")throw new Error('Pass a Cosmos chain as { chainId } or a network such as "cosmos:cosmoshub-4"');let i=`cosmos:${n.chainId}`;if(!Br.test(i))throw new Error("A Cosmos chain ID has 1 to 32 letters, digits, hyphens or underscores");if(n.chainInfo&&n.chainInfo.chainId!==n.chainId)throw new Error("The chain info describes another chain ID");return{...n,network:i}}var _e="solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",Ca=t().regex(/^0x[0-9a-fA-F]{40}$/),$a=t().min(8).max(90).regex(/^(?:[a-z][a-z0-9]{0,82}1[02-9ac-hj-np-z]{38,}|[A-Z][A-Z0-9]{0,82}1[02-9AC-HJ-NP-Z]{38,})$/),Bc=f("chain",[r({chain:s("solana"),address:At}).strict(),r({chain:s("eip155"),address:Ca,chainId:o().int().positive().safe().optional()}).strict(),r({chain:s("cosmos"),network:It,address:$a}).strict()]),Qc=r({id:t().min(1).max(200),purpose:z(["link","sign-in"]),chain:De,network:It.nullable(),address:t(),message:t().max(4096),expiresAt:o().int()}),Kc=r({challenge:t().min(1).max(200),signature:t().min(1).max(256),publicKey:t().max(128).optional()}).strict(),Vc=r({chain:De,network:It.nullable(),address:t(),verifiedAt:o().int().nonnegative(),revision:o().int().positive(),signIn:u()}),Fc=r({chain:De,address:t().min(1).max(100)}).strict();async function Hc(e){let n=await e.address();switch(e.chain){case"solana":return{chain:"solana",address:n};case"eip155":return{chain:"eip155",address:n,...e.chainId?{chainId:await e.chainId()}:{}};case"cosmos":if(!e.network)throw cr("Choose the Cosmos chain for this wallet",sr.InvalidInput);return{chain:"cosmos",network:e.network,address:n}}}var Wc=5,mt=["solana","eip155","cosmos"],Ta=z(mt),Gc=l(Ta).max(mt.length).refine(e=>new Set(e).size===e.length,{message:"Duplicate wallet family"}).transform(e=>mt.filter(n=>e.includes(n)));function Jc(e){return e.chain}function Xc(e,n){if(e.chain==="cosmos"){if(!e.network||n&&n!==e.network)throw new Error("A Cosmos wallet belongs to its own network");return`${e.network}:${e.address}`}let i=n??(e.chain==="solana"?_e:"eip155:1");if(!(e.chain==="solana"?/^solana:[1-9A-HJ-NP-Za-km-z]{32}$/.test(i):Ot(i)))throw new Error(`Use a ${e.chain} network for this wallet`);return`${i}:${e.address}`}function Ot(e){return/^eip155:[1-9][0-9]{0,15}$/.test(e)}var Yc=se(e=>typeof e=="string"&&Ot(e),'Use an EVM chain ID such as "eip155:8453"'),T=t().regex(/^(0|[1-9][0-9]*)$/),el=k(r({chain:t(),token:t().nullable(),decimals:o().int().min(0).max(255).nullable(),total:T,wallets:l(r({address:t(),amount:T}).strict()),at:r({kind:z(["slot","block"]),number:T}).strict(),observedAt:o().int().nonnegative()}).strict()),tl=r({amount:t(),decimals:o().int().min(0).max(255).nullable(),block:t()}),Ea=/^(eip155:[1-9][0-9]{0,15})\/(erc721|erc1155):(0x[0-9a-fA-F]{40})(?:\/(0|[1-9][0-9]{0,77}))?$/,lr=`${_e}/nft:`,Ma=2n**256n-1n;function Ua(e){if(e.startsWith(lr)){let b=e.slice(lr.length);return At.safeParse(b).success?{chain:_e,standard:"metaplex",mint:b}:null}let n=Ea.exec(e);if(!n)return null;let[,i,c,d,m]=n;return c==="erc1155"!=(m!==void 0)||m!==void 0&&BigInt(m)>Ma?null:{chain:i,standard:c,contract:d,tokenId:m??null}}function Da(e){return Ua(e)!==null}var rl=k(r({collection:t(),chain:t(),standard:z(["erc721","erc1155","metaplex"]),total:T,wallets:l(r({address:t(),count:T}).strict()),at:r({kind:z(["slot","block"]),number:T}).strict(),observedAt:o().int().nonnegative()}).strict()),Qr=/^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/,_a=/^bytes([1-9]|[12][0-9]|3[0-2])?$/;function Za(e){let n=Qr.exec(e);return n?`${n[1]}${n[2]??"256"}`:e==="address"||e==="bool"||e==="string"||_a.test(e)?e:null}function dr(e){let n=/^([a-z0-9]+)(?:\s+[A-Za-z_$][A-Za-z0-9_$]*)?$/.exec(e.trim());return n?Za(n[1]):null}function La(e){let n=/^function\s+([A-Za-z_$][A-Za-z0-9_$]*)\s*\(([^()]*)\)\s+(?:external\s+)?(view|pure)\s+returns\s*\(([^()]*)\)$/.exec(e.trim());if(!n)return null;let[,i,c,d,m]=n,b=c.trim()?c.split(",").map(dr):[],v=m.includes(",")?null:dr(m);return b.length>16||b.some(S=>S===null)||!v||!(v==="bool"||v==="address"||Qr.test(v))?null:{name:i,inputs:b,returns:v,mutability:d,signature:`function ${i}(${b.join(",")}) ${d} returns (${v})`}}function Na(e){let n=/^(eip155:[1-9][0-9]{0,15}):(0x[0-9a-fA-F]{40}) (function .+)$/.exec(e),i=n&&e.length<=400?La(n[3]):null;return i?{chain:n[1],contract:n[2],function:i}:null}function Ba(e){return Na(e)!==null}var Kr=t().regex(/^(0|-?[1-9][0-9]*)$/),nl=k(r({call:t(),chain:t(),contract:t(),returns:t(),total:Kr.nullable(),wallets:l(r({address:t(),value:g([t(),u()])}).strict()),at:r({kind:z(["block"]),number:T}).strict(),observedAt:o().int().nonnegative()}).strict()),al=k(r({chain:t(),denom:t(),validator:t().nullable(),total:T,wallets:l(r({address:t(),amount:T}).strict()),validators:l(r({validator:t(),amount:T}).strict()),at:r({kind:z(["block"]),number:T}).strict(),observedAt:o().int().nonnegative()}).strict()),Qa=/^(eip155:[1-9][0-9]{0,15}):(0x[0-9a-fA-F]{40})\s+(?:event\s+)?([A-Za-z_$][A-Za-z0-9_$]*)\s*\(([^()]*)\)\s*;?$/,Ka=/^([a-z0-9]+(?:\[[0-9]*\])*)(\s+indexed)?\s+([A-Za-z_$][A-Za-z0-9_$]*)$/;function Va(e){let n=/^([a-z]+)([0-9]*)((?:\[[0-9]*\])*)$/.exec(e);if(!n)return null;let[,i,c,d]=n,m=c===""?256:Number(c),b=null;return c.startsWith("0")?null:(i==="uint"||i==="int"?b=m>=8&&m<=256&&m%8===0?i+m:null:i==="bytes"?b=c===""||m<=32?i+c:null:(i==="address"||i==="bool"||i==="string")&&c===""&&(b=i),b&&/^(\[([1-9][0-9]*)?\])?$/.test(d)?b+d:null)}function Fa(e){let n=Qa.exec(e.trim());if(!n)return null;let[,i,c,d,m]=n,b=[];for(let S of m.trim()?m.split(","):[]){let P=Ka.exec(S.trim()),re=P&&Va(P[1]);if(!P||!re||P[3]==="indexed"||b.some(je=>je.name===P[3]))return null;b.push({name:P[3],type:re,indexed:!!P[2]})}let v=b.filter(S=>S.indexed);return v.length>3||!v.some(S=>S.type==="address")?null:{chain:i,contract:c,name:d,inputs:b,signature:`${d}(${b.map(S=>S.type).join(",")})`}}function Ha(e){return Fa(e)!==null}var il=1e3,ol=720*60*60*1e3,mr=g([t(),u()]),Wa=g([mr,l(mr)]),sl=k(r({event:t(),chain:t(),contract:t(),since:o().int().nonnegative(),at:r({kind:z(["block"]),number:T}).strict(),finality:z(["finalized","safe"]),complete:u().optional(),logs:l(r({wallet:t(),block:T,timestamp:o().int().nonnegative(),tx:t(),logIndex:o().int().nonnegative(),args:y(t(),Wa)}).strict()).max(I.walletEventLogs),observedAt:o().int().nonnegative()}).strict());function Ga(e){return At.safeParse(e).success}var Vr=y(t(),M()),Ja=r({program:t(),source:t(),idl:Vr}).strict(),cl=1e3,ll=720*60*60*1e3,dl=k(r({program:t(),chain:t(),mint:t().nullable(),since:o().int().nonnegative(),at:r({kind:z(["slot"]),number:T}).strict(),complete:u(),transactions:l(r({wallet:t(),signature:t(),slot:T,timestamp:o().int().nonnegative(),signer:u().default(!1),programs:l(t()),balanceChanges:l(r({mint:t(),delta:Kr}).strict()),instructions:l(r({name:t(),args:y(t(),M()),accounts:y(t(),t())}).strict()).optional()}).strict()),observedAt:o().int().nonnegative()}).strict()),ml=r({guildId:t(),channelId:t(),messageId:t(),userId:t(),content:t().nullable(),replyTo:t().nullable(),publishedAt:o()}).strict(),qt=p({kind:s("discord-messages"),text:u().optional()}),Rt=p({kind:s("discord-reactions")}),Xa=r({guildId:t(),channelId:t(),parentChannelId:t().nullable().optional(),messageId:t(),replyTo:t().nullable(),publishedAt:o()}),ul=Xa.extend({text:t().nullable()}),zl=r({guildId:t(),channelId:t(),parentChannelId:t().nullable().optional(),messageId:t(),emoji:r({id:t().nullable(),name:t()}),reactorRoles:l(t()),messagePublishedAt:o()}),Ya=p({kind:s("integration"),provider:s("discord"),action:s("grant-role"),roleId:t().regex(/^[0-9]{1,20}$/)}),ei=g([p({provider:s("discord"),resource:s("channel"),types:l(z(["text","announcement"])).min(1),postable:s(!0).optional()}),p({provider:s("discord"),resource:s("role"),assignable:u().default(!1)})]),ti=16,ri=32768,bl=16,pl=256,ur=g([t(),o().finite(),u(),ae()]),Ae=o().int().safe().nonnegative(),Ie=o().finite(),rt=()=>l(le).min(1).max(I.trackerData.branches),le=ir(()=>p({type:z(["object","array","string","number","integer","boolean","null"]).optional(),properties:y(t(),le).refine(e=>Object.keys(e).length<=I.trackerData.entries,`An object schema lists at most ${I.trackerData.entries} properties`).optional(),required:l(t()).max(I.trackerData.entries).optional(),additionalProperties:g([u(),le]).optional(),propertyNames:p({type:s("string"),enum:l(t()).max(I.trackerData.entries).optional()}).optional(),items:le.optional(),minItems:Ae.optional(),maxItems:Ae.optional(),minLength:Ae.optional(),maxLength:Ae.optional(),minimum:Ie.optional(),maximum:Ie.optional(),exclusiveMinimum:Ie.optional(),exclusiveMaximum:Ie.optional(),enum:l(ur).min(1).max(I.trackerData.entries).optional(),const:ur.optional(),anyOf:rt().optional(),oneOf:rt().optional(),allOf:rt().optional()}));function ni(e){let n=[[e,0]];for(;n.length;){let[i,c]=n.pop();if(!(typeof i!="object"||i===null)){if(c>=ti)return"Tracker data schemas are at most 32 KB and 16 levels deep";if(!Array.isArray(i)&&Object.hasOwn(i,"__proto__"))return"Tracker data schemas cannot name a property __proto__";for(let d of Object.values(i))n.push([d,c+1])}}return new TextEncoder().encode(JSON.stringify(e)).byteLength>ri?"Tracker data schemas are at most 32 KB and 16 levels deep":null}var Fr=e=>[...e.anyOf??[],...e.oneOf??[],...e.allOf??[]],ai=e=>e.properties!==void 0||e.items!==void 0||typeof e.additionalProperties=="object"||Fr(e).length>0;function ut(e,n,i){let c=Fr(e);if(i&&c.filter(ai).length>1)return n;let d=[...Object.entries(e.properties??{}).map(([m,b])=>[b,`${n}.${m}`])];e.items&&d.push([e.items,n]),typeof e.additionalProperties=="object"&&d.push([e.additionalProperties,n]);for(let[m,b]of d){let v=ut(m,b,i);if(v)return v}for(let m of c){let b=ut(m,n,!0);if(b)return b}return null}var Hr=ie().superRefine((e,n)=>{let i=ni(e);i&&n.addIssue({code:"custom",message:i,abort:!0})}).pipe(le).refine(e=>e.type==="object","A tracker's record data is an object: declare it with z.object({ ... })").superRefine((e,n)=>{let i=ut(e,"data",!1);i&&n.addIssue({code:"custom",message:`Tracker data schemas cannot nest a union with several object, array or union branches inside another union's branch (${i}): flatten it into one union`})}),zr={pattern:"check string patterns in your evaluator",format:"use z.string() and check the format in your evaluator",prefixItems:"use an array or an object instead of a tuple",multipleOf:"check divisibility in your evaluator",not:"describe the allowed values instead",$ref:"inline the schema instead of registering or reusing it by ID",$defs:"inline the schema instead of registering or reusing it by ID",definitions:"inline the schema instead of registering or reusing it by ID",if:"use a union instead",then:"use a union instead",else:"use a union instead",contains:"check array contents in your evaluator",minContains:"check array contents in your evaluator",maxContains:"check array contents in your evaluator",uniqueItems:"check uniqueness in your evaluator",minProperties:"check key counts in your evaluator",maxProperties:"check key counts in your evaluator",patternProperties:"use z.record(z.string(), value) instead",dependentRequired:"use a union instead",dependentSchemas:"use a union instead",unevaluatedProperties:"use a strict object instead",unevaluatedItems:"use an array instead"},Wr=new Set(["additionalProperties","items","propertyNames"]),Gr=new Set(["anyOf","oneOf","allOf"]),ii=new Set(["type","properties","required","minItems","maxItems","minLength","maxLength","minimum","maximum","exclusiveMinimum","exclusiveMaximum","enum","const",...Wr,...Gr]),oi=new Set(["$schema","$id","$comment","title","description","default","examples","deprecated","readOnly","writeOnly"]);function zt(e){if(Array.isArray(e))return e.map(zt);if(typeof e!="object"||e===null)return e;let n=Object.fromEntries(Object.entries(e).map(([d,m])=>[d,zt(m)]));if(!Array.isArray(n.type))return n;let{type:i,...c}=n;return{anyOf:i.map(d=>d==="null"?{type:d}:{...c,type:d})}}function Ce(e,n){if(typeof e!="object"||e===null||Array.isArray(e))return e;let i={};for(let[c,d]of Object.entries(e)){if(Object.hasOwn(zr,c))throw new Error(`Tracker data schemas cannot use ${c} (${n}): ${zr[c]}`);if(!oi.has(c)){if(!ii.has(c))throw new Error(`Tracker data schemas cannot use the keyword ${c} (${n}): keep metadata to title, description, default and examples`);if(c==="properties"&&Object.hasOwn(d,"__proto__")||c==="required"&&d.includes("__proto__"))throw new Error(`Tracker data schemas cannot name a property __proto__ (${n})`);i[c]=c==="properties"?Object.fromEntries(Object.entries(d).map(([m,b])=>[m,Ce(b,`${n}.${m}`)])):Wr.has(c)?Ce(d,n):Gr.has(c)?d.map(m=>Ce(m,n)):d}}return i}function gl(e){let n;try{n=Xt(e,{target:"draft-2020-12",io:"input",unrepresentable:"throw",cycles:"throw",reused:"inline",override:({zodSchema:c,path:d})=>{let m=c._zod.def,b=["data",...d].join(".");if(m.type==="pipe"||m.type==="transform")throw new Error(`Tracker data schemas cannot transform values (${b}): records are stored as sent`);if(m.checks?.some(v=>v._zod.def.check==="custom"))throw new Error(`Tracker data schemas cannot use refinements (${b}): check the value in your evaluator`)}})}catch(c){let d=c instanceof Error?c.message:String(c);throw new Error(d.startsWith("Tracker data schemas")?d:`Tracker data schemas describe JSON: ${d}. Use z.unknown() for any JSON value.`)}let i=Hr.safeParse(Ce(zt(n),"data"));if(!i.success)throw new Error(i.error.issues.map(c=>c.message).join("; "));return i.data}var Jr=25e4,si=6e6,Xr=class extends Error{};function Oe(e,n){if(e.steps-=n,e.steps<0)throw new Xr}var Yr=64,ci=256;function bt(e,n){return e.length>n?e.slice(0,n-1)+"\u2026":e}function li(e){let n=[];for(let i=e;i;i=i.parent)n.push(bt(String(i.key),Yr));return bt(["data",...n.reverse()].join("."),ci)}var F=e=>e===null?"null":Array.isArray(e)?"an array":typeof e,nt=10;function di(e){let n=e.slice(0,nt).map(i=>JSON.stringify(i)).join(", ");return e.length>nt?`expected one of ${n}, or ${e.length-nt} more`:`expected one of ${n}`}var br=new WeakMap,pr=new WeakMap;function gr(e,n){let i=br.get(e);return i||(i=new Set(n),br.set(e,i)),i}function mi(e){let n=pr.get(e);return n||(n=Object.entries(e.properties??{}).filter(([,i])=>i.const!==void 0),pr.set(e,n)),n}function W(e,n,i,c){Oe(c,1);let d=m=>({at:i,reason:m});if(e.const!==void 0&&n!==e.const)return d(()=>`expected ${JSON.stringify(e.const)}`);if(e.enum&&!gr(e,e.enum).has(n)){let m=e.enum;return d(()=>di(m))}switch(e.type){case"null":if(n!==null)return d(()=>`expected null, got ${F(n)}`);break;case"boolean":case"string":if(typeof n!==e.type){let m=e.type;return d(()=>`expected a ${m}, got ${F(n)}`)}break;case"number":if(typeof n!="number")return d(()=>`expected a number, got ${F(n)}`);break;case"integer":if(!Number.isInteger(n))return d(()=>typeof n=="number"?"expected an integer":`expected an integer, got ${F(n)}`);break;case"array":if(!Array.isArray(n))return d(()=>`expected an array, got ${F(n)}`);break;case"object":if(typeof n!="object"||n===null||Array.isArray(n))return d(()=>`expected an object, got ${F(n)}`);break}if(typeof n=="string"){let{minLength:m,maxLength:b}=e;if(m!==void 0&&n.length<m)return d(()=>`expected at least ${m} characters`);if(b!==void 0&&n.length>b)return d(()=>`expected at most ${b} characters`)}if(typeof n=="number"){let m=[[e.minimum,b=>n>=b,"at least"],[e.exclusiveMinimum,b=>n>b,"more than"],[e.maximum,b=>n<=b,"at most"],[e.exclusiveMaximum,b=>n<b,"less than"]];for(let[b,v,S]of m)if(b!==void 0&&!v(b))return d(()=>`expected ${S} ${b}`)}if(Array.isArray(n)){let{minItems:m,maxItems:b}=e;if(m!==void 0&&n.length<m)return d(()=>`expected at least ${m} items`);if(b!==void 0&&n.length>b)return d(()=>`expected at most ${b} items`);if(e.items)for(let v=0;v<n.length;v++){let S=W(e.items,n[v],{parent:i,key:v},c);if(S)return S}}if(typeof n=="object"&&n!==null&&!Array.isArray(n)){let m=n,b=e.properties??{},v=e.required??[];Oe(c,v.length);for(let E of v)if(!Object.hasOwn(m,E))return d(()=>`missing required key "${bt(E,Yr)}"`);let S=mi(e);Oe(c,S.length);for(let[E,Q]of S)if(Object.hasOwn(m,E)&&m[E]!==Q.const)return{at:{parent:i,key:E},reason:()=>`expected ${JSON.stringify(Q.const)}`};let P=Object.keys(m);Oe(c,P.length);let re=e.propertyNames?.enum,je=re&&gr(e.propertyNames,re);for(let E of P){if(je&&!je.has(E))return{at:{parent:i,key:E},reason:()=>"is not an allowed key"};let Q=Object.hasOwn(b,E)?b[E]:e.additionalProperties;if(Q===!1)return{at:{parent:i,key:E},reason:()=>"is not an allowed key"};if(Q&&Q!==!0){let Gt=W(Q,m[E],{parent:i,key:E},c);if(Gt)return Gt}}}for(let m of e.allOf??[]){let b=W(m,n,i,c);if(b)return b}if(e.anyOf&&!e.anyOf.some(m=>!W(m,n,i,c)))return d(()=>"matches none of the allowed shapes");if(e.oneOf){let m=0;for(let b of e.oneOf)if(!W(b,n,i,c)&&++m>1)return d(()=>"matches more than one of the allowed shapes");if(!m)return d(()=>"matches none of the allowed shapes")}return null}function ui(e,n,i={steps:Jr}){try{let c=W(e,n,null,i);return c&&{kind:"mismatch",path:li(c.at),reason:c.reason()}}catch(c){if(c instanceof Xr)return{kind:"too-complex",path:"data",reason:"is too complex to validate against the tracker's schema"};throw c}}function zi(e,n){let i={steps:si};return n.map(c=>{let d={steps:Math.min(Jr,i.steps)},m=d.steps,b=ui(e,c,d);return i.steps-=m-Math.max(d.steps,0),b})}function pt(e){return e.flatMap(n=>n.anyOf||n.oneOf||n.allOf?pt([...n.anyOf??[],...n.oneOf??[],...n.allOf??[]]):[n])}var fr=e=>e.type===void 0&&e.properties===void 0&&e.const===void 0&&e.enum===void 0;function bi(e,n){let i=new Set(["string","number","boolean","null","object","array"]),c=[e];for(let m of n.split(".")){let b=[];for(let v of pt(c))if(fr(v))b.push({});else{if(v.type!=="object")continue;v.properties&&Object.hasOwn(v.properties,m)?b.push(v.properties[m]):v.additionalProperties===!0?b.push({}):v.additionalProperties&&b.push(v.additionalProperties)}if(!b.length)return null;c=b}let d=new Set;for(let m of pt(c)){if(fr(m))return i;m.type&&d.add(m.type==="integer"?"number":m.type);for(let b of[...m.const!==void 0?[m.const]:[],...m.enum??[]])d.add(b===null?"null":typeof b)}return d}function fl(e){return{content:(n,i)=>e.content(n,i),summary:(n,i)=>e.summary(n,i),records:(async(n,i)=>{let c=await e.records(n,i),d=n.source,m=d?.kind==="custom"?d.data:void 0;if(!m)return c;let b=zi(m,c.items.map(S=>S.data)),v=c.items.filter((S,P)=>!b[P]);return{...c,items:v,excluded:c.items.length-v.length}})}}function vl(e,n){let i=n===void 0?[]:Array.isArray(n)?n:[n];for(let c of i){let d=bi(e,c.path);if(!d)return`The tracker filter reads data.${c.path}, which the tracker's data schema does not declare`;if(!("equals"in c?[typeof c.equals]:["number","string"]).some(b=>d.has(b)))return`The tracker filter compares data.${c.path} with ${"equals"in c?JSON.stringify(c.equals):"a number"}, but the field holds ${[...d].join(" or ")}`}return null}var en=t().trim().min(1).max(500),pi=/^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$/;function tn(){return or.datetime({offset:!0,pattern:pi})}var x=o().int().safe().nonnegative().max(864e13),R=o().int().safe().nonnegative(),D=t().min(1).max(256),H=R.nullable().default(null),gi=oe({id:D,userId:D,content:t(),createdAt:tn(),author:oe({id:D,username:t(),name:t(),verified:u().nullable().default(null)}),likeCount:H,replyCount:H,retweetCount:H,quoteCount:H,viewCount:H,bookmarkCount:H,isReply:u(),isRetweet:u(),isQuoteTweet:u()}),fi=p({version:s(1),id:t().min(1),authorId:t().min(1),publishedAt:x,text:t(),isReply:u(),isRetweet:u(),isQuoteTweet:u(),media:l(p({type:t(),url:t()})).nullable(),mentionedAuthorIds:l(t().min(1)).nullable(),videoLengthSeconds:o().nonnegative().nullable(),references:p({replyId:t().nullable(),replyAuthorId:t().nullable(),quoteId:t().nullable(),quoteAuthorId:t().nullable(),repostId:t().nullable(),repostAuthorId:t().nullable()})}),vi=p({id:D,observation:t().regex(/^observation_[a-f0-9]{64}$/)}),hl=vi.extend({member:a}),at={member:a,capturedAt:x},rn=p({contentRevision:a,observation:a}),yl=p({tracker:a,source:s("x"),evidence:rn,content:fi,observedAt:x,removed:u(),attribution:f("kind",[p({...at,kind:s("linked"),account:p({provider:s("x"),issuer:t().min(1),subject:D,revision:R,linkedAt:x.nullable()})}),p({...at,kind:s("unlinked")}),p({...at,kind:s("different-author")})])}),hi=["wallet","x","discord","member"],nn=ar(["app:",t().regex(/^[a-z0-9][a-z0-9_-]{0,39}$/,"Name an app identity kind like app:game: lowercase letters, digits, _ or -, at most 40")]),Pt=g([z(hi),nn]),kl=e=>e.startsWith("app:"),be=t().min(1).max(64),jl=r({kind:be,subject:D,revision:R,linkedAt:x.nullable()}),pe=t().regex(/^[a-zA-Z][a-zA-Z0-9_]{0,39}$/,"Name roles like author or recipient: a letter, then letters, digits or underscores"),Sl=["author","inReplyTo","quoted","reposted"],gt=e=>new Set(e).size===e.length,an=t().regex(/^[a-z][a-zA-Z0-9]{0,39}$/,"Name metrics like likes or watchTime: a lowercase letter, then letters or digits"),yi=["likes","replies","reposts","quotes","views","bookmarks"],ki=p({metrics:l(an).max(10).refine(gt,"List each metric once")}),on=p({chain:t().regex(/^(?:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp|eip155:[1-9][0-9]{0,15}|cosmos:[-_a-zA-Z0-9]{1,32})$/,'Use "solana", an EVM chain such as "eip155:8453" or a Cosmos network such as "cosmos:cosmoshub-4"'),token:t().min(1).max(128).nullable()}),X=r({kind:s("x-search"),query:t().trim().min(1).max(2e3)}).strict(),sn=r({kind:s("custom"),namespace:a,identities:l(Pt).min(1).max(8).refine(gt,"List each identity kind once").optional(),accounts:l(pe).min(1).max(10).refine(gt,"List each account role once").refine(e=>!e.includes("author"),"author is every record's own role; name other accounts").optional(),data:Hr.optional(),content:ki.optional(),balance:on.optional()}).strict().refine(e=>e.balance===void 0||e.namespace===Lr,"Only wallet.balances() samples a balance").refine(e=>!e.content||e.data?.properties?.body?.type==="object"&&(e.data.required??[]).includes("body"),"A content source's data schema has a required object body").refine(e=>!e.accounts||e.identities,"Named accounts need identities"),ji=f("kind",[X,sn,qt,Rt]),Si=["x-search","custom","discord-messages","discord-reactions"];function xl(e){if(ln(e))switch(e.kind){case"x-search":return["x"];case"discord-messages":case"discord-reactions":return["discord"];case"custom":return e.identities}}function wl(e){switch(e.kind){case"x-search":return{metrics:yi};case"custom":return e.content;case"discord-messages":case"discord-reactions":return}}var Ct=r({start:x,end:x.optional()}).strict().refine(e=>e.end===void 0||e.end>e.start,"End must follow start"),V=r({key:a,title:t().trim().min(1).max(120),source:ji,window:Ct,refreshSeconds:o().int().min(300).max(86400).default(21600),maxPages:o().int().min(1).max(1e3).default(60)}).strict(),Al=g([V,r({code:t().min(1).max(2e6)}).strict()]),cn=f("kind",[r(X.shape),r({...sn.shape,identities:l(be).optional()}),r(qt.shape),r(Rt.shape)]),xi=g([cn,r({kind:t().min(1).refine(e=>!Si.some(n=>n===e),"Known source kinds must match their schema")}).catchall(M())]);function ln(e){return cn.safeParse(e).success}var wi=r({...V.shape,source:xi,window:r(Ct.shape)}),Ai=r({id:a,version:a,definition:wi,publishedAt:x,actor:t().nullable()}),dn=r({archivedAt:o().int().nonnegative().nullable().optional(),published:Ai,paused:u(),pauseReason:t().nullable().optional(),resumesAt:x.nullable().optional(),effectiveRefreshSeconds:o().int().positive().optional(),state:z(["idle","syncing","error","complete"]),lastStartedAt:x.nullable(),lastCompletedAt:x.nullable(),nextSyncAt:x.nullable(),coverage:z(["unknown","partial","complete"]),error:t().nullable(),records:R,origin:z(["code","data"]).optional()}),mn=f("kind",[X,qt,Rt,p({kind:s("telegram-messages")}),p({kind:s("telegram-reactions")}),p({kind:s("youtube-shorts")}),p({kind:s("tiktok-videos")}),p({kind:s("wallet-balances"),...on.shape})]),Il=["x-search","discord-messages","discord-reactions","telegram-messages","telegram-reactions","youtube-shorts","tiktok-videos","wallet-balances"],vr={[Zr]:"telegram-messages",[_r]:"telegram-reactions",[Oa]:"youtube-shorts",[qa]:"tiktok-videos"};function Ol(e){if(ln(e))switch(e.kind){case"x-search":return{kind:"x-search",query:e.query};case"discord-messages":return{kind:"discord-messages",text:e.text??!1};case"discord-reactions":return{kind:"discord-reactions"};case"custom":return e.namespace===Lr?e.balance?{kind:"wallet-balances",...e.balance}:void 0:Object.hasOwn(vr,e.namespace)?{kind:vr[e.namespace]}:void 0}}var un=r({title:V.shape.title,query:X.shape.query,window:Ct,refreshSeconds:V.shape.refreshSeconds.unwrap(),maxPages:V.shape.maxPages.unwrap()}).strict(),Ii=un.extend({key:a,refreshSeconds:V.shape.refreshSeconds,maxPages:V.shape.maxPages,actionId:a}).strict(),ql=Ii.extend({query:X.shape.query.optional(),source:mn.optional()}).refine(e=>e.query===void 0!=(e.source===void 0),"Name the source with source, or an X search with query, not both"),Rl=un.partial().extend({source:mn.optional(),actionId:a}).strict().refine(({actionId:e,...n})=>Object.values(n).some(i=>i!==void 0),"Change at least one field").refine(e=>e.query===void 0||e.source===void 0,"Change the query with source or query, not both"),Pl=r({actionId:a,action:z(["pause","resume","refresh"]),reason:en.optional()}).strict(),Oi=p({kind:Pt.optional(),id:D}),qi=r({id:D,occurredAt:x,observedAt:x,author:r({id:D,verified:u().nullable().default(null),kind:Pt.optional()}).strict().nullable().default(null),accounts:y(pe,Oi).refine(e=>Object.keys(e).length<=10,"At most 10 accounts").optional(),data:y(t(),M()),removed:u().default(!1)}).strict().refine(e=>new TextEncoder().encode(JSON.stringify(e.data)).byteLength<=131072,"Record exceeds 128 KB"),zn=r({kind:be.optional(),id:t()}),Ri=r({id:t(),occurredAt:x,observedAt:x,author:r({id:t(),verified:u().nullable().default(null),kind:be.optional()}).nullable().default(null),accounts:y(t(),zn).optional(),data:y(t(),M()),removed:u().default(!1),source:t(),firstSeenAt:x,synthetic:s(!0).optional(),evidence:rn.nullable().optional()}),Cl=r({actionId:a,records:l(qi).min(1).max(100)}).strict(),$l=r({stored:R,admissions:r({admitted:R,skipped:R,filtered:R.optional()}).optional()}),hr={quest:a,tracker:a,record:D,observedAt:x,release:a,account:t().nullable(),createdAt:x,updatedAt:x,actor:t().nullable()},Tl=["quest-paused","before-activation","outside-window","future-record","record-removed","invalid-record-data","content-unavailable","no-account","beneficiary-is-author","unlinked-account","ambiguous-account","not-joined","member-banned","already-completed","not-enrolled","before-enrollment","historical","prerequisites-incomplete"],Pi=t().optional(),bn=f("state",[r({...hr,state:s("admitted"),code:ae(),reason:ae(),member:a,attempt:a}),r({...hr,state:s("skipped"),code:t().min(1),reason:t(),window:z(["tracker","quest"]).optional(),enrollment:Pi,member:a.nullable(),attempt:a.nullable()})]),pn={quest:a.optional(),record:D.optional(),member:a.optional(),state:z(["admitted","skipped"]).optional(),code:t().min(1).max(100).optional(),limit:q.number().int().min(1).max(100).default(25)},El=p({...pn,cursor:w.optional()}),Ml=r({items:l(bn).max(100),nextCursor:w.nullable()}),Ul=p({...pn,before:t().max(512).optional()}),Dl=p({items:l(bn).max(100),next:t().nullable()}),_l=p({actionId:a,quest:a,record:D,observedAt:x}),it=g([u(),z(["true","false"]).transform(e=>e==="true")]),Zl=r({author:D.optional(),member:a.optional(),verified:it.optional(),since:q.number().int().safe().nonnegative().optional(),until:q.number().int().safe().nonnegative().optional(),removed:it.default(!1),minLikes:q.number().int().safe().nonnegative().optional(),minViews:q.number().int().safe().nonnegative().optional(),limit:q.number().int().min(1).max(100).default(25),cursor:t().max(2048).optional(),includeEvidence:it.optional()}).strict().refine(e=>e.since===void 0||e.until===void 0||e.until>e.since,"Until must follow since"),Ll=r({tracker:a,items:l(Ri),nextCursor:t().nullable(),total:R,status:dn}),Nl=r({records:R,authors:R,metrics:r({likes:R,replies:R,reposts:R,quotes:R,views:R,bookmarks:R}),missingMetrics:R,status:dn}),Bl={pages:3,posts:100,days:30},Ql=r({query:X.shape.query,since:x}).strict(),Kl=r({query:t(),since:x,fetchedAt:x,pages:R,posts:l(gi).max(I.trackerPreview.posts),more:u()}),Vl=p({kind:z(["accept","reject","review","defer","progress","superseded"]),reason:t().nullable()}),Ci=p({quest:a,member:a.optional(),content:t().min(1).max(256).optional(),cursor:w.optional()}),gn=p({quest:a,content:t(),member:a,release:a,attempt:a,revision:a,observation:a,current:u(),state:z(["pending","qualified","unqualified","needs-review","failed","superseded","stale","blocked","unavailable"]),reason:t().nullable(),reward:p({attempt:a.nullable(),completion:a.nullable(),state:z(["unresolved","awarded","excluded"])})}),Fl=p({items:l(gn),nextCursor:w.nullable()}),Ze=an,N=y(Ze,o().int().safe().nonnegative()),$i=p({metrics:l(Ze).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),maxAgeMs:o().int().positive().max(864e5).default(36e5)}),ot=864e5,Ti=r({kind:s("count"),count:o().int().min(1).max(1e4)}).strict(),Ei=f("kind",[r({kind:s("lifetime")}).strict(),r({kind:s("calendar"),period:z(["day","week","month"]),latenessMs:o().int().min(0).max(90*ot).default(7*ot)}).strict(),r({kind:s("rolling"),durationMs:o().int().min(1).max(365*ot)}).strict()]),Mi=r({kind:s("progress"),goal:Ti,window:Ei,repeat:z(["once","repeat"]).default("once")}).strict(),st=r({id:a,ordinal:o().int().positive(),achievedAt:o().int(),window:t()}),fn=f("status",[st.extend({status:s("revoked"),completion:a,revokedAt:o().int()}),st.extend({status:s("awarded"),completion:a}),st.extend({status:s("budget-exhausted"),budget:a})]),Ui=r({goal:o().int().positive(),current:o().int().nonnegative(),window:r({key:t(),start:o().int().nullable(),end:o().int().nullable()}),repeat:z(["once","repeat"]),settled:o().int().nonnegative(),latest:fn.nullable()}),Di=r({id:a,distinct:t(),attempt:a,occurredAt:o().int(),recordedAt:o().int(),window:t(),status:z(["counted","late","future","excluded"]),achievement:fn.nullable(),reason:t().nullable()}),Hl=r({items:l(Di),nextCursor:t().nullable()}),Wl=r({actionId:er(),excluded:u(),reason:t().trim().min(1).max(2e3)}).strict(),Gl=r({cursor:t().max(2e3).optional(),limit:q.number().int().min(1).max(100).optional()}).strict(),Jl=r({excluded:u()}),yr=o().int().safe(),ft=/^(?:[+-]|(?:Etc\/)?GMT[+-]\d|(?:EST|MST|HST)$)/i;function _i(e){let n;try{n=new Intl.DateTimeFormat("en",{timeZone:e}).resolvedOptions().timeZone}catch{return null}return n==="UTC"?"UTC":ft.test(e)||ft.test(n)?null:n}var vn=t().min(1).max(100).transform((e,n)=>{let i=_i(e);return i===null?(n.addIssue({code:"custom",message:ft.test(e)?"Use a named IANA timezone, such as Europe/Budapest or UTC. Fixed offsets have no daylight-saving rules.":"Use an IANA timezone name, such as Europe/Budapest or UTC"}),K):i}),de=t().min(1).max(100),hn=e=>`${e} no longer take a timeZone: they follow the project calendar. Set calendar.timeZone in relay.json or in Console settings.`,vt=e=>typeof e=="object"&&e!==null;function Zi(e,n){return vt(e)&&e.kind==="streak"&&"timeZone"in e&&n.addIssue({code:"custom",path:["timeZone"],message:hn("Streaks")}),e}function Li(e,n){let i=vt(e)?e.window:void 0;return vt(i)&&i.kind==="calendar"&&"timeZone"in i&&n.addIssue({code:"custom",path:["window","timeZone"],message:hn("Calendar leaderboard windows")}),e}var Y=z(["lifetime","day","week","month"]),Xl=r({timeZone:de,today:t(),nextBoundary:yr,pending:r({timeZone:de,effectiveAt:yr}).nullable(),declared:de.nullable(),unsupported:t().nullable().default(null)}),Yl=r({actionId:a,timeZone:vn,reason:t().trim().min(1).max(500)}).strict(),ed=r({timeZone:vn}).strict(),Ni=r({kind:s("streak"),days:o().int().min(1).max(3650)}),Bi=r({goal:o().int().positive(),current:o().int().nonnegative(),best:o().int().nonnegative(),today:t(),todayQualified:u(),timeZone:de,nextBoundary:o().int(),pendingTimeZone:r({timeZone:de,effectiveAt:o().int()}).nullable(),days:l(r({day:o().int(),date:t(),timeZone:t(),occurredAt:o().int()})),milestone:f("status",[r({status:s("pending")}),r({status:s("awarded"),completion:t(),achievedAt:o().int()}),r({status:s("budget-exhausted"),budget:t(),achievedAt:o().int()})])}),L=o().int().safe().nonnegative().max(864e13),ht=o().int().safe().nonnegative(),Qi=z(["new-record","new-observation","data-changed"]);function td(e,n){return e==="custom"&&n!==Zr&&n!==_r?"new-observation":"new-record"}var qe=g([o().finite(),p({setting:t().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/)})]),kr=t().max(200).regex(/^[^.\s]+(\.[^.\s]+)*$/,"Use dot-separated keys, such as metrics.likes"),jr=g([p({path:kr,equals:g([t().max(1e3),o().finite(),u()])}),p({path:kr,gt:qe.optional(),gte:qe.optional(),lt:qe.optional(),lte:qe.optional()}).refine(e=>[e.gt,e.gte,e.lt,e.lte].some(n=>n!==void 0),"Compare with equals, gt, gte, lt or lte")]),Ki=g([jr,l(jr).min(1).max(10)]);function Vi(e){return e===void 0?[]:Array.isArray(e)?e:[e]}function rd(e){return Vi(e).flatMap(n=>"equals"in n?[]:[n.gt,n.gte,n.lt,n.lte].flatMap(i=>typeof i=="object"?[i.setting]:[]))}var Fi=z(["none","required"]),Hi=z(["activation","window","enrollment"]),Wi=z(["staff","claim","automatic"]),Gi=p({tracker:a,source:t().min(1).max(100),on:Qi,where:Ki.optional(),beneficiary:pe,enrollment:Fi.optional(),since:Hi.optional(),historical:Wi.optional(),content:s(!0).optional()}).refine(e=>e.since!=="enrollment"||e.enrollment==="required",'since: "enrollment" needs enrollment: "required"');function nd(e){return e.on}function ad(e){return{enrollment:e.enrollment??"none",since:e.since??"activation",historical:e.historical??(e.content?"claim":"staff")}}function id(e){return e.beneficiary}var Sr={issuer:t().min(1),subject:t().min(1).max(256),revision:ht,linkedAt:L.nullable()},Ji=r({member:a,capturedAt:L,account:g([r({provider:s("wallet"),id:t().min(5).max(256),revision:ht,linkedAt:L.nullable()}),r({provider:s("x"),...Sr}),r({provider:s("discord"),...Sr}),r({provider:s("member"),id:a}),r({provider:nn,subject:t().min(1).max(256),revision:ht,linkedAt:L.nullable()}),r({provider:t().min(1)})])}),Xi=r({id:t().min(1).max(256),source:t(),occurredAt:L,observedAt:L,firstSeenAt:L,author:r({id:t().min(1).max(256),verified:u().nullable(),kind:be.optional()}).nullable(),accounts:y(pe,zn).optional(),data:y(t(),M()),removed:u()}),Yi=r({revision:a,observation:a,body:y(t(),M())}),od=r({tracker:a,key:a,beneficiary:pe,record:Xi,content:Yi.optional(),attribution:Ji,enrolledAt:L.optional()}),xr=Object.freeze(["budget-exhausted","defer-expired","defer-limit-exceeded","evaluator-deferred","evaluator-progress","imported","integration-required","not-linked","provider-unavailable","author-error","evaluator-error","capability-limit"]),wr=64,eo=/^[a-z0-9-]+$/;function to(e){return typeof e!="string"||e.length===0||e.length>wr||!eo.test(e)?`Invalid reject code ${JSON.stringify(e)}: use lowercase letters, digits and hyphens, at most ${wr} characters, such as "wrong-answers"`:xr.includes(e)?`Invalid reject code ${JSON.stringify(e)}: Relay writes it itself. A reject code cannot be ${xr.join(", ")}`:null}var ro=t().superRefine((e,n)=>{let i=to(e);i&&n.addIssue({code:"custom",message:i})}),sd={quests:1e3,questTypes:200,collections:1e3},cd={modules:200,size:2e6},no=t().regex(/^[0-9a-f]{64}$/),ao=t().max(200).regex(/^[a-z0-9_][a-z0-9_.-]*(\/[a-z0-9_][a-z0-9_.-]*)*\.js$/i).refine(e=>!e.split("/").some(n=>n==="."||n===".."),"Runtime module paths cannot contain . or .. segments"),$t=r({digest:no,sdkVersion:t().min(1).max(64)}).strict(),io=y(ao,t().min(1)).refine(e=>{let n=Object.values(e);return n.length>0&&n.length<=I.sdkRuntime.modules&&n.reduce((i,c)=>i+c.length,0)<=I.sdkRuntime.size},`A runtime has 1 to ${I.sdkRuntime.modules} modules and at most ${I.sdkRuntime.size} characters of source`),ld=$t.extend({zodVersion:t().min(1).max(64),modules:io}).strict();async function dd(e){let n=JSON.stringify(Object.entries(e).sort(([c],[d])=>c<d?-1:c>d?1:0)),i=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(n));return[...new Uint8Array(i)].map(c=>c.toString(16).padStart(2,"0")).join("")}var Ar=t().regex(/^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,199}$/),Tt=f("kind",[Ni,Mi,r({kind:s("once")}).strict(),r({kind:s("keyed"),across:s("members").optional()}).strict()]),yt=t().min(1).max(500),yn=r({id:Ar,scope:z(["member","project"]),period:Y,limit:o().int().positive().max(Number.MAX_SAFE_INTEGER),cost:g([o().int().positive().max(Number.MAX_SAFE_INTEGER),r({balance:Ar}).strict()])}).strict(),oo=yn.extend({scope:s("author")}).strict(),md=r({quest:t().min(1).max(200),key:yt,completedAt:o().int().nonnegative().safe().nullable()}),ud=100,so=z(["discord","x"]),co=t().regex(/^[a-z][a-z0-9-]{0,63}$/,"Name an integration module provider, such as discord"),lo=z(["discord"]),kn=r({id:t().regex(/^[0-9]{1,20}$/),name:t().min(1),icon:t().nullable()}),zd=r({provider:lo,configured:u(),status:z(["disconnected","ready","attention"]),revision:o().int().nonnegative(),server:kn.nullable(),issue:t().nullable(),connectedAt:o().default(0)}),bd=r({servers:l(kn)}),jn=["beneficiary","author","quest","points","rewards"],mo=new Set(jn);function uo(e){let n=[],i="",c=0;for(;c<e.length;){let d=e[c];if(d==="{"&&e[c+1]==="{"){i+="{",c+=2;continue}if(d==="}"&&e[c+1]==="}"){i+="}",c+=2;continue}if(d==="}")return{error:"Write }} for a literal } in an announcement"};if(d!=="{"){i+=d,c+=1;continue}let m=e.indexOf("}",c),b=m===-1?"":e.slice(c+1,m);if(!mo.has(b))return{error:`Unknown announcement placeholder {${b}}: use ${jn.map(v=>`{${v}}`).join(", ")}, or {{ for a literal {`};i&&(n.push({kind:"text",text:i}),i=""),n.push({kind:"placeholder",name:b}),c=m+1}return i&&n.push({kind:"text",text:i}),{segments:n}}var zo=t().trim().min(1).max(1e3).superRefine((e,n)=>{let i=uo(e);"error"in i&&n.addIssue({code:"custom",message:i.error})}),Sn={action:s("post-message"),text:zo,replyToTriggeringMessage:u().optional()},bo=p({provider:s("telegram"),chat:Nr,...Sn}),po=p({provider:s("discord"),channel:t().regex(/^[0-9]{1,20}$/),...Sn}),go=f("provider",[bo,po]),fo=r({required:u().default(!0),minLength:o().int().min(0).max(1e4).default(1),maxLength:o().int().min(1).max(1e4).default(1e4)}).strict().refine(e=>e.minLength<=e.maxLength,"minLength must not exceed maxLength"),vo=t().min(1).max(253).refine(e=>{if(!/^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/i.test(e)||e.includes(".."))return!1;try{let n=new URL(`https://${e}`);return n.hostname===e.toLowerCase()&&!n.port&&!n.username&&!n.password&&n.pathname==="/"&&!n.search&&!n.hash}catch{return!1}},"Use a hostname without a scheme, path, port, or wildcard"),ho=r({required:u().default(!0),allowedHosts:l(vo).min(1).max(100).optional()}).strict(),xn=r({kind:s("text"),value:t().max(1e4)}).strict(),wn=r({kind:s("url"),value:t().max(2048)}).strict(),pd=f("kind",[xn,wn]);function gd(e,n){let i=e.kind==="text"?1e4:2048;if(e.value.length>i)return`Enter no more than ${i} characters`;if(e.kind!==n.input)return`This quest requires ${n.input} input`;if(!e.value.trim())return n.constraints.required?"This field is required":null;if(n.input==="text")return e.value.length<n.constraints.minLength?`Enter at least ${n.constraints.minLength} characters`:e.value.length>n.constraints.maxLength?`Enter no more than ${n.constraints.maxLength} characters`:null;let c=An(e.value);return c?n.constraints.allowedHosts&&!n.constraints.allowedHosts.some(d=>d.toLowerCase()===c.hostname.toLowerCase())?`Use a URL hosted on: ${n.constraints.allowedHosts.join(", ")}`:null:"Enter a valid HTTP or HTTPS URL without credentials"}function An(e){if(e!==e.trim()||/[\\\s]/.test(e)||!/^https?:\/\//i.test(e))return null;try{let n=new URL(e);return["http:","https:"].includes(n.protocol)&&!n.username&&!n.password?n:null}catch{return null}}function fd(e){let n=An(e);return!n||n.port||!["x.com","www.x.com","twitter.com","www.twitter.com","mobile.twitter.com"].includes(n.hostname)?null:/^\/(?:[A-Za-z0-9_]+|i\/web)\/status\/([0-9]{1,20})\/?$/.exec(n.pathname)?.[1]??null}var Et=t().regex(/^[a-zA-Z0-9_-]+$/).max(100),yo=r({id:Et,label:t().trim().min(1).max(500)}).strict(),In=r({id:Et,prompt:t().trim().min(1).max(1e3),choices:l(yo).min(2).max(8).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Choice IDs must be unique")}).strict(),ko=l(In).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Question IDs must be unique"),Mt=l(In.extend({correct:Et}).refine(e=>e.choices.some(n=>n.id===e.correct),"Choose a correct answer from the available choices")).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Question IDs must be unique"),On=g([p({provider:s("domino"),resource:s("point-ledger")}),ei]),vd=r({source:On,query:t().max(100).optional(),cursor:t().regex(/^\d{1,6}$/).optional(),ids:l(t().min(1).max(100)).max(50).optional()}).strict(),hd=r({revision:o().int(),options:l(r({id:t(),label:t(),description:t().optional(),group:t().optional(),disabledReason:t().optional()})),nextCursor:t().nullable().default(null),cursor:t().nullable()}),qn=tn().transform(e=>new Date(e).toISOString()),kt=g([s(""),t().regex(/^\S{1,200}$/)]),Z={label:t().min(1),description:t().optional()},jo=f("kind",[r({...Z,kind:s("point-ledger"),default:a.or(s(""))}).strict(),r({...Z,kind:s("datetime"),default:qn}).strict(),r({...Z,kind:s("resource"),default:kt,source:On}).strict(),r({...Z,kind:s("quiz"),default:Mt}).strict(),r({...Z,kind:s("text"),default:t(),minLength:o().int().nonnegative(),maxLength:o().int().positive(),multiline:u(),picker:t().optional(),decimals:o().int().min(0).max(255).optional(),secret:s(!0).optional()}).strict(),r({...Z,kind:s("integer"),default:o().int(),min:o().int(),max:o().int()}).strict(),r({...Z,kind:s("boolean"),default:u()}).strict(),r({...Z,kind:s("choice"),default:t(),options:l(t().min(1)).min(1)}).strict()]),So=y(t().regex(/^[a-zA-Z][a-zA-Z0-9_]*$/),jo),G=y(t(),g([t(),o().finite(),u(),Mt]));function xo(e){return e.length<=100&&/^(0|[1-9][0-9]*)$/.test(e)}function wo(e){return e==="solana"||e===_e||Ot(e)}function yd(e){return e?.kind==="integer"||e?.kind==="text"&&e.picker==="amount"}function Ao(e){let n=e.secret?t().max(e.maxLength).refine(i=>i===""||i.length>=e.minLength,`Use at least ${e.minLength} characters`):t().min(e.minLength).max(e.maxLength);switch(e.picker){case"amount":return n.refine(xo,"Use a whole number of base units, such as 1000000");case"chain":return n.refine(wo,'Use "solana" or an EVM chain ID such as "eip155:8453"');case"nft":return n.refine(Da,'Use an NFT collection such as "eip155:1/erc721:0x\u2026", "eip155:8453/erc1155:0x\u2026/1" for one ERC-1155 token ID, or "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/nft:<collection mint>"');case"contract-call":return n.refine(Ba,`Use a contract call: the contract's CAIP-10 ID and a view or pure function returning one uint, int, bool or address, such as "eip155:8453:0x\u2026 function stakedOf(address) view returns (uint256)"`);case"contract-event":return n.refine(Ha,'Use a contract event such as "eip155:8453:0x\u2026 Transfer(address indexed from, address indexed to, uint256 value)": name every argument, and index at least one address argument');case"solana-program":return n.refine(Ga,'Use a Solana program address in base58, such as "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"');default:return n}}function kd(e,n){let i={};for(let[c,d]of Object.entries(e))switch(d.kind){case"point-ledger":i[c]=kt.default(d.default);break;case"datetime":i[c]=qn.default(d.default);break;case"resource":i[c]=kt.default(d.default);break;case"quiz":i[c]=Mt.default(d.default);break;case"text":i[c]=Ao(d).default(d.default);break;case"integer":i[c]=o().int().min(d.min).max(d.max).default(d.default);break;case"boolean":i[c]=u().default(d.default);break;case"choice":i[c]=z(d.options).default(d.default);break}return G.parse(r(i).strict().parse(n))}function jd(e,n){return Object.entries(e).filter(([i,c])=>(c.kind==="resource"||c.kind==="point-ledger")&&!n[i]).map(([i])=>i)}function Sd(e,n){return e.kind===n.kind||e.kind==="resource"&&e.source.provider==="domino"&&n.kind==="point-ledger"||n.kind==="resource"&&n.source.provider==="domino"&&e.kind==="point-ledger"||e.kind==="text"&&(n.kind==="resource"||n.kind==="datetime"||n.kind==="point-ledger")}var ee={key:a};function xd(e){if("id"in e)throw new Error("Authoring definitions use key, not id");return a.parse(e.key)}var J=o().int().safe().nonnegative(),Ut=r({from:J,until:J}).strict().refine(e=>e.until>e.from,{message:"Window end must follow its start",path:["until"]}),$e=r({key:a,title:t().trim().min(1).max(120),window:Ut.optional(),enrollment:z(["none","required"]).default("none")}).strict(),Io=$e.omit({key:!0,title:!0}).extend({...ee,title:t().trim().min(1).max(120).optional()}).strict().transform(e=>{let n=e;return $e.parse({...n,title:e.title??n.key})});function wd(e){return Io.parse(e)}var Oo=$e.extend({enrolledAt:J.nullable(),withdrawnAt:J.nullable().default(null),withdrawalReason:t().nullable().default(null)}),Rn=r({actionId:a,campaign:a}).strict(),Ad=Rn.extend({member:a}),qo=Rn,Id=qo.extend({member:a,reason:t().trim().min(1).max(500)}),Od=r({campaign:a,member:a,enrolledAt:J,withdrawnAt:J.nullable().default(null),withdrawalReason:t().nullable().default(null)});function ge(e,n){return n}var qd=a.or(s("")).brand();function Ro(e){return typeof e=="string"?e:e.key}var Ir=r({key:a,title:t().trim().min(1).max(120)}).strict(),Po=Ir.omit({key:!0,title:!0}).extend({...ee,title:t().trim().min(1).max(120).optional()}).strict().transform(e=>Ir.parse({...e,title:e.title??e.key}));function Rd(e){return ge("group",Po.parse(e))}function Co(e){return a.parse(e.key)}var Pn=t().trim().min(1).max(120),Cn=t().trim().min(1).max(1e3),jt=o().int().nonnegative().max(864e13),Pd=r({actionId:a,key:a,title:Pn}).strict(),Cd=r({title:Pn}).strict(),$d=r({actionId:a,member:a,reason:Cn}).strict(),Td=r({actionId:a,reason:Cn}).strict(),Ed=r({reason:en.optional()}).strict(),Md=p({cursor:w.optional(),limit:o().int().min(1).max(100).optional()}),$o=r({key:a,title:t(),members:o().int().nonnegative(),createdAt:jt,archivedAt:jt.nullable()}),Ud=r({items:l($o),nextCursor:w.nullable()}),To=r({member:a,addedAt:jt.nullable()}),Dd=r({items:l(To),nextCursor:w.nullable()}),$n=o().int().safe().nonnegative(),Tn=$n.positive(),En=f("scope",[r({kind:s("completion"),quest:a,scope:s("ever")}).strict(),r({kind:s("completion"),quest:a,scope:s("period"),period:Y.exclude(["lifetime"])}).strict()]),Mn=r({kind:s("balance"),balance:a,minimum:Tn}).strict(),Un=r({kind:s("group"),group:a,title:t()}).strict(),Dt=f("kind",[En,Mn,Un]),fe=g([r({kind:s("completion"),quest:a,title:t(),scope:s("ever")}),r({kind:s("completion"),quest:a,title:t(),scope:s("period"),period:Y.exclude(["lifetime"]),resetsAt:o().int().safe()}),r({kind:s("balance"),balance:a,title:t(),minimum:Tn,current:$n}),r({kind:s("group"),group:a,title:t()})]);function _d(e,n={}){let i=e.key;return En.parse({kind:"completion",quest:i,scope:n.scope??"ever",..."period"in n?{period:n.period}:{}})}function Zd(e,n){return Mn.parse({kind:"balance",balance:Ro(e),minimum:n})}function Ld(e){return Un.parse({kind:"group",group:Co(e),title:e.title})}var ue=2147483647,ve=r({kind:s("points").default("points"),balance:a,amount:o().int().min(0).max(ue)}).strict(),_t=r({badge:a.optional(),group:a.optional(),id:a,title:t().min(1).max(120),tiers:l(r({id:a,title:t().min(1).max(120)}).strict()).min(1).max(20).refine(e=>new Set(e.map(n=>n.id)).size===e.length,"Tier IDs must be unique"),inventory:r({kind:s("untracked")}).strict(),fulfillment:f("kind",[r({kind:s("staff-handover")}).strict(),r({kind:s("automatic")}).strict()])}).strict().refine(e=>e.badge===void 0&&e.group===void 0||e.fulfillment.kind==="automatic"&&e.tiers.length===1&&e.tiers[0].id==="awarded","Badge and group rewards require the fixed automatic achievement envelope").refine(e=>e.badge===void 0||e.group===void 0,"A reward is either a badge or a group membership"),Nd=r({id:a,key:a.nullable()}),B=r({kind:s("tier"),reward:_t,tier:a}).strict().refine(e=>e.reward.tiers.some(n=>n.id===e.tier),"Unknown reward tier"),Eo=B.transform((e,n)=>{let i=e.reward.badge;return!i||e.reward.fulfillment.kind!=="automatic"||e.reward.tiers.length!==1||e.tier!=="awarded"?(n.addIssue({code:"custom",message:"Invalid badge reward"}),K):{...e,reward:{...e.reward,badge:i}}});function Bd(e,n){return Eo.parse({kind:"tier",tier:"awarded",reward:{id:e,badge:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var Mo=B.transform((e,n)=>{let i=e.reward.group;return!i||e.reward.fulfillment.kind!=="automatic"||e.reward.tiers.length!==1||e.tier!=="awarded"?(n.addIssue({code:"custom",message:"Invalid group reward"}),K):{...e,reward:{...e.reward,group:i}}});function Qd(e,n){return Mo.parse({kind:"tier",tier:"awarded",reward:{id:e,group:e,title:n,tiers:[{id:"awarded",title:"Awarded"}],inventory:{kind:"untracked"},fulfillment:{kind:"automatic"}}})}var Uo=Ya,St=g([ve,B,Uo]),Do=t(),_o=r({type:Do,data:y(t(),M())});function Dn(e){return e.kind==="tier"&&e.reward.badge?"badge:"+e.reward.badge:e.kind==="tier"&&e.reward.group?"group:"+e.reward.group:e.kind==="integration"?`integration:${e.provider}:${e.action}:${e.roleId}`:e.kind==="points"?"points:"+e.balance:"tier:"+e.reward.id}var _n=g([r({kind:s("manual"),input:s("text"),constraints:fo,actor:z(["member","staff"]).optional()}).strict(),r({kind:s("manual"),input:s("url"),constraints:ho,actor:z(["member","staff"]).optional()}).strict(),r({kind:s("manual"),input:z(["photo","quiz","none"]),actor:z(["member","staff"]).optional()}).strict(),r({kind:s("automatic"),tracker:Gi.optional()}).strict()]),Zo=g(_n.options.map(e=>e.strip())),Zn=r({kind:z(["pass","fail","unclear"]),reason:t().min(1).max(2e3)}).strict(),Kd=r({text:t().min(1).max(16e3).refine(e=>e.trim().length>0,"Text must not be blank"),criteria:t().trim().min(1).max(2e3)}).strict(),Vd=Zn,Fd={minRetryAfterMs:1e3,maxRetryAfterMs:36e5,retryAfterMs:6e4,horizonMs:864e5,maxDefers:100},Hd={minMs:1e3,maxMs:6048e5},Or=o().int().min(I.retryCooldown.minMs).max(I.retryCooldown.maxMs),Zt=r({current:o().finite().nonnegative(),target:o().finite().positive(),reason:t().min(1).max(2e3)}).refine(e=>e.current<=e.target,{message:"Progress current must not exceed target"}),Wd=f("kind",[p({kind:s("defer"),reason:t().min(1).max(2e3),retryAfterMs:o().int().min(I.defer.minRetryAfterMs).max(I.defer.maxRetryAfterMs).optional(),until:o().int().safe().nonnegative().optional()}),Zt.safeExtend({kind:s("progress")}).strict(),r({kind:s("accept"),rewards:l(St).max(10),completionKey:yt.optional()}).strict(),r({kind:s("reject"),reason:t().min(1).max(2e3),code:ro.optional(),requestedReview:s(!0).optional()}).strict(),r({kind:s("review"),reason:t().min(1).max(2e3),rewards:l(St).max(10).optional(),completionKey:yt.optional()}).strict()]),Lo=z(["workers-ai"]),No=z(["fixture-pass","fixture-fail","fixture-unclear","fixture-error","workers-ai"]),Lt=l(St).max(10).refine(e=>new Set(e.map(Dn)).size===e.length,"Use one entry per balance or shared reward"),me=t().max(2e3).refine(e=>{if(/^\/(?!\/)[^\\\s]*$/.test(e))return!0;try{return new URL(e).protocol==="https:"}catch{return!1}},"Use an HTTPS URL or a same-site path beginning with /"),Bo=f("kind",[r({kind:s("link"),url:me.refine(e=>e.startsWith("https://"),"Use an HTTPS URL"),label:t().trim().min(1).max(120)}).strict()]),Qo=r({title:t().trim().min(1).max(120),description:t().max(4e3).optional(),action:Bo.optional()}).strict(),Ko=f("kind",[r({kind:s("account"),provider:wt}).strict(),r({kind:s("wallet"),chain:De.optional()}).strict()]),Te=r({steps:l(Qo).max(30).optional(),image:me.optional(),imageAlt:t().max(500).optional(),requirements:l(Ko).max(10).optional()}).strict(),Ln=Te.extend({quiz:ko.optional(),instructions:t().max(4e3).optional(),video:r({url:me,poster:me.optional(),captions:r({url:me,language:t().min(2).max(20),label:t().min(1).max(80)}).strict().optional()}).strict().optional()}).strict(),Vo=r({visible:u()}).strict(),Fo=2,Ho=s(Fo),Nn=r({quest:a,evaluatorProtocol:Ho,title:t().min(1).max(120),presentation:Ln.default({}),integrations:l(so).max(10).default([]),integrationModules:l(co).max(10).optional(),fields:So,values:G,rewards:Lt,announcements:l(go).max(3).optional(),humanReview:u(),trigger:_n,performance:$i.optional(),requires:l(Dt).max(30).default([]),campaign:$e.optional(),availability:Ut.optional(),completion:xe(Zi,Tt),visibility:z(["visible","hidden"]).default("visible"),profile:Vo.default({visible:!1}),budgets:l(yn).max(20).default([]),authorBudgets:l(oo).max(20).optional(),retryCooldownMs:Or.optional(),completionCooldownMs:Or.optional()}).strict(),Wo=r({code:t().min(1).max(1e6)}).strict(),Go=Wo.extend({runtime:$t.optional(),settings:G,provider:Lo,expectedRelease:a.nullable().optional(),settingRenames:y(t(),t()).optional()}).strict(),Gd=r({releases:l(Go).min(1).max(I.quests)}).strict(),Jd=r({quest:a,expectedRelease:a,set:G,reset:l(t()),presentation:Te.nullable().optional(),solanaIdls:y(t(),Vr.nullable()).optional()}).strict(),Jo=Nn.extend({completion:Tt}),Xo=k(Jo.extend({rewardEntries:l(_o).optional(),key:a.optional(),code:t(),runtime:$t.optional(),provider:No,id:a,createdAt:o(),origin:r({typeVersion:a}).strict().optional(),lifecycle:z(["active","paused","archived"]).default("active"),configuration:r({defaults:G,overrides:G,preserved:l(t()),presentation:Te.optional(),presentationDefaults:Te.optional()}).strict().optional(),solanaIdls:y(t(),Ja).optional(),withheldSettings:l(t()).optional()})),Xd=r({code:t(),definition:Nn}),Yo=y(a,a).refine(e=>Object.keys(e).length>0&&Object.keys(e).length<=50,"Provide between 1 and 50 answers").transform(e=>Object.fromEntries(Object.entries(e).sort(([n],[i])=>n.localeCompare(i)))),es=r({kind:s("quiz"),release:a.optional(),answers:Yo}).strict(),Le=g([es,xn,wn]),Yd=r({actionId:a,quest:a,member:a,evidence:a.optional(),input:Le.optional(),release:a.optional(),faultAfterReview:u().optional()}).strict(),em={Queued:"queued",Evaluating:"evaluating",Deferred:"deferred",Accepted:"accepted",Progressed:"progressed",Rejected:"rejected",NeedsReview:"needs-review",Failed:"failed"},ts=t(),tm={Relay:"relay",Evaluator:"evaluator"},rs=t(),Ne=r({id:a,release:a,quest:a,member:a,evidence:a.nullable(),input:Le.optional(),status:ts,reason:t().nullable(),retries:o(),generation:o(),completion:t().nullable(),reviewRewards:Lt.nullable().default(null),evaluationRun:o().int().nonnegative().default(0),deferCount:o().int().nonnegative().default(0),deferUntil:o().int().safe().nullable().default(null),nextEvaluationAt:o().int().safe().nullable().default(null),code:t().nullable().default(null),codeSource:rs.nullable().optional(),progress:Zt.nullable().default(null),requestedReview:u().default(!1),createdAt:o()}),rm={Open:"open",Submitted:"submitted",Discarded:"discarded",Expired:"expired"},ns=t(),as=k(r({id:a,quest:a,member:a,release:a.nullable(),input:Le.nullable(),evidence:a.nullable(),reviewRequired:u(),status:ns,attempt:a.nullable(),createdAt:o(),updatedAt:o(),expiresAt:o()})),nm=r({release:a.nullable().optional(),input:Le.nullable().optional(),evidence:a.nullable().optional()}).strict(),am=k(r({submission:as,attempt:Ne,replayed:u()})),is=r({id:o(),attempt:t().nullable(),kind:t(),detail:t(),actor:t().nullable().default(null),at:o()}),os=r({item:a,revision:o().int().nonnegative()}).strict(),ze=r({item:a,label:t().min(1).max(80)}).strict(),ss=f("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),tiers:l(r({tier:a,variants:l(ze).min(1).max(100)}).strict()).min(1).max(100)}).strict()]),im=r({reward:_t,revision:o().int().nonnegative(),policy:ss}),om=f("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),revision:o().int().nonnegative(),variants:l(ze.extend({available:o().int().nonnegative()}))}).strict()]),sm=r({reward:a,revision:o().int().nonnegative(),actionId:a,policy:f("kind",[r({kind:s("untracked")}).strict(),r({kind:s("at-pickup"),tiers:l(r({tier:a,variants:l(ze.extend({item:a.optional()})).min(1).max(100)}).strict()).min(1).max(100)}).strict()])}).strict(),Bn=r({completion:a,reason:t(),flaggedAt:o(),remainingTier:a.nullable()}),Re={id:a,member:a,reward:_t,earnedTier:a,tier:a,revision:o().int().positive()},cm=f("status",[r({...Re,status:s("available")}).strict(),r({...Re,status:s("handing-over"),handover:a,startedAt:o(),allocation:ze.optional()}).strict(),r({...Re,status:s("collected"),handover:a,startedAt:o(),allocation:ze.optional(),collectedAt:o(),recovery:Bn.optional()}).strict(),r({...Re,status:s("void"),voidedAt:o()}).strict()]),cs=r({id:a,title:t(),tiers:l(r({id:a,title:t()}).loose()),inventory:r({kind:t()}).loose(),fulfillment:r({kind:t()}).loose()}).loose(),ce={id:a,member:a,reward:cs,earnedTier:a,tier:a,revision:o().int()},qr=r({item:a,label:t()}).loose(),Qn=g([f("status",[r({...ce,status:s("available")}).loose(),r({...ce,status:s("handing-over"),handover:a,startedAt:o(),allocation:qr.optional()}).loose(),r({...ce,status:s("collected"),handover:a,startedAt:o(),allocation:qr.optional(),collectedAt:o(),recovery:Bn.optional()}).loose(),r({...ce,status:s("void"),voidedAt:o()}).loose()]),r({...ce,status:t()}).loose().transform(({status:e,...n})=>({...n,status:"unsupported",reportedStatus:e}))]),lm=r({actionId:a,revision:o().int().positive(),selection:os.optional()}).strict(),dm=r({actionId:a,handover:a}).strict(),mm=r({actionId:a,revision:o().int().positive(),reason:t().trim().min(1).max(500)}).strict(),um={Quest:"quest",Leaderboard:"leaderboard"},ls=t().min(1).max(64),ds=r({kind:ls,id:a}),ms=r({key:t().default("once"),id:a,quest:a,member:a,source:ds.optional()}),us=f("kind",[r({kind:s("available"),input:z(["photo","quiz","none","text","url"])}).strict(),r({kind:s("completed")}).strict(),r({kind:s("locked"),missing:l(fe).min(1)}).strict(),r({kind:s("blocked"),reason:z(["budget-exhausted","connection-required","wallet-required","paused","outside-window","enrollment-required"]),window:z(["tracker","quest"]).optional(),resetsAt:o().int().safe().optional()}).strict(),r({kind:s("staff-required")}).strict(),r({kind:s("automatic")}).strict(),r({kind:s("checking"),attempt:a}).strict(),r({kind:s("needs-review"),attempt:a}).strict(),r({kind:s("retryable"),attempt:a}).strict()]),zs=g(us.options.map(e=>e.strip())),bs=r({id:a,scope:z(["member","project"]),period:z(["day","week","month","lifetime"]),remaining:o().int().safe().nonnegative(),resetsAt:o().int().safe().nullable()}),zm=k(r({member:a,quests:l(r({quest:a,key:a.optional(),release:a.optional(),title:t(),presentation:Ln.default({}),connections:l(wt).default([]),trigger:Zo,availability:zs,completed:u(),completion:Tt.default({kind:"once"}),streak:Bi.nullable().optional(),counter:Ui.nullable().optional(),progress:Zt.nullable().default(null),completionCount:o().int().nonnegative().default(0),visibility:z(["visible","hidden"]).default("visible"),missing:l(fe),campaign:Oo.nullable().default(null),window:Ut.nullable().default(null),budgets:l(bs).default([]),retryAt:o().int().safe().optional(),nextAvailableAt:o().int().safe().optional(),attempt:Ne.nullable()})),entitlements:l(Qn)})),bm=k(r({releases:l(Xo),completions:l(ms),entitlements:l(Qn),attempts:l(Ne),balances:l(r({member:t(),balance:t(),earned:o(),held:o(),available:o()})),events:l(is)})),pm=r({id:a,member:a,type:z(["image/jpeg","image/png"]),size:o()}),gm=r({error:t(),code:t().optional(),window:z(["tracker","quest"]).optional(),missing:l(fe).optional(),retryAt:o().int().safe().optional()}),fm=r({actionId:a,generation:o().int().nonnegative(),decision:z(["accept","reject"]),reason:t().trim().min(1).max(2e3)}).strict(),vm=r({actionId:a,reason:t().trim().min(1).max(2e3)}).strict(),hm=r({actionId:a,reason:t().trim().min(1).max(2e3)}).strict(),ym=r({actionId:a,quest:a,decidedBefore:o().int().nonnegative(),reason:t().trim().min(1).max(2e3)}).strict(),ps=g([r({days:o().int().min(1).max(3650)}).strict(),s("keep")]),km=r({actionId:a,evidenceRetention:ps}).strict(),jm=r({item:a,quantity:o().int().min(0).max(1e4)}).strict(),Sm=r({actionId:a,member:a,item:a,balance:a,price:o().int().positive().max(1e4)}).strict(),Kn={limit:o().int().min(1).max(100).default(25),cursor:t().min(1).max(4096).optional()},xm=r({...Kn,member:a.optional(),quest:a.optional()}).strict(),wm=r({...Kn,prefix:a.optional()}).strict(),gs=r({attempt:Ne,title:t(),checks:l(r({criteria:t(),result:Zn}))}),Am=r({items:l(gs).max(100),nextCursor:t().nullable()}),Im=r({items:l(r({member:a})).max(100),nextCursor:t().nullable()}),Om=r({actionId:a,name:t().trim().min(1).max(80)}).strict(),qm=r({id:a,name:t()}),Rm=p({contentAttempt:a,observation:a,observedAt:o().int().safe().nonnegative(),metrics:N,rewards:Lt}),Pm=Ci.extend({content:t().min(1).max(256)}),Cm=p({current:p({state:z(["content-pending","content-unqualified","waiting","pending","qualified","unqualified","needs-review","failed","superseded"]),reason:t().nullable(),contentAttempt:a,attempt:a.nullable(),reward:gn.shape.reward}),items:l(p({attempt:a,contentAttempt:a,observation:a,observedAt:o(),metrics:N,state:z(["pending","qualified","unqualified","needs-review","failed","superseded"]),reason:t().nullable()})),nextCursor:w.nullable()}),Nt=r({name:t().trim().min(1).max(120),description:t().trim().max(1e3).default("")}).strict(),$m=Nt.extend({actionId:a,key:a.optional()}).strict(),fs=Nt.extend({id:a}),Tm=fs.extend({archivedAt:o().int().nonnegative().nullable()}),vs=Nt.extend({key:a}).strict(),Em=g([vs,r({code:t().min(1).max(2e6)}).strict()]),hs=r({id:a,key:a.nullable(),name:t()}),Ee=o().int().safe(),ys=r({ledger:hs,balance:Ee,available:Ee}),Mm=r({items:l(ys)}),Um={Award:"award",Spend:"spend",Adjust:"adjust",Reverse:"reverse"},ks=t().min(1).max(64),Vn=r({id:a,amount:Ee,kind:ks,at:Ee.nonnegative(),quest:a.nullable(),reverses:a.nullable(),imported:u().optional()}),Dm=p({ledger:a,cursor:w.optional()}),_m=r({items:l(Vn),nextCursor:w.nullable()}),_=o().int().nonnegative().safe(),Fn=z(["private","participants","public"]),Me=z(["x","discord","google"]),Rr=z(["x","discord"]),js=l(Rr).max(Rr.options.length).refine(e=>new Set(e).size===e.length,"List each provider once"),ct=t().min(1).max(100),Ss=f("source",[r({source:s("upload"),url:t().url(),seed:ct}),r({source:s("account"),provider:Me,url:t().url(),seed:ct}),r({source:s("generated"),seed:ct})]),Hn=r({id:a,name:t(),avatar:Ss}),xs=/[\p{Cc}؜᠎​-‏‪-‮⁠-⁤⁦-⁩]/u,ws=t().max(200).transform(e=>e.normalize("NFC").replace(/\s+/g," ").trim()).pipe(t().min(1,"Enter a name").max(40,"Use at most 40 characters").refine(e=>!xs.test(e),"Use visible characters only")),Zm=r({displayName:ws.nullable().optional(),avatar:f("source",[r({source:s("account"),provider:Me}).strict(),r({source:s("generated")}).strict()]).nullable().optional(),hidden:u().optional()}).strict().refine(e=>Object.values(e).some(n=>n!==void 0),"Change at least one field"),As=Hn.extend({displayName:t().nullable(),avatarChoice:z(["default","upload","account","generated"]),avatarProvider:Me.nullable(),hidden:u(),locked:u(),visibility:Fn,options:l(r({provider:Me,name:t().nullable(),givenName:t().nullable().default(null),imageUrl:t().url().nullable()}))}),Wn=t().min(1).max(512),Lm=r({limit:q.number().int().min(1).max(100).default(20),cursor:Wn.optional()}).strict(),Is=r({quest:a,key:a.optional(),title:t(),completions:_.positive(),lastCompletedAt:_.nullable()}),Nm=r({items:l(Is),nextCursor:Wn.nullable()}),Bm=r({program:a,key:a.optional(),title:t(),invited:_,qualified:_,milestones:l(r({id:a,count:_,reached:u()}))}),Os=r({visibility:Fn,defaults:js,revision:_,actor:t().nullable(),updatedAt:_.nullable()}),Qm=Os.omit({revision:!0,actor:!0,updatedAt:!0}).extend({actionId:a,expectedRevision:_,reason:t().trim().min(1).max(500)}).strict(),Km=r({actionId:a,resetName:u().default(!1),removeAvatar:u().default(!1),lock:u().optional(),reason:t().trim().min(1).max(1e3)}).strict().refine(e=>e.resetName||e.removeAvatar||e.lock!==void 0,"Choose an action"),Vm=As.omit({options:!0}).extend({member:a,lockedAt:_.nullable(),lockedBy:t().nullable(),lockedReason:t().nullable(),updatedAt:_}),Fm=5*1024*1024,Hm=["image/jpeg","image/png","image/webp"],j=o().int().safe(),O=j.nonnegative().max(864e13),Gn=f("kind",[r({kind:s("all-time")}).strict(),r({kind:s("fixed"),start:O,end:O}).strict().refine(e=>e.end>e.start,"Window end must follow its start"),r({kind:s("rolling"),days:j.min(1).max(3660)}).strict(),r({kind:s("calendar"),period:Y.exclude(["lifetime"])})]),qs={window:Gn.default({kind:"all-time"}),quests:l(a).min(1).max(100).optional()},Jn=f("kind",[r({kind:s("balance")}).strict(),r({kind:s("earned"),...qs}).strict(),r({kind:s("net"),window:Gn.default({kind:"all-time"})}).strict()]).default({kind:"balance"}),Rs=g([ve,B]),Xn=r({ranks:nr([j.positive(),j.positive()]).refine(([e,n])=>n>=e,{message:"Prize rank range must end at or after it starts"}),rewards:l(Rs).min(1).max(20)}).strict(),Ue=t().regex(/^(0|[1-9]\d{0,77})$/,'Use a whole number of base units, such as "1000000"'),Ps=g([s("points"),r({code:t().trim().min(1).max(32),decimals:j.min(0).max(36)}).strict()]),Yn={amount:Ue.refine(e=>e!=="0",{message:"A pool must hold a positive amount"}),unit:Ps,ledger:a.optional(),minScore:j.optional()},Cs=(e,n)=>{e.unit==="points"?(e.ledger||n.addIssue({code:"custom",message:"A points pool names the point ledger it pays into",path:["ledger"]}),/^\d+$/.test(e.amount)&&BigInt(e.amount)>ue&&n.addIssue({code:"custom",message:`A points pool holds at most ${ue} points`,path:["amount"]})):e.ledger!==void 0&&n.addIssue({code:"custom",message:"Only a points pool pays into a point ledger",path:["ledger"]})},$s=r(Yn).strict().superRefine(Cs),Ts=r({at:s("window-end"),ties:z(["shared","earliest"]),prizes:l(Xn).max(50),pool:$s.optional()}).strict().superRefine((e,n)=>{!e.prizes.length&&!e.pool&&n.addIssue({code:"custom",message:"A settlement awards rank prizes, a pool, or both",path:["prizes"]});for(let[i,c]of e.prizes.entries()){let d=c.rewards.map(Dn);new Set(d).size!==d.length&&n.addIssue({code:"custom",message:"A prize may grant each point ledger or tiered reward only once",path:["prizes",i,"rewards"]})}for(let i=1;i<e.prizes.length;i++){let c=e.prizes[i-1];e.prizes[i].ranks[0]<=c.ranks[1]&&n.addIssue({code:"custom",message:"Prize rank ranges must be ordered and must not overlap",path:["prizes",i,"ranks"]})}}),ea=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),balance:a,score:Jn,access:z(["participants","public"]).default("participants"),group:a.optional(),includeUnscored:u().optional(),ties:z(["shared","earliest"]).optional(),settle:Ts.optional()}).strict(),ta=(e,n)=>{e.settle&&(e.score.kind==="balance"||!["fixed","calendar"].includes(e.score.window.kind))&&n.addIssue({code:"custom",message:"Leaderboard prizes require an earned or net score with a fixed or calendar window",path:["settle"]})},Es=ea.superRefine(ta),Ms=k(Es),Us=ea.omit({id:!0}).extend({...ee,score:xe(Li,Jn),group:a.optional()}).strict().superRefine(ta),Wm=g([Us,r({code:t().min(1).max(2e6)}).strict()]),Ds=r({archivedAt:o().int().nonnegative().nullable().optional(),version:a,definition:Ms,publishedAt:O,actor:t().nullable()}),Gm=r({limit:q.number().int().min(1).max(100).default(25),cursor:t().max(4096).optional()}).strict(),lt=r({participant:a,member:a.optional(),name:t(),score:j,rank:j.positive(),profile:Hn.nullable()}),Pr=r({leaderboard:a,title:t(),version:a,calculation:z(["balance","earned","net"]),period:r({start:O.nullable(),end:O.nullable()}),calculatedAt:O,lastEntryAt:O.nullable(),total:j.nonnegative(),items:l(lt),me:lt.nullable(),nearby:l(lt),nextCursor:t().nullable()}),Jm=r({leaderboard:a,key:a.optional(),title:t(),profile:a,rank:j.positive().nullable(),score:j.nullable(),total:j.nonnegative()}),Xm=p({board:a,cursor:w.optional()}),Ym=r({leaderboard:a,period:r({start:O.nullable(),end:O.nullable()}),items:l(Vn),nextCursor:w.nullable()}),eu=r({published:Ds,before:Pr.nullable(),after:Pr}),ra={actionId:a,member:a,balance:a,reason:t().trim().min(1).max(1e3)},Pe={...ra,effectiveAt:O.optional()},tu=f("kind",[r({...Pe,kind:s("award"),referralEligible:u().optional(),amount:j.positive()}).strict(),r({...Pe,kind:s("spend"),amount:j.positive()}).strict(),r({...Pe,kind:s("adjust"),amount:j.refine(e=>e!==0)}).strict(),r({...Pe,kind:s("set"),total:j.nonnegative(),expectedTotal:j.nonnegative(),classification:z(["earned","spend"])}).strict(),r({...ra,kind:s("reverse"),entry:a,amount:j.positive()}).strict()]),na=r({id:a,completion:t().nullable(),member:a,balance:a,amount:j,kind:z(["award","spend","adjust","reverse"]),effectiveAt:O,receivedAt:O,quest:a.nullable(),original:a.nullable(),reason:t(),actor:t().nullable(),import:a.nullable().optional()}),ru=r({items:l(na),nextCursor:w.nullable(),next:o().nullable()}),nu=r({entry:na,total:j.nonnegative()}),au=r({member:a,balance:a,total:j.nonnegative(),held:j.nonnegative()}),iu=r({actionId:a,member:a,excluded:u(),reason:t().trim().min(1).max(1e3)}).strict(),ou=r({leaderboard:a,group:a,generated:u(),boundAt:O.nullable()}),su=r({actionId:a,group:a,reason:t().trim().min(1).max(1e3)}).strict(),cu=r({actionId:a,member:a,included:u(),reason:t().trim().min(1).max(1e3)}).strict(),_s=z(["pending","approved"]),Zs=r({id:a,leaderboard:a,version:a,title:t(),period:r({start:O,end:O}),ties:z(["shared","earliest"]),status:_s,total:j.nonnegative(),winners:j.nonnegative(),createdAt:O,approvedAt:O.nullable(),approvedBy:t().nullable(),approvalReason:t().nullable()}),Ls=r({member:a,score:j,rank:j.positive(),position:j.positive(),scoredAt:O,prizes:l(j.nonnegative()),completion:a.nullable(),revokedAt:O.nullable(),share:Ue.optional()}),Ns=r({...Yn,allocated:Ue,unallocated:Ue}),Bs=r({content:t(),member:a,observedAt:O.nullable()}),lu=Zs.extend({prizes:l(Xn),excluded:l(a),unmeasured:l(Bs).optional(),pool:Ns.nullable().optional(),rows:l(Ls)}),du=r({actionId:a,reason:t().trim().min(1).max(500)}).strict();var oa=["7d","30d","90d","all"];var Qs=["number","line","bar","table"],C=["number","line","bar","table"],aa=["number","line","table"],Ks=["number","bar","table"],he=["quest","group","tracker"],ia={"members.signUps":{definition:"Members who joined the project, by when they joined.",kind:"count",breakdowns:[],filters:["group"],charts:C,ledger:!1},"members.active":{definition:"Distinct members with an attempt, by when it was created; the total counts each member once.",kind:"distinct",breakdowns:[],filters:["group"],charts:C,ledger:!1},"quests.attempts":{definition:"Attempts, by when they were created.",kind:"count",breakdowns:["quest"],filters:he,charts:C,ledger:!1},"quests.completions":{definition:"Quest completions never revoked, by when they completed.",kind:"count",breakdowns:["quest"],filters:he,charts:C,ledger:!1},"quests.needsReview":{definition:"Attempts the evaluator sent to staff review, by when they were created, whatever staff decided later.",kind:"count",breakdowns:["quest"],filters:he,charts:C,ledger:!1},"quests.rejections":{definition:"Rejected attempts, by when they were decided.",kind:"count",breakdowns:["quest","source","reason"],filters:he,charts:C,ledger:!1},"quests.rejectionRate":{definition:"Rejected attempts divided by decided attempts (accepted, progressed or rejected), by when they were decided; empty below 10 decided.",kind:"rate",breakdowns:["quest"],filters:he,charts:aa,ledger:!1,minimumDenominator:10},"points.awarded":{definition:"Points in the ledger's award entries, by effective date.",kind:"count",breakdowns:[],filters:["group"],charts:C,ledger:!0},"points.spent":{definition:"Points in the ledger's spend entries, as a positive number, by effective date.",kind:"count",breakdowns:[],filters:["group"],charts:C,ledger:!0},"points.net":{definition:"Every entry's signed amount in the ledger, by effective date; a reversal takes its original entry's date.",kind:"count",breakdowns:[],filters:["group"],charts:C,ledger:!0},"points.membersEarning":{definition:"Distinct members awarded more than 0 points in the ledger, by effective date; the total counts each member once.",kind:"distinct",breakdowns:[],filters:["group"],charts:C,ledger:!0},"offers.redemptions":{definition:"Fulfilled offer redemptions, by when they were redeemed.",kind:"count",breakdowns:["offer"],filters:["offer","group"],charts:C,ledger:!1},"referrals.accepted":{definition:"Accepted referrals, by when they were accepted. A referral belongs to no program, so it takes no program breakdown or filter.",kind:"count",breakdowns:[],filters:[],charts:C,ledger:!1},"referrals.qualified":{definition:"Active referral qualifications, one per program and friend, by when they first qualified; suspended referrals count.",kind:"count",breakdowns:["program"],filters:["program"],charts:C,ledger:!1},"referrals.qualificationRate":{definition:"Of the referrals accepted in a bucket, the share whose friend has an active qualification now (in the program, for a program row or filter), by acceptance; empty below 10 accepted.",kind:"rate",breakdowns:["program"],filters:["program"],charts:aa,ledger:!1,minimumDenominator:10},"groups.joins":{definition:"Members added to a group, by when they were added. A change that left membership as it was, and a membership recorded without a date, don't count. The group filter keeps changes in those groups.",kind:"count",breakdowns:["group"],filters:["group"],charts:C,ledger:!1},"groups.leaves":{definition:"Members removed from a group, by when they were removed. A change that left membership as it was, and a membership recorded without a date, don't count. The group filter keeps changes in those groups.",kind:"count",breakdowns:["group"],filters:["group"],charts:C,ledger:!1},"trackers.records":{definition:"Tracker trigger outcomes, one per quest and record observation, by when the record was observed, counted by their current outcome (admitted or skipped). A retry overwrites an outcome, so a bucket shows today's outcome of its records, not the outcome they had then.",kind:"count",breakdowns:["outcome","tracker"],filters:["tracker"],charts:C,ledger:!1},"leaderboards.settledParticipants":{definition:"Participants in leaderboard settlements, one per member and settlement, by the settlement's cutoff. Pending and approved settlements count; a rejected settlement leaves its bucket.",kind:"count",breakdowns:["leaderboard"],filters:["leaderboard"],charts:Ks,ledger:!1}};var pu={panels:24,dashboards:20},Vs={number:1,line:2,bar:2,table:4},ye=t().trim().min(1).max(120),Qt=t().trim().min(1).max(500),Fs=g([a,l(a).min(1).max(100)]),Hs=y(t().min(1).max(100),Fs),sa={key:a,title:ye,description:Qt.optional(),metric:t().min(1).max(100),breakdown:t().min(1).max(100).optional(),filter:Hs.optional(),ledger:a.optional(),chart:z(Qs)},Ws=p({...sa,width:o().int().min(1).max(4).optional()}),Kt=p({key:a,title:ye,description:Qt.optional(),defaultRange:z(oa).optional(),position:o().int().min(0).max(1e3).optional(),sections:l(p({title:ye.optional(),panels:l(Ws).min(1).max(100)})).min(1).max(100)}),ca=p({key:a,title:ye,description:Qt.optional(),defaultRange:z(oa),position:o().int().min(0).max(1e3).optional(),sections:l(p({title:ye.optional(),panels:l(p({...sa,width:o().int().min(1).max(4)}))}))}),gu=g([Kt,r({code:t().min(1).max(2e6)}).strict()]);function fu(e){let n=Kt.parse(e);return ca.parse({key:n.key,title:n.title,...n.description===void 0?{}:{description:n.description},defaultRange:n.defaultRange??"30d",...n.position===void 0?{}:{position:n.position},sections:n.sections.map(i=>({...i.title===void 0?{}:{title:i.title},panels:i.panels.map(c=>({...c,width:c.width??Vs[c.chart]}))}))})}function vu(e){return e.sections.flatMap(n=>[...n.panels])}function hu(e){let n=e.sections.flatMap(d=>[...d.panels]),i=`dashboard "${e.key}"`;if(n.length>I.dashboardPanels)return{code:"too-many-panels",message:`The ${i} has ${n.length} panels; a dashboard holds at most ${I.dashboardPanels}.`};let c=new Set;for(let d of n){let m=`Panel "${d.key}" of ${i}`;if(c.has(d.key))return{code:"duplicate-key",panel:d.key,message:`The ${i} has two panels with the key "${d.key}".`};if(c.add(d.key),!Object.hasOwn(ia,d.metric))return{code:"unknown-metric",panel:d.key,message:`${m} names the unknown metric "${d.metric}". Run domino analytics metrics for the catalog.`};let b=ia[d.metric];if(d.breakdown!==void 0&&!b.breakdowns.includes(d.breakdown))return{code:"breakdown-not-accepted",panel:d.key,message:`${m}: ${d.metric} has no "${d.breakdown}" breakdown; it takes ${b.breakdowns.join(", ")||"none"}.`};for(let v of Object.keys(d.filter??{}))if(!b.filters.includes(v))return{code:"filter-not-accepted",panel:d.key,message:`${m}: ${d.metric} takes no "${v}" filter; it takes ${b.filters.join(", ")||"none"}.`};if(!b.charts.includes(d.chart))return{code:"chart-not-accepted",panel:d.key,message:`${m}: ${d.metric} can't be drawn as "${d.chart}"; it takes ${b.charts.join(", ")}.`};if(d.chart==="number"&&d.breakdown!==void 0)return{code:"breakdown-not-accepted",panel:d.key,message:`${m}: a number panel shows one value and takes no breakdown.`};if(d.chart==="table"&&d.breakdown===void 0)return{code:"breakdown-required",panel:d.key,message:`${m}: a table panel needs a breakdown; ${d.metric} takes ${b.breakdowns.join(", ")||"none"}.`};if(b.ledger&&d.ledger===void 0)return{code:"ledger-required",panel:d.key,message:`${m}: ${d.metric} needs a point ledger; set ledger to its key.`};if(!b.ledger&&d.ledger!==void 0)return{code:"ledger-not-accepted",panel:d.key,message:`${m}: ${d.metric} reads no point ledger; remove ledger.`}}return null}var yu=k(r({key:a,title:t(),change:z(["created","updated","unchanged"]),definition:ca})),Bt=e=>typeof e=="string"?e:e.key;function ku(e){let n=we("Dashboard",Kt,{...e,sections:e.sections.map(i=>({...i,panels:i.panels.map(c=>({...c,...c.ledger===void 0?{}:{ledger:Bt(c.ledger)},...c.filter===void 0?{}:{filter:Object.fromEntries(Object.entries(c.filter).map(([d,m])=>[d,Array.isArray(m)?m.map(Bt):Bt(m)]))}}))}))});return ge("dashboard",n)}var ju=r({title:t(),description:t(),tags:l(t()),durationSeconds:o().int().nonnegative(),publishedAt:o().int().nonnegative()}),Su=["views","likes","comments"],xu=r({title:t(),description:t(),durationSeconds:o().int().nonnegative(),width:o().int().nonnegative(),height:o().int().nonnegative(),createdAt:o().int().nonnegative(),shareUrl:t(),isAigc:u()}),wu=["views","likes","comments","shares"];var Gs=["not-linked","provider-unavailable","author-error"],Js=e=>Gs.includes(e),Iu=oe({code:t().min(1),message:t().min(1),retryable:u()}),la=Symbol.for("@domino-sdk/relay/CapabilityError"),Ou=class da extends Error{code;retryable;constructor(n,i,c={}){super(i),this.name="CapabilityError",this.code=n,this.retryable=c.retryable??n==="provider-unavailable",Object.defineProperty(this,la,{value:!0})}static[Symbol.hasInstance](n){return typeof n=="object"&&n!==null&&n[la]===!0}static from(n){return new da(n.code,n.message,{retryable:Js(n.code)&&n.retryable})}};var A=o().int().safe().nonnegative(),ua=p({scope:z(["member","project"]),period:Y,limit:A}),Ht=p({key:a,qualifiedBy:a,balance:a,metrics:l(Ze).min(1).max(10).refine(e=>new Set(e).size===e.length,"Metrics must be unique"),baseline:s("historical"),maxAgeMs:o().int().positive().max(864e5).default(36e5),budgets:l(ua).max(8).default([]).refine(e=>new Set(e.map(n=>n.scope+":"+n.period)).size===e.length,"Give each scope and period one budget")}),Cu=p({metrics:N,baseline:N}),$u=p({target:A,baseline:A}),za=p({actionId:a,code:t().min(1).max(1e6)}),ke=p({version:a,definition:Ht,publishedAt:A}),Tu=p({rule:a,content:t().min(1).max(256),member:a.optional(),cursor:w.optional()}),ba=p({id:a,day:t(),observation:a,qualification:a,earned:A,growth:A,paid:A,excluded:A,entry:a.nullable(),createdAt:A}),Eu=p({rule:ke,account:p({member:a,earned:A,accounted:A,paid:A,excluded:A,pending:A,counters:N,baseline:N,observation:a.nullable(),nextSettlementAt:A.nullable(),reason:t().nullable()}).nullable(),items:l(ba),nextCursor:w.nullable()}),Mu=p({code:t().min(1).max(1e6)}),Uu=za.extend({expectedVersion:a,previewHash:a}),Be=t().regex(/^(0|[1-9][0-9]*)$/),Xs=p({rule:a,fromVersion:a,toVersion:a,previewHash:a,definition:Ht,boundary:s("available-eligible-observation"),settlement:s("deferred"),summary:p({knownAdmissions:A,accounts:A,uninitialized:A,pendingTransitions:A,earned:Be,paid:Be,excluded:Be,pending:Be})}),Ys=ke.extend({previousVersion:a.nullable()}),Du=r({items:l(r({version:a,definition:r({...Ht.shape,budgets:l(r(ua.shape)).max(8).default([])}),publishedAt:A,previousVersion:a.nullable()})),nextCursor:w.nullable()}),_u=p({items:l(Ys),next:A.nullable()}),Zu=p({rule:a,before:q.number().int().positive().safe().optional()}),Lu=p({current:ke.nullable(),requested:ke,items:l(p({from:a,to:a,baseline:N,observedAt:A,settlement:ba})),nextCursor:w.nullable()}),ec=za.omit({actionId:!0}),Vt=ec.extend({rule:ke}),Nu=f("kind",[Vt.extend({kind:s("create")}),Vt.extend({kind:s("unchanged")}),Vt.extend({kind:s("change"),change:Xs})]),Ft=g([ve,B]),$=o().int().safe().nonnegative(),te=t().trim().min(1).max(1e3),Wt=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),enabled:u().default(!0),qualification:f("kind",[r({kind:s("signup")}).strict(),r({kind:s("quest"),quest:a}).strict(),r({kind:s("external")}).strict()]),inviterGroup:a.optional(),rewards:r({inviter:l(Ft).max(10).default([]),invitee:l(Ft).max(10).default([])}).strict().default({inviter:[],invitee:[]}),milestones:l(r({id:a,count:$.min(1),rewards:l(Ft).min(1).max(10)}).strict()).max(30).default([]),bonuses:l(r({id:a,balance:a,basisPoints:$.min(1).max(1e4),quests:l(a).min(1).max(100).optional(),external:u().default(!1),durationDays:$.min(1).max(36500).optional(),maxPoints:$.min(1).optional()}).strict()).max(20).default([])}).strict().superRefine((e,n)=>{for(let i of[e.milestones,e.bonuses])new Set(i.map(c=>c.id)).size!==i.length&&n.addIssue({code:"custom",message:"Rule IDs must be unique"})}),tc=r(Wt.shape).omit({id:!0}).extend({...ee,inviterGroup:a.optional()}).strict().superRefine((e,n)=>{for(let i of[e.milestones,e.bonuses])new Set(i.map(c=>c.id)).size!==i.length&&n.addIssue({code:"custom",message:"Rule keys must be unique"})}),Bu=g([tc,r({code:t().min(1).max(2e6)}).strict()]),Qu=r({archivedAt:o().int().nonnegative().nullable().optional(),version:a,definition:Wt,publishedAt:$,actor:t().nullable()}),Ku=r({actionId:a,code:a}).strict(),Vu=r({actionId:a,suspended:u(),reason:te}).strict(),Fu=r({actionId:a,qualified:u(),reason:te}).strict(),Hu=r({actionId:a,reason:te}).strict(),Wu=f("kind",[r({kind:s("suspend"),actionId:a,member:a,suspended:u(),reason:te}).strict(),r({kind:s("qualify"),actionId:a,member:a,program:a,qualified:u(),reason:te}).strict(),r({kind:s("resolve-reward"),actionId:a,entitlement:a,reason:te}).strict()]),rc=r({member:a,inviter:a,acceptedAt:$,suspended:u(),import:a.nullable().optional()}),pa=r({id:a,program:a,kind:z(["bonus","fixed","milestone"]),balance:a,earned:$,settled:$,outstanding:$}),Gu=r({code:a,attributed:$,programs:l(r({definition:Wt,qualified:$,milestones:l(r({id:a,count:$,reached:u()}))})),accounts:l(pa)}),Ju=r({items:l(r({id:$,program:a,balance:a,amount:o().int().safe(),at:$,reason:t()})),nextCursor:w.nullable()}),Xu=r({relationships:l(rc),qualifications:l(r({member:a,program:a,qualified:u(),qualifiedAt:$,import:a.nullable().optional()})),accounts:l(pa.extend({member:a,invitee:t()})),reviews:l(r({entitlement:a,member:a,program:a,reason:t()})),nextCursor:w.nullable().default(null),next:$.nullable()}),Qe=o().int().safe().nonnegative(),ga=ve.extend({amount:o().int().positive().max(ue)}),nc=r({perMember:o().int().positive().max(1e4)}).strict(),fa=r({id:a,key:a.optional(),title:t().trim().min(1).max(120),price:ga,reward:B,stock:Qe.max(1e6),limit:nc.default({perMember:1}),requires:l(Dt).max(30).optional(),enabled:u().default(!0)}).strict(),va=fa.omit({id:!0,title:!0,enabled:!0}).extend({...ee,title:t().trim().min(1).max(120).optional(),enabled:s(!0).optional()}).strict().transform(({enabled:e,...n})=>({...n,title:n.title??n.reward.reward.title,enabled:!0})),Yu=g([va,r({code:t().min(1).max(2e6)}).strict()]),ac=k(f("kind",[r({kind:s("available"),remaining:Qe}).strict(),r({kind:s("out-of-stock")}).strict(),r({kind:s("limit-reached")}).strict(),r({kind:s("paused")}).strict()])),ez=k(fa.extend({revision:o().int().positive(),available:Qe,redeemed:Qe,availability:ac,archivedAt:o().int().nonnegative().nullable().optional(),missing:l(fe).default([])})),tz=r({actionId:a}).strict(),ma={id:a,offer:a,member:a,reservation:a,price:ga,reward:B,entitlement:a,revision:o().int().positive(),redeemedAt:o().int().safe().nonnegative()},ic=k(f("status",[r({...ma,status:s("fulfilled")}).strict(),r({...ma,status:s("canceled"),canceledAt:o().int().safe().nonnegative(),reason:t().min(1).max(500)}).strict()])),rz=p({member:a.optional(),cursor:w.optional(),limit:q.number().int().min(1).max(100).optional()}),nz=r({items:l(ic),nextCursor:w.nullable()}),az=r({actionId:a,revision:o().int().positive(),enabled:u(),reason:t().trim().min(1).max(500)}).strict(),iz=r({actionId:a,revision:o().int().positive(),reason:t().trim().min(1).max(500)}).strict();function oz(e){return ge("offer",we("Offer",va,e))}export{we as a,a as b,Cr as c,$r as d,xt as e,dc as f,mc as g,uc as h,xa as i,zc as j,bc as k,pc as l,gc as m,Tr as n,fc as o,k as p,Ur as q,vc as r,w as s,hc as t,yc as u,kc as v,wt as w,Aa as x,jc as y,Dr as z,Sc as A,xc as B,wc as C,Ac as D,Ic as E,Oc as F,qc as G,_r as H,Zr as I,Oa as J,qa as K,Lr as L,Rc as M,Pc as N,Ra as O,Cc as P,Nr as Q,Pa as R,$c as S,Tc as T,Ec as U,Mc as V,Uc as W,Dc as X,_c as Y,Zc as Z,I as _,At as $,De as aa,It as ba,Lc as ca,Nc as da,_e as ea,Ca as fa,$a as ga,Bc as ha,Qc as ia,Kc as ja,Vc as ka,Fc as la,Hc as ma,Wc as na,mt as oa,Ta as pa,Gc as qa,Jc as ra,Xc as sa,Ot as ta,Yc as ua,el as va,tl as wa,Ua as xa,Da as ya,rl as za,La as Aa,Na as Ba,Ba as Ca,nl as Da,al as Ea,Fa,Ha as Ga,il as Ha,ol as Ia,sl as Ja,Ga as Ka,Vr as La,Ja as Ma,cl as Na,ll as Oa,dl as Pa,ml as Qa,qt as Ra,Rt as Sa,Xa as Ta,ul as Ua,zl as Va,Ya as Wa,ei as Xa,bl as Ya,pl as Za,Hr as _a,gl as $a,ui as ab,fl as bb,vl as cb,gi as db,fi as eb,vi as fb,hl as gb,rn as hb,yl as ib,hi as jb,nn as kb,Pt as lb,kl as mb,be as nb,jl as ob,pe as pb,Sl as qb,an as rb,yi as sb,ki as tb,on as ub,X as vb,sn as wb,ji as xb,Si as yb,xl as zb,wl as Ab,V as Bb,Al as Cb,xi as Db,ln as Eb,wi as Fb,Ai as Gb,dn as Hb,mn as Ib,Il as Jb,Ol as Kb,un as Lb,Ii as Mb,ql as Nb,Rl as Ob,Pl as Pb,Oi as Qb,qi as Rb,zn as Sb,Ri as Tb,Cl as Ub,$l as Vb,Tl as Wb,Pi as Xb,bn as Yb,El as Zb,Ml as _b,Ul as $b,Dl as ac,_l as bc,Zl as cc,Ll as dc,Nl as ec,Bl as fc,Ql as gc,Kl as hc,Vl as ic,Ci as jc,gn as kc,Fl as lc,Ze as mc,N as nc,$i as oc,Ti as pc,Ei as qc,Mi as rc,fn as sc,Ui as tc,Di as uc,Hl as vc,Wl as wc,Gl as xc,Jl as yc,_i as zc,vn as Ac,de as Bc,Zi as Cc,Li as Dc,Y as Ec,Xl as Fc,Yl as Gc,ed as Hc,Ni as Ic,Bi as Jc,Qi as Kc,td as Lc,qe as Mc,jr as Nc,Ki as Oc,Vi as Pc,rd as Qc,Fi as Rc,Hi as Sc,Wi as Tc,Gi as Uc,nd as Vc,ad as Wc,id as Xc,Ji as Yc,Xi as Zc,Yi as _c,od as $c,xr as ad,to as bd,sd as cd,cd as dd,ao as ed,$t as fd,io as gd,ld as hd,dd as id,Tt as jd,yt as kd,yn as ld,oo as md,md as nd,ud as od,so as pd,co as qd,lo as rd,kn as sd,zd as td,bd as ud,jn as vd,uo as wd,zo as xd,bo as yd,po as zd,go as Ad,fo as Bd,ho as Cd,xn as Dd,wn as Ed,pd as Fd,gd as Gd,fd as Hd,yo as Id,In as Jd,ko as Kd,Mt as Ld,On as Md,vd as Nd,hd as Od,qn as Pd,kt as Qd,jo as Rd,So as Sd,G as Td,xo as Ud,wo as Vd,yd as Wd,Ao as Xd,kd as Yd,jd as Zd,Sd as _d,ee as $d,xd as ae,Ut as be,$e as ce,wd as de,Oo as ee,Rn as fe,Ad as ge,qo as he,Id as ie,Od as je,ge as ke,qd as le,Ro as me,Ir as ne,Rd as oe,Co as pe,Pd as qe,Cd as re,$d as se,Td as te,Ed as ue,Md as ve,$o as we,Ud as xe,To as ye,Dd as ze,En as Ae,Mn as Be,Un as Ce,Dt as De,fe as Ee,_d as Fe,Zd as Ge,Ld as He,ve as Ie,_t as Je,Nd as Ke,B as Le,Eo as Me,Bd as Ne,Mo as Oe,Qd as Pe,Uo as Qe,St as Re,_o as Se,Dn as Te,_n as Ue,Zn as Ve,Kd as We,Vd as Xe,Fd as Ye,Hd as Ze,Or as _e,Zt as $e,Wd as af,Lo as bf,No as cf,Lt as df,me as ef,Bo as ff,Qo as gf,Ko as hf,Te as if,Ln as jf,Vo as kf,Fo as lf,Ho as mf,Nn as nf,Wo as of,Go as pf,Gd as qf,Jd as rf,Jo as sf,Xo as tf,Xd as uf,Yo as vf,es as wf,Le as xf,Yd as yf,em as zf,tm as Af,Ne as Bf,rm as Cf,as as Df,nm as Ef,am as Ff,is as Gf,os as Hf,ze as If,ss as Jf,im as Kf,om as Lf,sm as Mf,Bn as Nf,cm as Of,Qn as Pf,lm as Qf,dm as Rf,mm as Sf,um as Tf,ds as Uf,ms as Vf,us as Wf,bs as Xf,zm as Yf,bm as Zf,pm as _f,gm as $f,fm as ag,vm as bg,hm as cg,ym as dg,ps as eg,km as fg,jm as gg,Sm as hg,xm as ig,wm as jg,gs as kg,Am as lg,Im as mg,Om as ng,qm as og,Rm as pg,Pm as qg,Cm as rg,Nt as sg,$m as tg,fs as ug,Tm as vg,vs as wg,Em as xg,hs as yg,ys as zg,Mm as Ag,Um as Bg,Vn as Cg,Dm as Dg,_m as Eg,Fn as Fg,Me as Gg,Rr as Hg,js as Ig,ct as Jg,Ss as Kg,Hn as Lg,ws as Mg,Zm as Ng,As as Og,Lm as Pg,Is as Qg,Nm as Rg,Bm as Sg,Os as Tg,Qm as Ug,Km as Vg,Vm as Wg,Fm as Xg,Hm as Yg,Gn as Zg,Rs as _g,Xn as $g,Ue as ah,Ps as bh,$s as ch,Ts as dh,Es as eh,Ms as fh,Us as gh,Wm as hh,Ds as ih,Gm as jh,lt as kh,Pr as lh,Jm as mh,Xm as nh,Ym as oh,eu as ph,tu as qh,na as rh,ru as sh,nu as th,au as uh,iu as vh,ou as wh,su as xh,cu as yh,_s as zh,Zs as Ah,Ls as Bh,Ns as Ch,Bs as Dh,lu as Eh,du as Fh,pu as Gh,Vs as Hh,Ws as Ih,Kt as Jh,ca as Kh,gu as Lh,fu as Mh,vu as Nh,hu as Oh,yu as Ph,ku as Qh,ju as Rh,Su as Sh,xu as Th,wu as Uh,Gs as Vh,Iu as Wh,Ou as Xh,ua as Yh,Ht as Zh,Cu as _h,$u as $h,za as ai,ke as bi,Tu as ci,ba as di,Eu as ei,Mu as fi,Uu as gi,Xs as hi,Du as ii,_u as ji,Zu as ki,Lu as li,ec as mi,Nu as ni,Wt as oi,tc as pi,Bu as qi,Qu as ri,Ku as si,Vu as ti,Fu as ui,Hu as vi,Wu as wi,rc as xi,pa as yi,Gu as zi,Ju as Ai,Xu as Bi,ga as Ci,nc as Di,fa as Ei,va as Fi,Yu as Gi,ac as Hi,ez as Ii,tz as Ji,ic as Ki,rz as Li,nz as Mi,az as Ni,iz as Oi,oz as Pi};