Senler SDK
Description
`SenlerSDK' is a TypeScript library for easy interaction with the Senler API. It provides a modular structure for working with various Senler resources, such as subscribers, mailing lists, messages, etc.
Installation
npm
npm install senler-sdk
Usage examples
Initializing the client API
To work with the API, you will need the access_token
and vk_group_id
of your VKontakte community.
import { SenlerApiClient } from "senler-sdk"
const client = new SenlerApiClient({
accessToken: "YOUR_ACCESS_TOKEN",
vkGroupId: "YOUR_VK_GROUP_ID",
})
Get subscribers
client.subscribers.get().then((res) => console.log(res))
Integration with passport
Installation
npm i passport passport-senler
Use api client for get subscribers with received access token
import express from 'express';
import passport from 'passport';
import { SenlerStrategy } from 'passport-senler';
passport.use(
new SenlerStrategy({
clientID: 'YOUR_CLIENT_ID',
clientSecret: 'YOUR_CLIENT_SECRET',
callbackURL: 'https://yourapp.com/auth/senler/callback',
})
);
const app = express();
app.get('/auth/senler', passport.authenticate('senler'));
app.get(
'/auth/senler/callback',
passport.authenticate('senler', {
failureRedirect: '/auth/senler/error',
session: false,
}),
async (req, res) => {
const client = new SenlerApiClient({
accessToken: req.accessToken,
vkGroupId: "YOUR_VK_GROUP_ID",
})
res.json(await client.subscribers.get())
}
);
app.listen(3000, () => {
console.log('Server is starting on port: 3000');
});
Error handling
To handle errors correctly, use try-catch
blocks or .catch()
methods.
const client = new SenlerApiClient({
accessToken: "YOUR_TOKEN",
vkGroupId: "YOUR_VK_GROUP_ID",
})
const app = express();
app.get('/get', async (_req, res) => {
try {
res.json(await client.subscribers.get())
}
catch (error: any) {
res.send(error.message)
}
});
Errors implemented via success
, error_code
and error_message
(docs) are converted and throws out as an ApiError with the corresponding message.
Logging
Logging is based on pino, you can overwrite the default configuration.
Example:
const loggingConfig = {
level: 'info',
destination: pino.destination("./log.log"),
base: { pid: false },
transport: {
target: 'pino-pretty',
options: {
colorize: true,
indent: 4
}
}
}
const client = new SenlerApiClient(apiConfig, loggingConfig, retryConfig, cacheConfig);
Retrying
Retrying is based on axios-retry, you can overwrite the default configuration.
Example:
const retryConfig = {
retries: 3,
retryDelay(retryCount, error): number {
return axiosRetry.exponentialDelay(retryCount, error, 100);
}
}
const client = new SenlerApiClient(apiConfig, loggingConfig, retryConfig, cacheConfig);
Caching
Caching is based on cache-manager:
const cacheConfig = {
enabled: true,
manager: createCache({ ttl: 10_000 })
}
const client = new SenlerApiClient(apiConfig, loggingConfig, retryConfig, cacheConfig);
You can also provide custom cache config in any routes:
await client.subscribers.get({count: 30}, cacheConfig)
License
This project is licensed under the MIT license. See LICENSE for details.