// you may not need all of these but they come up a lot import fs from "fs"; import logging from '../lib/logging.js'; import { og_base_host } from "../client/config.js"; import axios from "axios"; import crypto from "crypto"; import { glob, write } from "../lib/builderator.js"; const log = logging.create(import.meta.url); const KEY_SIZE = 32; const DEFAULT_ENGINE = "https://yandex.com"; export const description = "Uses IndexNow.org to submit your site for reindex. You'll need to configure your IndexNow.org account before doing this." // your command uses the npm package commander's options format export const options = [ ["--gen-key", "If you don't have a key this will generate one."], ["--key-size ", "Key size to use with --gen-key", KEY_SIZE], ["--key ", "key to use"], ["--url ", "URL to submit", og_base_host], ["--key-path ", "Path to where the [key].txt should be stored. Command will ensure it's there or create it if not."], ["--search-engine ", "Company to notify, they're required to tell others.", DEFAULT_ENGINE], ] const random_hex = (size) => { return crypto.randomBytes(size).toString("hex"); } // handy function for checking things are good and aborting const check = (test, fail_message) => { if(!test) { log.error(fail_message); process.exit(1); } } export const main = async (opts) => { if(opts.genKey) { console.log(random_hex(parseInt(opts.keySize, 10))); } else { check(opts.key, "--key is required."); check(opts.url, "--url is required."); const keyfile = `${opts.keyPath}/${opts.key}.txt`; // confirm the key file is in the right place if(opts.keyPath && !fs.existsSync(keyfile)) { console.log("WRITING KEY FILE", keyfile); write(keyfile, opts.key); } const in_url = `${opts.searchEngine}/indexnow`; const request = { method: 'get', url: in_url, data: { url: opts.url, key: opts.key} }; try { const result = await axios(request); console.log("STATUS", result.status, "TEXT", result.statusText); } catch(error) { console.error(error.message, "REQUEST", request); process.exit(1); } } process.exit(0); }