From b363eaaeb8c989c9a30ffb6493a4b9b5e1291664 Mon Sep 17 00:00:00 2001 From: naftalimurgor Date: Sun, 23 Jul 2023 18:48:48 +0300 Subject: [PATCH] util/ --- util/wordlists.js | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 util/wordlists.js diff --git a/util/wordlists.js b/util/wordlists.js new file mode 100644 index 0000000..05576c2 --- /dev/null +++ b/util/wordlists.js @@ -0,0 +1,61 @@ +/* istanbul ignore file */ +var fetch = require('node-fetch') +var fs = require('fs') +var path = require('path') + +var log = console.log +var WORDLISTS = [ + 'chinese_simplified', + 'chinese_traditional', + 'czech', + 'english', + 'french', + 'italian', + 'japanese', + 'korean', + 'portuguese', + 'spanish' +] + +function update () { + download().then(function (wordlists) { + var promises = Object.keys(wordlists).map(function (name) { return save(name, wordlists[name]) }) + return Promise.all(promises) + }) +} + +function download () { + var wordlists = {} + + var promises = WORDLISTS.map(function (name) { + return fetchRaw(name).then(toJSON).then(function (wordlist) { wordlists[name] = wordlist }) + }) + + return Promise.all(promises).then(function () { return wordlists }) +} + +function fetchRaw (name) { + var url = 'https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/' + name + '.txt' + log('download ' + url) + + return fetch(url).then(function (response) { return response.text() }) +} + +function toJSON (content) { + return content.trim().split('\n').map(function (word) { return word.trim() }) +} + +function save (name, wordlist) { + var location = path.join(__dirname, '..', 'ts_src', 'wordlists', name + '.json') + var content = JSON.stringify(wordlist, null, 2) + '\n' + log('save ' + wordlist.length + ' words to ' + location) + + return new Promise(function (resolve, reject) { + fs.writeFile(location, content, function (err) { + if (err) reject(err) + else resolve() + }) + }) +} + +module.exports = { update: update, download: download }