@fraym/crud 0.16.2 → 0.17.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 CHANGED
@@ -95,42 +95,57 @@ const list = await managementClient.getAllTypes();
95
95
  The name of `YourCrudType` has to equal your type name in your schema (also in casing).
96
96
 
97
97
  ```typescript
98
- const { id } = await client.create("tenantId", "YourCrudType", {
98
+ const response = await client.create<any>("YourCrudType", authData, {
99
99
  // values here
100
100
  });
101
101
  ```
102
102
 
103
+ The response contains the following fields:
104
+
105
+ In case of no validation errors:
106
+
107
+ - `data`: The new data after your create action
108
+
109
+ In case of validation errors:
110
+
111
+ - `validationErrors`: List of global validation errors that are not related to a single field
112
+ - `fieldValidationErrors`: Validation errors mapped by the name of the field that they relate to
113
+
103
114
  ### Update data
104
115
 
105
116
  The name of `YourCrudType` has to equal your type name in your schema (also in casing).
106
- The `id` has to match the id of the data that you want to update.
107
117
 
108
118
  ```typescript
109
- await client.update("tenantId", "YourCrudType", "id", {
119
+ const response = await client.update<any>("YourCrudType", authData, {
110
120
  // values here
111
121
  });
112
122
  ```
113
123
 
114
- ### Delete data
124
+ The response contains the following fields:
115
125
 
116
- The name of `YourCrudType` has to equal your type name in your schema (also in casing).
126
+ In case of no validation errors:
117
127
 
118
- Delete all data of a type:
128
+ - `data`: The new data after your create action
119
129
 
120
- ```typescript
121
- await client.delete("tenantId", "YourCrudType");
122
- ```
130
+ In case of validation errors:
131
+
132
+ - `validationErrors`: List of global validation errors that are not related to a single field
133
+ - `fieldValidationErrors`: Validation errors mapped by the name of the field that they relate to
134
+
135
+ ### Delete data
136
+
137
+ The name of `YourCrudType` has to equal your type name in your schema (also in casing).
123
138
 
124
139
  Delete data matching a specific ID:
125
140
 
126
141
  ```typescript
127
- await client.delete("tenantId", "YourCrudType", "id");
142
+ const numberOfDeletedEntries = await client.deleteDataById("YourCrudType", authData, "id");
128
143
  ```
129
144
 
130
145
  Delete data matching a filter (see filter parameter for `getDataList` for details):
131
146
 
132
147
  ```typescript
133
- await client.delete("tenantId", "YourCrudType", undefined, {
148
+ const numberOfDeletedEntries = await client.deleteDataByFilter("YourCrudType", authData, {
134
149
  fields: {
135
150
  fieldName: {
136
151
  operation: "equals",
@@ -143,17 +158,31 @@ await client.delete("tenantId", "YourCrudType", undefined, {
143
158
 
144
159
  ### Get a single data element
145
160
 
146
- The name of `YourCrudType` has to equal your type name in your schema (also in casing).
147
- The `id` has to match the id of the data that you want to get.
161
+ A filter could look like this:
148
162
 
149
- ```typescript
150
- const data = await client.getData("tenantId", "YourCrudType", "id");
163
+ ```go
164
+ const filter := {
165
+ fields: {
166
+ fieldName: {
167
+ operation: "equals",
168
+ type: "Int",
169
+ value: 123,
170
+ },
171
+ },
172
+ }
151
173
  ```
152
174
 
153
- You can specify a fourth parameter if you want to return a empty dataset instead of getting an error when querying a non existing element:
175
+ The name of `YourCrudType` has to equal your type name in your schema (also in casing).
176
+ The `id` has to match the id of the data that you want to get.
154
177
 
155
178
  ```typescript
156
- const data = await client.getData("tenantId", "YourCrudType", "id", true);
179
+ const data = await client.getData(
180
+ "YourCrudType",
181
+ authData,
182
+ "id",
183
+ filter,
184
+ returnEmptyDataIfNotFound
185
+ );
157
186
  ```
158
187
 
159
188
  ### Get (paginated / filtered / ordered) data
