@juicyllama/nestjs-aweber
v1.0.0
Published
A NestJS app for integrating with AWeber API
Readme
Install
npm i @juicyllama/nestjs-aweberUsage
- Create an AWeber App (or get credentials from existing app)
# .env
AWEBER_CLIENT_ID=your_aweber_client_id
AWEBER_CLIENT_SECRET=your_aweber_client_secret- Import the AWeber module into your NestJS application
Basic Usage
import { AWeberModule } from '@juicyllama/nestjs-aweber'
@Module({
imports: [
AWeberModule.forRoot(),
],
})
export class AppModule {}Direct Configuration
For applications that want to pass configuration values directly:
import { AWeberModule } from '@juicyllama/nestjs-aweber'
@Module({
imports: [
AWeberModule.forRoot({
config: {
AWEBER_CLIENT_ID: 'your-client-id',
AWEBER_CLIENT_SECRET: 'your-client-secret',
},
}),
],
})
export class AppModule {}Advanced Configuration
For applications with custom environment file paths or caching strategies:
import { AWeberModule } from '@juicyllama/nestjs-aweber'
import { ConfigModule, ConfigService } from '@nestjs/config'
@Module({
imports: [
AWeberModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
configModule: {
isGlobal: true,
envFilePath: `apps/core/.env.${process.env.NODE_ENV || 'local'}`,
},
cacheModule: {
isGlobal: true,
// Custom cache configuration here
},
}),
}),
],
})
export class AppModule {}See USAGE.md for more detailed configuration examples.
Authenticate your NestJS app with Aweber (OAuth2)
Use the AWeber services in your application
You can checkout the Sandbox for an example implementation.
Oauth2
Once you have the module running in your app, it automatically exposes the endpoints required to connect via OAuth2
Visit: /app/aweber/auth and connect to your AWeber account
Cache / Redis
As standard the app will use local memory for storing the OAuth Tokens which is not best practice as you will need to reauth each time you restart the service (and the memory is cleared).
We recommend using Redis which ships out of the box, provide your redis environment values and the cache will revert to redis.
REDIS_URI=redis://localhost:6379Changelog
Release history and semver notes: CHANGELOG.md (also published with the package on npm).
Migration
v1.0.0 (Breaking Changes)
moveSubscriber return type changed
SubscribersService.moveSubscriber() now returns Promise<AWeberSubscriber | null> instead of Promise<AWeberSubscriber>.
AWeber's move endpoint returns 200 OK with an empty body on success. Previously this threw an error; now it returns null. Consumers must handle the nullable return:
const sourceSubscriber = await subscribersService.getSubscriber(accountId, listId, subscriberId)
const subscriberEmail = sourceSubscriber.email
const result = await subscribersService.moveSubscriber(accountId, listId, subscriberId, {
list_id: destinationListId,
enforce_custom_field_mapping: true,
})
if (!result) {
// Normal success — subscriber moved; fetch on destination list if you need the full record
const moved = await subscribersService.getSubscriberByEmail(accountId, destinationListId, subscriberEmail)
}AWeberMoveSubscriberResponse type removed
This type ({ self_link: string }) has been removed from exports. Use AWeberSubscriber | null instead.
enforce_custom_field_mapping added to AWeberMoveSubscriberDto
New optional boolean on AWeberMoveSubscriberDto. Set enforce_custom_field_mapping to true when the source and destination lists have custom fields in a different order or with different names, so AWeber maps by name and avoids misalignment; you can also enable it as a general safeguard for complex moves with many custom fields.
Types
We have typed each AWeber Resource type and have exported them for your use.
You can import them into your code and reuse them.
Testing
We are using mock data (mirrored from the AWeber documentation) to perform testing.
Webhooks
This API wrapper does not support webhooks and you should integrate them directly into your application using AWeber Webhooks Docs
