@didtools/pkh-ethereum
Version:
Implements support to authenticate, authorize and verify with Ethereum accounts as a did:pkh with SIWE(X) and CACAO. Primarly used with `did-session` and `@didtools/cacao`.
47 lines (46 loc) • 1.66 kB
JavaScript
/* eslint-disable @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-argument */ // TODO types
import { AccountId } from 'caip';
export function safeSend(provider, method, params) {
if (params == null) {
params = [];
}
if (provider.request) {
return provider.request({
method,
params
}).then((response)=>response, (error)=>{
throw error;
});
} else if (provider.sendAsync || provider.send) {
const sendFunc = (provider.sendAsync ? provider.sendAsync : provider.send).bind(provider);
const request = encodeRpcMessage(method, params);
return new Promise((resolve, reject)=>{
sendFunc(request, (error, response)=>{
if (error) reject(error);
if (response.error) {
const error = new Error(response.error.message);
error.code = response.error.code;
error.data = response.error.data;
reject(error);
}
resolve(response.result);
});
});
} else {
throw new Error(`Unsupported provider; provider must implement one of the following methods: send, sendAsync, request`);
}
}
export function encodeRpcMessage(method, params) {
return {
jsonrpc: '2.0',
id: 1,
method,
params
};
}
export function normalizeAccountId(input) {
return new AccountId({
address: input.address.toLowerCase(),
chainId: input.chainId
});
}