@@ -163,21 +192,28 @@ The name of `YourCrudType` has to equal your type name in your schema (also in c
163
192
  No pagination:
164
193
 
165
194
  ```typescript
166
- const data = await client.getDataList("tenantId", "YourCrudType");
195
+ const dataList = await client.getDataList("YourCrudType", authData);
167
196
  ```
168
197
 
198
+ The dataList response contains the following fields:
199
+
200
+ - `limit`: The pagination limit
201
+ - `page`: The pagination page
202
+ - `total`: The total amount of elements matching the given filter
203
+ - `data`: The selected data
204
+
169
205
  With pagination:
170
206
 
171
207
  ```typescript
172
208
  const limit = 50; // elements to query per page
173
209
  const page = 1; // number of the page you want to select, first page starts at: 1
174
- const data = await client.getDataList("tenantId", "YourCrudType", limit, page);
210
+ const dataList = await client.getDataList("YourCrudType", authData, limit, page);
175
211
  ```
176
212
 
177
213
  With filter:
178
214
 
179
215
  ```typescript
180
- const data = await client.getDataList("tenantId", "YourCrudType", undefined, undefined, {
216
+ const dataList = await client.getDataList("YourCrudType", authData, undefined, undefined, {
181
217
  fields: {
182
218
  fieldName: {
183
219
  operation: "equals",
@@ -232,15 +268,22 @@ With order:
232
268
  All order definitions are prioritized in the order that they are defined (the first definition is prioritized over the second).
233
269
 
234
270
  ```typescript
235
- const data = await client.getDataList("tenantId", "YourCrudType", undefined, undefined, undefined, [
236
- {
237
- field: "fieldName",
238
- descending: true, // omit this value for asc order
239
- },
240
- ]);
271
+ const dataList = await client.getDataList(
272
+ "YourCrudType",
273
+ authData,
274
+ undefined,
275
+ undefined,
276
+ undefined,
277
+ [
278
+ {
279
+ field: "fieldName",
280
+ descending: true, // omit this value for asc order
281
+ },
282
+ ]
283
+ );
241
284
  ```
242
285
 
243
- ### Gracefully close the clients
286
+ ### Gracefully close the client
244
287
 
245
288
  You won't lose any data if you don't. Use it for your peace of mind.
246
289
 
@@ -0,0 +1,7 @@
1
+ import { AuthData as PbAuthData } from "@fraym/crud-proto";
2
+ export interface AuthData {
3
+ tenantId: string;
4
+ scopes: string[];
5
+ data: Record<string, any>;
6
+ }
7
+ export declare const getProtobufAuthData: (auth: AuthData) => PbAuthData;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProtobufAuthData = void 0;
4
+ const getProtobufAuthData = (auth) => {
5
+ const data = {};
6
+ for (let key in auth.data) {
7
+ data[key] = JSON.stringify(auth.data[key]);
8
+ }
9
+ return {
10
+ tenantId: auth.tenantId,
11
+ scopes: auth.scopes,
12
+ data,
13
+ };
14
+ };
15
+ exports.getProtobufAuthData = getProtobufAuthData;
@@ -1,14 +1,18 @@
1
1
  import { DeliveryClientConfig } from "../config/config";
2
- import { CreatedCrudData } from "./create";
2
+ import { CreateResponse } from "./create";
3
+ import { UpdateResponse } from "./update";
3
4
  import { GetCrudDataList } from "./getDataList";
4
5
  import { Filter } from "./filter";
5
6
  import { Order } from "./order";
7
+ import { AuthData } from "./auth";
8
+ import { EventMetadata } from "./eventMetadata";
6
9
  export interface DeliveryClient {
7
- create: (tenantId: string, type: string, data: Record<string, any>, id?: string) => Promise<CreatedCrudData>;
8
- update: (tenantId: string, type: string, id: string, data: Record<string, any>) => Promise<void>;
9
- delete: (tenantId: string, type: string, id?: string, filter?: Filter) => Promise<void>;
10
- getData: <T extends {}>(tenantId: string, type: string, id: string, returnEmptyDataIfNotFound?: boolean) => Promise<T>;
11
- getDataList: <T extends {}>(tenantId: string, type: string, limit?: number, page?: number, filter?: Filter, order?: Order[]) => Promise<GetCrudDataList<T>>;
10
+ getData: <T extends {}>(type: string, authData: AuthData, id: string, filter?: Filter, returnEmptyDataIfNotFound?: boolean) => Promise<T | null>;
11
+ getDataList: <T extends {}>(type: string, authData: AuthData, limit?: number, page?: number, filter?: Filter, order?: Order[]) => Promise<GetCrudDataList<T>>;
12
+ create: <T extends {}>(type: string, authData: AuthData, data: Record<string, any>, id?: string, eventMetadata?: EventMetadata) => Promise<CreateResponse<T>>;
13
+ update: <T extends {}>(type: string, authData: AuthData, id: string, data: Record<string, any>, eventMetadata?: EventMetadata) => Promise<UpdateResponse<T>>;
14
+ deleteDataById: (type: string, authData: AuthData, id: string, eventMetadata?: EventMetadata) => Promise<number>;
15
+ deleteDataByFilter: (type: string, authData: AuthData, filter?: Filter, eventMetadata?: EventMetadata) => Promise<number>;
12
16
  close: () => Promise<void>;
13
17
  }
14
18
  export declare const newDeliveryClient: (config?: DeliveryClientConfig) => Promise<DeliveryClient>;
@@ -16,30 +16,34 @@ const newDeliveryClient = async (config) => {
16
16
  "grpc.keepalive_timeout_ms": config.keepaliveTimeout,
17
17
  "grpc.keepalive_permit_without_calls": 1,
18
18
  });
19
- const create = async (tenantId, type, data, id = "") => {
20
- return await (0, create_1.createCrudData)(tenantId, type, data, id, serviceClient);
19
+ const getData = async (type, authData, id, filter = { fields: {}, and: [], or: [] }, returnEmptyDataIfNotFound = false) => {
20
+ return await (0, getData_1.getCrudData)(type, authData, id, filter, returnEmptyDataIfNotFound, serviceClient);
21
21
  };
22
- const update = async (tenantId, type, id, data) => {
23
- return await (0, update_1.updateCrudData)(tenantId, type, id, data, serviceClient);
22
+ const getDataList = async (type, authData, limit = 0, page = 1, filter = { fields: {}, and: [], or: [] }, order = []) => {
23
+ return await (0, getDataList_1.getCrudDataList)(type, authData, limit, page, filter, order, serviceClient);
24
24
  };
25
- const deleter = async (tenantId, type, id = "", filter = { fields: {}, and: [], or: [] }) => {
26
- return await (0, delete_1.deleteCrudData)(tenantId, type, id, filter, serviceClient);
25
+ const create = async (type, authData, data, id = "", eventMetadata = { causationId: "", correlationId: "" }) => {
26
+ return await (0, create_1.createCrudData)(type, authData, data, id, eventMetadata, serviceClient);
27
27
  };
28
- const getData = async (tenantId, type, id, returnEmptyDataIfNotFound = false) => {
29
- return await (0, getData_1.getCrudData)(tenantId, type, id, returnEmptyDataIfNotFound, serviceClient);
28
+ const update = async (type, authData, id, data, eventMetadata = { causationId: "", correlationId: "" }) => {
29
+ return await (0, update_1.updateCrudData)(type, authData, id, data, eventMetadata, serviceClient);
30
30
  };
31
- const getDataList = async (tenantId, type, limit = 0, page = 1, filter = { fields: {}, and: [], or: [] }, order = []) => {
32
- return await (0, getDataList_1.getCrudDataList)(tenantId, type, limit, page, filter, order, serviceClient);
31
+ const deleteDataById = async (type, authData, id, eventMetadata = { causationId: "", correlationId: "" }) => {
32
+ return await (0, delete_1.deleteCrudData)(type, authData, id, { fields: {}, and: [], or: [] }, eventMetadata, serviceClient);
33
+ };
34
+ const deleteDataByFilter = async (type, authData, filter = { fields: {}, and: [], or: [] }, eventMetadata = { causationId: "", correlationId: "" }) => {
35
+ return await (0, delete_1.deleteCrudData)(type, authData, "", filter, eventMetadata, serviceClient);
33
36
  };
34
37
  const close = async () => {
35
38
  serviceClient.close();
36
39
  };
37
40
  return {
38
- create,
39
- update,
40
- delete: deleter,
41
41
  getData,
42
42
  getDataList,
43
+ create,
44
+ update,
45
+ deleteDataById,
46
+ deleteDataByFilter,
43
47
  close,
44
48
  };
45
49
  };
@@ -1,5 +1,14 @@
1
1
  import { DeliveryServiceClient } from "@fraym/crud-proto";
2
- export interface CreatedCrudData {
3
- id: string;
2
+ import { AuthData } from "./auth";
3
+ import { EventMetadata } from "./eventMetadata";
4
+ export type CreateResponse<T extends {}> = CreateSuccessResponse<T> | CreateValidationResponse;
5
+ export interface CreateSuccessResponse<T extends {}> {
6
+ data: T;
4
7
  }
5
- export declare const createCrudData: (tenantId: string, type: string, data: Record<string, any>, id: string, serviceClient: DeliveryServiceClient) => Promise<CreatedCrudData>;
8
+ export interface CreateValidationResponse {
9
+ validationErrors: string[];
10
+ fieldValidationErrors: Record<string, string>;
11
+ }
12
+ export declare const isCreateSuccessResponse: <T extends {}>(response: CreateResponse<T>) => response is CreateSuccessResponse<T>;
13
+ export declare const isCreateValidationResponse: <T extends {}>(response: CreateResponse<T>) => response is CreateValidationResponse;
14
+ export declare const createCrudData: <T extends {}>(type: string, authData: AuthData, data: Record<string, any>, id: string, eventMetadata: EventMetadata, serviceClient: DeliveryServiceClient) => Promise<CreateResponse<T>>;
@@ -1,24 +1,45 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createCrudData = void 0;
4
- const createCrudData = async (tenantId, type, data, id, serviceClient) => {
3
+ exports.createCrudData = exports.isCreateValidationResponse = exports.isCreateSuccessResponse = void 0;
4
+ const auth_1 = require("./auth");
5
+ const isCreateSuccessResponse = (response) => {
6
+ return response.hasOwnProperty("data");
7
+ };
8
+ exports.isCreateSuccessResponse = isCreateSuccessResponse;
9
+ const isCreateValidationResponse = (response) => {
10
+ return !response.hasOwnProperty("data");
11
+ };
12
+ exports.isCreateValidationResponse = isCreateValidationResponse;
13
+ const createCrudData = async (type, authData, data, id, eventMetadata, serviceClient) => {
5
14
  const requestData = {};
6
15
  for (const key in data) {
7
16
  requestData[key] = JSON.stringify(data[key]);
8
17
  }
9
18
  return new Promise((resolve, reject) => {
10
19
  serviceClient.createEntry({
11
- tenantId,
12
20
  type,
21
+ auth: (0, auth_1.getProtobufAuthData)(authData),
13
22
  data: requestData,
14
23
  id,
24
+ eventMetadata,
15
25
  }, (error, response) => {
16
26
  if (error) {
17
27
  reject(error.message);
18
28
  return;
19
29
  }
30
+ if (response.validationErrors || response.fieldValidationErrors) {
31
+ resolve({
32
+ validationErrors: response.validationErrors,
33
+ fieldValidationErrors: response.fieldValidationErrors,
34
+ });
35
+ return;
36
+ }
37
+ const data = {};
38
+ for (const key in response.newData) {
39
+ data[key] = JSON.parse(response.newData[key]);
40
+ }
20
41
  resolve({
21
- id: response.id,
42
+ data,
22
43
  });
23
44
  });
24
45
  });
@@ -1,3 +1,5 @@
1
1
  import { DeliveryServiceClient } from "@fraym/crud-proto";
2
+ import { AuthData } from "./auth";
3
+ import { EventMetadata } from "./eventMetadata";
2
4
  import { Filter } from "./filter";
3
- export declare const deleteCrudData: (tenantId: string, type: string, id: string, filter: Filter, serviceClient: DeliveryServiceClient) => Promise<void>;
5
+ export declare const deleteCrudData: (type: string, authData: AuthData, id: string, filter: Filter, eventMetadata: EventMetadata, serviceClient: DeliveryServiceClient) => Promise<number>;
@@ -1,20 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deleteCrudData = void 0;
4
+ const auth_1 = require("./auth");
4
5
  const filter_1 = require("./filter");
5
- const deleteCrudData = async (tenantId, type, id, filter, serviceClient) => {
6
+ const deleteCrudData = async (type, authData, id, filter, eventMetadata, serviceClient) => {
6
7
  return new Promise((resolve, reject) => {
7
8
  serviceClient.deleteEntries({
8
- tenantId,
9
9
  type,
10
+ auth: (0, auth_1.getProtobufAuthData)(authData),
10
11
  id,
11
12
  filter: (0, filter_1.getProtobufEntryFilter)(filter),
12
- }, error => {
13
+ eventMetadata,
14
+ }, (error, response) => {
13
15
  if (error) {
14
16
  reject(error.message);
15
17
  return;
16
18
  }
17
- resolve();
19
+ resolve(response.numberOfDeletedEntries);
18
20
  });
19
21
  });
20
22
  };
@@ -0,0 +1,4 @@
1
+ export interface EventMetadata {
2
+ correlationId: string;
3
+ causationId: string;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +1,4 @@
1
1
  import { DeliveryServiceClient } from "@fraym/crud-proto";
2
- export declare const getCrudData: <T extends {}>(tenantId: string, type: string, id: string, returnEmptyDataIfNotFound: boolean, serviceClient: DeliveryServiceClient) => Promise<T>;
2
+ import { AuthData } from "./auth";
3
+ import { Filter } from "./filter";
4
+ export declare const getCrudData: <T extends {}>(type: string, authData: AuthData, id: string, filter: Filter, returnEmptyDataIfNotFound: boolean, serviceClient: DeliveryServiceClient) => Promise<T | null>;
@@ -1,29 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getCrudData = void 0;
4
- const getCrudData = async (tenantId, type, id, returnEmptyDataIfNotFound, serviceClient) => {
4
+ const auth_1 = require("./auth");
5
+ const filter_1 = require("./filter");
6
+ const getCrudData = async (type, authData, id, filter, returnEmptyDataIfNotFound, serviceClient) => {
5
7
  return new Promise((resolve, reject) => {
6
- serviceClient.getEntries({
7
- tenantId,
8
+ serviceClient.getEntry({
8
9
  type,
10
+ auth: (0, auth_1.getProtobufAuthData)(authData),
11
+ filter: (0, filter_1.getProtobufEntryFilter)(filter),
9
12
  id,
10
- limit: 0,
11
- page: 0,
12
13
  returnEmptyDataIfNotFound,
13
- filter: { fields: {}, and: [], or: [] },
14
- order: [],
15
14
  }, (error, response) => {
16
15
  if (error) {
17
16
  reject(error.message);
18
17
  return;
19
18
  }
20
- if (response.result.length !== 1) {
21
- throw new Error("did not find the requested crud entry");
19
+ const result = response.result;
20
+ if (!result) {
21
+ resolve(null);
22
+ return;
22
23
  }
23
24
  const data = {};
24
- const resultData = response.result[0].data;
25
- for (const key in resultData) {
26
- data[key] = JSON.parse(resultData[key]);
25
+ for (const key in result.data) {
26
+ data[key] = JSON.parse(result.data[key]);
27
27
  }
28
28
  resolve(data);
29
29
  });
@@ -1,9 +1,11 @@
1
1
  import { DeliveryServiceClient } from "@fraym/crud-proto";
2
+ import { AuthData } from "./auth";
2
3
  import { Filter } from "./filter";
3
4
  import { Order } from "./order";
4
5
  export interface GetCrudDataList<T extends {}> {
5
6
  limit: number;
6
7
  page: number;
8
+ total: number;
7
9
  data: T[];
8
10
  }
9
- export declare const getCrudDataList: <T extends {}>(tenantId: string, type: string, limit: number, page: number, filter: Filter, order: Order[], serviceClient: DeliveryServiceClient) => Promise<GetCrudDataList<T>>;
11
+ export declare const getCrudDataList: <T extends {}>(type: string, authData: AuthData, limit: number, page: number, filter: Filter, order: Order[], serviceClient: DeliveryServiceClient) => Promise<GetCrudDataList<T>>;
@@ -1,17 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getCrudDataList = void 0;
4
+ const auth_1 = require("./auth");
4
5
  const filter_1 = require("./filter");
5
6
  const order_1 = require("./order");
6
- const getCrudDataList = async (tenantId, type, limit, page, filter, order, serviceClient) => {
7
+ const getCrudDataList = async (type, authData, limit, page, filter, order, serviceClient) => {
7
8
  return new Promise((resolve, reject) => {
8
- serviceClient.getEntries({
9
- tenantId,
9
+ serviceClient.getEntryList({
10
10
  type,
11
- id: "",
11
+ auth: (0, auth_1.getProtobufAuthData)(authData),
12
12
  limit,
13
13
  page,
14
- returnEmptyDataIfNotFound: false,
15
14
  filter: (0, filter_1.getProtobufEntryFilter)(filter),
16
15
  order: (0, order_1.getProtobufEntryOrder)(order),
17
16
  }, (error, response) => {
@@ -31,6 +30,7 @@ const getCrudDataList = async (tenantId, type, limit, page, filter, order, servi
31
30
  resolve({
32
31
  limit: response.limit,
33
32
  page: response.page,
33
+ total: response.total,
34
34
  data,
35
35
  });
36
36
  });
@@ -1,2 +1,14 @@
1
1
  import { DeliveryServiceClient } from "@fraym/crud-proto";
2
- export declare const updateCrudData: (tenantId: string, type: string, id: string, data: Record<string, any>, serviceClient: DeliveryServiceClient) => Promise<void>;
2
+ import { AuthData } from "./auth";
3
+ import { EventMetadata } from "./eventMetadata";
4
+ export type UpdateResponse<T extends {}> = UpdateSuccessResponse<T> | UpdateValidationResponse;
5
+ export interface UpdateSuccessResponse<T extends {}> {
6
+ data: T;
7
+ }
8
+ export interface UpdateValidationResponse {
9
+ validationErrors: string[];
10
+ fieldValidationErrors: Record<string, string>;
11
+ }
12
+ export declare const isUpdateSuccessResponse: <T extends {}>(response: UpdateResponse<T>) => response is UpdateSuccessResponse<T>;
13
+ export declare const isUpdateValidationResponse: <T extends {}>(response: UpdateResponse<T>) => response is UpdateValidationResponse;
14
+ export declare const updateCrudData: <T extends {}>(type: string, authData: AuthData, id: string, data: Record<string, any>, eventMetadata: EventMetadata, serviceClient: DeliveryServiceClient) => Promise<UpdateResponse<T>>;
@@ -1,23 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateCrudData = void 0;
4
- const updateCrudData = async (tenantId, type, id, data, serviceClient) => {
3
+ exports.updateCrudData = exports.isUpdateValidationResponse = exports.isUpdateSuccessResponse = void 0;
4
+ const auth_1 = require("./auth");
5
+ const isUpdateSuccessResponse = (response) => {
6
+ return response.hasOwnProperty("data");
7
+ };
8
+ exports.isUpdateSuccessResponse = isUpdateSuccessResponse;
9
+ const isUpdateValidationResponse = (response) => {
10
+ return !response.hasOwnProperty("data");
11
+ };
12
+ exports.isUpdateValidationResponse = isUpdateValidationResponse;
13
+ const updateCrudData = async (type, authData, id, data, eventMetadata, serviceClient) => {
5
14
  const requestData = {};
6
15
  for (const key in data) {
7
16
  requestData[key] = JSON.stringify(data[key]);
8
17
  }
9
18
  return new Promise((resolve, reject) => {
10
19
  serviceClient.updateEntry({
11
- tenantId,
12
20
  type,
13
- id,
21
+ auth: (0, auth_1.getProtobufAuthData)(authData),
14
22
  data: requestData,
15
- }, error => {
23
+ id,
24
+ eventMetadata,
25
+ }, (error, response) => {
16
26
  if (error) {
17
27
  reject(error.message);
18
28
  return;
19
29
  }
20
- resolve();
30
+ if (response.validationErrors || response.fieldValidationErrors) {
31
+ resolve({
32
+ validationErrors: response.validationErrors,
33
+ fieldValidationErrors: response.fieldValidationErrors,
34
+ });
35
+ return;
36
+ }
37
+ const data = {};
38
+ for (const key in response.newData) {
39
+ data[key] = JSON.parse(response.newData[key]);
40
+ }
41
+ resolve({
42
+ data,
43
+ });
21
44
  });
22
45
  });
23
46
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fraym/crud",
3
- "version": "0.16.2",
3
+ "version": "0.17.0",
4
4
  "license": "UNLICENSED",
5
5
  "homepage": "https://github.com/fraym/crud-nodejs",
6
6
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "crud": "dist/cmd/crud.js"
28
28
  },
29
29
  "dependencies": {
30
- "@fraym/crud-proto": "1.0.0-alpha.12",
30
+ "@fraym/crud-proto": "1.0.0-alpha.14",
31
31
  "@graphql-tools/graphql-file-loader": "^7.5.14",
32
32
  "@graphql-tools/load": "^7.8.9",
33
33
  "@grpc/grpc-js": "^1.8.7",