ringcentral-typescript v0.10.0
RingCentral TypeScript SDK
This SDK is modelled after the RingCentral.NET SDK which is the most popular RingCentral SDK for static compiled languages.
Installation
yarn add ringcentral-typescript
Setup
Make a copy of .env.example
and rename it to .env
, then fill in the data appropriately.
In your project, require the sdk, then initialize and login
const RestClient = require('ringcentral-typescript').default
const rc = new RestClient({
clientId: process.env.RINGCENTRAL_CLIENT_ID,
clientSecret: process.env.RINGCENTRAL_CLIENT_SECRET,
server: process.env.RINGCENTRAL_SERVER_URL,
appName: "", //optional, if specified, it will be included in X-User-Agent header
appVersion: "", //optional, if specified, it will be included in X-User-Agent header
httpClient: "", //optional
token: "", //optional
handleRateLimit: false, //optional
debugMode: false // optional
})
Sample code
Sample code for all the endpoints
You can also find lots of useful code snippets from the test cases.
Since this library is model after the RingCentral.NET SDK, you can also reference the samples in C#. It should be straightforward to translate C# code into TypeScript or JavaScript since this two SDKs are very similar.
Binary content downloading
Some sample code for binary content downloading may not work.
Because RingCentral is gradually migrating binary content to CDN such as media.ringcentral.com
.
For example, to download the attachment of a fax:
// `message` is the fax message object
const r = await rc.get(message.attachments[0].uri, undefined, { responseType: 'arraybuffer' })
const content = r.data
The following does NOT work:
// `message` is the fax message object
const content = await rc.restapi().account().extension().messageStore(message.id).content(message.attachments[0].id).get()
Rule of thumb
But not all binary content has been migrated to CDN. If the resource to download provides you with a CDN uri, use that CDN uri. If there is no CDN uri provided, contruct the uri as the sample code shows.
Rate Limiting
The RingCentral Platform enforces rate limits to reduce network traffic and avoid DOS issues.
Here's a blog article discussing it in detail.
This SDK has the option of handling rate limits automatically by passing handleRateLimit: (boolean | number)
into the constructor.
Options:
- boolean
- When set to true, this will pause requests for however many seconds are indicated in the
rate-limit-window
header (defaulting to 60 is there header is somehow missing)
- When set to true, this will pause requests for however many seconds are indicated in the
- number
- When set to a number, this overrides using the header, or the default, and instead pauses for x seconds (where x is your number in the constructor)
For maintainers
Regenerate code using latest swagger spec
Get the latest swagger spec here and run:
yarn generate
Compile
yarn tsc
Test
yarn test
Todo
- no more
any
type and{}
type - convert code generator to TS
- compare it with C# sdk and see what are missing
- Create a WSG version of this SDK
- Replace axios with @ringcentral/sdk ?
- Make it an RingCentral official project
- PubNub
- if use @ringcentral/sdk, then no need to implement
- Support events
- if use @ringcentral/sdk, then no need to implement