UNPKG

@bit-gpt/h402

Version:

BitGPT's 402 open protocol for blockchain-native payments

82 lines 3.3 kB
import { safeBase64Decode, safeBase64Encode, } from "../../../../shared/base64.js"; function encodePaymentPayload(payment) { const safe = { ...payment, payload: { ...payment.payload, ...(payment.payload.type === "authorization" && { authorization: { ...payment.payload.authorization, value: payment.payload.authorization.value.toString(), validAfter: payment.payload.authorization.validAfter.toString(), validBefore: payment.payload.authorization.validBefore.toString(), }, }), }, }; return safeBase64Encode(JSON.stringify(safe)); } function decodePaymentPayload(payment) { const decoded = safeBase64Decode(payment); const parsed = JSON.parse(decoded); const obj = { ...parsed, payload: { ...parsed.payload, ...(parsed.payload.type === "authorization" && { authorization: { ...parsed.payload.authorization, value: BigInt(parsed.payload.authorization.value), validAfter: BigInt(parsed.payload.authorization.validAfter), validBefore: BigInt(parsed.payload.authorization.validBefore), }, }), }, }; return validatePaymentPayload(obj); } function validatePaymentPayload(obj) { if (!obj || typeof obj !== "object" || !obj.payload || typeof obj.payload !== "object" || !obj.payload.type) { throw new Error("Invalid payment payload structure"); } switch (obj.payload.type) { case "authorization": if (!obj.payload.authorization || typeof obj.payload.authorization.value !== "bigint" || typeof obj.payload.authorization.validAfter !== "bigint" || typeof obj.payload.authorization.validBefore !== "bigint" || typeof obj.payload.authorization.nonce !== "string" || typeof obj.payload.authorization.version !== "string" || !obj.payload.signature || !obj.payload.signature.startsWith("0x")) { throw new Error("Invalid authorization payload values"); } break; case "signedTransaction": { if (!obj.payload.signedTransaction || typeof obj.payload.signedTransaction !== "string" || !obj.payload.signedMessage || !obj.payload.signedMessage.startsWith("0x")) { throw new Error("Invalid signed transaction payload values"); } break; } case "signAndSendTransaction": if (!obj.payload.transactionHash || typeof obj.payload.transactionHash !== "string" || !obj.payload.signedMessage || !obj.payload.signedMessage.startsWith("0x")) { throw new Error("Invalid sign and send transaction payload values"); } break; default: throw new Error("Invalid payload type"); } return obj; } export { encodePaymentPayload, decodePaymentPayload }; //# sourceMappingURL=paymentUtils.js.map