03-wallet.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /* Import modules. */
  2. import Bitcoin from '@psf/bitcoincashjs-lib'
  3. import BCHJS from '@psf/bch-js'
  4. import { Wallet } from '@nexajs/wallet'
  5. // REST API servers.
  6. const BCHN_MAINNET = 'https://bchn.fullstack.cash/v5/'
  7. const runtimeConfig = useRuntimeConfig()
  8. // const jwtAuthToken = runtimeConfig.public.PSF_JWT_AUTH_TOKEN
  9. const jwtAuthToken = runtimeConfig.PSF_JWT_AUTH_TOKEN
  10. // console.log('jwtAuthToken', jwtAuthToken)
  11. // Instantiate bch-js based on the network.
  12. // FIXME https://github.com/Permissionless-Software-Foundation/jwt-bch-demo/blob/master/lib/fullstack-jwt.js
  13. const bchjs = new BCHJS({
  14. restURL: BCHN_MAINNET,
  15. apiToken: jwtAuthToken,
  16. })
  17. // console.log('bchjs', bchjs)
  18. /* Initialize globals. */
  19. let fusionsDb
  20. let wallet
  21. /* Set constants. */
  22. const CHECK_FUSIONS_INTERVAL = 5000
  23. /**
  24. * Initialize (Wallet)
  25. *
  26. * Setup an "ephemeral" wallet for the use of this Club Session.
  27. */
  28. const init = async () => {
  29. wallet = await Wallet.init()
  30. .catch(err => console.error(err))
  31. // console.log('WALLET INIT', wallet)
  32. return // FIXME ONLY CLIENTS CAN BROADCAST FUSIONS
  33. let lastUpdate = 0
  34. let lastSnapshot
  35. /* Manage Fusions */
  36. setInterval(() => {
  37. // console.log('Looking for DB(fusions) changes...', fusionsDb)
  38. /* Set Fusion snapshot. */
  39. const snapshot = JSON.stringify(fusionsDb)
  40. // console.log('SNAPSHOT', snapshot)
  41. /* Validate Fusion snapshot. */
  42. if (fusionsDb && snapshot !== lastSnapshot) {
  43. lastSnapshot = snapshot
  44. // console.log('FOUND CHANGES??', snapshot)
  45. // txObj.ins[1].script = txObj2.ins[1].script
  46. // txObj.ins[2].script = txObj3.ins[2].script
  47. /* Initialize recents. */
  48. const recents = []
  49. /* Handle fusions. */
  50. Object.keys(fusionsDb).forEach(_fusionid => {
  51. /* Set fusion. */
  52. const fusion = fusionsDb[_fusionid]
  53. /* Validate last update. */
  54. if (typeof fusion.completedAt === 'undefined' && fusion.updatedAt > lastUpdate) {
  55. /* Add fusion. */
  56. recents.push(fusion)
  57. }
  58. })
  59. console.log('RECENTS', lastUpdate, recents)
  60. /* Handle recents. */
  61. // NOTE: Update last update handler.
  62. recents.forEach(_recent => {
  63. if (_recent.updatedAt > lastUpdate) {
  64. /* Set (new) last update. */
  65. lastUpdate = _recent.updatedAt
  66. }
  67. /* Validate fusion progress. */
  68. if (_recent.progress === 100.0) {
  69. /* Build transaction. */
  70. // rawTx = ...
  71. /* Add to database. */
  72. // fusionsDb.rawTx
  73. }
  74. })
  75. console.log('NEW LAST UPDATE', lastUpdate)
  76. }
  77. }, CHECK_FUSIONS_INTERVAL)
  78. }
  79. init()
  80. export default defineEventHandler((event) => {
  81. /* Set database. */
  82. const Db = event.context.Db
  83. /* Set fusions database. */
  84. fusionsDb = Db.fusions
  85. /* Inject wallet into server context. */
  86. event.context.Wallet = wallet
  87. })