@cubicweb/client 3.0.0-alpha.8 → 3.0.0
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/README.md +58 -34
- package/lib/Authenticator.d.ts +8 -0
- package/lib/Authenticator.d.ts.map +1 -0
- package/lib/Authenticator.js +2 -0
- package/lib/Authenticator.js.map +1 -0
- package/lib/api/Api.d.ts +56 -23
- package/lib/api/Api.d.ts.map +1 -1
- package/lib/api/Api.js +141 -140
- package/lib/api/Api.js.map +1 -1
- package/lib/api/Client.d.ts +26 -10
- package/lib/api/Client.d.ts.map +1 -1
- package/lib/api/Client.js +41 -58
- package/lib/api/Client.js.map +1 -1
- package/lib/api/ResultSet.d.ts +52 -0
- package/lib/api/ResultSet.d.ts.map +1 -0
- package/lib/api/ResultSet.js +64 -0
- package/lib/api/ResultSet.js.map +1 -0
- package/lib/api/authenticators/CookieAuthenticator.d.ts +10 -0
- package/lib/api/authenticators/CookieAuthenticator.d.ts.map +1 -0
- package/lib/api/authenticators/CookieAuthenticator.js +11 -0
- package/lib/api/authenticators/CookieAuthenticator.js.map +1 -0
- package/lib/api/authenticators/SignedRequestAuthenticator.d.ts +32 -0
- package/lib/api/authenticators/SignedRequestAuthenticator.d.ts.map +1 -0
- package/lib/api/authenticators/SignedRequestAuthenticator.js +89 -0
- package/lib/api/authenticators/SignedRequestAuthenticator.js.map +1 -0
- package/lib/api/binary/RQLBinary.d.ts +6 -0
- package/lib/api/binary/RQLBinary.d.ts.map +1 -0
- package/lib/api/binary/RQLBinary.js +10 -0
- package/lib/api/binary/RQLBinary.js.map +1 -0
- package/lib/api/query/RQLQuery.d.ts +40 -0
- package/lib/api/query/RQLQuery.d.ts.map +1 -0
- package/lib/api/query/RQLQuery.js +48 -0
- package/lib/api/query/RQLQuery.js.map +1 -0
- package/lib/api/query/references.d.ts +41 -0
- package/lib/api/query/references.d.ts.map +1 -0
- package/lib/api/query/references.js +50 -0
- package/lib/api/query/references.js.map +1 -0
- package/lib/api/transaction/Transaction.d.ts +25 -0
- package/lib/api/transaction/Transaction.d.ts.map +1 -0
- package/lib/api/transaction/Transaction.js +28 -0
- package/lib/api/transaction/Transaction.js.map +1 -0
- package/lib/api/transaction/TransactionResult.d.ts +41 -0
- package/lib/api/transaction/TransactionResult.d.ts.map +1 -0
- package/lib/api/transaction/TransactionResult.js +45 -0
- package/lib/api/transaction/TransactionResult.js.map +1 -0
- package/lib/encodeFormData.d.ts +5 -0
- package/lib/encodeFormData.d.ts.map +1 -0
- package/lib/encodeFormData.js +94 -0
- package/lib/encodeFormData.js.map +1 -0
- package/lib/{Errors.d.ts → errors.d.ts} +7 -4
- package/lib/errors.d.ts.map +1 -0
- package/lib/errors.js +19 -0
- package/lib/errors.js.map +1 -0
- package/lib/index.d.ts +19 -13
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +17 -34
- package/lib/index.js.map +1 -1
- package/lib/schema/classes/EntitySchema.d.ts +5 -5
- package/lib/schema/classes/EntitySchema.d.ts.map +1 -1
- package/lib/schema/classes/EntitySchema.js +3 -5
- package/lib/schema/classes/EntitySchema.js.map +1 -1
- package/lib/schema/classes/RelationDefinitionSchema.d.ts +6 -6
- package/lib/schema/classes/RelationDefinitionSchema.d.ts.map +1 -1
- package/lib/schema/classes/RelationDefinitionSchema.js +8 -10
- package/lib/schema/classes/RelationDefinitionSchema.js.map +1 -1
- package/lib/schema/classes/Schema.d.ts +7 -7
- package/lib/schema/classes/Schema.d.ts.map +1 -1
- package/lib/schema/classes/Schema.js +8 -11
- package/lib/schema/classes/Schema.js.map +1 -1
- package/lib/schema/classes/Utils.d.ts +10 -10
- package/lib/schema/classes/Utils.d.ts.map +1 -1
- package/lib/schema/classes/Utils.js +19 -35
- package/lib/schema/classes/Utils.js.map +1 -1
- package/lib/schema/raw/Constraints.d.ts +27 -0
- package/lib/schema/raw/Constraints.d.ts.map +1 -1
- package/lib/schema/raw/Constraints.js +1 -2
- package/lib/schema/raw/Entities.js +1 -2
- package/lib/schema/raw/RelationDefinitions.d.ts +3 -3
- package/lib/schema/raw/RelationDefinitions.d.ts.map +1 -1
- package/lib/schema/raw/RelationDefinitions.js +1 -2
- package/lib/schema/raw/Schema.d.ts +2 -2
- package/lib/schema/raw/Schema.d.ts.map +1 -1
- package/lib/schema/raw/Schema.js +1 -2
- package/lib/schema/raw/Utils.d.ts +1 -1
- package/lib/schema/raw/Utils.d.ts.map +1 -1
- package/lib/schema/raw/Utils.js +1 -2
- package/lib/utils.d.ts +39 -0
- package/lib/utils.d.ts.map +1 -0
- package/lib/utils.js +58 -0
- package/lib/utils.js.map +1 -0
- package/package.json +15 -5
- package/src/Authenticator.ts +8 -0
- package/src/api/Api.ts +148 -122
- package/src/api/Client.ts +31 -18
- package/src/api/ResultSet.ts +95 -0
- package/src/api/authenticators/CookieAuthenticator.ts +17 -0
- package/src/api/authenticators/SignedRequestAuthenticator.ts +133 -0
- package/src/api/binary/RQLBinary.ts +9 -0
- package/src/api/query/RQLQuery.ts +51 -0
- package/src/api/query/references.ts +43 -0
- package/src/api/transaction/Transaction.ts +31 -0
- package/src/api/transaction/TransactionResult.ts +68 -0
- package/src/encodeFormData.ts +126 -0
- package/src/{Errors.ts → errors.ts} +6 -7
- package/src/index.ts +24 -17
- package/src/schema/classes/EntitySchema.ts +8 -5
- package/src/schema/classes/RelationDefinitionSchema.ts +7 -7
- package/src/schema/classes/Schema.ts +10 -7
- package/src/schema/classes/Utils.ts +4 -4
- package/src/schema/raw/Constraints.ts +28 -0
- package/src/schema/raw/RelationDefinitions.ts +3 -3
- package/src/schema/raw/Schema.ts +2 -2
- package/src/schema/raw/Utils.ts +1 -1
- package/src/utils.ts +91 -0
- package/lib/Errors.d.ts.map +0 -1
- package/lib/Errors.js +0 -25
- package/lib/Errors.js.map +0 -1
- package/lib/api/Transaction.d.ts +0 -46
- package/lib/api/Transaction.d.ts.map +0 -1
- package/lib/api/Transaction.js +0 -75
- package/lib/api/Transaction.js.map +0 -1
- package/src/api/Transaction.ts +0 -94
package/lib/api/Api.js
CHANGED
|
@@ -1,37 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const Errors_1 = require("../Errors");
|
|
13
|
-
const Transaction_1 = require("./Transaction");
|
|
1
|
+
import { ValidationError } from "../errors.js";
|
|
2
|
+
import { getBinariesFromTransaction, serializeQueryParams } from "../utils.js";
|
|
3
|
+
import { TransactionResult, } from "./transaction/TransactionResult.js";
|
|
14
4
|
/**
|
|
15
5
|
* Class used to handle requests to the CubicWeb API.
|
|
16
6
|
*
|
|
17
7
|
* You should never have to create this object yourself.
|
|
18
|
-
* Instead, retrieve this object from the methods in the
|
|
8
|
+
* Instead, retrieve this object from the methods in the {@link Client} class.
|
|
19
9
|
*
|
|
20
10
|
* @internal
|
|
21
11
|
*/
|
|
22
|
-
class Api {
|
|
12
|
+
export default class Api {
|
|
13
|
+
_apiUrl;
|
|
14
|
+
_version = "v1";
|
|
15
|
+
_rqlApiUrl;
|
|
16
|
+
_schemaApiUrl;
|
|
17
|
+
_loginApiUrl;
|
|
18
|
+
_logoutApiUrl;
|
|
19
|
+
_currentUserApiUrl;
|
|
20
|
+
_binaryApiUrl;
|
|
21
|
+
_authenticator;
|
|
23
22
|
/**
|
|
24
23
|
* Class used to handle requests to the CubicWeb API.
|
|
25
24
|
*
|
|
26
25
|
* You should never have to create this object yourself.
|
|
27
|
-
* Instead, retrieve this object from the methods in the
|
|
26
|
+
* Instead, retrieve this object from the methods in the {@link Client} class.
|
|
28
27
|
*
|
|
29
28
|
* @param apiUrl The API url. It should not include the API version as it will be automatically added.
|
|
30
29
|
* Example: if you can retrieve the schema with https://example.com/api/v1/schema,
|
|
31
30
|
* use https://example.com/api as `apiUrl`.
|
|
32
31
|
*/
|
|
33
|
-
constructor(apiUrl) {
|
|
34
|
-
this._version = "v1";
|
|
32
|
+
constructor(apiUrl, options) {
|
|
35
33
|
this._apiUrl = apiUrl;
|
|
36
34
|
this._rqlApiUrl = this.getApiRoute("rql");
|
|
37
35
|
this._schemaApiUrl = this.getApiRoute("schema");
|
|
@@ -39,6 +37,7 @@ class Api {
|
|
|
39
37
|
this._logoutApiUrl = this.getApiRoute("logout");
|
|
40
38
|
this._currentUserApiUrl = this.getApiRoute("current-user");
|
|
41
39
|
this._binaryApiUrl = this.getApiRoute("binary");
|
|
40
|
+
this._authenticator = options.authenticator;
|
|
42
41
|
}
|
|
43
42
|
get apiUrl() {
|
|
44
43
|
return this._apiUrl;
|
|
@@ -51,50 +50,41 @@ class Api {
|
|
|
51
50
|
*
|
|
52
51
|
* @returns The CubicWeb instance's JSON schema.
|
|
53
52
|
*/
|
|
54
|
-
schema() {
|
|
55
|
-
return
|
|
56
|
-
|
|
57
|
-
method: "GET",
|
|
58
|
-
credentials: "include",
|
|
59
|
-
});
|
|
53
|
+
async schema() {
|
|
54
|
+
return this.nonNullFetchApi(this._schemaApiUrl, {
|
|
55
|
+
method: "GET",
|
|
60
56
|
});
|
|
61
57
|
}
|
|
62
58
|
/**
|
|
63
59
|
* Tries to log in the user on the configured CubicWeb instance with the given credentials.
|
|
64
60
|
*
|
|
65
61
|
* @param login The user login
|
|
66
|
-
* @param password
|
|
62
|
+
* @param password The user password
|
|
67
63
|
* @returns A promise returning true if the login was successful, false otherwise
|
|
68
64
|
*/
|
|
69
|
-
login(login, password) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return false;
|
|
84
|
-
}
|
|
85
|
-
});
|
|
65
|
+
async login(login, password) {
|
|
66
|
+
try {
|
|
67
|
+
await this.fetchApi(this._loginApiUrl, {
|
|
68
|
+
method: "POST",
|
|
69
|
+
body: JSON.stringify({
|
|
70
|
+
login,
|
|
71
|
+
password,
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
catch (_error) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
86
79
|
}
|
|
87
80
|
/**
|
|
88
81
|
* Logs out the current user. Will invalidate any authentication cookie active.
|
|
89
82
|
*
|
|
90
83
|
* @returns A promise which will resolve when the user is properly logged out
|
|
91
84
|
*/
|
|
92
|
-
logout() {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
method: "POST",
|
|
96
|
-
credentials: "include",
|
|
97
|
-
});
|
|
85
|
+
async logout() {
|
|
86
|
+
await this.fetchApi(this._logoutApiUrl, {
|
|
87
|
+
method: "POST",
|
|
98
88
|
});
|
|
99
89
|
}
|
|
100
90
|
/**
|
|
@@ -102,77 +92,75 @@ class Api {
|
|
|
102
92
|
*
|
|
103
93
|
* @returns A promise resolving to the current user
|
|
104
94
|
*/
|
|
105
|
-
currentUser() {
|
|
106
|
-
return
|
|
107
|
-
|
|
108
|
-
method: "GET",
|
|
109
|
-
credentials: "include",
|
|
110
|
-
});
|
|
95
|
+
async currentUser() {
|
|
96
|
+
return await this.nonNullFetchApi(this._currentUserApiUrl, {
|
|
97
|
+
method: "GET",
|
|
111
98
|
});
|
|
112
99
|
}
|
|
113
100
|
/**
|
|
114
101
|
* Get the binary for the given entity attribute
|
|
115
102
|
*
|
|
116
|
-
* @
|
|
103
|
+
* @param eid Entity eid to fetch the binary from
|
|
104
|
+
* @param attribute Attribute on the entity in which the binary is stored
|
|
105
|
+
* @returns A promise resolving to the binary as a Blob
|
|
117
106
|
*/
|
|
118
|
-
binary(eid, attribute) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
method: "GET",
|
|
126
|
-
credentials: "include",
|
|
127
|
-
});
|
|
107
|
+
async binary(eid, attribute) {
|
|
108
|
+
const params = new URLSearchParams({
|
|
109
|
+
eid: eid.toString(),
|
|
110
|
+
attribute,
|
|
111
|
+
});
|
|
112
|
+
return await this.nonNullFetchApi(this._binaryApiUrl + params, {
|
|
113
|
+
method: "GET",
|
|
128
114
|
});
|
|
129
115
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
116
|
+
/**
|
|
117
|
+
* Executes the given transaction.
|
|
118
|
+
*
|
|
119
|
+
* If the {@link Transaction} object contains binaries, the request is automatically
|
|
120
|
+
* sent using `multipart/form-data` to allow uploading binaries.
|
|
121
|
+
*
|
|
122
|
+
* @param transaction Transaction to execute
|
|
123
|
+
* @returns A promise returning the transaction result on success
|
|
124
|
+
*/
|
|
125
|
+
async rql(transaction) {
|
|
126
|
+
const binaries = getBinariesFromTransaction(transaction);
|
|
127
|
+
try {
|
|
128
|
+
if (binaries.length > 0) {
|
|
129
|
+
return await this.multipartTransaction(transaction, binaries);
|
|
139
130
|
}
|
|
140
|
-
|
|
141
|
-
this.
|
|
131
|
+
else {
|
|
132
|
+
return await this.jsonTransaction(transaction);
|
|
142
133
|
}
|
|
143
|
-
}
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
this.handleUserErrors(e);
|
|
137
|
+
}
|
|
144
138
|
}
|
|
145
139
|
getTransactionParams(transaction) {
|
|
146
|
-
return transaction.queries.map((
|
|
147
|
-
query:
|
|
148
|
-
params:
|
|
140
|
+
return transaction.queries.map((rqlQuery) => ({
|
|
141
|
+
query: rqlQuery.rql,
|
|
142
|
+
params: serializeQueryParams(transaction, rqlQuery.params),
|
|
149
143
|
}));
|
|
150
144
|
}
|
|
151
|
-
multipartTransaction(transaction) {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
formData.append(key, value);
|
|
158
|
-
});
|
|
159
|
-
const resultSets = yield nonNullFetchApi(this._rqlApiUrl, {
|
|
160
|
-
method: "POST",
|
|
161
|
-
credentials: "include",
|
|
162
|
-
body: formData,
|
|
163
|
-
});
|
|
164
|
-
return new Transaction_1.TransactionResult(resultSets);
|
|
145
|
+
async multipartTransaction(transaction, binaries) {
|
|
146
|
+
const jsonParams = this.getTransactionParams(transaction);
|
|
147
|
+
const formData = new FormData();
|
|
148
|
+
formData.append("queries", JSON.stringify(jsonParams));
|
|
149
|
+
binaries.forEach((binary) => {
|
|
150
|
+
formData.append(binary.uuid, binary.blob);
|
|
165
151
|
});
|
|
152
|
+
const resultSets = await this.nonNullFetchApi(this._rqlApiUrl, {
|
|
153
|
+
method: "POST",
|
|
154
|
+
body: formData,
|
|
155
|
+
});
|
|
156
|
+
return new TransactionResult(transaction, resultSets);
|
|
166
157
|
}
|
|
167
|
-
jsonTransaction(transaction) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
credentials: "include",
|
|
172
|
-
body: JSON.stringify(this.getTransactionParams(transaction)),
|
|
173
|
-
});
|
|
174
|
-
return new Transaction_1.TransactionResult(resultSets);
|
|
158
|
+
async jsonTransaction(transaction) {
|
|
159
|
+
const resultSets = await this.nonNullFetchApi(this._rqlApiUrl, {
|
|
160
|
+
method: "POST",
|
|
161
|
+
body: JSON.stringify(this.getTransactionParams(transaction)),
|
|
175
162
|
});
|
|
163
|
+
return new TransactionResult(transaction, resultSets);
|
|
176
164
|
}
|
|
177
165
|
handleUserErrors(error) {
|
|
178
166
|
if (typeof error === "object" &&
|
|
@@ -182,26 +170,23 @@ class Api {
|
|
|
182
170
|
"message" in error &&
|
|
183
171
|
typeof error.message === "string") {
|
|
184
172
|
if (error.title === "ValidationError") {
|
|
185
|
-
throw new
|
|
173
|
+
throw new ValidationError(error.message);
|
|
186
174
|
}
|
|
187
175
|
throw error;
|
|
188
176
|
}
|
|
189
177
|
throw error;
|
|
190
178
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
function nonNullFetchApi(input, init) {
|
|
203
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
204
|
-
const result = yield fetchApi(input, init);
|
|
179
|
+
/**
|
|
180
|
+
* Behaves the same as `fetchAPI` but forbids null responses.
|
|
181
|
+
* If this function detects a null response from the API,
|
|
182
|
+
* the promise will be rejected with a 500 error code.
|
|
183
|
+
*
|
|
184
|
+
* @param input The API route to use
|
|
185
|
+
* @param init Additional request parameters
|
|
186
|
+
* @returns A promise with the non-null fetched result
|
|
187
|
+
*/
|
|
188
|
+
async nonNullFetchApi(url, init) {
|
|
189
|
+
const result = await this.fetchApi(url, init);
|
|
205
190
|
if (result == null) {
|
|
206
191
|
const error = {
|
|
207
192
|
status: 500,
|
|
@@ -211,33 +196,49 @@ function nonNullFetchApi(input, init) {
|
|
|
211
196
|
throw error;
|
|
212
197
|
}
|
|
213
198
|
return result;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
"X-Client-Name": "XMLHttpRequest" }, init === null || init === void 0 ? void 0 : init.headers);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Sends a request to the given API route with the `Content-Type` header set and waits for a response.
|
|
202
|
+
* The returned promise will be rejected if the API returns HTTP error codes.
|
|
203
|
+
* The rejected promise will contain an `ApiErrorResponse` object.
|
|
204
|
+
*
|
|
205
|
+
* @param input The API route to use
|
|
206
|
+
* @param init Additional request parameters
|
|
207
|
+
* @returns A promise with the fetched result
|
|
208
|
+
*/
|
|
209
|
+
async fetchApi(url, init) {
|
|
210
|
+
const headers = new Headers(init.headers);
|
|
211
|
+
// Add custom header used as CSRF protection
|
|
212
|
+
// note: it is only necessary for non GET requests but can also be useful
|
|
213
|
+
// while debugging.
|
|
214
|
+
if (!headers.has("X-Client-Name")) {
|
|
215
|
+
headers.append("X-Client-Name", "XMLHttpRequest");
|
|
232
216
|
}
|
|
233
|
-
|
|
217
|
+
// Add a "Content-Type" header whenever a body is passed.
|
|
218
|
+
// The header might already have been set (either by the caller of this
|
|
219
|
+
// function or by and encoder)
|
|
220
|
+
if (init.body &&
|
|
221
|
+
!headers.has("Content-Type") &&
|
|
222
|
+
!(init.body instanceof FormData)) {
|
|
223
|
+
headers.append("Content-Type", "application/json;charset=UTF-8");
|
|
224
|
+
}
|
|
225
|
+
init.headers = headers;
|
|
226
|
+
// Authenticate request
|
|
227
|
+
if (this._authenticator) {
|
|
228
|
+
const authenticatedRequest = await this._authenticator.authenticate(url, init);
|
|
229
|
+
url = authenticatedRequest.url;
|
|
230
|
+
init = authenticatedRequest.init;
|
|
231
|
+
}
|
|
232
|
+
// Execute request
|
|
233
|
+
const response = await fetch(url, init);
|
|
234
|
+
// Parse response body and handle errors
|
|
234
235
|
const status = response.status;
|
|
235
236
|
if (status >= 200 && status < 300) {
|
|
236
237
|
if (status === 204) {
|
|
237
238
|
return null;
|
|
238
239
|
}
|
|
239
240
|
try {
|
|
240
|
-
return
|
|
241
|
+
return await response.json();
|
|
241
242
|
}
|
|
242
243
|
catch (e) {
|
|
243
244
|
console.error(e);
|
|
@@ -247,14 +248,14 @@ function fetchApi(input, init) {
|
|
|
247
248
|
else {
|
|
248
249
|
let json;
|
|
249
250
|
try {
|
|
250
|
-
json =
|
|
251
|
+
json = await response.json();
|
|
251
252
|
}
|
|
252
253
|
catch (e) {
|
|
253
254
|
console.error(e);
|
|
254
255
|
throw { status, title: "Error", message: "" };
|
|
255
256
|
}
|
|
256
|
-
throw
|
|
257
|
+
throw { status, ...json };
|
|
257
258
|
}
|
|
258
|
-
}
|
|
259
|
+
}
|
|
259
260
|
}
|
|
260
261
|
//# sourceMappingURL=Api.js.map
|
package/lib/api/Api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"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"}
|
package/lib/api/Client.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { Authenticator } from "../Authenticator.js";
|
|
2
|
+
import { Schema } from "../schema/classes/Schema.js";
|
|
3
|
+
import { RQLQueryParams, CurrentUser } from "./Api.js";
|
|
4
|
+
import { ResultSet } from "./ResultSet.js";
|
|
5
|
+
import { Transaction } from "./transaction/Transaction.js";
|
|
6
|
+
import { TransactionResult } from "./transaction/TransactionResult.js";
|
|
7
|
+
export interface ClientOptions {
|
|
8
|
+
authenticator?: Authenticator;
|
|
9
|
+
}
|
|
4
10
|
/**
|
|
5
11
|
* Class used to communicate with a CubicWeb instance's API.
|
|
6
12
|
*
|
|
@@ -15,27 +21,30 @@ export default class Client {
|
|
|
15
21
|
* Example: if you can retrieve the schema with https://example.com/api/v1/schema,
|
|
16
22
|
* use https://example.com/api as `apiUrl`.
|
|
17
23
|
*/
|
|
18
|
-
constructor(apiUrl: string);
|
|
24
|
+
constructor(apiUrl: string, options?: ClientOptions);
|
|
19
25
|
get apiUrl(): string;
|
|
20
26
|
/**
|
|
21
27
|
* Executes the given query and waits for the response.
|
|
22
28
|
*
|
|
23
|
-
*
|
|
29
|
+
* If binaries are given, the request is automatically
|
|
30
|
+
* sent using `multipart/form-data` to allow uploading binaries.
|
|
31
|
+
*
|
|
32
|
+
* @param rql The RQL query to send
|
|
24
33
|
* @param params The additional parameters for the request
|
|
25
34
|
* @returns A promise with the request's result set
|
|
26
35
|
*/
|
|
27
|
-
execute(
|
|
36
|
+
execute(rql: string, params?: RQLQueryParams): Promise<ResultSet>;
|
|
28
37
|
/**
|
|
29
38
|
* Retrieves the CubicWeb instance's JSON schema.
|
|
30
39
|
*
|
|
31
40
|
* @returns The CubicWeb instance's JSON schema.
|
|
32
41
|
*/
|
|
33
|
-
schema(): Promise<Schema<import("
|
|
42
|
+
schema(): Promise<Schema<import("../index.js").EntityRawSchemaArray, import("../index.js").RelationDefinitionRawSchemaArray<import("../index.js").EntityRawSchemaArray>>>;
|
|
34
43
|
/**
|
|
35
44
|
* Tries to log in the user on the configured CubicWeb instance with the given credentials.
|
|
36
45
|
*
|
|
37
46
|
* @param login The user login
|
|
38
|
-
* @param password
|
|
47
|
+
* @param password The user password
|
|
39
48
|
* @returns A promise returning true if the login was successful, false otherwise
|
|
40
49
|
*/
|
|
41
50
|
login(login: string, password: string): Promise<boolean>;
|
|
@@ -52,14 +61,21 @@ export default class Client {
|
|
|
52
61
|
*/
|
|
53
62
|
currentUser(): Promise<CurrentUser>;
|
|
54
63
|
/**
|
|
64
|
+
* Executes the given transaction.
|
|
65
|
+
*
|
|
66
|
+
* If the {@link Transaction} object contains binaries, the request is automatically
|
|
67
|
+
* sent using `multipart/form-data` to allow uploading binaries.
|
|
68
|
+
*
|
|
55
69
|
* @param transaction Transaction to execute
|
|
56
|
-
* @returns A promise
|
|
70
|
+
* @returns A promise returning the transaction result on success
|
|
57
71
|
*/
|
|
58
72
|
executeTransaction(transaction: Transaction): Promise<TransactionResult>;
|
|
59
73
|
/**
|
|
60
74
|
* Get the binary for the given entity attribute
|
|
61
75
|
*
|
|
62
|
-
* @
|
|
76
|
+
* @param eid Entity eid to fetch the binary from
|
|
77
|
+
* @param attribute Attribute on the entity in which the binary is stored
|
|
78
|
+
* @returns A promise resolving to the binary as a Blob
|
|
63
79
|
*/
|
|
64
80
|
getBinary(eid: number, attribute: string): Promise<Blob>;
|
|
65
81
|
}
|
package/lib/api/Client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/api/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/api/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,OAAO,CAAC,GAAG,CAAM;IACjB;;;;;;OAMG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa;IAInD,IAAI,MAAM,WAET;IAED;;;;;;;;;OASG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,cAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ3E;;;;OAIG;IACG,MAAM;IAKZ;;;;;;OAMG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAI3C;;;;OAIG;IACG,MAAM;IAIZ;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAIzC;;;;;;;;OAQG;IACG,kBAAkB,CACtB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,iBAAiB,CAAC;IAI7B;;;;;;OAMG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAG/C"}
|