You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.7 KiB

// @flow
import commands from 'commands'
import logger from 'logger'
import uuid from 'uuid/v4'
import { setImplementation } from 'api/network'
import sentry from 'sentry/node'
require('../env')
process.title = 'Internal'
const defers = {}
let sentryEnabled = process.env.INITIAL_SENTRY_ENABLED || false
sentry(() => sentryEnabled, process.env.SENTRY_USER_ID)
if (process.env.DEBUG_NETWORK) {
setImplementation(networkArg => {
const id = uuid()
return new Promise((resolve, reject) => {
process.send({
type: 'executeHttpQueryOnRenderer',
networkArg,
id,
})
defers[id] = {
resolve: r => {
resolve(r)
delete defers[id]
},
reject: e => {
reject(e)
delete defers[id]
},
}
})
})
}
const subscriptions = {}
process.on('message', m => {
if (m.type === 'command') {
const { data, requestId, id } = m.command
const cmd = commands.find(cmd => cmd.id === id)
if (!cmd) {
logger.warn(`command ${id} not found`)
return
}
const startTime = Date.now()
logger.onCmd('cmd.START', id, 0, data)
subscriptions[requestId] = cmd.impl(data).subscribe({
next: data => {
logger.onCmd('cmd.NEXT', id, Date.now() - startTime, data)
process.send({
type: 'cmd.NEXT',
requestId,
data,
})
},
complete: () => {
delete subscriptions[requestId]
logger.onCmd('cmd.COMPLETE', id, Date.now() - startTime)
process.send({
type: 'cmd.COMPLETE',
requestId,
})
},
error: error => {
logger.warn('Command error:', error)
delete subscriptions[requestId]
logger.onCmd('cmd.ERROR', id, Date.now() - startTime, error)
process.send({
type: 'cmd.ERROR',
requestId,
data: {
...error,
name: error && error.name,
message: error && error.message,
},
})
},
})
} else if (m.type === 'command-unsubscribe') {
const { requestId } = m
const sub = subscriptions[requestId]
if (sub) {
sub.unsubscribe()
delete subscriptions[requestId]
}
} else if (m.type === 'executeHttpQueryPayload') {
const { payload } = m
const defer = defers[payload.id]
if (!defer) {
logger.warn('executeHttpQueryPayload: no defer found')
return
}
if (payload.type === 'success') {
defer.resolve(payload.result)
} else {
defer.reject(payload.error)
}
} else if (m.type === 'sentryLogsChanged') {
const { payload } = m
sentryEnabled = payload.value
}
})
logger.log('Internal process is up!')