@fangorn-network/westmarch 0.0.20-dev → 2026.10.2-2.0-dev

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 (327) hide show
  1. package/README.md +33 -3
  2. package/docs/app-to-agent.md +117 -60
  3. package/package.json +10 -5
  4. package/plugin/scripts/fx.mjs +7 -9
  5. package/site/dist/assets/{AccountNotFoundScreen-C4njXc69-BOfmiSH1.js → AccountNotFoundScreen-C4njXc69-DyVH4CEz.js} +1 -1
  6. package/site/dist/assets/{AddFundsSelectionScreen-RAoCn7ej-D_EsIeJu.js → AddFundsSelectionScreen-RAoCn7ej-Dz1--SS9.js} +1 -1
  7. package/site/dist/assets/{Address-H8kD1d9O-C85sJ79B.js → Address-H8kD1d9O-BdFZmRwI.js} +1 -1
  8. package/site/dist/assets/{AffirmativeConsentScreen-BG0MJxku-DdEPFOww.js → AffirmativeConsentScreen-BG0MJxku-CxaCAisL.js} +1 -1
  9. package/site/dist/assets/{AllowlistRejectionScreen-Cae6e1Od-DhVy9iGN.js → AllowlistRejectionScreen-Cae6e1Od-JGk7vndN.js} +1 -1
  10. package/site/dist/assets/{ApiController-CYdiyu9B.js → ApiController-CTLbMCcH.js} +4 -4
  11. package/site/dist/assets/{ArrowsRightLeftIcon-cp60yobq.js → ArrowsRightLeftIcon-B8g9adpz.js} +1 -1
  12. package/site/dist/assets/{AuthenticateWithWalletScreen-CU6hIcFT-8rbYiYYE.js → AuthenticateWithWalletScreen-CU6hIcFT-CXD9_OP8.js} +1 -1
  13. package/site/dist/assets/{AwaitingEvmToSolBridgingScreen-D0e_sZMS-2pkNfCno.js → AwaitingEvmToSolBridgingScreen-D0e_sZMS-BtJCglvU.js} +1 -1
  14. package/site/dist/assets/{AwaitingExternalEthereumTransferScreen-ur5HL4R7-7AQt25_k.js → AwaitingExternalEthereumTransferScreen-ur5HL4R7-BgC2TsqH.js} +1 -1
  15. package/site/dist/assets/{AwaitingPasswordlessCodeScreen-DRHz76mM-BZY30TGs.js → AwaitingPasswordlessCodeScreen-DRHz76mM-B9OzLeEO.js} +1 -1
  16. package/site/dist/assets/{AwaitingSolToEvmBridgingScreen-CdLRrGD2-BILOOLi_.js → AwaitingSolToEvmBridgingScreen-CdLRrGD2-C7r5snUL.js} +1 -1
  17. package/site/dist/assets/BridgeNetworkSelectionView-CFGjB2nO-BTV0NRio.js +68 -0
  18. package/site/dist/assets/{CaptchaScreen-DbpvkIGx-D8eDcAkc.js → CaptchaScreen-DbpvkIGx-7rSZIuM-.js} +1 -1
  19. package/site/dist/assets/{CheckCircleIcon-NCOQc0Gs.js → CheckCircleIcon-B1l17ioc.js} +1 -1
  20. package/site/dist/assets/{CheckCircleIcon-BM409mGI.js → CheckCircleIcon-BGSI8nKf.js} +1 -1
  21. package/site/dist/assets/{Checkbox-D1EDeo41-rHlvsZzP.js → Checkbox-D1EDeo41-BUfq0w99.js} +1 -1
  22. package/site/dist/assets/{ChevronDownIcon-CW-4MSpE.js → ChevronDownIcon-B6uJvPHu.js} +1 -1
  23. package/site/dist/assets/{Chip-CZKIKt9K-CutJG010.js → Chip-CZKIKt9K-r9Nk__0-.js} +1 -1
  24. package/site/dist/assets/{CoinbaseOnrampStatusScreen-BbyCJDXL-DLs9zX-Q.js → CoinbaseOnrampStatusScreen-BbyCJDXL-DWWNHxmR.js} +1 -1
  25. package/site/dist/assets/{ConnectEmailForm-B-VRE0MN-N9J6T_YL.js → ConnectEmailForm-B-VRE0MN-CRQwS0Xu.js} +1 -1
  26. package/site/dist/assets/{ConnectLedgerScreen-DWHABGot-h0uYIUi6.js → ConnectLedgerScreen-DWHABGot-CZcCt31O.js} +1 -1
  27. package/site/dist/assets/{ConnectOnlyLandingScreen-CZYx9Bmp-LeuDMN1E.js → ConnectOnlyLandingScreen-CZYx9Bmp-C5IOf-SQ.js} +1 -1
  28. package/site/dist/assets/{ConnectOnlyStatusScreen-DCRzjxHx-DaRa59tZ.js → ConnectOnlyStatusScreen-DCRzjxHx-cwg74F3A.js} +1 -1
  29. package/site/dist/assets/ConnectOrCreateScreen-CUUYUO07-D28oeK6b.js +1 -0
  30. package/site/dist/assets/{ConnectPhoneForm-Dek5xn4C-BEA4FmhI.js → ConnectPhoneForm-Dek5xn4C-EEdkKeTp.js} +1 -1
  31. package/site/dist/assets/ConnectWalletView-DqI-PTvX-C2mEzukj.js +74 -0
  32. package/site/dist/assets/{ConnectionStatusScreen-fUfROm9m-BeWLchcf.js → ConnectionStatusScreen-fUfROm9m-CH_7r8iV.js} +1 -1
  33. package/site/dist/assets/ConnectionStatusScreen-fUfROm9m-Z33kis0B.js +1 -0
  34. package/site/dist/assets/{ConnectorUtil-Cq4lWnfe.js → ConnectorUtil-DH4NePk5.js} +1 -1
  35. package/site/dist/assets/{CopyToClipboard-i_OQSBJr-DujUHNzW.js → CopyToClipboard-i_OQSBJr-_G88JCVR.js} +1 -1
  36. package/site/dist/assets/{CopyableText-CQapvaMr-DMIdpDaU.js → CopyableText-CQapvaMr-CGGfc_zM.js} +1 -1
  37. package/site/dist/assets/{CrossAppAuthScreen-CLw7ymZq-Csju14vF.js → CrossAppAuthScreen-CLw7ymZq-C9Okoc0V.js} +1 -1
  38. package/site/dist/assets/{CustomLandingScreenView-Cm_MBSyX-CBOrbNLo.js → CustomLandingScreenView-Cm_MBSyX-D2l6hdSl.js} +1 -1
  39. package/site/dist/assets/{DelegatedActionsConsentScreen-DYF2U4y5-BL5hzNUI.js → DelegatedActionsConsentScreen-DYF2U4y5-Dda3KKqS.js} +1 -1
  40. package/site/dist/assets/{DelegatedActionsRevokeScreen-bPp6Uwyh-fcO51q5H.js → DelegatedActionsRevokeScreen-bPp6Uwyh-DG8kJPt1.js} +1 -1
  41. package/site/dist/assets/{DepositAddressAddressStepView-4vdkb55L-B3vY888G.js → DepositAddressAddressStepView-4vdkb55L-CcOUfn6f.js} +1 -1
  42. package/site/dist/assets/{DepositAddressScreen-DBLRs7aI-DmdQaFI2.js → DepositAddressScreen-DBLRs7aI-DeituDNh.js} +1 -1
  43. package/site/dist/assets/{DepositAddressV3Screen-CDqIEMQw-BoupRyfV.js → DepositAddressV3Screen-CDqIEMQw-FDg6K14-.js} +1 -1
  44. package/site/dist/assets/{EmailInputForm-Cqo1mda8-B2NG3K5V.js → EmailInputForm-Cqo1mda8-BmbxvPHC.js} +1 -1
  45. package/site/dist/assets/{EmbeddedWalletConnectingScreen-D4T7DUzs-D_AVgO4s.js → EmbeddedWalletConnectingScreen-D4T7DUzs-B05CQ9rx.js} +1 -1
  46. package/site/dist/assets/{EmbeddedWalletCreatedScreen-D7WhW5ve-CLsJbPYQ.js → EmbeddedWalletCreatedScreen-D7WhW5ve-Cxd1b9XH.js} +1 -1
  47. package/site/dist/assets/{EmbeddedWalletKeyExportScreen-CqV4NYQ3-C9sAExzE.js → EmbeddedWalletKeyExportScreen-CqV4NYQ3-CrJy0ViX.js} +1 -1
  48. package/site/dist/assets/{EmbeddedWalletOnAccountCreateScreen-BoKb3Q2S-DxaWAAKa.js → EmbeddedWalletOnAccountCreateScreen-BoKb3Q2S-Bakaa3zu.js} +1 -1
  49. package/site/dist/assets/{EmbeddedWalletPasswordUpdateScreen-D3rMlqS7-CxrfLr5q.js → EmbeddedWalletPasswordUpdateScreen-D3rMlqS7-j78vKrcj.js} +1 -1
  50. package/site/dist/assets/{EmbeddedWalletPasswordUpdateSplashScreen-BPFkWJeE-DHZRGoTN.js → EmbeddedWalletPasswordUpdateSplashScreen-BPFkWJeE-D3dr7W9_.js} +1 -1
  51. package/site/dist/assets/{EnrollTotp-Dibew4dp-SA2pvNEc.js → EnrollTotp-Dibew4dp-BXbYV8nI.js} +1 -1
  52. package/site/dist/assets/{EnvelopeIcon-Dh2vSVj4.js → EnvelopeIcon-DjPofnRI.js} +1 -1
  53. package/site/dist/assets/{ErrorBanner-BcpGRt0h-BKOYTyCi.js → ErrorBanner-BcpGRt0h-BhH6_V-9.js} +1 -1
  54. package/site/dist/assets/{ErrorMessage-D8VaAP5m-CrZOnUyg.js → ErrorMessage-D8VaAP5m-Bs7uX2a9.js} +1 -1
  55. package/site/dist/assets/{ErrorScreen-DipdTWzE-c8g8En21.js → ErrorScreen-DipdTWzE-BgPRgnOb.js} +1 -1
  56. package/site/dist/assets/ErrorScreen-DipdTWzE-CvxXC6pz.js +1 -0
  57. package/site/dist/assets/{ExclamationCircleIcon-DUA2wMfO.js → ExclamationCircleIcon-BE-WGrut.js} +1 -1
  58. package/site/dist/assets/{ExclamationTriangleIcon-eZfaqcFq.js → ExclamationTriangleIcon-Ca1Xlc_f.js} +1 -1
  59. package/site/dist/assets/{FarcasterConnectStatusScreen-51tjUxqq-s_s5M2CZ.js → FarcasterConnectStatusScreen-51tjUxqq-De2JvZdV.js} +1 -1
  60. package/site/dist/assets/{FarcasterSignerStatusScreen-6x-Uh95G-BHBR4k8H.js → FarcasterSignerStatusScreen-6x-Uh95G-bLp3hXoO.js} +1 -1
  61. package/site/dist/assets/FiatOnrampScreen-BAhYeiTI-Jr6D6JiZ.js +491 -0
  62. package/site/dist/assets/{FingerPrintIcon-Dm6kxmg7.js → FingerPrintIcon-DOCbS93y.js} +1 -1
  63. package/site/dist/assets/{FundSolWalletWithExternalSolanaWallet-WtLwYaOl-B8TRV36j.js → FundSolWalletWithExternalSolanaWallet-WtLwYaOl-A_G5kfa1.js} +1 -1
  64. package/site/dist/assets/{FundWalletMethodHeader-BWNkokCT-BQdbJ5Bb.js → FundWalletMethodHeader-BWNkokCT-LPv35wkD.js} +1 -1
  65. package/site/dist/assets/{FundWithBankDepositScreen-DajkHxBD-9rPtyA3d.js → FundWithBankDepositScreen-DajkHxBD-0hfGrfvf.js} +1 -1
  66. package/site/dist/assets/{FundingEditAmountScreen-CpvpiO4M-GaXigGI9.js → FundingEditAmountScreen-CpvpiO4M-Dz0s_NWR.js} +1 -1
  67. package/site/dist/assets/{FundingMethodSelectionScreen-Db7vhRlE-UsmtTqv4.js → FundingMethodSelectionScreen-Db7vhRlE-ZGm-3-Io.js} +1 -1
  68. package/site/dist/assets/{GlobeAltIcon-vqrVV5ho.js → GlobeAltIcon-BBRl2MMn.js} +1 -1
  69. package/site/dist/assets/{GooglePay-B53WnudL-BX5_WtCx.js → GooglePay-B53WnudL-BGiVpB8y.js} +1 -1
  70. package/site/dist/assets/{HCaptchaWrapper-CUi9LJsp-D-I8j7NO.js → HCaptchaWrapper-CUi9LJsp-CHdfIeD_.js} +3 -3
  71. package/site/dist/assets/{InAppBrowserLoginNotPossible-BMR9br1T-BY3j50El.js → InAppBrowserLoginNotPossible-BMR9br1T-Cgoiow3m.js} +1 -1
  72. package/site/dist/assets/{InfoBanner-Cb3p1z12-DLBl_Ywy.js → InfoBanner-Cb3p1z12-_YqQmRiu.js} +1 -1
  73. package/site/dist/assets/{InjectedWalletIcon-DLcYOGDj-DLSV_NjP.js → InjectedWalletIcon-DLcYOGDj-tuIrKQHH.js} +1 -1
  74. package/site/dist/assets/{InstallWalletScreen-DTA8dwLv-CxreyXoD.js → InstallWalletScreen-DTA8dwLv-BMU_wa61.js} +1 -1
  75. package/site/dist/assets/{JsonTree-BHzNC-ic-DcNcbSoM.js → JsonTree-BHzNC-ic-DcVr0YF0.js} +1 -1
  76. package/site/dist/assets/{LabelXs-oqZNqbm_-iafrj25N.js → LabelXs-oqZNqbm_-CNprGVQM.js} +1 -1
  77. package/site/dist/assets/LandingScreen-CGWUoSUG-fH6rsQen.js +1 -0
  78. package/site/dist/assets/{Layouts-BMRfo5hw-CeCOyCLK.js → Layouts-BMRfo5hw-e-sepi6F.js} +1 -1
  79. package/site/dist/assets/{Link-BdDilT2T-BEDEdHuS.js → Link-BdDilT2T-BdwlRJch.js} +1 -1
  80. package/site/dist/assets/{LinkConflictScreen-C3ZEPsgl-ClWoqvEL.js → LinkConflictScreen-C3ZEPsgl-BXKN2Qm5.js} +1 -1
  81. package/site/dist/assets/LinkEmailScreen-dKo9frwc-Cyn7Q8p1.js +1 -0
  82. package/site/dist/assets/{LinkPasskeyScreen-zbrl_AI_-D72Gb0LW.js → LinkPasskeyScreen-zbrl_AI_-CWiqnwLM.js} +1 -1
  83. package/site/dist/assets/LinkPasskeyScreen-zbrl_AI_-YmDevJzf.js +1 -0
  84. package/site/dist/assets/{LinkPhoneScreen-oIUpfj0w-C0DuD14j.js → LinkPhoneScreen-oIUpfj0w-h7shW-Ay.js} +1 -1
  85. package/site/dist/assets/{Loader-UAZqxsnw-Cy7hEE2f.js → Loader-UAZqxsnw-DJEVblm1.js} +1 -1
  86. package/site/dist/assets/{LoadingSkeleton-BMsgO5PV-CiEyS5PZ.js → LoadingSkeleton-BMsgO5PV-D2atjsP5.js} +1 -1
  87. package/site/dist/assets/{LockClosedIcon-BgY_5v_Z.js → LockClosedIcon-9EFzWK1C.js} +1 -1
  88. package/site/dist/assets/{LoginFailedScreen-CN0dJV6U-DhUMiJZJ.js → LoginFailedScreen-CN0dJV6U-By3Si77a.js} +1 -1
  89. package/site/dist/assets/{ManualTransferScreen-CHqcuqbs-tXiZDHmN.js → ManualTransferScreen-CHqcuqbs-BAHPY8rs.js} +1 -1
  90. package/site/dist/assets/{MfaAuthEnrollmentFlowScreen-Dj7gPTRC-CaW7xeCC.js → MfaAuthEnrollmentFlowScreen-Dj7gPTRC-CLjffFG1.js} +1 -1
  91. package/site/dist/assets/{MfaAuthVerifyFlowScreen-DbFpyWMy-CeRqvx8k.js → MfaAuthVerifyFlowScreen-DbFpyWMy-BmQg1Y61.js} +1 -1
  92. package/site/dist/assets/{MfaEnrollmentFlowScreen-DhLnGgnr-BkN1k4lh.js → MfaEnrollmentFlowScreen-DhLnGgnr-DmBtTtlw.js} +1 -1
  93. package/site/dist/assets/{MfaVerifyFlowScreen-C_XPjMRP-CXSqLVbE.js → MfaVerifyFlowScreen-C_XPjMRP-4a683Bmf.js} +1 -1
  94. package/site/dist/assets/{ModalFooter-BCuEK_nz-c-khvG4Y.js → ModalFooter-BCuEK_nz-C_71qsaz.js} +1 -1
  95. package/site/dist/assets/{MoonpayStatusScreen-CzTUtokc-BRFN2eXr.js → MoonpayStatusScreen-CzTUtokc-DEHHcEf8.js} +1 -1
  96. package/site/dist/assets/{OAuthStatusScreen-ufbOa-da-CeiGcSia.js → OAuthStatusScreen-ufbOa-da-BjAb_WsY.js} +1 -1
  97. package/site/dist/assets/{OpenLink-CUpJ1mOr-DfAvJRyK.js → OpenLink-CUpJ1mOr-BLWFsPOW.js} +1 -1
  98. package/site/dist/assets/{PasskeySelectSignupOrLogin-xh2ScC_l-CIf5I7wU.js → PasskeySelectSignupOrLogin-xh2ScC_l-2PJTJxX-.js} +1 -1
  99. package/site/dist/assets/{PasskeyStatusScreen-Bla8MaOk-CLoL7QC-.js → PasskeyStatusScreen-Bla8MaOk-DCEg761l.js} +1 -1
  100. package/site/dist/assets/{PasswordRecoveryScreen-awGXZkQk-B9F67IYV.js → PasswordRecoveryScreen-awGXZkQk-8nVjNc8k.js} +1 -1
  101. package/site/dist/assets/{PhoneIcon-CvIiPwYQ.js → PhoneIcon-CZ47md80.js} +1 -1
  102. package/site/dist/assets/{PinInput-DbZ0b1i1-CDXZBdQx.js → PinInput-DbZ0b1i1-BrTXu3Km.js} +1 -1
  103. package/site/dist/assets/{PrivyPluginContext-DA-yS5vO-CtQWBiV2.js → PrivyPluginContext-DA-yS5vO-CY60yubk.js} +1 -1
  104. package/site/dist/assets/{QrCode-DbnZwlkH-h6Bhoe5U.js → QrCode-DbnZwlkH-CcMrWV5D.js} +2 -2
  105. package/site/dist/assets/{RecoveryOAuthStatusScreen-CsgtTI2x-D-A5P3PX.js → RecoveryOAuthStatusScreen-CsgtTI2x-DgeDnHOK.js} +1 -1
  106. package/site/dist/assets/{RecoveryPasswordCreateScreen-Be-qJ-LU-C8lTSeSr.js → RecoveryPasswordCreateScreen-Be-qJ-LU-CvJJwLhK.js} +1 -1
  107. package/site/dist/assets/{RecoverySelectionScreen-D1iGtpmi-P5P3plkH.js → RecoverySelectionScreen-D1iGtpmi-CADtGtSV.js} +1 -1
  108. package/site/dist/assets/{SIWXUtil-TUCxa7aA.js → SIWXUtil-Cpiv91-M.js} +1 -1
  109. package/site/dist/assets/{Screen-D30meWsY-CCeVNuWs.js → Screen-D30meWsY-vEusJ7KX.js} +1 -1
  110. package/site/dist/assets/{ScreenHeader-CHmc4-Lu-DjyrH7IK.js → ScreenHeader-CHmc4-Lu-BvGTLg53.js} +1 -1
  111. package/site/dist/assets/{ScreenLayout-OwaQQcxH-CrQM6kvA.js → ScreenLayout-OwaQQcxH-cfOTmyl0.js} +1 -1
  112. package/site/dist/assets/{SelectSourceAsset-CWFog6gm-D7yTw87h.js → SelectSourceAsset-CWFog6gm-DxYklZYs.js} +1 -1
  113. package/site/dist/assets/{SetAutomaticRecoveryScreen-BO_OEqAZ-f0iDIGmw.js → SetAutomaticRecoveryScreen-BO_OEqAZ-oeqeo05x.js} +1 -1
  114. package/site/dist/assets/{SetWalletPasswordForm-DwCTVtAh-kq1zvA7d.js → SetWalletPasswordForm-DwCTVtAh-BxFee9UA.js} +1 -1
  115. package/site/dist/assets/{ShieldCheckIcon-o6RHYev1.js → ShieldCheckIcon-eFjsosCA.js} +1 -1
  116. package/site/dist/assets/{SignRequestScreen-BHKv32KR-DDpMYyJ1.js → SignRequestScreen-BHKv32KR-z8ixfIma.js} +1 -1
  117. package/site/dist/assets/{SolanaWalletConnector-C7Lqk-Wz-DPwhuzcI.js → SolanaWalletConnector-C7Lqk-Wz-Bc_lvdiF.js} +1 -1
  118. package/site/dist/assets/{StackedContainer-B2vaEl56-eQCM2cmv.js → StackedContainer-B2vaEl56-Do5dXB8-.js} +1 -1
  119. package/site/dist/assets/{StandardSignAndSendTransactionScreen-CfhIXVtd-BJ-onCjv.js → StandardSignAndSendTransactionScreen-CfhIXVtd-DudetZAc.js} +1 -1
  120. package/site/dist/assets/{Subtitle-CV-2yKE4-zxWw2m1Q.js → Subtitle-CV-2yKE4-DV0o1av3.js} +1 -1
  121. package/site/dist/assets/{TelegramAuthScreen-UL9zLfO8-NWlMgNRX.js → TelegramAuthScreen-UL9zLfO8-Bo3sONvf.js} +1 -1
  122. package/site/dist/assets/{Title-BnzYV3Is-B_JpTatT.js → Title-BnzYV3Is-C3qOPnO_.js} +1 -1
  123. package/site/dist/assets/{TodoList-DnyULl18-C8Eyy28X.js → TodoList-DnyULl18-BvxvubbF.js} +1 -1
  124. package/site/dist/assets/{TransactionDetails-e9nesl30-C4MpIHR-.js → TransactionDetails-e9nesl30-WWflkOIi.js} +1 -1
  125. package/site/dist/assets/{TransactionErrorView-BDBNqA_f-p1T9WVMx.js → TransactionErrorView-BDBNqA_f-CotYKcgf.js} +1 -1
  126. package/site/dist/assets/{TransferFromWalletScreen-Qvn1Yuno-88IQcRnY.js → TransferFromWalletScreen-Qvn1Yuno-sVFlWqa8.js} +1 -1
  127. package/site/dist/assets/{TransferOrBridgeLoadingScreen-Dl1I_iIz-1fDAIxAf.js → TransferOrBridgeLoadingScreen-Dl1I_iIz-CV2-mY19.js} +1 -1
  128. package/site/dist/assets/{TurnstileWrapper-B7sNddys-Jwy1tJtm.js → TurnstileWrapper-B7sNddys-oPbuMTQt.js} +1 -1
  129. package/site/dist/assets/{UpdateEmailScreen-DVOhPV0H-Jj2DQW8D.js → UpdateEmailScreen-DVOhPV0H-D_mjSpAy.js} +1 -1
  130. package/site/dist/assets/{UpdatePhoneScreen-CXRswTNZ-DwYIUBqi.js → UpdatePhoneScreen-CXRswTNZ-6RLG0ahv.js} +1 -1
  131. package/site/dist/assets/{UserLimitReachedScreen-5we2DHn8-D7m70C4b.js → UserLimitReachedScreen-5we2DHn8-CaVN0bti.js} +1 -1
  132. package/site/dist/assets/{Value-DTgR824E-BRuIGiec.js → Value-DTgR824E-Bp6WGZZm.js} +1 -1
  133. package/site/dist/assets/{WalletCards-DH1rqayz-Bgp9Fsgs.js → WalletCards-DH1rqayz-D3cOTb9x.js} +1 -1
  134. package/site/dist/assets/{WalletIcon-gKf0gTw6.js → WalletIcon-DOIZhb2l.js} +1 -1
  135. package/site/dist/assets/{WalletInfoCard-sq_2wgFg-DpNSAGte.js → WalletInfoCard-sq_2wgFg-bOqfl5MA.js} +1 -1
  136. package/site/dist/assets/{WalletInterstitialScreen-Sh7LfsAh-DG-RuO-F.js → WalletInterstitialScreen-Sh7LfsAh-DWaVkMCA.js} +1 -1
  137. package/site/dist/assets/{WalletLink-DK5LB5Ha-DHaL350n.js → WalletLink-DK5LB5Ha-DjUZvqs-.js} +1 -1
  138. package/site/dist/assets/WalletOverflowButton-bfCnp-9T-B6P7DQXA.js +1 -0
  139. package/site/dist/assets/{WarningBanner-ZZqCEtZK-2eU4Qo74.js → WarningBanner-ZZqCEtZK-Bc2YKZb7.js} +1 -1
  140. package/site/dist/assets/__vite-browser-external-NciY4Vu1.js +1 -0
  141. package/site/dist/assets/{_esm-BdeM6pxJ.js → _esm-BZP3cXTv.js} +1 -1
  142. package/site/dist/assets/_esm-ZmzBJpEs.js +6 -0
  143. package/site/dist/assets/{accounts-D96UKWkC.js → accounts-D4AXF17G.js} +1 -1
  144. package/site/dist/assets/accounts-IkdFx9nq.js +1 -0
  145. package/site/dist/assets/{baseSepolia-DX-qGsik.js → baseSepolia-Bn1j1Ysw.js} +1 -1
  146. package/site/dist/assets/{basic-oIwwSyu4.js → basic-Cz1YiCSk.js} +4 -4
  147. package/site/dist/assets/{ccip-BZvRTL6g.js → ccip-B1J3oTZx.js} +2 -2
  148. package/site/dist/assets/ccip-Bd7261zy.js +1 -0
  149. package/site/dist/assets/{ccip-65sIfSPR.js → ccip-D6EHKpjI.js} +1 -1
  150. package/site/dist/assets/{chain-DM3oH6Px.js → chain-scefkYIH.js} +3 -6
  151. package/site/dist/assets/check-DHnllI8N.js +1 -0
  152. package/site/dist/assets/{chevron-down-BSsbXkK-.js → chevron-down-1y-r4bGO.js} +1 -1
  153. package/site/dist/assets/{circle-alert-DWaeLZNj.js → circle-alert-OwxamXUX.js} +1 -1
  154. package/site/dist/assets/{circle-check-big-Chb1ivw9.js → circle-check-big-3sZGVC10.js} +1 -1
  155. package/site/dist/assets/{circle-x-AV9Cet0R.js → circle-x-DQjNUV9J.js} +1 -1
  156. package/site/dist/assets/client-B-BpRtwY.js +1 -0
  157. package/site/dist/assets/client-BfIR1FvH.js +9 -0
  158. package/site/dist/assets/coinbase-DCPC2L_R-YEuIn3jh.js +3 -0
  159. package/site/dist/assets/{copy-Ckr0AkL6.js → copy-DMOX_yn7.js} +1 -1
  160. package/site/dist/assets/core-GIEmxmAa.js +12 -0
  161. package/site/dist/assets/{createLucideIcon-IPW50ckY.js → createLucideIcon-BsERoFTA.js} +1 -1
  162. package/site/dist/assets/{defineChain-CiuCXUZW.js → defineChain-B-SQDLTG.js} +1 -1
  163. package/site/dist/assets/{dijkstra-Drfl93V4.js → dijkstra-CY95afk4.js} +1 -1
  164. package/site/dist/assets/dist-Cp6IXeJd.js +1 -0
  165. package/site/dist/assets/{dist-Cm7pNAtL.js → dist-CrNxmdZj.js} +1 -1
  166. package/site/dist/assets/{dist-DnGANz51.js → dist-DYGtf4F0.js} +4 -4
  167. package/site/dist/assets/embed.worker-Cnl4VGr3.js +1 -0
  168. package/site/dist/assets/{errors-BQ3N-RVt-BLqjTPNR.js → errors-BQ3N-RVt-CZPAWCgC.js} +1 -1
  169. package/site/dist/assets/{esm-B5cbIQaz.js → esm-Co94ENUV.js} +17 -17
  170. package/site/dist/assets/{esm-ByALO6mA.js → esm-bb8SANZh.js} +1 -1
  171. package/site/dist/assets/{ethers-zTjbodk5-wHhL_BQ1.js → ethers-zTjbodk5-Cs648CnD.js} +1 -1
  172. package/site/dist/assets/{eventemitter3-CL76jPsW.js → eventemitter3-Dzc_0Uq2.js} +1 -1
  173. package/site/dist/assets/{external-link-D-uehwM2.js → external-link-BBPG3rG7.js} +1 -1
  174. package/site/dist/assets/{farcaster-DPlSjvF5-BqTvDXBR.js → farcaster-DPlSjvF5-CzBCmgyL.js} +1 -1
  175. package/site/dist/assets/{features-DQ0UYy6K.js → features-CuiHbgEJ.js} +1 -1
  176. package/site/dist/assets/{fingerprint-pattern-D8ytA16Q.js → fingerprint-pattern-CjLtyIxB.js} +1 -1
  177. package/site/dist/assets/floating-ui.react-DmaCfayr.js +1 -0
  178. package/site/dist/assets/{floating-ui.react-dom-DKWOL9UG.js → floating-ui.react-dom-CaoMF8mP.js} +1 -1
  179. package/site/dist/assets/{get-entropy-details-for-user-dHRH5Gpi-Dukf7_kJ.js → get-entropy-details-for-user-dHRH5Gpi-BNiOFXbK.js} +1 -1
  180. package/site/dist/assets/{getErc20Balance-jXNpFf0N-Bb9WM31M.js → getErc20Balance-jXNpFf0N-q4bV8kQq.js} +1 -1
  181. package/site/dist/assets/{getErc20TokenInfo-BNTrzLMP-KPrdn04K.js → getErc20TokenInfo-BNTrzLMP-DcnTFrXN.js} +1 -1
  182. package/site/dist/assets/{guards-BIW-GiMJ-CHfXo8XI.js → guards-BIW-GiMJ-D3tWTQAR.js} +1 -1
  183. package/site/dist/assets/{hourglass-CPG1HZmf.js → hourglass-D_GfQdJr.js} +1 -1
  184. package/site/dist/assets/{id-UqEwL2BI-BkKm533U.js → id-UqEwL2BI-CTlvRMA5.js} +1 -1
  185. package/site/dist/assets/{index-BdEw5wyl-ChSJvPZk.js → index-BdEw5wyl-kLbhqLbv.js} +1 -1
  186. package/site/dist/assets/index-C2h3EneX.js +8 -0
  187. package/site/dist/assets/{index-CWARkn2w-Cezl_uBr.js → index-CWARkn2w-DxuckIFn.js} +1 -1
  188. package/site/dist/assets/{index-DvMddJcd-BatvgC-S.js → index-DvMddJcd-CNBb4VUn.js} +1 -1
  189. package/site/dist/assets/{index-YiCw0Y_x-CX5i3Z87.js → index-YiCw0Y_x-Czl0tWfF.js} +5 -6
  190. package/site/dist/assets/{index.es-BmqyoBEM.js → index.es-Crd0TyUS.js} +1 -1
  191. package/site/dist/assets/index.es-DQbup1WG.js +3 -0
  192. package/site/dist/assets/{isPaymentRequestAvailable-Bq1cemEn-By6r0dVB.js → isPaymentRequestAvailable-Bq1cemEn-Cjf3l05I.js} +1 -1
  193. package/site/dist/assets/{jsx-runtime-BbDfbRii.js → jsx-runtime-CndCZlyt.js} +1 -1
  194. package/site/dist/assets/{landmark-CH6LV6F0.js → landmark-BZPqMFEf.js} +1 -1
  195. package/site/dist/assets/lib-DGtzi2DK.js +1 -0
  196. package/site/dist/assets/{localBatchGatewayRequest-3kLrX_c7.js → localBatchGatewayRequest-B71J8sQ9.js} +7 -10
  197. package/site/dist/assets/{lock-DcskI4Bb.js → lock-DyN_c-ud.js} +1 -1
  198. package/site/dist/assets/{mail-Bs0r5yOi.js → mail-V_mcPb64.js} +1 -1
  199. package/site/dist/assets/{modal-context-CwmSeFcv-DruX9J1E.js → modal-context-CwmSeFcv-DPWNJrfK.js} +1 -1
  200. package/site/dist/assets/{ofetch.CWycOUEr-CHp-crOQ.js → ofetch.CWycOUEr-Duby3iHT.js} +1 -1
  201. package/site/dist/assets/parseEther-CHS0GNkM.js +1 -0
  202. package/site/dist/assets/{pkce-DXF0yKjP-ChQhE0st.js → pkce-DXF0yKjP-7_VY-d83.js} +1 -1
  203. package/site/dist/assets/preload-helper-CRzLMJPS.js +1 -0
  204. package/site/dist/assets/{privy-context-81KmsBw2-CjWGzyg7.js → privy-context-81KmsBw2-DiR6-Yq8.js} +1 -1
  205. package/site/dist/assets/{react-DrJ0MmMO.js → react-BfYA1q0G.js} +1 -1
  206. package/site/dist/assets/react-CK2HRI1t.js +1 -0
  207. package/site/dist/assets/{react-DQnMl2Xv.js → react-DxGeY8B8.js} +1 -1
  208. package/site/dist/assets/{react-dom-5dW7aKoP.js → react-dom-BI2Koe4o.js} +1 -1
  209. package/site/dist/assets/{reservoir-x-nGuZkT-BMX127i6.js → reservoir-x-nGuZkT-BguVFH3D.js} +1 -1
  210. package/site/dist/assets/roles-BDPDWrwo.js +1 -0
  211. package/site/dist/assets/rolldown-runtime-Bjp52BOI.js +1 -0
  212. package/site/dist/assets/secp256k1-BeYL8aZl.js +1 -0
  213. package/site/dist/assets/{secp256k1-_MleGpqL.js → secp256k1-Bh4MSkhz.js} +1 -1
  214. package/site/dist/assets/secp256k1-Ci4cqHl0.js +1 -0
  215. package/site/dist/assets/secp256k1-DsxXqbXv.js +1 -0
  216. package/site/dist/assets/secp256k1-N9RUmafO.js +1 -0
  217. package/site/dist/assets/{serializeAuthorizationList-CX8hGL56.js → serializeAuthorizationList-DGMik9Wx.js} +1 -1
  218. package/site/dist/assets/{serializeSignature-DfxkPnu-.js → serializeSignature-CWKpxoab.js} +1 -1
  219. package/site/dist/assets/sha2-C6s7zZmb.js +1 -0
  220. package/site/dist/assets/{shared-DRZUmnL5-xqAUARWo.js → shared-DRZUmnL5-BewE5wK8.js} +1 -1
  221. package/site/dist/assets/{shared-FM0rljBt--Avg6q2R.js → shared-FM0rljBt-CxLACri_.js} +1 -1
  222. package/site/dist/assets/shouldProceedtoEmbeddedWalletCreationFlow-B3vyavrh-BkAKsRNi.js +1 -0
  223. package/site/dist/assets/{simulateTransaction-CfuOrae4-64lWYJAL.js → simulateTransaction-CfuOrae4-PjA_tGjX.js} +1 -1
  224. package/site/dist/assets/{smartphone-CcEZ-XAy.js → smartphone-3p8nFSTE.js} +1 -1
  225. package/site/dist/assets/{storage-Ufl800Ne-D0bZBw-H.js → storage-Ufl800Ne-1qCR2JMO.js} +7 -8
  226. package/site/dist/assets/{stringify-BlDm7tuc.js → stringify-DqUj9VzO.js} +2 -3
  227. package/site/dist/assets/stripe.esm-DEi2D291.js +2 -0
  228. package/site/dist/assets/{styles-BsotlekN-CXEB4Ud9.js → styles-BsotlekN-Aq27nZGc.js} +1 -1
  229. package/site/dist/assets/{styles-Cm9H63WO-Br4QtzUL.js → styles-Cm9H63WO-p_ic_dxE.js} +1 -1
  230. package/site/dist/assets/{styles-DVyDvTdj-BTABn2K8.js → styles-DVyDvTdj-CjsWqAld.js} +1 -1
  231. package/site/dist/assets/{styles-hslXy6xG-D-49b1rk.js → styles-hslXy6xG-D5QHIrJU.js} +1 -1
  232. package/site/dist/assets/{telegram-B-JqnkqZ-RBoY3PLx.js → telegram-B-JqnkqZ-Dqkm4rDn.js} +1 -1
  233. package/site/dist/assets/{to-ui-error-DWe-qwS3-Cx2bk1kZ.js → to-ui-error-DWe-qwS3-Bi1HUQI9.js} +1 -1
  234. package/site/dist/assets/toViemAccount-B5iDGq1b-CdFZwv07.js +2 -0
  235. package/site/dist/assets/transformers.web-BTyOEJ0C.js +40 -0
  236. package/site/dist/assets/transformers.web-CUZUFjAK.js +49 -0
  237. package/site/dist/assets/{triangle-alert-CWjYH75H.js → triangle-alert-BG3Qw-Hq.js} +1 -1
  238. package/site/dist/assets/{twitch-5IOe4sIQ-lDtgk0os.js → twitch-5IOe4sIQ-CaXHFlAu.js} +1 -1
  239. package/site/dist/assets/{use-headless-crypto-deposit-Yn-QRLB3-LUIVFBSd.js → use-headless-crypto-deposit-Yn-QRLB3-CQqeyhGY.js} +1 -1
  240. package/site/dist/assets/{use-unlink-wallet-BKK4_5Ur-CC2pq27z.js → use-unlink-wallet-BKK4_5Ur-C0xQN_Lp.js} +1 -1
  241. package/site/dist/assets/{useActiveWallet-B-yZYGc6-D7Ik-LxJ.js → useActiveWallet-B-yZYGc6-BkK6rFBm.js} +1 -1
  242. package/site/dist/assets/{useGetSolPrice-x7gfUIHJ-D1hmQfpA.js → useGetSolPrice-x7gfUIHJ-CLVXqv6I.js} +1 -1
  243. package/site/dist/assets/{useGetTokenPrice-CaoUkb79-ZnbuJ-vP.js → useGetTokenPrice-CaoUkb79-DAXXs3rs.js} +1 -1
  244. package/site/dist/assets/{useI18n-C-5n_noF-BcqC76yj.js → useI18n-C-5n_noF-CGpkgIVy.js} +1 -1
  245. package/site/dist/assets/{useWalletBalance-CZnP5f_f-Dw2GIJ4g.js → useWalletBalance-CZnP5f_f-Cfd64m4n.js} +1 -1
  246. package/site/dist/assets/{useWallets-X1ndvJ_U-DRjz7uYD.js → useWallets-X1ndvJ_U-CAYqg7Za.js} +1 -1
  247. package/site/dist/assets/{w3m-modal-BeVrBOIf.js → w3m-modal-B4H_uiPH.js} +2 -2
  248. package/site/dist/assets/{wallet-Bn85Sg2W.js → wallet-BNI12IYk.js} +1 -1
  249. package/site/dist/assets/wallet-CITSaPlB.js +2 -0
  250. package/site/dist/assets/{wallet-connect-BvJtUsDt-Y03hhqFN.js → wallet-connect-BvJtUsDt-CVlSNIXP.js} +1 -1
  251. package/site/dist/assets/{walletconnect-registry-xxG8XLCb-D1SSFvMp.js → walletconnect-registry-xxG8XLCb-BpzpBq5s.js} +1 -1
  252. package/site/dist/assets/walletconnect-v2-3frQFwbg-CzZ6oybX.js +12 -0
  253. package/site/dist/assets/{wui-ux-by-reown-D34ILNLS.js → wui-ux-by-reown-XyHdtV1O.js} +1 -1
  254. package/site/dist/assets/x-gjDrY2rk.js +1 -0
  255. package/site/dist/index.html +5 -5
  256. package/site/feed.js +16 -1
  257. package/site/no-model.js +4 -0
  258. package/site/worker.js +586 -59
  259. package/src/agent/agent-card.js +20 -11
  260. package/src/agent/mcp.js +190 -324
  261. package/src/agent/view-tools.js +46 -13
  262. package/src/agent/x402.js +340 -44
  263. package/src/core/embed.js +51 -52
  264. package/src/core/embed.worker.js +1 -1
  265. package/src/core/shard.js +7 -3
  266. package/src/discover/apps.js +41 -5
  267. package/src/discover/explore.js +50 -30
  268. package/src/market/reactions.js +2 -2
  269. package/src/publish/devnet.js +95 -0
  270. package/src/publish/init.js +74 -0
  271. package/src/publish/lint.js +2 -1
  272. package/src/publish/ship.js +559 -267
  273. package/src/publish/view-cli.js +14 -10
  274. package/src/publish/view.js +355 -218
  275. package/src/taste/taste-doc.js +3 -2
  276. package/src/taste/taste.js +2 -2
  277. package/src/taste/vault.js +3 -1
  278. package/template/README.md +49 -0
  279. package/template/app.json +27 -0
  280. package/template/eval/goals.md +7 -0
  281. package/template/eval/golden.jsonl +0 -0
  282. package/template/gitignore +3 -0
  283. package/template/package.json +13 -0
  284. package/template/wrangler.json +12 -0
  285. package/site/dist/assets/BridgeNetworkSelectionView-CFGjB2nO-CvsbQcFv.js +0 -68
  286. package/site/dist/assets/ConnectOrCreateScreen-CUUYUO07-crHzh-TL.js +0 -1
  287. package/site/dist/assets/ConnectWalletView-DqI-PTvX-CMQIad63.js +0 -74
  288. package/site/dist/assets/ConnectionStatusScreen-fUfROm9m-wu3a3kw4.js +0 -1
  289. package/site/dist/assets/ErrorScreen-DipdTWzE-DcxVjMO4.js +0 -1
  290. package/site/dist/assets/FiatOnrampScreen-BAhYeiTI-BH_sU6EV.js +0 -491
  291. package/site/dist/assets/LandingScreen-CGWUoSUG-DK1EY-6v.js +0 -1
  292. package/site/dist/assets/LinkEmailScreen-dKo9frwc-C3v7glH0.js +0 -1
  293. package/site/dist/assets/LinkPasskeyScreen-zbrl_AI_-DYIl5Kr2.js +0 -1
  294. package/site/dist/assets/WalletOverflowButton-bfCnp-9T-CUyIJFzt.js +0 -1
  295. package/site/dist/assets/__vite-browser-external-CitKSmYk.js +0 -1
  296. package/site/dist/assets/_esm-B26FZg5Y.js +0 -7
  297. package/site/dist/assets/accounts-DiZ-0VmN.js +0 -1
  298. package/site/dist/assets/ccip-DA_zG341.js +0 -1
  299. package/site/dist/assets/check-BPgcwEPP.js +0 -1
  300. package/site/dist/assets/client-CZG0ndth.js +0 -2
  301. package/site/dist/assets/client-Dsa7_3V3.js +0 -9
  302. package/site/dist/assets/coinbase-DCPC2L_R-D3aIgpyd.js +0 -3
  303. package/site/dist/assets/core-snws5xwv.js +0 -12
  304. package/site/dist/assets/dist-Dl07uGq1.js +0 -1
  305. package/site/dist/assets/embed.worker-ugGhEqCV.js +0 -1
  306. package/site/dist/assets/floating-ui.react-xRkl9O3u.js +0 -1
  307. package/site/dist/assets/index-1HYFYA-W.js +0 -8
  308. package/site/dist/assets/index.es-C1v1or--.js +0 -3
  309. package/site/dist/assets/lib-BsS8z8Lj.js +0 -1
  310. package/site/dist/assets/parseEther-VjhVo3dd.js +0 -1
  311. package/site/dist/assets/preload-helper-uBIymjUX.js +0 -1
  312. package/site/dist/assets/react-DCXkXSrv.js +0 -1
  313. package/site/dist/assets/roles-32M1l9jI.js +0 -1
  314. package/site/dist/assets/rolldown-runtime-BcKkbAw3.js +0 -1
  315. package/site/dist/assets/secp256k1-C4nzcPo-.js +0 -1
  316. package/site/dist/assets/secp256k1-D92aGNnU.js +0 -1
  317. package/site/dist/assets/secp256k1-DmbwyFau.js +0 -1
  318. package/site/dist/assets/secp256k1-xl2og-wO.js +0 -1
  319. package/site/dist/assets/sha2-BU_QyRTx.js +0 -1
  320. package/site/dist/assets/shouldProceedtoEmbeddedWalletCreationFlow-B3vyavrh-BK_FBkaE.js +0 -1
  321. package/site/dist/assets/stripe.esm-CZRDpc-N.js +0 -2
  322. package/site/dist/assets/toViemAccount-B5iDGq1b-Ba8L7zed.js +0 -2
  323. package/site/dist/assets/transformers.web-CVP3pJOS.js +0 -40
  324. package/site/dist/assets/transformers.web-D8W1u_I2.js +0 -49
  325. package/site/dist/assets/wallet-Bnzeiqed.js +0 -2
  326. package/site/dist/assets/walletconnect-v2-3frQFwbg-CrtLXofr.js +0 -12
  327. package/site/dist/assets/x-rlSp9U7W.js +0 -1
