install with npm i lambda-remote-context
Provides two classes:
RemoteContext
(lifecycle management for RemoteClient)RemoteClient
(a base class for wrapping third party clients)
A subclass of RemoteClient
is constructed with async init
and cleanUp
methods.
Typically you would create a subclasses of RemoteClient
, say AliceRemoteClient
and
BobRemoteClient
, to wrap third party adapters needed by your serverless function (e.g. Redis, Prisma, Mastodon, etc). You can construct these clients and have their lifecycle
managed by RemoteContext
as follows:
const arc = new AliceRemoteClient({
init: async () => console.log('do initialization work'),
cleanUp: async () => console.log('do cleanup tasks')
})
const brc = new BobRemoteClient({
init: async () => console.log('do initialization work'),
cleanUp: async () => console.log('do cleanup tasks')
})
const remoteContext = new RemoteContext()
try {
await remoteContext
.addClient(arc)
.addClient(brc)
.initialize();
// Use the RemoteClients in your function to communicate
// with external resources. Each RemoteClient should wrap a
// client from a third party library.
} finally {
await remoteContext.cleanUp()
}
Initalisation and cleanup promises all happen in parallel (i.e. in random order) and the function blocks until all are settled.
If one or more of the settled promises were rejected, then only the .reason
from the rejected promise of the earliest-added client is thrown.