fastify.plugin создать из функции плагин

Не получается из небольшой функции сделать плагин для fastify. Есть документация по этому поводу но по ней получается только оборачивать npm пакеты как плагин для fastify.

Документация : https://github.com/fastify/fastify/blob/master/docs/Plugins.md

функция которую я хочу подключить как плагин ( функция на скорую руку лишь бы выполняла то что нужно =) )

module.exports = (pin) => {
    let one = Math.floor(Math.random() * Math.floor(9));
    let two = Math.floor(Math.random() * Math.floor(9));
    let tree = Math.floor(Math.random() * Math.floor(9));
    let mask_pin = Math.floor(Math.random() * Math.floor(3));
    let mask = "";
    switch (mask_pin) {
        case 0: mask = "xzxc"; break;
        case 1: mask = "zxcx"; break;
        case 2: mask = "zxxc"; break;
    }

    return mask
    .replace(/[z]/g, one)
    .replace(/[x]/g, two)
    .replace(/[c]/g, tree);
}

планируется ее вызывать как то так fastify.pin();

когда оборачиваю функцию как npm пакеты то она выполняется 1 раз при запуске приложения и все.


Ответы (1 шт):

Автор решения: Артур Франк

Получилось сделать из функции плагин. Код прилагаю

epin.js

const fp = require('fastify-plugin');

const epin = function (pin) {  // Функция которая будет вызываться
    let one = Math.floor(Math.random() * Math.floor(9));
    let two = (9 - Math.floor(Math.random() * Math.floor(9)))
    let tree = Math.floor(Math.random() * Math.floor(9));
    let mask_pin = Math.floor(Math.random() * Math.floor(3));
    let mask = "";
    switch (mask_pin) {
        case 0: mask = "xzxc"; break;
        case 1: mask = "zxcx"; break;
        case 2: mask = "zxxc"; break;
    }

    return mask
        .replace(/[z]/g, one)
        .replace(/[x]/g, two)
        .replace(/[c]/g, tree);
}

const fastify_epin = (fastify, options, next) => {
    let transporter = null;

    try {
        transporter = epin;
    } catch (err) {
        return next(err)
    }

    fastify
        .decorate('epin', transporter)
        .addHook('onClose', close)
    next()
}

const close = (fastify, done) => {
    fastify.epin.close(done)
}

module.exports = fp(fastify_epin, {
    fastify: '>=2.0.0',
    name: 'fastify-epin'
})
→ Ссылка