Skip to content

Commit

Permalink
Feat(Oracle): Polling for queries (#648)
Browse files Browse the repository at this point in the history
* chore(package): Bump version to 2.4.1

* chore(Adjust CHANGELOG):

* chore(CAHNGELOG): Fix typo

* docs(USAGE): Fix networkId in Wallet example

* fix(Http): Remove userAgent from axios

* chore(CHANGELOG): Fix typo

* docs(*): Regenrate docs

* chore(bump version in package):

* chore(CHANGELOG): Adjust changelog to conventional changelog style

* chore(Docker): Update node version tot 2.3.0

* docs(CHANGELOG): Adjust release

* feat(npm): Add script for auto-generating changelog

* chore(Node): downgrade to 2.2.0 due to failed channel test

* fix(Channel): Fix failing test on 2.3.0 node

* chore(package-lock): adjust package-lock

* chore(Channel): Revert to 2.2.0

* docs(Docs): Regenerate docs

* refactor(node): Add txHash to sendTransaction error

* chore(package): bump version to 3.1.0

* chore(Docs): Regeneratee docs and changelog

* chore(package): Add packa-lock

* chore(changelog): Adjust closes issue

* chore(package): Bump version to 3.2.0

* docs(Docs and Changelog): Regenerate docs

* docs(CHANGELOG): Adjust changelog

* docs(CHANGELOG): Adjust changelog

* chore(Jenkions): Force jenkins

* fix(NPM): Make audit of npm packages. Remove esm from deps

* chore(Release): Bump version in package, generate CHNAGELOG

* force Jenkins

* force Jenkins

* force Jenkins

* force Jenkins

* fix(AEP exampe): Fix contract in AEPP example

* Release/3.3.0 (#417)

* Realign/3.2.1 (#412)

* chore(package): Bump version to 2.4.1

* chore(Adjust CHANGELOG):

* chore(CAHNGELOG): Fix typo

* docs(USAGE): Fix networkId in Wallet example

* fix(Http): Remove userAgent from axios

* chore(CHANGELOG): Fix typo

* docs(*): Regenrate docs

* chore(bump version in package):

* chore(CHANGELOG): Adjust changelog to conventional changelog style

* chore(Docker): Update node version tot 2.3.0

* docs(CHANGELOG): Adjust release

* feat(npm): Add script for auto-generating changelog

* chore(Node): downgrade to 2.2.0 due to failed channel test

* fix(Channel): Fix failing test on 2.3.0 node

* chore(package-lock): adjust package-lock

* chore(Channel): Revert to 2.2.0

* docs(Docs): Regenerate docs

* refactor(node): Add txHash to sendTransaction error

* chore(package): bump version to 3.1.0

* chore(Docs): Regeneratee docs and changelog

* chore(package): Add packa-lock

* chore(changelog): Adjust closes issue

* chore(package): Bump version to 3.2.0

* docs(Docs and Changelog): Regenerate docs

* docs(CHANGELOG): Adjust changelog

* docs(CHANGELOG): Adjust changelog

* chore(Jenkions): Force jenkins

* fix(NPM): Make audit of npm packages. Remove esm from deps

* chore(Release): Bump version in package, generate CHNAGELOG

* force Jenkins

* force Jenkins

* force Jenkins

* force Jenkins

* feat(Consensus): Add function to get consensus version.  (#413)

* feat(Consensus): Add function to get conmsensus version. Get vm/abi based on node protocol

* chore(node): Remove logs

* add docs for node getProtocol

* disable channel tests

* try to fix channel test

* try to fix channel test

* Make sdk compatible with node from 2.3.0 to 4.0.0

* feat(TxBuilder): INT type must be greater or equal 0 int transaction

* feat(State Channels): Make state channels compatible with aeternity v… (#415)

* feat(State Channels): Make state channels compatible with aeternity v3.0.0

* Fix lint error

* feat(Transaction Builder): Add serializations for transactions introd… (#416)

* feat(Transaction Builder): Add serializations for transactions introduced in fortuna release

* Fix lint errors

* fix(AEP exampe): Fix contract in AEPP example

* chore(package): Bump version to 3.3.0

* fix(Node): Use universalUrl istead of ES URL

* Enable channel tests

* chore(package): Bump version to 3.4.0

* chore(CHANGELOG): Adjust CHANGELOG for 3.4.0

* chore(CHANGELOG/.env): Adjust changlog. Point node version in `.env` to v3.0.0-rc.1

* chore(.env): Remove trailing newlines

* docs(Docs): Regenrate docs

* fix(Deps): Update axios lib to 0.19.0

* chore(Release): Bump version to 3.4.1. Regenerate CHANGELOG

* Adjust changelog

* build(deps): Make audit of example app packages. Regenerate lock files

* chore(package): Bump version to 4.0.0

Regenerate CHANGELOG

* chore(CHANGELOG): Adjust CHANGELOG

* chore(build): Regenerate package-lock and pnpm-lock

* docs(API): Regenrate

* chore(Changelog): Adjust CHANGELOG

* chore(docs): Resolve comments

* chore(examples): Regenerate lock files

* chore(CHANGELOG): Adjust

* chore(Release): Bump version to 4.0.1. Generate CHANGELOG

* docs(api): generate docs

* chore(lock): Update lock files

* force jenkins

* Adjust changelog

* chore(release): bump version in package to 4.1.0

* build(docker): Add Channel url to docker env for test

* chore(release): Regenerate CHANGELOG

* chore(docs): Regenerate docs and lock file

* chore(CHANGELOG): Adjust changelog. Add example of usage

* chore(example): Update sdk version in example vuejs app

* fix typo

* Bump version to 4.2.0
Adjust README

* Adjust Changelog

* Adjust Changelog

* Update examples app deps

* chore(examples): Update lock file fix webpack config

* Release 4.3.0 (#582)

* Realign 4.2.0 (#548)

* chore(package): Bump version to 2.4.1

* chore(Adjust CHANGELOG):

* chore(CAHNGELOG): Fix typo

* docs(USAGE): Fix networkId in Wallet example

* fix(Http): Remove userAgent from axios

* chore(CHANGELOG): Fix typo

* docs(*): Regenrate docs

* chore(bump version in package):

* chore(CHANGELOG): Adjust changelog to conventional changelog style

* chore(Docker): Update node version tot 2.3.0

* docs(CHANGELOG): Adjust release

* feat(npm): Add script for auto-generating changelog

* chore(Node): downgrade to 2.2.0 due to failed channel test

* fix(Channel): Fix failing test on 2.3.0 node

* chore(package-lock): adjust package-lock

* chore(Channel): Revert to 2.2.0

* docs(Docs): Regenerate docs

* refactor(node): Add txHash to sendTransaction error

* chore(package): bump version to 3.1.0

* chore(Docs): Regeneratee docs and changelog

* chore(package): Add packa-lock

* chore(changelog): Adjust closes issue

* chore(package): Bump version to 3.2.0

* docs(Docs and Changelog): Regenerate docs

* docs(CHANGELOG): Adjust changelog

* docs(CHANGELOG): Adjust changelog

* chore(Jenkions): Force jenkins

* fix(NPM): Make audit of npm packages. Remove esm from deps

* chore(Release): Bump version in package, generate CHNAGELOG

* force Jenkins

* force Jenkins

* force Jenkins

* force Jenkins

* fix(AEP exampe): Fix contract in AEPP example

* Release/3.3.0 (#417)

* Realign/3.2.1 (#412)

* chore(package): Bump version to 2.4.1

* chore(Adjust CHANGELOG):

* chore(CAHNGELOG): Fix typo

* docs(USAGE): Fix networkId in Wallet example

* fix(Http): Remove userAgent from axios

* chore(CHANGELOG): Fix typo

* docs(*): Regenrate docs

* chore(bump version in package):

* chore(CHANGELOG): Adjust changelog to conventional changelog style

* chore(Docker): Update node version tot 2.3.0

* docs(CHANGELOG): Adjust release

* feat(npm): Add script for auto-generating changelog

* chore(Node): downgrade to 2.2.0 due to failed channel test

* fix(Channel): Fix failing test on 2.3.0 node

* chore(package-lock): adjust package-lock

* chore(Channel): Revert to 2.2.0

* docs(Docs): Regenerate docs

* refactor(node): Add txHash to sendTransaction error

* chore(package): bump version to 3.1.0

* chore(Docs): Regeneratee docs and changelog

* chore(package): Add packa-lock

* chore(changelog): Adjust closes issue

* chore(package): Bump version to 3.2.0

* docs(Docs and Changelog): Regenerate docs

* docs(CHANGELOG): Adjust changelog

* docs(CHANGELOG): Adjust changelog

* chore(Jenkions): Force jenkins

* fix(NPM): Make audit of npm packages. Remove esm from deps

* chore(Release): Bump version in package, generate CHNAGELOG

* force Jenkins

* force Jenkins

* force Jenkins

* force Jenkins

* feat(Consensus): Add function to get consensus version.  (#413)

* feat(Consensus): Add function to get conmsensus version. Get vm/abi based on node protocol

* chore(node): Remove logs

* add docs for node getProtocol

* disable channel tests

* try to fix channel test

* try to fix channel test

* Make sdk compatible with node from 2.3.0 to 4.0.0

* feat(TxBuilder): INT type must be greater or equal 0 int transaction

* feat(State Channels): Make state channels compatible with aeternity v… (#415)

* feat(State Channels): Make state channels compatible with aeternity v3.0.0

* Fix lint error

* feat(Transaction Builder): Add serializations for transactions introd… (#416)

* feat(Transaction Builder): Add serializations for transactions introduced in fortuna release

* Fix lint errors

* fix(AEP exampe): Fix contract in AEPP example

* chore(package): Bump version to 3.3.0

* fix(Node): Use universalUrl istead of ES URL

* Enable channel tests

* chore(package): Bump version to 3.4.0

* chore(CHANGELOG): Adjust CHANGELOG for 3.4.0

* chore(CHANGELOG/.env): Adjust changlog. Point node version in `.env` to v3.0.0-rc.1

* chore(.env): Remove trailing newlines

* docs(Docs): Regenrate docs

* fix(Deps): Update axios lib to 0.19.0

* chore(Release): Bump version to 3.4.1. Regenerate CHANGELOG

* Adjust changelog

* build(deps): Make audit of example app packages. Regenerate lock files

* chore(package): Bump version to 4.0.0

Regenerate CHANGELOG

* chore(CHANGELOG): Adjust CHANGELOG

* chore(build): Regenerate package-lock and pnpm-lock

* docs(API): Regenrate

* chore(Changelog): Adjust CHANGELOG

* chore(docs): Resolve comments

* chore(examples): Regenerate lock files

* chore(CHANGELOG): Adjust

* chore(Release): Bump version to 4.0.1. Generate CHANGELOG

* docs(api): generate docs

* chore(lock): Update lock files

* force jenkins

* Adjust changelog

* chore(release): bump version in package to 4.1.0

* build(docker): Add Channel url to docker env for test

* chore(release): Regenerate CHANGELOG

* chore(docs): Regenerate docs and lock file

* chore(CHANGELOG): Adjust changelog. Add example of usage

* chore(example): Update sdk version in example vuejs app

* fix typo

* Bump version to 4.2.0
Adjust README

* Adjust Changelog

* Adjust Changelog

* Update examples app deps

* chore(examples): Update lock file fix webpack config

* Update vue-loader in group default to the latest version 🚀 (#553)

* chore(package): update vue-loader to version 15.7.1

* chore(package): update vue-loader to version 15.7.1

* Update babel7 in group default to the latest version 🚀 (#552)

* chore(package): update @babel/cli to version 7.5.5

* chore(package): update @babel/cli to version 7.5.5

* chore(package): update @babel/cli to version 7.5.5

* chore(package): update @babel/core to version 7.5.5

* chore(package): update @babel/core to version 7.5.5

* chore(package): update @babel/core to version 7.5.5

* chore(package): update @babel/node to version 7.5.5

* chore(package): update @babel/node to version 7.5.5

* chore(package): update @babel/node to version 7.5.5

* chore(package): update @babel/plugin-proposal-export-default-from to version 7.5.2

* chore(package): update @babel/plugin-proposal-export-default-from to version 7.5.2

* chore(package): update @babel/plugin-proposal-export-default-from to version 7.5.2

* chore(package): update @babel/plugin-proposal-object-rest-spread to version 7.5.5

* chore(package): update @babel/plugin-proposal-object-rest-spread to version 7.5.5

* chore(package): update @babel/plugin-proposal-object-rest-spread to version 7.5.5

* chore(package): update @babel/plugin-transform-runtime to version 7.5.5

* chore(package): update @babel/plugin-transform-runtime to version 7.5.5

* chore(package): update @babel/plugin-transform-runtime to version 7.5.5

* chore(package): update @babel/preset-env to version 7.5.5

* chore(package): update @babel/preset-env to version 7.5.5

* chore(package): update @babel/preset-env to version 7.5.5

* chore(package): update @babel/register to version 7.5.5

* chore(package): update @babel/register to version 7.5.5

* chore(package): update @babel/register to version 7.5.5

* chore(package): update @babel/runtime to version 7.5.5

* chore(package): update @babel/runtime to version 7.5.5

* chore(package): update @babel/runtime to version 7.5.5

* test(transaction): Fix ttl for oracle transactions (#556)

* update browserslist to version 4.6.4 (#551)

* chore(package): update browserslist to version 4.6.4

* chore(package): update browserslist to version 4.6.4

* fix(State Channels): Fix websocket url (#558)

Fixes a bug which caused unneccessary params (for example: sign, url) to be included to websocket
url.

* refactor(State Channels): Do not include white space for outgoing websocket messages (#559)

* chore(package): update cz-conventional-changelog to version 3.0.0 (#560)

* Update webpack to 4.36.1 🚀 (#557)

* chore(package): update webpack to version 4.36.1

* chore(package): update webpack to version 4.36.1

* chore(package): update webpack to version 4.36.1

* Update index.js (#565)

docs(ACI): add some additional clarification to getContractInstance() doc

* feat(state channel): make state channel compatible with aeternity@4.0.0 (#568)

* fix(state channels): fix onChainTx event params (#566)

* feat(ACI): Implement sophia `variant` type (#567)

* feat(ACI): Implement sophia `variant` type. Improve arguments validation

* feat(ACI): Implement `vars` injection to `typeDef`
```
datatype myOption('a) = Node | Some('a)
entrypoint optionFn(v: myOption(string)): myOption(string = v)
```

* fix(lint): Fix linter error

* feat(ACI): Add validation for sophia `datatype` simple and generic variant

* feat(ACI): Allow pass datatype as object(for generic variants) or string. Add tests

* fix(swagger): Pass query params in case of get request (#570)

*  Make Swagger a sync stamp (#569)

* Make Swagger a sync stamp

* Add AsyncInit to Node stamp

* chore(deps): Audit and regenerate lock files (#575)

* feat(NodePool): Implement NodePool stamp (#574)

* feat(NodePool): Implement NodePool stamp. Fix tests

* fix(NodePool): Fix merge conflict

* fix(NodePool): Fix example app

* feat(NodePool): Remove proxy object on 'api' prop instead use propDescriptor with custom getter(this allow to clone the object)

* fix(Linter): Fix linter errors

* feat(NodePool): Add tests

* feat(contract): add ability to use call-static/dry-run without keyPair (#577)

* feat(NodePool): Implement NodePool stamp. Fix tests

* fix(NodePool): Fix merge conflict

* fix(NodePool): Fix example app

* feat(NodePool): Remove proxy object on 'api' prop instead use propDescriptor with custom getter(this allow to clone the object)

* fix(Linter): Fix linter errors

* feat(selector): add `address` validation of selected anddress and selectAddress function

* feat(contract): add ability to use call-static/dry-run without keyPair

If keyPair is not provided Use 0 account with predefined amounts of token. Add ability to predefine
this 0 zero account using  option `dryRunAccount: { pub: '', amount '' }`

* feat(Contract): add validation of amount option in dry-run

* feat(Linter): fix linter

* feat(TxBuilder): Add helper for producing tx hash (#579)

* Refactor AE account composition (#581)

* refactor(Accounts): Init refactoring of account stamp relation

* fix(Accounts): Improve initialization. Refactor stamps composition

* revert(examples): Remove debug

* fix(Account): Prevent breaking changes. Add workaround for using `setKeypair` fn synchronously

* chore(release): Bump version to 4.3.0

* docs(release): Update docs

* docs(release): Fix example apps

* docs(release): Add NodePool docs update tutorials

* docs(release): Adjust README

* docs(release): fix imports

* chore(release): fix examples apps. Regenerate lock files

* chore(release): include NodePool and Accounts in bundle

* chore(release): bump version

* chore(release): bump version to 4.4.0

* chore(release): generate CHANGELOG. Simplify getAccount in Contract

* chore(release): Adjust CHANGELOG

* chore(release): Update docs, regenerate lock file

* chore(release): bump version to 4.5.0. Generate CHANGELOG

* chore(release): Adjust CHANGELOG

* chore(release): Adjust CHANGELOG

* chore(release): Bump version to 4.5.1. Genereta CHANGELOG

* chore(release): Bump version to 4.5.1. Genereta CHANGELOG

* chore(example): Point example app to testnet

* chore(release): Regenerate lock file. Update examples sdk version to 4.5.1

* chore(release): Bump version to 4.6.0

* chore(release): Adjust CHANGELOG. Regenerate lock file

* fix(protocol): Fix Lima vmVersion

* chore(release): Update sdk version in example apps

* chore(release): Adjust CHANGELOG

* feat(Oracle): Implement polling for queries
  • Loading branch information
nduchak authored Sep 4, 2019
1 parent 1ddb392 commit 5340f59
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 1 deletion.
31 changes: 31 additions & 0 deletions es/ae/oracle.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ async function getOracleObject (oracleId) {
return {
...oracle,
queries,
pollQueries: (onQuery, { interval } = {}) => this.pollForQueries(oracleId, onQuery, { interval }),
postQuery: (query, options) => this.postQueryToOracle(oracleId, query, options),
respondToQuery: (queryId, response, options) => this.respondToQuery(oracleId, queryId, response, options),
extendOracle: (oracleTtl, options) => this.extendOracleTtl(oracleId, oracleTtl, options),
Expand All @@ -54,6 +55,35 @@ async function getOracleObject (oracleId) {
}
}

/**
* Poll for oracle queries
* @alias module:@aeternity/aepp-sdk/es/ae/oracle
* @instance
* @function
* @category async
* @param {String} oracleId Oracle public key
* @param {Function} onQuery OnQuery callback
* @param {Object} [options] Options object
* @param {Object} [options.interval] Poll interval(default: 5000)
* @return {Function} stopPolling - Stop polling function
*/
export async function pollForQueries (oracleId, onQuery, { interval = 5000 } = {}) {
const queries = (await this.getOracleQueries(oracleId)).oracleQueries || []
let quriesIds = queries.map(q => q.id)
onQuery(queries)

async function pollQueries () {
const { oracleQueries: q } = await this.getOracleQueries(oracleId)
const newQueries = q.filter(({ id }) => !quriesIds.includes(id))
if (newQueries.length) {
quriesIds = [...quriesIds, ...newQueries.map(a => a.id)]
onQuery(newQueries)
}
}
const intervalId = setInterval(pollQueries.bind(this), interval)
return () => clearInterval(intervalId)
}

/**
* Constructor for OracleQuery Object (helper object for using OracleQuery)
* @alias module:@aeternity/aepp-sdk/es/ae/oracle
Expand Down Expand Up @@ -244,6 +274,7 @@ const Oracle = Ae.compose({
extendOracleTtl,
postQueryToOracle,
pollForQueryResponse,
pollForQueries,
getOracleObject,
getQueryObject
},
Expand Down
14 changes: 13 additions & 1 deletion test/integration/oracle.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ describe('Oracle', function () {
let client
let oracle
let query
let queryResponse = "{'tmp': 30}"
const queryResponse = "{'tmp': 30}"

before(async function () {
client = await ready(this)
Expand All @@ -50,6 +50,18 @@ describe('Oracle', function () {
query.decode(query.query).toString().should.be.equal("{'city': 'Berlin'}")
})

it('Pool for queries', async () => {
let queries = []
const stopPolling = await oracle.pollQueries((q) => {
queries = [...q.map(a => a.id), ...queries]
}, { interval: 100 })
await oracle.postQuery("{'city': 'Berlin2'}")
await oracle.postQuery("{'city': 'Berlin3'}")
await oracle.postQuery("{'city': 'Berlin4'}")
setTimeout(() => stopPolling(), 500)
queries.length.should.be.equal(4)
})

it('Poll for response for query without response', async () => {
return query.pollForResponse({ attempts: 2, interval: 1000 }).should.be.rejectedWith(Error)
})
Expand Down

0 comments on commit 5340f59

Please sign in to comment.