Airops' official Javascript client library.
Get Started
AirOps provides an easy and secure way to bring your AirOps Apps to end user web experiences. To facilitate secure access to our Apps directly from client-side code, we have implemented a Client SDK with an authorization mechanism.
This document will guide you through the process of installing and integrating our Client SDK with your server-side code, enabling your end-users to securely access App endpoints.
Checkout our apps and chat playgrounds with code examples.
Authorization
To authenticate with our API using the SDK, you'll need three pieces of information: your workspace id, user id (any unique identifier will work), and your API key. First, use the API key to hash your user id on your back-end server. This will result in a hashed user id that is unique to your API key and user id combination. Workspace id and API Key can be found in your workspace settings.
Here's a sample implementation of the identity verification process for your server:
require "openssl"
def user_id_hash
api_key = "YOUR_API_KEY" # your workspace token (keep safe!)
user_id = "YOUR_USER_ID"
# Convert your api key to bytes
key = api_key.encode("utf-8")
# Hash the message using HMAC-SHA256 and the key
hash = OpenSSL::HMAC.hexdigest('sha256', key, user_id)
end
import hashlib
def user_id_hash():
api_key = "YOUR_API_KEY" # your workspace token (keep safe!)
user_id = "YOUR_USER_ID"
key = api_key.encode('utf-8')
# Hash the message using HMAC-SHA256 and the key
hash = hmac.new(key, user_id.encode('utf-8'), hashlib.sha256).hexdigest()
return hash
const crypto = require('crypto');
const userIdHash = () => {
const apiKey = "YOUR_API_KEY"; // your workspace token (keep safe!)
const userId = "YOUR_USER_ID";
// Convert your api key to a buffer
const key = Buffer.from(apiKey, 'utf-8');
// Hash the message using HMAC-SHA256 and the key
const hash = crypto.createHmac('sha256', key)
.update(userId)
.digest('hex');
return hash;
}
Running Apps via Client SDK
Installation
NPM package
npm i @airops/airops-js
Or use the CDN
<script src=“https://cdn.jsdelivr.net/npm/@airops/airops-js/dist/index.umd.min.js”></script>
Identify the user
import AirOps from '@airops/airops-js';
const airops = AirOps.identify({
userId: 'YOUR_USER_ID',
workspaceId: 'YOUR_WORKSPACE_ID',
hashedUserId: 'YOUR_USER_ID_HASH'
})
Execute workflows
Once you have successfully initialized the SDK, you can begin using the methods available to interact with our API. Note that the methods will return promises.
// Execute an app
const response = airops.apps.execute({
appId: 1,
version: 4,
payload: {
"inputs": {
"param": "XXXXYYYYZZZZ",
"song": "XXXXYYYYZZZZ"
}
}
});
// Wait for result
const result = await response.result();
// Do something with result.output
// Cancel execution
await response.cancel();
Example response
The response from the execute method will contain the execution id that can be used to retrieve results later along with two methods to wait for results or cancel the execution:
interface ExecuteResponse {
executionId: number;
result: () => Promise<AppExecution>;
cancel: () => Promise<void>;
}
interface AppExecution {
airops_app_id: number;
id: number;
status: string;
output: string;
stream_channel_id: string;
}
Execute an app with streaming
In order to stream the app results you will need to enable stream and pass a callback function to the execute method. Optionally you can pass some extra callback function to get a notification when the app is finished.
const response = await airopsInstance.apps.execute({
appId: 9,
version: 38,
payload: {
"inputs": {
"topic": "XXXXYYYYZZZZ"
}
},
stream: true,
streamCallback: (data: { content: string } ) => {
// Do something with the data
},
streamCompletedCallback: (data: { content: string }) => {
// Do something with the data
},
});
Pull results async
You can implement your own pulling logic using the getResults method.
const result = await airops.apps.getResults({
appId: 1,
executionId: response.executionId,
});
Chat Assistant
const response = await airopsInstance.apps.chatStream({
appId: 2,
message,
streamCallback: (data: { token: string; }) => {
// do something with data.token
},
streamCompletedCallback: (data: { result: string }) => {
// do something with data.result
},
...(sessionId && { sessionId }), // optionally pass sessionId to continue chat.
});
// Wait for result
const result = await response.result;
// Do something with result.result
// Cancel execution
await response.cancel();
// Use session id to continue chat
response.sessionId;
Example response
The response from the chatStream method will contain the sessionId and a result method to wait for the response. In order to continue with the chat pass the session Id along with the message.
export interface ChatStreamResponse {
sessionId: string;
result: Promise<{ result: string }>; // result is a promise that resolves when the execution is completed.
}
Error handling
try {
await airops.apps.execute({
appId: 2,
version: 7,
payload: {
"inputs": {
"topic": "XXXXYYYYZZZZ"
}
}
});
} catch (e) {
// do something with error.message
}