@swype-org/react-sdk 0.1.22 → 0.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -609,6 +609,18 @@ function normalizeSignature(sig) {
609
609
  );
610
610
  return normalizeSignature(innerBytes);
611
611
  } catch {
612
+ try {
613
+ const [wrapper] = decodeAbiParameters(
614
+ [{
615
+ type: "tuple",
616
+ components: [{ type: "uint8" }, { type: "bytes" }]
617
+ }],
618
+ `0x${hex}`
619
+ );
620
+ return normalizeSignature(wrapper[1]);
621
+ } catch {
622
+ return `0x${hex}`;
623
+ }
612
624
  }
613
625
  }
614
626
  throw new Error(
@@ -1019,6 +1031,7 @@ async function executeSignPermit2(action, wagmiConfig2, apiBaseUrl, sessionId) {
1019
1031
  }
1020
1032
  let typedData = action.metadata?.typedData;
1021
1033
  const tokenSymbol = action.metadata?.tokenSymbol;
1034
+ const ownerIsSCA = action.metadata?.ownerIsSCA === true;
1022
1035
  if (!typedData && sessionId) {
1023
1036
  for (let i = 0; i < SIGN_PERMIT2_MAX_POLLS; i++) {
1024
1037
  await new Promise((r) => setTimeout(r, SIGN_PERMIT2_POLL_MS));
@@ -1046,23 +1059,29 @@ async function executeSignPermit2(action, wagmiConfig2, apiBaseUrl, sessionId) {
1046
1059
  message: parsed.message
1047
1060
  });
1048
1061
  const signature = normalizeSignature(rawSignature);
1049
- const recoverInput = {
1050
- domain: parsed.domain,
1051
- types: parsed.types,
1052
- primaryType: parsed.primaryType,
1053
- message: parsed.message,
1054
- signature
1055
- };
1056
- const recoveredSigner = await recoverTypedDataAddress(recoverInput);
1057
- const expectedSigner = (expectedWallet ?? sender).toLowerCase();
1058
- console.info(
1059
- `[swype-sdk][sign-permit2] Signature recovered. recoveredSigner=${recoveredSigner}, expectedSigner=${expectedSigner}`
1060
- );
1061
- if (recoveredSigner.toLowerCase() !== expectedSigner) {
1062
- return actionError(
1063
- action,
1064
- `Wallet signed with ${recoveredSigner}, but source wallet is ${expectedWallet ?? sender}. Please switch to the source wallet in MetaMask and retry.`
1062
+ if (ownerIsSCA) {
1063
+ console.info(
1064
+ `[swype-sdk][sign-permit2] Owner is SCA \u2014 skipping client-side ecrecover verification. Server will validate via EIP-1271.`
1065
+ );
1066
+ } else {
1067
+ const recoverInput = {
1068
+ domain: parsed.domain,
1069
+ types: parsed.types,
1070
+ primaryType: parsed.primaryType,
1071
+ message: parsed.message,
1072
+ signature
1073
+ };
1074
+ const recoveredSigner = await recoverTypedDataAddress(recoverInput);
1075
+ const expectedSigner = (expectedWallet ?? sender).toLowerCase();
1076
+ console.info(
1077
+ `[swype-sdk][sign-permit2] Signature recovered. recoveredSigner=${recoveredSigner}, expectedSigner=${expectedSigner}`
1065
1078
  );
1079
+ if (recoveredSigner.toLowerCase() !== expectedSigner) {
1080
+ return actionError(
1081
+ action,
1082
+ `Wallet signed with ${recoveredSigner}, but source wallet is ${expectedWallet ?? sender}. Please switch to the source wallet in MetaMask and retry.`
1083
+ );
1084
+ }
1066
1085
  }
1067
1086
  console.info(
1068
1087
  `[swype-sdk][sign-permit2] Permit2 EIP-712 signature obtained. token=${tokenSymbol ?? "unknown"}`