UNPKG

serverless-offline-msk

Version:

A serverless offline plugin that enables AWS MSK events

853 lines (683 loc) 124 kB
# 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.&lt;object&gt;</code> - [.events](#ServerlessSDK+events) : <code>object</code> - [.publish(event)](#ServerlessSDK+events.publish) ⇒ <code>Promise.&lt;null&gt;</code> - [.get(uid)](#ServerlessSDK+events.get) ⇒ <code>Promise.&lt;Object&gt;</code> - [.list([options])](#ServerlessSDK+events.list) ⇒ <code>Promise.&lt;Object&gt;</code> - ~~[.send(event)](#ServerlessSDK+events.send) ⇒ <code>Promise.&lt;null&gt;</code>~~ - [.frameworkDeployments](#ServerlessSDK+frameworkDeployments) : <code>object</code> - [.create([params])](#ServerlessSDK+frameworkDeployments.create) ⇒ <code>Promise.&lt;object&gt;</code> - [.list([params])](#ServerlessSDK+frameworkDeployments.list) ⇒ <code>Promise.&lt;array&gt;</code> - [.webhooks](#ServerlessSDK+webhooks) : <code>object</code> - [.register(url, [options])](#ServerlessSDK+webhooks.register) ⇒ <code>Promise.&lt;object&gt;</code> - [.list([options])](#ServerlessSDK+webhooks.list) ⇒ <code>Promise.&lt;object&gt;</code> - [.get(uid)](#ServerlessSDK+webhooks.get) ⇒ <code>Promise.&lt;object&gt;</code> - [.update(uid)](#ServerlessSDK+webhooks.update) ⇒ <code>Promise.&lt;object&gt;</code> - [.delete(uid)](#ServerlessSDK+webhooks.delete) ⇒ <code>Promise.&lt;object&gt;</code> - [.accessKeys](#ServerlessSDK+accessKeys) : <code>object</code> - [.create(orgName, userName, accessKeyName)](#ServerlessSDK+accessKeys.create) ⇒ <code>Promise.&lt;object&gt;</code> - [.list(orgName)](#ServerlessSDK+accessKeys.list) ⇒ <code>Promise.&lt;object&gt;</code> - [.remove(orgName, uid)](#ServerlessSDK+accessKeys.remove) ⇒ <code>Promise.&lt;object&gt;</code> - [.get()](#ServerlessSDK+accessKeys.get) ⇒ <code>Promise.&lt;(object\|null)&gt;</code> - [.connections](#ServerlessSDK+connections) : <code>object</code> - [.create(orgUid, providerUid, accountAlias)](#ServerlessSDK+connections.create) ⇒ <code>Promise.&lt;object&gt;</code> - [.list(orgUid)](#ServerlessSDK+connections.list) ⇒ <code>Promise.&lt;object&gt;</code> - [.get(orgUid, connectionUid)](#ServerlessSDK+connections.get) ⇒ <code>Promise.&lt;object&gt;</code> - [.getByOrgAndAccountAlias(orgUid, accountAlias)](#ServerlessSDK+connections.getByOrgAndAccountAlias) ⇒ <code>Promise.&lt;object&gt;</code> - [.update(orgUid, connectionUid, providerUid, accountAlias, status)](#ServerlessSDK+connections.update) ⇒ <code>Promise.&lt;object&gt;</code> - [.remove(orgUid, connectionUid)](#ServerlessSDK+connections.remove) ⇒ <code>Promise.&lt;object&gt;</code> - [.syncAll(orgUid)](#ServerlessSDK+connections.syncAll) ⇒ <code>Promise.&lt;object&gt;</code> - [.unsync(orgUid, connectionUid)](#ServerlessSDK+connections.unsync) ⇒ <code>Promise.&lt;object&gt;</code> - [.desktop](#ServerlessSDK+desktop) : <code>object</code> - [.createSavedQuery(orgUid, appUid, serviceName, savedQuery)](#ServerlessSDK+desktop.createSavedQuery) ⇒ <code>Promise.&lt;object&gt;</code> - [.getSavedQuery(orgUid, appUid, serviceName, savedQueryUid)](#ServerlessSDK+desktop.getSavedQuery) ⇒ <code>Promise.&lt;object&gt;</code> - [.updateSavedQuery(orgUid, appUid, serviceName, savedQueryUid, savedQuery)](#ServerlessSDK+desktop.updateSavedQuery) ⇒ <code>Promise.&lt;object&gt;</code> - [.deleteSavedQuery(orgUid, appUid, serviceName, savedQueryUid)](#ServerlessSDK+desktop.deleteSavedQuery) ⇒ <code>Promise.&lt;object&gt;</code> - [.listSavedQueries(orgUid, appUid, serviceName)](#ServerlessSDK+desktop.listSavedQueries) ⇒ <code>Promise.&lt;object&gt;</code> - [.logDestinations](#ServerlessSDK+logDestinations) : <code>object</code> - [.getOrCreate([params])](#ServerlessSDK+logDestinations.getOrCreate) ⇒ <code>Promise.&lt;object&gt;</code> - [.remove([params])](#ServerlessSDK+logDestinations.remove) ⇒ <code>Promise.&lt;object&gt;</code> - [.deploymentProfiles](#ServerlessSDK+deploymentProfiles) : <code>object</code> - [.get([params])](#ServerlessSDK+deploymentProfiles.get) ⇒ <code>Promise.&lt;Object&gt;</code> - [.create([params])](#ServerlessSDK+deploymentProfiles.create) ⇒ <code>Promise.&lt;Object&gt;</code> - [.list([params])](#ServerlessSDK+deploymentProfiles.list) ⇒ <code>Promise.&lt;array&gt;</code> - [.setDefault([params])](#ServerlessSDK+deploymentProfiles.setDefault) ⇒ <code>Promise.&lt;Object&gt;</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.&lt;Object&gt;</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.&lt;object&gt;</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.&lt;null&gt;</code> - [.get(uid)](#ServerlessSDK+events.get) ⇒ <code>Promise.&lt;Object&gt;</code> - [.list([options])](#ServerlessSDK+events.list) ⇒ <code>Promise.&lt;Object&gt;</code> - ~~[.send(event)](#ServerlessSDK+events.send) ⇒ <code>Promise.&lt;null&gt;</code>~~ <a name="ServerlessSDK+events.publish"></a> #### events.publish(event) ⇒ <code>Promise.&lt;null&gt;</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.&lt;null&gt;</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.&lt;Object&gt;</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.&lt;Object&gt;</code> Retrieve a Serverless Platform Event. **Kind**: static method of [<code>events</code>](#ServerlessSDK+events) **Returns**: <code>Promise.&lt;Object&gt;</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.&lt;Object&gt;</code> List all Serverless Platform events. **Kind**: static method of [<code>events</code>](#ServerlessSDK+events) **Returns**: <code>Promise.&lt;Object&gt;</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.&lt;null&gt;</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.&lt;null&gt;</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.&lt;Object&gt;</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.&lt;object&gt;</code> - [.list([params])](#ServerlessSDK+frameworkDeployments.list) ⇒ <code>Promise.&lt;array&gt;</code> <a name="ServerlessSDK+frameworkDeployments.create"></a> #### frameworkDeployments.create([params]) ⇒ <code>Promise.&lt;object&gt;</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.&lt;object&gt;</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.&lt;array&gt;</code> List Serverless Platform Deployments. **Kind**: static method of [<code>frameworkDeployments</code>](#ServerlessSDK+frameworkDeployments) **Returns**: <code>Promise.&lt;array&gt;</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.&lt;object&gt;</code> - [.list([options])](#ServerlessSDK+webhooks.list) ⇒ <code>Promise.&lt;object&gt;</code> - [.get(uid)](#ServerlessSDK+webhooks.get) ⇒ <code>Promise.&lt;object&gt;</code> - [.update(uid)](#ServerlessSDK+webhooks.update) ⇒ <code>Promise.&lt;object&gt;</code> - [.delete(uid)](#ServerlessSDK+webhooks.delete) ⇒ <code>Promise.&lt;object&gt;</code> <a name="ServerlessSDK+webhooks.register"></a> #### webhooks.register(url, [options]) ⇒ <code>Promise.&lt;object&gt;</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.&lt;object&gt;</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.&lt;string&gt;</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.&lt;object&gt;</code> Lists all regsitered webhook endpoints. **Kind**: static method of [<code>webhooks</code>](#ServerlessSDK+webhooks) **Returns**: <code>Promise.&lt;object&gt;</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.&lt;object&gt;</code> Retrieves a webhook endpoint with the given ID. **Kind**: static method of [<code>webhooks</code>](#ServerlessSDK+webhooks) **Returns**: <code>Promise.&lt;object&gt;</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.&lt;object&gt;</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.&lt;object&gt;</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.&lt;string&gt;</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.&lt;object&gt;</code> Deletes the webhook endpoint with the given ID. **Kind**: static method of [<code>webhooks</code>](#ServerlessSDK+webhooks) **Returns**: <code>Promise.&lt;object&gt;</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.&lt;object&gt;</code> - [.list(orgName)](#ServerlessSDK+accessKeys.list) ⇒ <code>Promise.&lt;object&gt;</code> - [.remove(orgName, uid)](#ServerlessSDK+accessKeys.remove) ⇒ <code>Promise.&lt;object&gt;</code> - [.get()](#ServerlessSDK+accessKeys.get) ⇒ <code>Promise.&lt;(object\|null)&gt;</code> <a name="ServerlessSDK+accessKeys.create"></a> #### accessKeys.create(orgName, userName, accessKeyName) ⇒ <code>Promise.&lt;object&gt;</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.&lt;object&gt;</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.&lt;object&gt;</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.&lt;(object\|null)&gt;</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)