UNPKG

@nori-zk/mina-token-bridge

Version:

A Mina zk-program contract allowing users to mint tokens on Nori Bridge.

117 lines 4.03 kB
import { setup, assign, fromCallback, sendTo, createActor } from 'xstate'; const webSocketActor = fromCallback(({ input, sendBack, receive }) => { console.log('got here'); const socket = new WebSocket(input.url); const openHandler = () => { sendBack({ type: 'WS_OPEN' }); }; const messageHandler = (event) => { sendBack({ type: 'WS_MESSAGE', data: JSON.parse(event.data), }); }; const errorHandler = (event) => { sendBack({ type: 'WS_ERROR', error: event }); }; const closeHandler = (event) => { sendBack({ type: 'WS_CLOSE', code: event.code }); }; socket.addEventListener('open', openHandler); socket.addEventListener('message', messageHandler); socket.addEventListener('error', errorHandler); socket.addEventListener('close', closeHandler); receive((event) => { if (event.type === 'SEND') { socket.send(event.data); } }); return () => { socket.removeEventListener('open', openHandler); socket.removeEventListener('message', messageHandler); socket.removeEventListener('error', errorHandler); socket.removeEventListener('close', closeHandler); socket.close(); }; }); export const webSocketMachine = setup({ types: { context: {}, events: {}, input: {}, }, actors: { webSocketActor }, }).createMachine({ id: 'websocket', initial: 'connecting', context: ({ input }) => ({ url: input.url || 'wss://wss.nori.it.com', data: undefined, error: undefined, }), states: { connecting: { invoke: { id: 'websocket', src: 'webSocketActor', //input: ({ context, event }) => ({ url: input.url }), // Use input from machine }, on: { WS_OPEN: { target: 'connected' }, WS_ERROR: { target: 'disconnected', actions: assign({ error: ({ event }) => event.error }), }, WS_CLOSE: { target: 'disconnected' }, }, }, connected: { on: { WS_MESSAGE: [ { guard: ({ event }) => event.data.topic === 'state.bridge', actions: ({ event }) => { console.log(event.data); }, }, { guard: ({ event }) => event.data.topic === 'state.eth', actions: ({ event }) => { console.log(event.data); }, }, { guard: ({ event }) => event.data.topic === 'timings.notices.transition', actions: ({ event }) => { console.log(event.data); }, }, { // fallback actions: assign({ data: ({ event }) => event.data }), }, ], SEND: { actions: sendTo('websocket', ({ event }) => ({ type: 'SEND', data: event.data, })), }, WS_ERROR: 'disconnected', WS_CLOSE: 'disconnected', }, }, disconnected: { type: 'final' }, }, }); console.log('here'); const webSocketMachineActor = createActor(webSocketMachine, { input: { url: 'wss://wss.nori.it.com' } }); webSocketMachineActor.subscribe({ error: (error) => console.error(error), next: (value) => console.log(value), complete: () => console.info('complete') }); webSocketMachineActor.start(); //webSocketMachineActor.send({type: 'WS_OPEN'}); console.log('there'); //# sourceMappingURL=bridge.js.map