projectmanager-sdk
Version:
Software development kit for the ProjectManager.com API. for TypeScript
332 lines • 11.7 kB
JavaScript
/***
* ProjectManager API for TypeScript
*
* (c) 2023-2026 ProjectManager.com, Inc.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @author ProjectManager.com <support@projectmanager.com>
* @copyright 2023-2026 ProjectManager.com, Inc.
* @version 152.0.138
* @link https://github.com/projectmgr/projectmanager-sdk-typescript
*/
import { ApiKeyClient } from "./index.js";
import { ChangesetClient } from "./index.js";
import { DashboardClient } from "./index.js";
import { DiscussionClient } from "./index.js";
import { FileClient } from "./index.js";
import { HolidayClient } from "./index.js";
import { HomeFileClient } from "./index.js";
import { HourlyRateClient } from "./index.js";
import { HourlyRatePeriodClient } from "./index.js";
import { IntegrationClient } from "./index.js";
import { IntegrationCategoryClient } from "./index.js";
import { IntegrationProviderClient } from "./index.js";
import { LicenseClient } from "./index.js";
import { MeClient } from "./index.js";
import { MeetingsClient } from "./index.js";
import { MeetingTagClient } from "./index.js";
import { MeetingTodosClient } from "./index.js";
import { NotificationClient } from "./index.js";
import { NptClient } from "./index.js";
import { NptDiscussionClient } from "./index.js";
import { NptFilesClient } from "./index.js";
import { NptRecurrencyClient } from "./index.js";
import { NptStatusClient } from "./index.js";
import { NptTagClient } from "./index.js";
import { NptTodosClient } from "./index.js";
import { ProjectClient } from "./index.js";
import { ProjectChargeCodeClient } from "./index.js";
import { ProjectCustomerClient } from "./index.js";
import { ProjectFieldClient } from "./index.js";
import { ProjectFileClient } from "./index.js";
import { ProjectFolderClient } from "./index.js";
import { ProjectMembersClient } from "./index.js";
import { ProjectPriorityClient } from "./index.js";
import { ProjectStatusClient } from "./index.js";
import { ProjectTemplateClient } from "./index.js";
import { ProjectVersionClient } from "./index.js";
import { ResourceClient } from "./index.js";
import { ResourceSkillClient } from "./index.js";
import { ResourceTeamClient } from "./index.js";
import { RiskClient } from "./index.js";
import { RiskFileClient } from "./index.js";
import { RiskTagClient } from "./index.js";
import { TagClient } from "./index.js";
import { TaskClient } from "./index.js";
import { TaskAssigneeClient } from "./index.js";
import { TaskFieldClient } from "./index.js";
import { TaskFileClient } from "./index.js";
import { TaskMetadataClient } from "./index.js";
import { TaskRecurrencyClient } from "./index.js";
import { TaskStatusClient } from "./index.js";
import { TaskTagClient } from "./index.js";
import { TaskTodoClient } from "./index.js";
import { TeamsClient } from "./index.js";
import { TimesheetClient } from "./index.js";
import { UserRoleClient } from "./index.js";
import { WorkSpaceClient } from "./index.js";
import axios from "axios";
import { default as FormData } from "form-data";
import fs from "fs";
import os from "os";
import url from "url";
/**
* Client object used to communicate with the API
*/
export class ProjectManagerClient {
// The URL of the environment we will use
serverUrl;
version = "152.0.138";
bearerToken = null;
sdkName = "TypeScript";
appName = null;
customHeaderFunc = null;
ApiKey;
Changeset;
Dashboard;
Discussion;
File;
Holiday;
HomeFile;
HourlyRate;
HourlyRatePeriod;
Integration;
IntegrationCategory;
IntegrationProvider;
License;
Me;
Meetings;
MeetingTag;
MeetingTodos;
Notification;
Npt;
NptDiscussion;
NptFiles;
NptRecurrency;
NptStatus;
NptTag;
NptTodos;
Project;
ProjectChargeCode;
ProjectCustomer;
ProjectField;
ProjectFile;
ProjectFolder;
ProjectMembers;
ProjectPriority;
ProjectStatus;
ProjectTemplate;
ProjectVersion;
Resource;
ResourceSkill;
ResourceTeam;
Risk;
RiskFile;
RiskTag;
Tag;
Task;
TaskAssignee;
TaskField;
TaskFile;
TaskMetadata;
TaskRecurrency;
TaskStatus;
TaskTag;
TaskTodo;
Teams;
Timesheet;
UserRole;
WorkSpace;
/**
* Internal constructor for the API client
*/
constructor(customUrl) {
this.serverUrl = customUrl;
this.ApiKey = new ApiKeyClient(this);
this.Changeset = new ChangesetClient(this);
this.Dashboard = new DashboardClient(this);
this.Discussion = new DiscussionClient(this);
this.File = new FileClient(this);
this.Holiday = new HolidayClient(this);
this.HomeFile = new HomeFileClient(this);
this.HourlyRate = new HourlyRateClient(this);
this.HourlyRatePeriod = new HourlyRatePeriodClient(this);
this.Integration = new IntegrationClient(this);
this.IntegrationCategory = new IntegrationCategoryClient(this);
this.IntegrationProvider = new IntegrationProviderClient(this);
this.License = new LicenseClient(this);
this.Me = new MeClient(this);
this.Meetings = new MeetingsClient(this);
this.MeetingTag = new MeetingTagClient(this);
this.MeetingTodos = new MeetingTodosClient(this);
this.Notification = new NotificationClient(this);
this.Npt = new NptClient(this);
this.NptDiscussion = new NptDiscussionClient(this);
this.NptFiles = new NptFilesClient(this);
this.NptRecurrency = new NptRecurrencyClient(this);
this.NptStatus = new NptStatusClient(this);
this.NptTag = new NptTagClient(this);
this.NptTodos = new NptTodosClient(this);
this.Project = new ProjectClient(this);
this.ProjectChargeCode = new ProjectChargeCodeClient(this);
this.ProjectCustomer = new ProjectCustomerClient(this);
this.ProjectField = new ProjectFieldClient(this);
this.ProjectFile = new ProjectFileClient(this);
this.ProjectFolder = new ProjectFolderClient(this);
this.ProjectMembers = new ProjectMembersClient(this);
this.ProjectPriority = new ProjectPriorityClient(this);
this.ProjectStatus = new ProjectStatusClient(this);
this.ProjectTemplate = new ProjectTemplateClient(this);
this.ProjectVersion = new ProjectVersionClient(this);
this.Resource = new ResourceClient(this);
this.ResourceSkill = new ResourceSkillClient(this);
this.ResourceTeam = new ResourceTeamClient(this);
this.Risk = new RiskClient(this);
this.RiskFile = new RiskFileClient(this);
this.RiskTag = new RiskTagClient(this);
this.Tag = new TagClient(this);
this.Task = new TaskClient(this);
this.TaskAssignee = new TaskAssigneeClient(this);
this.TaskField = new TaskFieldClient(this);
this.TaskFile = new TaskFileClient(this);
this.TaskMetadata = new TaskMetadataClient(this);
this.TaskRecurrency = new TaskRecurrencyClient(this);
this.TaskStatus = new TaskStatusClient(this);
this.TaskTag = new TaskTagClient(this);
this.TaskTodo = new TaskTodoClient(this);
this.Teams = new TeamsClient(this);
this.Timesheet = new TimesheetClient(this);
this.UserRole = new UserRoleClient(this);
this.WorkSpace = new WorkSpaceClient(this);
}
/**
* Construct a new API client to target the specific environment.
*
* Predefined environment names:
* * production - https://api.projectmanager.com
*
* @param env The name of the environment to use
* @returns The API client to use
*/
static withEnvironment(env) {
switch (env) {
case "production": return new ProjectManagerClient("https://api.projectmanager.com");
default: return new ProjectManagerClient(env);
}
}
/**
* Construct an unsafe client that uses a non-standard server; this can be necessary
* when using proxy servers or an API gateway. Please be careful when using this
* mode. You should prefer to use `withEnvironment()` instead wherever possible.
*
* @param unsafeUrl The custom environment URL to use for this client
* @returns The API client to use
*/
static withCustomEnvironment(unsafeUrl) {
return new ProjectManagerClient(unsafeUrl);
}
/**
* Configure this API client to use a JWT bearer token.
*
*
*
* @param token The JWT bearer token to use for this API session
*/
withBearerToken(token) {
this.bearerToken = token;
return this;
}
/**
* Configure a custom header function that will be called before all requests.
*
* This function can modify the request headers.
*
* @param func The async function to be called to modify headers before any request
* @returns The API client for function chaining
*/
withCustomHeaderFunc(func) {
this.customHeaderFunc = func;
return this;
}
/**
* Configures this API client to use an application name
*
* @param appName The Application Name to use for this API session
*/
withApplicationName(appName) {
this.appName = appName;
return this;
}
/**
* Construct headers for a request
*/
async getHeaders() {
const headers = {
SdkName: this.sdkName,
SdkVersion: this.version,
MachineName: os.hostname(),
};
if (this.appName !== null) {
headers["ApplicationName"] = this.appName;
}
if (this.bearerToken !== null) {
headers["Authorization"] = `Bearer ${this.bearerToken}`;
}
if (this.customHeaderFunc != null) {
return (await this.customHeaderFunc(headers));
}
else {
return headers;
}
}
/**
* Make a GET request using this client
*/
async request(method, path, options, body) {
const requestConfig = {
url: new url.URL(path, this.serverUrl).href,
method,
params: options,
data: body,
headers: await this.getHeaders(),
};
const result = await axios.request(requestConfig);
return result.data;
}
/**
* Upload a file to a REST endpoint and retrieve results as JSON
*/
async fileUpload(method, path, options, filename) {
const fileBuffer = await fs.promises.readFile(filename);
const formData = new FormData();
formData.append("file", fileBuffer);
const requestConfig = {
url: new url.URL(path, this.serverUrl).href,
method,
data: formData,
params: options,
headers: await this.getHeaders(),
};
const result = await axios.request(requestConfig);
return result.data;
}
/**
* Make a GET request using this client and download the results as a blob
*/
async requestBlob(method, path, options, body) {
const responseType = "blob";
const requestConfig = {
url: new url.URL(path, this.serverUrl).href,
method,
params: options,
data: body,
headers: await this.getHeaders(),
responseType,
};
const result = await axios.request(requestConfig);
return result.data;
}
}
//# sourceMappingURL=ProjectManagerClient.js.map