Managed API for Tempo Cloud is an API Client for Tempo Cloud by Adaptavist primarily designed for the use in ScriptRunner Connect. You can read more about Managed APIs here.
This is a runtime agnostic version of the Managed API (with core
suffix) that makes it easy to port it to any runtime you may want to use this Managed API on.
- fetch
- Account
- Customer
- GenericResource
- Plan
- Work
- Worklog
- createWorklog
- deleteWorklog
- getWorklog
- getWorklogs
- updateWorklog
- Search
- Work
While the primary reason for creating Managed APIs was to use them in ScriptRunner Connect runtime, then you can easily port them to any runtime of your choosing.
You can do so by extending the *Core
Managed API class where you'll be asked to provide implementation for getPlatformImplementation
function. In this implementation you have to specify how to perform buffer encoding/decoding operations and how to perform HTTP calls:
{
buffer: {
encode(input: string): ArrayBuffer;
decode(input: ArrayBuffer): string;
},
performHttpCall(request: Request): Promise<Response>
}
Here is an example how to create a Node port of the Managed API:
import { TempoCloudApiCore } from "@managed-api/tempo-cloud-v4-core";
import { PlatformImplementation, Request, Response, Headers } from "@managed-api/commons-core";
import fetch from "node-fetch";
export class TempoCloudApi extends TempoCloudApiCore {
constructor(private baseUrl: string, private authToken: string) {
super();
}
protected getPlatformImplementation(): PlatformImplementation {
return {
buffer: {
encode: (input) => Buffer.from(input, 'utf-8'),
decode: (input) => Buffer.from(input).toString('utf-8')
},
performHttpCall: (request) => this.performHttpCall(request)
};
}
private async performHttpCall(request: Request): Promise<Response> {
const requestUrl = `${this.baseUrl}${request.url}`; // Substitute base URL
request.headers.set('Authorization', `Basic ${this.authToken}`); // Substitute auth token
const response = await fetch(requestUrl, {
method: request.method,
headers: request.headers as any,
body: request.method.toLowerCase() !== 'get' ? Buffer.from((await request.arrayBuffer()) ?? new ArrayBuffer(0)) : undefined
});
const apiHeaders = new Headers();
response.headers.forEach((value, key) => apiHeaders.append(key, value));
const body = await response.arrayBuffer();
return super.buildResponse(response.url, response.status, response.statusText, apiHeaders, body);
}
}
Please note that the authentication handling details may not be accurate and serve as an example. If you wish to use these Managed APIs without having to concern yourself how to deal with and secure authentication details when working with APIs, then feel free to evaluate ScriptRunner Connect platform.
At this time Managed APIs are unlicensed and close sourced, but feel free to drop an email to eknoll@adaptavist.com for ideas, suggestions and improvements.
- Removed non-empty body from HEAD requests.
-
Updated OpenApi Specification
-
Field
issueId
was removed fromWorklog.updateWorklog
. -
Changed the previous
Plan.getPlans
method toPlan.searchPlans
.
-
Retrieve Plans that can be used as
Plan.getPlans
orAll.getPlans
.
-
Search Work Attribute values that can be used as
Worklog.Work.searchAttributeValues
orAll.searchWorkAttributeValuesForWorklogs
.
-
Retrieve Accounts that can be used as
Account.getAccounts
orAll.getAccounts
.
-
Retrieve Account links that can be used as
Account.getLinks
orAll.getLinks
.
-
Retrieve Category / Retrieve all Categories that can be used as
Account.Category.getAllCategoriesOrCategoryById
orAll.getAllCategoriesOrCategoryById
. -
Create Category that can be used as
Account.Category.createCategory
orAll.createCategory
. -
Delete Category that can be used as
Account.Category.deleteCategory
orAll.deleteCategory
. -
Retrieve Category that can be used as
Account.Category.getCategoryByKey
orAll.getCategoryByKey
. -
Update Category that can be used as
Account.Category.updateCategory
orAll.updateCategory
.
-
Retrieve Category Types that can be used as
Account.Category.Type.getTypes
orAll.getCategoryTypes
.
-
Create Account Link that can be used as
Account.Link.createLink
orAll.createAccountLink
. -
Retrieve Account Link by Project that can be used as
Account.Link.getLinkByProject
orAll.getAccountLinkByProject
. -
Delete Account Link that can be used as
Account.Link.deleteLink
orAll.deleteAccountLink
. -
Retrieve Account Link that can be used as
Account.Link.getLinkById
orAll.getAccountLinkById
.
-
Retrieve all Customers that can be used as
Customer.getCustomers
orAll.getCustomers
. -
Create Customer that can be used as
Customer.createCustomer
orAll.createCustomer
. -
Retrieve Customer that can be used as
Customer.getCustomer
orAll.getCustomer
. -
Retrieve Accounts associated with the Customer that can be used as
Customer.getAccountsByCustomer
orAll.getAccountsByCustomer
. -
Delete Customer that can be used as
Customer.deleteCustomer
orAll.deleteCustomer
. -
Update Customer that can be used as
Customer.updateCustomer
orAll.updateCustomer
.
-
Retrieve Attributes that can be used as
Work.Attribute.getAttributes
orAll.getWorkAttributes
.
-
Create Account that can be used as
Account.createAccount
orAll.createAccount
. -
Delete Account that can be used as
Account.deleteAccount
orAll.deleteAccount
. -
Update Account that can be used as
Account.updateAccount
orAll.updateAccount
.
-
Retrieve Attributes that can be used as
Work.Attribute.getAttributes
orAll.getWorkAttributes
. -
Create Attribute that can be used as
Work.Attribute.createAttribute
orAll.createWorkAttribute
. -
Delete Attribute that can be used as
Work.Attribute.deleteAttribute
orAll.deleteWorkAttribute
. -
Retrieve Attribute that can be used as
Work.Attribute.getAttribute
orAll.getWorkAttribute
. -
Update Attribute that can be used as
Work.Attribute.updateAttribute
orAll.updateWorkAttribute
.
-
Retrieve Accounts that can be used as
Account.getAccounts
orAll.getAccounts
. -
Search Accounts that can be used as
Account.searchAccounts
orAll.searchAccounts
. -
Retrieve Account that can be used as
Account.getAccountById
orAll.getAccountById
.
-
Search Generic Resources that can be used as
GenericResource.searchGenericResources
orAll.searchGenericResources
. -
Retrieve Generic Resources that can be used as
GenericResource.getGenericResource
orAll.getGenericResource
.
-
Create Plan that can be used as
Plan.createPlan
orAll.createPlan
. -
Retrieve Plans for Generic Resource that can be used as
Plan.getPlansForGenericResource
orAll.getPlansForGenericResource
. -
Search Plans that can be used as
Plan.getPlans
orAll.getPlans
. -
Retrieve Plans for User that can be used as
Plan.getPlansForUser
orAll.getPlansForUser
. -
Delete Plan that can be used as
Plan.deletePlanById
orAll.deletePlanById
. -
Retrieve Plan that can be used as
Plan.getPlanById
orAll.getPlanById
. -
Update Plan that can be used as
Plan.updatePlan
orAll.updatePlan
.
-
Worklog.Search.getWorklogsByFilterId
orAll.getWorklogsByFilterId
. -
Worklog.getJiraWorklog
orAll.getJiraWorklog
.
-
Retrieve Jira Worklog Ids by Tempo Worklog Ids that can be used as
Worklog.Search.getJiraWorklogIdsByTempoWorklogIds
orAll.getJiraWorklogIdsByTempoWorklogIds
.
-
Search Worklogs associated to Issue Id that can be used as
Worklog.Search.getWorklogsByIssueId
orAll.getWorklogsByIssueId
. -
Retrieve Worklogs associated to project Id that can be used as
Worklog.Search.getWorklogsByProjectId
orAll.getWorklogsByProjectId
.
-
Retrieve Worklogs that can be used as
Worklog.getWorklogs
orAll.getWorklogs
. -
Create Worklog that can be used as
Worklog.createWorklog
orAll.createWorklog
. -
Retrieve Worklog for Jira Worklog ID that can be used as
Worklog.getJiraWorklog
orAll.getJiraWorklog
. -
Delete Worklog that can be used as
Worklog.deleteWorklog
orAll.deleteWorklog
. -
Retrieve Worklog that can be used as
Worklog.getWorklog
orAll.getWorklog
. -
Update Worklog that can be used as
Worklog.updateWorklog
orAll.updateWorklog
.
-
Search Worklogs associated to Account that can be used as
Worklog.Search.getWorklogsByAccount
orAll.getWorklogsByAccount
. -
Search Worklogs associated to Issue that can be used as
Worklog.Search.getWorklogsByJiraIssueIdOrKey
orAll.getWorklogsByJiraIssueIdOrKey
. -
Search Worklogs associated to Jira filter ID that can be used as
Worklog.Search.getWorklogsByFilterId
orAll.getWorklogsByFilterId
. -
Search Worklogs associated to Project that can be used as
Worklog.Search.getWorklogsByProject
orAll.getWorklogsByProject
. -
Search Worklogs that can be used as
Worklog.Search.searchWorklogs
orAll.searchWorklogs
. -
Search Worklogs associated to Team that can be used as
Worklog.Search.getWorklogsByTeam
orAll.getWorklogsByTeam
. -
Search Worklogs associated to User that can be used as
Worklog.Search.getWorklogsByUser
orAll.getWorklogsByUser
.
-
Bulk create Work Attribute values for Worklogs that can be used as
Worklog.Work.createAttributeValues
orAll.createWorkAttributeValuesForWorklogs
. -
Retrieve Work Attribute values for Worklog that can be used as
Worklog.Work.getAttributeValues
orAll.getWorkAttributeValuesForWorklog
. -
Retrieve Work Attribute value for Worklog that can be used as
Worklog.Work.getAttributeValue
orAll.getWorkAttributeValueForWorklog
.
Copyright Adaptavist 2025 (c) All rights reserved