@useorbis/db-sdk
Version:
Orbis' Typescript SDK for building open-data experiences.
58 lines (57 loc) • 1.8 kB
JavaScript
import { SiwTezosMessage } from "@didtools/cacao";
import { normalizeProvider } from "../providers/index.js";
import { SupportedChains, } from "../types/providers.js";
import { authenticateDidWithSiwx } from "./common.js";
export class OrbisTezosAuth {
orbisAuthId = "orbis-tezos";
chain = SupportedChains.tezos;
#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();
// mainnet chain NetXdQprcVkpaWU
// devnet chain NetXm8tYqnMWky1
const did = `did:pkh:tezos:NetXdQprcVkpaWU:${address}`;
const chain = this.chain;
return {
did,
chain,
metadata: {
address,
},
};
}
async signSiwx(siwx) {
await this.#provider.connect();
const user = await this.getUserInformation();
const siwtMessage = new SiwTezosMessage(siwx);
const messageToSign = siwtMessage.signMessage();
const signature = await this.#provider.signMessage(messageToSign);
siwtMessage.signature = signature;
return {
chain: this.chain,
user,
siwx: {
message: siwtMessage,
serialized: messageToSign,
signature,
},
};
}
async authenticateDid({ siwxOverwrites, params } = {}) {
const { did, session } = await authenticateDidWithSiwx({
authenticator: this,
siwxOverwrites,
});
return {
did,
session,
};
}
}