UNPKG

hyjs-test

Version:
122 lines (121 loc) 5.27 kB
"use strict"; 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;