package/README.md CHANGED
@@ -1,14 +1,43 @@
1
1
  # @fangorn-network/westmarch
2
2
 
3
- Everything you need to get started building Fangorn apps.
3
+ Everything you need to get started building Fangorn apps, and the free tier that runs them.
4
4
 
5
5
  **Start here:** [docs/app-to-agent.md](docs/app-to-agent.md) takes a static site from nothing
6
6
  to a Fangorn app and ERC-8004 agent that any agent can discover, verify and drive.
7
7
 
8
8
  **Just want to query apps from Claude or another MCP client?** [docs/mcp.md](docs/mcp.md)
9
- installs `fangorn-mcp` in one command.
9
+ installs `fangorn-mcp` in one command; in Claude Code, `claude plugin marketplace add
10
+ fangorn-network/westmarch && claude plugin install fangorn-index@fangorn` adds it with its skill.
10
11
 
11
12
 
13
+ ## The free tier: one Worker per app
14
+
15
+ ```sh
16
+ westmarch-ship app.json # claim the app, commit its schema, run its sources, deploy its Worker
17
+ ```
18
+
19
+ An app on the free tier is one Cloudflare Worker (`site/worker.js`), and nobody runs anything
20
+ after the deploy:
21
+
22
+ - **Indexer.** A cron follows the update log from where it left off, and runs the
23
+ embedding lens (WHITEPAPER_1 §3.4) over every member's repo whose head moved: `view.js`, with
24
+ the Worker's AI binding as the encoder (`@cf/google/embeddinggemma-300m`, 256 dims). The view
25
+ goes to R2. A repo whose publisher leaves the app, or that the app excludes, loses its domain on the next run.
26
+ - **View.** `/view/cdn/…`: the catalog, manifests and content-named shards a reader ranks in
27
+ its own tab, so a query need never leave it.
28
+ - **MCP.** `/mcp`, streamable HTTP: describe, search, get, similar, count, browse and threads
29
+ over the view, the query embedded by the same runtime as the rows. Add it to a client as a
30
+ URL; there is nothing to install.
31
+ - **Site and card.** The stock page, and the agent card naming the app, its repos, its view
32
+ and its MCP endpoint, bound on chain.
33
+
34
+ The whole network embeds with one model (`src/core/embed.js`): EmbeddingGemma-300m, by its
35
+ retrieval prompts, truncated to 256 dims. A tab runs it with transformers.js (q8) and the Worker
36
+ with Workers AI; on the same rows they agree to ~0.996 cosine (`E2E_PARITY=1 npm run e2e:worker`).
37
+
38
+ `npm run e2e:worker` runs the whole tier on this machine: the contracts on anvil, a local IPFS
39
+ gateway, publishers, and the Worker under `wrangler dev` with its real AI binding.
40
+
12
41
  **For Publishers** — shape a tree into a commit graph, describe what's in it, seal and upload the bytes. Needs `fangorn`. Runs anywhere: a script, a server, a browser.
