1.0.0 • Published 11 months ago

senler-sdk v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

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

  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.

1.0.0

11 months ago

0.7.0

12 months ago

0.6.2

1 year ago

0.6.1

1 year ago

0.6.0

1 year ago

0.5.1

1 year ago

0.5.0

1 year ago

0.4.10

1 year ago

0.4.9

1 year ago

0.4.7

1 year ago

0.4.6

1 year ago

0.4.5

1 year ago

0.4.4

1 year ago

0.4.3

1 year ago

0.4.2

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.3.8

1 year ago

0.3.7

1 year ago

0.3.6

1 year ago

0.3.5

1 year ago

0.3.4

1 year ago

0.3.3

1 year ago

0.3.1

1 year ago

0.2.0

1 year ago

0.1.6

1 year ago

0.1.5

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago