@seams/wallet 0.6.0 → 0.6.1

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 (128) hide show
  1. package/dist/.build-inputs.sha256 +1 -1
  2. package/dist/esm/SeamsWeb/SeamsWeb.js +1 -0
  3. package/dist/esm/SeamsWeb/operations/registration/registration.js +170 -33
  4. package/dist/esm/SeamsWeb/operations/registration/registrationTiming.js +33 -2
  5. package/dist/esm/SeamsWeb/signingSurface/BrowserSigningSurface.js +3 -0
  6. package/dist/esm/SeamsWeb/walletIframe/client/overlay/overlay-controller.js +63 -10
  7. package/dist/esm/core/rpcClients/relayer/walletRegistration.js +88 -4
  8. package/dist/esm/core/signingEngine/session/passkey/prfCache.js +24 -4
  9. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +5 -3
  10. package/dist/esm/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +40 -3
  11. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +31 -35
  12. package/dist/esm/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +64 -10
  13. package/dist/esm/core/signingEngine/walletCustody/ceremonyDriver.js +1 -1
  14. package/dist/esm/react/SeamsWeb/SeamsWeb.js +1 -0
  15. package/dist/esm/react/SeamsWeb/operations/registration/registration.js +170 -33
  16. package/dist/esm/react/SeamsWeb/operations/registration/registrationTiming.js +33 -2
  17. package/dist/esm/react/SeamsWeb/signingSurface/BrowserSigningSurface.js +3 -0
  18. package/dist/esm/react/SeamsWeb/walletIframe/client/overlay/overlay-controller.js +63 -10
  19. package/dist/esm/react/core/rpcClients/relayer/walletRegistration.js +88 -4
  20. package/dist/esm/react/core/signingEngine/session/passkey/prfCache.js +24 -4
  21. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.js +5 -3
  22. package/dist/esm/react/core/signingEngine/uiConfirm/PasskeyMpcSessionManager.js +40 -3
  23. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/TransactionReceipt.js +31 -35
  24. package/dist/esm/react/core/signingEngine/uiConfirm/ui/preact/mountConfirmationSurface.js +64 -10
  25. package/dist/esm/react/core/signingEngine/walletCustody/ceremonyDriver.js +1 -1
  26. package/dist/esm/react/shared-ts/src/utils/routerAbEd25519Yao.js +13 -1
  27. package/dist/esm/sdk/{adapters-Dgy69gf0.js → adapters-LgE4nnos.js} +95 -45
  28. package/dist/esm/sdk/{defaultConfigs-DJCLCrg9.js → defaultConfigs-CyNOW4Sy.js} +1 -1
  29. package/dist/{public/sdk/ecdsaCapabilityManifest-DA_fklIs.js → esm/sdk/ecdsaCapabilityManifest-C8itxV9S.js} +1 -1
  30. package/dist/{public/sdk/ecdsaPresignLifecycle-D_KCktCj.js → esm/sdk/ecdsaPresignLifecycle-CnSnzoRJ.js} +13 -1
  31. package/dist/esm/sdk/{ed25519SeedMaterial-0VmS6K9P.js → ed25519SeedMaterial-Cghz8-XB.js} +2 -2
  32. package/dist/esm/sdk/{exactSessionState-C2aAv_ED.js → exactSessionState-Bt0HforB.js} +64 -11
  33. package/dist/esm/sdk/{export-viewer-host-NhjFdpm-.js → export-viewer-host-B3K81QGA.js} +1 -1
  34. package/dist/esm/sdk/{host-DACTruOj.js → host-Y_xmIzPO.js} +2 -2
  35. package/dist/esm/sdk/{localOnly-DTNq69fJ.js → localOnly-B5TYHJiq.js} +2 -2
  36. package/dist/{public/sdk/nearEd25519YaoMaterialActivation-4AuGG2DG.js → esm/sdk/nearEd25519YaoMaterialActivation-BLxVE6E5.js} +89 -5
  37. package/dist/esm/sdk/{nearEd25519YaoSigningPreparation-jiGcQylO.js → nearEd25519YaoSigningPreparation-DX6xG-IW.js} +1 -1
  38. package/dist/esm/sdk/{prfCache-Dwwauj4v.js → prfCache-CgAr-VEU.js} +24 -4
  39. package/dist/{public/sdk/recovery-entrypoint-CFTX6PFZ.js → esm/sdk/recovery-entrypoint-D39R1avB.js} +3 -3
  40. package/dist/{public/sdk/registration-CuP1WmQu.js → esm/sdk/registration-BtPLgKHk.js} +1 -1
  41. package/dist/esm/sdk/{registration-D8nYJKec.js → registration-D-istkMZ.js} +253 -38
  42. package/dist/esm/sdk/{registrationPreparationPreload-DDe0sbZi.js → registrationPreparationPreload-CvnlDCVn.js} +2 -2
  43. package/dist/{public/sdk/router-DeX_cJ2f.js → esm/sdk/router-CeFS9SgT.js} +3 -3
  44. package/dist/{public/sdk/routerAbNormalSigning-BGpRKRAj.js → esm/sdk/routerAbNormalSigning-DktZKnf1.js} +1 -1
  45. package/dist/{public/sdk/runtime-auth-Ch00YcH5.js → esm/sdk/runtime-auth-B7z1ANNp.js} +8 -8
  46. package/dist/esm/sdk/{runtime-device-link-CEhVZYAw.js → runtime-device-link-B8HGDakg.js} +4 -4
  47. package/dist/esm/sdk/{runtime-ecdsa-tempo-B-qMRrmx.js → runtime-ecdsa-tempo-DKdS5-us.js} +5 -5
  48. package/dist/{public/sdk/runtime-email-otp-giyMPib8.js → esm/sdk/runtime-email-otp-D5bxhdyG.js} +4 -4
  49. package/dist/{public/sdk/runtime-export-CV-6G1Oy.js → esm/sdk/runtime-export--hvNrx8l.js} +4 -4
  50. package/dist/{public/sdk/runtime-near-DoDcS88O.js → esm/sdk/runtime-near-CEexHoug.js} +4 -4
  51. package/dist/{public/sdk/runtime-preferences-Canyenle.js → esm/sdk/runtime-preferences-BiqPp1lV.js} +4 -4
  52. package/dist/esm/sdk/{runtime-recovery-lWyILD1g.js → runtime-recovery-BYu1gDq_.js} +4 -4
  53. package/dist/esm/sdk/{runtimeContext-BdTaYxJD.js → runtimeContext-CH97jPZ0.js} +80 -37
  54. package/dist/{public/sdk/runtimeLoader-Dxn8UA8B.js → esm/sdk/runtimeLoader-BFAmJAbu.js} +9 -9
  55. package/dist/esm/sdk/{secp256k1-CQFsI3qQ.js → secp256k1-Cr1jBW1n.js} +3 -3
  56. package/dist/esm/sdk/{signEvmFamily-CZLET02E.js → signEvmFamily-Dxk4sBPY.js} +7 -7
  57. package/dist/esm/sdk/{signNear-BeUWiWm_.js → signNear-B0OCVKoH.js} +6 -6
  58. package/dist/esm/sdk/{signerLoader-C_w8vuhm.js → signerLoader-D0WU1jq_.js} +1 -1
  59. package/dist/{public/sdk/transactionState-Dd13hMoY.js → esm/sdk/transactionState-Bpm4GamO.js} +2 -2
  60. package/dist/esm/sdk/tx-confirm-ui.js +134 -93
  61. package/dist/esm/sdk/wallet-iframe-host-ecdsa.js +1 -1
  62. package/dist/esm/sdk/wallet-iframe-host-full.js +1 -1
  63. package/dist/esm/sdk/wallet-iframe-host-near.js +1 -1
  64. package/dist/esm/sdk/wallet-iframe-host-runtime.js +1 -1
  65. package/dist/esm/sdk/wallet-ui.css +85 -31
  66. package/dist/{public/sdk/walletRecoveryCommit-DNvzgeIX.js → esm/sdk/walletRecoveryCommit-G6w6N5RV.js} +3 -3
  67. package/dist/esm/sdk/{warmSessionHydration-CCKeEIIy.js → warmSessionHydration-DDNYdTCz.js} +1 -1
  68. package/dist/esm/shared-ts/src/utils/routerAbEd25519Yao.js +13 -1
  69. package/dist/public/headers.manifest.json +1 -1
  70. package/dist/public/sdk/{adapters-Dgy69gf0.js → adapters-LgE4nnos.js} +95 -45
  71. package/dist/public/sdk/{defaultConfigs-DJCLCrg9.js → defaultConfigs-CyNOW4Sy.js} +1 -1
  72. package/dist/{esm/sdk/ecdsaCapabilityManifest-DA_fklIs.js → public/sdk/ecdsaCapabilityManifest-C8itxV9S.js} +1 -1
  73. package/dist/{esm/sdk/ecdsaPresignLifecycle-D_KCktCj.js → public/sdk/ecdsaPresignLifecycle-CnSnzoRJ.js} +13 -1
  74. package/dist/public/sdk/{ed25519SeedMaterial-0VmS6K9P.js → ed25519SeedMaterial-Cghz8-XB.js} +2 -2
  75. package/dist/public/sdk/{exactSessionState-C2aAv_ED.js → exactSessionState-Bt0HforB.js} +64 -11
  76. package/dist/public/sdk/{export-viewer-host-NhjFdpm-.js → export-viewer-host-B3K81QGA.js} +1 -1
  77. package/dist/public/sdk/{host-DACTruOj.js → host-Y_xmIzPO.js} +2 -2
  78. package/dist/public/sdk/{localOnly-DTNq69fJ.js → localOnly-B5TYHJiq.js} +2 -2
  79. package/dist/{esm/sdk/nearEd25519YaoMaterialActivation-4AuGG2DG.js → public/sdk/nearEd25519YaoMaterialActivation-BLxVE6E5.js} +89 -5
  80. package/dist/public/sdk/{nearEd25519YaoSigningPreparation-jiGcQylO.js → nearEd25519YaoSigningPreparation-DX6xG-IW.js} +1 -1
  81. package/dist/public/sdk/{prfCache-Dwwauj4v.js → prfCache-CgAr-VEU.js} +24 -4
  82. package/dist/{esm/sdk/recovery-entrypoint-CFTX6PFZ.js → public/sdk/recovery-entrypoint-D39R1avB.js} +3 -3
  83. package/dist/{esm/sdk/registration-CuP1WmQu.js → public/sdk/registration-BtPLgKHk.js} +1 -1
  84. package/dist/public/sdk/{registration-D8nYJKec.js → registration-D-istkMZ.js} +253 -38
  85. package/dist/public/sdk/{registrationPreparationPreload-DDe0sbZi.js → registrationPreparationPreload-CvnlDCVn.js} +2 -2
  86. package/dist/{esm/sdk/router-DeX_cJ2f.js → public/sdk/router-CeFS9SgT.js} +3 -3
  87. package/dist/{esm/sdk/routerAbNormalSigning-BGpRKRAj.js → public/sdk/routerAbNormalSigning-DktZKnf1.js} +1 -1
  88. package/dist/{esm/sdk/runtime-auth-Ch00YcH5.js → public/sdk/runtime-auth-B7z1ANNp.js} +8 -8
  89. package/dist/public/sdk/{runtime-device-link-CEhVZYAw.js → runtime-device-link-B8HGDakg.js} +4 -4
  90. package/dist/public/sdk/{runtime-ecdsa-tempo-B-qMRrmx.js → runtime-ecdsa-tempo-DKdS5-us.js} +5 -5
  91. package/dist/{esm/sdk/runtime-email-otp-giyMPib8.js → public/sdk/runtime-email-otp-D5bxhdyG.js} +4 -4
  92. package/dist/{esm/sdk/runtime-export-CV-6G1Oy.js → public/sdk/runtime-export--hvNrx8l.js} +4 -4
  93. package/dist/{esm/sdk/runtime-near-DoDcS88O.js → public/sdk/runtime-near-CEexHoug.js} +4 -4
  94. package/dist/{esm/sdk/runtime-preferences-Canyenle.js → public/sdk/runtime-preferences-BiqPp1lV.js} +4 -4
  95. package/dist/public/sdk/{runtime-recovery-lWyILD1g.js → runtime-recovery-BYu1gDq_.js} +4 -4
  96. package/dist/public/sdk/{runtimeContext-BdTaYxJD.js → runtimeContext-CH97jPZ0.js} +80 -37
  97. package/dist/{esm/sdk/runtimeLoader-Dxn8UA8B.js → public/sdk/runtimeLoader-BFAmJAbu.js} +9 -9
  98. package/dist/public/sdk/{secp256k1-CQFsI3qQ.js → secp256k1-Cr1jBW1n.js} +3 -3
  99. package/dist/public/sdk/{signEvmFamily-CZLET02E.js → signEvmFamily-Dxk4sBPY.js} +7 -7
  100. package/dist/public/sdk/{signNear-BeUWiWm_.js → signNear-B0OCVKoH.js} +6 -6
  101. package/dist/public/sdk/{signerLoader-C_w8vuhm.js → signerLoader-D0WU1jq_.js} +1 -1
  102. package/dist/{esm/sdk/transactionState-Dd13hMoY.js → public/sdk/transactionState-Bpm4GamO.js} +2 -2
  103. package/dist/public/sdk/tx-confirm-ui.js +134 -93
  104. package/dist/public/sdk/wallet-iframe-host-ecdsa.js +1 -1
  105. package/dist/public/sdk/wallet-iframe-host-full.js +1 -1
  106. package/dist/public/sdk/wallet-iframe-host-near.js +1 -1
  107. package/dist/public/sdk/wallet-iframe-host-runtime.js +1 -1
  108. package/dist/public/sdk/wallet-ui.css +85 -31
  109. package/dist/{esm/sdk/walletRecoveryCommit-DNvzgeIX.js → public/sdk/walletRecoveryCommit-G6w6N5RV.js} +3 -3
  110. package/dist/public/sdk/{warmSessionHydration-CCKeEIIy.js → warmSessionHydration-DDNYdTCz.js} +1 -1
  111. package/dist/public/sdk/workers/passkey-mpc-session.worker.js +92 -8
  112. package/dist/public/wallet-assets.manifest.json +74 -74
  113. package/dist/public/wallet-service/index.html +4 -4
  114. package/dist/types/wallet/src/SeamsWeb/operations/registration/registration.d.ts +15 -0
  115. package/dist/types/wallet/src/SeamsWeb/operations/registration/registrationTiming.d.ts +11 -1
  116. package/dist/types/wallet/src/SeamsWeb/signingSurface/BrowserSigningSurface.d.ts +6 -0
  117. package/dist/types/wallet/src/SeamsWeb/signingSurface/ports.d.ts +8 -2
  118. package/dist/types/wallet/src/core/rpcClients/relayer/walletRegistration.d.ts +49 -10
  119. package/dist/types/wallet/src/core/signingEngine/session/passkey/prfCache.d.ts +7 -9
  120. package/dist/types/wallet/src/core/signingEngine/session/passkey/warmSessionHydration.d.ts +7 -8
  121. package/dist/types/wallet/src/core/signingEngine/session/passkey/warmSessionMaterialWriter.d.ts +9 -9
  122. package/dist/types/wallet/src/core/signingEngine/session/warmCapabilities/public.d.ts +7 -8
  123. package/dist/types/wallet/src/core/signingEngine/uiConfirm/PasskeyMpcSessionDurableState.d.ts +3 -0
  124. package/dist/types/wallet/src/core/signingEngine/uiConfirm/uiConfirm.types.d.ts +6 -0
  125. package/dist/types/wallet/src/core/signingEngine/workerManager/workers/shamir3pass/clientSealPreparation.d.ts +2 -0
  126. package/dist/types/wallet/src/core/types/secure-confirm-worker.d.ts +15 -1
  127. package/dist/workers/passkey-mpc-session.worker.js +92 -8
  128. package/package.json +1 -1
@@ -3205,6 +3205,7 @@ body.seams-transparent {
3205
3205
  }
3206
3206
 
3207
3207
  :where(.seams-wallet-ui) .email-otp-confirm__error {
3208
+ text-align: center;
3208
3209
  color: var(--seams-colors-error, var(--seams-red400));
3209
3210
  font-size: 0.8rem;
3210
3211
  font-weight: 600;
@@ -3212,6 +3213,7 @@ body.seams-transparent {
3212
3213
 
3213
3214
  :where(.seams-wallet-ui) .email-otp-confirm__resend {
3214
3215
  justify-self: center;
3216
+ margin-bottom: 0.75rem;
3215
3217
  border: 0;
3216
3218
  background: transparent;
3217
3219
  color: var(--seams-colors-buttonBackground);
@@ -4145,6 +4147,7 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
4145
4147
  }
4146
4148
 
4147
4149
  :where(.seams-wallet-ui) .seams-confirmation-modal--hosted {
4150
+ outline: none;
4148
4151
  inline-size: var(--seams-modal__container-max-width, 26rem);
4149
4152
  max-inline-size: 100%;
4150
4153
  max-block-size: none;
@@ -4915,14 +4918,14 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
4915
4918
  height: var(--seams-review-disclosure-height);
4916
4919
  overflow: hidden;
4917
4920
  }
4918
- :where(.seams-wallet-ui) .seams-transaction-review > .seams-review-technical > div {
4921
+ :where(.seams-wallet-ui) :is(.seams-transaction-review, .seams-transaction-receipt) > .seams-review-technical > div {
4919
4922
  margin-inline: calc(-1 * var(--seams-review-inset));
4920
4923
  background: var(--seams-colors-surface2);
4921
4924
  box-shadow: inset 0 1px 0 var(--seams-colors-borderPrimary),
4922
4925
  inset 0 -1px 0 var(--seams-colors-borderPrimary),
4923
4926
  inset 0 5px 8px -7px rgb(0 0 0 / 0.16);
4924
4927
  }
4925
- :where(.seams-wallet-ui) .seams-transaction-review > .seams-review-technical > div > .seams-review-detail {
4928
+ :where(.seams-wallet-ui) :is(.seams-transaction-review, .seams-transaction-receipt) > .seams-review-technical > div > :is(.seams-review-detail, .seams-review-fields) {
4926
4929
  margin: 0;
4927
4930
  padding: 0.75rem var(--seams-review-inset);
4928
4931
  }
@@ -5116,7 +5119,7 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5116
5119
  justify-content: center;
5117
5120
  gap: 0.25rem;
5118
5121
  width: fit-content;
5119
- margin: -0.25rem auto 0.75rem;
5122
+ margin: 0.75rem auto;
5120
5123
  color: var(--seams-colors-textSecondary);
5121
5124
  font-size: 0.75rem;
5122
5125
  text-decoration: none;
@@ -5173,34 +5176,54 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5173
5176
  }
5174
5177
  :where(.seams-wallet-ui) .seams-transaction-toast {
5175
5178
  position: relative;
5179
+ border-radius: inherit;
5176
5180
  background: var(--seams-colors-colorBackground);
5177
5181
  display: flex;
5178
5182
  align-items: center;
5179
5183
  gap: 0.75rem;
5180
- padding: 1.0625rem 1.125rem;
5184
+ padding: 0.625rem 0.75rem;
5181
5185
  }
5182
5186
  :where(.seams-wallet-ui) .seams-toast-progress {
5183
5187
  position: absolute;
5184
- inset: 0 0 auto;
5185
- height: 2px;
5186
- background: var(--seams-colors-colorBackground);
5188
+ inset: 0;
5189
+ border-radius: inherit;
5187
5190
  overflow: hidden;
5191
+ pointer-events: none;
5188
5192
  }
5189
- :where(.seams-wallet-ui) .seams-toast-progress > span {
5193
+ :where(.seams-wallet-ui) .seams-toast-progress-fill {
5194
+ position: relative;
5190
5195
  display: block;
5191
- height: 100%;
5196
+ height: 2px;
5192
5197
  width: 0;
5193
5198
  background: var(--seams-colors-buttonBackground);
5199
+ transform-origin: left;
5194
5200
  transition: width 300ms ease-out;
5195
5201
  }
5196
- :where(.seams-wallet-ui) [data-completed-stages='1'] .seams-toast-progress > span {
5202
+ :where(.seams-wallet-ui) [data-completed-stages='1'] .seams-toast-progress-fill,
5203
+ :where(.seams-wallet-ui) [data-stage='signing'] .seams-toast-progress-fill {
5197
5204
  width: calc(100% / 3);
5198
5205
  }
5199
- :where(.seams-wallet-ui) [data-completed-stages='2'] .seams-toast-progress > span {
5206
+ :where(.seams-wallet-ui) [data-completed-stages='2'] .seams-toast-progress-fill,
5207
+ :where(.seams-wallet-ui) [data-stage='broadcasting'] .seams-toast-progress-fill {
5200
5208
  width: calc(200% / 3);
5201
5209
  }
5202
- :where(.seams-wallet-ui) [data-completed-stages='3'] .seams-toast-progress > span {
5210
+ :where(.seams-wallet-ui) [data-completed-stages='3'] .seams-toast-progress-fill {
5211
+ width: 100%;
5212
+ }
5213
+ :where(.seams-wallet-ui) .seams-toast-progress-active {
5214
+ position: absolute;
5215
+ top: 0;
5216
+ left: 0;
5203
5217
  width: 100%;
5218
+ height: 2px;
5219
+ overflow: hidden;
5220
+ background: var(--seams-colors-borderPrimary);
5221
+ }
5222
+ :where(.seams-wallet-ui) .seams-toast-progress-active::after {
5223
+ content: '';
5224
+ position: absolute;
5225
+ inset: 0;
5226
+ background: linear-gradient(90deg, transparent, var(--seams-colors-buttonBackground), transparent);
5204
5227
  }
5205
5228
  :where(.seams-wallet-ui) .seams-transaction-toast-text {
5206
5229
  display: grid;
@@ -5225,7 +5248,7 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5225
5248
  cursor: pointer;
5226
5249
  }
5227
5250
  :where(.seams-wallet-ui[data-receipt-view='toast']) .seams-confirmation-modal--hosted {
5228
- inline-size: 22.5rem;
5251
+ inline-size: 20rem;
5229
5252
  }
5230
5253
  :where(.seams-wallet-ui[data-confirmation-kind='transaction'])
5231
5254
  .seams-confirmation-modal
@@ -5355,16 +5378,10 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5355
5378
  background: var(--seams-colors-surface2);
5356
5379
  box-shadow: 0 0 6px 3px var(--seams-colors-surface2);
5357
5380
  }
5358
- :where(.seams-wallet-ui) .seams-receipt-box {
5359
- background: var(--seams-colors-surface2);
5360
- padding: 0.25rem 0.875rem;
5361
- border-radius: var(--seams-shape-box, 12px);
5362
- margin-block: 0.75rem;
5363
- }
5364
5381
  :where(.seams-wallet-ui) .seams-receipt-morph-shell {
5365
5382
  position: fixed;
5366
5383
  pointer-events: none;
5367
- z-index: 1;
5384
+ z-index: 0;
5368
5385
  box-sizing: border-box;
5369
5386
  background: var(--seams-colors-colorBackground);
5370
5387
  border: 1px solid var(--seams-colors-borderPrimary);
@@ -5409,18 +5426,11 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5409
5426
  :where(.seams-wallet-ui) .seams-drawer-controls:has(.seams-drawer-origin) .seams-drawer-close {
5410
5427
  top: 0.5rem;
5411
5428
  }
5412
- :where(.seams-wallet-ui) .seams-receipt-box .seams-review-technical {
5413
- border-top: 0;
5414
- margin: 0;
5415
- }
5416
- :where(.seams-wallet-ui) .seams-receipt-box .seams-review-fields {
5417
- margin-bottom: 6px;
5418
- }
5419
- :where(.seams-wallet-ui) .seams-receipt-box .seams-review-fields dd .seams-review-copy:not(.seams-review-copy-address) > .copy-icon {
5429
+ :where(.seams-wallet-ui) .seams-transaction-receipt > .seams-review-technical .seams-review-fields dd .seams-review-copy:not(.seams-review-copy-address) > .copy-icon {
5420
5430
  opacity: 0;
5421
5431
  }
5422
- :where(.seams-wallet-ui) .seams-receipt-box .seams-review-fields dd:is(:hover, :focus-within) .seams-review-copy:not(.seams-review-copy-address) > .copy-icon,
5423
- :where(.seams-wallet-ui) .seams-receipt-box .seams-review-fields .seams-review-copy.copied > .copy-icon {
5432
+ :where(.seams-wallet-ui) .seams-transaction-receipt > .seams-review-technical .seams-review-fields dd:is(:hover, :focus-within) .seams-review-copy:not(.seams-review-copy-address) > .copy-icon,
5433
+ :where(.seams-wallet-ui) .seams-transaction-receipt > .seams-review-technical .seams-review-fields .seams-review-copy.copied > .copy-icon {
5424
5434
  opacity: 1;
5425
5435
  }
5426
5436
  :where(.seams-wallet-ui) .seams-receipt-step[data-state='complete'] {
@@ -5440,9 +5450,17 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5440
5450
  }
5441
5451
  }
5442
5452
  @media (prefers-reduced-motion: no-preference) {
5453
+ :where(.seams-wallet-ui) .seams-toast-progress {
5454
+ animation: seams-toast-progress-reveal 1ms step-end 200ms backwards;
5455
+ }
5456
+ :where(.seams-wallet-ui) .seams-toast-progress-fill {
5457
+ animation: seams-toast-progress-draw 180ms ease-out 200ms backwards;
5458
+ }
5459
+ :where(.seams-wallet-ui) .seams-toast-progress-active::after,
5443
5460
  :where(.seams-wallet-ui) .seams-receipt-step[data-state='active'] .seams-receipt-track::after {
5444
5461
  animation: seams-receipt-sweep 1.2s ease-in-out infinite;
5445
5462
  }
5463
+ :where(.seams-wallet-ui) [data-completed-stages='2'] .seams-toast-progress-active::after,
5446
5464
  :where(.seams-wallet-ui)
5447
5465
  .seams-receipt-step[data-stage='confirming'][data-state='active']
5448
5466
  .seams-receipt-track::after {
@@ -5452,6 +5470,22 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5452
5470
  animation: seams-receipt-spin 1.2s linear infinite;
5453
5471
  }
5454
5472
  }
5473
+ @keyframes seams-toast-progress-reveal {
5474
+ from {
5475
+ visibility: hidden;
5476
+ }
5477
+ to {
5478
+ visibility: visible;
5479
+ }
5480
+ }
5481
+ @keyframes seams-toast-progress-draw {
5482
+ from {
5483
+ transform: scaleX(0);
5484
+ }
5485
+ to {
5486
+ transform: scaleX(1);
5487
+ }
5488
+ }
5455
5489
  @keyframes seams-receipt-sweep {
5456
5490
  from {
5457
5491
  transform: translateX(-100%);
@@ -5466,8 +5500,14 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5466
5500
  }
5467
5501
  }
5468
5502
  @media (prefers-reduced-motion: reduce) {
5503
+ :where(.seams-wallet-ui) .seams-toast-progress,
5504
+ :where(.seams-wallet-ui) .seams-toast-progress-fill {
5505
+ animation: none;
5506
+ visibility: visible;
5507
+ transform: none;
5508
+ }
5469
5509
  :where(.seams-wallet-ui) .seams-review-caret,
5470
- :where(.seams-wallet-ui) .seams-toast-progress > span,
5510
+ :where(.seams-wallet-ui) .seams-toast-progress-fill,
5471
5511
  :where(.seams-wallet-ui) .seams-receipt-track::after {
5472
5512
  transition: none;
5473
5513
  }
@@ -5479,6 +5519,20 @@ html:has([data-seams-confirm-surface='wallet-iframe'][data-seams-confirm-variant
5479
5519
  }
5480
5520
  }
5481
5521
 
5522
+ /* Shared receipt content stays visible above the moving surface. */
5523
+ .seams-wallet-ui[data-receipt-morphing] .seams-confirmation-modal,
5524
+ .seams-wallet-ui[data-receipt-morphing] .seams-confirmation-modal .modal-container-root {
5525
+ overflow: visible;
5526
+ }
5527
+ .seams-wallet-ui[data-receipt-morphing] .seams-confirmation-modal .modal-container-root {
5528
+ z-index: 1;
5529
+ background: transparent;
5530
+ box-shadow: none;
5531
+ }
5532
+ .seams-wallet-ui[data-receipt-morphing] .seams-transaction-toast {
5533
+ background: transparent;
5534
+ }
5535
+
5482
5536
 
5483
5537
  /* recovery-backup-surface */
5484
5538
  /*
@@ -7,15 +7,15 @@ import { _ as parseUnixMs, d as parseEd25519PublicKeyB64u, f as parseEnvelopeCip
7
7
  import { M as WALLET_CUSTODY_ED25519_MATERIAL_KEY_KIND, h as prepareWalletRecoveryPasskeyPublication, m as prepareWalletRecoveryEmailOtpPublication } from "./accountLifecycle-Ddavc_FC.js";
8
8
  import { t as toAccountId } from "./accountIds-Ck4GAQfm.js";
9
9
  import { o as normalizeThresholdRuntimePolicyScope, x as walletAuthorityDigestsMatchV1 } from "./sessionPolicy-B4FsPuk2.js";
10
- import { At as buildEmailOtpWalletAuthAuthority, Ht as walletAuthAuthorityRef, Sn as routerAbMpcMaterialActivationRefToWire, ft as parseRouterAbEcdsaRegistrationActivationReceiptV1, it as parseRouterAbEcdsaDerivationPublicCapabilityV1, xn as routerAbMpcMaterialActivationRefFromWire, yn as parseRouterAbMpcMaterialActivationRef } from "./ecdsaPresignLifecycle-D_KCktCj.js";
10
+ import { At as buildEmailOtpWalletAuthAuthority, Cn as routerAbMpcMaterialActivationRefToWire, Ht as walletAuthAuthorityRef, Sn as routerAbMpcMaterialActivationRefFromWire, bn as parseRouterAbMpcMaterialActivationRef, ft as parseRouterAbEcdsaRegistrationActivationReceiptV1, it as parseRouterAbEcdsaDerivationPublicCapabilityV1 } from "./ecdsaPresignLifecycle-CnSnzoRJ.js";
11
11
  import { l as parseDeviceId } from "./capabilityKinds-jwCEaqBU.js";
12
12
  import { St as parseSdkEcdsaDerivationThresholdKeyId, bt as parseSdkEcdsaDerivationSigningRootId, gt as parseEcdsaServerGeneration, vt as computeEcdsaDerivationRoleLocalRelayerKeyId, xt as parseSdkEcdsaDerivationSigningRootVersion, yt as ecdsaClientRootPublicKey33B64uFromString } from "./evmFamilyEcdsaIdentity-_kuKSW35.js";
13
13
  import { d as parsePasskeyCustodyEnvelopeRecord } from "./passkey-custody-BaHyYMhj.js";
14
- import { g as prepareWalletCustodyEcdsaContinuity, s as IndexedDBManager, y as pendingWalletRecoveryCommitIdentityMatches } from "./ed25519SeedMaterial-0VmS6K9P.js";
14
+ import { g as prepareWalletCustodyEcdsaContinuity, s as IndexedDBManager, y as pendingWalletRecoveryCommitIdentityMatches } from "./ed25519SeedMaterial-Cghz8-XB.js";
15
15
  import { n as PASSKEY_PRF_SECOND_SALT_V1, t as PASSKEY_PRF_FIRST_SALT_V1 } from "./signingSessionSeal-CdtgXHSL.js";
16
16
  import { n as parseEmailOtpChallengeDelivery } from "./challengeDelivery-BjLKoou3.js";
17
17
  import { o as redactedPasskeyRegistrationCredential } from "./helpers-DpRjHMBx.js";
18
- import { S as buildEcdsaRoleLocalPublicFacts } from "./ecdsaCapabilityManifest-DA_fklIs.js";
18
+ import { S as buildEcdsaRoleLocalPublicFacts } from "./ecdsaCapabilityManifest-C8itxV9S.js";
19
19
  import { n as buildRelayerJsonPostRequestInit, r as normalizeRelayerBaseUrl } from "./relayerHttp-LsVTZCxA.js";
20
20
  //#region ../shared-ts/src/wallet-recovery/walletRecoveryTarget.ts
21
21
  function parseWalletRecoveryTargetV1(raw) {
@@ -1,4 +1,4 @@
1
- import { t as cacheCredentialBoundarySetupExportPrfFirst } from "./prfCache-Dwwauj4v.js";
1
+ import { t as cacheCredentialBoundarySetupExportPrfFirst } from "./prfCache-CgAr-VEU.js";
2
2
  //#region src/core/signingEngine/session/passkey/warmSessionHydration.ts
3
3
  function createWarmSessionHydrationService(deps) {
4
4
  return { hydrateSigningSession: (input) => cacheCredentialBoundarySetupExportPrfFirst(deps.getWarmSessionMaterialWriter(), input) };
@@ -767,6 +767,26 @@ class ClientSealPreparations {
767
767
  throw result.error;
768
768
  return result.seal;
769
769
  }
770
+ async readCiphertext(sessionId, preparationId) {
771
+ const entry = this.entries.get(sessionId);
772
+ if (!entry || entry.id !== preparationId) {
773
+ throw new Error("Client seal preparation is unavailable");
774
+ }
775
+ const result = await entry.result;
776
+ if (this.entries.get(sessionId) !== entry) {
777
+ throw new Error("Client seal preparation was discarded");
778
+ }
779
+ if (result.kind === "failed")
780
+ throw result.error;
781
+ return result.seal.ciphertext;
782
+ }
783
+ async takeExact(sessionId, preparationId, secret) {
784
+ const entry = this.entries.get(sessionId);
785
+ if (!entry || entry.id !== preparationId) {
786
+ throw new Error("Client seal preparation is unavailable");
787
+ }
788
+ return await this.take(sessionId, secret);
789
+ }
770
790
  async discard(sessionId, preparationId) {
771
791
  const entry = this.entries.get(sessionId);
772
792
  if (!entry || entry.id !== preparationId)
@@ -849,6 +869,21 @@ function parseClientSealDiscard(value) {
849
869
  const thresholdSessionId = parseSessionString(Reflect.get(value, "thresholdSessionId"));
850
870
  return preparationId && thresholdSessionId ? { preparationId, thresholdSessionId } : null;
851
871
  }
872
+ function parseClientSealCompletion(value) {
873
+ if (!value || typeof value !== "object" || Array.isArray(value))
874
+ return null;
875
+ const fields = Object.keys(value);
876
+ if (fields.length !== 4 || !fields.includes("preparationId") || !fields.includes("thresholdSessionId") || !fields.includes("transport") || !fields.includes("serverSeal")) {
877
+ return null;
878
+ }
879
+ const preparationId = parseSessionString(Reflect.get(value, "preparationId"));
880
+ const thresholdSessionId = parseSessionString(Reflect.get(value, "thresholdSessionId"));
881
+ const transport = parseSigningSessionSealTransport(Reflect.get(value, "transport"));
882
+ const serverSeal = parseSigningSessionSealRouteResult(Reflect.get(value, "serverSeal"));
883
+ if (!preparationId || !thresholdSessionId || !transport || !serverSeal.ok)
884
+ return null;
885
+ return { preparationId, thresholdSessionId, transport, serverSeal };
886
+ }
852
887
  function parseWarmSessionMaterialPutPayload(value) {
853
888
  if (value === null || typeof value !== "object" || Array.isArray(value))
854
889
  return null;
@@ -1013,6 +1048,10 @@ function parsePasskeyMpcSessionWorkerMessage(value) {
1013
1048
  return { kind: "prewarm", ...id ? { id } : {} };
1014
1049
  case "PREPARE_SESSION_CLIENT_SEAL":
1015
1050
  return { kind: "prepare_client_seal", id, payload: parseClientSealPreparation(payload) };
1051
+ case "READ_SESSION_CLIENT_SEAL":
1052
+ return { kind: "read_client_seal", id, payload: parseClientSealDiscard(payload) };
1053
+ case "COMPLETE_SESSION_CLIENT_SEAL":
1054
+ return { kind: "complete_client_seal", id, payload: parseClientSealCompletion(payload) };
1016
1055
  case "DISCARD_SESSION_CLIENT_SEAL":
1017
1056
  return { kind: "discard_client_seal", id, payload: parseClientSealDiscard(payload) };
1018
1057
  case "WARM_SESSION_MATERIAL_PUT":
@@ -1523,24 +1562,26 @@ async function runSigningSessionSealAndPersist(args) {
1523
1562
  const task = (async () => {
1524
1563
  const diagnostics = createWarmSessionSealAndPersistDiagnostics();
1525
1564
  try {
1526
- const prepared = await clientSealPreparations.take(thresholdSessionId, activeEntry.secret.prfFirstB64u);
1565
+ const prepared = args.kind === "prepared_response" ? await clientSealPreparations.takeExact(thresholdSessionId, args.preparationId, activeEntry.secret.prfFirstB64u) : await clientSealPreparations.take(thresholdSessionId, activeEntry.secret.prfFirstB64u);
1527
1566
  const { runtime, keyHandle, ciphertext: clientEncryptedCiphertext } = prepared;
1528
1567
  diagnostics.runtimeSetupMs = prepared.runtimeSetupMs;
1529
1568
  diagnostics.clientSealMs = prepared.clientSealMs;
1530
1569
  try {
1531
1570
  const serverSealRouteStartedAt = performance.now();
1532
- const applied = await callSigningSessionSealRoute({
1571
+ const applied = args.kind === "prepared_response" ? args.serverSeal : await callSigningSessionSealRoute({
1533
1572
  operation: "apply-server-seal",
1534
1573
  transport: args.transport,
1535
1574
  thresholdSessionId,
1536
1575
  ciphertext: clientEncryptedCiphertext,
1537
1576
  keyVersion: args.transport.keyVersion
1538
1577
  });
1539
- recordWarmSessionSealAndPersistDiagnosticDuration({
1540
- diagnostics,
1541
- bucket: "serverSealRouteMs",
1542
- startedAt: serverSealRouteStartedAt
1543
- });
1578
+ if (args.kind === "server_route") {
1579
+ recordWarmSessionSealAndPersistDiagnosticDuration({
1580
+ diagnostics,
1581
+ bucket: "serverSealRouteMs",
1582
+ startedAt: serverSealRouteStartedAt
1583
+ });
1584
+ }
1544
1585
  if (!applied.ok)
1545
1586
  return applied;
1546
1587
  const policyUpdateStartedAt = performance.now();
@@ -1740,6 +1781,40 @@ async function handleClientSealPreparation(incoming) {
1740
1781
  });
1741
1782
  }
1742
1783
  }
1784
+ async function handleClientSealRead(incoming) {
1785
+ try {
1786
+ if (!incoming.payload)
1787
+ throw new Error("Invalid client seal read request");
1788
+ const ciphertext = await clientSealPreparations.readCiphertext(incoming.payload.thresholdSessionId, incoming.payload.preparationId);
1789
+ postPasskeyMpcSessionWorkerResponse(incoming.id, {
1790
+ success: true,
1791
+ data: { ok: true, ciphertext }
1792
+ });
1793
+ } catch (error) {
1794
+ postPasskeyMpcSessionWorkerResponse(incoming.id, {
1795
+ success: false,
1796
+ error: error instanceof Error ? error.message : "Client seal read failed"
1797
+ });
1798
+ }
1799
+ }
1800
+ async function handleClientSealCompletion(incoming) {
1801
+ const payload = incoming.payload;
1802
+ if (!payload) {
1803
+ postPasskeyMpcSessionWorkerResponse(incoming.id, {
1804
+ success: false,
1805
+ error: "Invalid client seal completion request"
1806
+ });
1807
+ return;
1808
+ }
1809
+ const result = await runSigningSessionSealAndPersist({
1810
+ kind: "prepared_response",
1811
+ thresholdSessionId: payload.thresholdSessionId,
1812
+ preparationId: payload.preparationId,
1813
+ transport: payload.transport,
1814
+ serverSeal: payload.serverSeal
1815
+ });
1816
+ postPasskeyMpcSessionWorkerResponse(incoming.id, { success: true, data: result });
1817
+ }
1743
1818
  self.onmessage = (event) => {
1744
1819
  const incoming = parsePasskeyMpcSessionWorkerMessage(event.data);
1745
1820
  switch (incoming.kind) {
@@ -1747,6 +1822,12 @@ self.onmessage = (event) => {
1747
1822
  case "discard_client_seal":
1748
1823
  handleClientSealPreparation(incoming);
1749
1824
  return;
1825
+ case "read_client_seal":
1826
+ handleClientSealRead(incoming);
1827
+ return;
1828
+ case "complete_client_seal":
1829
+ handleClientSealCompletion(incoming);
1830
+ return;
1750
1831
  case "ping":
1751
1832
  postPasskeyMpcSessionWorkerResponse(incoming.id, { success: true, data: { ok: true } });
1752
1833
  return;
@@ -1877,7 +1958,10 @@ self.onmessage = (event) => {
1877
1958
  });
1878
1959
  return;
1879
1960
  }
1880
- const result = await runSigningSessionSealAndPersist(payload);
1961
+ const result = await runSigningSessionSealAndPersist({
1962
+ kind: "server_route",
1963
+ ...payload
1964
+ });
1881
1965
  postPasskeyMpcSessionWorkerResponse(incoming.id, { success: true, data: result });
1882
1966
  })();
1883
1967
  return;