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.
110 lines
2.7 KiB
110 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!')
|
|
|