AWS SDK v3 plugin for HapiJS — instantiate and expose AWS service clients via server and request decorators.
- Node.js >= 18
@hapi/hapi^21- AWS SDK v3 client packages (e.g.
@aws-sdk/client-s3)
npm install @ar4mirez/hapi-awsInstall the AWS SDK v3 clients you need separately:
npm install @aws-sdk/client-s3 @aws-sdk/client-dynamodbconst Hapi = require('@hapi/hapi');
const { S3Client } = require('@aws-sdk/client-s3');
const { DynamoDBClient } = require('@aws-sdk/client-dynamodb');
const init = async () => {
const server = new Hapi.Server({ host: 'localhost', port: 3000 });
await server.register({
plugin: require('@ar4mirez/hapi-aws'),
options: {
global: {
region: 'us-east-1'
// credentials: { accessKeyId: '...', secretAccessKey: '...' }
// Prefer environment variables or IAM roles over hardcoded credentials
},
services: [
{ name: 's3', client: new S3Client({ region: 'us-east-1' }) },
{ name: 'dynamo', client: new DynamoDBClient({ region: 'us-east-1' }) }
]
}
});
// Clients are available on server.aws, request.aws, and
// server.plugins['@ar4mirez/hapi-aws'].aws
server.route({
method: 'GET',
path: '/files',
handler: async (request, h) => {
const { ListBucketsCommand } = require('@aws-sdk/client-s3');
const result = await request.aws.s3.send(new ListBucketsCommand({}));
return result.Buckets;
}
});
await server.start();
console.log(`Server running at: ${server.info.uri}`);
};
init();| Option | Type | Default | Description |
|---|---|---|---|
global |
object | {} |
Global AWS configuration (applied before services start) |
global.region |
string | 'us-east-1' |
AWS region |
global.credentials |
object | — | { accessKeyId, secretAccessKey } — prefer env/IAM roles |
services |
array | [] |
List of AWS client entries to register |
services[].name |
string | — | Key name to expose on server.aws / request.aws |
services[].client |
object | — | Pre-instantiated AWS SDK v3 client |
After registration, clients are accessible via:
server.aws.<name>— server-level decoratorrequest.aws.<name>— request-level decorator (inside handlers)server.plugins['@ar4mirez/hapi-aws'].aws.<name>— plugin namespace
// Before (aws-sdk v2) — service name as string
services: [
{ name: 'codeCommit', service: 'CodeCommit' }
]
// After (aws-sdk v3) — pre-instantiated client
const { CodeCommitClient } = require('@aws-sdk/client-codecommit');
services: [
{ name: 'codeCommit', client: new CodeCommitClient({ region: 'us-east-1' }) }
]Security note: Never hardcode AWS credentials in your source code. Use environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY) or IAM instance roles/task roles instead.
ISC © Angel Ramirez