hunk.code_window:   WS.createServerApp (_wseServer serverEnv) handlers ipAddress pendingConn
     where
       handlers =
         WS.WSHandlers
         -- Mask async exceptions during event processing to help maintain integrity of mutable vars:
         (\rid rh ip -> mask_ $ flip runReaderT serverEnv $ onConn rid rh ip)
         (\conn bs -> mask_ $ onMessage env authMode serverEnv conn bs)
         (mask_ . onClose (_wseLogger serverEnv) (_wseLiveQMap serverEnv))
   stopWSServerApp :: WSServerEnv -> IO ()
   stopWSServerApp wsEnv = WS.shutdown (_wseServer wsEnv)
hunk.labels: keep keep replace replace replace replace replace replace keep keep keep
hunk.after_edit:     handlers = WS.WSHandlers onConnHandler onMessageHandler onCloseHandler
       -- Mask async exceptions during event processing to help maintain integrity of mutable vars:
       onConnHandler rid rh ip = mask_ do
         liftIO $ EKG.Gauge.inc $ smWebsocketConnections serverMetrics
         flip runReaderT serverEnv $ onConn rid rh ip
       onMessageHandler conn bs = mask_ $ onMessage env authMode serverEnv conn bs
       onCloseHandler conn = mask_ do
         liftIO $ EKG.Gauge.dec $ smWebsocketConnections serverMetrics
         onClose (_wseLogger serverEnv) (_wseLiveQMap serverEnv) conn
  
hunk.file_path: server/src-lib/Hasura/GraphQL/Transport/WebSocket.hs
hunk.type: replace
file: exports.up = function(knex, Promise) {
    return knex.schema.createTable('role', table => {
      table
        .uuid('id')
        .primary()
        .unique()
        .defaultTo(knex.raw('gen_random_uuid()'))
      table
        .string('name')
        .unique()
        .notNullable()
    })
  }
  
  exports.down = function(knex, Promise) {
    return knex.schema.dropTable('role')
  }
  