senler-sdk
TypeScript icon, indicating that this package has built-in type declarations

2.2.0 • Public • Published

Senler SDK

Tests workflow Build status npm version npm downloads install size

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 { SenlerApiClientV2 } from "senler-sdk"

const client = new SenlerApiClientV2({
  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, // Disable session (senler does not used it)
  }),

  async (req, res) => {
    const client = new SenlerApiClientV2({
      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 SenlerApiClientV2({
  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 SenlerApiClientV2(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 SenlerApiClientV2(apiConfig, loggingConfig, retryConfig, cacheConfig);

Caching

Caching is based on cache-manager:

const cacheConfig = {
  enabled: true,
  manager: createCache({ ttl: 10_000 })
}
const client = new SenlerApiClientV2(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.

Package Sidebar

Install

npm i senler-sdk

Weekly Downloads

67

Version

2.2.0

License

MIT

Unpacked Size

933 kB

Total Files

98

Last publish

Collaborators

  • alexey-zaliznuak