@chipi-stack/core 0.6.0 → 0.6.2
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.cjs +22 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +22 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -551,13 +551,17 @@ var DEFAULT_PAYMENT_HEADER = "X-PAYMENT";
|
|
|
551
551
|
var X402_DOMAIN = {
|
|
552
552
|
name: "x402-starknet",
|
|
553
553
|
version: "1",
|
|
554
|
-
chainId: "SN_MAIN"
|
|
554
|
+
chainId: "SN_MAIN",
|
|
555
|
+
// SNIP-12 revision 1 (StarknetDomain). Without it starknet.js refuses to
|
|
556
|
+
// hash the typed data, so no account could sign a payment.
|
|
557
|
+
revision: "1"
|
|
555
558
|
};
|
|
556
559
|
var X402_TYPES = {
|
|
557
560
|
StarknetDomain: [
|
|
558
561
|
{ name: "name", type: "shortstring" },
|
|
559
562
|
{ name: "version", type: "shortstring" },
|
|
560
|
-
{ name: "chainId", type: "shortstring" }
|
|
563
|
+
{ name: "chainId", type: "shortstring" },
|
|
564
|
+
{ name: "revision", type: "shortstring" }
|
|
561
565
|
],
|
|
562
566
|
Payment: [
|
|
563
567
|
{ name: "from_address", type: "ContractAddress" },
|
|
@@ -589,7 +593,7 @@ function buildX402TypedData(message) {
|
|
|
589
593
|
return {
|
|
590
594
|
types: X402_TYPES,
|
|
591
595
|
primaryType: "Payment",
|
|
592
|
-
domain: X402_DOMAIN,
|
|
596
|
+
domain: { ...X402_DOMAIN },
|
|
593
597
|
message: {
|
|
594
598
|
...resolved,
|
|
595
599
|
amount: { low: resolved.amount, high: "0" }
|
|
@@ -763,12 +767,24 @@ function generateNonce() {
|
|
|
763
767
|
}
|
|
764
768
|
return `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
765
769
|
}
|
|
770
|
+
function feltEquals(value, expected) {
|
|
771
|
+
try {
|
|
772
|
+
return BigInt(value) === expected;
|
|
773
|
+
} catch {
|
|
774
|
+
return false;
|
|
775
|
+
}
|
|
776
|
+
}
|
|
766
777
|
function normalizeX402Signature(signature) {
|
|
767
778
|
if (Array.isArray(signature)) {
|
|
768
|
-
if (signature.length
|
|
769
|
-
|
|
779
|
+
if (signature.length === 2) {
|
|
780
|
+
return { r: String(signature[0]), s: String(signature[1]) };
|
|
781
|
+
}
|
|
782
|
+
if (signature.length === 5 && feltEquals(signature[0], 1n) && feltEquals(signature[1], 0n)) {
|
|
783
|
+
return { r: String(signature[3]), s: String(signature[4]) };
|
|
770
784
|
}
|
|
771
|
-
|
|
785
|
+
throw new Error(
|
|
786
|
+
`Unsupported ${signature.length}-felt signature: x402 needs one Starknet key, signed as [r, s] (OpenZeppelin, Braavos) or [1, 0, pubkey, r, s] (Argent / Ready).`
|
|
787
|
+
);
|
|
772
788
|
}
|
|
773
789
|
if (signature && typeof signature === "object" && "r" in signature && "s" in signature) {
|
|
774
790
|
const sig = signature;
|