-
Notifications
You must be signed in to change notification settings - Fork 15
/
space.ts
116 lines (102 loc) · 4.37 KB
/
space.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import * as Models from './models';
import * as Parameters from './parameters';
import { Callback } from '../callback';
import { Client } from '../clients';
import { PaginationService } from '../services';
import { RequestConfig } from '../requestConfig';
export class Space {
private paginationService = new PaginationService();
constructor(private client: Client) {}
/** Fetches all spaces. */
async getAllSpaces<T = Models.Space[]>(
parameters: Parameters.GetSpaces | undefined,
callback: Callback<T>,
): Promise<void>;
/** Fetches all spaces. */
async getAllSpaces<T = Models.Space[]>(parameters?: Parameters.GetSpaces, callback?: never): Promise<T>;
async getAllSpaces<T = Models.Space[]>(parameters?: Parameters.GetSpaces, callback?: Callback<T>): Promise<void | T> {
try {
const { getAll: getAllSpaces } = await this.getSpaces(parameters);
const spaces = await getAllSpaces();
const responseHandler = this.client.getResponseHandler(callback);
return responseHandler(spaces as T);
} catch (e: any) {
const errorHandler = this.client.getErrorHandler(callback);
return errorHandler(e);
}
}
/**
* Returns all spaces. The results will be sorted by id ascending. The number of results is limited by the `limit`
* parameter and additional results (if available) will be available through the `next` URL present in the `Link`
* response header.
*
* **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site
* ('Can use' global permission). Only spaces that the user has permission to view will be returned.
*/
async getSpaces<T = Models.Pagination<Models.Space>>(
parameters: Parameters.GetSpaces | undefined,
callback: Callback<T>,
): Promise<void>;
/**
* Returns all spaces. The results will be sorted by id ascending. The number of results is limited by the `limit`
* parameter and additional results (if available) will be available through the `next` URL present in the `Link`
* response header.
*
* **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to access the Confluence site
* ('Can use' global permission). Only spaces that the user has permission to view will be returned.
*/
async getSpaces<T = Models.Pagination<Models.Space>>(parameters?: Parameters.GetSpaces, callback?: never): Promise<T>;
async getSpaces<T = Models.Pagination<Models.Space>>(
parameters?: Parameters.GetSpaces,
callback?: Callback<T>,
): Promise<void | T> {
const config: RequestConfig = {
url: '/spaces',
method: 'GET',
params: {
ids: parameters?.ids,
keys: parameters?.keys,
type: parameters?.type,
status: parameters?.status,
labels: parameters?.labels,
sort: parameters?.sort,
'description-format': parameters?.descriptionFormat,
cursor: parameters?.cursor,
limit: parameters?.limit,
'serialize-ids-as-strings': true,
},
};
try {
const spaces = await this.client.sendRequest<Models.Pagination<Models.Space>>(config);
const paginatedSpaces = this.paginationService.buildPaginatedResult(spaces, this.getSpaces.bind(this));
const responseHandler = this.client.getResponseHandler(callback);
return responseHandler(paginatedSpaces as T);
} catch (e: any) {
const errorHandler = this.client.getErrorHandler(callback);
return errorHandler(e);
}
}
/**
* Returns a specific space.
*
* **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the space.
*/
async getSpaceById<T = Models.Space>(parameters: Parameters.GetSpaceById, callback: Callback<T>): Promise<void>;
/**
* Returns a specific space.
*
* **[Permissions](https://confluence.atlassian.com/x/_AozKw) required**: Permission to view the space.
*/
async getSpaceById<T = Models.Space>(parameters: Parameters.GetSpaceById, callback?: never): Promise<T>;
async getSpaceById<T = Models.Space>(parameters: Parameters.GetSpaceById, callback?: Callback<T>): Promise<void | T> {
const config: RequestConfig = {
url: `/spaces/${parameters.id}`,
method: 'GET',
params: {
'description-format': parameters.descriptionFormat,
'serialize-ids-as-strings': true,
},
};
return this.client.sendRequest(config, callback);
}
}