@akord/akord-js-solana-signer
Version:
Solana signer for akord-js
81 lines (80 loc) • 3.5 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SolanaSigner = void 0;
const bs58_1 = __importDefault(require("bs58"));
const tweetnacl_1 = __importDefault(require("tweetnacl"));
class SolanaSigner {
constructor(config) {
this.keypair = config.keypair;
this.injectedWallet = config.injectedWallet;
if (!this.keypair && !this.injectedWallet) {
throw new Error("Missing wallet configuration. Please provide Solana keypair or inject the wallet.");
}
}
signingPublicKey() {
if (this.injectedWallet) {
if (!this.injectedWallet.publicKey) {
throw new Error("The injected wallet is missing publicKey field.");
}
return this.injectedWallet.publicKey.toBase58();
}
else {
return this.keypair.publicKey.toBase58();
}
}
signingPublicKeyRaw() {
if (this.injectedWallet) {
if (!this.injectedWallet.publicKey) {
throw new Error("The injected wallet is missing publicKey field.");
}
return this.injectedWallet.publicKey.toBytes();
}
else {
return this.keypair.publicKey.toBytes();
}
}
sign(message) {
return __awaiter(this, void 0, void 0, function* () {
const encodedMessage = new TextEncoder().encode(message);
if (this.injectedWallet) {
if (!this.injectedWallet.signMessage) {
throw new Error("The injected wallet is missing signMessage() method.");
}
const signedMessage = yield this.injectedWallet.signMessage(encodedMessage);
return signedMessage;
// return uint8ArrayToBase58(signedMessage);
}
else {
const signature = tweetnacl_1.default.sign.detached(encodedMessage, this.keypair.secretKey);
return bs58_1.default.encode(signature);
}
});
}
getAddress() {
return __awaiter(this, void 0, void 0, function* () {
return this.signingPublicKey();
});
}
verify(message, signature) {
return __awaiter(this, void 0, void 0, function* () {
const encodedMessage = new TextEncoder().encode(message);
const signatureUint8Array = bs58_1.default.decode(signature);
const isValid = tweetnacl_1.default.sign.detached.verify(encodedMessage, signatureUint8Array, this.signingPublicKeyRaw());
return isValid;
});
}
}
exports.default = SolanaSigner;
exports.SolanaSigner = SolanaSigner;