Skip to content
This repository was archived by the owner on Jun 30, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions bin/station.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#!/usr/bin/env node

'use strict'
import { station } from '../commands/station.js'
import Sentry from '@sentry/node'
import yargs from 'yargs/yargs'
import { hideBin } from 'yargs/helpers'
import fs from 'node:fs/promises'
import * as paths from '../lib/paths.js'

const { station } = require('../commands/station')
const Sentry = require('@sentry/node')
const yargs = require('yargs/yargs')
const { hideBin } = require('yargs/helpers')
const pkg = require('../package.json')
const pkg = JSON.parse(await fs.readFile(paths.packageJSON, 'utf8'))

Sentry.init({
dsn: 'https://6c96a5c2ffa5448d9ec8ddda90012bc9@o1408530.ingest.sentry.io/4504792315199488',
Expand Down
26 changes: 10 additions & 16 deletions commands/station.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
'use strict'

const { join } = require('node:path')
const saturnNode = require('../lib/saturn-node')
const zinniaRuntime = require('../lib/zinnia')
const { formatActivityObject, activities } = require('../lib/activity')
const { startPingLoop } = require('../lib/telemetry')
const bacalhau = require('../lib/bacalhau')
const fs = require('node:fs/promises')
const { metrics } = require('../lib/metrics')
const { paths } = require('../lib/paths')
import { join } from 'node:path'
import * as saturnNode from '../lib/saturn-node.js'
import * as zinniaRuntime from '../lib/zinnia.js'
import { formatActivityObject, activities } from '../lib/activity.js'
import { startPingLoop } from '../lib/telemetry.js'
import * as bacalhau from '../lib/bacalhau.js'
import fs from 'node:fs/promises'
import { metrics } from '../lib/metrics.js'
import { paths } from '../lib/paths.js'

const { FIL_WALLET_ADDRESS, MAX_DISK_SPACE } = process.env

Expand All @@ -18,7 +16,7 @@ const moduleNames = [
'bacalhau'
]

const station = async ({ json, experimental }) => {
export const station = async ({ json, experimental }) => {
if (!FIL_WALLET_ADDRESS) {
console.error('FIL_WALLET_ADDRESS required')
process.exit(1)
Expand Down Expand Up @@ -93,7 +91,3 @@ const station = async ({ json, experimental }) => {

await Promise.all(modules)
}

module.exports = {
station
}
14 changes: 4 additions & 10 deletions lib/activity.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
'use strict'
import EventEmitter from 'node:events'

const EventEmitter = require('node:events')

class ActivityEvent {
export class ActivityEvent {
/**
* @param {Object} options
* @param {("info"|"error")} options.type
Expand All @@ -16,7 +14,7 @@ class ActivityEvent {
}
}

const formatActivityObject = ({ type, message }) => {
export const formatActivityObject = ({ type, message }) => {
return `${type.toUpperCase().padEnd(5)} ${message}`
.trimEnd()
.split(/\n/g)
Expand All @@ -42,8 +40,4 @@ class Activities {
}
}

module.exports = {
activities: new Activities(),
ActivityEvent,
formatActivityObject
}
export const activities = new Activities()
21 changes: 7 additions & 14 deletions lib/bacalhau.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
'use strict'

const timers = require('node:timers/promises')
const execa = require('execa')
const { fetch } = require('undici')
const Sentry = require('@sentry/node')
const { installBinaryModule, getBinaryModuleExecutable } = require('./modules')
import timers from 'node:timers/promises'
import execa from 'execa'
import { fetch } from 'undici'
import Sentry from '@sentry/node'
import { installBinaryModule, getBinaryModuleExecutable } from './modules.js'

const DIST_TAG = 'v1.0.0'

async function install () {
export async function install () {
await installBinaryModule({
module: 'bacalhau',
repo: 'bacalhau-project/bacalhau',
Expand All @@ -24,7 +22,7 @@ async function install () {
})
}

async function start ({
export async function start ({
FIL_WALLET_ADDRESS,
storagePath,
onActivity,
Expand Down Expand Up @@ -157,8 +155,3 @@ async function updateStats ({ apiUrl, onMetrics }) {
function noop () {
// no-op
}

module.exports = {
install,
start
}
18 changes: 6 additions & 12 deletions lib/metrics.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
'use strict'
import { writeClient } from './telemetry.js'
import { Point } from '@influxdata/influxdb-client'
import EventEmitter from 'node:events'

const { writeClient } = require('./telemetry')
const { Point } = require('@influxdata/influxdb-client')
const EventEmitter = require('node:events')

class MetricsEvent {
export class MetricsEvent {
/**
* @param {Object} options
* @param {Number} options.totalJobsCompleted
Expand All @@ -16,7 +14,7 @@ class MetricsEvent {
}
}

class Metrics {
export class Metrics {
#events = new EventEmitter()

constructor () {
Expand Down Expand Up @@ -72,8 +70,4 @@ class Metrics {
}
}

module.exports = {
MetricsEvent,
Metrics,
metrics: new Metrics()
}
export const metrics = new Metrics()
38 changes: 15 additions & 23 deletions lib/modules.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
'use strict'

const os = require('node:os')
const assert = require('node:assert')
const { join } = require('node:path')
const { mkdir, chmod } = require('node:fs/promises')
const { fetch } = require('undici')
const { pipeline } = require('node:stream/promises')
const gunzip = require('gunzip-maybe')
const tar = require('tar-fs')
const unzip = require('unzip-stream')
const { once } = require('node:events')
const { createWriteStream } = require('node:fs')
const { moduleBinaries } = require('./paths')
import os from 'node:os'
import assert from 'node:assert'
import { join } from 'node:path'
import { mkdir, chmod } from 'node:fs/promises'
import { fetch } from 'undici'
import { pipeline } from 'node:stream/promises'
import gunzip from 'gunzip-maybe'
import tar from 'tar-fs'
import unzip from 'unzip-stream'
import { once } from 'node:events'
import { createWriteStream } from 'node:fs'
import { moduleBinaries } from './paths.js'

/** @typedef {import('unzip-stream').UnzipStreamEntry} UnzipStreamEntry */

const { GITHUB_TOKEN } = process.env
const authorization = GITHUB_TOKEN ? `Bearer ${GITHUB_TOKEN}` : undefined

const getBinaryModuleExecutable = ({
export const getBinaryModuleExecutable = ({
module,
executable
}) => {
Expand All @@ -33,7 +31,7 @@ const getExecutableFileName = executable => {
return `${executable}${os.platform() === 'win32' ? '.exe' : ''}`
}

const installBinaryModule = async ({
export const installBinaryModule = async ({
module,
repo,
distTag,
Expand Down Expand Up @@ -102,7 +100,7 @@ const installBinaryModule = async ({
console.log(`[${module}] ✓ ${outFile}`)
}

async function downloadSourceFiles ({ module, repo, distTag }) {
export async function downloadSourceFiles ({ module, repo, distTag }) {
await mkdir(moduleBinaries, { recursive: true })
const outDir = join(moduleBinaries, module)

Expand Down Expand Up @@ -133,9 +131,3 @@ async function downloadSourceFiles ({ module, repo, distTag }) {
await pipeline(res.body, gunzip(), tar.extract(outDir, { strip: 1 }))
console.log(`[${module}] ✓ ${outDir}`)
}

module.exports = {
getBinaryModuleExecutable,
installBinaryModule,
downloadSourceFiles
}
26 changes: 13 additions & 13 deletions lib/paths.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
'use strict'

const { join } = require('node:path')
const { homedir, platform } = require('node:os')
const assert = require('node:assert')
import { join } from 'node:path'
import { homedir, platform } from 'node:os'
import assert from 'node:assert'
import { fileURLToPath } from 'node:url'

const {
CACHE_ROOT,
Expand All @@ -13,13 +12,13 @@ const {
XDG_STATE_HOME = join(homedir(), '.local', 'state')
} = process.env

const getPaths = ({ cacheRoot, stateRoot }) => ({
export const getPaths = ({ cacheRoot, stateRoot }) => ({
moduleCache: join(cacheRoot, 'modules'),
moduleState: join(stateRoot, 'modules'),
lockFile: join(stateRoot, '.lock')
})

const getDefaultRootDirs = () => {
export const getDefaultRootDirs = () => {
switch (platform()) {
case 'darwin': {
const appId = 'app.filstation.core'
Expand Down Expand Up @@ -50,9 +49,10 @@ const getDefaultRootDirs = () => {
}
}

module.exports = {
paths: getPaths(getDefaultRootDirs()),
moduleBinaries: join(__dirname, '..', 'modules'),
getPaths,
getDefaultRootDirs
}
export const paths = getPaths(getDefaultRootDirs())
export const moduleBinaries = fileURLToPath(
new URL('../modules', import.meta.url)
)
export const packageJSON = fileURLToPath(
new URL('../package.json', import.meta.url)
)
23 changes: 8 additions & 15 deletions lib/saturn-node.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
'use strict'

const timers = require('node:timers/promises')
const execa = require('execa')
const { arch, platform } = require('node:os')
const { fetch } = require('undici')
const Sentry = require('@sentry/node')
const { installBinaryModule, getBinaryModuleExecutable } = require('./modules')
import timers from 'node:timers/promises'
import execa from 'execa'
import { arch, platform } from 'node:os'
import { fetch } from 'undici'
import Sentry from '@sentry/node'
import { installBinaryModule, getBinaryModuleExecutable } from './modules.js'

/** @typedef {import('node:stream').Writable} Writable */

const DIST_TAG = 'v0.5.1'

async function install () {
export async function install () {
await installBinaryModule({
module: 'saturn-L2-node',
repo: 'filecoin-saturn/L2-node',
Expand All @@ -36,7 +34,7 @@ async function install () {
* @param {Function} options.onActivity
* @param {Function} options.onMetrics
*/
async function start ({
export async function start ({
FIL_WALLET_ADDRESS,
MAX_DISK_SPACE,
storagePath,
Expand Down Expand Up @@ -156,8 +154,3 @@ async function updateStats ({ apiUrl, onMetrics }) {
function noop () {
// no-op
}

module.exports = {
install,
start
}
26 changes: 11 additions & 15 deletions lib/telemetry.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
'use strict'

const { InfluxDB, Point } = require('@influxdata/influxdb-client')
const { createHash, randomUUID } = require('node:crypto')
const Sentry = require('@sentry/node')
const assert = require('node:assert')
const { platform, arch } = require('node:os')
const pkg = require('../package.json')
import { InfluxDB, Point } from '@influxdata/influxdb-client'
import { createHash, randomUUID } from 'node:crypto'
import Sentry from '@sentry/node'
import assert from 'node:assert'
import { platform, arch } from 'node:os'
import fs from 'node:fs/promises'
import * as paths from './paths.js'

const { FIL_WALLET_ADDRESS, DEPLOYMENT_TYPE = 'cli' } = process.env

Expand All @@ -15,14 +14,16 @@ assert(
`Invalid DEPLOYMENT_TYPE: ${DEPLOYMENT_TYPE}. Options: ${validDeploymentTypes.join(', ')}`
)

const pkg = JSON.parse(await fs.readFile(paths.packageJSON, 'utf8'))

const client = new InfluxDB({
url: 'https://eu-central-1-1.aws.cloud2.influxdata.com',
token:
// station-anonymous-write
'0fZyu9zjDvYlaNfOeuwgnQoUI0VcSzeYDpnOLjQyr30mz-Plqels5JHEwgKRbtCcDJbQmv62VnOV_FsZVxgoow=='
})

const writeClient = client.getWriteApi(
export const writeClient = client.getWriteApi(
'Filecoin Station', // org
'station', // bucket
'ns' // precision
Expand All @@ -41,7 +42,7 @@ setInterval(() => {
})
}, 5_000).unref()

const startPingLoop = () => {
export const startPingLoop = () => {
assert(FIL_WALLET_ADDRESS)
const processUUID = randomUUID()
return setInterval(() => {
Expand All @@ -59,8 +60,3 @@ const startPingLoop = () => {
writeClient.writePoint(point)
}, 10_000)
}

module.exports = {
writeClient,
startPingLoop
}
Loading