13
42
 
14
43
  **For Consumers** — read a quickbeam view's Semantic CDN shards in the reader's own process and rank them there. Needs a view URL and nothing else. No index server, no chain read, and the query never leaves the tab.
@@ -31,7 +60,8 @@ src/
31
60
  envelope.js · manifest.js · cli.js · view.js · ship.js · eval.ts
32
61
  lint.js …and whether any of that WORKED
33
62
  site/ the stock page every `westmarch-ship` app deploys
34
- plugin/ the Claude Code plugin: skills + fangorn-fx
63
+ plugin/ Claude Code plugin fangorn-index: its skill, fangorn-fx, the fangorn MCP server
64
+ plugin-builder/ Claude Code plugin fangorn-builder: fangorn-app, fangorn-improve
35
65
  examples/ demo/ (a second consumer + fixtures) · publisher/ (the smallest publisher)
36
66
  scripts/ test.js (`npm test`) · build-bin.js (single-file fangorn-mcp)
37
67
  ```
@@ -9,7 +9,8 @@ browser and any agent can find, verify and query. By the end you have:
9
9
  - **your data** committed on chain under your namespace;
10
10
  - **a view** of it: your committed data embedded and sharded as static files, so people
11
11
  and agents can search it by meaning, updated with one command after each commit;
12
- - **a static site** with no server: the view, and a page for people;
12
+ - **a site**: the view, a page for people, and an MCP endpoint for agents (one Cloudflare
13
+ Worker with `ship`, or static files by hand);
13
14
  - **an agent card** bound to the app on chain, and registered as an ERC-8004 agent;
14
15
  - **agents using it:** anyone running `fangorn-mcp` can `open-app` it by name.
15
16
 
@@ -18,9 +19,9 @@ which anything can produce: a scraper, a database export, a converted spreadshee
18
19
 
19
20
  ```
