@opendatalabs/vana-sdk
Version:
A TypeScript library for interacting with Vana Network smart contracts.
97 lines • 3.26 kB
JavaScript
import {
isAddress
} from "viem";
import {
SERVER_REGISTRATION_TYPES,
serverRegistrationDomain
} from "./eip712.js";
const PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID = 1480;
const PERSONAL_SERVER_REGISTRATION_DEFAULT_VERIFYING_CONTRACT = "0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c";
function assertAddress(value, name) {
if (!isAddress(value)) {
throw new Error(`${name} must be a valid EVM address`);
}
}
function getAccountAddress(account) {
if (!account) {
return void 0;
}
return typeof account === "string" ? account : account.address;
}
function isPersonalServerRegistrationSigner(source) {
return "address" in source && typeof source.signTypedData === "function";
}
function createViemPersonalServerRegistrationSigner(source, options = {}) {
if (isPersonalServerRegistrationSigner(source)) {
return source;
}
const accountAddress = getAccountAddress(options.account) ?? getAccountAddress(source.account);
if (accountAddress) {
return {
address: accountAddress,
signTypedData: (typedData) => source.signTypedData({
...typedData,
account: options.account ?? source.account ?? accountAddress
})
};
}
throw new Error(
"Viem wallet client requires an account option or account property"
);
}
function personalServerRegistrationDomain(input = {}) {
if (input.config) {
return serverRegistrationDomain(input.config);
}
const verifyingContract = input.verifyingContract ?? PERSONAL_SERVER_REGISTRATION_DEFAULT_VERIFYING_CONTRACT;
assertAddress(verifyingContract, "verifyingContract");
return {
name: "Vana Data Portability",
version: "1",
chainId: input.chainId ?? PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID,
verifyingContract
};
}
function buildPersonalServerRegistrationTypedData(input) {
assertAddress(input.ownerAddress, "ownerAddress");
assertAddress(input.serverAddress, "serverAddress");
return {
domain: personalServerRegistrationDomain(input),
types: SERVER_REGISTRATION_TYPES,
primaryType: "ServerRegistration",
message: {
ownerAddress: input.ownerAddress,
serverAddress: input.serverAddress,
publicKey: input.serverPublicKey,
serverUrl: input.serverUrl
}
};
}
async function buildPersonalServerRegistrationSignature(input) {
const typedData = buildPersonalServerRegistrationTypedData({
ownerAddress: input.signer.address,
serverAddress: input.serverAddress,
serverPublicKey: input.serverPublicKey,
serverUrl: input.serverUrl,
config: input.config,
chainId: input.chainId,
verifyingContract: input.verifyingContract
});
const signature = await input.signer.signTypedData(typedData);
return {
signature,
signerAddress: input.signer.address,
typedData
};
}
const registerPersonalServerSignature = buildPersonalServerRegistrationSignature;
export {
PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID,
PERSONAL_SERVER_REGISTRATION_DEFAULT_VERIFYING_CONTRACT,
buildPersonalServerRegistrationSignature,
buildPersonalServerRegistrationTypedData,
createViemPersonalServerRegistrationSigner,
personalServerRegistrationDomain,
registerPersonalServerSignature
};
//# sourceMappingURL=personal-server-registration.js.map