thirdweb 5.111.9 → 5.111.11-nightly-eb1a9c3c3e670290e28ad86e14ddae4c7cf7455d-20251112000353
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/cjs/bridge/Webhook.js +62 -1
- package/dist/cjs/bridge/Webhook.js.map +1 -1
- package/dist/cjs/cli/commands/stylus/create.js +48 -0
- package/dist/cjs/cli/commands/stylus/create.js.map +1 -1
- package/dist/cjs/extensions/modules/common/installPublishedModule.js +26 -9
- package/dist/cjs/extensions/modules/common/installPublishedModule.js.map +1 -1
- package/dist/cjs/extensions/prebuilts/deploy-published.js +1 -1
- package/dist/cjs/extensions/prebuilts/deploy-published.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/TransactionPayment.js +1 -1
- package/dist/cjs/react/web/ui/Bridge/common/TokenAndChain.js +1 -1
- package/dist/cjs/react/web/ui/Bridge/common/TokenBalanceRow.js +2 -2
- package/dist/cjs/react/web/ui/Bridge/common/TokenBalanceRow.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/common/selected-token-button.js +7 -2
- package/dist/cjs/react/web/ui/Bridge/common/selected-token-button.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/payment-details/PaymentOverview.js +5 -5
- package/dist/cjs/react/web/ui/Bridge/payment-details/PaymentOverview.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/payment-selection/TokenSelection.js +1 -1
- package/dist/cjs/react/web/ui/Bridge/payment-success/PaymentReceipt.js +20 -44
- package/dist/cjs/react/web/ui/Bridge/payment-success/PaymentReceipt.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/payment-success/SuccessScreen.js +3 -3
- package/dist/cjs/react/web/ui/Bridge/payment-success/SuccessScreen.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/select-chain.js +10 -2
- package/dist/cjs/react/web/ui/Bridge/swap-widget/select-chain.js.map +1 -1
- package/dist/cjs/react/web/ui/Bridge/swap-widget/select-token-ui.js +94 -48
- package/dist/cjs/react/web/ui/Bridge/swap-widget/select-token-ui.js.map +1 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.js +2 -1
- package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.js.map +1 -1
- package/dist/cjs/react/web/ui/components/CopyIcon.js +6 -8
- package/dist/cjs/react/web/ui/components/CopyIcon.js.map +1 -1
- package/dist/cjs/react/web/ui/components/Spacer.js +1 -0
- package/dist/cjs/react/web/ui/components/Spacer.js.map +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/cjs/version.js.map +1 -1
- package/dist/esm/bridge/Webhook.js +62 -1
- package/dist/esm/bridge/Webhook.js.map +1 -1
- package/dist/esm/cli/commands/stylus/create.js +48 -0
- package/dist/esm/cli/commands/stylus/create.js.map +1 -1
- package/dist/esm/extensions/modules/common/installPublishedModule.js +26 -9
- package/dist/esm/extensions/modules/common/installPublishedModule.js.map +1 -1
- package/dist/esm/extensions/prebuilts/deploy-published.js +1 -1
- package/dist/esm/extensions/prebuilts/deploy-published.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/TransactionPayment.js +1 -1
- package/dist/esm/react/web/ui/Bridge/common/TokenAndChain.js +1 -1
- package/dist/esm/react/web/ui/Bridge/common/TokenBalanceRow.js +2 -2
- package/dist/esm/react/web/ui/Bridge/common/TokenBalanceRow.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/common/selected-token-button.js +7 -2
- package/dist/esm/react/web/ui/Bridge/common/selected-token-button.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/payment-details/PaymentOverview.js +5 -5
- package/dist/esm/react/web/ui/Bridge/payment-details/PaymentOverview.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/payment-selection/TokenSelection.js +1 -1
- package/dist/esm/react/web/ui/Bridge/payment-success/PaymentReceipt.js +23 -47
- package/dist/esm/react/web/ui/Bridge/payment-success/PaymentReceipt.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/payment-success/SuccessScreen.js +4 -4
- package/dist/esm/react/web/ui/Bridge/payment-success/SuccessScreen.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/select-chain.js +10 -2
- package/dist/esm/react/web/ui/Bridge/swap-widget/select-chain.js.map +1 -1
- package/dist/esm/react/web/ui/Bridge/swap-widget/select-token-ui.js +95 -49
- package/dist/esm/react/web/ui/Bridge/swap-widget/select-token-ui.js.map +1 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.js +2 -1
- package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.js.map +1 -1
- package/dist/esm/react/web/ui/components/CopyIcon.js +6 -8
- package/dist/esm/react/web/ui/components/CopyIcon.js.map +1 -1
- package/dist/esm/react/web/ui/components/Spacer.js +1 -0
- package/dist/esm/react/web/ui/components/Spacer.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/scripts/bridge-widget.js +100 -100
- package/dist/types/bridge/Webhook.d.ts +22 -1
- package/dist/types/bridge/Webhook.d.ts.map +1 -1
- package/dist/types/cli/commands/stylus/create.d.ts.map +1 -1
- package/dist/types/extensions/modules/common/installPublishedModule.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/common/TokenBalanceRow.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/common/selected-token-button.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/payment-details/PaymentOverview.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/payment-success/PaymentReceipt.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/payment-success/SuccessScreen.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/select-chain.d.ts.map +1 -1
- package/dist/types/react/web/ui/Bridge/swap-widget/select-token-ui.d.ts.map +1 -1
- package/dist/types/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/CopyIcon.d.ts.map +1 -1
- package/dist/types/react/web/ui/components/Spacer.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/bridge/Webhook.test.ts +157 -0
- package/src/bridge/Webhook.ts +107 -0
- package/src/cli/commands/stylus/create.ts +49 -0
- package/src/contract/deployment/deploy-dynamic.test.ts +35 -39
- package/src/extensions/dynamic-contracts/write/installPublishedExtension.test.ts +40 -44
- package/src/extensions/dynamic-contracts/write/uninstallExtension.test.ts +1 -2
- package/src/extensions/modules/common/installPublishedModule.ts +28 -9
- package/src/extensions/prebuilts/deploy-published.ts +1 -1
- package/src/react/web/ui/Bridge/TransactionPayment.tsx +1 -1
- package/src/react/web/ui/Bridge/common/TokenAndChain.tsx +1 -1
- package/src/react/web/ui/Bridge/common/TokenBalanceRow.tsx +11 -10
- package/src/react/web/ui/Bridge/common/selected-token-button.tsx +11 -1
- package/src/react/web/ui/Bridge/payment-details/PaymentOverview.tsx +9 -7
- package/src/react/web/ui/Bridge/payment-selection/TokenSelection.tsx +1 -1
- package/src/react/web/ui/Bridge/payment-success/PaymentReceipt.tsx +92 -115
- package/src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx +4 -6
- package/src/react/web/ui/Bridge/swap-widget/select-chain.tsx +18 -3
- package/src/react/web/ui/Bridge/swap-widget/select-token-ui.tsx +186 -118
- package/src/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.tsx +5 -3
- package/src/react/web/ui/components/CopyIcon.tsx +8 -9
- package/src/react/web/ui/components/Spacer.tsx +1 -0
- package/src/version.ts +1 -1
|
@@ -113,6 +113,27 @@ secret: string,
|
|
|
113
113
|
/**
|
|
114
114
|
* The tolerance in seconds for the timestamp verification.
|
|
115
115
|
*/
|
|
116
|
-
tolerance?: number
|
|
116
|
+
tolerance?: number, // Default to 5 minutes if not specified
|
|
117
|
+
/**
|
|
118
|
+
* Add various validations to the parsed payload to ensure it matches the expected values. Throws error if any validation fails.
|
|
119
|
+
*/
|
|
120
|
+
verify?: {
|
|
121
|
+
/**
|
|
122
|
+
* Verify that the payload's the destination token amount (in wei) is greater than `minDestinationAmount` value
|
|
123
|
+
*/
|
|
124
|
+
minDestinationAmount?: bigint;
|
|
125
|
+
/**
|
|
126
|
+
* Verify that the payload's destination token address is the same as `destinationTokenAddress` value
|
|
127
|
+
*/
|
|
128
|
+
destinationTokenAddress?: string;
|
|
129
|
+
/**
|
|
130
|
+
* Verify that the payload's destination chain id is the same as `destinationChainId` value
|
|
131
|
+
*/
|
|
132
|
+
destinationChainId?: number;
|
|
133
|
+
/**
|
|
134
|
+
* Verify that the payload's receiver address is the same as `receiverAddress` value.
|
|
135
|
+
*/
|
|
136
|
+
receiverAddress?: string;
|
|
137
|
+
}): Promise<WebhookPayload>;
|
|
117
138
|
export {};
|
|
118
139
|
//# sourceMappingURL=Webhook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Webhook.d.ts","sourceRoot":"","sources":["../../../src/bridge/Webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAkFhC,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAGjB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,EAC7B;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CACf,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,KAAK;AACzB;;GAEG;AACH,OAAO,EAAE,MAAM;AAEf;;GAEG;AACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAE/B;;GAEG;AACH,MAAM,EAAE,MAAM;AAEd;;GAEG;AACH,SAAS,SAAM,
|
|
1
|
+
{"version":3,"file":"Webhook.d.ts","sourceRoot":"","sources":["../../../src/bridge/Webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,aAAa,CAAC;AAkFhC,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAGjB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAClC,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,EAC7B;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CACf,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,KAAK;AACzB;;GAEG;AACH,OAAO,EAAE,MAAM;AAEf;;GAEG;AACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;AAE/B;;GAEG;AACH,MAAM,EAAE,MAAM;AAEd;;GAEG;AACH,SAAS,SAAM,EAAE,wCAAwC;AAEzD;;GAEG;AACH,MAAM,CAAC,EAAE;IACP;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,cAAc,CAAC,CAuJzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/stylus/create.ts"],"names":[],"mappings":"AAKA,wBAAsB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/stylus/create.ts"],"names":[],"mappings":"AAKA,wBAAsB,mBAAmB,kBA4LxC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installPublishedModule.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/modules/common/installPublishedModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"installPublishedModule.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/modules/common/installPublishedModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAIrE;;GAEG;AACH,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,UAAU,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,6BAA6B,kMAiD5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenBalanceRow.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/common/TokenBalanceRow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAShF,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,
|
|
1
|
+
{"version":3,"file":"TokenBalanceRow.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/common/TokenBalanceRow.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAShF,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC,2CAuEA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selected-token-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/common/selected-token-button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAetE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,EACT;QACE,IAAI,EAAE,eAAe,GAAG,SAAS,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;KAClB,GACD,SAAS,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;CAChC,
|
|
1
|
+
{"version":3,"file":"selected-token-button.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/common/selected-token-button.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAetE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,EACT;QACE,IAAI,EAAE,eAAe,GAAG,SAAS,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;KAClB,GACD,SAAS,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;CAChC,2CAqJA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentOverview.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-details/PaymentOverview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAYhF,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KACjC,CAAC;IACF,QAAQ,EAAE,QAAQ,CAAC;CACpB,
|
|
1
|
+
{"version":3,"file":"PaymentOverview.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-details/PaymentOverview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAYhF,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE3D,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;KACjC,CAAC;IACF,QAAQ,EAAE,QAAQ,CAAC;CACpB,2CAmLA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentReceipt.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-success/PaymentReceipt.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PaymentReceipt.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-success/PaymentReceipt.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAGhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAySvF,UAAU,kBAAkB;IAC1B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAE3C;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,wBAAgB,cAAc,CAAC,EAC7B,aAAa,EACb,iBAAiB,EACjB,MAAM,EACN,aAAa,GACd,EAAE,kBAAkB,2CA4BpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuccessScreen.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAGhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAOvF,KAAK,kBAAkB,GAAG;IACxB;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAE3C;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAE7B,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAIF,wBAAgB,aAAa,CAAC,EAC5B,aAAa,EACb,iBAAiB,EACjB,MAAM,EACN,aAAa,EACb,MAAM,EACN,YAAoB,EACpB,kBAAkB,GACnB,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"SuccessScreen.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/payment-success/SuccessScreen.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAGhF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAOvF,KAAK,kBAAkB,GAAG;IACxB;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAE3C;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAC;IAE7B,MAAM,EAAE,cAAc,CAAC;IAEvB;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAIF,wBAAgB,aAAa,CAAC,EAC5B,aAAa,EACb,iBAAiB,EACjB,MAAM,EACN,aAAa,EACb,MAAM,EACN,YAAoB,EACpB,kBAAkB,GACnB,EAAE,kBAAkB,2CAwIpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-chain.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/swap-widget/select-chain.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"select-chain.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/swap-widget/select-chain.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAkBtE,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,WAAW,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,2CAW3D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,mBAAmB,GAAG;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,WAAW,GAAG,SAAS,CAAC;CACxC,2CA+FF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-token-ui.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/swap-widget/select-token-ui.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"select-token-ui.d.ts","sourceRoot":"","sources":["../../../../../../../src/react/web/ui/Bridge/swap-widget/select-token-ui.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAsBtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AASnE;;GAEG;AACH,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,cAAc,GAAG,SAAS,CAAC;IAC1C,gBAAgB,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAClD,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;CAChD,CAAC;AAYF;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,kBAAkB,2CAoFpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WalletRow.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAI5E,OAAO,EACL,QAAQ,EACR,QAAQ,EACT,MAAM,+CAA+C,CAAC;AAavD,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,
|
|
1
|
+
{"version":3,"file":"WalletRow.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/react/web/ui/ConnectWallet/screens/Buy/swap/WalletRow.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAI5E,OAAO,EACL,QAAQ,EACR,QAAQ,EACT,MAAM,+CAA+C,CAAC;AAavD,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,OAAO,QAAQ,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,2CAwDA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyIcon.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/components/CopyIcon.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CopyIcon.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/components/CopyIcon.tsx"],"names":[],"mappings":"AAQA;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAyCA,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spacer.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/components/Spacer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,CAAC,EAAE,MAAM,OAAO,OAAO,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"Spacer.d.ts","sourceRoot":"","sources":["../../../../../../src/react/web/ui/components/Spacer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,CAAC,EAAE,MAAM,OAAO,OAAO,CAAA;CAAE,CASxD,CAAC"}
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.111.
|
|
1
|
+
export declare const version = "5.111.11-nightly-eb1a9c3c3e670290e28ad86e14ddae4c7cf7455d-20251112000353";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,6EAA6E,CAAC"}
|
package/package.json
CHANGED
|
@@ -73,8 +73,8 @@
|
|
|
73
73
|
"dotenv-mono": "^1.3.14",
|
|
74
74
|
"ethers5": "npm:ethers@5",
|
|
75
75
|
"ethers6": "npm:ethers@6",
|
|
76
|
-
"expo-linking": "
|
|
77
|
-
"expo-web-browser": "
|
|
76
|
+
"expo-linking": "8.0.8",
|
|
77
|
+
"expo-web-browser": "15.0.9",
|
|
78
78
|
"happy-dom": "17.4.4",
|
|
79
79
|
"knip": "5.60.2",
|
|
80
80
|
"msw": "2.7.5",
|
|
@@ -256,10 +256,10 @@
|
|
|
256
256
|
"@aws-sdk/credential-providers": "^3",
|
|
257
257
|
"@coinbase/wallet-mobile-sdk": "^1",
|
|
258
258
|
"@mobile-wallet-protocol/client": "^1",
|
|
259
|
-
"@react-native-async-storage/async-storage": "
|
|
259
|
+
"@react-native-async-storage/async-storage": "*",
|
|
260
260
|
"ethers": "^5 || ^6",
|
|
261
|
-
"expo-linking": "
|
|
262
|
-
"expo-web-browser": "
|
|
261
|
+
"expo-linking": "*",
|
|
262
|
+
"expo-web-browser": "*",
|
|
263
263
|
"react": "^18 || ^19",
|
|
264
264
|
"react-native": "*",
|
|
265
265
|
"react-native-aes-gcm-crypto": "^0.2",
|
|
@@ -399,7 +399,7 @@
|
|
|
399
399
|
}
|
|
400
400
|
},
|
|
401
401
|
"typings": "./dist/types/exports/thirdweb.d.ts",
|
|
402
|
-
"version": "5.111.
|
|
402
|
+
"version": "5.111.11-nightly-eb1a9c3c3e670290e28ad86e14ddae4c7cf7455d-20251112000353",
|
|
403
403
|
"scripts": {
|
|
404
404
|
"bench": "vitest -c ./test/vitest.config.ts bench",
|
|
405
405
|
"bench:compare": "bun run ./benchmarks/run.ts",
|
|
@@ -619,4 +619,161 @@ describe("parseIncomingWebhook", () => {
|
|
|
619
619
|
"$ZodError",
|
|
620
620
|
);
|
|
621
621
|
});
|
|
622
|
+
|
|
623
|
+
describe("verify", () => {
|
|
624
|
+
type VerifyOptions = Parameters<typeof parse>[4];
|
|
625
|
+
|
|
626
|
+
async function stringifyAndParse(
|
|
627
|
+
payload: unknown,
|
|
628
|
+
verify?: VerifyOptions,
|
|
629
|
+
): Promise<WebhookPayload> {
|
|
630
|
+
const timestamp = Math.floor(Date.now() / 1000).toString();
|
|
631
|
+
const payloadString =
|
|
632
|
+
typeof payload === "string" ? payload : JSON.stringify(payload);
|
|
633
|
+
const signature = await generateSignature(timestamp, payloadString);
|
|
634
|
+
const headers = {
|
|
635
|
+
"x-payload-signature": signature,
|
|
636
|
+
"x-timestamp": timestamp,
|
|
637
|
+
};
|
|
638
|
+
return parse(payloadString, headers, secret, 300, verify);
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
async function expectVerifyFailure(
|
|
642
|
+
payload: unknown,
|
|
643
|
+
verify: VerifyOptions,
|
|
644
|
+
message: string,
|
|
645
|
+
): Promise<void> {
|
|
646
|
+
await expect(stringifyAndParse(payload, verify)).rejects.toThrow(message);
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
describe("onchain tx", () => {
|
|
650
|
+
it("should pass when all verification values match", async () => {
|
|
651
|
+
const result = await stringifyAndParse(validPayload, {
|
|
652
|
+
receiverAddress: validWebhook.data.receiver,
|
|
653
|
+
destinationTokenAddress: validWebhook.data.destinationToken.address,
|
|
654
|
+
destinationChainId: validWebhook.data.destinationToken.chainId,
|
|
655
|
+
minDestinationAmount: validWebhook.data.destinationAmount,
|
|
656
|
+
});
|
|
657
|
+
expect(result).toEqual(validWebhook);
|
|
658
|
+
});
|
|
659
|
+
|
|
660
|
+
it("should fail if receiverAddress does not match", async () => {
|
|
661
|
+
const expected = "0x0000000000000000000000000000000000000000";
|
|
662
|
+
await expectVerifyFailure(
|
|
663
|
+
validPayload,
|
|
664
|
+
{ receiverAddress: expected },
|
|
665
|
+
`Verification Failed: receiverAddress mismatch, Expected: ${expected}, Received: ${validWebhook.data.receiver}`,
|
|
666
|
+
);
|
|
667
|
+
});
|
|
668
|
+
|
|
669
|
+
it("should fail if destinationTokenAddress does not match", async () => {
|
|
670
|
+
const expected = "0x0000000000000000000000000000000000000001";
|
|
671
|
+
await expectVerifyFailure(
|
|
672
|
+
validPayload,
|
|
673
|
+
{ destinationTokenAddress: expected },
|
|
674
|
+
`Verification Failed: destinationTokenAddress mismatch, Expected: ${expected}, Received: ${validWebhook.data.destinationToken.address}`,
|
|
675
|
+
);
|
|
676
|
+
});
|
|
677
|
+
|
|
678
|
+
it("should fail if destinationChainId does not match", async () => {
|
|
679
|
+
const expected = 137;
|
|
680
|
+
await expectVerifyFailure(
|
|
681
|
+
validPayload,
|
|
682
|
+
{ destinationChainId: expected },
|
|
683
|
+
`Verification Failed: destinationChainId mismatch, Expected: ${expected}, Received: ${validWebhook.data.destinationToken.chainId}`,
|
|
684
|
+
);
|
|
685
|
+
});
|
|
686
|
+
|
|
687
|
+
it("should fail if minDestinationAmount is greater than actual", async () => {
|
|
688
|
+
const expectedMin = validWebhook.data.destinationAmount + 1n;
|
|
689
|
+
await expectVerifyFailure(
|
|
690
|
+
validPayload,
|
|
691
|
+
{ minDestinationAmount: expectedMin },
|
|
692
|
+
`Verification Failed: minDestinationAmount, Expected minimum amount to be ${expectedMin}, Received: ${validWebhook.data.destinationAmount}`,
|
|
693
|
+
);
|
|
694
|
+
});
|
|
695
|
+
});
|
|
696
|
+
|
|
697
|
+
describe("onramp tx", () => {
|
|
698
|
+
const onrampWebhook: WebhookPayload = {
|
|
699
|
+
data: {
|
|
700
|
+
amount: 100n,
|
|
701
|
+
currency: "USD",
|
|
702
|
+
currencyAmount: 100,
|
|
703
|
+
id: "onramp123",
|
|
704
|
+
onramp: "moonpay",
|
|
705
|
+
paymentLinkId: "plink_123",
|
|
706
|
+
purchaseData: {},
|
|
707
|
+
receiver: "0x1234567890123456789012345678901234567890",
|
|
708
|
+
sender: "0x1234567890123456789012345678901234567890",
|
|
709
|
+
status: "COMPLETED",
|
|
710
|
+
token: {
|
|
711
|
+
address: "0x1234567890123456789012345678901234567890",
|
|
712
|
+
chainId: 1,
|
|
713
|
+
decimals: 18,
|
|
714
|
+
iconUri: "https://example.com/icon.png",
|
|
715
|
+
name: "Token",
|
|
716
|
+
priceUsd: 1.0,
|
|
717
|
+
symbol: "TKN",
|
|
718
|
+
},
|
|
719
|
+
transactionHash: "0x1234567890123456789012345678901234567890",
|
|
720
|
+
},
|
|
721
|
+
type: "pay.onramp-transaction",
|
|
722
|
+
version: 2,
|
|
723
|
+
};
|
|
724
|
+
const onrampPayload = {
|
|
725
|
+
...onrampWebhook,
|
|
726
|
+
data: {
|
|
727
|
+
...onrampWebhook.data,
|
|
728
|
+
amount: onrampWebhook.data.amount.toString(),
|
|
729
|
+
},
|
|
730
|
+
};
|
|
731
|
+
|
|
732
|
+
it("should pass when all verification values match ", async () => {
|
|
733
|
+
const result = await stringifyAndParse(onrampPayload, {
|
|
734
|
+
receiverAddress: onrampWebhook.data.receiver,
|
|
735
|
+
destinationTokenAddress: onrampWebhook.data.token.address,
|
|
736
|
+
destinationChainId: onrampWebhook.data.token.chainId,
|
|
737
|
+
minDestinationAmount: onrampWebhook.data.amount,
|
|
738
|
+
});
|
|
739
|
+
expect(result).toEqual(onrampWebhook);
|
|
740
|
+
});
|
|
741
|
+
|
|
742
|
+
it("should fail if destinationTokenAddress does not match ", async () => {
|
|
743
|
+
const expected = "0x0000000000000000000000000000000000000002";
|
|
744
|
+
await expectVerifyFailure(
|
|
745
|
+
onrampPayload,
|
|
746
|
+
{ destinationTokenAddress: expected },
|
|
747
|
+
`Verification Failed: destinationTokenAddress mismatch, Expected: ${expected}, Received: ${onrampWebhook.data.token.address}`,
|
|
748
|
+
);
|
|
749
|
+
});
|
|
750
|
+
|
|
751
|
+
it("should fail if destinationChainId does not match ", async () => {
|
|
752
|
+
const expected = 8453;
|
|
753
|
+
await expectVerifyFailure(
|
|
754
|
+
onrampPayload,
|
|
755
|
+
{ destinationChainId: expected },
|
|
756
|
+
`Verification Failed: destinationChainId mismatch, Expected: ${expected}, Received: ${onrampWebhook.data.token.chainId}`,
|
|
757
|
+
);
|
|
758
|
+
});
|
|
759
|
+
|
|
760
|
+
it("should fail if minDestinationAmount is greater than actual ", async () => {
|
|
761
|
+
const expectedMin = onrampWebhook.data.amount + 1n;
|
|
762
|
+
await expectVerifyFailure(
|
|
763
|
+
onrampPayload,
|
|
764
|
+
{ minDestinationAmount: expectedMin },
|
|
765
|
+
`Verification Failed: minDestinationAmount, Expected minimum amount to be ${expectedMin}, Received: ${onrampWebhook.data.amount}`,
|
|
766
|
+
);
|
|
767
|
+
});
|
|
768
|
+
|
|
769
|
+
it("should fail if receiverAddress does not match", async () => {
|
|
770
|
+
const expected = "0x0000000000000000000000000000000000000003";
|
|
771
|
+
await expectVerifyFailure(
|
|
772
|
+
onrampPayload,
|
|
773
|
+
{ receiverAddress: expected },
|
|
774
|
+
`Verification Failed: receiverAddress mismatch, Expected: ${expected}, Received: ${onrampWebhook.data.receiver}`,
|
|
775
|
+
);
|
|
776
|
+
});
|
|
777
|
+
});
|
|
778
|
+
});
|
|
622
779
|
});
|
package/src/bridge/Webhook.ts
CHANGED
|
@@ -118,6 +118,28 @@ export async function parse(
|
|
|
118
118
|
* The tolerance in seconds for the timestamp verification.
|
|
119
119
|
*/
|
|
120
120
|
tolerance = 300, // Default to 5 minutes if not specified
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Add various validations to the parsed payload to ensure it matches the expected values. Throws error if any validation fails.
|
|
124
|
+
*/
|
|
125
|
+
verify?: {
|
|
126
|
+
/**
|
|
127
|
+
* Verify that the payload's the destination token amount (in wei) is greater than `minDestinationAmount` value
|
|
128
|
+
*/
|
|
129
|
+
minDestinationAmount?: bigint;
|
|
130
|
+
/**
|
|
131
|
+
* Verify that the payload's destination token address is the same as `destinationTokenAddress` value
|
|
132
|
+
*/
|
|
133
|
+
destinationTokenAddress?: string;
|
|
134
|
+
/**
|
|
135
|
+
* Verify that the payload's destination chain id is the same as `destinationChainId` value
|
|
136
|
+
*/
|
|
137
|
+
destinationChainId?: number;
|
|
138
|
+
/**
|
|
139
|
+
* Verify that the payload's receiver address is the same as `receiverAddress` value.
|
|
140
|
+
*/
|
|
141
|
+
receiverAddress?: string;
|
|
142
|
+
},
|
|
121
143
|
): Promise<WebhookPayload> {
|
|
122
144
|
// Get the signature and timestamp from headers
|
|
123
145
|
const receivedSignature =
|
|
@@ -183,5 +205,90 @@ export async function parse(
|
|
|
183
205
|
);
|
|
184
206
|
}
|
|
185
207
|
|
|
208
|
+
if (verify) {
|
|
209
|
+
// verify receiver address
|
|
210
|
+
if (verify.receiverAddress) {
|
|
211
|
+
if (
|
|
212
|
+
parsedPayload.data.receiver.toLowerCase() !==
|
|
213
|
+
verify.receiverAddress.toLowerCase()
|
|
214
|
+
) {
|
|
215
|
+
throw new Error(
|
|
216
|
+
`Verification Failed: receiverAddress mismatch, Expected: ${verify.receiverAddress}, Received: ${parsedPayload.data.receiver}`,
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// verify destination token address
|
|
222
|
+
if (verify.destinationTokenAddress) {
|
|
223
|
+
// onchain transaction
|
|
224
|
+
if ("destinationToken" in parsedPayload.data) {
|
|
225
|
+
if (
|
|
226
|
+
parsedPayload.data.destinationToken.address.toLowerCase() !==
|
|
227
|
+
verify.destinationTokenAddress.toLowerCase()
|
|
228
|
+
) {
|
|
229
|
+
throw new Error(
|
|
230
|
+
`Verification Failed: destinationTokenAddress mismatch, Expected: ${verify.destinationTokenAddress}, Received: ${parsedPayload.data.destinationToken.address}`,
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// onramp transaction
|
|
235
|
+
else if ("onramp" in parsedPayload.data) {
|
|
236
|
+
if (
|
|
237
|
+
parsedPayload.data.token.address.toLowerCase() !==
|
|
238
|
+
verify.destinationTokenAddress.toLowerCase()
|
|
239
|
+
) {
|
|
240
|
+
throw new Error(
|
|
241
|
+
`Verification Failed: destinationTokenAddress mismatch, Expected: ${verify.destinationTokenAddress}, Received: ${parsedPayload.data.token.address}`,
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// verify destination chain id
|
|
248
|
+
if (verify.destinationChainId) {
|
|
249
|
+
// onchain tx
|
|
250
|
+
if ("destinationToken" in parsedPayload.data) {
|
|
251
|
+
if (
|
|
252
|
+
parsedPayload.data.destinationToken.chainId !==
|
|
253
|
+
verify.destinationChainId
|
|
254
|
+
) {
|
|
255
|
+
throw new Error(
|
|
256
|
+
`Verification Failed: destinationChainId mismatch, Expected: ${verify.destinationChainId}, Received: ${parsedPayload.data.destinationToken.chainId}`,
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// onramp tx
|
|
261
|
+
else if ("onramp" in parsedPayload.data) {
|
|
262
|
+
if (parsedPayload.data.token.chainId !== verify.destinationChainId) {
|
|
263
|
+
throw new Error(
|
|
264
|
+
`Verification Failed: destinationChainId mismatch, Expected: ${verify.destinationChainId}, Received: ${parsedPayload.data.token.chainId}`,
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// verify amount
|
|
271
|
+
if (verify.minDestinationAmount) {
|
|
272
|
+
// onchain tx
|
|
273
|
+
if ("destinationAmount" in parsedPayload.data) {
|
|
274
|
+
if (
|
|
275
|
+
parsedPayload.data.destinationAmount < verify.minDestinationAmount
|
|
276
|
+
) {
|
|
277
|
+
throw new Error(
|
|
278
|
+
`Verification Failed: minDestinationAmount, Expected minimum amount to be ${verify.minDestinationAmount}, Received: ${parsedPayload.data.destinationAmount}`,
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
// onramp tx
|
|
283
|
+
else if ("onramp" in parsedPayload.data) {
|
|
284
|
+
if (parsedPayload.data.amount < verify.minDestinationAmount) {
|
|
285
|
+
throw new Error(
|
|
286
|
+
`Verification Failed: minDestinationAmount, Expected minimum amount to be ${verify.minDestinationAmount}, Received: ${parsedPayload.data.amount}`,
|
|
287
|
+
);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
186
293
|
return parsedPayload satisfies WebhookPayload;
|
|
187
294
|
}
|
|
@@ -60,6 +60,12 @@ export async function createStylusProject() {
|
|
|
60
60
|
{ title: "Airdrop ERC1155", value: "airdrop1155" },
|
|
61
61
|
{ title: "ZK ERC721", value: "zk-erc721" },
|
|
62
62
|
{ title: "ZK ERC20", value: "zk-erc20" },
|
|
63
|
+
{ title: "Mint module - ERC20", value: "mintable20" },
|
|
64
|
+
{ title: "Transfer module - ERC20", value: "transferable20" },
|
|
65
|
+
{ title: "Mint module - ERC721", value: "mintable721" },
|
|
66
|
+
{ title: "Transfer module - ERC721", value: "transferable721" },
|
|
67
|
+
{ title: "Mint module - ERC1155", value: "mintable1155" },
|
|
68
|
+
{ title: "Transfer module - ERC1155", value: "transferable1155" },
|
|
63
69
|
],
|
|
64
70
|
message: "Select a template:",
|
|
65
71
|
name: "projectType",
|
|
@@ -133,6 +139,49 @@ export async function createStylusProject() {
|
|
|
133
139
|
newProject = spawnSync("git", ["clone", repoUrl, projectName], {
|
|
134
140
|
stdio: "inherit",
|
|
135
141
|
});
|
|
142
|
+
} else if (projectType === "mintable20") {
|
|
143
|
+
const repoUrl = "git@github.com:thirdweb-example/stylus-mintable-erc20.git";
|
|
144
|
+
spinner.start(`Creating new ERC20 Mintable module: ${projectName}...`);
|
|
145
|
+
newProject = spawnSync("git", ["clone", repoUrl, projectName], {
|
|
146
|
+
stdio: "inherit",
|
|
147
|
+
});
|
|
148
|
+
} else if (projectType === "transferable20") {
|
|
149
|
+
const repoUrl =
|
|
150
|
+
"git@github.com:thirdweb-example/stylus-transferable-erc20.git";
|
|
151
|
+
spinner.start(`Creating new ERC20 Transferable module: ${projectName}...`);
|
|
152
|
+
newProject = spawnSync("git", ["clone", repoUrl, projectName], {
|
|
153
|
+
stdio: "inherit",
|
|
154
|
+
});
|
|
155
|
+
} else if (projectType === "mintable721") {
|
|
156
|
+
const repoUrl =
|
|
157
|
+
"git@github.com:thirdweb-example/stylus-mintable-erc721.git";
|
|
158
|
+
spinner.start(`Creating new ERC721 Mintable module: ${projectName}...`);
|
|
159
|
+
newProject = spawnSync("git", ["clone", repoUrl, projectName], {
|
|
160
|
+
stdio: "inherit",
|
|
161
|
+
});
|
|
162
|
+
} else if (projectType === "transferable721") {
|
|
163
|
+
const repoUrl =
|
|
164
|
+
"git@github.com:thirdweb-example/stylus-transferable-erc721.git";
|
|
165
|
+
spinner.start(`Creating new ERC721 Transferable module: ${projectName}...`);
|
|
166
|
+
newProject = spawnSync("git", ["clone", repoUrl, projectName], {
|
|
167
|
+
stdio: "inherit",
|
|
168
|
+
});
|
|
169
|
+
} else if (projectType === "mintable1155") {
|
|
170
|
+
const repoUrl =
|
|
171
|
+
"git@github.com:thirdweb-example/stylus-mintable-erc1155.git";
|
|
172
|
+
spinner.start(`Creating new ERC1155 Mintable module: ${projectName}...`);
|
|
173
|
+
newProject = spawnSync("git", ["clone", repoUrl, projectName], {
|
|
174
|
+
stdio: "inherit",
|
|
175
|
+
});
|
|
176
|
+
} else if (projectType === "transferable1155") {
|
|
177
|
+
const repoUrl =
|
|
178
|
+
"git@github.com:thirdweb-example/stylus-transferable-erc1155.git";
|
|
179
|
+
spinner.start(
|
|
180
|
+
`Creating new ERC1155 Transferable module: ${projectName}...`,
|
|
181
|
+
);
|
|
182
|
+
newProject = spawnSync("git", ["clone", repoUrl, projectName], {
|
|
183
|
+
stdio: "inherit",
|
|
184
|
+
});
|
|
136
185
|
}
|
|
137
186
|
|
|
138
187
|
if (!newProject || newProject.status !== 0) {
|
|
@@ -9,48 +9,44 @@ import { getContract } from "../contract.js";
|
|
|
9
9
|
import { deployCloneFactory } from "./utils/bootstrap.js";
|
|
10
10
|
|
|
11
11
|
describe.runIf(process.env.TW_SECRET_KEY)("deploy dynamic", () => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
chain: ANVIL_CHAIN,
|
|
19
|
-
client: TEST_CLIENT,
|
|
20
|
-
});
|
|
12
|
+
it.sequential("should deploy dynamic contract with extensions", async () => {
|
|
13
|
+
await deployCloneFactory({
|
|
14
|
+
account: TEST_ACCOUNT_A,
|
|
15
|
+
chain: ANVIL_CHAIN,
|
|
16
|
+
client: TEST_CLIENT,
|
|
17
|
+
});
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
19
|
+
const deployed = await deployPublishedContract({
|
|
20
|
+
account: TEST_ACCOUNT_A,
|
|
21
|
+
chain: ANVIL_CHAIN,
|
|
22
|
+
client: TEST_CLIENT,
|
|
23
|
+
contractId: "EvolvingNFT",
|
|
24
|
+
contractParams: {
|
|
25
|
+
contractURI: "",
|
|
26
|
+
defaultAdmin: TEST_ACCOUNT_A.address,
|
|
27
|
+
name: "Evolving nft",
|
|
28
|
+
royaltyBps: 0n,
|
|
29
|
+
royaltyRecipient: TEST_ACCOUNT_A.address,
|
|
30
|
+
saleRecipient: TEST_ACCOUNT_A.address,
|
|
31
|
+
symbol: "ENFT",
|
|
32
|
+
trustedForwarders: [],
|
|
33
|
+
},
|
|
34
|
+
});
|
|
38
35
|
|
|
39
|
-
|
|
36
|
+
expect(deployed).toBeDefined();
|
|
40
37
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
const contract = getContract({
|
|
39
|
+
address: deployed,
|
|
40
|
+
chain: ANVIL_CHAIN,
|
|
41
|
+
client: TEST_CLIENT,
|
|
42
|
+
});
|
|
46
43
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
const extensions = await readContract({
|
|
45
|
+
contract,
|
|
46
|
+
method: resolveMethod("getAllExtensions"),
|
|
47
|
+
params: [],
|
|
48
|
+
});
|
|
52
49
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
);
|
|
50
|
+
expect(extensions.length).toEqual(3);
|
|
51
|
+
});
|
|
56
52
|
});
|