20
21
  your data ─► data/graph.json ─► fangorn commit/push ─┐
21
- schema/graph.json ─► fangorn commit/push ────────────┤ (namespace fangorn.schema)
22
22
  ▼
23
23
  chain ─► westmarch-view ─► site/view/
24
+ app.json types ──────────────────────────────────────────────┘
24
25
  (embeds only what changed, applies the schema)
25
26
  app/ (page) ─► vite build ─► site/ ◄── the page loads site/view
26
27
  pipeline/agent-card.mjs ─► site/.well-known/agent-card.json (views: [site/view]) ─► deploy
@@ -39,7 +40,10 @@ which anything can produce: a scraper, a database export, a converted spreadshee
39
40
  writes the same files, so moving an app to it means changing the `views` URL in its
40
41
  card.
41
42
 
42
- It runs on Arbitrum Sepolia.
43
+ It runs on Base Sepolia (new apps) or Arbitrum Sepolia (apps claimed there before the move).
44
+ `"network"` in `app.json` is required: `"baseSepolia"`, or the network the app was claimed on.
45
+ `westmarch-view` and `fangorn-mcp` read Base Sepolia unless `FANGORN_NETWORK=arbitrumSepolia`;
46
+ the CLI signs on `CHAIN_NAME`.
43
47
 
