Convert worker to ESM (#500)
* Convert worker to ESM To use ESM for the worker, I created a package.json file in worker/ with `{ type: "module" }` as its sole content. I then rewrote every import to use ESM syntax. I also tried to set `{ type: "module" }` in the root package.json file to also use ESM in next.config.js. However, this resulted in a weird problem: default imports were now getting imported as objects in this shape: `{ default: <defaultImport> }`. Afaik, this should only be the case if you use "import * as foo from 'bar'" syntax: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#default_import This is fixed by not using `{ type: "module" }` for some reason. However, then, next.config.js also doesn't support ESM import syntax anymore. The documentation says that if you want to use ESM, you can use next.config.mjs: https://nextjs.org/docs/pages/api-reference/next-config-js But I didn't want to use MJS extension since I don't have any experience with it. For example, not sure if it's good style to mix JS with MJS etc. So I kept the CJS import syntax there. * Ignore worker/ during linting I wasn't able to fix the following errors: /home/runner/work/stacker.news/stacker.news/worker/auction.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/auction.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/earn.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/earn.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/index.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/index.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/nostr.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/nostr.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/ots.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/ots.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/repin.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/repin.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/search.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/search.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/streak.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/streak.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/trust.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/trust.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/views.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/views.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) /home/runner/work/stacker.news/stacker.news/worker/wallet.js:0:0: Parsing error: No Babel config file detected for /home/runner/work/stacker.news/stacker.news/worker/wallet.js. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files. (null) I tried to tell babel where to find the babel config file (.babelrc), specifying the babel config in worker/package.json under "babel", using babel.config.json etc. to no avail. However, afaict, we don't need babel for the worker since it won't run in a browser. Babel is only used to transpile code to target browsers. But it still would be nice to lint the worker code with standard. But we can figure this out later. * Fix worker imports from lib/ and api/ This fixes the issue that we can't use `{ "type": "module" }` in the root package.json since it breaks the app with this error: app | TypeError: next_auth_providers_credentials__WEBPACK_IMPORTED_MODULE_2__ is not a function app | at eval (webpack-internal:///./pages/api/auth/[...nextauth].js:218:20) app | at process.processTicksAndRejections (node:internal/process/task_queues:95:5) app | LND GRPC connection successful app | - error pages/api/auth/[...nextauth].js (139:2) @ CredentialsProvider app | - error Error [TypeError]: next_auth_providers_credentials__WEBPACK_IMPORTED_MODULE_2__ is not a function app | at eval (webpack-internal:///./pages/api/auth/[...nextauth].js:218:20) { app | digest: undefined app | } app | 137 | app | 138 | const providers = [ app | > 139 | CredentialsProvider({ app | | ^ app | 140 | id: 'lightning', app | 141 | name: 'Lightning', app | 142 | credentials: { app | TypeError: next_auth_providers_credentials__WEBPACK_IMPORTED_MODULE_2__ is not a function app | at eval (webpack-internal:///./pages/api/auth/[...nextauth].js:218:20) app | at process.processTicksAndRejections (node:internal/process/task_queues:95:5) build but we need to tell the worker that the files are MJS, else we get this error: worker | file:///app/worker/wallet.js:3 worker | import { datePivot } from '../lib/time.js' worker | ^^^^^^^^^ worker | SyntaxError: Named export 'datePivot' not found. The requested module '../lib/time.js' is a CommonJS module, which may not support all module.exports as named exports. worker | CommonJS modules can always be imported via the default export, for example using: worker | worker | import pkg from '../lib/time.js'; worker | const { datePivot } = pkg; worker | worker | at ModuleJob._instantiate (node:internal/modules/esm/module_job:124:21) worker | at async ModuleJob.run (node:internal/modules/esm/module_job:190:5) worker | worker | Node.js v18.17.0 worker | worker exited with code 1 * Fix global not defined in browser context * Also ignore api/ and lib/ during linting I did not want to do this but I was not able to fix this error in any other way I tried: /home/ekzyis/programming/stacker.news/api/lnd/index.js:0:0: Parsing error: No Babel config file detected for /home/ekzyis/programming/stacker.news/api/lnd/index.js. Either disable config file checking with requ ireConfigFile: false, or configure Babel so that it can find the config files. (null) Did not want to look deeper into all this standard, eslint, babel configuration stuff ... --------- Co-authored-by: ekzyis <ek@stacker.news> Co-authored-by: Keyan <34140557+huumn@users.noreply.github.com>
This commit is contained in:
parent
d60a589bc0
commit
dde82e25a5
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"type": "module"
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
const { GraphQLError } = require('graphql')
|
||||
const retry = require('async-retry')
|
||||
const Prisma = require('@prisma/client')
|
||||
import { GraphQLError } from 'graphql'
|
||||
import retry from 'async-retry'
|
||||
import Prisma from '@prisma/client'
|
||||
|
||||
async function serialize (models, ...calls) {
|
||||
return await retry(async bail => {
|
||||
|
@ -56,4 +56,4 @@ async function serialize (models, ...calls) {
|
|||
})
|
||||
}
|
||||
|
||||
module.exports = serialize
|
||||
export default serialize
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const os = require('@opensearch-project/opensearch')
|
||||
import os from '@opensearch-project/opensearch'
|
||||
|
||||
const options = process.env.NODE_ENV === 'development'
|
||||
? { node: 'http://localhost:9200' }
|
||||
|
@ -12,4 +12,4 @@ const options = process.env.NODE_ENV === 'development'
|
|||
|
||||
global.os = global.os || new os.Client(options)
|
||||
|
||||
module.exports = global.os
|
||||
export default global.os
|
||||
|
|
|
@ -20,8 +20,8 @@ export default function getApolloClient () {
|
|||
if (SSR) {
|
||||
return getClient(`${process.env.SELF_URL}/api/graphql`)
|
||||
} else {
|
||||
global.apolloClient ||= getClient('/api/graphql')
|
||||
return global.apolloClient
|
||||
window.apolloClient ||= getClient('/api/graphql')
|
||||
return window.apolloClient
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,41 +1,38 @@
|
|||
// XXX this is temporary until we have so many subs they have
|
||||
// to be loaded from the server
|
||||
const SUBS = ['bitcoin', 'nostr', 'tech', 'meta', 'jobs']
|
||||
const SUBS_NO_JOBS = SUBS.filter(s => s !== 'jobs')
|
||||
export const SUBS = ['bitcoin', 'nostr', 'tech', 'meta', 'jobs']
|
||||
export const SUBS_NO_JOBS = SUBS.filter(s => s !== 'jobs')
|
||||
|
||||
module.exports = {
|
||||
NOFOLLOW_LIMIT: 100,
|
||||
BOOST_MIN: 5000,
|
||||
UPLOAD_SIZE_MAX: 2 * 1024 * 1024,
|
||||
IMAGE_PIXELS_MAX: 35000000,
|
||||
UPLOAD_TYPES_ALLOW: [
|
||||
export const NOFOLLOW_LIMIT = 100
|
||||
export const BOOST_MIN = 5000
|
||||
export const UPLOAD_SIZE_MAX = 2 * 1024 * 1024
|
||||
export const IMAGE_PIXELS_MAX = 35000000
|
||||
export const UPLOAD_TYPES_ALLOW = [
|
||||
'image/gif',
|
||||
'image/heic',
|
||||
'image/png',
|
||||
'image/jpeg',
|
||||
'image/webp'
|
||||
],
|
||||
COMMENT_DEPTH_LIMIT: 10,
|
||||
MAX_TITLE_LENGTH: 80,
|
||||
MAX_POLL_CHOICE_LENGTH: 30,
|
||||
ITEM_SPAM_INTERVAL: '10m',
|
||||
ANON_ITEM_SPAM_INTERVAL: '0',
|
||||
INV_PENDING_LIMIT: 10,
|
||||
BALANCE_LIMIT_MSATS: 1000000000, // 1m sats
|
||||
ANON_INV_PENDING_LIMIT: 100,
|
||||
ANON_BALANCE_LIMIT_MSATS: 0, // disable
|
||||
MAX_POLL_NUM_CHOICES: 10,
|
||||
MIN_POLL_NUM_CHOICES: 2,
|
||||
POLL_COST: 1,
|
||||
ITEM_FILTER_THRESHOLD: 1.2,
|
||||
DONT_LIKE_THIS_COST: 1,
|
||||
COMMENT_TYPE_QUERY: ['comments', 'freebies', 'outlawed', 'borderland', 'all', 'bookmarks'],
|
||||
SUBS,
|
||||
SUBS_NO_JOBS,
|
||||
USER_SORTS: ['stacked', 'spent', 'comments', 'posts', 'referrals'],
|
||||
ITEM_SORTS: ['zaprank', 'comments', 'sats'],
|
||||
WHENS: ['day', 'week', 'month', 'year', 'forever'],
|
||||
ITEM_TYPES: context => {
|
||||
]
|
||||
export const COMMENT_DEPTH_LIMIT = 10
|
||||
export const MAX_TITLE_LENGTH = 80
|
||||
export const MAX_POLL_CHOICE_LENGTH = 30
|
||||
export const ITEM_SPAM_INTERVAL = '10m'
|
||||
export const ANON_ITEM_SPAM_INTERVAL = '0'
|
||||
export const INV_PENDING_LIMIT = 10
|
||||
export const BALANCE_LIMIT_MSATS = 1000000000 // 1m sat
|
||||
export const ANON_INV_PENDING_LIMIT = 100
|
||||
export const ANON_BALANCE_LIMIT_MSATS = 0 // disabl
|
||||
export const MAX_POLL_NUM_CHOICES = 10
|
||||
export const MIN_POLL_NUM_CHOICES = 2
|
||||
export const POLL_COST = 1
|
||||
export const ITEM_FILTER_THRESHOLD = 1.2
|
||||
export const DONT_LIKE_THIS_COST = 1
|
||||
export const COMMENT_TYPE_QUERY = ['comments', 'freebies', 'outlawed', 'borderland', 'all', 'bookmarks']
|
||||
export const USER_SORTS = ['stacked', 'spent', 'comments', 'posts', 'referrals']
|
||||
export const ITEM_SORTS = ['zaprank', 'comments', 'sats']
|
||||
export const WHENS = ['day', 'week', 'month', 'year', 'forever']
|
||||
export const ITEM_TYPES = context => {
|
||||
const items = ['all', 'posts', 'comments', 'bounties', 'links', 'discussions', 'polls']
|
||||
if (!context) {
|
||||
items.push('bios', 'jobs')
|
||||
|
@ -45,13 +42,12 @@ module.exports = {
|
|||
items.push('jobs', 'bookmarks')
|
||||
}
|
||||
return items
|
||||
},
|
||||
OLD_ITEM_DAYS: 3,
|
||||
ANON_USER_ID: 27,
|
||||
AD_USER_ID: 9,
|
||||
ANON_POST_FEE: 1000,
|
||||
ANON_COMMENT_FEE: 100,
|
||||
SSR: typeof window === 'undefined',
|
||||
MAX_FORWARDS: 5,
|
||||
LNURLP_COMMENT_MAX_LENGTH: 1000
|
||||
}
|
||||
export const OLD_ITEM_DAYS = 3
|
||||
export const ANON_USER_ID = 27
|
||||
export const AD_USER_ID = 9
|
||||
export const ANON_POST_FEE = 1000
|
||||
export const ANON_COMMENT_FEE = 100
|
||||
export const SSR = typeof window === 'undefined'
|
||||
export const MAX_FORWARDS = 5
|
||||
export const LNURLP_COMMENT_MAX_LENGTH = 1000
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"type": "module"
|
||||
}
|
12
lib/time.js
12
lib/time.js
|
@ -1,4 +1,4 @@
|
|||
function timeSince (timeStamp) {
|
||||
export function timeSince (timeStamp) {
|
||||
const now = new Date()
|
||||
const secondsPast = (now.getTime() - timeStamp) / 1000
|
||||
if (secondsPast < 60) {
|
||||
|
@ -20,7 +20,7 @@ function timeSince (timeStamp) {
|
|||
return 'now'
|
||||
}
|
||||
|
||||
function datePivot (date,
|
||||
export function datePivot (date,
|
||||
{ years = 0, months = 0, days = 0, hours = 0, minutes = 0, seconds = 0, milliseconds = 0 }) {
|
||||
return new Date(
|
||||
date.getFullYear() + years,
|
||||
|
@ -33,9 +33,9 @@ function datePivot (date,
|
|||
)
|
||||
}
|
||||
|
||||
const dayMonthYear = when => new Date(when).toISOString().slice(0, 10)
|
||||
export const dayMonthYear = when => new Date(when).toISOString().slice(0, 10)
|
||||
|
||||
function timeLeft (timeStamp) {
|
||||
export function timeLeft (timeStamp) {
|
||||
const now = new Date()
|
||||
const secondsPast = (timeStamp - now.getTime()) / 1000
|
||||
|
||||
|
@ -57,6 +57,4 @@ function timeLeft (timeStamp) {
|
|||
}
|
||||
}
|
||||
|
||||
const sleep = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms))
|
||||
|
||||
module.exports = { timeSince, dayMonthYear, datePivot, timeLeft, sleep }
|
||||
export const sleep = (ms) => new Promise((resolve, reject) => setTimeout(resolve, ms))
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const { withPlausibleProxy } = require('next-plausible')
|
||||
const { InjectManifest } = require('workbox-webpack-plugin')
|
||||
const { generatePrecacheManifest } = require('./sw/build')
|
||||
const { generatePrecacheManifest } = require('./sw/build.js')
|
||||
|
||||
const isProd = process.env.NODE_ENV === 'production'
|
||||
const corsHeaders = [
|
||||
|
|
|
@ -104,7 +104,10 @@
|
|||
"next"
|
||||
],
|
||||
"ignore": [
|
||||
"**/spawn"
|
||||
"**/spawn",
|
||||
"**/worker",
|
||||
"**/api",
|
||||
"**/lib"
|
||||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
@ -2,7 +2,7 @@ import '../styles/globals.scss'
|
|||
import { ApolloProvider, gql } from '@apollo/client'
|
||||
import { MeProvider } from '../components/me'
|
||||
import PlausibleProvider from 'next-plausible'
|
||||
import getApolloClient from '../lib/apollo'
|
||||
import getApolloClient from '../lib/apollo.js'
|
||||
import { PriceProvider } from '../components/price'
|
||||
import { BlockHeightProvider } from '../components/block-height'
|
||||
import Head from 'next/head'
|
||||
|
@ -34,7 +34,7 @@ function writeQuery (client, apollo, data) {
|
|||
}
|
||||
}
|
||||
|
||||
function MyApp ({ Component, pageProps: { ...props } }) {
|
||||
export default function MyApp ({ Component, pageProps: { ...props } }) {
|
||||
const client = getApolloClient()
|
||||
const router = useRouter()
|
||||
|
||||
|
@ -111,5 +111,3 @@ function MyApp ({ Component, pageProps: { ...props } }) {
|
|||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default MyApp
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import Document, { Html, Head, Main, NextScript } from 'next/document'
|
||||
import { Html, Head, Main, NextScript } from 'next/document'
|
||||
import Script from 'next/script'
|
||||
|
||||
class MyDocument extends Document {
|
||||
render () {
|
||||
export default function Document () {
|
||||
return (
|
||||
<Html lang='en'>
|
||||
<Head>
|
||||
|
@ -137,7 +136,4 @@ class MyDocument extends Document {
|
|||
</body>
|
||||
</Html>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default MyDocument
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const serialize = require('../api/resolvers/serial')
|
||||
import serialize from '../api/resolvers/serial.js'
|
||||
|
||||
function auction ({ models }) {
|
||||
export function auction ({ models }) {
|
||||
return async function ({ name }) {
|
||||
console.log('running', name)
|
||||
// get all items we need to check
|
||||
|
@ -26,5 +26,3 @@ function auction ({ models }) {
|
|||
console.log('done', name)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { auction }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const serialize = require('../api/resolvers/serial')
|
||||
const { ANON_USER_ID } = require('../lib/constants')
|
||||
import serialize from '../api/resolvers/serial.js'
|
||||
import { ANON_USER_ID } from '../lib/constants.js'
|
||||
|
||||
const ITEM_EACH_REWARD = 4.0
|
||||
const UPVOTE_EACH_REWARD = 4.0
|
||||
|
@ -7,7 +7,7 @@ const TOP_PERCENTILE = 33
|
|||
const TOTAL_UPPER_BOUND_MSATS = 1000000000
|
||||
const REDUCE_REWARDS = [616, 6030, 946, 4502]
|
||||
|
||||
function earn ({ models }) {
|
||||
export function earn ({ models }) {
|
||||
return async function ({ name }) {
|
||||
console.log('running', name)
|
||||
|
||||
|
@ -157,5 +157,3 @@ function earn ({ models }) {
|
|||
console.log('done', name)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { earn }
|
||||
|
|
|
@ -1,20 +1,26 @@
|
|||
const PgBoss = require('pg-boss')
|
||||
require('@next/env').loadEnvConfig('..')
|
||||
const { PrismaClient } = require('@prisma/client')
|
||||
const { checkInvoice, checkWithdrawal } = require('./wallet')
|
||||
const { repin } = require('./repin')
|
||||
const { trust } = require('./trust')
|
||||
const { auction } = require('./auction')
|
||||
const { earn } = require('./earn')
|
||||
const { ApolloClient, HttpLink, InMemoryCache } = require('@apollo/client')
|
||||
const { indexItem, indexAllItems } = require('./search')
|
||||
const { timestampItem } = require('./ots')
|
||||
const { computeStreaks, checkStreak } = require('./streak')
|
||||
const { nip57 } = require('./nostr')
|
||||
import PgBoss from 'pg-boss'
|
||||
import nextEnv from '@next/env'
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
import { checkInvoice, checkWithdrawal } from './wallet.js'
|
||||
import { repin } from './repin.js'
|
||||
import { trust } from './trust.js'
|
||||
import { auction } from './auction.js'
|
||||
import { earn } from './earn.js'
|
||||
import apolloClient from '@apollo/client'
|
||||
import { indexItem, indexAllItems } from './search.js'
|
||||
import { timestampItem } from './ots.js'
|
||||
import { computeStreaks, checkStreak } from './streak.js'
|
||||
import { nip57 } from './nostr.js'
|
||||
|
||||
import fetch from 'cross-fetch'
|
||||
import { authenticatedLndGrpc } from 'ln-service'
|
||||
import { views, rankViews } from './views.js'
|
||||
|
||||
const { loadEnvConfig } = nextEnv
|
||||
const { ApolloClient, HttpLink, InMemoryCache } = apolloClient
|
||||
|
||||
loadEnvConfig('..')
|
||||
|
||||
const fetch = require('cross-fetch')
|
||||
const { authenticatedLndGrpc } = require('ln-service')
|
||||
const { views, rankViews } = require('./views')
|
||||
|
||||
async function work () {
|
||||
const boss = new PgBoss(process.env.DATABASE_URL)
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
const { getInvoice } = require('ln-service')
|
||||
const { Relay, signId, calculateId, getPublicKey } = require('nostr')
|
||||
import { getInvoice } from 'ln-service'
|
||||
import { Relay, signId, calculateId, getPublicKey } from 'nostr'
|
||||
|
||||
const nostrOptions = { startAfter: 5, retryLimit: 21, retryBackoff: true }
|
||||
|
||||
function nip57 ({ boss, lnd, models }) {
|
||||
export function nip57 ({ boss, lnd, models }) {
|
||||
return async function ({ data: { hash } }) {
|
||||
console.log('running nip57')
|
||||
|
||||
|
@ -84,5 +84,3 @@ function nip57 ({ boss, lnd, models }) {
|
|||
console.log('done running nip57')
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nip57 }
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
const { gql } = require('graphql-tag')
|
||||
const stringifyCanon = require('canonical-json')
|
||||
const { createHash } = require('crypto')
|
||||
const Ots = require('opentimestamps')
|
||||
import { gql } from 'graphql-tag'
|
||||
import stringifyCanon from 'canonical-json'
|
||||
import { createHash } from 'crypto'
|
||||
import Ots from 'opentimestamps'
|
||||
|
||||
const ITEM_OTS_FIELDS = gql`
|
||||
fragment ItemOTSFields on Item {
|
||||
|
@ -12,7 +12,7 @@ const ITEM_OTS_FIELDS = gql`
|
|||
url
|
||||
}`
|
||||
|
||||
function timestampItem ({ apollo, models }) {
|
||||
export function timestampItem ({ apollo, models }) {
|
||||
return async function ({ data: { id } }) {
|
||||
console.log('timestamping item', id)
|
||||
|
||||
|
@ -48,5 +48,3 @@ function timestampItem ({ apollo, models }) {
|
|||
console.log('done timestamping item', id)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { timestampItem }
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"type": "module"
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
function repin ({ models }) {
|
||||
export function repin ({ models }) {
|
||||
return async function ({ name }) {
|
||||
console.log('doing', name)
|
||||
|
||||
|
@ -40,5 +40,3 @@ function repin ({ models }) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { repin }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const { gql } = require('graphql-tag')
|
||||
const search = require('../api/search')
|
||||
const removeMd = require('remove-markdown')
|
||||
import { gql } from 'graphql-tag'
|
||||
import search from '../api/search/index.js'
|
||||
import removeMd from 'remove-markdown'
|
||||
|
||||
const ITEM_SEARCH_FIELDS = gql`
|
||||
fragment ItemSearchFields on Item {
|
||||
|
@ -75,7 +75,7 @@ async function _indexItem (item) {
|
|||
console.log('done indexing item', item.id)
|
||||
}
|
||||
|
||||
function indexItem ({ apollo }) {
|
||||
export function indexItem ({ apollo }) {
|
||||
return async function ({ data: { id } }) {
|
||||
// 1. grab item from database
|
||||
// could use apollo to avoid duping logic
|
||||
|
@ -95,7 +95,7 @@ function indexItem ({ apollo }) {
|
|||
}
|
||||
}
|
||||
|
||||
function indexAllItems ({ apollo }) {
|
||||
export function indexAllItems ({ apollo }) {
|
||||
return async function () {
|
||||
// cursor over all items in the Item table
|
||||
let items = []; let cursor = null
|
||||
|
@ -125,5 +125,3 @@ function indexAllItems ({ apollo }) {
|
|||
} while (cursor)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { indexItem, indexAllItems }
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const STREAK_THRESHOLD = 100
|
||||
|
||||
function computeStreaks ({ models }) {
|
||||
export function computeStreaks ({ models }) {
|
||||
return async function () {
|
||||
console.log('computing streaks')
|
||||
|
||||
|
@ -64,7 +64,7 @@ function computeStreaks ({ models }) {
|
|||
}
|
||||
}
|
||||
|
||||
function checkStreak ({ models }) {
|
||||
export function checkStreak ({ models }) {
|
||||
return async function ({ data: { id } }) {
|
||||
console.log('checking streak', id)
|
||||
|
||||
|
@ -108,5 +108,3 @@ function checkStreak ({ models }) {
|
|||
console.log('done checking streak', id)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { checkStreak, computeStreaks }
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
const math = require('mathjs')
|
||||
const { ANON_USER_ID } = require('../lib/constants')
|
||||
import * as math from 'mathjs'
|
||||
import { ANON_USER_ID } from '../lib/constants.js'
|
||||
|
||||
function trust ({ boss, models }) {
|
||||
export function trust ({ boss, models }) {
|
||||
return async function () {
|
||||
try {
|
||||
console.time('trust')
|
||||
|
@ -172,5 +172,3 @@ async function storeTrust (models, nodeTrust) {
|
|||
FROM (values ${values}) g(id, trust)
|
||||
WHERE users.id = g.id`)])
|
||||
}
|
||||
|
||||
module.exports = { trust }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// this is intended to be run everyday after midnight CT
|
||||
function views ({ models }) {
|
||||
export function views ({ models }) {
|
||||
return async function () {
|
||||
console.log('refreshing stats views')
|
||||
|
||||
|
@ -14,7 +14,7 @@ function views ({ models }) {
|
|||
}
|
||||
|
||||
// this should be run regularly ... like, every 1-5 minutes
|
||||
function rankViews ({ models }) {
|
||||
export function rankViews ({ models }) {
|
||||
return async function () {
|
||||
console.log('refreshing rank views')
|
||||
|
||||
|
@ -25,5 +25,3 @@ function rankViews ({ models }) {
|
|||
console.log('done refreshing rank views')
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { views, rankViews }
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
const serialize = require('../api/resolvers/serial')
|
||||
const { getInvoice, getPayment, cancelHodlInvoice } = require('ln-service')
|
||||
const { datePivot } = require('../lib/time')
|
||||
import serialize from '../api/resolvers/serial.js'
|
||||
import { getInvoice, getPayment, cancelHodlInvoice } from 'ln-service'
|
||||
import { datePivot } from '../lib/time.js'
|
||||
|
||||
const walletOptions = { startAfter: 5, retryLimit: 21, retryBackoff: true }
|
||||
|
||||
// TODO this should all be done via websockets
|
||||
function checkInvoice ({ boss, models, lnd }) {
|
||||
export function checkInvoice ({ boss, models, lnd }) {
|
||||
return async function ({ data: { hash, isHeldSet } }) {
|
||||
let inv
|
||||
try {
|
||||
|
@ -67,7 +67,7 @@ function checkInvoice ({ boss, models, lnd }) {
|
|||
}
|
||||
}
|
||||
|
||||
function checkWithdrawal ({ boss, models, lnd }) {
|
||||
export function checkWithdrawal ({ boss, models, lnd }) {
|
||||
return async function ({ data: { id, hash } }) {
|
||||
let wdrwl
|
||||
let notFound = false
|
||||
|
@ -110,5 +110,3 @@ function checkWithdrawal ({ boss, models, lnd }) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { checkInvoice, checkWithdrawal }
|
||||
|
|
Loading…
Reference in New Issue