@useorbis/db-sdk
Version:
Orbis' Typescript SDK for building open-data experiences.
64 lines (63 loc) • 2.05 kB
JavaScript
import { SiweMessage } from "@didtools/cacao";
import { normalizeProvider } from "../providers/index.js";
import { SupportedChains, } from "../types/providers.js";
import { normalizeEVMProvider } from "../providers/evm.js";
import { authenticateDidWithSiwx } from "./common.js";
export class OrbisEVMAuth {
orbisAuthId = "orbis-evm";
chain = SupportedChains.ethereum;
#provider;
constructor(provider) {
this.#provider = normalizeProvider({ provider, chain: this.chain });
}
get provider() {
return this.#provider;
}
async getUserInformation() {
await this.#provider.connect();
const address = await this.#provider.getAddress();
const did = `did:pkh:eip155:1:${address.toLowerCase()}`;
const chain = this.chain;
return {
did,
chain,
metadata: {
address,
},
};
}
async signSiwx(siwx) {
await this.#provider.connect();
const user = await this.getUserInformation();
const siweMessage = new SiweMessage(siwx);
const messageToSign = siweMessage.signMessage();
const signature = await this.#provider.signMessage(messageToSign);
siweMessage.signature = signature;
return {
user,
chain: this.chain,
siwx: {
message: siweMessage,
serialized: messageToSign,
signature,
},
};
}
async authenticateDid({ siwxOverwrites, params } = {}) {
const { did, session } = await authenticateDidWithSiwx({
authenticator: this,
siwxOverwrites,
});
return {
did,
session,
};
}
}
export class OrbisWeb3AuthEVMAuth extends OrbisEVMAuth {
orbisAuthId = "orbis-evm-web3auth";
constructor(provider) {
const sanitizedProvider = Object.assign(normalizeEVMProvider({ provider }), { connect: async () => { } });
super(sanitizedProvider);
}
}