44
48
  ## The short way: one config, one command
45
49
 
@@ -58,35 +62,40 @@ update: each step checks the chain (or Cloudflare) first and acts only on a diff
58
62
  "presentation": { "facets": ["category"] } } },
59
63
  "relations": [],
60
64
  "sources": [{ "namespace": "things", "command": ["python", "-m", "my_source"] }],
65
+ "network": "baseSepolia", // required: where the app is (or will be) claimed
61
66
  "fangorn": "fangorn", // the CLI that signs
62
- "paid": { "price": "0.01", "network": "arbitrum-sepolia", "description": "the full record" }
67
+ "paid": { "price": "0.01", "description": "the full record" } // optional: USDC on the app's network, x402 v2
63
68
  }
64
69
  ```
65
70
 
66
71
  ```sh
67
- npx westmarch-ship app.json # claim, join, schema, crawl + publish, view, site, card, deploy, agent
72
+ npx westmarch-ship app.json # claim, join, crawl + publish, view, site, card, deploy, agent
68
73
  npx westmarch-ship app.json --dry-run # every step, printed, none done
69
74
  npx westmarch-ship app.json --no-crawl # rebuild view, site and card from what is on chain
70
75
  npx westmarch-ship app.json --replace # each source's crawl becomes its namespace's whole state
76
+ npx westmarch-ship app.json --index # build the deployed app's view once, on this machine
71
77
  ```
72
78
 
73
- What it does, in order (the long way, below, is the same steps by hand):
79
+ The app is one Cloudflare Worker: a cron that indexes the chain into R2 (embedding with
80
+ Workers AI), the view, `/mcp`, and the page. What `ship` does, in order:
74
81
 
75
82
  1. **claim** the app on the first run, and record the claim block (the card's `fromBlock`);
76
- 2. **join** it as a publisher, if the wallet has not;
77
- 3. **commit the schema** (`types`, `relations`) to `fangorn.schema`, if the chain's differs;
78
- 4. **run each source**: a command that publishes into `--namespace` when given `--publish`.
83
+ the claimer is the app's first member;
84
+ 2. **run each source**: a command that publishes into `--namespace` when given `--publish`.
79
85
  Every quickbeam scraper Source does. A source with `"each": "rows.json"` is a template,
80
86
  one source per row (`{field}`, `{field|slug}`, `{args...}`), so adding a town, a feed or
81
87
  an account is adding a row;
82
- 5. **westmarch-view**: the app's commits → `.ship/site/view`, embedding only what changed.
83
- A removal rewrites the domain, so a retracted record's bytes stop being served;
84
- 6. **the site**: the stock page (search, plus a feed of what is coming up and what just
85
- happened, by the `temporal` role and the first `facets` field), the agent card and
86
- `_headers`. With `paid`, also `_worker.js`, which sells each record over x402; only
87
- records whose sha256 a live row carries are for sale;
88
- 7. **deploy** to Cloudflare Pages (`wrangler`; the project is created if missing);
89
- 8. **register** the ERC-8004 agent and bind the card, if the chain points elsewhere.
88
+ 3. **the site** in `.ship/site`: the stock page (search, plus a feed of what is coming up and
89
+ what just happened, by the `temporal` role and the first `facets` field; for rows that are
90
+ not meetings, an explore page: `site.examples` as searches to try, the latest records by
91
+ `temporal`, and each declared facet's values to browse), the agent card,
92
+ `/openapi.json` and `/.well-known/x402` when anything is for sale, and `_headers`;
93
+ 4. **deploy the Worker** (`wrangler deploy`): its R2 bucket (created if missing), Workers AI,
94
+ the cron (`site.cron`, default every 5 minutes) and its CONFIG, which carries the schema. With `paid`, it sells each
95
+ record over x402; only records whose sha256 a live row carries are for sale. If the app
96
+ has no view yet, ship builds the first one here (`--index`) rather than wait for the cron;
97
+ 5. **register** the ERC-8004 agent and bind the card, if the chain points elsewhere. An
98
+ agent is minted once; later runs only rebind.
90
99
 
91
100
  State lives in `.ship/` next to `app.json`. In CI, cache `.ship/cache` and `.ship/stage`
92
101
  and commit `.ship/state.json`; Quorum's `.github/workflows/ship.yml` is a working example
@@ -95,7 +104,48 @@ and commit `.ship/state.json`; Quorum's `.github/workflows/ship.yml` is a workin
95
104
  **What was run:** all of it, for Quorum (`https://quorum-bua.pages.dev`, agent `421614:245`):
96
105
  five towns' meetings crawled, published, embedded and deployed by `westmarch-ship`, then
97
106
  searched and bought (x402, settled on Arbitrum Sepolia) from `fangorn-mcp` in a fresh
