@api-client/core 0.3.6 → 0.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/browser.d.ts +5 -1
- package/build/browser.js +7 -0
- package/build/browser.js.map +1 -1
- package/build/index.d.ts +6 -2
- package/build/index.js +7 -0
- package/build/index.js.map +1 -1
- package/build/src/lib/calculators/DataCalculator.d.ts +27 -0
- package/build/src/lib/calculators/DataCalculator.js +88 -0
- package/build/src/lib/calculators/DataCalculator.js.map +1 -0
- package/build/src/lib/parsers/UrlEncoder.d.ts +51 -0
- package/build/src/lib/parsers/UrlEncoder.js +74 -0
- package/build/src/lib/parsers/UrlEncoder.js.map +1 -0
- package/build/src/lib/parsers/UrlParser.d.ts +104 -0
- package/build/src/lib/parsers/UrlParser.js +189 -0
- package/build/src/lib/parsers/UrlParser.js.map +1 -0
- package/build/src/lib/parsers/UrlValueParser.d.ts +92 -0
- package/build/src/lib/parsers/UrlValueParser.js +172 -0
- package/build/src/lib/parsers/UrlValueParser.js.map +1 -0
- package/build/src/models/User.d.ts +25 -9
- package/build/src/runtime/store/StoreSdk.d.ts +12 -0
- package/build/src/runtime/store/StoreSdk.js +57 -0
- package/build/src/runtime/store/StoreSdk.js.map +1 -1
- package/build/src/testing/TestCliHelper.d.ts +7 -1
- package/build/src/testing/TestCliHelper.js +10 -1
- package/build/src/testing/TestCliHelper.js.map +1 -1
- package/package.json +2 -2
- package/src/lib/calculators/DataCalculator.ts +91 -0
- package/src/lib/parsers/UrlEncoder.ts +74 -0
- package/src/lib/parsers/UrlParser.ts +201 -0
- package/src/lib/parsers/UrlValueParser.ts +211 -0
- package/src/models/User.ts +26 -9
- package/src/runtime/store/StoreSdk.ts +57 -0
- package/src/testing/TestCliHelper.ts +12 -1
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { UrlValueParser } from './UrlValueParser.js';
|
|
2
|
+
/**
|
|
3
|
+
* A class to parse URL string.
|
|
4
|
+
*/
|
|
5
|
+
export class UrlParser extends UrlValueParser {
|
|
6
|
+
/**
|
|
7
|
+
* @param value The URL value
|
|
8
|
+
*/
|
|
9
|
+
constructor(value, opts) {
|
|
10
|
+
super(opts);
|
|
11
|
+
this.value = value;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns protocol value in format `protocol` + ':'
|
|
15
|
+
*
|
|
16
|
+
* @return The value of the protocol or `undefined` if the value is not set
|
|
17
|
+
*/
|
|
18
|
+
get protocol() {
|
|
19
|
+
return this.__data.protocol;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Sets value of the `protocol`
|
|
23
|
+
*
|
|
24
|
+
* @param value Protocol value.
|
|
25
|
+
*/
|
|
26
|
+
set protocol(value) {
|
|
27
|
+
this.__data.protocol = value;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* It reads the authority part of the URL value. It doesn't parses it
|
|
31
|
+
* to host, port and credentials parts.
|
|
32
|
+
*
|
|
33
|
+
* @return The value of the host or `undefined` if the value is not set
|
|
34
|
+
*/
|
|
35
|
+
get host() {
|
|
36
|
+
return this.__data.host;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Sets value of the `host`
|
|
40
|
+
*
|
|
41
|
+
* @param value Host value.
|
|
42
|
+
*/
|
|
43
|
+
set host(value) {
|
|
44
|
+
this.__data.host = value;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns path part of the URL.
|
|
48
|
+
*
|
|
49
|
+
* @returns The value of the path or `undefined` if the value not set
|
|
50
|
+
*/
|
|
51
|
+
get path() {
|
|
52
|
+
return this.__data.path || '/';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Sets value of the `path`
|
|
56
|
+
*
|
|
57
|
+
* @param value Path value.
|
|
58
|
+
*/
|
|
59
|
+
set path(value) {
|
|
60
|
+
this.__data.path = value;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Returns anchor part of the URL.
|
|
64
|
+
*
|
|
65
|
+
* @returns The value of the anchor or `undefined` if the value not set
|
|
66
|
+
*/
|
|
67
|
+
get anchor() {
|
|
68
|
+
return this.__data.anchor;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Sets value of the `anchor`
|
|
72
|
+
*
|
|
73
|
+
* @param value The anchor value.
|
|
74
|
+
*/
|
|
75
|
+
set anchor(value) {
|
|
76
|
+
this.__data.anchor = value;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Returns search part of the URL.
|
|
80
|
+
*
|
|
81
|
+
* @returns the value of the search or `undefined` if the value not set
|
|
82
|
+
*/
|
|
83
|
+
get search() {
|
|
84
|
+
return this.__data.search;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Sets value of the `search`
|
|
88
|
+
*
|
|
89
|
+
* @param value Search value.
|
|
90
|
+
*/
|
|
91
|
+
set search(value) {
|
|
92
|
+
this.__data.search = value;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The URL value. It is the same as calling `toString()`.
|
|
96
|
+
*
|
|
97
|
+
* @return The URL value for current configuration.
|
|
98
|
+
*/
|
|
99
|
+
get value() {
|
|
100
|
+
return this.toString();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Sets value of the URL.
|
|
104
|
+
* It parses the url and sets properties.
|
|
105
|
+
*
|
|
106
|
+
* @param value The URL value.
|
|
107
|
+
*/
|
|
108
|
+
set value(value) {
|
|
109
|
+
this.protocol = this._parseProtocol(value);
|
|
110
|
+
this.host = this._parseHost(value);
|
|
111
|
+
this.path = this._parsePath(value);
|
|
112
|
+
this.anchor = this._parseAnchor(value);
|
|
113
|
+
this.search = this._parseSearch(value);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Returns an array of search params.
|
|
117
|
+
*
|
|
118
|
+
* @returns The list of search params. Each item contains an
|
|
119
|
+
* array where the first item is the name of the parameter and the second item is the
|
|
120
|
+
* value.
|
|
121
|
+
*/
|
|
122
|
+
get searchParams() {
|
|
123
|
+
return this._parseSearchParams(this.search);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Sets the value of `search` and `searchParams`.
|
|
127
|
+
*
|
|
128
|
+
* @param value Search params list.
|
|
129
|
+
*/
|
|
130
|
+
set searchParams(value) {
|
|
131
|
+
if (!value || !value.length) {
|
|
132
|
+
this.search = undefined;
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
this.search = value.map((item) => {
|
|
136
|
+
let itemValue = item[1];
|
|
137
|
+
if (!item[0] && !itemValue) {
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
if (itemValue === undefined) {
|
|
141
|
+
itemValue = '';
|
|
142
|
+
}
|
|
143
|
+
else if (typeof itemValue !== 'string') {
|
|
144
|
+
itemValue = String(itemValue);
|
|
145
|
+
}
|
|
146
|
+
return `${item[0]}=${itemValue}`;
|
|
147
|
+
})
|
|
148
|
+
.join(this.opts.queryDelimiter);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Returns the URL for current settings.
|
|
152
|
+
*
|
|
153
|
+
* @return The URL value.
|
|
154
|
+
*/
|
|
155
|
+
toString() {
|
|
156
|
+
let result = '';
|
|
157
|
+
if (this.protocol) {
|
|
158
|
+
result += this.protocol;
|
|
159
|
+
result += '//';
|
|
160
|
+
}
|
|
161
|
+
if (this.host) {
|
|
162
|
+
result += this.host;
|
|
163
|
+
}
|
|
164
|
+
if (this.path) {
|
|
165
|
+
if (this.path === '/' && !this.host && !this.search && !this.anchor) {
|
|
166
|
+
// ???
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
if (this.path[0] !== '/') {
|
|
170
|
+
result += '/';
|
|
171
|
+
}
|
|
172
|
+
result += this.path;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else if (this.search || this.anchor) {
|
|
176
|
+
result += '/';
|
|
177
|
+
}
|
|
178
|
+
if (this.search) {
|
|
179
|
+
const p = this.searchParams;
|
|
180
|
+
this.searchParams = p;
|
|
181
|
+
result += `?${this.search}`;
|
|
182
|
+
}
|
|
183
|
+
if (this.anchor) {
|
|
184
|
+
result += `#${this.anchor}`;
|
|
185
|
+
}
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=UrlParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UrlParser.js","sourceRoot":"","sources":["../../../../src/lib/parsers/UrlParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
export interface IUrlValueParserOptions {
|
|
2
|
+
/**
|
|
3
|
+
* A query string delimiter to use when processing query parameters.
|
|
4
|
+
*/
|
|
5
|
+
queryDelimiter?: string;
|
|
6
|
+
}
|
|
7
|
+
interface DataValues {
|
|
8
|
+
/**
|
|
9
|
+
* A protocol value in format `protocol` + ':'
|
|
10
|
+
*/
|
|
11
|
+
protocol?: string;
|
|
12
|
+
/**
|
|
13
|
+
* The authority part of the URL value
|
|
14
|
+
*/
|
|
15
|
+
host?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Path part of the URL.
|
|
18
|
+
*/
|
|
19
|
+
path?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Anchor part of the URL.
|
|
22
|
+
*/
|
|
23
|
+
anchor?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Search part of the URL.
|
|
26
|
+
*/
|
|
27
|
+
search?: string;
|
|
28
|
+
opts?: IUrlValueParserOptions | undefined;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Implements logic for parsing URL string.
|
|
32
|
+
*/
|
|
33
|
+
export declare class UrlValueParser {
|
|
34
|
+
protected __data: DataValues;
|
|
35
|
+
constructor(opts?: IUrlValueParserOptions);
|
|
36
|
+
/**
|
|
37
|
+
* @returns Class options.
|
|
38
|
+
*/
|
|
39
|
+
get opts(): IUrlValueParserOptions;
|
|
40
|
+
/**
|
|
41
|
+
* Sets parser options.
|
|
42
|
+
* Unknown options are ignored.
|
|
43
|
+
*/
|
|
44
|
+
set opts(opts: IUrlValueParserOptions | undefined);
|
|
45
|
+
/**
|
|
46
|
+
* Returns protocol value in format `protocol` + ':'
|
|
47
|
+
*
|
|
48
|
+
* @param value URL to parse.
|
|
49
|
+
* @return Value of the protocol or undefined if value not set
|
|
50
|
+
*/
|
|
51
|
+
protected _parseProtocol(value: string): string | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Gets a host value from the url.
|
|
54
|
+
* It reads the whole authority value of given `value`. It doesn't parses it
|
|
55
|
+
* to host, port and
|
|
56
|
+
* credentials parts. For URL panel it's enough.
|
|
57
|
+
*
|
|
58
|
+
* @param value The URL to parse
|
|
59
|
+
* @return Value of the host or undefined.
|
|
60
|
+
*/
|
|
61
|
+
protected _parseHost(value: string): string | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Parses the path part of the URL.
|
|
64
|
+
*
|
|
65
|
+
* @param value URL value
|
|
66
|
+
* @returns Path part of the URL
|
|
67
|
+
*/
|
|
68
|
+
protected _parsePath(value: string): string | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Returns query parameters string (without the '?' sign) as a whole.
|
|
71
|
+
*
|
|
72
|
+
* @param value The URL to parse
|
|
73
|
+
* @returns Value of the search string or undefined.
|
|
74
|
+
*/
|
|
75
|
+
protected _parseSearch(value: string): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Reads a value of the anchor (or hash) parameter without the `#` sign.
|
|
78
|
+
*
|
|
79
|
+
* @param value The URL to parse
|
|
80
|
+
* @returns Value of the anchor (hash) or undefined.
|
|
81
|
+
*/
|
|
82
|
+
protected _parseAnchor(value: string): string | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* Returns an array of items where each item is an array where first
|
|
85
|
+
* item is param name and second is it's value. Both always strings.
|
|
86
|
+
*
|
|
87
|
+
* @param search Parsed search parameter
|
|
88
|
+
* @returns Always returns an array.
|
|
89
|
+
*/
|
|
90
|
+
protected _parseSearchParams(search?: string): string[][];
|
|
91
|
+
}
|
|
92
|
+
export {};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implements logic for parsing URL string.
|
|
3
|
+
*/
|
|
4
|
+
export class UrlValueParser {
|
|
5
|
+
__data;
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
this.__data = {};
|
|
8
|
+
this.opts = opts;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @returns Class options.
|
|
12
|
+
*/
|
|
13
|
+
get opts() {
|
|
14
|
+
return this.__data.opts || {
|
|
15
|
+
queryDelimiter: '&',
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Sets parser options.
|
|
20
|
+
* Unknown options are ignored.
|
|
21
|
+
*/
|
|
22
|
+
set opts(opts) {
|
|
23
|
+
const options = (opts || {});
|
|
24
|
+
this.__data.opts = {
|
|
25
|
+
queryDelimiter: options.queryDelimiter || '&'
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Returns protocol value in format `protocol` + ':'
|
|
30
|
+
*
|
|
31
|
+
* @param value URL to parse.
|
|
32
|
+
* @return Value of the protocol or undefined if value not set
|
|
33
|
+
*/
|
|
34
|
+
_parseProtocol(value) {
|
|
35
|
+
if (!value) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
const delimiterIndex = value.indexOf('://');
|
|
39
|
+
if (delimiterIndex !== -1) {
|
|
40
|
+
return value.substring(0, delimiterIndex + 1);
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Gets a host value from the url.
|
|
46
|
+
* It reads the whole authority value of given `value`. It doesn't parses it
|
|
47
|
+
* to host, port and
|
|
48
|
+
* credentials parts. For URL panel it's enough.
|
|
49
|
+
*
|
|
50
|
+
* @param value The URL to parse
|
|
51
|
+
* @return Value of the host or undefined.
|
|
52
|
+
*/
|
|
53
|
+
_parseHost(value) {
|
|
54
|
+
if (!value) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
let result = value;
|
|
58
|
+
const delimiterIndex = result.indexOf('://');
|
|
59
|
+
if (delimiterIndex !== -1) {
|
|
60
|
+
result = result.substring(delimiterIndex + 3);
|
|
61
|
+
}
|
|
62
|
+
if (!result) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
// We don't need specifics here (username, password, port)
|
|
66
|
+
const host = result.split('/')[0];
|
|
67
|
+
return host;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parses the path part of the URL.
|
|
71
|
+
*
|
|
72
|
+
* @param value URL value
|
|
73
|
+
* @returns Path part of the URL
|
|
74
|
+
*/
|
|
75
|
+
_parsePath(value) {
|
|
76
|
+
if (!value) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
let result = value;
|
|
80
|
+
const isBasePath = result[0] === '/';
|
|
81
|
+
if (!isBasePath) {
|
|
82
|
+
const index = result.indexOf('://');
|
|
83
|
+
if (index !== -1) {
|
|
84
|
+
result = result.substring(index + 3);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
let index = result.indexOf('?');
|
|
88
|
+
if (index !== -1) {
|
|
89
|
+
result = result.substring(0, index);
|
|
90
|
+
}
|
|
91
|
+
index = result.indexOf('#');
|
|
92
|
+
if (index !== -1) {
|
|
93
|
+
result = result.substring(0, index);
|
|
94
|
+
}
|
|
95
|
+
const lastIsSlash = result[result.length - 1] === '/';
|
|
96
|
+
const parts = result.split('/').filter((part) => !!part);
|
|
97
|
+
if (!isBasePath) {
|
|
98
|
+
parts.shift();
|
|
99
|
+
}
|
|
100
|
+
let path = `/${parts.join('/')}`;
|
|
101
|
+
if (lastIsSlash && parts.length > 1) {
|
|
102
|
+
path += '/';
|
|
103
|
+
}
|
|
104
|
+
return path;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Returns query parameters string (without the '?' sign) as a whole.
|
|
108
|
+
*
|
|
109
|
+
* @param value The URL to parse
|
|
110
|
+
* @returns Value of the search string or undefined.
|
|
111
|
+
*/
|
|
112
|
+
_parseSearch(value) {
|
|
113
|
+
if (!value) {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
let index = value.indexOf('?');
|
|
117
|
+
if (index === -1) {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
const result = value.substring(index + 1);
|
|
121
|
+
index = result.indexOf('#');
|
|
122
|
+
if (index === -1) {
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
return result.substring(0, index);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Reads a value of the anchor (or hash) parameter without the `#` sign.
|
|
129
|
+
*
|
|
130
|
+
* @param value The URL to parse
|
|
131
|
+
* @returns Value of the anchor (hash) or undefined.
|
|
132
|
+
*/
|
|
133
|
+
_parseAnchor(value) {
|
|
134
|
+
if (!value) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
const index = value.indexOf('#');
|
|
138
|
+
if (index === -1) {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
return value.substring(index + 1);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Returns an array of items where each item is an array where first
|
|
145
|
+
* item is param name and second is it's value. Both always strings.
|
|
146
|
+
*
|
|
147
|
+
* @param search Parsed search parameter
|
|
148
|
+
* @returns Always returns an array.
|
|
149
|
+
*/
|
|
150
|
+
_parseSearchParams(search) {
|
|
151
|
+
const result = [];
|
|
152
|
+
if (!search) {
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
const parts = search.split(this.opts.queryDelimiter);
|
|
156
|
+
parts.forEach((item) => {
|
|
157
|
+
const _part = ['', ''];
|
|
158
|
+
const _params = item.split('=');
|
|
159
|
+
let _name = _params.shift();
|
|
160
|
+
if (!_name && _name !== '') {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
_name = _name.trim();
|
|
164
|
+
const _value = _params.join('=').trim();
|
|
165
|
+
_part[0] = _name;
|
|
166
|
+
_part[1] = _value;
|
|
167
|
+
result.push(_part);
|
|
168
|
+
});
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=UrlValueParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UrlValueParser.js","sourceRoot":"","sources":["../../../../src/lib/parsers/UrlValueParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,15 +55,7 @@ export interface IUserPicture {
|
|
|
55
55
|
data?: string;
|
|
56
56
|
}
|
|
57
57
|
export declare const Kind = "ARC#User";
|
|
58
|
-
|
|
59
|
-
* Represents a user in the system.
|
|
60
|
-
* This can be embedded in various situations like project's revision history,
|
|
61
|
-
* ACL, Authorization, etc.
|
|
62
|
-
*
|
|
63
|
-
* Note, the store implementation may have additional fields that support external
|
|
64
|
-
* identity providers. However, this is not exposed to the user through the API.
|
|
65
|
-
*/
|
|
66
|
-
export interface IUser {
|
|
58
|
+
interface BaseUser {
|
|
67
59
|
/**
|
|
68
60
|
* Data store key of the user.
|
|
69
61
|
*/
|
|
@@ -93,6 +85,20 @@ export interface IUser {
|
|
|
93
85
|
*/
|
|
94
86
|
provider?: unknown;
|
|
95
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Represents a user in the system.
|
|
90
|
+
* This can be embedded in various situations like project's revision history,
|
|
91
|
+
* ACL, Authorization, etc.
|
|
92
|
+
*
|
|
93
|
+
* Note, the store implementation may have additional fields that support external
|
|
94
|
+
* identity providers. However, this is not exposed to the user through the API.
|
|
95
|
+
*/
|
|
96
|
+
export interface IUser extends BaseUser {
|
|
97
|
+
/**
|
|
98
|
+
* Optional metadata related to the auth provider.
|
|
99
|
+
*/
|
|
100
|
+
provider?: unknown;
|
|
101
|
+
}
|
|
96
102
|
/**
|
|
97
103
|
* This object may be created for each user in the system.
|
|
98
104
|
* It describes to which spaces user has access to.
|
|
@@ -108,3 +114,13 @@ export interface IUserSpaces {
|
|
|
108
114
|
*/
|
|
109
115
|
user: string;
|
|
110
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* An abstract user object that contains access information to a space.
|
|
119
|
+
*/
|
|
120
|
+
export interface ISpaceUser extends BaseUser {
|
|
121
|
+
/**
|
|
122
|
+
* The level that the user has access to.
|
|
123
|
+
*/
|
|
124
|
+
level: AccessControlLevel;
|
|
125
|
+
}
|
|
126
|
+
export {};
|
|
@@ -179,6 +179,12 @@ declare class SpacesSdk extends SdkBase {
|
|
|
179
179
|
* @param value The patch operation on the space's ACL
|
|
180
180
|
*/
|
|
181
181
|
patchUsers(key: string, value: UserAccessOperation[]): Promise<void>;
|
|
182
|
+
/**
|
|
183
|
+
* Lists uses having access to the user space.
|
|
184
|
+
*
|
|
185
|
+
* @param key The user space key
|
|
186
|
+
*/
|
|
187
|
+
listUsers(key: string): Promise<IListResponse>;
|
|
182
188
|
}
|
|
183
189
|
declare class HttpClient extends SdkBase {
|
|
184
190
|
/**
|
|
@@ -263,5 +269,11 @@ declare class UsersSdk extends SdkBase {
|
|
|
263
269
|
* @param options Optional query options.
|
|
264
270
|
*/
|
|
265
271
|
list(options?: IListOptions): Promise<IListResponse>;
|
|
272
|
+
/**
|
|
273
|
+
* Reads a user information from the store.
|
|
274
|
+
* @param key The user key.
|
|
275
|
+
* @returns The user object
|
|
276
|
+
*/
|
|
277
|
+
read(key: string): Promise<IUser>;
|
|
266
278
|
}
|
|
267
279
|
export {};
|
|
@@ -428,6 +428,36 @@ class SpacesSdk extends SdkBase {
|
|
|
428
428
|
throw new Error(`${E_PREFIX}${E_RESPONSE_STATUS}${result.status}`);
|
|
429
429
|
}
|
|
430
430
|
}
|
|
431
|
+
/**
|
|
432
|
+
* Lists uses having access to the user space.
|
|
433
|
+
*
|
|
434
|
+
* @param key The user space key
|
|
435
|
+
*/
|
|
436
|
+
async listUsers(key) {
|
|
437
|
+
const { token } = this.sdk;
|
|
438
|
+
const url = this.sdk.getUrl(`/spaces/${key}/users`);
|
|
439
|
+
const result = await this.sdk.http.get(url.toString(), { token });
|
|
440
|
+
this.inspectCommonStatusCodes(result.status);
|
|
441
|
+
const E_PREFIX = 'Unable to list users in the space. ';
|
|
442
|
+
if (result.status !== 200) {
|
|
443
|
+
this.logInvalidResponse(result);
|
|
444
|
+
throw new Error(`${E_PREFIX}${E_RESPONSE_STATUS}${result.status}`);
|
|
445
|
+
}
|
|
446
|
+
if (!result.body) {
|
|
447
|
+
throw new Error(`${E_PREFIX}${E_RESPONSE_NO_VALUE}`);
|
|
448
|
+
}
|
|
449
|
+
let data;
|
|
450
|
+
try {
|
|
451
|
+
data = JSON.parse(result.body);
|
|
452
|
+
}
|
|
453
|
+
catch (e) {
|
|
454
|
+
throw new Error(`${E_PREFIX}${E_INVALID_JSON}.`);
|
|
455
|
+
}
|
|
456
|
+
if (!Array.isArray(data.data)) {
|
|
457
|
+
throw new Error(`${E_PREFIX}${E_RESPONSE_UNKNOWN}.`);
|
|
458
|
+
}
|
|
459
|
+
return data;
|
|
460
|
+
}
|
|
431
461
|
}
|
|
432
462
|
class HttpClient extends SdkBase {
|
|
433
463
|
/**
|
|
@@ -779,5 +809,32 @@ class UsersSdk extends SdkBase {
|
|
|
779
809
|
}
|
|
780
810
|
return data;
|
|
781
811
|
}
|
|
812
|
+
/**
|
|
813
|
+
* Reads a user information from the store.
|
|
814
|
+
* @param key The user key.
|
|
815
|
+
* @returns The user object
|
|
816
|
+
*/
|
|
817
|
+
async read(key) {
|
|
818
|
+
const { token } = this.sdk;
|
|
819
|
+
const url = this.sdk.getUrl(`/users/${key}`);
|
|
820
|
+
const result = await this.sdk.http.get(url.toString(), { token });
|
|
821
|
+
this.inspectCommonStatusCodes(result.status);
|
|
822
|
+
const E_PREFIX = 'Unable to read the user info. ';
|
|
823
|
+
if (result.status !== 200) {
|
|
824
|
+
this.logInvalidResponse(result);
|
|
825
|
+
throw new Error(`${E_PREFIX}${E_RESPONSE_STATUS}${result.status}`);
|
|
826
|
+
}
|
|
827
|
+
if (!result.body) {
|
|
828
|
+
throw new Error(`${E_PREFIX}${E_RESPONSE_NO_VALUE}`);
|
|
829
|
+
}
|
|
830
|
+
let data;
|
|
831
|
+
try {
|
|
832
|
+
data = JSON.parse(result.body);
|
|
833
|
+
}
|
|
834
|
+
catch (e) {
|
|
835
|
+
throw new Error(`${E_PREFIX}${E_INVALID_JSON}.`);
|
|
836
|
+
}
|
|
837
|
+
return data;
|
|
838
|
+
}
|
|
782
839
|
}
|
|
783
840
|
//# sourceMappingURL=StoreSdk.js.map
|