mirror of
https://github.com/Permissionless-Software-Foundation/bch-dex.git
synced 2026-09-21 16:52:00 -07:00
fix(webhook): Ensuring startup waits for webhook to be established
This commit is contained in:
+20
-20
@@ -24,8 +24,8 @@ const config = require('../config') // this first.
|
||||
const AdminLib = require('../src/adapters/admin')
|
||||
// const adminLib = new AdminLib()
|
||||
|
||||
const WebHookLib = require('../src/adapters/webhook')
|
||||
const webhookLib = new WebHookLib()
|
||||
// const WebHookLib = require('../src/adapters/webhook')
|
||||
// const webhookLib = new WebHookLib()
|
||||
|
||||
// const JSONRPC = require('../src/rpc')
|
||||
// const rpc = new JSONRPC()
|
||||
@@ -103,26 +103,26 @@ class Server {
|
||||
|
||||
// MIDDLEWARE END
|
||||
|
||||
// 7/7/22 CT: This code paragraph can be deleted
|
||||
// Delay startup to give the P2WDB time to start first, so that it accepts the webook call
|
||||
if (this.config.env !== 'test') {
|
||||
await this.sleep(20000)
|
||||
}
|
||||
|
||||
// if (this.config.env !== 'test') {
|
||||
// await this.sleep(20000)
|
||||
// }
|
||||
// Create webhook
|
||||
try {
|
||||
try {
|
||||
// Delete an old webhook if it exists.
|
||||
await webhookLib.deleteWebhook(config.webhookTarget)
|
||||
} catch (err) {
|
||||
/* exit quietly */
|
||||
// console.log('err deleting webhook: ', err)
|
||||
}
|
||||
|
||||
await webhookLib.createWebhook(config.webhookTarget)
|
||||
console.log('Webhook created')
|
||||
} catch (error) {
|
||||
console.log('Webhook cant be created')
|
||||
}
|
||||
// try {
|
||||
// try {
|
||||
// // Delete an old webhook if it exists.
|
||||
// await webhookLib.deleteWebhook(config.webhookTarget)
|
||||
// } catch (err) {
|
||||
// /* exit quietly */
|
||||
// // console.log('err deleting webhook: ', err)
|
||||
// }
|
||||
//
|
||||
// await webhookLib.createWebhook(config.webhookTarget)
|
||||
// console.log('Webhook created')
|
||||
// } catch (error) {
|
||||
// console.log('Webhook cant be created')
|
||||
// }
|
||||
|
||||
// startServer()
|
||||
this.server = await app.listen(config.port)
|
||||
|
||||
@@ -19,6 +19,7 @@ const FullStackJWT = require('./fullstack-jwt')
|
||||
const BCHAdapter = require('./bch')
|
||||
const WalletAdapter = require('./wallet')
|
||||
const P2wdbAdapter = require('./p2wdb-adapter')
|
||||
const Webhook = require('./webhook')
|
||||
|
||||
const config = require('../../config')
|
||||
|
||||
@@ -37,6 +38,7 @@ class Adapters {
|
||||
this.config = config
|
||||
this.wallet = new WalletAdapter()
|
||||
this.p2wdb = new P2wdbAdapter(localConfig)
|
||||
this.webhook = new Webhook()
|
||||
|
||||
// Get a valid JWT API key and instance bch-js.
|
||||
this.fullStackJwt = new FullStackJWT(config)
|
||||
@@ -65,6 +67,9 @@ class Adapters {
|
||||
if (this.config.env !== 'test') {
|
||||
// Instance the wallet.
|
||||
await this.wallet.instanceWallet(walletData, this.bchjs)
|
||||
|
||||
// Wait until a webhook is established with the P2WDB
|
||||
await this.webhook.waitUntilSuccess(this.config.webhookTarget)
|
||||
}
|
||||
|
||||
console.log('Async Adapters have been started.')
|
||||
|
||||
@@ -59,6 +59,46 @@ class WebHook {
|
||||
throw err
|
||||
}
|
||||
}
|
||||
|
||||
// Returns a promise that will not resolve until a webhook has been successfully
|
||||
// created with the P2WDB.
|
||||
// Dev Note: This was created because establishing a webhook between bch-dex
|
||||
// and the P2WDB at startup is critical. If it's not established, then bch-dex
|
||||
// can not 'see' new Offers and Counter Offers.
|
||||
async waitUntilSuccess (url) {
|
||||
try {
|
||||
let success = false
|
||||
|
||||
do {
|
||||
try {
|
||||
// Delete an old webhook if it exists.
|
||||
await this.deleteWebhook(this.config.webhookTarget)
|
||||
} catch (err) {
|
||||
/* exit quietly */
|
||||
// console.log('err deleting webhook: ', err)
|
||||
}
|
||||
|
||||
try {
|
||||
await this.createWebhook(this.config.webhookTarget)
|
||||
console.log('Webhook created')
|
||||
success = true
|
||||
} catch (err) {
|
||||
const now = new Date()
|
||||
console.log(`${now.toLocaleString()}: Error trying to create webhook with P2WDB. Trying again...`)
|
||||
await sleep(2000)
|
||||
}
|
||||
} while (!success)
|
||||
|
||||
return true
|
||||
} catch (err) {
|
||||
console.error('Error in webhook.js/waitUntilSuccess()')
|
||||
throw err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function sleep (ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms))
|
||||
}
|
||||
|
||||
module.exports = WebHook
|
||||
|
||||
@@ -28,7 +28,7 @@ class OrderLib {
|
||||
async createOrder (entryObj) {
|
||||
try {
|
||||
console.log('createOrder(entryObj): ', entryObj)
|
||||
// if (!entryObj) return
|
||||
// if (!entryObj) return false
|
||||
|
||||
// Specify the address to send payment.
|
||||
entryObj.makerAddr = this.adapters.wallet.bchWallet.walletInfo.cashAddress
|
||||
|
||||
Reference in New Issue
Block a user