hyjs-test
Version:
first hymatrix-js sdk
122 lines (121 loc) • 5.27 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isJWKInterface = exports.createAndSignItem = exports.checkArPermissions = void 0;
const signing_1 = require("arseeding-arbundles/src/signing");
const ethereumSigner_1 = __importDefault(require("arseeding-arbundles/src/signing/chains/ethereumSigner"));
const arseeding_arbundles_1 = require("arseeding-arbundles");
const isString_1 = __importDefault(require("lodash/isString"));
const utils_1 = require("../utils");
const providers_1 = require("@ethersproject/providers");
const ethers_1 = require("ethers");
const checkArPermissions = async (permissions) => {
let existingPermissions = [];
permissions = (0, isString_1.default)(permissions) ? [permissions] : permissions;
try {
existingPermissions = await window.arweaveWallet.getPermissions();
}
catch {
throw new Error('PLEASE_INSTALL_ARCONNECT');
}
if (permissions.length === 0) {
return;
}
if (permissions.some((permission) => {
return !existingPermissions.includes(permission);
})) {
await window.arweaveWallet.connect(permissions);
}
};
exports.checkArPermissions = checkArPermissions;
let ethPublicKey = '';
const createAndSignItem = async (config, params) => {
const sdkTimestampTag = [
{
name: 'SDK-Timestamp',
value: Date.now().toString()
}
];
const { tags, processId: target, data = '' } = params;
const finalTags = (0, utils_1.mergeTags)(sdkTimestampTag, tags);
if (((config === null || config === void 0 ? void 0 : config.signer) != null || config.signer !== undefined) && config.signer instanceof providers_1.Web3Provider) {
const signer = new signing_1.InjectedEthereumSigner(config.signer);
if (ethPublicKey !== '') {
const signerAddr = await config.signer.getSigner().getAddress();
const publicKeyAddr = ethers_1.utils.computeAddress('0x' + ethPublicKey);
if (signerAddr.toLowerCase() !== publicKeyAddr.toLowerCase()) {
await signer.setPublicKey();
ethPublicKey = signer.publicKey.toString('hex');
}
else {
signer.setPublicKey = async function () {
this.publicKey = Buffer.from(ethPublicKey, 'hex');
};
await signer.setPublicKey();
}
}
else {
await signer.setPublicKey();
ethPublicKey = signer.publicKey.toString('hex');
}
const dataItem = (0, arseeding_arbundles_1.createData)(data, signer, {
tags: finalTags,
target
});
await dataItem.sign(signer);
return dataItem.getRaw();
}
else if ((config.arJWK != null || config.arJWK !== undefined) && config.arJWK === 'use_wallet') {
await (0, exports.checkArPermissions)([
'ACCESS_ADDRESS',
'ACCESS_ALL_ADDRESSES',
'ACCESS_PUBLIC_KEY',
'SIGN_TRANSACTION',
'SIGNATURE'
]);
if (window.arweaveWallet !== undefined && typeof window.arweaveWallet.signDataItem === 'function') {
const signed = await window.arweaveWallet.signDataItem({
data,
tags: finalTags,
target
});
const dataItem = new arseeding_arbundles_1.DataItem(Buffer.from(signed));
return dataItem.getRaw();
}
else {
throw new Error('window.arweaveWallet not undefined');
}
}
else if (typeof config.privateKey === 'string' && /^0x[0-9a-fA-F]{64}$/.test(config.privateKey)) {
const signer = new ethereumSigner_1.default(config.privateKey.slice(2));
const dataItem = (0, arseeding_arbundles_1.createData)(data, signer, { tags: finalTags, target });
await dataItem.sign(signer);
return dataItem.getRaw();
}
else if (config.arJWK !== undefined && isJWKInterface(config.arJWK)) {
const signer = new signing_1.ArweaveSigner(config.arJWK);
const dataItem = (0, arseeding_arbundles_1.createData)(data, signer, { tags: finalTags, target });
await dataItem.sign(signer);
return dataItem.getRaw();
}
throw new Error('Config must provide at least one of: ethSigner, privateKey, or arJWK');
};
exports.createAndSignItem = createAndSignItem;
function isJWKInterface(obj) {
return (obj !== null &&
typeof obj === 'object' &&
typeof obj.kty === 'string' &&
typeof obj.e === 'string' &&
typeof obj.n === 'string'
// // 可选字段不强制判断,但可以加类型判断,防止异常
// (obj.d === undefined || typeof obj.d === 'string') &&
// (obj.p === undefined || typeof obj.p === 'string') &&
// (obj.q === undefined || typeof obj.q === 'string') &&
// (obj.dp === undefined || typeof obj.dp === 'string') &&
// (obj.dq === undefined || typeof obj.dq === 'string') &&
// (obj.qi === undefined || typeof obj.qi === 'string')
);
}
exports.isJWKInterface = isJWKInterface;