-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
npm and github version dont match #12
Comments
Odd, might have been a small fix pushed. Let me check.
…On Wed, Feb 10, 2021 at 8:19 AM kumavis ***@***.***> wrote:
https://npmfs.com/package/ethjs-query/0.3.8/
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#12 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACK2CXQMDH6NZ4EGP6XEZOTS6KBWHANCNFSM4G3OE7IQ>
.
|
still an issue: https://try.diffoscope.org/xuaufkeguqkq.html |
+1. Based on some errors I'm getting, there seems to be an extra |
To further clarify the above comment, here is what I am seeing when downloading function generateFnFor(rpcMethodName, methodObject) {
return function outputMethod() {
let callback = null; // eslint-disable-line
let inputs = null; // eslint-disable-line
let inputError = null; // eslint-disable-line
const self = this;
const args = [].slice.call(arguments); // eslint-disable-line
const protoMethodName = rpcMethodName.replace('eth_', ''); // eslint-disable-line
if (args.length > 0 && typeof args[args.length - 1] === 'function') {
callback = args.pop();
}
const promise = performCall.call(this);
// if callback provided, convert promise to callback
if (callback) {
return promiseToCallback(promise)(callback);
}
// only return promise if no callback provided
return promise;
function performCall() {
return new Promise((resolve, reject) => {
// validate arg length
if (args.length < methodObject[2]) {
reject(new Error(`[ethjs-query] method '${protoMethodName}' requires at least ${methodObject[2]} input (format type ${methodObject[0][0]}), ${args.length} provided. For more information visit: https://github.com/ethereum/wiki/wiki/JSON-RPC#${rpcMethodName.toLowerCase()}`));
return;
}
if (args.length > methodObject[0].length) {
reject(new Error(`[ethjs-query] method '${protoMethodName}' requires at most ${methodObject[0].length} params, ${args.length} provided '${JSON.stringify(args, null, self.options.jsonSpace)}'. For more information visit: https://github.com/ethereum/wiki/wiki/JSON-RPC#${rpcMethodName.toLowerCase()}`));
return;
}
// set default block
if (methodObject[3] && args.length < methodObject[3]) {
args.push('latest');
}
// format inputs
this.log(`attempting method formatting for '${protoMethodName}' with inputs ${JSON.stringify(args, null, this.options.jsonSpace)}`);
try {
inputs = format.formatInputs(rpcMethodName, args);
this.log(`method formatting success for '${protoMethodName}' with formatted result: ${JSON.stringify(inputs, null, this.options.jsonSpace)}`);
} catch (formattingError) {
reject(new Error(`[ethjs-query] while formatting inputs '${JSON.stringify(args, null, this.options.jsonSpace)}' for method '${protoMethodName}' error: ${formattingError}`));
return;
}
// perform rpc call
this.rpc.sendAsync({ method: rpcMethodName, params: inputs })
.then(result => {
// format result
try {
this.log(`attempting method formatting for '${protoMethodName}' with raw outputs: ${JSON.stringify(result, null, this.options.jsonSpace)}`);
const methodOutputs = format.formatOutputs(rpcMethodName, result);
this.log(`method formatting success for '${protoMethodName}' formatted result: ${JSON.stringify(methodOutputs, null, this.options.jsonSpace)}`);
resolve(methodOutputs);
return;
} catch (outputFormattingError) {
const outputError = new Error(`[ethjs-query] while formatting outputs from RPC '${JSON.stringify(result, null, this.options.jsonSpace)}' for method '${protoMethodName}' ${outputFormattingError}`);
reject(outputError);
return;
}
})
.catch(error => {
const outputError = new Error(`[ethjs-query] while formatting outputs from RPC '${JSON.stringify(error, null, this.options.jsonSpace)}'`);
reject(outputError);
return;
});
});
}
};
} But here is what I see here on GitHub: const format = require('ethjs-format');
const EthRPC = require('ethjs-rpc');
const promiseToCallback = require('promise-to-callback');
module.exports = Eth;
function Eth(provider, options) {
const self = this;
const optionsObject = options || {};
if (!(this instanceof Eth)) { throw new Error('[ethjs-query] the Eth object requires the "new" flag in order to function normally (i.e. `const eth = new Eth(provider);`).'); }
if (typeof provider !== 'object') { throw new Error(`[ethjs-query] the Eth object requires that the first input 'provider' must be an object, got '${typeof provider}' (i.e. 'const eth = new Eth(provider);')`); }
self.options = Object.assign({
debug: optionsObject.debug || false,
logger: optionsObject.logger || console,
jsonSpace: optionsObject.jsonSpace || 0,
});
self.rpc = new EthRPC(provider);
self.setProvider = self.rpc.setProvider;
}
Eth.prototype.log = function log(message) {
const self = this;
if (self.options.debug) self.options.logger.log(`[ethjs-query log] ${message}`);
};
Object.keys(format.schema.methods).forEach((rpcMethodName) => {
Object.defineProperty(Eth.prototype, rpcMethodName.replace('eth_', ''), {
enumerable: true,
value: generateFnFor(rpcMethodName, format.schema.methods[rpcMethodName]),
});
});
function generateFnFor(rpcMethodName, methodObject) {
return function outputMethod() {
let callback = null; // eslint-disable-line
let inputs = null; // eslint-disable-line
let inputError = null; // eslint-disable-line
const self = this;
const args = [].slice.call(arguments); // eslint-disable-line
const protoMethodName = rpcMethodName.replace('eth_', ''); // eslint-disable-line
if (args.length > 0 && typeof args[args.length - 1] === 'function') {
callback = args.pop();
}
const promise = performCall.call(this);
// if callback provided, convert promise to callback
if (callback) {
return promiseToCallback(promise)(callback);
}
// only return promise if no callback provided
return promise;
async function performCall() {
// validate arg length
if (args.length < methodObject[2]) {
throw new Error(`[ethjs-query] method '${protoMethodName}' requires at least ${methodObject[2]} input (format type ${methodObject[0][0]}), ${args.length} provided. For more information visit: https://github.com/ethereum/wiki/wiki/JSON-RPC#${rpcMethodName.toLowerCase()}`);
}
if (args.length > methodObject[0].length) {
throw new Error(`[ethjs-query] method '${protoMethodName}' requires at most ${methodObject[0].length} params, ${args.length} provided '${JSON.stringify(args, null, self.options.jsonSpace)}'. For more information visit: https://github.com/ethereum/wiki/wiki/JSON-RPC#${rpcMethodName.toLowerCase()}`);
}
// set default block
if (methodObject[3] && args.length < methodObject[3]) {
args.push('latest');
}
// format inputs
this.log(`attempting method formatting for '${protoMethodName}' with inputs ${JSON.stringify(args, null, this.options.jsonSpace)}`);
try {
inputs = format.formatInputs(rpcMethodName, args);
this.log(`method formatting success for '${protoMethodName}' with formatted result: ${JSON.stringify(inputs, null, this.options.jsonSpace)}`);
} catch (formattingError) {
throw new Error(`[ethjs-query] while formatting inputs '${JSON.stringify(args, null, this.options.jsonSpace)}' for method '${protoMethodName}' error: ${formattingError}`);
}
// perform rpc call
const result = await this.rpc.sendAsync({ method: rpcMethodName, params: inputs });
// format result
try {
this.log(`attempting method formatting for '${protoMethodName}' with raw outputs: ${JSON.stringify(result, null, this.options.jsonSpace)}`);
const methodOutputs = format.formatOutputs(rpcMethodName, result);
this.log(`method formatting success for '${protoMethodName}' formatted result: ${JSON.stringify(methodOutputs, null, this.options.jsonSpace)}`);
return methodOutputs;
} catch (outputFormattingError) {
const outputError = new Error(`[ethjs-query] while formatting outputs from RPC '${JSON.stringify(result, null, this.options.jsonSpace)}' for method '${protoMethodName}' ${outputFormattingError}`);
throw outputError;
}
}
};
} Note how in the first case, a promise is being returned whereas in the second case, async/await syntax is being used. |
latest on github shows 0.3.7
latest on npm shows 0.3.8
The text was updated successfully, but these errors were encountered: