diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml deleted file mode 100644 index b126e98..0000000 --- a/.github/workflows/contributors.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: Revisando Colaboradores - -on: - schedule: - - cron: '0 9 * * *' - -jobs: - contrib-readme-job: - runs-on: ubuntu-latest - name: A job to automate contrib in readme - steps: - - name: Contribute List - uses: akhilmhdh/contributors-readme-action@v2.3.6 - with: - image_size: 50 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/__mocks__/env.js b/__mocks__/env.js new file mode 100644 index 0000000..ff09721 --- /dev/null +++ b/__mocks__/env.js @@ -0,0 +1,39 @@ +const MOCK_DB = require('../packages/database/src/mock') +const PROVIDER_DB = require('../packages/provider/src/mock') + +class MOCK_FLOW { + allCallbacks = { ref: () => 1 } + flowSerialize = [] + flowRaw = [] + find = (arg) => { + if (arg) { + return [{ answer: 'answer', ref: 'ref' }] + } else { + return null + } + } + findBySerialize = () => ({}) + findIndexByRef = () => 0 +} + +/** + * Preparar env para el test + * @param {*} context + */ +const setup = async (context) => { + context.provider = new PROVIDER_DB() + context.database = new MOCK_DB() + context.flow = new MOCK_FLOW() +} + +const clear = async (context) => { + context.provider = null + context.database = null + context.flow = null +} + +function delay(ms) { + return new Promise((res) => setTimeout(res, ms)) +} + +module.exports = { setup, clear, delay } diff --git a/__mocks__/mobile.mock.js b/__mocks__/mobile.mock.js deleted file mode 100644 index 7f19f74..0000000 --- a/__mocks__/mobile.mock.js +++ /dev/null @@ -1,6 +0,0 @@ -const MOCK_MOBILE_WS = { - from: 'XXXXXX', - hasMedia: false, -} - -module.exports = { MOCK_MOBILE_WS } diff --git a/__test__/0.1.0-case.test.js b/__test__/0.1.0-case.test.js new file mode 100644 index 0000000..7bca259 --- /dev/null +++ b/__test__/0.1.0-case.test.js @@ -0,0 +1,51 @@ +const { suite } = require('uvu') +const assert = require('uvu/assert') +const { addKeyword, createBot, createFlow } = require('../packages/bot/index') +const { setup, clear, delay } = require('../__mocks__/env') + +const suiteCase = suite('Flujo: sensitive') + +suiteCase.before.each(setup) +suiteCase.after.each(clear) + +suiteCase(`Responder a "ole" en minuscula`, async ({ database, provider }) => { + const flow = addKeyword(['ola', 'ole'], { sensitive: true }).addAnswer('Bienvenido a la OLA') + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'ole', + }) + + await delay(0) + + assert.is('Bienvenido a la OLA', database.listHistory[0].answer) + assert.is(undefined, database.listHistory[1]) +}) + +suiteCase(`NO Responder a "ole" en minuscula`, async ({ database, provider }) => { + const flow = addKeyword(['ola', 'ole'], { sensitive: true }).addAnswer('Bienvenido a la OLA') + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'OLE', + }) + + await delay(0) + + assert.is(undefined, database.listHistory[0]) + assert.is(undefined, database.listHistory[1]) +}) + +suiteCase.run() diff --git a/__test__/0.1.1-case.test.js b/__test__/0.1.1-case.test.js new file mode 100644 index 0000000..dd49d5c --- /dev/null +++ b/__test__/0.1.1-case.test.js @@ -0,0 +1,89 @@ +const { suite } = require('uvu') +const assert = require('uvu/assert') +const { addKeyword, createBot, createFlow } = require('../packages/bot/index') +const { setup, clear, delay } = require('../__mocks__/env') + +const fakeHTTP = async () => { + await delay(10) +} + +const suiteCase = suite('Flujo: hijos con callbacks') + +suiteCase.before.each(setup) +suiteCase.after.each(clear) + +suiteCase(`Debe continuar el flujo del hijo`, async ({ database, provider }) => { + const flowCash = addKeyword('cash').addAnswer('Traeme los billetes! 😎') + + const flowOnline = addKeyword('paypal') + .addAnswer('Voy generar un link de paypal *escribe algo*', { capture: true }, async (_, { flowDynamic }) => { + await fakeHTTP() + await flowDynamic('Esperate.... estoy generando esto toma su tiempo') + }) + .addAnswer('Aqui lo tienes 😎😎', null, async (_, { flowDynamic }) => { + await fakeHTTP() + await flowDynamic('http://paypal.com') + }) + .addAnswer('Apurate!') + + const flujoPrincipal = addKeyword('hola') + .addAnswer('¿Como estas todo bien?') + .addAnswer('Espero que si') + .addAnswer('¿Cual es tu email?', { capture: true }, async (ctx, { fallBack }) => { + if (!ctx.body.includes('@')) { + return fallBack('Veo que no es um mail *bien*') + } + }) + .addAnswer('Voy a validar tu email...', null, async (_, { flowDynamic }) => { + await fakeHTTP() + return flowDynamic('Email validado correctamten!') + }) + .addAnswer('¿Como vas a pagar *paypal* o *cash*?', { capture: true }, async () => {}, [flowCash, flowOnline]) + + createBot({ + database, + flow: createFlow([flujoPrincipal]), + provider, + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + await provider.delaySendMessage(10, 'message', { + from: '000', + body: 'test@test.com', + }) + + await provider.delaySendMessage(15, 'message', { + from: '000', + body: 'paypal', + }) + + await provider.delaySendMessage(20, 'message', { + from: '000', + body: 'continue!', + }) + + await delay(500) + const getHistory = database.listHistory.map((i) => i.answer) + + assert.is('¿Como estas todo bien?', getHistory[0]) + assert.is('Espero que si', getHistory[1]) + assert.is('¿Cual es tu email?', getHistory[2]) + assert.is('test@test.com', getHistory[3]) + assert.is('Voy a validar tu email...', getHistory[4]) + assert.is('Email validado correctamten!', getHistory[5]) + assert.is('¿Como vas a pagar *paypal* o *cash*?', getHistory[6]) + assert.is('paypal', getHistory[7]) + assert.is('Voy generar un link de paypal *escribe algo*', getHistory[8]) + assert.is('continue!', getHistory[9]) + assert.is('Esperate.... estoy generando esto toma su tiempo', getHistory[10]) + assert.is('Aqui lo tienes 😎😎', getHistory[11]) + assert.is('http://paypal.com', getHistory[12]) + assert.is('Apurate!', getHistory[13]) + assert.is(undefined, getHistory[14]) +}) + +suiteCase.run() diff --git a/__test__/00-case.test.js b/__test__/00-case.test.js new file mode 100644 index 0000000..eea982a --- /dev/null +++ b/__test__/00-case.test.js @@ -0,0 +1,52 @@ +const { suite } = require('uvu') +const assert = require('uvu/assert') +const { addKeyword, createBot, createFlow } = require('../packages/bot/index') +const { setup, clear, delay } = require('../__mocks__/env') + +const suiteCase = suite('Flujo: Simple') + +suiteCase.before.each(setup) +suiteCase.after.each(clear) + +suiteCase(`Responder a "hola"`, async ({ database, provider }) => { + const flow = addKeyword('hola').addAnswer('Buenas!').addAnswer('Como vamos!') + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + await delay(0) + + assert.is('Buenas!', database.listHistory[0].answer) + assert.is('Como vamos!', database.listHistory[1].answer) + assert.is(undefined, database.listHistory[2]) +}) + +suiteCase(`NO reponder a "pepe"`, async ({ database, provider }) => { + const flow = addKeyword('hola').addAnswer('Buenas!').addAnswer('Como vamos!') + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'pepe', + }) + + await delay(0) + + assert.is(undefined, database.listHistory[0]) + assert.is(undefined, database.listHistory[1]) +}) + +suiteCase.run() diff --git a/__test__/01-case.test.js b/__test__/01-case.test.js deleted file mode 100644 index 57ae08c..0000000 --- a/__test__/01-case.test.js +++ /dev/null @@ -1,36 +0,0 @@ -const { test } = require('uvu') -const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_DB = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') - -test(`[Caso - 01] Flow Basico`, async () => { - const [VALUE_A, VALUE_B] = ['hola', 'buenas'] - - const flow = addKeyword(VALUE_A).addAnswer(VALUE_B) - const provider = createProvider(PROVIDER_DB) - const database = new MOCK_DB() - - createBot({ - database, - flow: createFlow([flow]), - provider, - }) - - provider.delaySendMessage(100, 'message', { - from: '000', - body: VALUE_A, - }) - - await delay(100) - - const prevMsg = database.getPrevByNumber('000') - - assert.is(prevMsg.answer, VALUE_B) -}) - -test.run() - -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} diff --git a/__test__/02-case.test.js b/__test__/02-case.test.js index 855a566..b421955 100644 --- a/__test__/02-case.test.js +++ b/__test__/02-case.test.js @@ -1,94 +1,59 @@ -const { test } = require('uvu') +const { suite } = require('uvu') const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_DB = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') +const { addKeyword, createBot, createFlow } = require('../packages/bot/index') +const { setup, clear, delay } = require('../__mocks__/env') -/** - * Falsear peticion async - * @param {*} fakeData - * @returns - */ -const fakeHTTP = async (fakeData = []) => { - console.log('⚡ Server request!') - await delay(50) - console.log('⚡ Server return!') - const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` })) - console.log(data) - return Promise.resolve(data) -} +const suiteCase = suite('Flujo: regex') -test(`[Caso - 02] Flow (flowDynamic)`, async () => { - const MOCK_VALUES = [ - 'Bienvenido te envio muchas marcas (5510)', - 'Seleccione marca del auto a cotizar, con el *número* correspondiente', - 'Seleccione la sub marca del auto a cotizar, con el *número* correspondiente:', - 'Los precios rondan:', - ] - const provider = createProvider(PROVIDER_DB) - const database = new MOCK_DB() +suiteCase.before.each(setup) +suiteCase.after.each(clear) - const flujoPrincipal = addKeyword(['hola']) - .addAnswer(MOCK_VALUES[0], null, async (ctx, { flowDynamic }) => { - console.log('execute...') - const data = await fakeHTTP(['Ford', 'GM', 'BMW']) - return flowDynamic(data) - }) - .addAnswer(MOCK_VALUES[1], null, async (ctx, { flowDynamic }) => { - const data = await fakeHTTP(['Ranger', 'Explorer']) - return flowDynamic(data) - }) - .addAnswer(MOCK_VALUES[2], null, async (ctx, { flowDynamic }) => { - const data = await fakeHTTP(['Usado', 'Nuevos']) - return flowDynamic(data) - }) - .addAnswer(MOCK_VALUES[3], null, async (ctx, { flowDynamic }) => { - const data = await fakeHTTP(['1000', '2000', '3000']) - return flowDynamic(data) - }) +suiteCase(`Responder a una expresion regular`, async ({ database, provider }) => { + const REGEX_CREDIT_NUMBER = `/(^4[0-9]{12}(?:[0-9]{3})?$)|(^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$)|(3[47][0-9]{13})|(^3(?:0[0-5]|[68][0-9])[0-9]{11}$)|(^6(?:011|5[0-9]{2})[0-9]{12}$)|(^(?:2131|1800|35\d{3})\d{11}$)/gm` + + const flow = addKeyword(REGEX_CREDIT_NUMBER, { regex: true }) + .addAnswer(`Gracias por proporcionar un numero de tarjeta valido`) + .addAnswer('Fin!') createBot({ database, - flow: createFlow([flujoPrincipal]), provider, + flow: createFlow([flow]), }) - provider.delaySendMessage(0, 'message', { + await provider.delaySendMessage(0, 'message', { + from: '000', + body: '374245455400126', + }) + + await delay(10) + + assert.is('Gracias por proporcionar un numero de tarjeta valido', database.listHistory[0].answer) + assert.is('Fin!', database.listHistory[1].answer) + assert.is(undefined, database.listHistory[2]) +}) + +suiteCase(`NO Responder a una expresion regular`, async ({ database, provider }) => { + const REGEX_CREDIT_NUMBER = `/(^4[0-9]{12}(?:[0-9]{3})?$)|(^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$)|(3[47][0-9]{13})|(^3(?:0[0-5]|[68][0-9])[0-9]{11}$)|(^6(?:011|5[0-9]{2})[0-9]{12}$)|(^(?:2131|1800|35\d{3})\d{11}$)/gm` + const flow = addKeyword(REGEX_CREDIT_NUMBER, { regex: true }) + .addAnswer(`Gracias por proporcionar un numero de tarjeta valido`) + .addAnswer('Fin!') + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { from: '000', body: 'hola', }) - await delay(1200) - const getHistory = database.listHistory.map((i) => i.answer) - assert.is(MOCK_VALUES[0], getHistory[0]) + await delay(10) - //FlowDynamic - assert.is('1 Ford', getHistory[1]) - assert.is('2 GM', getHistory[2]) - assert.is('3 BMW', getHistory[3]) - - assert.is(MOCK_VALUES[1], getHistory[4]) - - //FlowDynamic - assert.is('1 Ranger', getHistory[5]) - assert.is('2 Explorer', getHistory[6]) - - assert.is(MOCK_VALUES[2], getHistory[7]) - - //FlowDynamic - assert.is('1 Usado', getHistory[8]) - assert.is('2 Nuevos', getHistory[9]) - - assert.is(MOCK_VALUES[3], getHistory[10]) - - //FlowDynamic - assert.is('1 1000', getHistory[11]) - assert.is('2 2000', getHistory[12]) - assert.is('3 3000', getHistory[13]) + assert.is(undefined, database.listHistory[0]) + assert.is(undefined, database.listHistory[1]) }) -test.run() - -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} +suiteCase.run() diff --git a/__test__/03-case.test.js b/__test__/03-case.test.js index 646b5d5..1d4c28d 100644 --- a/__test__/03-case.test.js +++ b/__test__/03-case.test.js @@ -1,37 +1,40 @@ -const { test } = require('uvu') +const { suite } = require('uvu') const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_DB = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') +const { addKeyword, createBot, createFlow } = require('../packages/bot/index') +const { setup, clear, delay } = require('../__mocks__/env') -test(`[Caso - 03] Flow puro`, async () => { - const MOCK_VALUES = ['Bienvenido a mi tienda', 'Como estas?'] +const suiteCase = suite('Flujo: capture') - const provider = createProvider(PROVIDER_DB) - const database = new MOCK_DB() +suiteCase.before.each(setup) +suiteCase.after.each(clear) - const flujoPrincipal = addKeyword(['hola']).addAnswer(MOCK_VALUES[0]).addAnswer(MOCK_VALUES[1]) +suiteCase(`Responder a "pregunta"`, async ({ database, provider }) => { + const flow = addKeyword(['hola']) + .addAnswer(['Hola como estas?', '¿Cual es tu edad?'], { capture: true }) + .addAnswer('Gracias por tu respuesta') createBot({ database, - flow: createFlow([flujoPrincipal]), provider, + flow: createFlow([flow]), }) - provider.delaySendMessage(0, 'message', { + await provider.delaySendMessage(0, 'message', { from: '000', body: 'hola', }) - await delay(10) - const getHistory = database.listHistory.map((i) => i.answer) + await provider.delaySendMessage(10, 'message', { + from: '000', + body: '90', + }) - assert.is(MOCK_VALUES[0], getHistory[0]) - assert.is(MOCK_VALUES[1], getHistory[1]) + await delay(20) + + assert.is(['Hola como estas?', '¿Cual es tu edad?'].join('\n'), database.listHistory[0].answer) + assert.is('90', database.listHistory[1].answer) + assert.is('Gracias por tu respuesta', database.listHistory[2].answer) + assert.is(undefined, database.listHistory[3]) }) -test.run() - -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} +suiteCase.run() diff --git a/__test__/04-case.test.js b/__test__/04-case.test.js index 8fcaeda..6b9f7e8 100644 --- a/__test__/04-case.test.js +++ b/__test__/04-case.test.js @@ -1,58 +1,51 @@ -const { test } = require('uvu') +const { suite } = require('uvu') const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_DB = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') +const { addKeyword, createBot, createFlow } = require('../packages/bot/index') +const { setup, clear, delay } = require('../__mocks__/env') -/** - * Falsear peticion async - * @param {*} fakeData - * @returns - */ const fakeHTTP = async (fakeData = []) => { - console.log('⚡ Server request!') await delay(50) - console.log('⚡ Server return!') - const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` })) - console.log(data) + const data = fakeData.map((u) => ({ body: `${u}` })) return Promise.resolve(data) } -test(`[Caso - 04] Romper flujo (endFlow)`, async () => { +const suiteCase = suite('Flujo: flowDynamic') + +suiteCase.before.each(setup) +suiteCase.after.each(clear) + +suiteCase(`Responder con mensajes asyncronos`, async ({ database, provider }) => { const MOCK_VALUES = [ 'Bienvenido te envio muchas marcas (5510)', 'Seleccione marca del auto a cotizar, con el *número* correspondiente', 'Seleccione la sub marca del auto a cotizar, con el *número* correspondiente:', 'Los precios rondan:', ] - const provider = createProvider(PROVIDER_DB) - const database = new MOCK_DB() - - const flujoPrincipal = addKeyword(['hola']) - .addAnswer(MOCK_VALUES[0], null, async (ctx, { flowDynamic }) => { - console.log('execute...') + const flow = addKeyword(['hola']) + .addAnswer(MOCK_VALUES[0], null, async (_, { flowDynamic }) => { const data = await fakeHTTP(['Ford', 'GM', 'BMW']) return flowDynamic(data) }) - .addAnswer(MOCK_VALUES[1], null, async (ctx, { endFlow }) => { - return endFlow() + .addAnswer(MOCK_VALUES[1], null, async (_, { flowDynamic }) => { + const data = await fakeHTTP(['Ranger', 'Explorer']) + return flowDynamic(data) }) - .addAnswer(MOCK_VALUES[2], null, async (ctx, { flowDynamic }) => { + .addAnswer(MOCK_VALUES[2], null, async (_, { flowDynamic }) => { const data = await fakeHTTP(['Usado', 'Nuevos']) return flowDynamic(data) }) - .addAnswer(MOCK_VALUES[3], null, async (ctx, { flowDynamic }) => { + .addAnswer(MOCK_VALUES[3], null, async (_, { flowDynamic }) => { const data = await fakeHTTP(['1000', '2000', '3000']) return flowDynamic(data) }) createBot({ database, - flow: createFlow([flujoPrincipal]), provider, + flow: createFlow([flow]), }) - provider.delaySendMessage(0, 'message', { + await provider.delaySendMessage(0, 'message', { from: '000', body: 'hola', }) @@ -62,16 +55,108 @@ test(`[Caso - 04] Romper flujo (endFlow)`, async () => { assert.is(MOCK_VALUES[0], getHistory[0]) //FlowDynamic - assert.is('1 Ford', getHistory[1]) - assert.is('2 GM', getHistory[2]) - assert.is('3 BMW', getHistory[3]) + assert.is('Ford', getHistory[1]) + assert.is('GM', getHistory[2]) + assert.is('BMW', getHistory[3]) assert.is(MOCK_VALUES[1], getHistory[4]) - assert.is(undefined, getHistory[5]) + + //FlowDynamic + assert.is('Ranger', getHistory[5]) + assert.is('Explorer', getHistory[6]) + + assert.is(MOCK_VALUES[2], getHistory[7]) + + //FlowDynamic + assert.is('Usado', getHistory[8]) + assert.is('Nuevos', getHistory[9]) + + assert.is(MOCK_VALUES[3], getHistory[10]) + + //FlowDynamic + assert.is('1000', getHistory[11]) + assert.is('2000', getHistory[12]) + assert.is('3000', getHistory[13]) + assert.is(undefined, getHistory[14]) }) -test.run() +suiteCase(`Responder con un "string"`, async ({ database, provider }) => { + const flow = addKeyword(['hola']) + .addAnswer('Como vas?', null, async (_, { flowDynamic }) => { + return flowDynamic('Todo bien!') + }) + .addAnswer('y vos?') -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + await delay(10) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is('Como vas?', getHistory[0]) + assert.is('Todo bien!', getHistory[1]) + assert.is('y vos?', getHistory[2]) + assert.is(undefined, getHistory[3]) +}) + +suiteCase(`Responder con un "array"`, async ({ database, provider }) => { + const flow = addKeyword(['hola']) + .addAnswer('Como vas?', null, async (_, { flowDynamic }) => { + return flowDynamic(['Todo bien!', 'trabajando']) + }) + .addAnswer('y vos?') + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + await delay(10) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is('Como vas?', getHistory[0]) + assert.is('Todo bien!', getHistory[1]) + assert.is('trabajando', getHistory[2]) + assert.is('y vos?', getHistory[3]) + assert.is(undefined, getHistory[4]) +}) + +suiteCase(`Responder con un "object"`, async ({ database, provider }) => { + const flow = addKeyword(['hola']) + .addAnswer('Como vas?', null, async (_, { flowDynamic }) => { + return flowDynamic([{ body: 'Todo bien!' }]) + }) + .addAnswer('y vos?') + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + await delay(10) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is('Como vas?', getHistory[0]) + assert.is('Todo bien!', getHistory[1]) + assert.is('y vos?', getHistory[2]) + assert.is(undefined, getHistory[3]) +}) + +suiteCase.run() diff --git a/__test__/05-case.test.js b/__test__/05-case.test.js index f61d114..f2280bb 100644 --- a/__test__/05-case.test.js +++ b/__test__/05-case.test.js @@ -1,26 +1,97 @@ -const { test } = require('uvu') +const { suite } = require('uvu') const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_DB = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') +const { addKeyword, createBot, createFlow } = require('../packages/bot/index') +const { setup, clear, delay } = require('../__mocks__/env') -/** - * Falsear peticion async - * @param {*} fakeData - * @returns - */ const fakeHTTP = async (fakeData = []) => { - await delay(5) - const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` })) + await delay(50) + const data = fakeData.map((u) => ({ body: `${u}` })) return Promise.resolve(data) } -test(`[Caso - 05] Continuar Flujo (continueFlow)`, async () => { - const MOCK_VALUES = ['¿CUal es tu email?', 'Continuamos....', '¿Cual es tu edad?'] - const provider = createProvider(PROVIDER_DB) - const database = new MOCK_DB() +const suiteCase = suite('Flujo: endFlow') - const flujoPrincipal = addKeyword(['hola']) +suiteCase.before.each(setup) +suiteCase.after.each(clear) + +suiteCase(`Detener el flujo`, async ({ database, provider }) => { + const MOCK_VALUES = [ + 'Bienvenido te envio muchas marcas', + 'Seleccione marca del auto a cotizar, con el *número* correspondiente', + 'Seleccione la sub marca del auto a cotizar, con el *número* correspondiente:', + 'Los precios rondan:', + ] + const flow = addKeyword(['hola']) + .addAnswer(MOCK_VALUES[0], null, async (_, { flowDynamic }) => { + const data = await fakeHTTP(['Ford', 'GM', 'BMW']) + return flowDynamic(data) + }) + .addAnswer(MOCK_VALUES[1], null, async (_, { endFlow }) => { + return endFlow() + }) + .addAnswer(MOCK_VALUES[2]) + .addAnswer(MOCK_VALUES[3], null, async (_, { flowDynamic }) => { + const data = await fakeHTTP(['1000', '2000', '3000']) + return flowDynamic(data) + }) + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + await delay(500) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is(MOCK_VALUES[0], getHistory[0]) + + //FlowDynamic + assert.is('Ford', getHistory[1]) + assert.is('GM', getHistory[2]) + assert.is('BMW', getHistory[3]) + + assert.is(MOCK_VALUES[1], getHistory[4]) + + //FlowDynamic + assert.is(undefined, getHistory[5]) + assert.is(undefined, getHistory[6]) +}) + +suiteCase(`Detener el flujo flowDynamic`, async ({ database, provider }) => { + const flow = addKeyword(['hola']) + .addAnswer('Buenas!', null, async (_, { endFlow, flowDynamic }) => { + await flowDynamic('Continuamos...') + return endFlow() + }) + .addAnswer('Como estas!') + + createBot({ + database, + provider, + flow: createFlow([flow]), + }) + + await provider.delaySendMessage(0, 'message', { + from: '000', + body: 'hola', + }) + + await delay(10) + const getHistory = database.listHistory.map((i) => i.answer) + assert.is('Buenas!', getHistory[0]) + assert.is('Continuamos...', getHistory[1]) + assert.is(undefined, getHistory[2]) +}) + +suiteCase(`flowDynamic con capture`, async ({ database, provider }) => { + const MOCK_VALUES = ['¿CUal es tu email?', 'Continuamos....', '¿Cual es tu edad?'] + + const flow = addKeyword(['hola']) .addAnswer( MOCK_VALUES[0], { @@ -33,14 +104,14 @@ test(`[Caso - 05] Continuar Flujo (continueFlow)`, async () => { const getDataFromApi = await fakeHTTP(['Gracias por tu email se ha validado de manera correcta']) return flowDynamic(getDataFromApi) } - return fallBack(validation) + return fallBack() } ) .addAnswer(MOCK_VALUES[1]) .addAnswer(MOCK_VALUES[2], { capture: true }, async (ctx, { flowDynamic, fallBack }) => { if (ctx.body !== '18') { - await delay(50) - return fallBack(false, 'Ups creo que no eres mayor de edad') + await delay(20) + return fallBack('Ups creo que no eres mayor de edad') } return flowDynamic('Bien tu edad es correcta!') }) @@ -48,42 +119,42 @@ test(`[Caso - 05] Continuar Flujo (continueFlow)`, async () => { createBot({ database, - flow: createFlow([flujoPrincipal]), provider, + flow: createFlow([flow]), }) - provider.delaySendMessage(0, 'message', { + await provider.delaySendMessage(0, 'message', { from: '000', body: 'hola', }) - provider.delaySendMessage(10, 'message', { + await provider.delaySendMessage(10, 'message', { from: '000', body: 'this is not email value', }) - provider.delaySendMessage(20, 'message', { + await provider.delaySendMessage(20, 'message', { from: '000', body: 'test@test.com', }) - provider.delaySendMessage(90, 'message', { + await provider.delaySendMessage(90, 'message', { from: '000', body: '20', }) - provider.delaySendMessage(200, 'message', { + await provider.delaySendMessage(200, 'message', { from: '000', body: '18', }) - await delay(1200) + await delay(500) const getHistory = database.listHistory.map((i) => i.answer) assert.is(MOCK_VALUES[0], getHistory[0]) assert.is('this is not email value', getHistory[1]) assert.is(MOCK_VALUES[0], getHistory[2]) assert.is('test@test.com', getHistory[3]) - assert.is('1 Gracias por tu email se ha validado de manera correcta', getHistory[4]) + assert.is('Gracias por tu email se ha validado de manera correcta', getHistory[4]) assert.is(MOCK_VALUES[1], getHistory[5]) assert.is(MOCK_VALUES[2], getHistory[6]) assert.is('20', getHistory[7]) @@ -93,8 +164,4 @@ test(`[Caso - 05] Continuar Flujo (continueFlow)`, async () => { assert.is('Puedes pasar', getHistory[11]) }) -test.run() - -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} +suiteCase.run() diff --git a/__test__/06-case.test.js b/__test__/06-case.test.js index 355cbd4..4a56dd0 100644 --- a/__test__/06-case.test.js +++ b/__test__/06-case.test.js @@ -1,24 +1,16 @@ -const { test } = require('uvu') +const { suite } = require('uvu') const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_DB = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') +const { addKeyword, createBot, createFlow } = require('../packages/bot/index') +const { setup, clear, delay } = require('../__mocks__/env') -/** - * Falsear peticion async - * @param {*} fakeData - * @returns - */ -const fakeHTTP = async (fakeData = []) => { - await delay(5) - const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` })) - return Promise.resolve(data) -} +const suiteCase = suite('Flujo: manejo de estado') -test(`[Caso - 06] Finalizar Flujo (endFlow)`, async () => { - const MOCK_VALUES = ['¿CUal es tu email?', 'Continuamos....', '¿Cual es tu edad?'] - const provider = createProvider(PROVIDER_DB) - const database = new MOCK_DB() +suiteCase.before.each(setup) +suiteCase.after.each(clear) + +suiteCase(`Debe retornar un mensaje resumen`, async ({ database, provider }) => { + let STATE_APP = {} + const MOCK_VALUES = ['¿Cual es tu nombre?', '¿Cual es tu edad?', 'Tu datos son:'] const flujoPrincipal = addKeyword(['hola']) .addAnswer( @@ -26,27 +18,27 @@ test(`[Caso - 06] Finalizar Flujo (endFlow)`, async () => { { capture: true, }, - async (ctx, { flowDynamic, fallBack }) => { - const validation = ctx.body.includes('@') + async (ctx, { flowDynamic }) => { + STATE_APP[ctx.from] = { ...STATE_APP[ctx.from], name: ctx.body } - if (validation) { - const getDataFromApi = await fakeHTTP(['Gracias por tu email se ha validado de manera correcta']) - return flowDynamic(getDataFromApi) - } - return fallBack(validation) + flowDynamic('Gracias por tu nombre!') } ) - .addAnswer(MOCK_VALUES[1], null, async (_, { endFlow }) => { - return endFlow() - }) - .addAnswer(MOCK_VALUES[2], { capture: true }, async (ctx, { flowDynamic, fallBack }) => { - if (ctx.body !== '18') { - await delay(50) - return fallBack(false, 'Ups creo que no eres mayor de edad') + .addAnswer( + MOCK_VALUES[1], + { + capture: true, + }, + async (ctx, { flowDynamic }) => { + STATE_APP[ctx.from] = { ...STATE_APP[ctx.from], age: ctx.body } + + await flowDynamic(`Gracias por tu edad! ${STATE_APP[ctx.from].name}`) } - return flowDynamic('Bien tu edad es correcta!') + ) + .addAnswer(MOCK_VALUES[2], null, async (ctx, { flowDynamic }) => { + flowDynamic(`Nombre: ${STATE_APP[ctx.from].name} Edad: ${STATE_APP[ctx.from].age}`) }) - .addAnswer('Puedes pasar') + .addAnswer('🤖🤖 Gracias por tu participacion') createBot({ database, @@ -54,40 +46,52 @@ test(`[Caso - 06] Finalizar Flujo (endFlow)`, async () => { provider, }) - provider.delaySendMessage(0, 'message', { + await provider.delaySendMessage(0, 'message', { from: '000', body: 'hola', }) - provider.delaySendMessage(10, 'message', { - from: '000', - body: 'this is not email value', + await provider.delaySendMessage(5, 'message', { + from: '001', + body: 'hola', }) - provider.delaySendMessage(20, 'message', { + await provider.delaySendMessage(10, 'message', { from: '000', - body: 'test@test.com', + body: 'Leifer', }) - provider.delaySendMessage(90, 'message', { + await provider.delaySendMessage(15, 'message', { from: '000', - body: '20', + body: '90', }) - await delay(1200) + await provider.delaySendMessage(20, 'message', { + from: '001', + body: 'Maria', + }) + + await provider.delaySendMessage(25, 'message', { + from: '001', + body: '100', + }) + + await delay(500) const getHistory = database.listHistory.map((i) => i.answer) assert.is(MOCK_VALUES[0], getHistory[0]) - assert.is('this is not email value', getHistory[1]) - assert.is(MOCK_VALUES[0], getHistory[2]) - assert.is('test@test.com', getHistory[3]) - assert.is('1 Gracias por tu email se ha validado de manera correcta', getHistory[4]) - assert.is(MOCK_VALUES[1], getHistory[5]) - assert.is('20', getHistory[6]) - assert.is(undefined, getHistory[7]) + assert.is('¿Cual es tu nombre?', getHistory[1]) + assert.is('Leifer', getHistory[2]) + assert.is('Gracias por tu nombre!', getHistory[3]) + assert.is('¿Cual es tu edad?', getHistory[4]) + assert.is('90', getHistory[5]) + assert.is('Gracias por tu edad! Leifer', getHistory[6]) + assert.is('Tu datos son:', getHistory[7]) + assert.is('Nombre: Leifer Edad: 90', getHistory[8]) + assert.is('🤖🤖 Gracias por tu participacion', getHistory[9]) + assert.is('Maria', getHistory[10]) + assert.is('Gracias por tu nombre!', getHistory[11]) + assert.is('100', getHistory[12]) + assert.is(undefined, getHistory[13]) }) -test.run() - -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} +suiteCase.run() diff --git a/__test__/07-case.test.js b/__test__/07-case.test.js deleted file mode 100644 index 6eb8e42..0000000 --- a/__test__/07-case.test.js +++ /dev/null @@ -1,92 +0,0 @@ -const { test } = require('uvu') -const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_DB = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') - -/** - * Falsear peticion async - * @param {*} fakeData - * @returns - */ -const fakeHTTP = async (fakeData = []) => { - await delay(5) - const data = fakeData.map((u, i) => ({ body: `${i + 1} ${u}` })) - return Promise.resolve(data) -} - -let STATE_APP = {} - -test(`[Caso - 07] Retornar estado`, async () => { - const MOCK_VALUES = ['¿Cual es tu nombre?', '¿Cual es tu edad?', 'Tu datos son:'] - const provider = createProvider(PROVIDER_DB) - const database = new MOCK_DB() - - const flujoPrincipal = addKeyword(['hola']) - .addAnswer( - MOCK_VALUES[0], - { - capture: true, - }, - async (ctx, { flowDynamic, fallBack }) => { - STATE_APP[ctx.from] = { ...STATE_APP[ctx.from], name: ctx.body } - - flowDynamic('Gracias por tu nombre!') - } - ) - .addAnswer( - MOCK_VALUES[1], - { - capture: true, - }, - async (ctx, { flowDynamic, endFlow }) => { - STATE_APP[ctx.from] = { ...STATE_APP[ctx.from], age: ctx.body } - - await flowDynamic('Gracias por tu edad!') - } - ) - .addAnswer(MOCK_VALUES[2], null, async (ctx, { flowDynamic }) => { - flowDynamic(`Nombre: ${STATE_APP[ctx.from].name} Edad: ${STATE_APP[ctx.from].age}`) - }) - .addAnswer('🤖🤖 Gracias por tu participacion') - - createBot({ - database, - flow: createFlow([flujoPrincipal]), - provider, - }) - - provider.delaySendMessage(0, 'message', { - from: '000', - body: 'hola', - }) - - provider.delaySendMessage(20, 'message', { - from: '000', - body: 'Leifer', - }) - - provider.delaySendMessage(40, 'message', { - from: '000', - body: '90', - }) - - await delay(1200) - const getHistory = database.listHistory.map((i) => i.answer) - assert.is(MOCK_VALUES[0], getHistory[0]) - assert.is('Leifer', getHistory[1]) - assert.is('Gracias por tu nombre!', getHistory[2]) - assert.is('¿Cual es tu edad?', getHistory[3]) - assert.is('90', getHistory[4]) - assert.is('Gracias por tu edad!', getHistory[5]) - assert.is('Tu datos son:', getHistory[6]) - assert.is('Nombre: Leifer Edad: 90', getHistory[7]) - assert.is('🤖🤖 Gracias por tu participacion', getHistory[8]) - assert.is(undefined, getHistory[9]) -}) - -test.run() - -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} diff --git a/__test__/08-case.test.js b/__test__/08-case.test.js deleted file mode 100644 index 82fc46a..0000000 --- a/__test__/08-case.test.js +++ /dev/null @@ -1,43 +0,0 @@ -const { test } = require('uvu') -const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_DB = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') - -test(`[Caso - 08] Regular expression on keyword`, async () => { - const provider = createProvider(PROVIDER_DB) - const database = new MOCK_DB() - - const REGEX_CREDIT_NUMBER = `/(^4[0-9]{12}(?:[0-9]{3})?$)|(^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$)|(3[47][0-9]{13})|(^3(?:0[0-5]|[68][0-9])[0-9]{11}$)|(^6(?:011|5[0-9]{2})[0-9]{12}$)|(^(?:2131|1800|35\d{3})\d{11}$)/gm` - const flujoPrincipal = addKeyword(REGEX_CREDIT_NUMBER, { regex: true }) - .addAnswer(`Gracias por proporcionar un numero de tarjeta valido`) - .addAnswer('Fin!') - - createBot({ - database, - flow: createFlow([flujoPrincipal]), - provider, - }) - - provider.delaySendMessage(0, 'message', { - from: '000', - body: 'hola', - }) - - provider.delaySendMessage(20, 'message', { - from: '000', - body: '374245455400126', - }) - - await delay(40) - const getHistory = database.listHistory.map((i) => i.answer) - assert.is('Gracias por proporcionar un numero de tarjeta valido', getHistory[0]) - assert.is('Fin!', getHistory[1]) - assert.is(undefined, getHistory[2]) -}) - -test.run() - -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} diff --git a/__test__/09-case.test.js b/__test__/09-case.test.js deleted file mode 100644 index 417ce31..0000000 --- a/__test__/09-case.test.js +++ /dev/null @@ -1,41 +0,0 @@ -const { test } = require('uvu') -const assert = require('uvu/assert') -const MOCK_DB = require('../packages/database/src/mock') -const PROVIDER_MOCK = require('../packages/provider/src/mock') -const { addKeyword, createBot, createFlow, createProvider } = require('../packages/bot/index') - -let PROVIDER = undefined - -test(`[Caso - 09] Check provider WS`, async () => { - const [VALUE_A, VALUE_B] = ['hola', 'buenas'] - - const flow = addKeyword(VALUE_A).addAnswer(VALUE_B, null, async (_, { provider }) => { - PROVIDER = provider - }) - const provider = createProvider(PROVIDER_MOCK) - const database = new MOCK_DB() - - createBot({ - database, - flow: createFlow([flow]), - provider, - }) - - provider.delaySendMessage(100, 'message', { - from: '000', - body: VALUE_A, - }) - - await delay(100) - - const prevMsg = database.getPrevByNumber('000') - - assert.is(prevMsg.answer, VALUE_B) - assert.is(typeof PROVIDER.sendMessage, 'function') -}) - -test.run() - -function delay(ms) { - return new Promise((res) => setTimeout(res, ms)) -} diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js index 29cf5d1..3c2b752 100644 --- a/packages/bot/core/core.class.js +++ b/packages/bot/core/core.class.js @@ -110,13 +110,16 @@ class CoreClass { } // 📄 Finalizar flujo - const endFlow = async (message = null) => { - endFlowFlag = true - if (message) this.sendProviderAndSave(from, createCtxMessage(message)) - clearQueue() - sendFlow([]) - return - } + const endFlow = + (flag) => + async (message = null) => { + flag.endFlow = true + endFlowFlag = true + if (message) this.sendProviderAndSave(from, createCtxMessage(message)) + clearQueue() + sendFlow([]) + return + } // 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx const sendFlow = async (messageToSend, numberOrId, options = { prev: prevMsg }) => { @@ -127,68 +130,68 @@ class CoreClass { if (endFlowFlag) return const delayMs = ctxMessage?.options?.delay || 0 if (delayMs) await delay(delayMs) - QueuePrincipal.enqueue(() => - Promise.all([ - this.sendProviderAndSave(numberOrId, ctxMessage).then(() => resolveCbEveryCtx(ctxMessage)), - ]) + await QueuePrincipal.enqueue(() => + this.sendProviderAndSave(numberOrId, ctxMessage).then(() => resolveCbEveryCtx(ctxMessage)) ) } return Promise.all(queue) } - // 📄 [options: fallBack]: esta funcion se encarga de repetir el ultimo mensaje - const fallBack = async (validation = false, message = null) => { - QueuePrincipal.queue = [] + const continueFlow = async () => { + const currentPrev = await this.databaseClass.getPrevByNumber(from) + const nextFlow = (await this.flowClass.find(refToContinue?.ref, true)) ?? [] + const filterNextFlow = nextFlow.filter((msg) => msg.refSerialize !== currentPrev?.refSerialize) + const isContinueFlow = filterNextFlow.map((i) => i.keyword).includes(currentPrev?.ref) - if (validation) { - const currentPrev = await this.databaseClass.getPrevByNumber(from) - const nextFlow = await this.flowClass.find(refToContinue?.ref, true) - const filterNextFlow = nextFlow.filter((msg) => msg.refSerialize !== currentPrev?.refSerialize) - - return sendFlow(filterNextFlow, from, { prev: undefined }) + if (!isContinueFlow) { + const refToContinueChild = this.flowClass.getRefToContinueChild(currentPrev?.keyword) + const flowStandaloneChild = this.flowClass.getFlowsChild() + const nextChildMessages = + (await this.flowClass.find(refToContinueChild?.ref, true, flowStandaloneChild)) || [] + if (nextChildMessages?.length) return await sendFlow(nextChildMessages, from, { prev: undefined }) } - await this.sendProviderAndSave(from, { - ...prevMsg, - answer: typeof message === 'string' ? message : message?.body ?? prevMsg.answer, - options: { - ...prevMsg.options, - buttons: prevMsg.options?.buttons, - }, - }) - return + if (!isContinueFlow) { + await sendFlow(filterNextFlow, from, { prev: undefined }) + return + } } + // 📄 [options: fallBack]: esta funcion se encarga de repetir el ultimo mensaje + const fallBack = + (flag) => + async (message = null) => { + QueuePrincipal.queue = [] + flag.fallBack = true + await this.sendProviderAndSave(from, { + ...prevMsg, + answer: typeof message === 'string' ? message : message?.body ?? prevMsg.answer, + options: { + ...prevMsg.options, + buttons: prevMsg.options?.buttons, + }, + }) + return + } // 📄 [options: flowDynamic]: esta funcion se encarga de responder un array de respuesta esta limitado a 5 mensajes // para evitar bloque de whatsapp - const flowDynamic = async (listMsg = []) => { - if (!Array.isArray(listMsg)) listMsg = [listMsg] + const flowDynamic = + (flag) => + async (listMsg = []) => { + flag.flowDynamic = true + if (!Array.isArray(listMsg)) listMsg = [listMsg] - const parseListMsg = listMsg.map((opt, index) => createCtxMessage(opt, index)) - const currentPrev = await this.databaseClass.getPrevByNumber(from) + const parseListMsg = listMsg.map((opt, index) => createCtxMessage(opt, index)) - const skipContinueFlow = async () => { - const nextFlow = await this.flowClass.find(refToContinue?.ref, true) - const filterNextFlow = nextFlow.filter((msg) => msg.refSerialize !== currentPrev?.refSerialize) - const isContinueFlow = filterNextFlow.map((i) => i.keyword).includes(currentPrev?.ref) - return { - continue: !isContinueFlow, - contexts: filterNextFlow, + if (endFlowFlag) return + for (const msg of parseListMsg) { + await this.sendProviderAndSave(from, msg) } + await continueFlow() + return } - if (endFlowFlag) return - for (const msg of parseListMsg) { - await this.sendProviderAndSave(from, msg) - } - - const continueFlowData = await skipContinueFlow() - - if (continueFlowData.continue) return sendFlow(continueFlowData.contexts, from, { prev: undefined }) - return - } - // 📄 Se encarga de revisar si el contexto del mensaje tiene callback o fallback const resolveCbEveryCtx = async (ctxMessage) => { if (!ctxMessage?.options?.capture) return await cbEveryCtx(ctxMessage?.ref) @@ -196,15 +199,29 @@ class CoreClass { // 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo const cbEveryCtx = async (inRef) => { + let flags = { + endFlow: false, + fallBack: false, + flowDynamic: false, + wait: true, + } + const provider = this.providerClass if (!this.flowClass.allCallbacks[inRef]) return Promise.resolve() - return this.flowClass.allCallbacks[inRef](messageCtxInComming, { + + const argsCb = { provider, - fallBack, - flowDynamic, - endFlow, - }) + fallBack: fallBack(flags), + flowDynamic: flowDynamic(flags), + endFlow: endFlow(flags), + } + + await this.flowClass.allCallbacks[inRef](messageCtxInComming, argsCb) + const wait = !(!flags.endFlow && !flags.fallBack && !flags.flowDynamic) + if (!wait) await continueFlow() + + return } // 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa @@ -216,7 +233,7 @@ class CoreClass { msgToSend = this.flowClass.find(body, false, flowStandalone) || [] - sendFlow(msgToSend, from) + await sendFlow(msgToSend, from) return } @@ -226,7 +243,7 @@ class CoreClass { if (typeCapture === 'boolean' && fallBackFlag) { msgToSend = this.flowClass.find(refToContinue?.ref, true) || [] - sendFlow(msgToSend, from) + await sendFlow(msgToSend, from) return } } @@ -241,11 +258,11 @@ class CoreClass { * @param {*} ctxMessage ver más en GLOSSARY.md * @returns */ - sendProviderAndSave = (numberOrId, ctxMessage) => { + sendProviderAndSave = async (numberOrId, ctxMessage) => { const { answer } = ctxMessage - return this.providerClass - .sendMessage(numberOrId, answer, ctxMessage) - .then(() => this.databaseClass.save({ ...ctxMessage, from: numberOrId })) + await this.providerClass.sendMessage(numberOrId, answer, ctxMessage) + await this.databaseClass.save({ ...ctxMessage, from: numberOrId }) + return } /** diff --git a/packages/bot/io/flow.class.js b/packages/bot/io/flow.class.js index 13de732..4e9932d 100644 --- a/packages/bot/io/flow.class.js +++ b/packages/bot/io/flow.class.js @@ -25,16 +25,8 @@ class FlowClass { let refSymbol = null overFlow = overFlow ?? this.flowSerialize - const customRegex = (str = null) => { - if (typeof str !== 'string') return - const instanceRegex = new RegExp(str) - return instanceRegex.test(str) - } - - /** Retornar expresion regular para buscar coincidencia */ const mapSensitive = (str, mapOptions = { sensitive: false, regex: false }) => { - if (mapOptions.regex) return customRegex(str) - + if (mapOptions.regex) return new RegExp(str) const regexSensitive = mapOptions.sensitive ? 'g' : 'i' if (Array.isArray(str)) { return new RegExp(str.join('|'), regexSensitive) @@ -43,10 +35,7 @@ class FlowClass { } const findIn = (keyOrWord, symbol = false, flow = overFlow) => { - const sensitive = refSymbol?.options?.sensitive || false - const regex = refSymbol?.options?.regex || false capture = refSymbol?.options?.capture || false - if (capture) return messages if (symbol) { @@ -55,6 +44,8 @@ class FlowClass { if (refSymbol?.ref) findIn(refSymbol.ref, true) } else { refSymbol = flow.find((c) => { + const sensitive = c?.options?.sensitive || false + const regex = c?.options?.regex || false return mapSensitive(c.keyword, { sensitive, regex }).test(keyOrWord) }) if (refSymbol?.ref) findIn(refSymbol.ref, true) @@ -68,6 +59,37 @@ class FlowClass { findBySerialize = (refSerialize) => this.flowSerialize.find((r) => r.refSerialize === refSerialize) findIndexByRef = (ref) => this.flowSerialize.findIndex((r) => r.ref === ref) + + getRefToContinueChild = (keyword) => { + try { + const flowChilds = this.flowSerialize + .reduce((acc, cur) => { + const merge = [...acc, cur?.options?.nested].flat(2) + return merge + }, []) + .filter((i) => !!i && i?.refSerialize === keyword) + .shift() + + return flowChilds + } catch (e) { + return undefined + } + } + + getFlowsChild = () => { + try { + const flowChilds = this.flowSerialize + .reduce((acc, cur) => { + const merge = [...acc, cur?.options?.nested].flat(2) + return merge + }, []) + .filter((i) => !!i) + + return flowChilds + } catch (e) { + return [] + } + } } module.exports = FlowClass diff --git a/packages/bot/package.json b/packages/bot/package.json index 563cd74..053a85d 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/bot", - "version": "0.0.96-alpha.0", + "version": "0.0.100-alpha.0", "description": "", "main": "./lib/bundle.bot.cjs", "scripts": { diff --git a/packages/bot/provider/provider.class.js b/packages/bot/provider/provider.class.js index 57d7185..fde8221 100644 --- a/packages/bot/provider/provider.class.js +++ b/packages/bot/provider/provider.class.js @@ -23,6 +23,8 @@ class ProviderClass extends EventEmitter { if (NODE_ENV !== 'production') console.log('[sendMessage]', { userId, message }) return message } + + getInstance = () => this.vendor } module.exports = ProviderClass diff --git a/packages/bot/tests/bot.class.test.js b/packages/bot/tests/bot.class.test.js index 4db4ca8..d94127c 100644 --- a/packages/bot/tests/bot.class.test.js +++ b/packages/bot/tests/bot.class.test.js @@ -17,6 +17,8 @@ class MockFlow { } findBySerialize = () => ({}) findIndexByRef = () => 0 + getRefToContinueChild = () => ({}) + getFlowsChild = () => [] } class MockDBA { diff --git a/packages/database/src/mongo/index.js b/packages/database/src/mongo/index.js index 9ea3fa5..cff9f34 100644 --- a/packages/database/src/mongo/index.js +++ b/packages/database/src/mongo/index.js @@ -30,7 +30,6 @@ class MongoAdapter { save = async (ctx) => { await this.db.collection('history').insert(ctx) - console.log('Guardando DB...', ctx) this.listHistory.push(ctx) } } diff --git a/packages/docs/src/routes/docs/flows/index.mdx b/packages/docs/src/routes/docs/flows/index.mdx index 0c2cf0b..432def3 100644 --- a/packages/docs/src/routes/docs/flows/index.mdx +++ b/packages/docs/src/routes/docs/flows/index.mdx @@ -152,57 +152,65 @@ const flowString = addKeyword('hola') ## endFlow() -Esta funcion se utliza para finalizar un flujo con dos o más addAnswer. Un ejemplo de uso sería registrar 3 datos de un usuario en 3 preguntas distinas y -que el usuario pueda finalizar por él mismo el flujo. +Esta funcion se utliza para **finalizar un flujo con dos** o más addAnswer. Un ejemplo de uso sería registrar 3 datos de un usuario en 3 preguntas distinas y +que el usuario **pueda finalizar por él mismo el flujo**. Como podrás comprobar en el ejemplo siguiente, se puede vincular flowDynamic y todas sus funciones; como por ejemplo botones. ```js -const flowFormulario = addKeyword(['Hola']) +let nombre; +let apellidos; +let telefono; + +const flowFormulario = addKeyword(['Hola','⬅️ Volver al Inicio']) .addAnswer( - ['Hola!', 'Escriba su *Nombre* para generar su solicitud'], + ['Hola!','Para enviar el formulario necesito unos datos...' ,'Escriba su *Nombre*'], { capture: true, buttons: [{ body: '❌ Cancelar solicitud' }] }, + async (ctx, { flowDynamic, endFlow }) => { - if (ctx.body == '❌ Cancelar solicitud') { - await flowDynamic([ - { - body: '❌ *Su solicitud de cita ha sido cancelada* ❌', - buttons: [{ body: '⬅️ Volver al Inicio' }], - }, - ]) - return endFlow() - } + if (ctx.body == '❌ Cancelar solicitud') + return endFlow({body: '❌ Su solicitud ha sido cancelada ❌', // Aquí terminamos el flow si la condicion se comple + buttons:[{body:'⬅️ Volver al Inicio' }] // Y además, añadimos un botón por si necesitas derivarlo a otro flow + + + }) + nombre = ctx.body + return flowDynamic(`Encantado *${nombre}*, continuamos...`) } ) .addAnswer( ['También necesito tus dos apellidos'], { capture: true, buttons: [{ body: '❌ Cancelar solicitud' }] }, + async (ctx, { flowDynamic, endFlow }) => { - if (ctx.body == '❌ Cancelar solicitud') { - await flowDynamic([ - { - body: '❌ *Su solicitud de cita ha sido cancelada* ❌', - buttons: [{ body: '⬅️ Volver al Inicio' }], - }, - ]) - return endFlow() - } + if (ctx.body == '❌ Cancelar solicitud') + return endFlow({body: '❌ Su solicitud ha sido cancelada ❌', + buttons:[{body:'⬅️ Volver al Inicio' }] + + + }) + apellidos = ctx.body + return flowDynamic(`Perfecto *${nombre}*, por último...`) } ) .addAnswer( ['Dejeme su número de teléfono y le llamaré lo antes posible.'], { capture: true, buttons: [{ body: '❌ Cancelar solicitud' }] }, + async (ctx, { flowDynamic, endFlow }) => { - if (ctx.body == '❌ Cancelar solicitud') { - await flowDynamic([ - { - body: '❌ *Su solicitud de cita ha sido cancelada* ❌', - buttons: [{ body: '⬅️ Volver al Inicio' }], - }, - ]) - return endFlow() - } + if (ctx.body == '❌ Cancelar solicitud') + return endFlow({body: '❌ Su solicitud ha sido cancelada ❌', + buttons:[{body:'⬅️ Volver al Inicio' }] + }) + + + telefono = ctx.body + await delay(2000) + return flowDynamic(`Estupendo *${nombre}*! te dejo el resumen de tu formulario + \n- Nombre y apellidos: *${nombre} ${apellidos}* + \n- Telefono: *${telefono}*`) } ) + ``` --- diff --git a/packages/provider/src/baileys/index.js b/packages/provider/src/baileys/index.js index d98bd27..3916d8a 100644 --- a/packages/provider/src/baileys/index.js +++ b/packages/provider/src/baileys/index.js @@ -157,6 +157,11 @@ class BaileysProvider extends ProviderClass { } } + /** + * Funcion SendRaw envia opciones directamente del proveedor + * @example await sendMessage('+XXXXXXXXXXX', 'Hello World') + */ + /** * @alpha * @param {string} number @@ -213,10 +218,10 @@ class BaileysProvider extends ProviderClass { * @example await sendMessage('+XXXXXXXXXXX', 'audio.mp3') */ - sendAudio = async (number, audioUrl, voiceNote = false) => { + sendAudio = async (number, audioUrl) => { return this.vendor.sendMessage(number, { audio: { url: audioUrl }, - ptt: voiceNote, + ptt: true, }) } @@ -282,6 +287,7 @@ class BaileysProvider extends ProviderClass { * @param {string} message * @example await sendMessage('+XXXXXXXXXXX', 'Hello World') */ + sendMessage = async (numberIn, message, { options }) => { const number = baileyCleanNumber(numberIn) diff --git a/packages/provider/src/mock/index.js b/packages/provider/src/mock/index.js index 63034c0..9f47757 100644 --- a/packages/provider/src/mock/index.js +++ b/packages/provider/src/mock/index.js @@ -1,20 +1,20 @@ -const { ProviderClass } = require('@bot-whatsapp/bot') +const { ProviderClass } = require('../../../bot') + +function delay(ms) { + return new Promise((res) => setTimeout(res, ms)) +} class MockProvider extends ProviderClass { constructor() { super() } - delaySendMessage = (miliseconds, eventName, payload) => - new Promise((res) => - setTimeout(() => { - this.emit(eventName, payload) - res - }, miliseconds) - ) + delaySendMessage = async (miliseconds, eventName, payload) => { + await delay(miliseconds) + this.emit(eventName, payload) + } sendMessage = async (userId, message) => { - console.log(`Enviando... ${userId}, ${message}`) return Promise.resolve({ userId, message }) } } diff --git a/packages/provider/src/web-whatsapp/index.js b/packages/provider/src/web-whatsapp/index.js index 6e822e5..22968d3 100644 --- a/packages/provider/src/web-whatsapp/index.js +++ b/packages/provider/src/web-whatsapp/index.js @@ -230,6 +230,14 @@ class WebWhatsappProvider extends ProviderClass { return this.sendFile(number, fileDownloaded) } + /** + * Funcion SendRaw envia opciones directamente del proveedor + * @param {string} number + * @param {string} message + * @example await sendMessage('+XXXXXXXXXXX', 'Hello World') + */ + + sendRaw = () => this.vendor.sendMessage /** * * @param {*} userId diff --git a/packages/provider/tests/provider.class.test.js b/packages/provider/tests/provider.class.test.js index 3a892fd..dc3320a 100644 --- a/packages/provider/tests/provider.class.test.js +++ b/packages/provider/tests/provider.class.test.js @@ -1,6 +1,6 @@ const { test } = require('uvu') const assert = require('uvu/assert') -const MockProvider = require('../../../__mocks__/mock.provider') +const MockProvider = require('../../provider/src/mock') test(`ProviderClass`, async () => { const provider = new MockProvider() diff --git a/yarn.lock b/yarn.lock index fb2e259..4fab282 100644 --- a/yarn.lock +++ b/yarn.lock @@ -68,359 +68,359 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/abort-controller@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/abort-controller@npm:3.266.0" +"@aws-sdk/abort-controller@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/abort-controller@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: d14202fdeb372c9b7308d601a6d5b7efc5ad5524e9b14545c556c9c0aae1a0917fb3c3ae86e7f2a968c6d1ff796be24a9338492b73ea64708277436ce4165982 + checksum: f9d4f96b2095e1a35fd3e4474b75afba1f4f1349270b5b29611c53962ed1dddd24b1eabd06af7393fe615828a2af0986f58c25b50a8a09c0a5c11a21b7733481 languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.266.0" +"@aws-sdk/client-cognito-identity@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/client-cognito-identity@npm:3.266.1" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.266.0 - "@aws-sdk/config-resolver": 3.266.0 - "@aws-sdk/credential-provider-node": 3.266.0 - "@aws-sdk/fetch-http-handler": 3.266.0 - "@aws-sdk/hash-node": 3.266.0 - "@aws-sdk/invalid-dependency": 3.266.0 - "@aws-sdk/middleware-content-length": 3.266.0 - "@aws-sdk/middleware-endpoint": 3.266.0 - "@aws-sdk/middleware-host-header": 3.266.0 - "@aws-sdk/middleware-logger": 3.266.0 - "@aws-sdk/middleware-recursion-detection": 3.266.0 - "@aws-sdk/middleware-retry": 3.266.0 - "@aws-sdk/middleware-serde": 3.266.0 - "@aws-sdk/middleware-signing": 3.266.0 - "@aws-sdk/middleware-stack": 3.266.0 - "@aws-sdk/middleware-user-agent": 3.266.0 - "@aws-sdk/node-config-provider": 3.266.0 - "@aws-sdk/node-http-handler": 3.266.0 - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/smithy-client": 3.266.0 - "@aws-sdk/types": 3.266.0 - "@aws-sdk/url-parser": 3.266.0 + "@aws-sdk/client-sts": 3.266.1 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/credential-provider-node": 3.266.1 + "@aws-sdk/fetch-http-handler": 3.266.1 + "@aws-sdk/hash-node": 3.266.1 + "@aws-sdk/invalid-dependency": 3.266.1 + "@aws-sdk/middleware-content-length": 3.266.1 + "@aws-sdk/middleware-endpoint": 3.266.1 + "@aws-sdk/middleware-host-header": 3.266.1 + "@aws-sdk/middleware-logger": 3.266.1 + "@aws-sdk/middleware-recursion-detection": 3.266.1 + "@aws-sdk/middleware-retry": 3.266.1 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/middleware-signing": 3.266.1 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/middleware-user-agent": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/node-http-handler": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/smithy-client": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.266.0 - "@aws-sdk/util-defaults-mode-node": 3.266.0 - "@aws-sdk/util-endpoints": 3.266.0 - "@aws-sdk/util-retry": 3.266.0 - "@aws-sdk/util-user-agent-browser": 3.266.0 - "@aws-sdk/util-user-agent-node": 3.266.0 + "@aws-sdk/util-defaults-mode-browser": 3.266.1 + "@aws-sdk/util-defaults-mode-node": 3.266.1 + "@aws-sdk/util-endpoints": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 + "@aws-sdk/util-user-agent-browser": 3.266.1 + "@aws-sdk/util-user-agent-node": 3.266.1 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: 69caa7eebc2107aa16fcb1aaa1de7767b31901f07f2cf7b875b9a8b80612d29ccd04d05b58af194d1e405ac917b0f7280e43f10c3fb497119b2315043958706d + checksum: cb2514999120bcd7ec3bc41190ef9ddf9e7446e642045c41fd4a1119171ee4cb6fcbd013b958ceecf219adc2530bd77d5637c94ec63bce3a75dfe56272de9066 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.266.0" +"@aws-sdk/client-sso-oidc@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/client-sso-oidc@npm:3.266.1" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.266.0 - "@aws-sdk/fetch-http-handler": 3.266.0 - "@aws-sdk/hash-node": 3.266.0 - "@aws-sdk/invalid-dependency": 3.266.0 - "@aws-sdk/middleware-content-length": 3.266.0 - "@aws-sdk/middleware-endpoint": 3.266.0 - "@aws-sdk/middleware-host-header": 3.266.0 - "@aws-sdk/middleware-logger": 3.266.0 - "@aws-sdk/middleware-recursion-detection": 3.266.0 - "@aws-sdk/middleware-retry": 3.266.0 - "@aws-sdk/middleware-serde": 3.266.0 - "@aws-sdk/middleware-stack": 3.266.0 - "@aws-sdk/middleware-user-agent": 3.266.0 - "@aws-sdk/node-config-provider": 3.266.0 - "@aws-sdk/node-http-handler": 3.266.0 - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/smithy-client": 3.266.0 - "@aws-sdk/types": 3.266.0 - "@aws-sdk/url-parser": 3.266.0 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/fetch-http-handler": 3.266.1 + "@aws-sdk/hash-node": 3.266.1 + "@aws-sdk/invalid-dependency": 3.266.1 + "@aws-sdk/middleware-content-length": 3.266.1 + "@aws-sdk/middleware-endpoint": 3.266.1 + "@aws-sdk/middleware-host-header": 3.266.1 + "@aws-sdk/middleware-logger": 3.266.1 + "@aws-sdk/middleware-recursion-detection": 3.266.1 + "@aws-sdk/middleware-retry": 3.266.1 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/middleware-user-agent": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/node-http-handler": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/smithy-client": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.266.0 - "@aws-sdk/util-defaults-mode-node": 3.266.0 - "@aws-sdk/util-endpoints": 3.266.0 - "@aws-sdk/util-retry": 3.266.0 - "@aws-sdk/util-user-agent-browser": 3.266.0 - "@aws-sdk/util-user-agent-node": 3.266.0 + "@aws-sdk/util-defaults-mode-browser": 3.266.1 + "@aws-sdk/util-defaults-mode-node": 3.266.1 + "@aws-sdk/util-endpoints": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 + "@aws-sdk/util-user-agent-browser": 3.266.1 + "@aws-sdk/util-user-agent-node": 3.266.1 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: c2eaf96bed90b9f4dc04dbb02ecdbe1133dc0a4362db39f06fa4b3cb2281dfbeb1e70064e0ce8a3736425d35f4db9dec92d87ca0e39421c6c8bca3b166bc8e40 + checksum: ef3a2ac06aac3662120ced57ff3c0d543c9a85c332529366debdab3fcbd6b95144c6ecd2403f3d003c4af23ec68bb469cb86ab281851d8bee96d872bf4e148b6 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/client-sso@npm:3.266.0" +"@aws-sdk/client-sso@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/client-sso@npm:3.266.1" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.266.0 - "@aws-sdk/fetch-http-handler": 3.266.0 - "@aws-sdk/hash-node": 3.266.0 - "@aws-sdk/invalid-dependency": 3.266.0 - "@aws-sdk/middleware-content-length": 3.266.0 - "@aws-sdk/middleware-endpoint": 3.266.0 - "@aws-sdk/middleware-host-header": 3.266.0 - "@aws-sdk/middleware-logger": 3.266.0 - "@aws-sdk/middleware-recursion-detection": 3.266.0 - "@aws-sdk/middleware-retry": 3.266.0 - "@aws-sdk/middleware-serde": 3.266.0 - "@aws-sdk/middleware-stack": 3.266.0 - "@aws-sdk/middleware-user-agent": 3.266.0 - "@aws-sdk/node-config-provider": 3.266.0 - "@aws-sdk/node-http-handler": 3.266.0 - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/smithy-client": 3.266.0 - "@aws-sdk/types": 3.266.0 - "@aws-sdk/url-parser": 3.266.0 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/fetch-http-handler": 3.266.1 + "@aws-sdk/hash-node": 3.266.1 + "@aws-sdk/invalid-dependency": 3.266.1 + "@aws-sdk/middleware-content-length": 3.266.1 + "@aws-sdk/middleware-endpoint": 3.266.1 + "@aws-sdk/middleware-host-header": 3.266.1 + "@aws-sdk/middleware-logger": 3.266.1 + "@aws-sdk/middleware-recursion-detection": 3.266.1 + "@aws-sdk/middleware-retry": 3.266.1 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/middleware-user-agent": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/node-http-handler": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/smithy-client": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.266.0 - "@aws-sdk/util-defaults-mode-node": 3.266.0 - "@aws-sdk/util-endpoints": 3.266.0 - "@aws-sdk/util-retry": 3.266.0 - "@aws-sdk/util-user-agent-browser": 3.266.0 - "@aws-sdk/util-user-agent-node": 3.266.0 + "@aws-sdk/util-defaults-mode-browser": 3.266.1 + "@aws-sdk/util-defaults-mode-node": 3.266.1 + "@aws-sdk/util-endpoints": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 + "@aws-sdk/util-user-agent-browser": 3.266.1 + "@aws-sdk/util-user-agent-node": 3.266.1 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: 94cdfbcaaa55782fc430c2488e8d31da0cd0dcf38ac2dbedf44910cba8b8f0beb3651764d62c4eea248c07acf70d5aa6118493743b87cd9a426c147756704ad7 + checksum: 72b25db3f5830815cdf3e2cd4274255cc6a46f0c12ff8cdf0a4d5289bcf129c1c7d8ebaaf64cdcb64eae81a83ff4b921b38eabc39df57114941d143d3c8fc88e languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/client-sts@npm:3.266.0" +"@aws-sdk/client-sts@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/client-sts@npm:3.266.1" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.266.0 - "@aws-sdk/credential-provider-node": 3.266.0 - "@aws-sdk/fetch-http-handler": 3.266.0 - "@aws-sdk/hash-node": 3.266.0 - "@aws-sdk/invalid-dependency": 3.266.0 - "@aws-sdk/middleware-content-length": 3.266.0 - "@aws-sdk/middleware-endpoint": 3.266.0 - "@aws-sdk/middleware-host-header": 3.266.0 - "@aws-sdk/middleware-logger": 3.266.0 - "@aws-sdk/middleware-recursion-detection": 3.266.0 - "@aws-sdk/middleware-retry": 3.266.0 - "@aws-sdk/middleware-sdk-sts": 3.266.0 - "@aws-sdk/middleware-serde": 3.266.0 - "@aws-sdk/middleware-signing": 3.266.0 - "@aws-sdk/middleware-stack": 3.266.0 - "@aws-sdk/middleware-user-agent": 3.266.0 - "@aws-sdk/node-config-provider": 3.266.0 - "@aws-sdk/node-http-handler": 3.266.0 - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/smithy-client": 3.266.0 - "@aws-sdk/types": 3.266.0 - "@aws-sdk/url-parser": 3.266.0 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/credential-provider-node": 3.266.1 + "@aws-sdk/fetch-http-handler": 3.266.1 + "@aws-sdk/hash-node": 3.266.1 + "@aws-sdk/invalid-dependency": 3.266.1 + "@aws-sdk/middleware-content-length": 3.266.1 + "@aws-sdk/middleware-endpoint": 3.266.1 + "@aws-sdk/middleware-host-header": 3.266.1 + "@aws-sdk/middleware-logger": 3.266.1 + "@aws-sdk/middleware-recursion-detection": 3.266.1 + "@aws-sdk/middleware-retry": 3.266.1 + "@aws-sdk/middleware-sdk-sts": 3.266.1 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/middleware-signing": 3.266.1 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/middleware-user-agent": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/node-http-handler": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/smithy-client": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.266.0 - "@aws-sdk/util-defaults-mode-node": 3.266.0 - "@aws-sdk/util-endpoints": 3.266.0 - "@aws-sdk/util-retry": 3.266.0 - "@aws-sdk/util-user-agent-browser": 3.266.0 - "@aws-sdk/util-user-agent-node": 3.266.0 + "@aws-sdk/util-defaults-mode-browser": 3.266.1 + "@aws-sdk/util-defaults-mode-node": 3.266.1 + "@aws-sdk/util-endpoints": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 + "@aws-sdk/util-user-agent-browser": 3.266.1 + "@aws-sdk/util-user-agent-node": 3.266.1 "@aws-sdk/util-utf8": 3.254.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 029e037f8b90b05a6559e0e2a6315c049fce81eaad32a2b277550761e6021a5bcc121f86ce4f06f1ff1fea9570dfc6adbc5331f52e4e5a6759a814d89a1b3156 + checksum: d699e3393035c59a38d7081ad217ff54188fe01470f939fbd73dad6eebd53d4a5d63512700e4079bdbb5d7e947498f1897c67ee7935618371e06cefed4490894 languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/config-resolver@npm:3.266.0" +"@aws-sdk/config-resolver@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/config-resolver@npm:3.266.1" dependencies: - "@aws-sdk/signature-v4": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/signature-v4": 3.266.1 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.266.0 + "@aws-sdk/util-middleware": 3.266.1 tslib: ^2.3.1 - checksum: 7b726573ca7a24e8bab29fb02308f22b4c2492756417ef8ab5bf818576b25d0e19c2d8dc243542ddbac606d37d7d9aeaa17725fb95b4c78e68df4f4aab899dc3 + checksum: 32632b7bfdc3d6fcf2f51bf6f1c064694df47735c3998011803b359901d59dd95953366fed45ee7c3f345dfdd53fd2a1d25a3fabecaca5df52fdb5524ac381ef languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.266.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.266.1" dependencies: - "@aws-sdk/client-cognito-identity": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/client-cognito-identity": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 38f16e2cf2b3802c6863ee128870182d0d08268d8d0371b437c93dd231086e76ada47d1b4190946460d60b76cc7f288fec393c7b1bf91830e0cd91cbd4f893c4 + checksum: d9d213a62b8177a2608031cd40cce2f1d6ac1b2ed78d12a59d4ef72aa995485e9fe1a3e64274aad47f859ad7fe310a2d9e08acccd6c1e1deae6fe55f31b5c43f languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.266.0" +"@aws-sdk/credential-provider-env@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-env@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 2bc63db989b4c95098998b7a609ab2bd335aaa72b8b2a527c8a842c3ae2f2f3cbd50e043692adc96fbb3057688d9dc509ea0785afd7707d0863f4797d8e4b148 + checksum: 65e95dcdaf99c6fe78a5be7d8e9d9325911436be4f2e00864e69a5656d767178206acb54902712d49b2cffe1183f5f110c53e246e7dc5e61e489214523dad43c languageName: node linkType: hard -"@aws-sdk/credential-provider-imds@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-provider-imds@npm:3.266.0" +"@aws-sdk/credential-provider-imds@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-imds@npm:3.266.1" dependencies: - "@aws-sdk/node-config-provider": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/types": 3.266.0 - "@aws-sdk/url-parser": 3.266.0 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 tslib: ^2.3.1 - checksum: eb155398aecdf3a48ff6e84867d488b492822113c05e43f86e3cea2cb1dd01f5fa605325ff2810712b5b6a98ee5c21589ee7412a154deceea89a31e6601c2e36 + checksum: 23e0e235ee5475a203f10016afb2d3382a8eb6e9132a68bbbb2f349a2d2457765837c68537080d75984509d59376569889036a800bb93234b4ad449368f0fe70 languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.266.0" +"@aws-sdk/credential-provider-ini@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-ini@npm:3.266.1" dependencies: - "@aws-sdk/credential-provider-env": 3.266.0 - "@aws-sdk/credential-provider-imds": 3.266.0 - "@aws-sdk/credential-provider-process": 3.266.0 - "@aws-sdk/credential-provider-sso": 3.266.0 - "@aws-sdk/credential-provider-web-identity": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/shared-ini-file-loader": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/credential-provider-env": 3.266.1 + "@aws-sdk/credential-provider-imds": 3.266.1 + "@aws-sdk/credential-provider-process": 3.266.1 + "@aws-sdk/credential-provider-sso": 3.266.1 + "@aws-sdk/credential-provider-web-identity": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 0ee2652b47b2ae8621d38dd1d6afff3b8771591682777b85f7e1d7ac7b3c8f600e23ee4d27bec83b7ec2159abe9203604993acbabb27c29d8b539264de8ecde9 + checksum: 0efbd9a4cd9cfb247122ac3c423fed50633a998b2e4b9ccca402b20e9a531d6205899e32f6926bbe61af7e2041646e79edc4ab2212c3e202e275c31483d70183 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.266.0" +"@aws-sdk/credential-provider-node@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-node@npm:3.266.1" dependencies: - "@aws-sdk/credential-provider-env": 3.266.0 - "@aws-sdk/credential-provider-imds": 3.266.0 - "@aws-sdk/credential-provider-ini": 3.266.0 - "@aws-sdk/credential-provider-process": 3.266.0 - "@aws-sdk/credential-provider-sso": 3.266.0 - "@aws-sdk/credential-provider-web-identity": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/shared-ini-file-loader": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/credential-provider-env": 3.266.1 + "@aws-sdk/credential-provider-imds": 3.266.1 + "@aws-sdk/credential-provider-ini": 3.266.1 + "@aws-sdk/credential-provider-process": 3.266.1 + "@aws-sdk/credential-provider-sso": 3.266.1 + "@aws-sdk/credential-provider-web-identity": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 73e4b639bec60cc08dba0bc00f5cae9b86229a3e8c919d85043478518ab820a12852235c8e18e6852f68c8bd3c47a20ef76d90332500d76852e7cac5fcfb4daa + checksum: b47065f93372a5565da6d76ea162e3698e8ef00bc356741c20b1d0dcf71a3e125d2b50dcde9d91d6ff29182acc109ef48c68e1834bbb2e67f528dffe7a30f2cf languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.266.0" +"@aws-sdk/credential-provider-process@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-process@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/shared-ini-file-loader": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 742c75d7b019364ec17d787094e4b3a4acde4ce3d0136c75c7e002a19f9c73ea80f844dc4b1ee2305048d2d08795715dd02e7c6afb42b9679ce2802bd1e708cf + checksum: 33f8a76a0d0fed97620dbd4afa70fffb99cc606118fa5eff1da68d16b6dc6559a15e3d4f09c96bdf2ec3db9f66b5cc0d0fb480bbd782d8c34a1b68155b1610dc languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.266.0" +"@aws-sdk/credential-provider-sso@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-sso@npm:3.266.1" dependencies: - "@aws-sdk/client-sso": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/shared-ini-file-loader": 3.266.0 - "@aws-sdk/token-providers": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/client-sso": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/token-providers": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: a125237b513e84d8d0419d9552801a1aa561b6e3ad7748561e937bf8bf10c5d4ce5b37bab5e453198a503dafdc5fcef49bfa600cb10ff37f227ed8856e41a812 + checksum: e7371c6c00be75c20042ac32cc02cdeb9b054af77702490f2d75c26d6c914952be8555f3cf16956f8b0dd18603764bbf1b70ffc73e1e451e5395396e27ddaee0 languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.266.0" +"@aws-sdk/credential-provider-web-identity@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: ff1ef92aa5d2d641132079787479e445aaf16b99231067b5a39c8bd7fb2a95c7ab5004b7199749508750e0ac8626d8ffc99454c44130800f266787a9d053e730 + checksum: 16244c7a6112992b86ab1761ea150cc2652db98c8c31d0cca1f56ecaab0c9e2f38255338a0a472ba54c7ded1109a6abf86696ac624095ab3d0d264c46a99c00f languageName: node linkType: hard "@aws-sdk/credential-providers@npm:^3.186.0": - version: 3.266.0 - resolution: "@aws-sdk/credential-providers@npm:3.266.0" + version: 3.266.1 + resolution: "@aws-sdk/credential-providers@npm:3.266.1" dependencies: - "@aws-sdk/client-cognito-identity": 3.266.0 - "@aws-sdk/client-sso": 3.266.0 - "@aws-sdk/client-sts": 3.266.0 - "@aws-sdk/credential-provider-cognito-identity": 3.266.0 - "@aws-sdk/credential-provider-env": 3.266.0 - "@aws-sdk/credential-provider-imds": 3.266.0 - "@aws-sdk/credential-provider-ini": 3.266.0 - "@aws-sdk/credential-provider-node": 3.266.0 - "@aws-sdk/credential-provider-process": 3.266.0 - "@aws-sdk/credential-provider-sso": 3.266.0 - "@aws-sdk/credential-provider-web-identity": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/shared-ini-file-loader": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/client-cognito-identity": 3.266.1 + "@aws-sdk/client-sso": 3.266.1 + "@aws-sdk/client-sts": 3.266.1 + "@aws-sdk/credential-provider-cognito-identity": 3.266.1 + "@aws-sdk/credential-provider-env": 3.266.1 + "@aws-sdk/credential-provider-imds": 3.266.1 + "@aws-sdk/credential-provider-ini": 3.266.1 + "@aws-sdk/credential-provider-node": 3.266.1 + "@aws-sdk/credential-provider-process": 3.266.1 + "@aws-sdk/credential-provider-sso": 3.266.1 + "@aws-sdk/credential-provider-web-identity": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: bc5142a992ed14371fc630fb89bd53033fe4648e4eaedf14100b6da5536988943cf5120185533019a23178681d0f6e9dd7ae4288e77442d3031de232c45fca49 + checksum: c40dbec2449692c99020c796b025a51cc97cf08118853d4c270ece4aaf38c4ff8c89f5035cb226103d5e32c60b993da2e0c461733a42370566d3986d14456b8b languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.266.0" +"@aws-sdk/fetch-http-handler@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/fetch-http-handler@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/querystring-builder": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/querystring-builder": 3.266.1 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-base64": 3.208.0 tslib: ^2.3.1 - checksum: cf4ce1ed565890101e4bef15a380c185887e04d16ba34c60dde53fcd98d70f7c8102045a4ab0ca11cb6dfb841425dd9765737e2c11181fa3664e21cab44933bc + checksum: 51e648770e87006390aa1f77ff253881c4128bc93304da0737666535d82e7fdf2c4335cfb9b9248bd3cc7b98bdf77624d448e1a71b81b435ab8e26eb93affb2f languageName: node linkType: hard -"@aws-sdk/hash-node@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/hash-node@npm:3.266.0" +"@aws-sdk/hash-node@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/hash-node@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-buffer-from": 3.208.0 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: ef9387bef50767e4e9ff2641d332c68d2f70ab439eb5225363b0753b6c11fed7ce04de52bbc4e40a9d34319904212fd0444722ada1ad5f304b9c1f5c41b0c049 + checksum: 86029d4041ed2e123a9667ff0e5ebdf93ab0f0a8ccf7b0e6ccfab6da83af439c4fb4289d9c3590e6b4c074fcd88af32fb3c5569e374992cb82b0421da180970a languageName: node linkType: hard -"@aws-sdk/invalid-dependency@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/invalid-dependency@npm:3.266.0" +"@aws-sdk/invalid-dependency@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/invalid-dependency@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: b898eaf0bd8c87a9a32032dedd714d5892dc252aefd0ae65598842745db6c176a55f66e819c7686b101da9a78901b4e3275ebecaf464d849a03db50361e59399 + checksum: 23b7abf4113e5220a5707fee9339428aec4142832aa658ea41f57014b906b6dfd004a0f6243941716fa8fdf960c9e67139a1632a34aab3ddce061b5d2ac79aeb languageName: node linkType: hard @@ -433,277 +433,277 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.266.0" +"@aws-sdk/middleware-content-length@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-content-length@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: b8881f3fd2964304380aae1e737e2f80ec0f0bf7ab20ebe081817cd5bbedde60d0aefd95c7112f0d36b3eeb46d6b8b15e091bc0aab66dd77a19a9dd0cfb29c8c + checksum: 967a71c66192645e4c0079d346104340350719e67bbf9500d439285a5a25cfe971f3bf2e1f1b0917c0295dcedbbf59548cb262badc812cd670794addd9d97e0f languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.266.0" +"@aws-sdk/middleware-endpoint@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-endpoint@npm:3.266.1" dependencies: - "@aws-sdk/middleware-serde": 3.266.0 - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/signature-v4": 3.266.0 - "@aws-sdk/types": 3.266.0 - "@aws-sdk/url-parser": 3.266.0 + "@aws-sdk/middleware-serde": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/signature-v4": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/url-parser": 3.266.1 "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.266.0 + "@aws-sdk/util-middleware": 3.266.1 tslib: ^2.3.1 - checksum: c3a0e68c2f985fc6a91621e3c1eb9c2d7682ad3fb0e00ed28ea9b45d6698d3e5a5fd2ebbff47a1cb32c720a8708bb2f64f28ae20a2ca73c1b79f8e0f3d38b6a7 + checksum: a257923e92cd3c7a666b3eb4979a084b46174b5b8ce5d472ea85616c5cdc8a5eaf2c09f37fa08b3cbd8721480f81c1ee2421358066f44904a1acb527a39ab802 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.266.0" +"@aws-sdk/middleware-host-header@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-host-header@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: eec69d03e4495fd706650176d93615548cff4b34a52eb47efb1cbdd5905efb4fccced4301640cc3352268fe2129713a49449a075a50d76e9d2b128482f37c304 + checksum: 6129af9e5727c261110332cf585a5210109ed979b2214e2c8a446d0840eb7733184ae372d36bbcb02b53f29f27da7da819e13041e3255ee6302a562d65f63290 languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-logger@npm:3.266.0" +"@aws-sdk/middleware-logger@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-logger@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: b5e9ead43cef932157675b7cfbfdf78699ad4f59ce6cd3e5879f1cdf3cbd6b87530261b262c45a54d7aedf602ea821adc0a70b377de2b4c13caf439741f387d0 + checksum: 73e080974f40de5e0208b8075138abcbc2e15af9ac18c78c31a635b5e000445ca2e4f8d11807dc5333f44fb9620b35027f3d1c1994df8f55dbacf4b3a156ae33 languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.266.0" +"@aws-sdk/middleware-recursion-detection@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: f7d1ac8bb97aa284e84606e262957cff994e4a38771353368dc35284378bcf516e9e313d679a5f648508c465e9f6766e691361d553000f3b46aae05edc330722 + checksum: 87a9c6678e12930ec722aaf8bc5698274d4c397a37846ea1e66e2beeecf5833e27366981c43e5c67a6b7704c62ce53dc135813ac8eb0bba47ee43de31834c666 languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-retry@npm:3.266.0" +"@aws-sdk/middleware-retry@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-retry@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/service-error-classification": 3.266.0 - "@aws-sdk/types": 3.266.0 - "@aws-sdk/util-middleware": 3.266.0 - "@aws-sdk/util-retry": 3.266.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/service-error-classification": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/util-middleware": 3.266.1 + "@aws-sdk/util-retry": 3.266.1 tslib: ^2.3.1 uuid: ^8.3.2 - checksum: 47b2d6d070a5e61fc64985194f594ee402c0158ea92e24313c852aed137fc40e212eb2f082a8cee75f614f0621a4fbb41bcbd1ccb9e786962e33dd23fede5dc7 + checksum: a98e28dbd6f1f41224cc06f303f5d75015b42155faced7e93eeed8e2fe8e88783c4d244502a3f2b3c18917cc75c75c0547935d99cbeaa943131ca06156f66c7c languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.266.0" +"@aws-sdk/middleware-sdk-sts@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.266.1" dependencies: - "@aws-sdk/middleware-signing": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/signature-v4": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/middleware-signing": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/signature-v4": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: bca44114e0a67f47a3cd0d21c316b9846cfbe9d7c6728733a73963829d008d53d1a71cc57665b8adc7ae01e0dc710c601d0cc45b6197a46643036be83ecc3abc + checksum: 4240ab1728aee65de365416a43194b3171f1010b1000e1ef0c3581c8994ad53e756a60a8f80fdad40322f8cf2ca47074d7de7b0728edfa7e922d617fcddb3d34 languageName: node linkType: hard -"@aws-sdk/middleware-serde@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-serde@npm:3.266.0" +"@aws-sdk/middleware-serde@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-serde@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 2cf05d20361e38983ad4e2d2de775b8e56532e7ca7a2632b1a450a4d635a8ec5a92245c9c8abc09d34cc6556501338cd5d4155370c9ba02ea55cc5d105153117 + checksum: 7512e4fc336f132d0ee816def4eb69caefc89b13dd553a075d2463bc552577b04aef543ae0629fd20b1114a0b78f46c073fda94e7ed617b5115575ecee8fab89 languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-signing@npm:3.266.0" +"@aws-sdk/middleware-signing@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-signing@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/signature-v4": 3.266.0 - "@aws-sdk/types": 3.266.0 - "@aws-sdk/util-middleware": 3.266.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/signature-v4": 3.266.1 + "@aws-sdk/types": 3.266.1 + "@aws-sdk/util-middleware": 3.266.1 tslib: ^2.3.1 - checksum: 92395792c9304c472bea24194aa989a1db641308ee13c819f6ca343b75338d5498821c2e16037258bba8374fe3dfdc5273a584d07c7071e31d52a4d16d2c1e52 + checksum: f5e7fbd258566016e2a70f8b683d4feddbdd8401fa6a0842911879f1b5ec5543473a05b6b1ae1c4d8116cb2f596ceb169bf80b01798bf1363cc8800a2554e363 languageName: node linkType: hard -"@aws-sdk/middleware-stack@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-stack@npm:3.266.0" +"@aws-sdk/middleware-stack@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-stack@npm:3.266.1" dependencies: tslib: ^2.3.1 - checksum: f386f220abea8a80756c19562912b555a6223f8e96fc97aebce851e920c05055cae77778272a88638fdd93ceab2680f9ab47c556e9480a3a538a33c8abcc4e66 + checksum: 112eee2473ce83d4f994adc6d7ae64b0f41d5d331dbcce3db2af7576d7a6be25dd0b8c1fad1758b6db904276e4c18d30a7bdb886c9edb76853e2cd44c215060d languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.266.0" +"@aws-sdk/middleware-user-agent@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/middleware-user-agent@npm:3.266.1" dependencies: - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: aae2e178ee5bd881b9f6dbe0830fec94b43ce0f1c94251f8f4b99a64a85e7feeaace9b0f26e4c7616f4ecfd6dee0452d9168ee4af5c3a61fa87b60110fc521df + checksum: 78b45ba6aacc2329eb604e186490e15d16f7566320e216c36983a68393d4ffdfe08ed5a6bbc5f920546c86fd0a1b4eebd859520e0beb9a4e097c0bbbb01d32ee languageName: node linkType: hard -"@aws-sdk/node-config-provider@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/node-config-provider@npm:3.266.0" +"@aws-sdk/node-config-provider@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/node-config-provider@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/shared-ini-file-loader": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 370e76590ec70471c90cb0b2f2cf44f189a2c5515de0ff1952b8c54f8a17f2fc9899f38ff7016bf02310bad4b5aa695920426792d83e900df8fc637ff617bae2 + checksum: 43b0d7090f468d944668efe97b17fa7eb939ee6eb653ab50d9953d5d13bffd552430c29c0c1a29bf11ecd788c4ce5e4ba19f699176994a5e51f7b90e6b2e98cc languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/node-http-handler@npm:3.266.0" +"@aws-sdk/node-http-handler@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/node-http-handler@npm:3.266.1" dependencies: - "@aws-sdk/abort-controller": 3.266.0 - "@aws-sdk/protocol-http": 3.266.0 - "@aws-sdk/querystring-builder": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/abort-controller": 3.266.1 + "@aws-sdk/protocol-http": 3.266.1 + "@aws-sdk/querystring-builder": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 40efb57b6e9ecd7d098a8ea48d5b1bc8dab8f0696c18b6477743ed3e48ac0ec5ae4266d2928955b20ed0ffe08f7d5b1f952de3373cf31e8585a6c440a6715810 + checksum: ba25899f96bfd9f19b655dd0c750720570a9ff73686694b15452a5d096cf0cb4f2aed78797744ba7928660170ebda3a9e891a47d18377bb6a51d0aee3f9c1c77 languageName: node linkType: hard -"@aws-sdk/property-provider@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/property-provider@npm:3.266.0" +"@aws-sdk/property-provider@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/property-provider@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 6e709d928867aecb067c959ba62ce87074e54d330806280705f8e8ff226508974d999845934e67c45b62535b212acf038fb05b9ddac2d0beb70a2aa2f35138a3 + checksum: 0c235a18fa09db1475da0d4138dbd4d78b4941d9c7e79291fbd7858b98431c2c88bafd3b62b30e7800ffd4f19dd4f0bb5fd540cb1ab4deeafd25b55f0b5116a1 languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/protocol-http@npm:3.266.0" +"@aws-sdk/protocol-http@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/protocol-http@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 538bf9f57c67b6677262c14ee3768585436e2421c73d241bff53ebc86a22680320f77f7916c3e02fb9c95844f83b787a749529fbd2cf44ada2f1d3edfeda7a17 + checksum: 9b8121561f7c00cf3b8bcf3ff998e6368b81c38069f9e93f84bb28c4c895166e8f94ce278fa89cb9aecbb35b5cc773fbbde12bd30c74868b74df8fc8e22b23b0 languageName: node linkType: hard -"@aws-sdk/querystring-builder@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/querystring-builder@npm:3.266.0" +"@aws-sdk/querystring-builder@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/querystring-builder@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-uri-escape": 3.201.0 tslib: ^2.3.1 - checksum: 596c3329707d866a8191b953aea1f91fd70229dfd88bb2cc2c56b1f86a7a571fbf2aadad1267e3a7de05183cda98d73114320b6cfdb199b41c895f91ad12c02e + checksum: a0a6c16b304f82b68720f2b9ceb82c86f404f5de68df196688c334b1827bf459c08a4a5404b81a3c9f241c943b16e1f4e37aa49266eba730f4b2a73e25c66749 languageName: node linkType: hard -"@aws-sdk/querystring-parser@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/querystring-parser@npm:3.266.0" +"@aws-sdk/querystring-parser@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/querystring-parser@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 638ec186aa4722d91be08f8219c2dbf2b2a2257dfc16f64ca9cb1f29c366538b90914179e77c06f49d56bc89f2bd6aab3d4bb077a22b2c1ca387e57ae5183bee + checksum: 2299ddf861304609384b05e88c1bc51eb88d38635b117a1f8f1a29418b3baee761deb62f7cb2bb01c45e48d723aaaef6b4f28a6fc7bd7def27dc4ce1287e9dcd languageName: node linkType: hard -"@aws-sdk/service-error-classification@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/service-error-classification@npm:3.266.0" - checksum: c6f94acbfbe675749a79bb0537a0ab4333fbe19ea2833c174d6c7feef121b131d900f8158e94c59d3d12184de1b624ff5df9f6b4f785dcf851e30010ce7d987f +"@aws-sdk/service-error-classification@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/service-error-classification@npm:3.266.1" + checksum: a850854dba4fc0db74338bb3651900bd32c6ccd12ae15e1747a9a93487188a63ce7908b55af9d1a1354dc3d763fc957f0287665965a3b2b2f44fbcfc0af79d1b languageName: node linkType: hard -"@aws-sdk/shared-ini-file-loader@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/shared-ini-file-loader@npm:3.266.0" +"@aws-sdk/shared-ini-file-loader@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/shared-ini-file-loader@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: ac294f5b9f8ec55938f233e626e8c5adf7fa7e331d744a0c2c1267b669e7f6d3abeb22f59b4e3456ce32bdecee0b3a53983730de718750eec1fb4e589fdb1535 + checksum: abafbdcc580688726a36879f30e875b3d5e1780a8a47054cdd0f9ae9289f325de19d3c23c6c94f94abf57685c02a5950e69d389c66a0b8eb7e7e33e53da4c4bc languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/signature-v4@npm:3.266.0" +"@aws-sdk/signature-v4@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/signature-v4@npm:3.266.1" dependencies: "@aws-sdk/is-array-buffer": 3.201.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-middleware": 3.266.0 + "@aws-sdk/util-middleware": 3.266.1 "@aws-sdk/util-uri-escape": 3.201.0 "@aws-sdk/util-utf8": 3.254.0 tslib: ^2.3.1 - checksum: 9a7384c0dcaa72f7281813ac16bacdda3cd6a78ce0f5e0dfbe024f8c94f3a81157ec76566755323de341374e2c50dac252aec86c631021db7ca5e7a6e64036ed + checksum: e225a352293a7ed869e8dd4a65a763b828375a40ef71b17ac453fcca551350b1b792924b8f4f5e3bdb1fabf8b2e5647b457f5a333bf31eb1cbb17a8481b2064b languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/smithy-client@npm:3.266.0" +"@aws-sdk/smithy-client@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/smithy-client@npm:3.266.1" dependencies: - "@aws-sdk/middleware-stack": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/middleware-stack": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 6a5a8a180642d9d3ecef53f315cd6f6cd6f9bd765765c546d53e3372125fa8b6083265669e8aa0981be7a8c8889bfad8d00bda6d01d2a1d5a0a9227739912b0a + checksum: 5a988a7c49aa098fdcfc5448931690d7b1c13600df4277a17c3d0436519a99148222d0a813f1f22d7eb7f835d2a824d76ced2798859b4bca4b99088a07c8df89 languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/token-providers@npm:3.266.0" +"@aws-sdk/token-providers@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/token-providers@npm:3.266.1" dependencies: - "@aws-sdk/client-sso-oidc": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/shared-ini-file-loader": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/client-sso-oidc": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/shared-ini-file-loader": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: c679205b604049b0a6be5ff72e8b4308bd94294811aef12b653254daf9ab7890f2c1afbffb9399b977463733f1bf9c695d014c88b060a384f37f707f03be6f09 + checksum: a908c921b0178983f2bf32e7f40ba6800371776b826af1a530640922c4ee6eedd5e3bc99d25c2ecac3af3cbf36c63d564a342bfc6992d550899499043debdb83 languageName: node linkType: hard -"@aws-sdk/types@npm:3.266.0, @aws-sdk/types@npm:^3.222.0": - version: 3.266.0 - resolution: "@aws-sdk/types@npm:3.266.0" +"@aws-sdk/types@npm:3.266.1, @aws-sdk/types@npm:^3.222.0": + version: 3.266.1 + resolution: "@aws-sdk/types@npm:3.266.1" dependencies: tslib: ^2.3.1 - checksum: 811196d787abb277333d3e56ebff08871452152d1e3fed0b827105bb6c0739edb6b09d80ffb023008c7215f335daecd2f89f570f190e7d17c50a8abf417c81bf + checksum: 3557812663158ce0bcabdc00ecd25e97d4ba046aa68cf4aaf21e01a75743591299218822b5bcb23468755bb063f452eedc087e692af0f913d0ae97faf978029a languageName: node linkType: hard -"@aws-sdk/url-parser@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/url-parser@npm:3.266.0" +"@aws-sdk/url-parser@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/url-parser@npm:3.266.1" dependencies: - "@aws-sdk/querystring-parser": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/querystring-parser": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 6c1dbf62ae21c6836561a9ba34707e2b6817d264c6e7e645fb84b5ff8af7f85c7f7c0005bc4d20cbc3c32561d2c52f04fb15d04058a72c49870298fd7cd8a48c + checksum: 01f76b3fec2d1a5a2597d4f92704796ce689f9c2621f68e4f02fa0081c5ecc0e4459a17bd8fa4882bec41f14f059fa322620b949ab3bd39bea4c27eb5081cc4d languageName: node linkType: hard @@ -754,39 +754,39 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.266.0" +"@aws-sdk/util-defaults-mode-browser@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.266.1" dependencies: - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: d12ee57fef9303aedd7347c91fac93ba6ff34c98979c1f7a557a14a4b20a9cb2e7e3b318072f67053080c21b70b72fb6a0e7c60fd54464803bf31af597ce6c97 + checksum: 8b3169915d2fd281bbab245ed6e2544bd0c7723994eff30ec6ca0bd777751aa5075b25fe6c4ef371332321c368542d2dc5e2113613b4444c669ed9ba6a6ac30f languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.266.0" +"@aws-sdk/util-defaults-mode-node@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.266.1" dependencies: - "@aws-sdk/config-resolver": 3.266.0 - "@aws-sdk/credential-provider-imds": 3.266.0 - "@aws-sdk/node-config-provider": 3.266.0 - "@aws-sdk/property-provider": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/config-resolver": 3.266.1 + "@aws-sdk/credential-provider-imds": 3.266.1 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/property-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 35e5029f7a210f85516a1ffa1d0826e360dd4a85cfb90740229b2a3ce367da434c50a0d5fdb56079a803d29edd9230e28a2d1493270cb23de63610f2c65c25bd + checksum: 80a72df6f16d2b43cf6223ffc46b4f3d7835f5b600bb21d4cd30f87416b726ca27a5f8ab66ad92a2bf78b8f279698bf5a5c8e0802ce4899dd974f30d8c7b9ac6 languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/util-endpoints@npm:3.266.0" +"@aws-sdk/util-endpoints@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-endpoints@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 - checksum: 1dae5c120c99b0fe724cdf2adb70dba51ff73044f0cea14d7fb0ca23629860be4f12ebfc85efe94576339c8c4fbcaf57ccfa14878ddebcdb9ab40db8a9fe41ab + checksum: 6455e89e44da247d288b83ee21c1c5d10e69d1e0c8419a4b3c765ef57015461e5193c9f40b5348975650efbda832ed51455b903836fa2d81906a232b9b7b7422 languageName: node linkType: hard @@ -808,22 +808,22 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-middleware@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/util-middleware@npm:3.266.0" +"@aws-sdk/util-middleware@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-middleware@npm:3.266.1" dependencies: tslib: ^2.3.1 - checksum: 7a89ea290225d9c503be6b7fc8eafd66452080855ff0f21a82c6db4ec58de93fed48ba0fea786ecd05acac75d968acb49aaef53e1917ad40c6a29335e88b4ac9 + checksum: fbd023ff6bf828bc6d117316dc2fa79273c5dede1e9cb493e40b890dbcf362d2fe1252a3a99f4f5458e3e8262acee4887def23ec3575e88410b1f307eaaecb3f languageName: node linkType: hard -"@aws-sdk/util-retry@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/util-retry@npm:3.266.0" +"@aws-sdk/util-retry@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-retry@npm:3.266.1" dependencies: - "@aws-sdk/service-error-classification": 3.266.0 + "@aws-sdk/service-error-classification": 3.266.1 tslib: ^2.3.1 - checksum: 7c7379830093a76eaea311db281bf64f44852a3824abd02c896bd57edb00d7e5bdd90cad37554c84bf1b8d44b2ed9cff35bd98f07f508b0b6ac1a83756b812ba + checksum: ab3e0c2b3d41ffa3f623d8dfbf3af7b34e876f5a049edf0ec2c5a4054143c0d8adb3bc75309e2ad416bae9b52fb9b51bd688c0b32a85c9b210cc1af1e1d4a41a languageName: node linkType: hard @@ -836,30 +836,30 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.266.0" +"@aws-sdk/util-user-agent-browser@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.266.1" dependencies: - "@aws-sdk/types": 3.266.0 + "@aws-sdk/types": 3.266.1 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: ec845b66a6e6d072e803d3ab604e8245b744d92594f6cc3adb4120ecca06335c9f2ce77de6442189ec3f29c4b5f19f2c210888d20e435a49dab326568c997006 + checksum: 41470a0c939499c26d6b474246dfed2e3152ce987d375550101c7257a6c698af94f3c39bc627e0bef37e73d7504570a0228d1e602fed9f1b7810f4f2f562a51f languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.266.0": - version: 3.266.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.266.0" +"@aws-sdk/util-user-agent-node@npm:3.266.1": + version: 3.266.1 + resolution: "@aws-sdk/util-user-agent-node@npm:3.266.1" dependencies: - "@aws-sdk/node-config-provider": 3.266.0 - "@aws-sdk/types": 3.266.0 + "@aws-sdk/node-config-provider": 3.266.1 + "@aws-sdk/types": 3.266.1 tslib: ^2.3.1 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: 31d206c5ccf4c345434f1535681b026c6cf8dd11cd0a91208cc3cb8532284748a52b727a2ed767f2c410486b1fd4c1402e1c47995a7b35687ce427765297fdda + checksum: 81af2cf5c3cf622fb74db4e3a7f4fd937373d272e5845e8bd5beea38200b703e4322fbb637a0872a6de425306eb75d045f4a8fb32dd55fb5b685097b0ee8c8f0 languageName: node linkType: hard @@ -3351,7 +3351,7 @@ __metadata: languageName: node linkType: hard -"@types/node-fetch@latest, @types/node-fetch@npm:^2.1.6": +"@types/node-fetch@npm:^2.1.6, @types/node-fetch@npm:latest": version: 2.6.2 resolution: "@types/node-fetch@npm:2.6.2" dependencies: @@ -3361,7 +3361,7 @@ __metadata: languageName: node linkType: hard -"@types/node@latest, @types/node@npm:*, @types/node@npm:^18.11.18": +"@types/node@npm:*, @types/node@npm:^18.11.18, @types/node@npm:latest": version: 18.13.0 resolution: "@types/node@npm:18.13.0" checksum: 4ea10f8802848b01672bce938f678b6774ca2cee0c9774f12275ab064ae07818419c3e2e41d6257ce7ba846d1ea26c63214aa1dfa4166fa3746291752b8c6416 @@ -3436,6 +3436,13 @@ __metadata: languageName: node linkType: hard +"@types/triple-beam@npm:^1.3.2": + version: 1.3.2 + resolution: "@types/triple-beam@npm:1.3.2" + checksum: dd7b4a563fb710abc992e5d59eac481bed9e303fada2e276e37b00be31c392e03300ee468e57761e616512872e77935f92472877d0704a19688d15a726cee17b + languageName: node + linkType: hard + "@types/unist@npm:*, @types/unist@npm:^2.0.0": version: 2.0.6 resolution: "@types/unist@npm:2.0.6" @@ -5255,9 +5262,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001426, caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001450 - resolution: "caniuse-lite@npm:1.0.30001450" - checksum: 511b360bfc907b2e437699364cf96b83507bc45043926450056642332bcd6f65a1e72540c828534ae15e0ac906e3e9af46cb2bb84458dd580bc31478e9dce282 + version: 1.0.30001451 + resolution: "caniuse-lite@npm:1.0.30001451" + checksum: 48a06a7881093bb4d8a08ed5428f24a1cbdaa544b0a6f0c3614287d4f34b6c853e79a0f608a5bd901c27995f5e951825606fba11e7930251cc422bd61de9d849 languageName: node linkType: hard @@ -7422,9 +7429,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.284": - version: 1.4.288 - resolution: "electron-to-chromium@npm:1.4.288" - checksum: 312e1210f62c6bb593d1f57a15a1c64729e6a5edeacecc5d28dfb21f1a78ed3fac11805a0749a4e68f1fe1536229bf9d7bca36e1f34303369248a749a78aec1f + version: 1.4.289 + resolution: "electron-to-chromium@npm:1.4.289" + checksum: 1f67b7f247d3212d91439e37ba36ddc9e0e410ff679047a16ce2ff1b264280ce4b3ddaa22c290a3f2eee54764d53ccf49db791bf23dd43a8fbd350f46ba3e7a8 languageName: node linkType: hard @@ -12594,15 +12601,16 @@ __metadata: linkType: hard "logform@npm:^2.3.2, logform@npm:^2.4.0": - version: 2.5.0 - resolution: "logform@npm:2.5.0" + version: 2.5.1 + resolution: "logform@npm:2.5.1" dependencies: "@colors/colors": 1.5.0 + "@types/triple-beam": ^1.3.2 fecha: ^4.2.0 ms: ^2.1.1 safe-stable-stringify: ^2.3.1 triple-beam: ^1.3.0 - checksum: 6234b90b0b7ed799eb22071a4051895b4a4524009af05e382e91dabcb3e40e461769bba492015a22c643698acc4b1195b27b36228dbdda9199433e9978722ff3 + checksum: 08fdf03be5bb69af33bac214eb4f6a0c83ad3821a30de498925fccb61e993e5a4a87470aab356ca2110c11e4643685bed5597ca5f46dd1cd11437c44a0e0e3c2 languageName: node linkType: hard @@ -13683,9 +13691,9 @@ __metadata: linkType: hard "minipass@npm:^4.0.0": - version: 4.0.2 - resolution: "minipass@npm:4.0.2" - checksum: 2e4f4caaf85a45c01c6042adc43b5111a6113f62e300acf1db3b193ac3ec6e955bc893d6d8a08635598771a55a0f60487dcac59a1ac39557eb524295d4778c9e + version: 4.0.3 + resolution: "minipass@npm:4.0.3" + checksum: a09f405e2f380ae7f6ee0cbb53b45c1fcc1b6c70fc3896f4d20649d92a10e61892c57bd9960a64cedf6c90b50022cb6c195905b515039c335b423202f99e6f18 languageName: node linkType: hard @@ -13776,8 +13784,8 @@ __metadata: linkType: hard "mongodb@npm:^4.11.0": - version: 4.13.0 - resolution: "mongodb@npm:4.13.0" + version: 4.14.0 + resolution: "mongodb@npm:4.14.0" dependencies: "@aws-sdk/credential-providers": ^3.186.0 bson: ^4.7.0 @@ -13789,7 +13797,7 @@ __metadata: optional: true saslprep: optional: true - checksum: 4c30eed40f639ac64069623cf7a4954e98eab81b91d61df90e7813dd2a745259cdc698f3b60bd7f37c123242b7eb0aaae6ee4e29ff2e48f5d13f187931d51f36 + checksum: ab3b8f27e99fab4ea0c163067158ad360a161edf9ebf74368b9b561da7b75d23c09282d530cb4e2fac32ea30eae29620e861d837d334ddbdfa50d57240c1bd8e languageName: node linkType: hard @@ -14654,13 +14662,13 @@ __metadata: linkType: hard "open@npm:^8.0.4": - version: 8.4.0 - resolution: "open@npm:8.4.0" + version: 8.4.1 + resolution: "open@npm:8.4.1" dependencies: define-lazy-prop: ^2.0.0 is-docker: ^2.1.1 is-wsl: ^2.2.0 - checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c + checksum: dbe8e1d98889df60b5179eab8b94b9591744d1f0033bce1a9a10738ba140bd9d625d6bcde7ff9f043e379aafb918975c2daa03b87cef13eb046ac18ed807f06d languageName: node linkType: hard @@ -15589,13 +15597,13 @@ __metadata: linkType: hard "postcss-js@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-js@npm:4.0.0" + version: 4.0.1 + resolution: "postcss-js@npm:4.0.1" dependencies: camelcase-css: ^2.0.1 peerDependencies: - postcss: ^8.3.3 - checksum: 14be8a58670b4c5d037d40f179240a4f736d53530db727e2635638fa296bc4bff18149ca860928398aace422e55d07c9f5729eeccd395340944985199cdc82a5 + postcss: ^8.4.21 + checksum: 5c1e83efeabeb5a42676193f4357aa9c88f4dc1b3c4a0332c132fe88932b33ea58848186db117cf473049fc233a980356f67db490bd0a7832ccba9d0b3fd3491 languageName: node linkType: hard @@ -15855,7 +15863,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": +"postcss-selector-parser@npm:^6.0.10, postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": version: 6.0.11 resolution: "postcss-selector-parser@npm:6.0.11" dependencies: @@ -15915,7 +15923,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11, postcss@npm:^8.4.12, postcss@npm:^8.4.18, postcss@npm:^8.4.19, postcss@npm:^8.4.20": +"postcss@npm:^8.0.9, postcss@npm:^8.3.11, postcss@npm:^8.4.12, postcss@npm:^8.4.18, postcss@npm:^8.4.19, postcss@npm:^8.4.20": version: 8.4.21 resolution: "postcss@npm:8.4.21" dependencies: @@ -16017,11 +16025,11 @@ __metadata: linkType: hard "prettier@npm:^2.8.0": - version: 2.8.3 - resolution: "prettier@npm:2.8.3" + version: 2.8.4 + resolution: "prettier@npm:2.8.4" bin: prettier: bin-prettier.js - checksum: 92f2ceb522d454370e02082aa74ad27388672f7cee8975028b59517c069fe643bdc73e322675c8faf2ff173d7a626d1a6389f26b474000308e793aa25fff46e5 + checksum: c173064bf3df57b6d93d19aa98753b9b9dd7657212e33b41ada8e2e9f9884066bb9ca0b4005b89b3ab137efffdf8fbe0b462785aba20364798ff4303aadda57e languageName: node linkType: hard @@ -18424,8 +18432,8 @@ __metadata: linkType: hard "tailwindcss@npm:^3.1.8": - version: 3.2.4 - resolution: "tailwindcss@npm:3.2.4" + version: 3.2.6 + resolution: "tailwindcss@npm:3.2.6" dependencies: arg: ^5.0.2 chokidar: ^3.5.3 @@ -18441,12 +18449,12 @@ __metadata: normalize-path: ^3.0.0 object-hash: ^3.0.0 picocolors: ^1.0.0 - postcss: ^8.4.18 + postcss: ^8.0.9 postcss-import: ^14.1.0 postcss-js: ^4.0.0 postcss-load-config: ^3.1.4 postcss-nested: 6.0.0 - postcss-selector-parser: ^6.0.10 + postcss-selector-parser: ^6.0.11 postcss-value-parser: ^4.2.0 quick-lru: ^5.1.1 resolve: ^1.22.1 @@ -18455,7 +18463,7 @@ __metadata: bin: tailwind: lib/cli.js tailwindcss: lib/cli.js - checksum: ec187d180c722ec4f57537f2216c7b21269b525f12aaf353cea464d939c3e6286a1221eb3e1206e45d1f015f296171309ad4d9952899b0245cd07d9500a9401f + checksum: 908451ff7b334b2aec2a0ba5bf426a786a3f190b440a1f8ede206d889448ffda3b77349829f06dc297336fd0b5edc696ae5f23b808d6444bb5c689f218e95323 languageName: node linkType: hard @@ -19798,12 +19806,12 @@ __metadata: linkType: hard "vfile-message@npm:^3.0.0": - version: 3.1.3 - resolution: "vfile-message@npm:3.1.3" + version: 3.1.4 + resolution: "vfile-message@npm:3.1.4" dependencies: "@types/unist": ^2.0.0 unist-util-stringify-position: ^3.0.0 - checksum: f5ec2afbc1d5589fc45729209bdcaf01e3fc520fdac693557e62bd91cc8d6f915a6397c2f4d5f7a129ffc6c7511cb77eaf9e0932be1a70e39bed584ef7c86dbd + checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 languageName: node linkType: hard