@cubicweb/client 1.1.1 → 1.2.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/lib/api/Api.d.ts CHANGED
@@ -5,9 +5,10 @@ export interface RQLParams {
5
5
  }
6
6
  export declare type RqlRow = Array<string | number | boolean | null>;
7
7
  export declare type ResultSet = Array<RqlRow>;
8
- export declare type ApiError = {
9
- error: string;
8
+ declare type ApiError = {
9
+ title: string;
10
10
  message: string;
11
+ data?: Record<string, unknown>;
11
12
  };
12
13
  export declare type ApiErrorResponse = {
13
14
  status: number;
@@ -24,4 +25,5 @@ export default class Api {
24
25
  transactionCommit(uuid: string): Promise<null>;
25
26
  transactionRollback(uuid: string): Promise<null>;
26
27
  }
28
+ export {};
27
29
  //# sourceMappingURL=Api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,oBAAY,QAAQ,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;AAC7D,oBAAY,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACtC,oBAAY,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1D,oBAAY,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,QAAQ,CAAC;AAEb,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAS;gBAEtB,MAAM,EAAE,MAAM;IAKpB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ7D,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAO5B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAaxD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAQnC,kBAAkB,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,SAAS,CAAC;IAQf,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOvD"}
1
+ {"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,oBAAY,QAAQ,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE3C,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAChC;AAED,oBAAY,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;AAC7D,oBAAY,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AACtC,aAAK,QAAQ,GAAG;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AACF,oBAAY,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,QAAQ,CAAC;AAEb,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAKvB;gBAEU,MAAM,EAAE,MAAM;IAUpB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAQ7D,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC;IAO5B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAaxD,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAOnC,kBAAkB,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,SAAS,CAAC;IAQf,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOvD"}
package/lib/api/Api.js CHANGED
@@ -11,8 +11,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  class Api {
13
13
  constructor(apiUrl) {
14
+ this.transactionApiUrl = {
15
+ begin: "",
16
+ execute: "",
17
+ commit: "",
18
+ rollback: "",
19
+ };
14
20
  this.apiUrl = `${apiUrl}/v1`;
15
- this.transactionApiUrl = `${this.apiUrl}/transaction`;
21
+ Object.keys(this.transactionApiUrl).forEach((k) => (this.transactionApiUrl[k] = `${this.apiUrl}/transaction/${k}`));
16
22
  }
17
23
  execute(query, params) {
18
24
  return __awaiter(this, void 0, void 0, function* () {
@@ -47,36 +53,35 @@ class Api {
47
53
  }
48
54
  transactionBegin() {
49
55
  return __awaiter(this, void 0, void 0, function* () {
50
- return nonNullFetchApi(this.transactionApiUrl, {
56
+ return nonNullFetchApi(this.transactionApiUrl.begin, {
51
57
  method: "POST",
52
- body: JSON.stringify({ action: "begin" }),
53
58
  credentials: "include",
54
59
  });
55
60
  });
56
61
  }
57
62
  transactionExecute(uuid, query, params) {
58
63
  return __awaiter(this, void 0, void 0, function* () {
59
- return nonNullFetchApi(this.transactionApiUrl, {
64
+ return nonNullFetchApi(this.transactionApiUrl.execute, {
60
65
  method: "POST",
61
- body: JSON.stringify({ action: "execute", uuid, query, params }),
66
+ body: JSON.stringify({ uuid, query, params }),
62
67
  credentials: "include",
63
68
  });
64
69
  });
65
70
  }
66
71
  transactionCommit(uuid) {
67
72
  return __awaiter(this, void 0, void 0, function* () {
68
- return fetchApi(this.transactionApiUrl, {
73
+ return fetchApi(this.transactionApiUrl.commit, {
69
74
  method: "POST",
70
- body: JSON.stringify({ action: "commit", uuid }),
75
+ body: JSON.stringify({ uuid }),
71
76
  credentials: "include",
72
77
  });
73
78
  });
74
79
  }
75
80
  transactionRollback(uuid) {
76
81
  return __awaiter(this, void 0, void 0, function* () {
77
- return fetchApi(this.transactionApiUrl, {
82
+ return fetchApi(this.transactionApiUrl.rollback, {
78
83
  method: "POST",
79
- body: JSON.stringify({ action: "commit", uuid }),
84
+ body: JSON.stringify({ uuid }),
80
85
  credentials: "include",
81
86
  });
82
87
  });
@@ -89,7 +94,7 @@ const nonNullFetchApi = (input, init) => {
89
94
  if (v == null) {
90
95
  const error = {
91
96
  status: 500,
92
- error: "Unexpected null response",
97
+ title: "Unexpected null response",
93
98
  message: "Response was null but a value was expected",
94
99
  };
95
100
  reject(error);
@@ -101,7 +106,11 @@ const nonNullFetchApi = (input, init) => {
101
106
  .catch(reject));
102
107
  };
103
108
  const fetchApi = (input, init) => {
104
- return new Promise((resolve, reject) => fetch(input, init).then((response) => {
109
+ let headers = init === null || init === void 0 ? void 0 : init.headers;
110
+ if ((init === null || init === void 0 ? void 0 : init.method) && init.method !== "GET" && init.method !== "DELETE") {
111
+ headers = Object.assign({ "Content-Type": "application/json;charset=UTF-8" }, init === null || init === void 0 ? void 0 : init.headers);
112
+ }
113
+ return new Promise((resolve, reject) => fetch(input, Object.assign(Object.assign({}, init), { headers })).then((response) => {
105
114
  const status = response.status;
106
115
  if (status >= 200 && status < 300) {
107
116
  if (status === 204) {
@@ -119,11 +128,7 @@ const fetchApi = (input, init) => {
119
128
  }
120
129
  else {
121
130
  response.json().then((data) => {
122
- reject({
123
- status,
124
- error: data.error,
125
- message: data.message,
126
- });
131
+ reject(Object.assign({ status }, data));
127
132
  });
128
133
  }
129
134
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Api.js","sourceRoot":"","sources":["../../src/api/Api.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@cubicweb/client",
3
3
  "description": "Official JS client for CubicWeb API",
4
4
  "author": "Logilab",
5
- "version": "1.1.1",
5
+ "version": "1.2.0",
6
6
  "license": "LGPL-3.0-or-later",
7
7
  "main": "lib/index.js",
8
8
  "types": "lib/index.d.ts",
package/src/api/Api.ts CHANGED
@@ -8,18 +8,32 @@ export interface RQLParams {
8
8
 
9
9
  export type RqlRow = Array<string | number | boolean | null>;
10
10
  export type ResultSet = Array<RqlRow>;
11
- export type ApiError = { error: string; message: string };
11
+ type ApiError = {
12
+ title: string;
13
+ message: string;
14
+ data?: Record<string, unknown>;
15
+ };
12
16
  export type ApiErrorResponse = {
13
17
  status: number;
14
18
  } & ApiError;
15
19
 
16
20
  export default class Api {
17
21
  private apiUrl: string;
18
- private transactionApiUrl: string;
22
+ private transactionApiUrl = {
23
+ begin: "",
24
+ execute: "",
25
+ commit: "",
26
+ rollback: "",
27
+ };
19
28
 
20
29
  constructor(apiUrl: string) {
21
30
  this.apiUrl = `${apiUrl}/v1`;
22
- this.transactionApiUrl = `${this.apiUrl}/transaction`;
31
+ Object.keys(this.transactionApiUrl).forEach(
32
+ (k) =>
33
+ (this.transactionApiUrl[
34
+ k as keyof typeof this.transactionApiUrl
35
+ ] = `${this.apiUrl}/transaction/${k}`)
36
+ );
23
37
  }
24
38
 
25
39
  async execute(query: string, params: RQLParams): Promise<ResultSet> {
@@ -51,9 +65,8 @@ export default class Api {
51
65
  }
52
66
 
53
67
  async transactionBegin(): Promise<string> {
54
- return nonNullFetchApi<string>(this.transactionApiUrl, {
68
+ return nonNullFetchApi<string>(this.transactionApiUrl.begin, {
55
69
  method: "POST",
56
- body: JSON.stringify({ action: "begin" }),
57
70
  credentials: "include",
58
71
  });
59
72
  }
@@ -63,25 +76,25 @@ export default class Api {
63
76
  query: string,
64
77
  params: RQLParams
65
78
  ): Promise<ResultSet> {
66
- return nonNullFetchApi<ResultSet>(this.transactionApiUrl, {
79
+ return nonNullFetchApi<ResultSet>(this.transactionApiUrl.execute, {
67
80
  method: "POST",
68
- body: JSON.stringify({ action: "execute", uuid, query, params }),
81
+ body: JSON.stringify({ uuid, query, params }),
69
82
  credentials: "include",
70
83
  });
71
84
  }
72
85
 
73
86
  async transactionCommit(uuid: string): Promise<null> {
74
- return fetchApi<null>(this.transactionApiUrl, {
87
+ return fetchApi<null>(this.transactionApiUrl.commit, {
75
88
  method: "POST",
76
- body: JSON.stringify({ action: "commit", uuid }),
89
+ body: JSON.stringify({ uuid }),
77
90
  credentials: "include",
78
91
  });
79
92
  }
80
93
 
81
94
  async transactionRollback(uuid: string): Promise<null> {
82
- return fetchApi<null>(this.transactionApiUrl, {
95
+ return fetchApi<null>(this.transactionApiUrl.rollback, {
83
96
  method: "POST",
84
- body: JSON.stringify({ action: "commit", uuid }),
97
+ body: JSON.stringify({ uuid }),
85
98
  credentials: "include",
86
99
  });
87
100
  }
@@ -98,7 +111,7 @@ const nonNullFetchApi = <R = unknown>(
98
111
  if (v == null) {
99
112
  const error: ApiErrorResponse = {
100
113
  status: 500,
101
- error: "Unexpected null response",
114
+ title: "Unexpected null response",
102
115
  message: "Response was null but a value was expected",
103
116
  };
104
117
  reject(error);
@@ -111,12 +124,22 @@ const nonNullFetchApi = <R = unknown>(
111
124
  };
112
125
 
113
126
  const fetchApi = <R = unknown>(input: RequestInfo, init?: RequestInit) => {
127
+ let headers = init?.headers;
128
+ if (init?.method && init.method !== "GET" && init.method !== "DELETE") {
129
+ headers = {
130
+ "Content-Type": "application/json;charset=UTF-8",
131
+ ...init?.headers,
132
+ };
133
+ }
114
134
  return new Promise(
115
135
  (
116
136
  resolve: (value: R | null) => void,
117
137
  reject: (reason: ApiErrorResponse) => void
118
138
  ) =>
119
- fetch(input, init).then((response) => {
139
+ fetch(input, {
140
+ ...init,
141
+ headers,
142
+ }).then((response) => {
120
143
  const status = response.status;
121
144
  if (status >= 200 && status < 300) {
122
145
  if (status === 204) {
@@ -134,8 +157,7 @@ const fetchApi = <R = unknown>(input: RequestInfo, init?: RequestInit) => {
134
157
  response.json().then((data: ApiError) => {
135
158
  reject({
136
159
  status,
137
- error: data.error,
138
- message: data.message,
160
+ ...data,
139
161
  });
140
162
  });
141
163
  }