declarations
Version:
[](https://www.npmjs.com/package/declarations)
1,333 lines (1,200 loc) • 100 kB
TypeScript
// Type definitions for node-asana 0.14.0
// Project: https://github.com/Asana/node-asana
// Definitions by: Qubo <https://github.com/tkqubo>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
/// <reference path="../bluebird/bluebird-2.0.d.ts" />
/// <reference path="../request/request.d.ts" />
declare module "asana" {
import * as Promise from 'bluebird';
namespace asana {
var Client: ClientStatic;
interface ClientStatic {
/**
* Constructs a Client with instances of all the resources using the dispatcher.
* It also keeps a reference to the dispatcher so that way the end user can have
* access to it.
* @class
* @classdesc A wrapper for the Asana API which is authenticated for one user
* @param {Dispatcher} dispatcher The request dispatcher to use
* @param {Object} options Options to configure the client
* @param {String} [clientId] ID of the client, required for Oauth
* @param {String} [clientSecret] Secret key, for some Oauth flows
* @param {String} [redirectUri] Default redirect URI for this client
* @param {String} [asanaBaseUrl] Base URL for Asana, for debugging
*/
(dispatcher: Dispatcher, options?: ClientOptions): asana.Client;
/**
* Creates a new client.
* @param {Object} options Options for specifying the client, see constructor.
*/
create(options?: ClientOptions): Client;
}
/** Options to configure the client */
interface ClientOptions extends DispatcherOptions {
clientId?: string|number;
clientSecret?: string;
redirectUri?: string;
asanaBaseUrl?: string;
}
interface Client {
/**
* Ensures the client is authorized to make requests. Kicks off the
* configured Oauth flow, if any.
*
* @returns {Promise<Client>} A promise that resolves to this client when
* authorization is complete.
*/
authorize(): Promise<Client>;
/**
* Configure the Client to use a user's API Key and then authenticate
* through HTTP Basic Authentication. This should only be done for testing,
* as requests using Oauth can provide more security, higher rate limits, and
* more features.
* @param {String} apiKey The Asana Api Key of the user
* @return {Client} this
* @param apiKey
* @return
*/
useBasicAuth(apiKey: string): this;
/**
* Configure the client to authenticate using a Personal Access Token.
* @param {String} accessToken The Personal Access Token to use for
* authenticating requests.
* @return {Client} this
* @param accessToken
* @return
*/
useAccessToken(accessToken: string): this;
/**
* Configure the client to authenticate via Oauth. Credentials can be
* supplied, or they can be obtained by running an Oauth flow.
* @param {Object} options Options for Oauth. Includes any options for
* the selected flow.
* @option {Function} [flowType] Type of OauthFlow to use to obtain user
* authorization. Defaults to autodetect based on environment.
* @option {Object} [credentials] Credentials to use; no flow required to
* obtain authorization. This object should at a minimum contain an
* `access_token` string field.
* @return {Client} this
* @param options
* @return
*/
useOauth(options?: auth.OauthAuthenticatorOptions): this;
/**
* The internal dispatcher. This is mostly used by the resources but provided
* for custom requests to the API or API features that have not yet been added
* to the client.
* @type {Dispatcher}
*/
dispatcher: Dispatcher;
/**
* An instance of the Attachments resource.
* @type {Attachments}
*/
attachments: resources.Attachments;
/**
* An instance of the Events resource.
* @type {Events}
*/
events: resources.Events;
/**
* An instance of the Projects resource.
* @type {Projects}
*/
projects: resources.Projects;
/**
* An instance of the Stories resource.
* @type {Stories}
*/
stories: resources.Stories;
/**
* An instance of the Tags resource.
* @type {Tags}
*/
tags: resources.Tags;
/**
* An instance of the Tasks resource.
* @type {Tasks}
*/
tasks: resources.Tasks;
/**
* An instance of the Teams resource.
* @type {Teams}
*/
teams: resources.Teams;
/**
* An instance of the Users resource.
* @type {Users}
*/
users: resources.Users;
/**
* An instance of the Workspaces resource.
* @type {Workspaces}
*/
workspaces: resources.Workspaces;
/**
* Store off Oauth info.
*/
app: auth.App;
}
var Dispatcher: DispatcherStatic;
interface DispatcherStatic {
/**
* Creates a dispatcher which will act as a basic wrapper for making HTTP
* requests to the API, and handle authentication.
* @class
* @classdesc A HTTP wrapper for the Asana API
* @param {Object} options for default behavior of the Dispatcher
* @option {Authenticator} [authenticator] Object to use for authentication.
* Can also be set later with `setAuthenticator`.
* @option {String} [retryOnRateLimit] Automatically handle `RateLimitEnforced`
* errors by sleeping and retrying after the waiting period.
* @option {Function} [handleUnauthorized] Automatically handle
* `NoAuthorization` with the callback. If the callback returns `true`
* (or a promise resolving to `true), will retry the request.
* @option {String} [asanaBaseUrl] Base URL for Asana, for debugging
* @option {Number} [requestTimeout] Timeout (in milliseconds) to wait for the
* request to finish.
*/
new (options?: DispatcherOptions): Dispatcher;
/**
* Default handler for requests that are considered unauthorized.
* Requests that the authenticator try to refresh its credentials if
* possible.
* @return {Promise<boolean>} True iff refresh was successful, false if not.
* @return
*/
maybeReauthorize(): Promise<boolean>;
/**
* The relative API path for the current version of the Asana API.
* @type {String}
*/
API_PATH : string;
}
interface DispatcherOptions {
authenticator?: auth.Authenticator;
retryOnRateLimit?: boolean;
handleUnauthorized?: () => boolean|Promise<boolean>;
requestTimeout?: string;
}
interface Dispatcher {
/**
* Creates an Asana API Url by concatenating the ROOT_URL with path provided.
* @param {String} path The path
* @return {String} The url
* @param path
* @return
*/
url(path: string): string;
/**
* Configure the authentication mechanism to use.
* @returns {Dispatcher} this
* @param authenticator
* @return
*/
setAuthenticator(authenticator: auth.Authenticator): this;
/**
* Ensure the dispatcher is authorized to make requests. Call this before
* making any API requests.
*
* @returns {Promise} Resolves when the dispatcher is authorized, rejected if
* there was a problem authorizing.
* @return
*/
authorize(): Promise<void>;
/**
* Dispatches a request to the Asana API. The request parameters are passed to
* the request module.
* @param {Object} params The params for request
* @param {Object} [dispatchOptions] Options for handling request/response
* @return {Promise} The response for the request
* @param params
* @param dispatchOptions?
* @return
*/
dispatch(params: any, dispatchOptions?: any): Promise<any>;
/**
* Dispatches a GET request to the Asana API.
* @param {String} path The path of the API
* @param {Object} [query] The query params
* @param {Object} [dispatchOptions] Options for handling the request and
* response. See `dispatch`.
* @return {Promise} The response for the request
* @param path
* @param query?
* @param dispatchOptions?
* @return
*/
get(path: string, query?: any, dispatchOptions?: any): Promise<any>;
/**
* Dispatches a POST request to the Asana API.
* @param {String} path The path of the API
* @param {Object} data The data to be sent
* @param {Object} [dispatchOptions] Options for handling the request and
* response. See `dispatch`.
* @return {Promise} The response for the request
* @param path
* @param data
* @param dispatchOptions?
* @return
*/
post(path: string, data: any, dispatchOptions?: any): Promise<any>;
/**
* Dispatches a PUT request to the Asana API.
* @param {String} path The path of the API
* @param {Object} data The data to be sent
* @param {Object} [dispatchOptions] Options for handling the request and
* response. See `dispatch`.
* @return {Promise} The response for the request
* @param path
* @param data
* @param dispatchOptions?
* @return
*/
put(path: string, data: any, dispatchOptions?: any): Promise<any>;
/**
* Dispatches a DELETE request to the Asana API.
* @param {String} path The path of the API
* @param {Object} [dispatchOptions] Options for handling the request and
* response. See `dispatch`.
* @return {Promise} The response for the request
* @param path
* @param dispatchOptions?
* @return
*/
delete(path: string, dispatchOptions?: any): Promise<any>;
/**
* The base URL for Asana
* @type {String}
*/
asanaBaseUrl : string;
/**
* Whether requests should be automatically retried if rate limited.
* @type {Boolean}
*/
retryOnRateLimit : boolean;
/**
* Handler for unauthorized requests which may seek reauthorization.
* Default behavior is available if configured with an Oauth authenticator
* that has a refresh token, and will refresh the current access token.
* @type {Function}
*/
handleUnauthorized : () => boolean|Promise<boolean>;
/**
* The amount of time in milliseconds to wait for a request to finish.
* @type {Number}
*/
requestTimeout : number;
}
namespace auth {
var BasicAuthenticator: BasicAuthenticatorStatic;
interface BasicAuthenticatorStatic {
/**
* @param apiKey
*/
new (apiKey: string): BasicAuthenticator;
}
interface BasicAuthenticator extends Authenticator {
/**
* @param {Object} request The request to modify, for the `request` library.
* @return {Object} The `request` parameter, modified to include authentication
* information using the stored credentials.
* @param request
* @return
*/
authenticateRequest(request: BasicAuthenticatorRequest): BasicAuthenticatorRequest;
}
interface BasicAuthenticatorRequest {
auth : {
username : string;
password : string;
}
}
var OauthAuthenticator: OauthAuthenticatorStatic;
interface OauthAuthenticatorStatic {
/**
* Creates an authenticator that uses Oauth for authentication.
*
* @param {Object} options Configure the authenticator; must specify one
* of `flow` or `credentials`.
* @option {App} app The app being authenticated for.
* @option {OauthFlow} [flow] The flow to use to get credentials
* when needed.
* @option {String|Object} [credentials] Initial credentials to use. This can
* be either the object returned from an access token request (which
* contains the token and some other metadata) or just the `access_token`
* field.
* @constructor
*/
new (options: OauthAuthenticatorOptions): OauthAuthenticator;
}
interface OauthAuthenticatorOptions {
flowType?: auth.FlowType;
credentials?: Credentials|string;
}
interface Credentials {
access_token?: string;
refresh_token?: string;
}
interface OauthAuthenticator extends Authenticator {
/**
* @param {Object} request The request to modify, for the `request` library.
* @return {Object} The `request` parameter, modified to include authentication
* information using the stored credentials.
* @param request
* @return
*/
authenticateRequest(request: OauthAuthenticatorRequest): OauthAuthenticatorRequest;
}
interface OauthAuthenticatorRequest {
/**
* When browserify-d, the `auth` component of the `request` library
* doesn't work so well, so we just manually set the bearer token instead.
*/
headers : {
Authorization : string;
}
}
/**
* A layer to abstract the differences between using different types of
* authentication (Oauth vs. Basic). The Authenticator is responsible for
* establishing credentials and applying them to outgoing requests.
* @constructor
*/
interface Authenticator {
/**
* Establishes credentials.
*
* @return {Promise} Resolves when initial credentials have been
* completed and `authenticateRequest` calls can expect to succeed.
* @return
*/
establishCredentials(): Promise<void>;
/**
* Attempts to refresh credentials, if possible, given the current credentials.
*
* @return {Promise} Resolves to `true` if credentials have been successfully
* established and `authenticateRequests` can expect to succeed, else
* resolves to `false`.
* @return
*/
refreshCredentials(): Promise<boolean>;
}
var App: AppStatic;
interface AppStatic {
/**
* An abstraction around an App used with Asana.
*
* @options {Object} Options to construct the app
* @option {String} clientId The ID of the app
* @option {String} [clientSecret] The secret key, if available here
* @option {String} [redirectUri] The default redirect URI
* @option {String} [scope] Scope to use, supports `default` and `scim`
* @option {String} [asanaBaseUrl] Base URL to use for Asana, for debugging
* @constructor
*/
new (options: AppOptions): App;
}
interface AppOptions extends AsanaAuthorizeUrlOptions {
clientId?: string|number;
clientSecret?: string;
scope?: string;
}
interface App {
/**
* @param {Object} options Overrides to the app's defaults
* @option {String} asanaBaseUrl
* @option {String} redirectUri
* @returns {String} The URL used to authorize a user for the app.
* @param options
* @return
*/
asanaAuthorizeUrl(options?: AsanaAuthorizeUrlOptions): string;
/**
* @param {Object} options Overrides to the app's defaults
* @option {String} asanaBaseUrl
* @option {String} redirectUri
* @returns {String} The URL used to acquire an access token.
* @param options
* @return
*/
asanaTokenUrl(options?: AsanaAuthorizeUrlOptions): string;
/**
* @param {String} code An authorization code obtained via `asanaAuthorizeUrl`.
* @param {Object} options Overrides to the app's defaults
* @option {String} asanaBaseUrl
* @option {String} redirectUri
* @return {Promise<Object>} The token, which will include the `access_token`
* used for API access, as well as a `refresh_token` which can be stored
* to get a new access token without going through the flow again.
* @param code
* @param options
* @return
*/
accessTokenFromCode(code: string, options?: AsanaAuthorizeUrlOptions): Promise<Credentials>;
/**
* @param {String} refreshToken A refresh token obtained via Oauth.
* @param {Object} options Overrides to the app's defaults
* @option {String} asanaBaseUrl
* @option {String} redirectUri
* @return {Promise<Object>} The token, which will include the `access_token`
* used for API access.
* @param refreshToken
* @param options
* @return
*/
accessTokenFromRefreshToken(refreshToken: string, options: AsanaAuthorizeUrlOptions): Promise<Credentials>;
scope : string;
asanaBaseUrl : string;
}
interface AsanaAuthorizeUrlOptions {
redirectUri?: string;
asanaBaseUrl?: string;
}
var OauthError: OauthErrorStatic;
interface OauthErrorStatic {
/**
* @param options {Object} A data blob parsed from a query string or JSON
* response from the Asana API
* @option {String} error The string code identifying the error.
* @option {String} [error_uri] A link to help and information about the error.
* @option {String} [error_description] A description of the error.
* @constructor
*/
new (options: OauthErrorOptions): OauthError;
}
interface OauthErrorOptions {
error?: string;
error_uri?: string;
error_description?: string;
}
interface OauthError extends Error {
}
/**
* Auto-detects the type of Oauth flow to use that's appropriate to the
* environment.
*
* @returns {Function|null} The type of Oauth flow to use, or null if no
* appropriate type could be determined.
* @param env
* @return
*/
function autoDetect(env: any): Function;
var RedirectFlow: RedirectFlowStatic;
interface RedirectFlowStatic extends FlowType {
/**
* An Oauth flow that runs in the browser and requests user authorization by
* redirecting to an authorization page on Asana, and redirecting back with
* the credentials.
* @param {Object} options See `BaseBrowserFlow` for options.
* @constructor
*/
new (options: any): RedirectFlow;
}
interface RedirectFlow extends BaseBrowserFlow {
}
var PopupFlow: PopupFlowStatic;
interface PopupFlowStatic extends FlowType {
/**
* An Oauth flow that runs in the browser and requests user authorization by
* popping up a window and prompting the user.
* @param {Object} options See `BaseBrowserFlow` for options.
* @constructor
*/
new (options: any): PopupFlow;
}
interface PopupFlow extends BaseBrowserFlow {
/**
* @param popupWidth
* @param popupHeight
*/
_popupParams(popupWidth: number, popupHeight: number): void;
runReceiver(): void;
}
var NativeFlow: NativeFlowStatic;
interface NativeFlowStatic extends FlowType {
/**
* An Oauth flow that can be run from the console or an app that does
* not have the ability to open and manage a browser on its own.
* @param {Object} options
* @option {App} app App to authenticate for
* @option {String function(String)} [instructions] Function returning the
* instructions to output to the user. Passed the authorize url.
* @option {String function()} [prompt] String to output immediately before
* waiting for a line from stdin.
* @constructor
*/
new (options: any): NativeFlow;
}
interface NativeFlow extends Flow {
/**
* Run the Oauth flow, prompting the user to go to the authorization URL
* and enter the code it displays when finished.
*
* @return {Promise<Object>} The access token object, which will include
* `access_token` and `refresh_token`.
*/
run(): void;
/**
* @param {String} code An authorization code obtained via `asanaAuthorizeUrl`.
* @return {Promise<Object>} The token, which will include the `access_token`
* used for API access, as well as a `refresh_token` which can be stored
* to get a new access token without going through the flow again.
* @param code
*/
accessToken(code: string): void;
/**
* @return {Promise} The access token, which will include a refresh token
* that can be stored in the future to create a client without going
* through the Oauth flow.
* @param url
* @return
*/
promptForCode(url: string): any;
}
var ChromeExtensionFlow: ChromeExtensionFlowStatic;
interface ChromeExtensionFlowStatic extends FlowType {
/**
* An Oauth flow that runs in a Chrome browser extension and requests user
* authorization by opening a temporary tab to prompt the user.
* @param {Object} options See `BaseBrowserFlow` for options, plus the below:
* @options {String} [receiverPath] Full path and filename from the base
* directory of the extension to the receiver page. This is an HTML file
* that has been made web-accessible, and that calls the receiver method
* `Asana.auth.ChromeExtensionFlow.runReceiver();`.
* @constructor
*/
new (options: any): ChromeExtensionFlow;
}
interface ChromeExtensionFlow extends BaseBrowserFlow {
/**
* Runs the receiver code to send the Oauth result to the requesting tab.
*/
runReceiver(): void;
}
var BaseBrowserFlow: BaseBrowserFlowStatic;
interface BaseBrowserFlowStatic extends FlowType {
/**
* A base class for any flow that runs in the browser. All subclasses use the
* "implicit grant" flow to authenticate via the browser.
* @param {Object} options
* @option {App} app The app this flow is for
* @option {String} [redirectUri] The URL that Asana should redirect to once
* user authorization is complete. Defaults to the URL configured in
* the app, and if none then the current page URL.
* @constructor
*/
new (options: any): BaseBrowserFlow;
}
interface BaseBrowserFlow extends Flow {
/**
* @param {String} authUrl The URL the user should be navigated to in order
* to authorize the app.
* @param {String} state The unique state generated for this auth request.
* @return {Promise} Resolved when authorization has successfully started,
* i.e. the user has been navigated to a page requesting authorization.
* @param authUrl
* @param state
* @return
*/
startAuthorization(authUrl: string, state: string): any;
/**
* @return {Promise<Object>} Credentials returned from Oauth.
* @param state
*/
finishAuthorization(state: string): void;
/**
* @return {String} The URL to redirect to that will receive the
* @return
*/
receiverUrl(): string;
/**
* @return {String} The URL to redirect to that will receive the
* @return
*/
asanaBaseUrl(): string;
/**
* @returns {String} Generate a new unique state parameter for a request.
* @return
*/
getStateParam(): string;
}
interface FlowType {
new (options: any): Flow;
}
interface Flow {
/**
* @returns {String} The URL used to authorize the user for the app.
* @return
*/
authorizeUrl(): string;
/**
* Run the appropriate parts of the Oauth flow, attempting to establish user
* authorization.
* @returns {Promise<Object>} A promise that resolves to the Oauth credentials.
*/
run(): void;
}
}
namespace errors {
class AsanaError extends Error {
/**
* @param message
* @return
*/
constructor(message: any);
code: number;
value: any;
}
class Forbidden extends AsanaError {
/**
* @param value
* @return
*/
constructor(value: any);
}
class InvalidRequest extends AsanaError {
/**
* @param value
* @return
*/
constructor(value: any);
}
class NoAuthorization extends AsanaError {
/**
* @param value
* @return
*/
constructor(value: any);
}
class NotFound extends AsanaError {
/**
* @param value
* @return
*/
constructor(value: any);
}
class RateLimitEnforced extends AsanaError {
/**
* @param value
* @return
*/
constructor(value: any);
}
class ServerError extends AsanaError {
/**
* @param value
* @return
*/
constructor(value: any);
}
}
namespace resources {
interface AttachmentsStatic {
/**
* @param dispatcher
*/
new (dispatcher: Dispatcher): Attachments;
}
namespace Attachments {
interface Type extends Resource {
created_at: string;
permanent_url: string;
download_url: string;
view_url: string;
host: string;
parent: Resource;
}
}
var Attachments: AttachmentsStatic;
/**
* An _attachment_ object represents any file attached to a task in Asana,
* whether it's an uploaded file or one associated via a third-party service
* such as Dropbox or Google Drive.
* @class
* @param {Dispatcher} dispatcher The API dispatcher
*/
interface Attachments extends Resource {
/**
* * Returns the full record for a single attachment.
* * @param {Number} attachment Globally unique identifier for the attachment.
* * @param {Object} [params] Parameters for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The requested resource
* @param attachment
* @param params?
* @param dispatchOptions?
* @return
*/
findById(attachment: number, params?: Params, dispatchOptions?: any): Promise<Attachments.Type>;
/**
* * Returns the compact records for all attachments on the task.
* * @param {Number} task Globally unique identifier for the task.
* * @param {Object} [params] Parameters for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param task
* @param params?
* @param dispatchOptions?
* @return
*/
findByTask(task: number, params?: PaginationParams, dispatchOptions?: any): Promise<ResourceList<Attachments.Type>>;
}
interface EventsStatic {
/**
* @param dispatcher
* @return
*/
new (dispatcher: Dispatcher): Events;
}
var Events: EventsStatic;
/**
* An _event_ is an object representing a change to a resource that was observed
* by an event subscription.
*
* In general, requesting events on a resource is faster and subject to higher
* rate limits than requesting the resource itself. Additionally, change events
* bubble up - listening to events on a project would include when stories are
* added to tasks in the project, even on subtasks.
*
* Establish an initial sync token by making a request with no sync token.
* The response will be a `412` error - the same as if the sync token had
* expired.
*
* Subsequent requests should always provide the sync token from the immediately
* preceding call.
*
* Sync tokens may not be valid if you attempt to go 'backward' in the history
* by requesting previous tokens, though re-requesting the current sync token
* is generally safe, and will always return the same results.
*
* When you receive a `412 Precondition Failed` error, it means that the
* sync token is either invalid or expired. If you are attempting to keep a set
* of data in sync, this signals you may need to re-crawl the data.
*
* Sync tokens always expire after 24 hours, but may expire sooner, depending on
* load on the service.
* @class
* @param {Dispatcher} dispatcher The API dispatcher
*/
interface Events extends Resource { }
interface ProjectsStatic {
/**
* @param dispatcher
*/
new (dispatcher: Dispatcher): Projects;
}
namespace Projects {
interface Type extends Resource {
created_at: string;
modified_at: string;
due_date: string;
current_status: Status;
public: boolean;
archived: boolean;
notes: string;
color: string;
workspace: Resource;
team: Resource;
members: Resource[];
followers: Resource[];
}
interface CreateParams {
name?: string;
team?: number;
public?: boolean;
due_date: string;
notes?: string;
color?: string;
}
interface FollowersParams {
followers: (number|string)[];
}
interface MembersParams {
members: (number|string)[];
}
interface Status {
color: string;
text: string;
html_text: string;
modified_at: string;
author: Resource;
}
interface FindAllParams extends PaginationParams {
team?: number;
archived?: boolean;
}
interface FindByParams extends PaginationParams {
archived?: boolean;
}
}
var Projects: ProjectsStatic;
/**
* A _project_ represents a prioritized list of tasks in Asana. It exists in a
* single workspace or organization and is accessible to a subset of users in
* that workspace or organization, depending on its permissions.
*
* Projects in organizations are shared with a single team. You cannot currently
* change the team of a project via the API. Non-organization workspaces do not
* have teams and so you should not specify the team of project in a
* regular workspace.
* @class
* @param {Dispatcher} dispatcher The API dispatcher
*/
interface Projects extends Resource {
/**
* * Creates a new project in a workspace or team.
* *
* * Every project is required to be created in a specific workspace or
* * organization, and this cannot be changed once set. Note that you can use
* * the `workspace` parameter regardless of whether or not it is an
* * organization.
* *
* * If the workspace for your project _is_ an organization, you must also
* * supply a `team` to share the project with.
* *
* * Returns the full record of the newly created project.
* * @param {Object} data Data for the request
* * @param {String} data.workspace The workspace or organization to create the project in.
* * @param {String} [data.team] If creating in an organization, the specific team to create the
* * project in.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param data
* @param dispatchOptions?
* @return
*/
create(data: Projects.CreateParams & { workspace: number }, dispatchOptions?: any): Promise<Projects.Type>;
/**
* * If the workspace for your project _is_ an organization, you must also
* * supply a `team` to share the project with.
* *
* * Returns the full record of the newly created project.
* * @param {Number} workspace The workspace or organization to create the project in.
* * @param {Object} data Data for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param workspace
* @param data
* @param dispatchOptions?
* @return
*/
createInWorkspace(workspace: number, data: Projects.CreateParams, dispatchOptions?: any): Promise<Projects.Type>;
/**
* * Creates a project shared with the given team.
* *
* * Returns the full record of the newly created project.
* * @param {Number} team The team to create the project in.
* * @param {Object} data Data for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param team
* @param data
* @param dispatchOptions?
* @return
*/
createInTeam(team: number, data: Projects.CreateParams, dispatchOptions?: any): Promise<Projects.Type>;
/**
* * Returns the complete project record for a single project.
* * @param {Number} project The project to get.
* * @param {Object} [params] Parameters for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The requested resource
* @param project
* @param params?
* @param dispatchOptions?
* @return
*/
findById(project: number, params?: Params, dispatchOptions?: any): Promise<Projects.Type>;
/**
* * A specific, existing project can be updated by making a PUT request on the
* * URL for that project. Only the fields provided in the `data` block will be
* * updated; any unspecified fields will remain unchanged.
* *
* * When using this method, it is best to specify only those fields you wish
* * to change, or else you may overwrite changes made by another user since
* * you last retrieved the task.
* *
* * Returns the complete updated project record.
* * @param {Number} project The project to update.
* * @param {Object} data Data for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param project
* @param data
* @param dispatchOptions?
* @return
*/
update(project: number, data: Projects.CreateParams, dispatchOptions?: any): Promise<Projects.Type>;
/**
* * A specific, existing project can be deleted by making a DELETE request
* * on the URL for that project.
* *
* * Returns an empty data record.
* * @param {Number} project The project to delete.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param project
* @param dispatchOptions?
* @return
*/
delete(project: number, dispatchOptions?: any): Promise<void>;
/**
* * Returns the compact project records for some filtered set of projects.
* * Use one or more of the parameters provided to filter the projects returned.
* * @param {Object} [params] Parameters for the request
* * @param {String} [params.workspace] The workspace or organization to filter projects on.
* * @param {String} [params.team] The team to filter projects on.
* * @param {Boolean} [params.archived] Only return projects whose `archived` field takes on the value of
* * this parameter.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param params?
* @param dispatchOptions?
* @return
*/
findAll(params?: Projects.FindAllParams, dispatchOptions?: any): Promise<ResourceList<Projects.Type>>;
/**
* * Returns the compact project records for all projects in the workspace.
* * @param {Number} workspace The workspace or organization to find projects in.
* * @param {Object} [params] Parameters for the request
* * @param {Boolean} [params.archived] Only return projects whose `archived` field takes on the value of
* * this parameter.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param workspace
* @param params?
* @param dispatchOptions?
* @return
*/
findByWorkspace(workspace: number, params?: Projects.FindByParams, dispatchOptions?: any): Promise<ResourceList<Projects.Type>>;
/**
* * Returns the compact project records for all projects in the team.
* * @param {Number} team The team to find projects in.
* * @param {Object} [params] Parameters for the request
* * @param {Boolean} [params.archived] Only return projects whose `archived` field takes on the value of
* * this parameter.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param team
* @param params?
* @param dispatchOptions?
* @return
*/
findByTeam(team: number, params?: Projects.FindByParams, dispatchOptions?: any): Promise<ResourceList<Projects.Type>>;
/**
* * Returns compact records for all sections in the specified project.
* * @param {Number} project The project to get sections from.
* * @param {Object} [params] Parameters for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param project
* @param params?
* @param dispatchOptions?
* @return
*/
sections(project: number, params?: PaginationParams, dispatchOptions?: any): Promise<ResourceList<Tasks.Type>>;
/**
* * Returns the compact task records for all tasks within the given project,
* * ordered by their priority within the project. Tasks can exist in more than one project at a time.
* * @param {Number} project The project in which to search for tasks.
* * @param {Object} [params] Parameters for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param project
* @param params?
* @param dispatchOptions?
* @return
*/
tasks(project: number, params?: PaginationParams, dispatchOptions?: any): Promise<ResourceList<Tasks.Type>>;
/**
* * Adds the specified list of users as followers to the project. Followers are a subset of members, therefore if
* * the users are not already members of the project they will also become members as a result of this operation.
* * Returns the updated project record.
* * @param {Number} project The project to add followers to.
* * @param {Object} data Data for the request
* * @param {Array} data.followers An array of followers to add to the project.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param project
* @param data
* @param dispatchOptions?
* @return
*/
addFollowers(project: number, data: Projects.FollowersParams, dispatchOptions?: any): Promise<Projects.Type>;
/**
* * Removes the specified list of users from following the project, this will not affect project membership status.
* * Returns the updated project record.
* * @param {Number} project The project to remove followers from.
* * @param {Object} data Data for the request
* * @param {Array} data.followers An array of followers to remove from the project.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param project
* @param data
* @param dispatchOptions?
* @return
*/
removeFollowers(project: number, data: Projects.FollowersParams, dispatchOptions?: any): Promise<Projects.Type>;
/**
* * Adds the specified list of users as members of the project. Returns the updated project record.
* * @param {Number} project The project to add members to.
* * @param {Object} data Data for the request
* * @param {Array} data.members An array of members to add to the project.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param project
* @param data
* @param dispatchOptions?
* @return
*/
addMembers(project: number, data: Projects.MembersParams, dispatchOptions?: any): Promise<Projects.Type>;
/**
* * Removes the specified list of members from the project. Returns the updated project record.
* * @param {Number} project The project to remove members from.
* * @param {Object} data Data for the request
* * @param {Array} data.members An array of members to remove from the project.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param project
* @param data
* @param dispatchOptions?
* @return
*/
removeMembers(project: number, data: Projects.MembersParams, dispatchOptions?: any): Promise<Projects.Type>;
}
interface StoriesStatic {
/**
* @param dispatcher
*/
new (dispatcher: Dispatcher): Stories;
}
namespace Stories {
interface ShortType extends Resource {
created_at: string;
created_by: Resource;
type: string;
text: string;
}
interface Type extends ShortType {
html_text: string;
source: string;
target: Resource;
hearts: Type[];
}
}
var Stories: StoriesStatic;
/**
* A _story_ represents an activity associated with an object in the Asana
* system. Stories are generated by the system whenever users take actions such
* as creating or assigning tasks, or moving tasks between projects. _Comments_
* are also a form of user-generated story.
*
* Stories are a form of history in the system, and as such they are read-only.
* Once generated, it is not possible to modify a story.
* @class
* @param {Dispatcher} dispatcher The API dispatcher
*/
interface Stories extends Resource {
/**
* * Returns the compact records for all stories on the task.
* * @param {Number} task Globally unique identifier for the task.
* * @param {Object} [params] Parameters for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param task
* @param params?
* @param dispatchOptions?
* @return
*/
findByTask(task: number, params?: PaginationParams, dispatchOptions?: any): Promise<ResourceList<Stories.Type>>;
/**
* * Returns the full record for a single story.
* * @param {Number} story Globally unique identifier for the story.
* * @param {Object} [params] Parameters for the request
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The requested resource
* @param story
* @param params?
* @param dispatchOptions?
* @return
*/
findById(story: number, params?: Params, dispatchOptions?: any): Promise<Stories.Type>;
/**
* * Adds a comment to a task. The comment will be authored by the
* * currently authenticated user, and timestamped when the server receives
* * the request.
* *
* * Returns the full record for the new story added to the task.
* * @param {Number} task Globally unique identifier for the task.
* * @param {Object} data Data for the request
* * @param {String} data.text The plain text of the comment to add.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param task
* @param data
* @param dispatchOptions?
* @return
*/
createOnTask(task: number, data: any, dispatchOptions?: any): Promise<ResourceList<Stories.ShortType>>;
}
interface TagsStatic {
/**
* @param dispatcher
*/
new (dispatcher: Dispatcher): Tags;
}
namespace Tags {
interface Type extends Resource {
created_at: string;
notes: string;
workspace: Resource;
color: string;
followers: Resource[];
}
interface FindAllParams extends PaginationParams {
team?: number;
archived?: boolean;
}
}
var Tags: TagsStatic;
/**
* A _tag_ is a label that can be attached to any task in Asana. It exists in a
* single workspace or organization.
*
* Tags have some metadata associated with them, but it is possible that we will
* simplify them in the future so it is not encouraged to rely too heavily on it.
* Unlike projects, tags do not provide any ordering on the tasks they
* are associated with.
* @class
* @param {Dispatcher} dispatcher The API dispatcher
*/
interface Tags extends Resource {
/**
* * Creates a new tag in a workspace or organization.
* *
* * Every tag is required to be created in a specific workspace or
* * organization, and this cannot be changed once set. Note that you can use
* * the `workspace` parameter regardless of whether or not it is an
* * organization.
* *
* * Returns the full record of the newly created tag.
* * @param {Object} data Data for the request
* * @param {String} data.workspace The workspace or organization to create the tag in.
* * @param {Object} [dispatchOptions] Options, if any, to pass the dispatcher for the request
* * @return {Promise} The response from the API
* @param data
* @param dispatchOptions?
* @return
*/
create(data: Tags.Type & { workspace: string }, dispatchOptions?: any): Promise<Tags.Type>;
/**
* * Creates a new tag in a workspace or organization.
* *
* * Every tag is required to be created in a specific workspace or
* * organization, and this cannot be changed once set. Note that you can use
* * the `workspace` parameter regardless of whether or not it is an
* * organization.
* *
* * Returns the full record of the newly created tag.
* * @param {Number} workspace The workspace or