98
- session. Kingsfoil, the reference at the end, predates `ship` and was built by hand.
107
+ session. FAR Desk (`https://far-desk.quickbeam.workers.dev`, agent `84532:10323`) is the
108
+ private one: 3,113 sealed FAR sections, registered on Base Sepolia and selling in real USDC on
109
+ Base, searched per call and with a pass; its `search` tool is in PayAI's Bazaar.
110
+ Kingsfoil, the reference at the end, predates `ship` and was built by hand.
111
+
112
+ ## A private app: the data is the product
113
+
114
+ `"private": { "pass": { "price": "5", "days": 30 }, "call": "0.01" }` in `app.json`, settled like
115
+ `paid` (`network`, `payTo`, `asset`, `facilitator`). What changes:
116
+
117
+ - **Real money.** Settlement is set apart from the app's chain: `"network": "base"` in `private`
118
+ (or `paid`) charges USDC on Base while the app and its agent stay on Base Sepolia, where the
119
+ Fangorn contracts are. Set `payTo` to a wallet you control and have backed up; it defaults to
120
+ the owner key ship signs with. On a mainnet the page's button opens Privy's card funding
121
+ (enable it in the Privy dashboard) instead of the faucet. Try a low price first.
122
+
123
+ - **Storage.** Each source stages its records (it needs `--output-dir`); ship seals every row whole,
124
+ `{sealed: base64(nonce ‖ AES-256-GCM(rowKey, row))}` with rowKey = HMAC-SHA256(PAID_SECRET,
125
+ "fangorn.row.v1"), and commits that. The nonce is derived from the row, so an unchanged row keeps
126
+ its CID and is not re-embedded. PAID_SECRET is `$PAID_SECRET` or made once in `.ship/secret`:
127
+ **back it up**, it is the only way to open the rows.
128
+ - **Index.** The Worker (which ship gives the secret on every deploy) opens rows in its cron and
129
+ builds the view in R2 as for any app. `--index` does the same once on your machine
130
+ (`wrangler dev` against the app's own R2 and Workers AI), for the first view or a catalog too
131
+ big for one cron run.
132
+ - **Serving.** `/view/*` (but `cdn/catalog`) and every MCP tool but `describe` need access: a pass
133
+ (`POST /pass`, x402 v2, a bearer token good for `days`) or one x402 payment per tool call over
134
+ x402's MCP transport (`_meta["x402/payment"]`). A call that fails or misses is not charged.
135
+ `fangorn-mcp` pays by itself with `FANGORN_MCP_WALLET_KEY`: a pass at or under
136
+ `FANGORN_MCP_MAX_PASS`, else per call at or under `FANGORN_MCP_MAX_PRICE`.
137
+ - **Discovery.** The card's Fangorn extension carries `access` (pass URL and prices), and its
138
+ skills are tagged `x402`, so the ERC-8004 registration says `x402Support: true`.
139
+ `/openapi.json` and `/.well-known/x402` list `POST /pass` for x402scan; the facilitator's Bazaar
140
+ lists `/pass` and each tool (as `type: "mcp"`, resource `<app>/mcp`) after its first sale, so make
141
+ one paid call yourself (paying from `payTo` is accepted). Check with
142
+ `curl "https://facilitator.payai.network/discovery/resources?payTo=<payTo>"`. Mainnet agents find
143
+ the app here, since its ERC-8004 registration is on Base Sepolia.
144
+ - **The page.** Without a pass it shows what is inside (the free catalog and `describe`: how many
145
+ records, when they were updated), a "Get a pass" button (Privy sign-in, then x402; on a testnet
146
+ it links the faucet when the balance is short), and the lines to add the app to an agent
147
+ (`#/agents`). The pass is kept on the device and sent with every read, and the agent line
148
+ carries it too. Add the app's origin to Privy's allowed origins.
99
149
 
100
150
  ## Grading a change before it ships
101
151
 
@@ -157,8 +207,8 @@ What `ship` does, one step at a time: for understanding it, or for doing one ste
157
207
  ### What you need
158
208
 
159
209
  - Node 22.
160
- - The Fangorn CLI: `npm i -g @fangorn-network/sdk@2026.9.22-dev` (gives `fangorn`).
161
- - A wallet on Arbitrum Sepolia with a little ETH. **It owns the app forever**, so use the
210
+ - The Fangorn CLI: `npm i -g @fangorn-network/sdk@2026.10.20-dev` (gives `fangorn`).
211
+ - A wallet on the app's network (Base Sepolia, or Arbitrum Sepolia for older apps) with a little ETH. **It owns the app forever**, so use the
162
212
  wallet that will publish the data.
163
213
  - A Pinata JWT. Registering the ERC-8004 agent (step 11) pins a file to IPFS.
164
214
  - A static host that serves `/.well-known/` and custom headers. Cloudflare Pages does
@@ -192,8 +242,8 @@ First, note the current block. It becomes the card's `fromBlock` (step 9), which
192
242
  readers start scanning the chain for your app:
193
243
 
194
244
  ```sh
195
- node -e 'const {createPublicClient,http}=require("viem");const {arbitrumSepolia}=require("viem/chains");
196
- createPublicClient({chain:arbitrumSepolia,transport:http()}).getBlockNumber().then(String).then(console.log)'
245
+ node -e 'const {createPublicClient,http}=require("viem");const {baseSepolia}=require("viem/chains");
246
+ createPublicClient({chain:baseSepolia,transport:http()}).getBlockNumber().then(String).then(console.log)' # arbitrumSepolia for older apps
197
247
  ```
198
248
 
199
249
  Then claim the name:
@@ -253,40 +303,30 @@ What makes records work well:
253
303
 
254
304
  ## 5. Declare the schema
255
305
 
256
- The schema says what your data is. You commit it to a reserved namespace,
257
- `fangorn.schema`, in your app:
258
- - **Types:** each is a vertex tagged `fangorn.type.v1`.
259
- - **Relations:** the relations allowed between types are edges between those vertices.
306
+ The schema says what your data is. It lives in `app.json` and nowhere else; nothing is
307
+ committed on chain:
308
+ - **`types`:** one entry per type tag: `description`, `role_map`, `presentation`.
309
+ - **`relations`:** the references allowed between types, `{ "rel", "from", "to" }`.
260
310
 
261
- `westmarch-view` (and hosted quickbeam) read it for every record they embed, so it decides:
311
+ `westmarch-ship` hands it to the Worker in its CONFIG, and `westmarch-view` reads it with
312
+ `--config app.json`. It is applied to every record they embed, so it decides:
262
313
  - **what gets embedded:** the `text` role, plus title, subtitle and tags;
263
314
  - **what readers see:** titles, links, labels;
264
315
  - **what agents can do:** filters, counts, and choosing among views by their description.
265
316
 
266
- `schema/graph.json`:
317
+ In `app.json`:
267
318
 
268
319
  ```json
269
- {
270
- "vertices": [
271
- { "id": "tree", "tag": "fangorn.type.v1", "payload": {
272
- "tag": "my-app.tree.v1",
273
- "description": "Tree species: what they are, where they grow, and what they are good for.",
274
- "role_map": { "identity": "id", "title": "name", "subtitle": "species",
275
- "tags": ["family", "region"], "text": ["description"] },
276
- "presentation": { "externalUrl": { "my-app.tree.v1": "https://en.wikipedia.org/wiki/{species}" } } } }
277
- ],
278
- "edges": []
279
- }
280
- ```
281
-
282
- ```sh
283
- cd schema && fangorn repo init fangorn.schema \
284
- && fangorn commit graph.json -m "schema v1" --replace && fangorn push && cd ..
320
+ "types": {
321
+ "my-app.tree.v1": {
322
+ "description": "Tree species: what they are, where they grow, and what they are good for.",
323
+ "role_map": { "identity": "id", "title": "name", "subtitle": "species",
324
+ "tags": ["family", "region"], "text": ["description"] },
325
+ "presentation": { "externalUrl": { "my-app.tree.v1": "https://en.wikipedia.org/wiki/{species}" } } }
326
+ },
327
+ "relations": []
285
328
  ```
286
329
 
287
- `fangorn repo init` tracks one namespace per directory (in `.fangorn/`), which is why the
288
- schema is committed from its own `schema/` folder.
289
-
290
330
  **`role_map`** says which field is what:
291
331
 
292
332
  | role | means | used for |
@@ -303,13 +343,10 @@ schema is committed from its own `schema/` folder.
303
343
  map inferred from its fields. That works for display and often fails for search: a
304
344
  field called `desc` or `nct` isn't recognized, and a `price` can end up as the date.
305
345
  Declare every type you publish.
306
- - **Only the app owner's schema counts.** Any publisher can write a namespace called
307
- `fangorn.schema`; only the owner's is read.
308
- - **You can change it at any time** with another commit. A view takes the new role map and
309
- description on its next `westmarch-view` run. **Records already embedded keep the text they were embedded
346
+ - **You can change it at any time**: edit `app.json` and ship again. The view takes the new
347
+ role map and description on the Worker's next cron run (or the next `westmarch-view`). **Records already embedded keep the text they were embedded
310
348
  with** until they're re-embedded, so change the `text` role early.
311
- - **Relations** (edges between type vertices, e.g. `{ "rel": "grows_in", "from": "tree",
312
- "to": "region" }`) declare which edges the app allows. Nothing enforces them yet; they
349
+ - **Relations** (e.g. `{ "rel": "grows_in", "from": "my-app.tree.v1", "to": "my-app.region.v1" }`) declare which edges the app allows. Nothing enforces them yet; they
313
350
  are what publisher graphs will be validated against.
314
351
 
315
352
  ## 6. Commit and push the data
@@ -541,7 +578,7 @@ live before step 11, because the CLI fetches it.
541
578
 
542
579
  ```sh
543
580
  fangorn app agent https://my-app.pages.dev/.well-known/agent-card.json
544
- # Agent ID: 421614:…
581
+ # Agent ID: 84532:…
545
582
  # Card: https://my-app.pages.dev/.well-known/agent-card.json
546
583
  # Tx: 0x…
547
584
  ```
@@ -556,8 +593,16 @@ This does two things:
556
593
  2. **Fangorn.** It calls `setAppAgentUri(cardUrl)`, which emits `AppAgentChanged`. That log
557
594
  is the app directory: `list-apps` and `listApps` read it.
558
595
 
559
- `--skip-register` does only the second step, e.g. to move an already-registered card to a
560
- new URL.
596
+ **Mint once.** Every run without flags mints a new agent. After the first:
597
+
598
+ - `--update <agentId>` refreshes the existing agent's registration from the card as it is now
599
+ (name, description, skills, `x402Support`), re-pins it and sets its URI. It rebinds only if
600
+ the chain points elsewhere.
601
+ - `--skip-register` does only the second step, e.g. to move a card to a new URL.
602
+
603
+ The bind retries on a nonce race (`replacement transaction underpriced`), which load-balanced
604
+ RPCs cause right after the mint. If a run failed after `Agent ID:` printed, the agent exists:
605
+ finish with `--skip-register`, don't run it again.
561
606
 
562
607
  ## 12. Use it as an agent would
563
608
 
@@ -594,16 +639,25 @@ can keep an app current: a cron job, a CI workflow, or an agent that just publis
594
639
  ## Using Fangorn apps from an agent
595
640
 
596
641
  `fangorn-mcp` is one MCP server for every Fangorn app: a new app needs no new
597
- registration. Install it through npm (node ≥ 20):
642
+ registration. In Claude Code, the `fangorn-index` plugin installs it with the skill that uses it:
643
+
644
+ ```sh
645
+ claude plugin marketplace add fangorn-network/westmarch && claude plugin install fangorn-index@fangorn
646
+ ```
647
+
648
+ App owners add `fangorn-builder@fangorn` (the `fangorn-app` and `fangorn-improve` skills).
649
+ Without the plugin, install it through npm (node ≥ 20):
598
650
 
599
651
  ```sh
600
- claude mcp add fangorn -e FANGORN_LOG_WINDOW=100000 -- \
652
+ claude mcp add fangorn -- \
601
653
  npx -y -p @fangorn-network/westmarch -p @huggingface/transformers fangorn-mcp
602
654
  ```
603
655
 
604
656
  Without `-p @huggingface/transformers`, the install is ~500 MB lighter and `search` ranks by
605
- words, not meaning. Without `FANGORN_LOG_WINDOW`, `list-apps` scans the chain 1,000 blocks
606
- per call and takes minutes.
657
+ words, not meaning. It lists the apps on Base Sepolia; add `-e FANGORN_NETWORK=arbitrumSepolia`
658
+ before `--` for those still on Arbitrum Sepolia. For private apps, `FANGORN_MCP_WALLET_KEY` lets it pay
659
+ (see [A private app](#a-private-app-the-data-is-the-product)); the plugin reads it from your
660
+ environment, while `-e` stores it in `~/.claude.json` in plain text.
607
661
 
608
662
  [docs/mcp.md](mcp.md) has the full setup: other MCP clients, every setting, running from
609
663
  source, and troubleshooting. A single-file binary (`bun build-bin.js`) exists but is not
@@ -727,6 +781,9 @@ const { contents } = await fangorn.readNamespace(timelines[0].owner, namespaces[
727
781
  | `listApps` takes forever | `fromBlock` is too early; the scan is 1000 blocks per RPC call |
728
782
  | `app agent`: "ERC-8004 registration pins the registration file to IPFS" | no Pinata JWT in `fangorn init` |
729
783
  | `app agent` signs as the wrong wallet | `~/.fangorn/config.json` beats `ETH_PRIVATE_KEY` |
784
+ | `app agent`: "replacement transaction underpriced" | a nonce race after the mint; the agent exists, so rerun with `--skip-register` (step 11) |
785
+ | the 8004 registration says `x402Support: false` | no card skill is tagged `x402`; rebuild the card, then `fangorn app agent <card> --update <agentId>` |
786
+ | a private app's page says the data is still being indexed | the cron hasn't run yet; `westmarch-ship app.json --index` |
730
787
  | search on the page matches words, never meaning | the bundler pre-bundled westmarch; `optimizeDeps.exclude` it |
731
788
  | an agent's first call returns empty, later calls work | the tools registered before their data loaded (step 8) |
732
789
  | an agent opens the page and finds no tools | `card.url` is not the page that registers them |
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fangorn-network/westmarch",
3
- "version": "0.0.20-dev",
4
- "description": "Publisher and consumer surfaces for a Fangorn app: shape a graph, publish it, read it back as a searchable, agent-drivable catalog",
3
+ "version": "2026.10.22.0-dev",
4
+ "description": "all-in-one builder for fangorn apps",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "exports": {
@@ -38,13 +38,14 @@
38
38
  "build": "tsc -p .",
39
39
  "prepare": "tsc -p .",
40
40
  "test": "node scripts/test.js",
41
- "lint": "node src/publish/lint.js"
41
+ "lint": "node src/publish/lint.js",
42
+ "e2e:worker": "node scripts/e2e-worker.mjs"
42
43
  },
43
44
  "dependencies": {
44
45
  "@fangorn-network/markov": "^0.1.0"
45
46
  },
46
47
  "peerDependencies": {
47
- "@fangorn-network/sdk": "^2026.9.22-dev",
48
+ "@fangorn-network/sdk": "^2026.10.21-dev",
48
49
  "@huggingface/transformers": "^4.2.0",
49
50
  "@noble/curves": "^1.9.1",
50
51
  "viem": "^2.55.1"
@@ -55,17 +56,19 @@
55
56
  }
56
57
  },
57
58
  "devDependencies": {
58
- "@fangorn-network/sdk": "^2026.9.22-dev",
59
+ "@fangorn-network/sdk": "^2026.10.21-dev",
59
60
  "@huggingface/transformers": "^4.2.0",
60
61
  "@noble/curves": "^1.9.1",
61
62
  "@privy-io/react-auth": "^3.47.0",
62
63
  "@stripe/stripe-js": "^10.0.0",
64
+ "graphql": "^16.14.2",
63
65
  "react": "^19.3.0",
64
66
  "react-dom": "^19.3.0",
65
67
  "typescript": "^5.9.3",
66
68
  "viem": "^2.56.3"
67
69
  },
68
70
  "bin": {
71
+ "westmarch": "./src/publish/init.js",
69
72
  "westmarch-publish": "./src/publish/cli.js",
70
73
  "westmarch-view": "./src/publish/view-cli.js",
71
74
  "westmarch-ship": "./src/publish/ship.js",
@@ -76,11 +79,13 @@
76
79
  },
77
80
  "files": [
78
81
  "src",
82
+ "template",
79
83
  "docs/app-to-agent.md",
80
84
  "site/agent.js",
81
85
  "site/dist",
82
86
  "site/feed.js",
83
87
  "site/worker.js",
88
+ "site/no-model.js",
84
89
  "site/store.js",
85
90
  "dist/ts",
86
91
  "plugin/scripts/fx.mjs"
@@ -92,16 +92,14 @@ const sources = async () => {
92
92
  return chainSources();
93
93
  };
94
94
 
95
- // Every app bound on chain, the scan fangorn-mcp's list-apps runs. From the
96
- // current AppRegistry's first event on Arbitrum Sepolia; --from-block overrides.
95
+ // Every app bound on chain, the scan fangorn-mcp's list-apps runs, on FANGORN_NETWORK
96
+ // (default arbitrumSepolia). From its AppRegistry's deployment; --from-block overrides.
97
97
  async function chainSources() {
98
- // The SDK scans 1,000 blocks per log request by default, which on the public
99
- // RPC takes minutes; fangorn-mcp's install line sets the same window.
100
- process.env.FANGORN_LOG_WINDOW ??= "100000";
101
- const [{ Fangorn, FangornConfig }, { generatePrivateKey }] = await Promise.all([
102
- import("@fangorn-network/sdk"), import("viem/accounts")]);
103
- const fangorn = Fangorn.create({ privateKey: generatePrivateKey(), config: FangornConfig }); // reads only
104
- const { sources } = await sourcesFromChain(fangorn, { fromBlock: BigInt(flag("from-block", "311637349")) });
98
+ const [{ Fangorn }, { generatePrivateKey }, { network }] = await Promise.all([
99
+ import("@fangorn-network/sdk"), import("viem/accounts"), import("../../src/publish/view.js")]);
100
+ const config = await network();
101
+ const fangorn = Fangorn.create({ privateKey: generatePrivateKey(), config }); // reads only
102
+ const { sources } = await sourcesFromChain(fangorn, { fromBlock: BigInt(flag("from-block", String(config.appRegistryFromBlock))) });
105
103
  return sources;
106
104
  }
107
105
 
@@ -1 +1 @@
1
- import{$ as e,D as t}from"./privy-context-81KmsBw2-CjWGzyg7.js";import{t as n}from"./jsx-runtime-BbDfbRii.js";import{t as r}from"./createLucideIcon-IPW50ckY.js";import{n as i}from"./modal-context-CwmSeFcv-DruX9J1E.js";import{t as a}from"./ScreenLayout-OwaQQcxH-CrQM6kvA.js";var o=r(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),s=n(),c=({title:e=`Account not found`,subtitle:t,appName:n=`this app`,ctaText:r=`Try logging in again`,onRetry:i})=>(0,s.jsx)(a,{title:e,subtitle:t||`Please try logging in again or go to ${n} to create an account.`,icon:o,iconVariant:`warning`,primaryCta:{label:r,onClick:i},watermark:!0}),l={component:()=>{let{navigate:n,setModalData:r,data:a}=i(),o=t(),{getAuthMeta:l,client:u}=e();return(0,s.jsx)(c,{appName:o?.name,onRetry:()=>{let e=l();r({...a,login:{...a?.login,...e?.disableSignup?{disableSignup:!0}:{}}}),u?.authFlow&&(u.authFlow=void 0),n(`LandingScreen`)}})}};export{l as AccountNotFoundScreen,l as default,c as AccountNotFoundScreenView};
1
+ import{$ as e,D as t}from"./privy-context-81KmsBw2-DiR6-Yq8.js";import{t as n}from"./jsx-runtime-CndCZlyt.js";import{t as r}from"./createLucideIcon-BsERoFTA.js";import{n as i}from"./modal-context-CwmSeFcv-DPWNJrfK.js";import{t as a}from"./ScreenLayout-OwaQQcxH-cfOTmyl0.js";var o=r(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),s=n(),c=({title:e=`Account not found`,subtitle:t,appName:n=`this app`,ctaText:r=`Try logging in again`,onRetry:i})=>(0,s.jsx)(a,{title:e,subtitle:t||`Please try logging in again or go to ${n} to create an account.`,icon:o,iconVariant:`warning`,primaryCta:{label:r,onClick:i},watermark:!0}),l={component:()=>{let{navigate:n,setModalData:r,data:a}=i(),o=t(),{getAuthMeta:l,client:u}=e();return(0,s.jsx)(c,{appName:o?.name,onRetry:()=>{let e=l();r({...a,login:{...a?.login,...e?.disableSignup?{disableSignup:!0}:{}}}),u?.authFlow&&(u.authFlow=void 0),n(`LandingScreen`)}})}};export{l as AccountNotFoundScreen,l as default,c as AccountNotFoundScreenView};
@@ -1,4 +1,4 @@
1
- import{s as e}from"./rolldown-runtime-BcKkbAw3.js";import{D as t}from"./privy-context-81KmsBw2-CjWGzyg7.js";import{t as n}from"./jsx-runtime-BbDfbRii.js";import{t as r}from"./react-DrJ0MmMO.js";import{n as i,t as a}from"./landmark-CH6LV6F0.js";import{t as o}from"./wallet-Bn85Sg2W.js";import{n as s}from"./modal-context-CwmSeFcv-DruX9J1E.js";import{c}from"./Loader-UAZqxsnw-Cy7hEE2f.js";import{t as l}from"./index-CWARkn2w-Cezl_uBr.js";import{n as u,t as d}from"./GooglePay-B53WnudL-BX5_WtCx.js";import{n as f,r as p,t as m}from"./isPaymentRequestAvailable-Bq1cemEn-By6r0dVB.js";import{r as h}from"./styles-DVyDvTdj-BTABn2K8.js";import{c as g,l as _,p as v}from"./styles-hslXy6xG-D-49b1rk.js";import{l as y,y as b}from"./use-headless-crypto-deposit-Yn-QRLB3-LUIVFBSd.js";var x=n(),S=e(r(),1),C={component:()=>{let e=b(),{onUserCloseViaDialogOrKeybindRef:n}=s(),r=t(),c=(0,S.useRef)(!1),C=m(f),O=m(p),[k,A]=(0,S.useState)(!1),j=C?`APPLE_PAY`:!1===C&&O?`GOOGLE_PAY`:null,M=!0===C||!1===C&&O!==void 0,N=!e?.startFiat||M||k;(0,S.useEffect)((()=>{let e=window.setTimeout((()=>A(!0)),2e3);return()=>window.clearTimeout(e)}),[]),(0,S.useEffect)((()=>{e&&(c.current=!1)}),[e]);let P=(0,S.useRef)(null);(0,S.useEffect)((()=>{e&&!e.error&&N&&P.current!==e&&(P.current=e,e.recordRowsViewed?.({walletPay:e.startFiat?j:void 0,walletPayTimedOut:e.startFiat?!M:void 0}))}),[N,e,j,M]);let F=(0,S.useCallback)((async()=>{!c.current&&e&&(c.current=!0,y(),await e.onCancel())}),[e]);if((0,S.useEffect)((()=>(n.current=F,()=>{n.current===F&&(n.current=null)})),[F,n]),!e)return null;if(e.error)return(0,x.jsx)(g,{title:`Unable to add funds`,subtitle:e.error,showClose:!0,onClose:F,primaryCta:{label:`Close`,onClick:F}});let I=async t=>{c.current||(c.current=!0,await e.startFiat?.(t))};return(0,x.jsx)(g,{title:`Pay with`,subtitle:`Debit cards typically have higher success rates than credit cards, even with Apple Pay or Google Pay.`,showClose:!0,onClose:F,children:N?(0,x.jsxs)(h,{style:{marginTop:`1rem`},$colorScheme:r.appearance.palette.colorScheme,children:[e.startFiat&&(0,x.jsxs)(_,{onClick:()=>I(`CREDIT_DEBIT_CARD`),children:[(0,x.jsx)(T,{children:(0,x.jsx)(i,{})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Debit or credit card`}),(0,x.jsx)(D,{children:`Less than 10 minutes`})]})]}),e.startFiat&&j===`APPLE_PAY`&&(0,x.jsxs)(_,{onClick:()=>I(`APPLE_PAY`),children:[(0,x.jsx)(T,{children:(0,x.jsx)(u,{width:18,height:18})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Apple Pay`}),(0,x.jsx)(D,{children:`Less than 10 minutes`})]})]}),e.startFiat&&j===`GOOGLE_PAY`&&(0,x.jsxs)(_,{onClick:()=>I(`GOOGLE_PAY`),children:[(0,x.jsx)(T,{children:(0,x.jsx)(d,{width:18,height:18})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Google Pay`}),(0,x.jsx)(D,{children:`Less than 10 minutes`})]})]}),e.startFiat&&(0,x.jsxs)(_,{onClick:()=>I(`BANK`),children:[(0,x.jsx)(T,{children:(0,x.jsx)(a,{})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Bank account`}),(0,x.jsx)(D,{children:`1–2 days`})]})]}),e.startCrypto&&(0,x.jsxs)(_,{onClick:async()=>{c.current||(c.current=!0,await e.startCrypto?.())},children:[(0,x.jsx)(T,{children:(0,x.jsx)(o,{})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Crypto wallet or exchange`}),(0,x.jsx)(D,{children:`Instant`})]})]})]}):(0,x.jsx)(w,{children:(0,x.jsx)(l,{size:`50px`})})})}},w=c.div`
1
+ import{s as e}from"./rolldown-runtime-Bjp52BOI.js";import{D as t}from"./privy-context-81KmsBw2-DiR6-Yq8.js";import{t as n}from"./jsx-runtime-CndCZlyt.js";import{t as r}from"./react-BfYA1q0G.js";import{n as i,t as a}from"./landmark-BZPqMFEf.js";import{t as o}from"./wallet-BNI12IYk.js";import{n as s}from"./modal-context-CwmSeFcv-DPWNJrfK.js";import{c}from"./Loader-UAZqxsnw-DJEVblm1.js";import{t as l}from"./index-CWARkn2w-DxuckIFn.js";import{n as u,t as d}from"./GooglePay-B53WnudL-BGiVpB8y.js";import{n as f,r as p,t as m}from"./isPaymentRequestAvailable-Bq1cemEn-Cjf3l05I.js";import{r as h}from"./styles-DVyDvTdj-CjsWqAld.js";import{c as g,l as _,p as v}from"./styles-hslXy6xG-D5QHIrJU.js";import{l as y,y as b}from"./use-headless-crypto-deposit-Yn-QRLB3-CQqeyhGY.js";var x=n(),S=e(r(),1),C={component:()=>{let e=b(),{onUserCloseViaDialogOrKeybindRef:n}=s(),r=t(),c=(0,S.useRef)(!1),C=m(f),O=m(p),[k,A]=(0,S.useState)(!1),j=C?`APPLE_PAY`:!1===C&&O?`GOOGLE_PAY`:null,M=!0===C||!1===C&&O!==void 0,N=!e?.startFiat||M||k;(0,S.useEffect)((()=>{let e=window.setTimeout((()=>A(!0)),2e3);return()=>window.clearTimeout(e)}),[]),(0,S.useEffect)((()=>{e&&(c.current=!1)}),[e]);let P=(0,S.useRef)(null);(0,S.useEffect)((()=>{e&&!e.error&&N&&P.current!==e&&(P.current=e,e.recordRowsViewed?.({walletPay:e.startFiat?j:void 0,walletPayTimedOut:e.startFiat?!M:void 0}))}),[N,e,j,M]);let F=(0,S.useCallback)((async()=>{!c.current&&e&&(c.current=!0,y(),await e.onCancel())}),[e]);if((0,S.useEffect)((()=>(n.current=F,()=>{n.current===F&&(n.current=null)})),[F,n]),!e)return null;if(e.error)return(0,x.jsx)(g,{title:`Unable to add funds`,subtitle:e.error,showClose:!0,onClose:F,primaryCta:{label:`Close`,onClick:F}});let I=async t=>{c.current||(c.current=!0,await e.startFiat?.(t))};return(0,x.jsx)(g,{title:`Pay with`,subtitle:`Debit cards typically have higher success rates than credit cards, even with Apple Pay or Google Pay.`,showClose:!0,onClose:F,children:N?(0,x.jsxs)(h,{style:{marginTop:`1rem`},$colorScheme:r.appearance.palette.colorScheme,children:[e.startFiat&&(0,x.jsxs)(_,{onClick:()=>I(`CREDIT_DEBIT_CARD`),children:[(0,x.jsx)(T,{children:(0,x.jsx)(i,{})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Debit or credit card`}),(0,x.jsx)(D,{children:`Less than 10 minutes`})]})]}),e.startFiat&&j===`APPLE_PAY`&&(0,x.jsxs)(_,{onClick:()=>I(`APPLE_PAY`),children:[(0,x.jsx)(T,{children:(0,x.jsx)(u,{width:18,height:18})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Apple Pay`}),(0,x.jsx)(D,{children:`Less than 10 minutes`})]})]}),e.startFiat&&j===`GOOGLE_PAY`&&(0,x.jsxs)(_,{onClick:()=>I(`GOOGLE_PAY`),children:[(0,x.jsx)(T,{children:(0,x.jsx)(d,{width:18,height:18})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Google Pay`}),(0,x.jsx)(D,{children:`Less than 10 minutes`})]})]}),e.startFiat&&(0,x.jsxs)(_,{onClick:()=>I(`BANK`),children:[(0,x.jsx)(T,{children:(0,x.jsx)(a,{})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Bank account`}),(0,x.jsx)(D,{children:`1–2 days`})]})]}),e.startCrypto&&(0,x.jsxs)(_,{onClick:async()=>{c.current||(c.current=!0,await e.startCrypto?.())},children:[(0,x.jsx)(T,{children:(0,x.jsx)(o,{})}),(0,x.jsxs)(E,{children:[(0,x.jsx)(v,{children:`Crypto wallet or exchange`}),(0,x.jsx)(D,{children:`Instant`})]})]})]}):(0,x.jsx)(w,{children:(0,x.jsx)(l,{size:`50px`})})})}},w=c.div`
2
2
  display: flex;
3
3
  justify-content: center;
4
4
  align-items: center;
@@ -1,4 +1,4 @@
1
- import{s as e}from"./rolldown-runtime-BcKkbAw3.js";import{t}from"./jsx-runtime-BbDfbRii.js";import{t as n}from"./react-DrJ0MmMO.js";import{t as r}from"./check-BPgcwEPP.js";import{t as i}from"./copy-Ckr0AkL6.js";import{c as a}from"./Loader-UAZqxsnw-Cy7hEE2f.js";import{o}from"./ModalFooter-BCuEK_nz-c-khvG4Y.js";import{p as s}from"./storage-Ufl800Ne-D0bZBw-H.js";var c=t(),l=e(n(),1),u=({address:e,showCopyIcon:t,url:n,className:a})=>{let[u,m]=(0,l.useState)(!1);function h(t){t.stopPropagation(),navigator.clipboard.writeText(e).then((()=>m(!0))).catch(console.error)}return(0,l.useEffect)((()=>{if(u){let e=setTimeout((()=>m(!1)),3e3);return()=>clearTimeout(e)}}),[u]),(0,c.jsxs)(d,n?{children:[(0,c.jsx)(p,{title:e,className:a,href:`${n}/address/${e}`,target:`_blank`,children:s(e)}),t&&(0,c.jsx)(o,{onClick:h,size:`sm`,style:{gap:`0.375rem`},children:(0,c.jsxs)(c.Fragment,u?{children:[`Copied`,(0,c.jsx)(r,{size:16})]}:{children:[`Copy`,(0,c.jsx)(i,{size:16})]})})]}:{children:[(0,c.jsx)(f,{title:e,className:a,children:s(e)}),t&&(0,c.jsx)(o,{onClick:h,size:`sm`,style:{gap:`0.375rem`,fontSize:`14px`},children:(0,c.jsxs)(c.Fragment,u?{children:[`Copied`,(0,c.jsx)(r,{size:14})]}:{children:[`Copy`,(0,c.jsx)(i,{size:14})]})})]})},d=a.span`
1
+ import{s as e}from"./rolldown-runtime-Bjp52BOI.js";import{t}from"./jsx-runtime-CndCZlyt.js";import{t as n}from"./react-BfYA1q0G.js";import{t as r}from"./check-DHnllI8N.js";import{t as i}from"./copy-DMOX_yn7.js";import{c as a}from"./Loader-UAZqxsnw-DJEVblm1.js";import{o}from"./ModalFooter-BCuEK_nz-C_71qsaz.js";import{p as s}from"./storage-Ufl800Ne-1qCR2JMO.js";var c=t(),l=e(n(),1),u=({address:e,showCopyIcon:t,url:n,className:a})=>{let[u,m]=(0,l.useState)(!1);function h(t){t.stopPropagation(),navigator.clipboard.writeText(e).then((()=>m(!0))).catch(console.error)}return(0,l.useEffect)((()=>{if(u){let e=setTimeout((()=>m(!1)),3e3);return()=>clearTimeout(e)}}),[u]),(0,c.jsxs)(d,n?{children:[(0,c.jsx)(p,{title:e,className:a,href:`${n}/address/${e}`,target:`_blank`,children:s(e)}),t&&(0,c.jsx)(o,{onClick:h,size:`sm`,style:{gap:`0.375rem`},children:(0,c.jsxs)(c.Fragment,u?{children:[`Copied`,(0,c.jsx)(r,{size:16})]}:{children:[`Copy`,(0,c.jsx)(i,{size:16})]})})]}:{children:[(0,c.jsx)(f,{title:e,className:a,children:s(e)}),t&&(0,c.jsx)(o,{onClick:h,size:`sm`,style:{gap:`0.375rem`,fontSize:`14px`},children:(0,c.jsxs)(c.Fragment,u?{children:[`Copied`,(0,c.jsx)(r,{size:14})]}:{children:[`Copy`,(0,c.jsx)(i,{size:14})]})})]})},d=a.span`
2
2
  display: inline-flex;
3
3
  align-items: center;
4
4
  gap: 0.5rem;
@@ -1,4 +1,4 @@
1
- import"./rolldown-runtime-BcKkbAw3.js";import{$ as e,D as t,i as n}from"./privy-context-81KmsBw2-CjWGzyg7.js";import{t as r}from"./jsx-runtime-BbDfbRii.js";import{t as i}from"./react-DrJ0MmMO.js";import{t as a}from"./createLucideIcon-IPW50ckY.js";import{t as o}from"./external-link-D-uehwM2.js";import{n as s}from"./modal-context-CwmSeFcv-DruX9J1E.js";import{c}from"./Loader-UAZqxsnw-Cy7hEE2f.js";import{l}from"./ModalFooter-BCuEK_nz-c-khvG4Y.js";import{t as u}from"./ScreenLayout-OwaQQcxH-CrQM6kvA.js";import{t as d}from"./shouldProceedtoEmbeddedWalletCreationFlow-B3vyavrh-BK_FBkaE.js";var f=a(`file-check`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m9 15 2 2 4-4`,key:`1grp1n`}]]),p=r();i();var m={component:()=>{let{user:r,logout:i}=n(),{onUserCloseViaDialogOrKeybindRef:a,setModalData:o,navigate:c}=s(),l=t(),{acceptTerms:u,closePrivyModal:f,createAnalyticsEvent:m}=e(),g=e=>{e?.preventDefault(),f({shouldCallAuthOnSuccess:!1}),i()};return a.current=g,(0,p.jsx)(h,{termsAndConditionsUrl:l?.legal.termsAndConditionsUrl,privacyPolicyUrl:l?.legal.privacyPolicyUrl,onAccept:async e=>{e?.preventDefault(),await u(),r&&d(r,l.embeddedWallets)?(o({createWallet:{onSuccess:()=>{},onFailure:e=>{console.error(e),m({eventName:`embedded_wallet_creation_failure_logout`,payload:{error:e,screen:`AffirmativeConsentScreen`}}),i()},callAuthOnSuccessOnClose:!0}}),c(`EmbeddedWalletOnAccountCreateScreen`)):f()},onDecline:g})}},h=({termsAndConditionsUrl:e,privacyPolicyUrl:t,onAccept:n,onDecline:r,title:i=`One last step`,subtitle:a=`By signing up, you agree to our terms and privacy policy.`})=>(0,p.jsx)(u,{title:i,subtitle:a,icon:f,primaryCta:{label:`Accept`,onClick:n},secondaryCta:{label:`No thanks`,onClick:r},watermark:!0,children:(e||t)&&(0,p.jsxs)(g,{children:[e&&(0,p.jsxs)(l,{variant:`muted`,href:e,target:`_blank`,size:`lg`,style:{justifyContent:`space-between`},as:`a`,children:[`View Terms`,(0,p.jsx)(o,{width:16,height:16,strokeWidth:2.25})]}),t&&(0,p.jsxs)(l,{variant:`muted`,href:t,target:`_blank`,size:`lg`,style:{justifyContent:`space-between`},as:`a`,children:[`View Privacy Policy`,(0,p.jsx)(o,{width:16,height:16,strokeWidth:2.25})]})]})}),g=c.div`
1
+ import"./rolldown-runtime-Bjp52BOI.js";import{$ as e,D as t,i as n}from"./privy-context-81KmsBw2-DiR6-Yq8.js";import{t as r}from"./jsx-runtime-CndCZlyt.js";import{t as i}from"./react-BfYA1q0G.js";import{t as a}from"./createLucideIcon-BsERoFTA.js";import{t as o}from"./external-link-BBPG3rG7.js";import{n as s}from"./modal-context-CwmSeFcv-DPWNJrfK.js";import{c}from"./Loader-UAZqxsnw-DJEVblm1.js";import{l}from"./ModalFooter-BCuEK_nz-C_71qsaz.js";import{t as u}from"./ScreenLayout-OwaQQcxH-cfOTmyl0.js";import{t as d}from"./shouldProceedtoEmbeddedWalletCreationFlow-B3vyavrh-BkAKsRNi.js";var f=a(`file-check`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m9 15 2 2 4-4`,key:`1grp1n`}]]),p=r();i();var m={component:()=>{let{user:r,logout:i}=n(),{onUserCloseViaDialogOrKeybindRef:a,setModalData:o,navigate:c}=s(),l=t(),{acceptTerms:u,closePrivyModal:f,createAnalyticsEvent:m}=e(),g=e=>{e?.preventDefault(),f({shouldCallAuthOnSuccess:!1}),i()};return a.current=g,(0,p.jsx)(h,{termsAndConditionsUrl:l?.legal.termsAndConditionsUrl,privacyPolicyUrl:l?.legal.privacyPolicyUrl,onAccept:async e=>{e?.preventDefault(),await u(),r&&d(r,l.embeddedWallets)?(o({createWallet:{onSuccess:()=>{},onFailure:e=>{console.error(e),m({eventName:`embedded_wallet_creation_failure_logout`,payload:{error:e,screen:`AffirmativeConsentScreen`}}),i()},callAuthOnSuccessOnClose:!0}}),c(`EmbeddedWalletOnAccountCreateScreen`)):f()},onDecline:g})}},h=({termsAndConditionsUrl:e,privacyPolicyUrl:t,onAccept:n,onDecline:r,title:i=`One last step`,subtitle:a=`By signing up, you agree to our terms and privacy policy.`})=>(0,p.jsx)(u,{title:i,subtitle:a,icon:f,primaryCta:{label:`Accept`,onClick:n},secondaryCta:{label:`No thanks`,onClick:r},watermark:!0,children:(e||t)&&(0,p.jsxs)(g,{children:[e&&(0,p.jsxs)(l,{variant:`muted`,href:e,target:`_blank`,size:`lg`,style:{justifyContent:`space-between`},as:`a`,children:[`View Terms`,(0,p.jsx)(o,{width:16,height:16,strokeWidth:2.25})]}),t&&(0,p.jsxs)(l,{variant:`muted`,href:t,target:`_blank`,size:`lg`,style:{justifyContent:`space-between`},as:`a`,children:[`View Privacy Policy`,(0,p.jsx)(o,{width:16,height:16,strokeWidth:2.25})]})]})}),g=c.div`
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  gap: 12px;
@@ -1 +1 @@
1
- import"./rolldown-runtime-BcKkbAw3.js";import{D as e}from"./privy-context-81KmsBw2-CjWGzyg7.js";import{t}from"./jsx-runtime-BbDfbRii.js";import{t as n}from"./react-DrJ0MmMO.js";import{t as r}from"./lock-DcskI4Bb.js";import{n as i}from"./modal-context-CwmSeFcv-DruX9J1E.js";import{t as a}from"./ScreenLayout-OwaQQcxH-CrQM6kvA.js";import{t as o}from"./safe-url-D7SRPu33-CkMedGro.js";var s=t();n();var c=({title:e=`You don't have access to this app`,subtitle:t=`Have you been invited?`,ctaText:n=`Try another account`,ctaLink:i,onCtaClick:c})=>(0,s.jsx)(a,{title:e,subtitle:t,icon:r,iconVariant:`warning`,primaryCta:{label:n,onClick:()=>{let e=o(i);e?window.open(e,`_blank`,`noopener,noreferrer`):c?.()}},watermark:!0}),l={component:()=>{let{navigate:t}=i(),n=e(),r=n?.allowlistConfig.errorTitle||`You don't have access to this app`,a=n?.allowlistConfig.errorDetail||`Have you been invited?`,o=n?.allowlistConfig.errorCtaText||`Try another account`,l=n?.allowlistConfig.errorCtaLink;return(0,s.jsx)(c,{title:r,subtitle:a,ctaText:o,ctaLink:l??void 0,onCtaClick:()=>{t(`LandingScreen`)}})}};export{l as AllowlistRejectionScreen,l as default,c as AllowlistRejectionScreenView};
1
+ import"./rolldown-runtime-Bjp52BOI.js";import{D as e}from"./privy-context-81KmsBw2-DiR6-Yq8.js";import{t}from"./jsx-runtime-CndCZlyt.js";import{t as n}from"./react-BfYA1q0G.js";import{t as r}from"./lock-DyN_c-ud.js";import{n as i}from"./modal-context-CwmSeFcv-DPWNJrfK.js";import{t as a}from"./ScreenLayout-OwaQQcxH-cfOTmyl0.js";import{t as o}from"./safe-url-D7SRPu33-CkMedGro.js";var s=t();n();var c=({title:e=`You don't have access to this app`,subtitle:t=`Have you been invited?`,ctaText:n=`Try another account`,ctaLink:i,onCtaClick:c})=>(0,s.jsx)(a,{title:e,subtitle:t,icon:r,iconVariant:`warning`,primaryCta:{label:n,onClick:()=>{let e=o(i);e?window.open(e,`_blank`,`noopener,noreferrer`):c?.()}},watermark:!0}),l={component:()=>{let{navigate:t}=i(),n=e(),r=n?.allowlistConfig.errorTitle||`You don't have access to this app`,a=n?.allowlistConfig.errorDetail||`Have you been invited?`,o=n?.allowlistConfig.errorCtaText||`Try another account`,l=n?.allowlistConfig.errorCtaLink;return(0,s.jsx)(c,{title:r,subtitle:a,ctaText:o,ctaLink:l??void 0,onCtaClick:()=>{t(`LandingScreen`)}})}};export{l as AllowlistRejectionScreen,l as default,c as AllowlistRejectionScreenView};