ans-group/basebot

Middleware models not being passed in correctly to storage engines

Closed this issue · 1 comments

Describe the bug
In basebot-core, the models extracted from middlewares are passed into the storage engine as an array of objects. But the storage engine expects a single object.

In the basebot-core init function:

  const logger = getSingleModule(config.logger)
  const channels = getAllModules(config.channels)
  const rawMiddleware = getAllModules(config.middleware)
  const models = getAllModels(rawMiddleware)
  const storage = getSingleModule(config.storage)({ logger, models: models })
  const middleware = rawMiddleware.map(mw => mw({ storage, logger }))
  const info = logger('core', 'info')
  const { server, app } = Server({ logger })
  const controllers = startChannels({ channels, storage, logger, server, app })

Should be:

  const logger = getSingleModule(config.logger)
  const channels = getAllModules(config.channels)
  const rawMiddleware = getAllModules(config.middleware)
  const models = getAllModels(rawMiddleware)
  const storage = getSingleModule(config.storage)({ logger, models: Object.assign(...models) })
  const middleware = rawMiddleware.map(mw => mw({ storage, logger }))
  const info = logger('core', 'info')
  const { server, app } = Server({ logger })
  const controllers = startChannels({ channels, storage, logger, server, app })

Note the merging of the array of objects into one object with Object.assign(...models)

Source: https://github.com/ans-group/basebot/blob/master/packages/basebot-core/src/index.js#L11

This was observed when using the azure table storage engine

ceuk commented

fixed in 2.4.7