serverless-offline-msk
Version:
A serverless offline plugin that enables AWS MSK events
853 lines (683 loc) • 124 kB
Markdown
# Serverless Platform SDK
This Serverless Platform SDK makes it easy to interact with the Serverless Platform and perform operations on it. Please note that there is an existing `@serverless/platform-sdk` npm module for interacting with the Serverless Inc. SaaS original platform services. This SDK is for the new services, which are multi-cloud, self-hostable and focued on Components. At some point, we will try to merge these SDKs.
The SDK is light-weight, so that it can be used in the following: CLIs, Dashboards, Back-End Services, FaaS Layers. Please **DO NOT** add any big Node.js dependencies to this SDK.
This SDK should guide the interface design between Services and Clients. All Clients and Services **MUST** use the SDK and should never hardcode API endpoints or FaaS resources identifiers.
## Quick-Start
**If you are working within a Node.js environment, install the Serverless Platform Client SDK via NPM:**
```
npm i @serverless/platform-client
```
**If you are working within a web/browser environment, use the CDN hosted Serverless Platform Client SDK:**
This is minified, tree-shaked, browserified. The CDN fetches it directly from NPM, so just reference any npm version, like below.
This CDN service has several locations in China, so it works well there.
```
// In index.html <head></head>
<!-- Load the Serverless Platform (Components) SDK -->
<script src="https://cdn.jsdelivr.net/npm/@serverless/platform-client@0.17.2" async></script>
```
You can also pin to the latest version, but this could break at any time:
```
// In index.html <head></head>
<!-- Load the Serverless Platform (Components) SDK -->
<script src="https://cdn.jsdelivr.net/npm/@serverless/platform-client" async></script>
```
If you are working with the `dev` environment of the Serverless Platform, set the following environment variable, or configure the client programmatically, as detailed below.
```
export SERVERLESS_PLATFORM_STAGE=dev
```
Here is how you require, instantiate the Client and use it:
```javascript
const { ServerlessSDK } = require("@serverless/platform-client");
sdk = new ServerlessSDK({
platformStage: "dev", // Optional. Defaults to 'prod'
accessKey: "JA98JAJFASLFJSALFJASLFJ", // Optional, but recommended. Platform Access Key needed to identify all requests.
});
const instances = await sdk.listInstances("my-org");
```
## Classes
<dl>
<dt><a href="#ServerlessSDK">ServerlessSDK</a></dt>
<dd><p>The Serverless Platform SDK Class</p>
</dd>
</dl>
## Typedefs
<dl>
<dt><a href="#onEvent">onEvent</a> : <code>function</code></dt>
<dd><p><code>onEvent</code> callback</p>
</dd>
<dt><a href="#onDisconnect">onDisconnect</a> : <code>function</code></dt>
<dd><p><code>onDisconnect</code> callback</p>
</dd>
</dl>
<a name="ServerlessSDK"></a>
## ServerlessSDK
The Serverless Platform SDK Class
**Kind**: global class
- [ServerlessSDK](#ServerlessSDK)
- [new ServerlessSDK()](#new_ServerlessSDK_new)
- [.session](#ServerlessSDK+session) : <code>object</code>
- [.refreshToken(refreshToken)](#ServerlessSDK+session.refreshToken) ⇒ <code>Promise.<object></code>
- [.events](#ServerlessSDK+events) : <code>object</code>
- [.publish(event)](#ServerlessSDK+events.publish) ⇒ <code>Promise.<null></code>
- [.get(uid)](#ServerlessSDK+events.get) ⇒ <code>Promise.<Object></code>
- [.list([options])](#ServerlessSDK+events.list) ⇒ <code>Promise.<Object></code>
- ~~[.send(event)](#ServerlessSDK+events.send) ⇒ <code>Promise.<null></code>~~
- [.frameworkDeployments](#ServerlessSDK+frameworkDeployments) : <code>object</code>
- [.create([params])](#ServerlessSDK+frameworkDeployments.create) ⇒ <code>Promise.<object></code>
- [.list([params])](#ServerlessSDK+frameworkDeployments.list) ⇒ <code>Promise.<array></code>
- [.webhooks](#ServerlessSDK+webhooks) : <code>object</code>
- [.register(url, [options])](#ServerlessSDK+webhooks.register) ⇒ <code>Promise.<object></code>
- [.list([options])](#ServerlessSDK+webhooks.list) ⇒ <code>Promise.<object></code>
- [.get(uid)](#ServerlessSDK+webhooks.get) ⇒ <code>Promise.<object></code>
- [.update(uid)](#ServerlessSDK+webhooks.update) ⇒ <code>Promise.<object></code>
- [.delete(uid)](#ServerlessSDK+webhooks.delete) ⇒ <code>Promise.<object></code>
- [.accessKeys](#ServerlessSDK+accessKeys) : <code>object</code>
- [.create(orgName, userName, accessKeyName)](#ServerlessSDK+accessKeys.create) ⇒ <code>Promise.<object></code>
- [.list(orgName)](#ServerlessSDK+accessKeys.list) ⇒ <code>Promise.<object></code>
- [.remove(orgName, uid)](#ServerlessSDK+accessKeys.remove) ⇒ <code>Promise.<object></code>
- [.get()](#ServerlessSDK+accessKeys.get) ⇒ <code>Promise.<(object\|null)></code>
- [.connections](#ServerlessSDK+connections) : <code>object</code>
- [.create(orgUid, providerUid, accountAlias)](#ServerlessSDK+connections.create) ⇒ <code>Promise.<object></code>
- [.list(orgUid)](#ServerlessSDK+connections.list) ⇒ <code>Promise.<object></code>
- [.get(orgUid, connectionUid)](#ServerlessSDK+connections.get) ⇒ <code>Promise.<object></code>
- [.getByOrgAndAccountAlias(orgUid, accountAlias)](#ServerlessSDK+connections.getByOrgAndAccountAlias) ⇒ <code>Promise.<object></code>
- [.update(orgUid, connectionUid, providerUid, accountAlias, status)](#ServerlessSDK+connections.update) ⇒ <code>Promise.<object></code>
- [.remove(orgUid, connectionUid)](#ServerlessSDK+connections.remove) ⇒ <code>Promise.<object></code>
- [.syncAll(orgUid)](#ServerlessSDK+connections.syncAll) ⇒ <code>Promise.<object></code>
- [.unsync(orgUid, connectionUid)](#ServerlessSDK+connections.unsync) ⇒ <code>Promise.<object></code>
- [.desktop](#ServerlessSDK+desktop) : <code>object</code>
- [.createSavedQuery(orgUid, appUid, serviceName, savedQuery)](#ServerlessSDK+desktop.createSavedQuery) ⇒ <code>Promise.<object></code>
- [.getSavedQuery(orgUid, appUid, serviceName, savedQueryUid)](#ServerlessSDK+desktop.getSavedQuery) ⇒ <code>Promise.<object></code>
- [.updateSavedQuery(orgUid, appUid, serviceName, savedQueryUid, savedQuery)](#ServerlessSDK+desktop.updateSavedQuery) ⇒ <code>Promise.<object></code>
- [.deleteSavedQuery(orgUid, appUid, serviceName, savedQueryUid)](#ServerlessSDK+desktop.deleteSavedQuery) ⇒ <code>Promise.<object></code>
- [.listSavedQueries(orgUid, appUid, serviceName)](#ServerlessSDK+desktop.listSavedQueries) ⇒ <code>Promise.<object></code>
- [.logDestinations](#ServerlessSDK+logDestinations) : <code>object</code>
- [.getOrCreate([params])](#ServerlessSDK+logDestinations.getOrCreate) ⇒ <code>Promise.<object></code>
- [.remove([params])](#ServerlessSDK+logDestinations.remove) ⇒ <code>Promise.<object></code>
- [.deploymentProfiles](#ServerlessSDK+deploymentProfiles) : <code>object</code>
- [.get([params])](#ServerlessSDK+deploymentProfiles.get) ⇒ <code>Promise.<Object></code>
- [.create([params])](#ServerlessSDK+deploymentProfiles.create) ⇒ <code>Promise.<Object></code>
- [.list([params])](#ServerlessSDK+deploymentProfiles.list) ⇒ <code>Promise.<array></code>
- [.setDefault([params])](#ServerlessSDK+deploymentProfiles.setDefault) ⇒ <code>Promise.<Object></code>
- [.organizations](#ServerlessSDK+organizations) : <code>object</code>
- [.get([params])](#ServerlessSDK+organizations.get) ⇒ <code>object</code>
- [.list([params])](#ServerlessSDK+organizations.list) ⇒ <code>array</code>
- [.create([params])](#ServerlessSDK+organizations.create) ⇒ <code>object</code>
- [.validate([params])](#ServerlessSDK+organizations.validate) ⇒ <code>array</code>
- [.apps](#ServerlessSDK+apps) : <code>object</code>
- [.create([params])](#ServerlessSDK+apps.create) ⇒ <code>object</code>
- [.get([params])](#ServerlessSDK+apps.get)
- [.update([params])](#ServerlessSDK+apps.update) ⇒ <code>object</code>
- [.remove([params])](#ServerlessSDK+apps.remove)
- [.list([params])](#ServerlessSDK+apps.list)
- [.metadata](#ServerlessSDK+metadata) : <code>object</code>
- [.get()](#ServerlessSDK+metadata.get) ⇒ <code>Promise.<Object></code>
- [.config()](#ServerlessSDK+config) ⇒ <code>null</code>
- [.getDomain(serviceName)](#ServerlessSDK+getDomain) ⇒ <code>string</code>
- [.getUser()](#ServerlessSDK+getUser) ⇒ <code>object</code>
- [.getUserMeta()](#ServerlessSDK+getUserMeta) ⇒ <code>object</code>
- [.saveUserMeta(userMeta)](#ServerlessSDK+saveUserMeta) ⇒ <code>object</code>
- ~~[.validateUserAndOrgName(userAndOrgName)](#ServerlessSDK+validateUserAndOrgName) ⇒ <code>array</code>~~
- ~~[.createUserAndOrg(userAndOrgName)](#ServerlessSDK+createUserAndOrg) ⇒ <code>object</code>~~
- ~~[.createOrg(userAndOrgName)](#ServerlessSDK+createOrg) ⇒ <code>object</code>~~
- ~~[.getOrgByName(orgName)](#ServerlessSDK+getOrgByName) ⇒ <code>object</code>~~
- ~~[.listOrgs(username)](#ServerlessSDK+listOrgs) ⇒ <code>object</code>~~
- ~~[.createApp(orgName)](#ServerlessSDK+createApp) ⇒ <code>object</code>~~
- ~~[.updateApp(orgName)](#ServerlessSDK+updateApp) ⇒ <code>object</code>~~
- ~~[.deleteApp(orgName, appName)](#ServerlessSDK+deleteApp)~~
- ~~[.listApps(orgName)](#ServerlessSDK+listApps)~~
- [.createInitToken(orgName)](#ServerlessSDK+createInitToken)
- [.getInitToken(initTokenUid)](#ServerlessSDK+getInitToken)
- [.createProvider(orgUid, data)](#ServerlessSDK+createProvider)
- [.updateProvider(orgUid, providerUid, data)](#ServerlessSDK+updateProvider)
- [.setDefaultProvider(orgUid, providerUid)](#ServerlessSDK+setDefaultProvider)
- [.unsetDefaultProvider(orgUid, providerUid)](#ServerlessSDK+unsetDefaultProvider)
- [.deleteProvider(orgUid, providerUid)](#ServerlessSDK+deleteProvider)
- [.createProviderLink(orgUid, linkType, linkUid, providerUid)](#ServerlessSDK+createProviderLink)
- [.deleteProviderLink(orgUid, linkType, linkUid, providerUid)](#ServerlessSDK+deleteProviderLink)
- [.getProviders(orgUid)](#ServerlessSDK+getProviders)
- [.getProvider(orgUid, providerUid)](#ServerlessSDK+getProvider)
- [.getProvidersByOrgServiceInstance(orgUid, serviceUid, instanceUid)](#ServerlessSDK+getProvidersByOrgServiceInstance)
- [.getProvidersByLink(orgUid, linkType, linkUid)](#ServerlessSDK+getProvidersByLink)
- [.getAllowedProviders()](#ServerlessSDK+getAllowedProviders)
- [.createParam(orgUid, linkType, linkUid, data)](#ServerlessSDK+createParam)
- [.deleteParam(orgUid, linkType, linkUid, paramUid)](#ServerlessSDK+deleteParam)
- [.updateParam(orgUid, linkType, linkUid, paramUid, data)](#ServerlessSDK+updateParam)
- [.getParams(orgUid, linkType, linkUid)](#ServerlessSDK+getParams)
- [.getParamsByOrgServiceInstance(orgUid, serviceUid, instanceUid)](#ServerlessSDK+getParamsByOrgServiceInstance)
- [.getParamsAndProvidersByOrgServiceInstance(orgUid, serviceUid, instanceUid)](#ServerlessSDK+getParamsAndProvidersByOrgServiceInstance)
- [.connect([options])](#ServerlessSDK+connect) ⇒ <code>null</code>
- [.disconnect()](#ServerlessSDK+disconnect) ⇒ <code>null</code>
- [.isConnected()](#ServerlessSDK+isConnected) ⇒ <code>boolean</code>
- [.unpublishFromRegistry(registryPackage)](#ServerlessSDK+unpublishFromRegistry)
- [.publishToRegistry(registryPackage)](#ServerlessSDK+publishToRegistry) ⇒ <code>object</code>
- [.getFromRegistry(name, version)](#ServerlessSDK+getFromRegistry) ⇒ <code>object</code>
- [.generateInstanceId(orgUid, stageName, appUid, instanceName)](#ServerlessSDK+generateInstanceId) ⇒ <code>object</code>
- [.validateInstance(instanceToValidate)](#ServerlessSDK+validateInstance) ⇒ <code>object</code>
- [.createInstance(orgName, stageName, appName, instanceName, instanceStatus)](#ServerlessSDK+createInstance) ⇒ <code>object</code>
- [.saveInstance(instanceRecord)](#ServerlessSDK+saveInstance)
- [.getInstance(orgName, stageName, appName, instanceName)](#ServerlessSDK+getInstance)
- [.listInstances(orgName, orgUid)](#ServerlessSDK+listInstances)
- [.run(action, instanceData, options)](#ServerlessSDK+run)
- [.runFinish(method, instanceData, meta)](#ServerlessSDK+runFinish)
- [.deploy()](#ServerlessSDK+deploy)
- [.remove()](#ServerlessSDK+remove)
- [.startInterceptingLogs(eventType, context)](#ServerlessSDK+startInterceptingLogs)
- [.stopInterceptingLogs()](#ServerlessSDK+stopInterceptingLogs)
<a name="new_ServerlessSDK_new"></a>
### new ServerlessSDK()
Creates an instance of the SDK. Accepts a configuration object and calls the `config()` method. See the `config()` method for more information on allowed configuration.
| Param | Type | Description |
| -------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [config.accessKey] | <code>string</code> | Can either be a Serverless Platform Access Key or an ID Token. |
| [config.platformStage] | <code>string</code> | The Serverless Platform Stage you wish to interact with. This can also be set by the environment variable SERVERLESS_PLATFORM_STAGE= |
| [context.orgName] | <code>string</code> | The name of the Serverless Platform Organization you wish to interact with. If set, this value is used upon creating a Websockets connection, and auto-added to every Event you publish. |
| [context.orgUid] | <code>string</code> | The ID of the Serverless Platform Organization you wish to interact with. If set, this value is used upon creating a Websockets connection, and auto-added to every Event you publish. |
| [context.stageName] | <code>string</code> | The Serverless Platform Organization Stage you wish to interact with. If set, this value is auto-added to every Event you publish. |
| [context.appName] | <code>string</code> | The Serverless Platform Application you wish to interact with. If set, this value is auto-added to every Event you publish. |
| [context.instanceName] | <code>string</code> | The Serverless Platform Instance you wish to interact with. If set, this value is auto-added to every Event you publish. |
| [context.componentName] | <code>string</code> | The Serverless Platform Component you wish to interact with. If set, this value is auto-added to every Event you publish. |
| [context.componentVersion] | <code>string</code> | The Serverless Platform Component version you wish to interact with. If set, this value is auto-added to every Event you publish. |
**Example**
```js
const { ServerlessSDK } = require("@serverless/platform-client");
const sdk = new ServerlessSDK({
accessKey: "123456789",
context: {
orgName: "my-org",
orgUid: "1234",
stageName: "prod",
appName: "my-app",
instanceName: "my-instance",
},
});
```
<a name="ServerlessSDK+session"></a>
### serverlessSDK.session : <code>object</code>
Methods to create, update, delete User Sessions on the Serverless Platform
**Kind**: instance namespace of [<code>ServerlessSDK</code>](#ServerlessSDK)
<a name="ServerlessSDK+session.refreshToken"></a>
#### session.refreshToken(refreshToken) ⇒ <code>Promise.<object></code>
Uses a Refresh Token to generate a new ID Token for a User within a specific Serverless Organization.
**Kind**: static method of [<code>session</code>](#ServerlessSDK+session)
| Param | Type | Description |
| ------------ | ------------------- | ------------------------------------------------ |
| refreshToken | <code>string</code> | The refresh token used to create a new ID Token. |
**Example**
```js
const tokenData = await sdk.session.refreshToken(refreshToken);
```
<a name="ServerlessSDK+events"></a>
### serverlessSDK.events : <code>object</code>
Publish and retrieve Serverless Platform Events
**Kind**: instance namespace of [<code>ServerlessSDK</code>](#ServerlessSDK)
- [.events](#ServerlessSDK+events) : <code>object</code>
- [.publish(event)](#ServerlessSDK+events.publish) ⇒ <code>Promise.<null></code>
- [.get(uid)](#ServerlessSDK+events.get) ⇒ <code>Promise.<Object></code>
- [.list([options])](#ServerlessSDK+events.list) ⇒ <code>Promise.<Object></code>
- ~~[.send(event)](#ServerlessSDK+events.send) ⇒ <code>Promise.<null></code>~~
<a name="ServerlessSDK+events.publish"></a>
#### events.publish(event) ⇒ <code>Promise.<null></code>
Publishes Serverless Platform Event(s) via HTTP API. The use-case for this is synchronous publishing, where you do not want to open a websockets connection.
**Kind**: static method of [<code>events</code>](#ServerlessSDK+events)
**Returns**: <code>Promise.<null></code> - A successful publish request will be ack'ed with a `200:OK` HTTP status and empty response.
| Param | Type | Description |
| ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| event | <code>Object</code> \| <code>Array.<Object></code> | An event object, or if publishing a batch of events, an array of event objects. |
| event.event | <code>string</code> | Event type. Serverless Platform system events are required to follow a `<entity>[.<sub-entity>].<action>` naming convention (e.g. `user.created`, `org.membership.updated`, etc). |
| event.data | <code>Object</code> | Event metadata. Serverless Platform system events are required to be formatted as described in the example below. |
**Example** _(user event)_
```js
sdk.config({ context: { orgUid: "3xVy2MWGFqpGYSlRMd" } });
await sdk.events.publish({
event: "user.created",
data: {
id: "user-123",
username: "testuser",
},
});
```
**Example** _(system event)_
```js
await sdk.events.publish({
event: "entity.updated", // follows a `<entity>[.<sub-entity>].<action>` naming convention
user_uid: "user-111", // user attributable for event action if applicable - optional
// either of the following properties are required to be set and if not, inherit from current sdk context
org_uid: "org-42",
org_name: "serverless",
// the following properties are optional and default to inheriting from current sdk context
app_name: "app-222",
instance_name: "instance-333",
stage_name: "us-east-1",
component_name: "component-444",
component_version: "1.2.3",
data: {
// event payload - required and must match the format below
object: {
// Serverless Platform object targeted by action
object: "name",
// ...properties
},
previous_attributes: {
// only set on `*.updated` event types and contains modified property values as of before the update
//...properties
},
},
});
```
<a name="ServerlessSDK+events.get"></a>
#### events.get(uid) ⇒ <code>Promise.<Object></code>
Retrieve a Serverless Platform Event.
**Kind**: static method of [<code>events</code>](#ServerlessSDK+events)
**Returns**: <code>Promise.<Object></code> - An event object if a valid id was provided.
| Param | Type | Description |
| ----- | ------------------- | --------------------------- |
| uid | <code>string</code> | UID of event to be fetched. |
**Example**
```js
const event = await sdk.events.get("evt_EsbM82sYTVscqYvcD4CKcLe1");
console.log(JSON.stringify(event, null, 2));
// outputs:
// {
// "uid": "evt_EsbM82sYTVscqYvcD4CKcLe1",
// "event": "member.invite.sent",
// "org_uid": "3xVy2MWGFqpGYSlRMd",
// "user_uid": "ps4Vt2phVXsMyD0byW",
// "object": "event",
// "created": 1600686488878,
// "data": {
// "object": {
// "org_uid": "3xVy2MWGFqpGYSlRMd",
// "role": "collaborator",
// "invited_by_user_uid": "ps4Vt2phVXsMyD0byW",
// "created": "2020-09-21T11:08:08.603Z",
// "recipient_email": "dev@serverless.com",
// "org_name": "serverless",
// "object": "invite"
// }
// }
// }
```
<a name="ServerlessSDK+events.list"></a>
#### events.list([options]) ⇒ <code>Promise.<Object></code>
List all Serverless Platform events.
**Kind**: static method of [<code>events</code>](#ServerlessSDK+events)
**Returns**: <code>Promise.<Object></code> - A dictionary with a `data` property that contains an array of up to `limit` events, starting after event `starting_after`. Each entry in the array is a separate `event` Object. If no more events are available, the resulting array will be empty.
| Param | Type | Description |
| ---------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [options] | <code>Object</code> | List options |
| options.org_uid | <code>string</code> | UID of the Serverless Platform Organization. Optional - defaults to inheriting from current SDK context. |
| options.org_name | <code>string</code> | Name of the Serverless Platform Organization. Optional - defaults to inheriting from current SDK context. |
| options.event | <code>string</code> | A string containing a specific event name, or all events by using `'*'` as a wildcard. |
| options.limit | <code>number</code> | A limit on the number of events to be returned. Limit can range between 1 and 100, and the default is 10. |
| options.created | <code>number</code> | A filter on the list based on the object created field. The value can be an integer Unix timestamp, or it can be a dictionary with the following options: - `created.gt`, `created.gte`, `created.lt`, `created.lte` returning results where the event `created` field is greater, greater than or equal to, lesser than, or lesser than or equal to respectively. |
| options.starting_after | <code>string</code> | A cursor for use in pagination. `starting_after` is an event ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `evt_foo`, your subsequent call can include `starting_after=evt_foo` in order to fetch the next page of the list. |
**Example**
```js
const events = await sdk.events.list({
event: "member.invite.accepted",
created: {
gte: 1600686488878,
},
limit: 1,
});
console.log(JSON.stringify(events, null, 2));
// outputs:
// {
// "object": "list",
// "data": [
// {
// "uid": "evt_DdUCdz2tsY7gZr1a9Z6Xw9BD",
// "event": "member.invite.accepted",
// "object": "event",
// "created": 1600707548900,
// "data": {
// "object": {
// "object": "invite",
// "org_uid": "3xVy2MWGFqpGYSlRMd",
// "role": "collaborator",
// "invited_by_user_uid": "ps4Vt2phVXsMyD0byW",
// "recipient_email": "dev@serverless.com",
// "org_name": "serverless",
// "created": "2020-09-21T11:08:08.603Z",
// }
// }
// }
// ]
// }
```
<a name="ServerlessSDK+events.send"></a>
#### ~~events.send(event) ⇒ <code>Promise.<null></code>~~
**_Deprecated_**
Dispatches a Serverless Platform Event via Websockets. The use-case for this is asynchronous publishing, where you do not want to synchronous auth requests, where every message must be authorized first, adding latency.
**Kind**: static method of [<code>events</code>](#ServerlessSDK+events)
**Returns**: <code>Promise.<null></code> - A successful publish request will be ack'ed with a `200: OK` HTTP status and empty response.
**See**: [publish](#ServerlessSDK+events.publish)
| Param | Type | Description |
| ----------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| event | <code>Object</code> \| <code>Array.<Object></code> | An event object, or if publishing a batch of events, an array of event objects. |
| event.event | <code>string</code> | Event type. Serverless Platform system events are required to follow a `<entity>[.<sub-entity>].<action>` naming convention (e.g. `user.created`, `org.membership.updated`, etc). |
| event.data | <code>Object</code> | Event metadata. Serverless Platform system events are required to be formatted as described in the example below. |
<a name="ServerlessSDK+frameworkDeployments"></a>
### serverlessSDK.frameworkDeployments : <code>object</code>
Manage Serverless Platform Deployments for Serverless Framework Traditional
**Kind**: instance namespace of [<code>ServerlessSDK</code>](#ServerlessSDK)
- [.frameworkDeployments](#ServerlessSDK+frameworkDeployments) : <code>object</code>
- [.create([params])](#ServerlessSDK+frameworkDeployments.create) ⇒ <code>Promise.<object></code>
- [.list([params])](#ServerlessSDK+frameworkDeployments.list) ⇒ <code>Promise.<array></code>
<a name="ServerlessSDK+frameworkDeployments.create"></a>
#### frameworkDeployments.create([params]) ⇒ <code>Promise.<object></code>
Create a new Serverless Platform Deployment. Additionally, if Service with provided `serviceName` does not exist, it will be created automatically as well.
**Kind**: static method of [<code>frameworkDeployments</code>](#ServerlessSDK+frameworkDeployments)
**Returns**: <code>Promise.<object></code> - Saved deployment object.
| Param | Type | Description |
| --------------------- | ------------------- | ----------------------------------------------------------------------------- |
| [params] | <code>Object</code> | Create deployment params. |
| params.orgName | <code>string</code> | The name of the Serverless Platform Organization to create the Deployment in. |
| params.appName | <code>string</code> | The name of the Serverless Platform Application to create the Deployment in. |
| params.serviceName | <code>string</code> | The name of the Serverless Platform Service to create the Deployment in. |
| params.stageName | <code>string</code> | The name of the Serverless Service Stage to create the Deployment in. |
| params.regionName | <code>string</code> | The name of the AWS Region to create the Deployment in. |
| params.deploymentData | <code>Object</code> | Data associated with saved deployment |
<a name="ServerlessSDK+frameworkDeployments.list"></a>
#### frameworkDeployments.list([params]) ⇒ <code>Promise.<array></code>
List Serverless Platform Deployments.
**Kind**: static method of [<code>frameworkDeployments</code>](#ServerlessSDK+frameworkDeployments)
**Returns**: <code>Promise.<array></code> - Array of Deployments.
| Param | Type | Description |
| ------------------ | ------------------- | ----------------------------------------------------------------------------- |
| [params] | <code>Object</code> | List deployment params. |
| params.orgName | <code>string</code> | The name of the Serverless Platform Organization to list the Deployments for. |
| params.appName | <code>string</code> | The name of the Serverless Platform Application to list the Deployment for. |
| params.serviceName | <code>string</code> | The name of the Serverless Platform Service to list the Deployment for. |
| params.stageName | <code>string</code> | The name of the Serverless Service Stage to list the Deployment for. |
| params.regionName | <code>string</code> | The name of the AWS Region to list the Deployment for. |
| params.cursor | <code>string</code> | The cursor from which Deployments should be listed. Used for pagination. |
<a name="ServerlessSDK+webhooks"></a>
### serverlessSDK.webhooks : <code>object</code>
Register, modify and query Serverless Platform Event Webhooks
**Kind**: instance namespace of [<code>ServerlessSDK</code>](#ServerlessSDK)
- [.webhooks](#ServerlessSDK+webhooks) : <code>object</code>
- [.register(url, [options])](#ServerlessSDK+webhooks.register) ⇒ <code>Promise.<object></code>
- [.list([options])](#ServerlessSDK+webhooks.list) ⇒ <code>Promise.<object></code>
- [.get(uid)](#ServerlessSDK+webhooks.get) ⇒ <code>Promise.<object></code>
- [.update(uid)](#ServerlessSDK+webhooks.update) ⇒ <code>Promise.<object></code>
- [.delete(uid)](#ServerlessSDK+webhooks.delete) ⇒ <code>Promise.<object></code>
<a name="ServerlessSDK+webhooks.register"></a>
#### webhooks.register(url, [options]) ⇒ <code>Promise.<object></code>
Registers a webhook endpoint to receive Serverless Platform events.
Endpoint should be able to receieve JSON formatted events as a HTTP POST payload.
Furthermore, a `3` second timeout limit is enforced on event delivery with no additional retries performed.
The following HTTP headers are set on the POST request:
| Header | Value |
| ----------------------- | ------------------------------- |
| `Content-type` | `application/json` |
| `X-Serverless-Event` | Event type |
| `X-Serverless-Delivery` | Unique delivery ID |
| `User-Agent` | Prefix of `Serverless-Webhook/` |
**Kind**: static method of [<code>webhooks</code>](#ServerlessSDK+webhooks)
**Returns**: <code>Promise.<object></code> - Registered webhook endpoint.
| Param | Type | Description |
| ----------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| url | <code>string</code> | HTTP webhook endpoint URL. |
| [options] | <code>Object</code> | Registration options. |
| options.description | <code>string</code> | An optional description of what the webhook is used for. |
| options.org_uid | <code>string</code> | UID of the Serverless Platform Organization. Optional - defaults to inheriting from current SDK context. If registering a Serverless Platform system webhook, use a special wildcard value of `'*'` to consume events generated from _all_ orgs. |
| options.org_name | <code>string</code> | Name of the Serverless Platform Organization. Optional - defaults to inheriting from current SDK context. |
| options.filter | <code>Object</code> | Optionally, filter which events this endpoint should receive. |
| options.filter.enabled_events | <code>Array.<string></code> | The list of events to enable for this endpoint. `["*"]` indicates that all events are enabled. |
**Example**
```js
const webhook = await sdk.webhooks.register(
"https://postb.in/1598300732037-0682672155089",
{ description: "This is my webhook, I like it a lot" }
);
console.log(JSON.stringify(webhook, null, 2));
// outputs:
// {
// "uid": "whe_FPYDtTL37ye13m3sJvtcdyuF",
// "object": "webhook_endpoint",
// "url": "https://postb.in/1598300732037-0682672155089",
// "description": "This is my webhook, I like it a lot",
// "filter": {
// "enabled_events": [
// "*"
// ]
// },
// "status": {
// "disabled": false
// },
// "created": 1602078105978
// }
```
<a name="ServerlessSDK+webhooks.list"></a>
#### webhooks.list([options]) ⇒ <code>Promise.<object></code>
Lists all regsitered webhook endpoints.
**Kind**: static method of [<code>webhooks</code>](#ServerlessSDK+webhooks)
**Returns**: <code>Promise.<object></code> - A dictionary with a `data` property that contains an array, with each entry being a `webhook` object.
| Param | Type | Description |
| ---------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [options] | <code>Object</code> | List options. |
| options.starting_after | <code>string</code> | A cursor for use in pagination. `starting_after` is a webhook endpoint object ID that defines your place in the list. For instance, if you make a list request and receive 100 objects, ending with `whe_foo`, your subsequent call can include `starting_after=whe_foo` in order to fetch the next page of the list. |
| options.limit | <code>number</code> | A limit on the number of webhook endpoints to be returned. Limit can range between 1 and 100, and the default is 10. |
**Example**
```js
const webhooks = await sdk.webhooks.list({
limit: 1,
});
console.log(JSON.stringify(webhooks, null, 2));
// outputs:
// {
// "object": "list",
// "data": [
// {
// "uid": "whe_FPYDtTL37ye13m3sJvtcdyuF",
// "object": "webhook_endpoint",
// "url": "https://postb.in/1598300732037-0682672155089",
// "description": "This is my webhook, I like it a lot",
// "filter": {
// "enabled_events": ["*"]
// },
// "status": {
// "disabled": false,
// "most_recent_delivery": {
// "event_uid": "evt_5cmXN7kqdu5YY69HFKegmiGR",
// "response_status_code": 200,
// "response_headers": {
// "content-length": "12",
// "connection": "close",
// "content-type": "application/json"
// },
// "request_headers": {
// "User-Agent": "Serverless-Webhook/0.1",
// "Content-type": "application/json",
// "X-Serverless-Delivery": "e1701c44-5d92-4515-8bfb-6c9173a89b60",
// "X-Serverless-Event": "test.webhook.send2"
// },
// "response_text": "{\"ok\": true}",
// "error_message": null,
// "timestamp": 1599595612876
// }
// },
// "created": 1599591851267,
// "updated": 1599595613099
// },
// ]
// }
```
<a name="ServerlessSDK+webhooks.get"></a>
#### webhooks.get(uid) ⇒ <code>Promise.<object></code>
Retrieves a webhook endpoint with the given ID.
**Kind**: static method of [<code>webhooks</code>](#ServerlessSDK+webhooks)
**Returns**: <code>Promise.<object></code> - A webhook endpoint if a valid webhook endpoint ID was provided.
| Param | Type | Description |
| ----- | ------------------- | -------------------- |
| uid | <code>string</code> | Webhook endpoint ID. |
**Example**
```js
const webhook = await sdk.webhooks.get("whe_FPYDtTL37ye13m3sJvtcdyuF");
console.log(JSON.stringify(webhook, null, 2));
// outputs:
// {
// "uid": "whe_FPYDtTL37ye13m3sJvtcdyuF",
// "object": "webhook_endpoint",
// "url": "https://postb.in/1598300732037-0682672155089",
// "description": "This is my webhook, I like it a lot",
// "filter": {
// "enabled_events": ["*"]
// },
// "status": {
// "disabled": false,
// "most_recent_delivery": {
// "event_uid": "evt_5cmXN7kqdu5YY69HFKegmiGR",
// "response_status_code": 200,
// "response_headers": {
// "content-length": "12",
// "connection": "close",
// "content-type": "application/json"
// },
// "request_headers": {
// "User-Agent": "Serverless-Webhook/0.1",
// "Content-type": "application/json",
// "X-Serverless-Delivery": "e1701c44-5d92-4515-8bfb-6c9173a89b60",
// "X-Serverless-Event": "test.webhook.send2"
// },
// "response_text": "{\"ok\": true}",
// "error_message": null,
// "timestamp": 1599595612876
// }
// },
// "created": 1599591851267,
// "updated": 1599595613099
// }
```
<a name="ServerlessSDK+webhooks.update"></a>
#### webhooks.update(uid) ⇒ <code>Promise.<object></code>
Updates the registered webhook endpoint. You may edit the url, description, the list of filters, and the status of your endpoint.
**Kind**: static method of [<code>webhooks</code>](#ServerlessSDK+webhooks)
**Returns**: <code>Promise.<object></code> - Updated webhook endpoint.
| Param | Type | Description |
| ----------------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| uid | <code>string</code> | Webhook endpoint ID. |
| updates.url | <code>string</code> | HTTP webhook endpoint url, if updating. |
| updates.description | <code>string</code> | An optional updated description of what the webhook is used for. |
| updates.filter | <code>Object</code> | Optionally, update filter which events this endpoint should receive. An existing filter can reset by setting it to `null`. |
| updates.filter.enabled_events | <code>Array.<string></code> | The list of events to enable for this endpoint. `["*"]` indicates that all events are enabled. |
| updates.status.disabled | <code>boolean</code> | Enable/disable the webhook endpoint. |
**Example**
```js
const webhook = await sdk.webhooks.update("whe_FPYDtTL37ye13m3sJvtcdyuF", {
url: "http://437f01fa092e.ngrok.io",
filter: {
enabled_events: ["user.created", "member.invite.sent"],
},
});
console.log(JSON.stringify(webhook, null, 2));
// outputs:
// {
// "uid": "whe_FPYDtTL37ye13m3sJvtcdyuF",
// "object": "webhook_endpoint",
// "url": "http://437f01fa092e.ngrok.io",
// "description": "This is my webhook, I like it a lot",
// "filter": {
// "enabled_events": [
// "user.created",
// "member.invite.sent"
// ]
// },
// "status": {
// "disabled": false
// },
// "created": 1602078105978,
// "updated": 1602078663800
// }
```
<a name="ServerlessSDK+webhooks.delete"></a>
#### webhooks.delete(uid) ⇒ <code>Promise.<object></code>
Deletes the webhook endpoint with the given ID.
**Kind**: static method of [<code>webhooks</code>](#ServerlessSDK+webhooks)
**Returns**: <code>Promise.<object></code> - An object with the deleted webhook endpoints’s ID if a valid webhook endpoint ID was provided. Otherwise, this call throws an error, such as if the webhook endpoint has already been deleted.
| Param | Type | Description |
| ----- | ------------------- | -------------------- |
| uid | <code>string</code> | Webhook endpoint ID. |
**Example**
```js
const webhook = await sdk.webhooks.delete("whe_FPYDtTL37ye13m3sJvtcdyuF");
console.log(JSON.stringify(webhook, null, 2));
// outputs:
// {
// "uid": "whe_FPYDtTL37ye13m3sJvtcdyuF",
// "object": "webhook_endpoint",
// "url": "http://437f01fa092e.ngrok.io",
// "description": "This is my webhook, I like it a lot",
// "filter": {
// "enabled_events": [
// "user.created",
// "member.invite.sent"
// ]
// },
// "status": {
// "disabled": false
// },
// "created": 1602078105978,
// "updated": 1602078663800
// }
```
<a name="ServerlessSDK+accessKeys"></a>
### serverlessSDK.accessKeys : <code>object</code>
Create, get and delete Serverless Platform Access Keys for an Organization
**Kind**: instance namespace of [<code>ServerlessSDK</code>](#ServerlessSDK)
- [.accessKeys](#ServerlessSDK+accessKeys) : <code>object</code>
- [.create(orgName, userName, accessKeyName)](#ServerlessSDK+accessKeys.create) ⇒ <code>Promise.<object></code>
- [.list(orgName)](#ServerlessSDK+accessKeys.list) ⇒ <code>Promise.<object></code>
- [.remove(orgName, uid)](#ServerlessSDK+accessKeys.remove) ⇒ <code>Promise.<object></code>
- [.get()](#ServerlessSDK+accessKeys.get) ⇒ <code>Promise.<(object\|null)></code>
<a name="ServerlessSDK+accessKeys.create"></a>
#### accessKeys.create(orgName, userName, accessKeyName) ⇒ <code>Promise.<object></code>
Creates a new Access Key for a User within a Serverless Organization.
**Kind**: static method of [<code>accessKeys</code>](#ServerlessSDK+accessKeys)
| Param | Type | Description |
| ------------- | ------------------- | ------------------------------------------------------------------------------------ |
| orgName | <code>string</code> | The name of the Serverless Organization to create the Access Key for |
| userName | <code>string</code> | The name of the User within the Serverless Organization to create the Access Key for |
| accessKeyName | <code>string</code> | The name of the Access Key you would like to create |
**Example**
```js
const accessKey = await sdk.accessKeys.create(orgName, accessKeyName);
```
<a name="ServerlessSDK+accessKeys.list"></a>
#### accessKeys.list(orgName) ⇒ <code>Promise.<object></code>
Lists all Access Keys within a Serverless Organization.
**Kind**: static method of [<code>accessKeys</code>](#ServerlessSDK+accessKeys)
| Param | Type | Description |
| ------- | ------------------- | ----------------------------------------------------------- |
| orgName | <code>string</code> | The name of the Serverless Organization to list Access Keys |
**Example**
```js
const accessKeys = await sdk.accessKeys.list(orgName);
```
<a name="ServerlessSDK+accessKeys.remove"></a>
#### accessKeys.remove(orgName, uid) ⇒ <code>Promise.<object></code>
Delete an Access Key from a Serverless Organization.
**Kind**: static method of [<code>accessKeys</code>](#ServerlessSDK+accessKeys)
| Param | Type | Description |
| ------- | ------------------- | ---------------------------------------------------------------------- |
| orgName | <code>string</code> | The name of the Serverless Organization that the Access Key belongs to |
| uid | <code>string</code> | The UID of the Access Key |
**Example**
```js
const accessKeys = await sdk.accessKeys.remove(orgName, uid);
```
<a name="ServerlessSDK+accessKeys.get"></a>
#### accessKeys.get() ⇒ <code>Promise.<(object\|null)></code>
Get metadata for the Access Key configured under `sdk.accessKey`
**Kind**: static method of [<code>accessKeys</code>](#ServerlessSDK+accessKeys)
**Example**
```js
const accessKeyData = await sdk.accessKeys.get();
```
<a name="ServerlessSDK+connections"></a>
### serverlessSDK.connections : <code>object</code>
Create, manage and sync Serverless Platform Connections between vendor accounts and their Serverless Organization.
**Kind**: instance namespace of [<code>ServerlessSDK</code>](#ServerlessSDK)
- [.connections](#ServerlessSDK+connections)