mautic
unknown
plain_text
a year ago
5.3 kB
4
Indexable
#!/usr/bin/env node
import pApi from '../dist/api.js'
import { Writable } from 'stream'
import { appendFile } from 'fs/promises'
import { dirname } from 'path'
import { fileURLToPath } from 'url'
import { fromEvent } from 'promise-toolbox'
import { load as loadconfig } from 'app-conf'
import * as Utils from '@vates/www-xo-utils'
import o from '../dist/order-lib.js'
import dayjs from 'dayjs'
import fse from 'fs-extra'
const { default: OrderLib } = o
const { default: Api } = pApi
const appName = 'www-xo'
const MAUTIC_DATE_FORMAT = 'YYYY/MM/DD HH:MM'
const TRIAL_TYPES = {
STARTER: 'starter',
ENTERPRISE: 'enterprise',
PREMIUM: 'premium',
}
const ERRORS_FOLDER_PATH = './mautic-pile'
export function formatDate(timestamp) {
return moment(timestamp).format(MAUTIC_DATE_FORMAT)
}
export function getStarterTrials(trials) {
return trials.filter((t) => t.productId === TRIAL_TYPES.STARTER)
}
export function getEnterpriseTrials(trials) {
return trials.filter((t) => t.productId === TRIAL_TYPES.ENTERPRISE)
}
export function getPremiumTrials(trials) {
return trials.filter((t) => t.productId === TRIAL_TYPES.PREMIUM)
}
export function getLatestTrial(trials) {
return trials.sort((a, b) => b.end - a.end)[0]
}
async function main(args) {
const output = args.pop()
const __dirname = dirname(fileURLToPath(import.meta.url))
const config = await loadconfig(appName, { appDir: dirname(__dirname) })
const api = new Api(config)
const readAccounts = api.db.createReadStream({
gt: 'a_',
lt: 'a`',
values: true,
keys: false,
})
let data = []
for await (const account of readAccounts) {
if (account.type === 'customer' && !account.deleted) {
data.push({
email: account.email,
firstname: account.billingInfo?.firstName,
})
}
}
let n = 0
for (let i = 0; i < data.length; i += 50) {
const chunk = data.slice(i, i + 50 )
await fse.outputJson(`${output}/accounts${n}`, chunk)
n++
}
// const writeMetrics = new Writable({
// objectMode: true,
// write: async function (chunk, encoding, cb) {
// const fileData = fs.readFileSync('data.json');
// const fileJsonData = JSON.parse(fileData);
// if (chunk.type === 'customer' && !chunk.deleted) {
// const data = [
// 'email',
// chunk.email,
// 'firstname',
// chunk.billingInfo?.firstName,
// 'lastname',
// chunk.billingInfo?.lastName,
// 'company',
// chunk.billingInfo?.company,
// 'address1',
// chunk.billingInfo?.street,
// 'address2',
// chunk.billingInfo?.address2,
// 'zipcode',
// chunk.billingInfo?.zip,
// 'city',
// chunk.billingInfo?.city,
// 'donotcontact',
// (chunk.preferences && chunk.preferences.nomail) || false,
// // 'starter_trial_start',
// // (getStarterTrials(trials).length > 0 &&
// // formatDate(getLatestTrial(getStarterTrials(trials)).start)) ||
// // undefined,
// // 'starter_trial_end',
// // (getStarterTrials(trials).length > 0 &&
// // formatDate(getLatestTrial(getStarterTrials(trials)).end)) ||
// // undefined,
// // 'starter_trial_extended'(
// // (getStarterTrials(trials).length > 0 &&
// // getLatestTrial(getStarterTrials(trials)).extended) ||
// // undefined,
// // 'enterprise_trial_start',
// // getEnterpriseTrials(trials).length > 0 &&
// // formatDate(getLatestTrial(getEnterpriseTrials(trials)).start),
// // ) || undefined,
// // 'enterprise_trial_end',
// // (getEnterpriseTrials(trials).length > 0 &&
// // formatDate(getLatestTrial(getEnterpriseTrials(trials)).end)) ||
// // undefined,
// // 'enterprise_trial_extended',
// // (getEnterpriseTrials(trials).length > 0 &&
// // getLatestTrial(getEnterpriseTrials(trials)).extended) ||
// // undefined,
// // 'premium_trial_start',
// // (getPremiumTrials(trials).length > 0 &&
// // formatDate(getLatestTrial(getPremiumTrials(trials)).start)) ||
// // undefined,
// // 'premium_trial_end',
// // (getPremiumTrials(trials).length > 0 &&
// // formatDate(getLatestTrial(getPremiumTrials(trials)).end)) ||
// // undefined,
// // 'premium_trial_extended',
// // (getPremiumTrials(trials).length > 0 &&
// // getLatestTrial(getPremiumTrials(trials)).extended) ||
// // undefined,
// // 'end_user',
// // Boolean(
// // account.role &&
// // account.role.endUser &&
// // account.role.endUser.status === 'granted',
// // ),
// // 'creation_date',
// // formatDate(account.signupDate),
// ]
// await appendFile(`${output}/accounts`, `${data.join(`\0`)}\n`)
// }
// cb()
// },
// })
// readAccounts.pipe(writeMetrics)
// await fromEvent(readAccounts, 'end')
console.log('mautic.js done')
}
main(process.argv.slice(2))
Editor is loading...
Leave a Comment