@fraym/crud 0.21.1 → 0.30.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.
Files changed (53) hide show
  1. package/README.md +6 -252
  2. package/dist/{delivery → client}/auth.d.ts +1 -1
  3. package/dist/client/auth.js +1 -0
  4. package/dist/client/client.d.ts +22 -0
  5. package/dist/client/client.js +1 -0
  6. package/dist/client/clone.d.ts +15 -0
  7. package/dist/client/clone.js +1 -0
  8. package/dist/client/config.js +1 -0
  9. package/dist/client/create.d.ts +15 -0
  10. package/dist/client/create.js +1 -0
  11. package/dist/client/data.d.ts +1 -0
  12. package/dist/client/data.js +1 -0
  13. package/dist/{delivery → client}/delete.d.ts +1 -1
  14. package/dist/client/delete.js +1 -0
  15. package/dist/client/eventMetadata.d.ts +7 -0
  16. package/dist/client/eventMetadata.js +1 -0
  17. package/dist/{delivery → client}/filter.d.ts +1 -1
  18. package/dist/client/filter.js +1 -0
  19. package/dist/client/getData.d.ts +6 -0
  20. package/dist/client/getData.js +1 -0
  21. package/dist/client/getDataList.d.ts +12 -0
  22. package/dist/client/getDataList.js +1 -0
  23. package/dist/{delivery → client}/order.d.ts +1 -1
  24. package/dist/client/order.js +1 -0
  25. package/dist/client/update.d.ts +15 -0
  26. package/dist/client/update.js +1 -0
  27. package/dist/{delivery → client}/wait.d.ts +1 -1
  28. package/dist/client/wait.js +1 -0
  29. package/dist/eslint.config.js +1 -0
  30. package/dist/index.d.ts +8 -4
  31. package/dist/index.js +1 -18
  32. package/package.json +11 -27
  33. package/dist/config/config.js +0 -37
  34. package/dist/delivery/auth.js +0 -15
  35. package/dist/delivery/client.d.ts +0 -21
  36. package/dist/delivery/client.js +0 -55
  37. package/dist/delivery/clone.d.ts +0 -14
  38. package/dist/delivery/clone.js +0 -42
  39. package/dist/delivery/create.d.ts +0 -14
  40. package/dist/delivery/create.js +0 -48
  41. package/dist/delivery/delete.js +0 -23
  42. package/dist/delivery/eventMetadata.d.ts +0 -4
  43. package/dist/delivery/eventMetadata.js +0 -2
  44. package/dist/delivery/filter.js +0 -20
  45. package/dist/delivery/getData.d.ts +0 -5
  46. package/dist/delivery/getData.js +0 -34
  47. package/dist/delivery/getDataList.d.ts +0 -11
  48. package/dist/delivery/getDataList.js +0 -39
  49. package/dist/delivery/order.js +0 -13
  50. package/dist/delivery/update.d.ts +0 -14
  51. package/dist/delivery/update.js +0 -48
  52. package/dist/delivery/wait.js +0 -15
  53. /package/dist/{config → client}/config.d.ts +0 -0
package/README.md CHANGED
@@ -1,257 +1,11 @@
1
- # crud-nodejs
1
+ # crud
2
2
 
3
- Client implementation in javascript for the [CRUD service](https://github.com/fraym/crud).
3
+ Client implementation in JavaScript for the Freym service [crud](https://github.com/fraym/crud).
4
4
 
5
- ## Installation
5
+ ## Docs
6
6
 
7
- ```shell
8
- npm i @fraym/crud
9
- ```
7
+ Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/crud/introduction).
10
8
 
11
- ## GraphQL
9
+ ## License
12
10
 
13
- You can access the graphQL api at `http://crud:3000/delivery/graphql`.
14
- There is a sandbox available at `http://crud:3000/delivery/graphql/sandbox`.
15
-
16
- You need to add the `Tenant-Id` header in order to use the graphQL Endpoint and the sandbox.
17
-
18
- ### Config
19
-
20
- Use a `.env` file or env variables to configure cte clients and the command:
21
-
22
- ```env
23
- CRUD_SERVER_ADDRESS=127.0.0.1:9000
24
- ```
25
-
26
- ## Usage
27
-
28
- ### Create the client
29
-
30
- ```typescript
31
- const deliveryClient = await newDeliveryClient();
32
- ```
33
-
34
- ### Authorization
35
-
36
- All delivery client functions make use of the `AuthData` object.
37
- This data is used to check access for the desired action.
38
-
39
- You can add the `FRAYM_AUTH_OWNER` scope in case you are performing an action that is no subject to restrictions.
40
-
41
- Fields:
42
-
43
- - `tenantId`: Id of the tenant to use
44
- - `scopes`: Slice of scopes to use for the action
45
- - `data`: Data that is used in directives like `@filterFromJwtData`
46
-
47
- ### Event Metadata
48
-
49
- You can specify the correlation and causation IDs for the upsert and delete functions. The `eventMetadata` parameter is optional for all these functions and has the following structure:
50
-
51
- ```typescript
52
- const eventMetadata = {
53
- correlationId: "some-correlation-id",
54
- causationId: "some-causation-id",
55
- };
56
- ```
57
-
58
- ### Create data
59
-
60
- The name of `YourCrudType` has to equal your type name in your schema (also in casing).
61
-
62
- ```typescript
63
- const response = await client.create<any>("YourCrudType", authData, {
64
- // values here
65
- });
66
- ```
67
-
68
- The response contains the following fields:
69
-
70
- In case of no validation errors:
71
-
72
- - `data`: The new data after your create action
73
-
74
- In case of validation errors:
75
-
76
- - `validationErrors`: List of global validation errors that are not related to a single field
77
- - `fieldValidationErrors`: Validation errors mapped by the name of the field that they relate to
78
-
79
- ### Update data
80
-
81
- The name of `YourCrudType` has to equal your type name in your schema (also in casing).
82
-
83
- ```typescript
84
- const response = await client.update<any>("YourCrudType", authData, {
85
- // values here
86
- });
87
- ```
88
-
89
- The response contains the following fields:
90
-
91
- In case of no validation errors:
92
-
93
- - `data`: The new data after your create action
94
-
95
- In case of validation errors:
96
-
97
- - `validationErrors`: List of global validation errors that are not related to a single field
98
- - `fieldValidationErrors`: Validation errors mapped by the name of the field that they relate to
99
-
100
- ### Delete data
101
-
102
- The name of `YourCrudType` has to equal your type name in your schema (also in casing).
103
-
104
- Delete data matching a specific ID:
105
-
106
- ```typescript
107
- const numberOfDeletedEntries = await client.deleteDataById("YourCrudType", authData, "id");
108
- ```
109
-
110
- Delete data matching a filter (see filter parameter for `getDataList` for details):
111
-
112
- ```typescript
113
- const numberOfDeletedEntries = await client.deleteDataByFilter("YourCrudType", authData, {
114
- fields: {
115
- fieldName: {
116
- operation: "equals",
117
- type: "Int",
118
- value: 123,
119
- },
120
- },
121
- });
122
- ```
123
-
124
- ### Get a single data element
125
-
126
- A filter could look like this:
127
-
128
- ```go
129
- const filter := {
130
- fields: {
131
- fieldName: {
132
- operation: "equals",
133
- type: "Int",
134
- value: 123,
135
- },
136
- },
137
- }
138
- ```
139
-
140
- The name of `YourCrudType` has to equal your type name in your schema (also in casing).
141
- The `id` has to match the id of the data that you want to get.
142
-
143
- ```typescript
144
- const data = await client.getData(
145
- "YourCrudType",
146
- authData,
147
- "id",
148
- filter,
149
- returnEmptyDataIfNotFound
150
- );
151
- ```
152
-
153
- ### Get (paginated / filtered / ordered) data
154
-
155
- The name of `YourCrudType` has to equal your type name in your schema (also in casing).
156
-
157
- No pagination:
158
-
159
- ```typescript
160
- const dataList = await client.getDataList("YourCrudType", authData);
161
- ```
162
-
163
- The dataList response contains the following fields:
164
-
165
- - `limit`: The pagination limit
166
- - `page`: The pagination page
167
- - `total`: The total amount of elements matching the given filter
168
- - `data`: The selected data
169
-
170
- With pagination:
171
-
172
- ```typescript
173
- const limit = 50; // elements to query per page
174
- const page = 1; // number of the page you want to select, first page starts at: 1
175
- const dataList = await client.getDataList("YourCrudType", authData, limit, page);
176
- ```
177
-
178
- With filter:
179
-
180
- ```typescript
181
- const dataList = await client.getDataList("YourCrudType", authData, undefined, undefined, {
182
- fields: {
183
- fieldName: {
184
- operation: "equals",
185
- type: "Int",
186
- value: 123,
187
- },
188
- },
189
- });
190
- ```
191
-
192
- All `Filter`s are evaluated by:
193
-
194
- - checking that all field filters match
195
- - checking that all `and` filters match
196
- - checking that one of the `or` filters match
197
-
198
- Avaliable types:
199
-
200
- - `String`
201
- - `ID`
202
- - `DateTime`
203
- - `Int`
204
- - `Float`
205
- - `Boolean`
206
-
207
- Avaliable operators for all types:
208
-
209
- - `equals`
210
- - `notEquals`
211
-
212
- Avaliable options for the filter type `DateTime`:
213
-
214
- - `inArray`
215
- - `notInArray`
216
- - `after`
217
- - `before`
218
-
219
- Avaliable options for the filter type `String` and `ID`:
220
-
221
- - `inArray`
222
- - `notInArray`
223
-
224
- Avaliable options for the filter type `Int` and `Float`:
225
-
226
- - `lessThan`
227
- - `greaterThan`
228
- - `lessThanOrEqual`
229
- - `greaterThanOrEqual`
230
-
231
- With order:
232
-
233
- All order definitions are prioritized in the order that they are defined (the first definition is prioritized over the second).
234
-
235
- ```typescript
236
- const dataList = await client.getDataList(
237
- "YourCrudType",
238
- authData,
239
- undefined,
240
- undefined,
241
- undefined,
242
- [
243
- {
244
- field: "fieldName",
245
- descending: true, // omit this value for asc order
246
- },
247
- ]
248
- );
249
- ```
250
-
251
- ### Gracefully close the client
252
-
253
- You won't lose any data if you don't. Use it for your peace of mind.
254
-
255
- ```typescript
256
- client.close();
257
- ```
11
+ This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
@@ -1,4 +1,4 @@
1
- import { AuthData as pbAuthData } from "@fraym/proto/freym/crud/delivery";
1
+ import { AuthData as pbAuthData } from "@fraym/proto/dist/index.freym.crud.delivery";
2
2
  export interface AuthData {
3
3
  tenantId: string;
4
4
  scopes: string[];
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getProtobufAuthData",{enumerable:true,get:function(){return getProtobufAuthData}});var getProtobufAuthData=function(auth){var data={};for(var key in auth.data){data[key]=JSON.stringify(auth.data[key])}return{tenantId:auth.tenantId,scopes:auth.scopes,data:data}};
@@ -0,0 +1,22 @@
1
+ import { AuthData } from "./auth";
2
+ import { CloneResponse } from "./clone";
3
+ import { DeliveryClientConfig } from "./config";
4
+ import { CreateResponse } from "./create";
5
+ import { CrudData } from "./data";
6
+ import { EventMetadata } from "./eventMetadata";
7
+ import { Filter } from "./filter";
8
+ import { GetCrudDataList } from "./getDataList";
9
+ import { Order } from "./order";
10
+ import { UpdateResponse } from "./update";
11
+ import { Wait } from "./wait";
12
+ export interface DeliveryClient {
13
+ getData: <T extends CrudData>(type: string, authData: AuthData, id: string, filter?: Filter, returnEmptyDataIfNotFound?: boolean, useStrongConsistency?: boolean, deploymentId?: number, wait?: Wait) => Promise<T | null>;
14
+ getDataList: <T extends CrudData>(type: string, authData: AuthData, limit?: number, page?: number, filter?: Filter, order?: Order[], useStrongConsistency?: boolean, deploymentId?: number) => Promise<GetCrudDataList<T>>;
15
+ create: <T extends CrudData>(type: string, authData: AuthData, data: T, id?: string, eventMetadata?: Partial<EventMetadata>) => Promise<CreateResponse<T>>;
16
+ update: <T extends CrudData>(type: string, authData: AuthData, id: string, data: Partial<T>, eventMetadata?: Partial<EventMetadata>) => Promise<UpdateResponse<T>>;
17
+ clone: <T extends CrudData>(type: string, authData: AuthData, id: string, newId: string, data?: Partial<T>, eventMetadata?: Partial<EventMetadata>) => Promise<CloneResponse<T>>;
18
+ deleteDataById: (type: string, authData: AuthData, id: string, eventMetadata?: Partial<EventMetadata>) => Promise<number>;
19
+ deleteDataByFilter: (type: string, authData: AuthData, filter?: Filter, eventMetadata?: Partial<EventMetadata>) => Promise<number>;
20
+ close: () => Promise<void>;
21
+ }
22
+ export declare const newDeliveryClient: (config?: DeliveryClientConfig) => Promise<DeliveryClient>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"newDeliveryClient",{enumerable:true,get:function(){return newDeliveryClient}});var _indexfreymcruddelivery=require("@fraym/proto/dist/index.freym.crud.delivery");var _grpcjs=require("@grpc/grpc-js");var _clone=require("./clone");var _config=require("./config");var _create=require("./create");var _delete=require("./delete");var _eventMetadata=require("./eventMetadata");var _getData=require("./getData");var _getDataList=require("./getDataList");var _update=require("./update");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var newDeliveryClient=/*#__PURE__*/function(){var _ref=_async_to_generator(function(config){var serviceClient,getData,getDataList,create,update,clone,deleteDataById,deleteDataByFilter,close;return _ts_generator(this,function(_state){config=(0,_config.useDeliveryConfigDefaults)(config);serviceClient=new _indexfreymcruddelivery.ServiceClient(config.serverAddress,_grpcjs.credentials.createInsecure(),{"grpc.keepalive_time_ms":config.keepaliveInterval,"grpc.keepalive_timeout_ms":config.keepaliveTimeout,"grpc.keepalive_permit_without_calls":1});getData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,id){var filter,returnEmptyDataIfNotFound,useStrongConsistency,deploymentId,wait;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:filter=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:{fields:{},and:[],or:[]},returnEmptyDataIfNotFound=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:false,useStrongConsistency=_arguments.length>5&&_arguments[5]!==void 0?_arguments[5]:false,deploymentId=_arguments.length>6&&_arguments[6]!==void 0?_arguments[6]:null,wait=_arguments.length>7?_arguments[7]:void 0;return[4,(0,_getData.getCrudData)(type,authData,id,filter,returnEmptyDataIfNotFound,!!useStrongConsistency,deploymentId,serviceClient,wait)];case 1:return[2,_state.sent()]}})});return function getData(type,authData,id){return _ref.apply(this,arguments)}}();getDataList=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData){var limit,page,filter,order,useStrongConsistency,deploymentId;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:limit=_arguments.length>2&&_arguments[2]!==void 0?_arguments[2]:0,page=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:1,filter=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:{fields:{},and:[],or:[]},order=_arguments.length>5&&_arguments[5]!==void 0?_arguments[5]:[],useStrongConsistency=_arguments.length>6&&_arguments[6]!==void 0?_arguments[6]:false,deploymentId=_arguments.length>7&&_arguments[7]!==void 0?_arguments[7]:null;return[4,(0,_getDataList.getCrudDataList)(type,authData,limit,page,filter,order,!!useStrongConsistency,deploymentId,serviceClient)];case 1:return[2,_state.sent()]}})});return function getDataList(type,authData){return _ref.apply(this,arguments)}}();create=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,data){var id,eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:id=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:"",eventMetadata=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:null;return[4,(0,_create.createCrudData)(type,authData,data,id,(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata),serviceClient)];case 1:return[2,_state.sent()]}})});return function create(type,authData,data){return _ref.apply(this,arguments)}}();update=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,id,data){var eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:eventMetadata=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:null;return[4,(0,_update.updateCrudData)(type,authData,id,data,(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata),serviceClient)];case 1:return[2,_state.sent()]}})});return function update(type,authData,id,data){return _ref.apply(this,arguments)}}();clone=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,id,newId){var data,eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:data=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:{},eventMetadata=_arguments.length>5&&_arguments[5]!==void 0?_arguments[5]:null;return[4,(0,_clone.cloneCrudData)(type,authData,id,newId,data,(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata),serviceClient)];case 1:return[2,_state.sent()]}})});return function clone(type,authData,id,newId){return _ref.apply(this,arguments)}}();deleteDataById=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,id){var eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:eventMetadata=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:null;return[4,(0,_delete.deleteCrudData)(type,authData,id,{fields:{},and:[],or:[]},(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata),serviceClient)];case 1:return[2,_state.sent()]}})});return function deleteDataById(type,authData,id){return _ref.apply(this,arguments)}}();deleteDataByFilter=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData){var filter,eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:filter=_arguments.length>2&&_arguments[2]!==void 0?_arguments[2]:{fields:{},and:[],or:[]},eventMetadata=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:null;return[4,(0,_delete.deleteCrudData)(type,authData,"",filter,(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata),serviceClient)];case 1:return[2,_state.sent()]}})});return function deleteDataByFilter(type,authData){return _ref.apply(this,arguments)}}();close=/*#__PURE__*/function(){var _ref=_async_to_generator(function(){return _ts_generator(this,function(_state){serviceClient.close();return[2]})});return function close(){return _ref.apply(this,arguments)}}();return[2,{getData:getData,getDataList:getDataList,create:create,update:update,clone:clone,deleteDataById:deleteDataById,deleteDataByFilter:deleteDataByFilter,close:close}]})});return function newDeliveryClient(config){return _ref.apply(this,arguments)}}();
@@ -0,0 +1,15 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.crud.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { CrudData } from "./data";
4
+ import { EventMetadata } from "./eventMetadata";
5
+ export type CloneResponse<T extends CrudData> = CloneSuccessResponse<T> | CloneValidationResponse;
6
+ export interface CloneSuccessResponse<T extends CrudData> {
7
+ data: T;
8
+ }
9
+ export interface CloneValidationResponse {
10
+ validationErrors: string[];
11
+ fieldValidationErrors: Record<string, string>;
12
+ }
13
+ export declare const isCloneSuccessResponse: <T extends CrudData>(response: CloneResponse<T>) => response is CloneSuccessResponse<T>;
14
+ export declare const isCloneValidationResponse: <T extends CrudData>(response: CloneResponse<T>) => response is CloneValidationResponse;
15
+ export declare const cloneCrudData: <T extends CrudData>(type: string, authData: AuthData, id: string, newId: string, data: Partial<T>, eventMetadata: EventMetadata, serviceClient: ServiceClient) => Promise<CloneResponse<T>>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:all[name]})}_export(exports,{cloneCrudData:function(){return cloneCrudData},isCloneSuccessResponse:function(){return isCloneSuccessResponse},isCloneValidationResponse:function(){return isCloneValidationResponse}});var _auth=require("./auth");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var isCloneSuccessResponse=function(response){return Object.prototype.hasOwnProperty.call(response,"data")};var isCloneValidationResponse=function(response){return!Object.prototype.hasOwnProperty.call(response,"data")};var cloneCrudData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,id,newId,data,eventMetadata,serviceClient){var requestData,key;return _ts_generator(this,function(_state){requestData={};for(var key in data){requestData[key]=JSON.stringify(data[key])}return[2,new Promise(function(resolve,reject){serviceClient.clone({type:type,auth:(0,_auth.getProtobufAuthData)(authData),id:id,newId:newId,eventMetadata:eventMetadata,data:requestData},function(error,response){if(error){reject(error.message);return}if(response.validationErrors.length>0||Object.keys(response.fieldValidationErrors).length>0){resolve({validationErrors:response.validationErrors,fieldValidationErrors:response.fieldValidationErrors});return}var _$data={};for(var key in response.newData){if(response.newData[key]!==undefined){_$data[key]=JSON.parse(response.newData[key])}}resolve({data:_$data})})})]})});return function cloneCrudData(type,authData,id,newId,data,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:all[name]})}_export(exports,{getEnvDeliveryConfig:function(){return getEnvDeliveryConfig},useDeliveryConfigDefaults:function(){return useDeliveryConfigDefaults}});var _dotenv=require("dotenv");var getEnvDeliveryConfig=function(){(0,_dotenv.config)();var _process_env_CRUD_SERVER_ADDRESS;var serverAddress=(_process_env_CRUD_SERVER_ADDRESS=process.env.CRUD_SERVER_ADDRESS)!==null&&_process_env_CRUD_SERVER_ADDRESS!==void 0?_process_env_CRUD_SERVER_ADDRESS:"";var keepaliveInterval;var keepaliveTimeout;var keepaliveIntervalString=process.env.CRUD_CONNECTION_KEEPALIVE_INTERVAL;var keepaliveTimeoutString=process.env.CRUD_CONNECTION_KEEPALIVE_INTERVAL;if(keepaliveIntervalString){keepaliveInterval=parseInt(keepaliveIntervalString,10)}if(keepaliveTimeoutString){keepaliveTimeout=parseInt(keepaliveTimeoutString,10)}return{serverAddress:serverAddress,keepaliveInterval:keepaliveInterval,keepaliveTimeout:keepaliveTimeout}};var useDeliveryConfigDefaults=function(config){if(!config){config=getEnvDeliveryConfig()}var _config_keepaliveTimeout,_config_keepaliveInterval;return{serverAddress:config.serverAddress,keepaliveTimeout:(_config_keepaliveTimeout=config.keepaliveTimeout)!==null&&_config_keepaliveTimeout!==void 0?_config_keepaliveTimeout:3*1e3,keepaliveInterval:(_config_keepaliveInterval=config.keepaliveInterval)!==null&&_config_keepaliveInterval!==void 0?_config_keepaliveInterval:40*1e3}};
@@ -0,0 +1,15 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.crud.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { CrudData } from "./data";
4
+ import { EventMetadata } from "./eventMetadata";
5
+ export type CreateResponse<T extends CrudData> = CreateSuccessResponse<T> | CreateValidationResponse;
6
+ export interface CreateSuccessResponse<T extends CrudData> {
7
+ data: T;
8
+ }
9
+ export interface CreateValidationResponse {
10
+ validationErrors: string[];
11
+ fieldValidationErrors: Record<string, string>;
12
+ }
13
+ export declare const isCreateSuccessResponse: <T extends CrudData>(response: CreateResponse<T>) => response is CreateSuccessResponse<T>;
14
+ export declare const isCreateValidationResponse: <T extends CrudData>(response: CreateResponse<T>) => response is CreateValidationResponse;
15
+ export declare const createCrudData: <T extends CrudData>(type: string, authData: AuthData, data: T, id: string, eventMetadata: EventMetadata, serviceClient: ServiceClient) => Promise<CreateResponse<T>>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:all[name]})}_export(exports,{createCrudData:function(){return createCrudData},isCreateSuccessResponse:function(){return isCreateSuccessResponse},isCreateValidationResponse:function(){return isCreateValidationResponse}});var _auth=require("./auth");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var isCreateSuccessResponse=function(response){return Object.prototype.hasOwnProperty.call(response,"data")};var isCreateValidationResponse=function(response){return!Object.prototype.hasOwnProperty.call(response,"data")};var createCrudData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,data,id,eventMetadata,serviceClient){var requestData,key;return _ts_generator(this,function(_state){requestData={};for(var key in data){requestData[key]=JSON.stringify(data[key])}return[2,new Promise(function(resolve,reject){serviceClient.create({type:type,auth:(0,_auth.getProtobufAuthData)(authData),data:requestData,id:id,eventMetadata:eventMetadata},function(error,response){if(error){reject(error.message);return}if(response.validationErrors.length>0||Object.keys(response.fieldValidationErrors).length>0){resolve({validationErrors:response.validationErrors,fieldValidationErrors:response.fieldValidationErrors});return}var _$data={};for(var key in response.newData){if(response.newData[key]!==undefined){_$data[key]=JSON.parse(response.newData[key])}}resolve({data:_$data})})})]})});return function createCrudData(type,authData,data,id,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -0,0 +1 @@
1
+ export type CrudData = Record<string, any>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});
@@ -1,4 +1,4 @@
1
- import { ServiceClient } from "@fraym/proto/freym/crud/delivery";
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.crud.delivery";
2
2
  import { AuthData } from "./auth";
3
3
  import { EventMetadata } from "./eventMetadata";
4
4
  import { Filter } from "./filter";
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"deleteCrudData",{enumerable:true,get:function(){return deleteCrudData}});var _auth=require("./auth");var _filter=require("./filter");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var deleteCrudData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,id,filter,eventMetadata,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.delete({type:type,auth:(0,_auth.getProtobufAuthData)(authData),id:id,filter:(0,_filter.getProtobufDataFilter)(filter),eventMetadata:eventMetadata},function(error,response){if(error){reject(error.message);return}resolve(parseInt(response.numberOfDeletedEntries,10))})})]})});return function deleteCrudData(type,authData,id,filter,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -0,0 +1,7 @@
1
+ export interface EventMetadata {
2
+ correlationId: string;
3
+ causationId: string;
4
+ deploymentId: string;
5
+ userId: string;
6
+ }
7
+ export declare const fillMetadataWithDefaults: (metadata: Partial<EventMetadata> | null) => EventMetadata;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"fillMetadataWithDefaults",{enumerable:true,get:function(){return fillMetadataWithDefaults}});var fillMetadataWithDefaults=function(metadata){if(!metadata){return{causationId:"",correlationId:"",deploymentId:"",userId:""}}return{causationId:metadata.causationId||"",correlationId:metadata.correlationId||"",deploymentId:metadata.deploymentId||"",userId:metadata.userId||""}};
@@ -1,4 +1,4 @@
1
- import { DataFilter } from "@fraym/proto/freym/crud/delivery";
1
+ import { DataFilter } from "@fraym/proto/dist/index.freym.crud.delivery";
2
2
  export interface Filter {
3
3
  fields: Record<string, FieldFilter>;
4
4
  and?: Filter[];
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getProtobufDataFilter",{enumerable:true,get:function(){return getProtobufDataFilter}});var getProtobufDataFilter=function(filter){var fields={};for(var fieldName in filter.fields){var field=filter.fields[fieldName];if(!field){continue}fields[fieldName]={operation:field.operation,type:field.type,value:JSON.stringify(field.value)}}return{fields:fields,and:filter.and?filter.and.map(function(and){return getProtobufDataFilter(and)}):[],or:filter.or?filter.or.map(function(or){return getProtobufDataFilter(or)}):[]}};
@@ -0,0 +1,6 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.crud.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { CrudData } from "./data";
4
+ import { Filter } from "./filter";
5
+ import { Wait } from "./wait";
6
+ export declare const getCrudData: <T extends CrudData>(type: string, authData: AuthData, id: string, filter: Filter, returnEmptyDataIfNotFound: boolean, useStrongConsistency: boolean, deploymentId: number | null, serviceClient: ServiceClient, wait?: Wait) => Promise<T | null>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getCrudData",{enumerable:true,get:function(){return getCrudData}});var _auth=require("./auth");var _filter=require("./filter");var _wait=require("./wait");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var getCrudData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,id,filter,returnEmptyDataIfNotFound,useStrongConsistency,deploymentId,serviceClient,wait){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){var _deploymentId_toString;serviceClient.getData({type:type,auth:(0,_auth.getProtobufAuthData)(authData),filter:(0,_filter.getProtobufDataFilter)(filter),id:id,returnEmptyDataIfNotFound:returnEmptyDataIfNotFound,wait:(0,_wait.getProtobufDataWait)(wait),useStrongConsistency:useStrongConsistency,deploymentId:(_deploymentId_toString=deploymentId===null||deploymentId===void 0?void 0:deploymentId.toString())!==null&&_deploymentId_toString!==void 0?_deploymentId_toString:""},function(error,response){if(error){reject(error.message);return}var result=response.result;if(!result){resolve(null);return}var data={};for(var key in result.data){if(result.data[key]!==undefined){data[key]=JSON.parse(result.data[key])}}resolve(data)})})]})});return function getCrudData(type,authData,id,filter,returnEmptyDataIfNotFound,useStrongConsistency,deploymentId,serviceClient,wait){return _ref.apply(this,arguments)}}();
@@ -0,0 +1,12 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.crud.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { CrudData } from "./data";
4
+ import { Filter } from "./filter";
5
+ import { Order } from "./order";
6
+ export interface GetCrudDataList<T extends CrudData> {
7
+ limit: number;
8
+ page: number;
9
+ total: number;
10
+ data: T[];
11
+ }
12
+ export declare const getCrudDataList: <T extends CrudData>(type: string, authData: AuthData, limit: number, page: number, filter: Filter, order: Order[], useStrongConsistency: boolean, deploymentId: number | null, serviceClient: ServiceClient) => Promise<GetCrudDataList<T>>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getCrudDataList",{enumerable:true,get:function(){return getCrudDataList}});var _auth=require("./auth");var _filter=require("./filter");var _order=require("./order");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var getCrudDataList=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,limit,page,filter,order,useStrongConsistency,deploymentId,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){var _deploymentId_toString;serviceClient.getDataList({type:type,auth:(0,_auth.getProtobufAuthData)(authData),limit:limit.toString(),page:page.toString(),filter:(0,_filter.getProtobufDataFilter)(filter),order:(0,_order.getProtobufDataOrder)(order),useStrongConsistency:useStrongConsistency,deploymentId:(_deploymentId_toString=deploymentId===null||deploymentId===void 0?void 0:deploymentId.toString())!==null&&_deploymentId_toString!==void 0?_deploymentId_toString:""},function(error,response){if(error){reject(error.message);return}var data=[];var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=response.result[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var result=_step.value;var dataRecord={};var resultData=result.data;for(var key in resultData){if(resultData[key]!==undefined){dataRecord[key]=JSON.parse(resultData[key])}}data.push(dataRecord)}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}resolve({limit:parseInt(response.limit,10),page:parseInt(response.page,10),total:parseInt(response.total,10),data:data})})})]})});return function getCrudDataList(type,authData,limit,page,filter,order,useStrongConsistency,deploymentId,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,4 +1,4 @@
1
- import { DataOrder } from "@fraym/proto/freym/crud/delivery";
1
+ import { DataOrder } from "@fraym/proto/dist/index.freym.crud.delivery";
2
2
  export interface Order {
3
3
  field: string;
4
4
  descending?: boolean;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getProtobufDataOrder",{enumerable:true,get:function(){return getProtobufDataOrder}});var getProtobufDataOrder=function(order){return order.map(function(o){var _o_descending;return{field:o.field,descending:(_o_descending=o.descending)!==null&&_o_descending!==void 0?_o_descending:false}})};
@@ -0,0 +1,15 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.crud.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { CrudData } from "./data";
4
+ import { EventMetadata } from "./eventMetadata";
5
+ export type UpdateResponse<T extends CrudData> = UpdateSuccessResponse<T> | UpdateValidationResponse;
6
+ export interface UpdateSuccessResponse<T extends CrudData> {
7
+ data: T;
8
+ }
9
+ export interface UpdateValidationResponse {
10
+ validationErrors: string[];
11
+ fieldValidationErrors: Record<string, string>;
12
+ }
13
+ export declare const isUpdateSuccessResponse: <T extends CrudData>(response: UpdateResponse<T>) => response is UpdateSuccessResponse<T>;
14
+ export declare const isUpdateValidationResponse: <T extends CrudData>(response: UpdateResponse<T>) => response is UpdateValidationResponse;
15
+ export declare const updateCrudData: <T extends CrudData>(type: string, authData: AuthData, id: string, data: Partial<T>, eventMetadata: EventMetadata, serviceClient: ServiceClient) => Promise<UpdateResponse<T>>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:all[name]})}_export(exports,{isUpdateSuccessResponse:function(){return isUpdateSuccessResponse},isUpdateValidationResponse:function(){return isUpdateValidationResponse},updateCrudData:function(){return updateCrudData}});var _auth=require("./auth");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var isUpdateSuccessResponse=function(response){return Object.prototype.hasOwnProperty.call(response,"data")};var isUpdateValidationResponse=function(response){return!Object.prototype.hasOwnProperty.call(response,"data")};var updateCrudData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(type,authData,id,data,eventMetadata,serviceClient){var requestData,key;return _ts_generator(this,function(_state){requestData={};for(var key in data){requestData[key]=JSON.stringify(data[key])}return[2,new Promise(function(resolve,reject){serviceClient.update({type:type,auth:(0,_auth.getProtobufAuthData)(authData),data:requestData,id:id,eventMetadata:eventMetadata},function(error,response){if(error){reject(error.message);return}if(response.validationErrors.length>0||Object.keys(response.fieldValidationErrors).length>0){resolve({validationErrors:response.validationErrors,fieldValidationErrors:response.fieldValidationErrors});return}var _$data={};for(var key in response.newData){if(response.newData[key]!==undefined){_$data[key]=JSON.parse(response.newData[key])}}resolve({data:_$data})})})]})});return function updateCrudData(type,authData,id,data,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,4 +1,4 @@
1
- import { DataWait } from "@fraym/proto/freym/crud/delivery";
1
+ import { DataWait } from "@fraym/proto/dist/index.freym.crud.delivery";
2
2
  import { Filter } from "./filter";
3
3
  export interface Wait {
4
4
  timeout?: number;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getProtobufDataWait",{enumerable:true,get:function(){return getProtobufDataWait}});var _filter=require("./filter");var getProtobufDataWait=function(wait){if(!wait){return undefined}var _wait_timeout;return{conditionFilter:(0,_filter.getProtobufDataFilter)(wait.conditionFilter),timeout:((_wait_timeout=wait.timeout)!==null&&_wait_timeout!==void 0?_wait_timeout:0).toString()}};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return _default}});var _base=require("@becklyn/eslint/base");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}var _default=_to_consumable_array(_base.config);
package/dist/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
- export * from "./delivery/client";
2
- export { Filter, FieldFilter } from "./delivery/filter";
3
- export { Order } from "./delivery/order";
4
- export * from "./config/config";
1
+ export * from "./client/client";
2
+ export type { Filter, FieldFilter } from "./client/filter";
3
+ export type { Order } from "./client/order";
4
+ export type { AuthData } from "./client/auth";
5
+ export type { CrudData } from "./client/data";
6
+ export type { Wait } from "./client/wait";
7
+ export type { EventMetadata } from "./client/eventMetadata";
8
+ export * from "./client/config";
package/dist/index.js CHANGED
@@ -1,18 +1 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./delivery/client"), exports);
18
- __exportStar(require("./config/config"), exports);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./client/client"),exports);_export_star(require("./client/config"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
package/package.json CHANGED
@@ -1,46 +1,30 @@
1
1
  {
2
2
  "name": "@fraym/crud",
3
- "version": "0.21.1",
3
+ "version": "0.30.0",
4
4
  "license": "MIT",
5
- "homepage": "https://github.com/fraym/crud-nodejs",
5
+ "homepage": "https://github.com/fraym/freym-api",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "git+https://github.com/fraym/crud-nodejs.git"
8
+ "url": "git+https://github.com/fraym/freym-api.git"
9
9
  },
10
- "description": "nodejs client implementation for our crud service",
10
+ "description": "JS client implementation of the crud service of Freym",
11
11
  "scripts": {
12
- "test": "echo \"Error: no test specified\" && exit 0",
13
- "format": "prettier --write \"**/*.{ts,tsx,json}\"",
14
- "lint": "prettier --check \"**/*.{ts,tsx,json}\"",
15
- "build": "npm run clean && tsc",
16
- "clean": "rm -rf dist",
17
- "prepublishOnly": "npm test && npm run lint && npm run build",
18
- "preversion": "npm run lint"
12
+ "build": "rm -rf dist && tsc && npx swc . -d dist",
13
+ "lint": "eslint && prettier --check \"**/*.{ts,tsx,json,scss,css}\"",
14
+ "fix": "eslint --fix && prettier --write \"**/*.{ts,tsx,json,scss,css}\""
19
15
  },
20
16
  "files": [
21
17
  "dist/**/*"
22
18
  ],
23
19
  "engines": {
24
- "node": ">=16"
20
+ "node": ">=20"
25
21
  },
26
22
  "main": "dist/index.js",
27
23
  "types": "dist/index.d.ts",
28
24
  "dependencies": {
29
- "@fraym/proto": "^0.26.1",
30
- "@graphql-tools/graphql-file-loader": "^7.5.17",
31
- "@graphql-tools/load": "^7.8.14",
32
- "@grpc/grpc-js": "^1.11.3",
33
- "dotenv": "^16.4.5",
34
- "graphql": "^16.9.0",
35
- "yargs": "^17.7.2"
36
- },
37
- "devDependencies": {
38
- "@becklyn/prettier": "^1.0.2",
39
- "@types/uuid": "^8.3.4",
40
- "@types/yargs": "^17.0.33",
41
- "prettier": "^2.8.8",
42
- "typescript": "^4.9.5",
43
- "uuid": "^9.0.1"
25
+ "@fraym/proto": "^0.30.0",
26
+ "@grpc/grpc-js": "^1.12.6",
27
+ "dotenv": "^16.4.7"
44
28
  },
45
29
  "prettier": "@becklyn/prettier"
46
30
  }
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useDeliveryConfigDefaults = exports.getEnvDeliveryConfig = void 0;
4
- const dotenv_1 = require("dotenv");
5
- const getEnvDeliveryConfig = () => {
6
- var _a;
7
- (0, dotenv_1.config)();
8
- const serverAddress = (_a = process.env.CRUD_SERVER_ADDRESS) !== null && _a !== void 0 ? _a : "";
9
- let keepaliveInterval;
10
- let keepaliveTimeout;
11
- const keepaliveIntervalString = process.env.CRUD_CONNECTION_KEEPALIVE_INTERVAL;
12
- const keepaliveTimeoutString = process.env.CRUD_CONNECTION_KEEPALIVE_INTERVAL;
13
- if (keepaliveIntervalString) {
14
- keepaliveInterval = parseInt(keepaliveIntervalString, 10);
15
- }
16
- if (keepaliveTimeoutString) {
17
- keepaliveTimeout = parseInt(keepaliveTimeoutString, 10);
18
- }
19
- return {
20
- serverAddress,
21
- keepaliveInterval,
22
- keepaliveTimeout,
23
- };
24
- };
25
- exports.getEnvDeliveryConfig = getEnvDeliveryConfig;
26
- const useDeliveryConfigDefaults = (config) => {
27
- var _a, _b;
28
- if (!config) {
29
- config = (0, exports.getEnvDeliveryConfig)();
30
- }
31
- return {
32
- serverAddress: config.serverAddress,
33
- keepaliveTimeout: (_a = config.keepaliveTimeout) !== null && _a !== void 0 ? _a : 3 * 1000,
34
- keepaliveInterval: (_b = config.keepaliveInterval) !== null && _b !== void 0 ? _b : 40 * 1000,
35
- };
36
- };
37
- exports.useDeliveryConfigDefaults = useDeliveryConfigDefaults;
@@ -1,15 +0,0 @@
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,21 +0,0 @@
1
- import { DeliveryClientConfig } from "../config/config";
2
- import { CreateResponse } from "./create";
3
- import { UpdateResponse } from "./update";
4
- import { GetCrudDataList } from "./getDataList";
5
- import { Filter } from "./filter";
6
- import { Order } from "./order";
7
- import { AuthData } from "./auth";
8
- import { EventMetadata } from "./eventMetadata";
9
- import { Wait } from "./wait";
10
- import { CloneResponse } from "./clone";
11
- export interface DeliveryClient {
12
- getData: <T extends {}>(type: string, authData: AuthData, id: string, filter?: Filter, returnEmptyDataIfNotFound?: boolean, wait?: Wait) => Promise<T | null>;
13
- getDataList: <T extends {}>(type: string, authData: AuthData, limit?: number, page?: number, filter?: Filter, order?: Order[]) => Promise<GetCrudDataList<T>>;
14
- create: <T extends {}>(type: string, authData: AuthData, data: Record<string, any>, id?: string, eventMetadata?: EventMetadata) => Promise<CreateResponse<T>>;
15
- update: <T extends {}>(type: string, authData: AuthData, id: string, data: Record<string, any>, eventMetadata?: EventMetadata) => Promise<UpdateResponse<T>>;
16
- clone: <T extends {}>(type: string, authData: AuthData, id: string, newId: string, eventMetadata?: EventMetadata) => Promise<CloneResponse<T>>;
17
- deleteDataById: (type: string, authData: AuthData, id: string, eventMetadata?: EventMetadata) => Promise<number>;
18
- deleteDataByFilter: (type: string, authData: AuthData, filter?: Filter, eventMetadata?: EventMetadata) => Promise<number>;
19
- close: () => Promise<void>;
20
- }
21
- export declare const newDeliveryClient: (config?: DeliveryClientConfig) => Promise<DeliveryClient>;
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.newDeliveryClient = void 0;
4
- const config_1 = require("../config/config");
5
- const delivery_1 = require("@fraym/proto/freym/crud/delivery");
6
- const grpc_js_1 = require("@grpc/grpc-js");
7
- const create_1 = require("./create");
8
- const update_1 = require("./update");
9
- const delete_1 = require("./delete");
10
- const getData_1 = require("./getData");
11
- const getDataList_1 = require("./getDataList");
12
- const clone_1 = require("./clone");
13
- const newDeliveryClient = async (config) => {
14
- config = (0, config_1.useDeliveryConfigDefaults)(config);
15
- const serviceClient = new delivery_1.ServiceClient(config.serverAddress, grpc_js_1.credentials.createInsecure(), {
16
- "grpc.keepalive_time_ms": config.keepaliveInterval,
17
- "grpc.keepalive_timeout_ms": config.keepaliveTimeout,
18
- "grpc.keepalive_permit_without_calls": 1,
19
- });
20
- const getData = async (type, authData, id, filter = { fields: {}, and: [], or: [] }, returnEmptyDataIfNotFound = false, wait) => {
21
- return await (0, getData_1.getCrudData)(type, authData, id, filter, returnEmptyDataIfNotFound, serviceClient, wait);
22
- };
23
- const getDataList = async (type, authData, limit = 0, page = 1, filter = { fields: {}, and: [], or: [] }, order = []) => {
24
- return await (0, getDataList_1.getCrudDataList)(type, authData, limit, page, filter, order, serviceClient);
25
- };
26
- const create = async (type, authData, data, id = "", eventMetadata = { causationId: "", correlationId: "" }) => {
27
- return await (0, create_1.createCrudData)(type, authData, data, id, eventMetadata, serviceClient);
28
- };
29
- const update = async (type, authData, id, data, eventMetadata = { causationId: "", correlationId: "" }) => {
30
- return await (0, update_1.updateCrudData)(type, authData, id, data, eventMetadata, serviceClient);
31
- };
32
- const clone = async (type, authData, id, newId, eventMetadata = { causationId: "", correlationId: "" }) => {
33
- return await (0, clone_1.cloneCrudData)(type, authData, id, newId, eventMetadata, serviceClient);
34
- };
35
- const deleteDataById = async (type, authData, id, eventMetadata = { causationId: "", correlationId: "" }) => {
36
- return await (0, delete_1.deleteCrudData)(type, authData, id, { fields: {}, and: [], or: [] }, eventMetadata, serviceClient);
37
- };
38
- const deleteDataByFilter = async (type, authData, filter = { fields: {}, and: [], or: [] }, eventMetadata = { causationId: "", correlationId: "" }) => {
39
- return await (0, delete_1.deleteCrudData)(type, authData, "", filter, eventMetadata, serviceClient);
40
- };
41
- const close = async () => {
42
- serviceClient.close();
43
- };
44
- return {
45
- getData,
46
- getDataList,
47
- create,
48
- update,
49
- clone,
50
- deleteDataById,
51
- deleteDataByFilter,
52
- close,
53
- };
54
- };
55
- exports.newDeliveryClient = newDeliveryClient;
@@ -1,14 +0,0 @@
1
- import { ServiceClient } from "@fraym/proto/freym/crud/delivery";
2
- import { AuthData } from "./auth";
3
- import { EventMetadata } from "./eventMetadata";
4
- export type CloneResponse<T extends {}> = CloneSuccessResponse<T> | CloneValidationResponse;
5
- export interface CloneSuccessResponse<T extends {}> {
6
- data: T;
7
- }
8
- export interface CloneValidationResponse {
9
- validationErrors: string[];
10
- fieldValidationErrors: Record<string, string>;
11
- }
12
- export declare const isCloneSuccessResponse: <T extends {}>(response: CloneResponse<T>) => response is CloneSuccessResponse<T>;
13
- export declare const isCloneValidationResponse: <T extends {}>(response: CloneResponse<T>) => response is CloneValidationResponse;
14
- export declare const cloneCrudData: <T extends {}>(type: string, authData: AuthData, id: string, newId: string, eventMetadata: EventMetadata, serviceClient: ServiceClient) => Promise<CloneResponse<T>>;
@@ -1,42 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cloneCrudData = exports.isCloneValidationResponse = exports.isCloneSuccessResponse = void 0;
4
- const auth_1 = require("./auth");
5
- const isCloneSuccessResponse = (response) => {
6
- return response.hasOwnProperty("data");
7
- };
8
- exports.isCloneSuccessResponse = isCloneSuccessResponse;
9
- const isCloneValidationResponse = (response) => {
10
- return !response.hasOwnProperty("data");
11
- };
12
- exports.isCloneValidationResponse = isCloneValidationResponse;
13
- const cloneCrudData = async (type, authData, id, newId, eventMetadata, serviceClient) => {
14
- return new Promise((resolve, reject) => {
15
- serviceClient.cloneEntry({
16
- type,
17
- auth: (0, auth_1.getProtobufAuthData)(authData),
18
- id,
19
- newId,
20
- eventMetadata,
21
- }, (error, response) => {
22
- if (error) {
23
- reject(error.message);
24
- return;
25
- }
26
- if (response.validationErrors.length > 0 ||
27
- Object.keys(response.fieldValidationErrors).length > 0) {
28
- resolve({
29
- validationErrors: response.validationErrors,
30
- fieldValidationErrors: response.fieldValidationErrors,
31
- });
32
- return;
33
- }
34
- const data = {};
35
- for (const key in response.newData) {
36
- data[key] = JSON.parse(response.newData[key]);
37
- }
38
- resolve({ data });
39
- });
40
- });
41
- };
42
- exports.cloneCrudData = cloneCrudData;
@@ -1,14 +0,0 @@
1
- import { ServiceClient } from "@fraym/proto/freym/crud/delivery";
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;
7
- }
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: ServiceClient) => Promise<CreateResponse<T>>;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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) => {
14
- const requestData = {};
15
- for (const key in data) {
16
- requestData[key] = JSON.stringify(data[key]);
17
- }
18
- return new Promise((resolve, reject) => {
19
- serviceClient.createEntry({
20
- type,
21
- auth: (0, auth_1.getProtobufAuthData)(authData),
22
- data: requestData,
23
- id,
24
- eventMetadata,
25
- }, (error, response) => {
26
- if (error) {
27
- reject(error.message);
28
- return;
29
- }
30
- if (response.validationErrors.length > 0 ||
31
- Object.keys(response.fieldValidationErrors).length > 0) {
32
- resolve({
33
- validationErrors: response.validationErrors,
34
- fieldValidationErrors: response.fieldValidationErrors,
35
- });
36
- return;
37
- }
38
- const data = {};
39
- for (const key in response.newData) {
40
- data[key] = JSON.parse(response.newData[key]);
41
- }
42
- resolve({
43
- data,
44
- });
45
- });
46
- });
47
- };
48
- exports.createCrudData = createCrudData;
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteCrudData = void 0;
4
- const auth_1 = require("./auth");
5
- const filter_1 = require("./filter");
6
- const deleteCrudData = async (type, authData, id, filter, eventMetadata, serviceClient) => {
7
- return new Promise((resolve, reject) => {
8
- serviceClient.deleteEntries({
9
- type,
10
- auth: (0, auth_1.getProtobufAuthData)(authData),
11
- id,
12
- filter: (0, filter_1.getProtobufDataFilter)(filter),
13
- eventMetadata,
14
- }, (error, response) => {
15
- if (error) {
16
- reject(error.message);
17
- return;
18
- }
19
- resolve(parseInt(response.numberOfDeletedEntries, 10));
20
- });
21
- });
22
- };
23
- exports.deleteCrudData = deleteCrudData;
@@ -1,4 +0,0 @@
1
- export interface EventMetadata {
2
- correlationId: string;
3
- causationId: string;
4
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getProtobufDataFilter = void 0;
4
- const getProtobufDataFilter = (filter) => {
5
- const fields = {};
6
- for (const fieldName in filter.fields) {
7
- const field = filter.fields[fieldName];
8
- fields[fieldName] = {
9
- operation: field.operation,
10
- type: field.type,
11
- value: JSON.stringify(field.value),
12
- };
13
- }
14
- return {
15
- fields: fields,
16
- and: filter.and ? filter.and.map(and => (0, exports.getProtobufDataFilter)(and)) : [],
17
- or: filter.or ? filter.or.map(or => (0, exports.getProtobufDataFilter)(or)) : [],
18
- };
19
- };
20
- exports.getProtobufDataFilter = getProtobufDataFilter;
@@ -1,5 +0,0 @@
1
- import { ServiceClient } from "@fraym/proto/freym/crud/delivery";
2
- import { AuthData } from "./auth";
3
- import { Filter } from "./filter";
4
- import { Wait } from "./wait";
5
- export declare const getCrudData: <T extends {}>(type: string, authData: AuthData, id: string, filter: Filter, returnEmptyDataIfNotFound: boolean, serviceClient: ServiceClient, wait?: Wait) => Promise<T | null>;
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCrudData = void 0;
4
- const auth_1 = require("./auth");
5
- const filter_1 = require("./filter");
6
- const wait_1 = require("./wait");
7
- const getCrudData = async (type, authData, id, filter, returnEmptyDataIfNotFound, serviceClient, wait) => {
8
- return new Promise((resolve, reject) => {
9
- serviceClient.getEntry({
10
- type,
11
- auth: (0, auth_1.getProtobufAuthData)(authData),
12
- filter: (0, filter_1.getProtobufDataFilter)(filter),
13
- id,
14
- returnEmptyDataIfNotFound,
15
- wait: (0, wait_1.getProtobufDataWait)(wait),
16
- }, (error, response) => {
17
- if (error) {
18
- reject(error.message);
19
- return;
20
- }
21
- const result = response.result;
22
- if (!result) {
23
- resolve(null);
24
- return;
25
- }
26
- const data = {};
27
- for (const key in result.data) {
28
- data[key] = JSON.parse(result.data[key]);
29
- }
30
- resolve(data);
31
- });
32
- });
33
- };
34
- exports.getCrudData = getCrudData;
@@ -1,11 +0,0 @@
1
- import { ServiceClient } from "@fraym/proto/freym/crud/delivery";
2
- import { AuthData } from "./auth";
3
- import { Filter } from "./filter";
4
- import { Order } from "./order";
5
- export interface GetCrudDataList<T extends {}> {
6
- limit: number;
7
- page: number;
8
- total: number;
9
- data: T[];
10
- }
11
- export declare const getCrudDataList: <T extends {}>(type: string, authData: AuthData, limit: number, page: number, filter: Filter, order: Order[], serviceClient: ServiceClient) => Promise<GetCrudDataList<T>>;
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCrudDataList = void 0;
4
- const auth_1 = require("./auth");
5
- const filter_1 = require("./filter");
6
- const order_1 = require("./order");
7
- const getCrudDataList = async (type, authData, limit, page, filter, order, serviceClient) => {
8
- return new Promise((resolve, reject) => {
9
- serviceClient.getEntryList({
10
- type,
11
- auth: (0, auth_1.getProtobufAuthData)(authData),
12
- limit: limit.toString(),
13
- page: page.toString(),
14
- filter: (0, filter_1.getProtobufDataFilter)(filter),
15
- order: (0, order_1.getProtobufDataOrder)(order),
16
- }, (error, response) => {
17
- if (error) {
18
- reject(error.message);
19
- return;
20
- }
21
- const data = [];
22
- for (const result of response.result) {
23
- const dataRecord = {};
24
- const resultData = result.data;
25
- for (const key in resultData) {
26
- dataRecord[key] = JSON.parse(resultData[key]);
27
- }
28
- data.push(dataRecord);
29
- }
30
- resolve({
31
- limit: parseInt(response.limit, 10),
32
- page: parseInt(response.page, 10),
33
- total: parseInt(response.total, 10),
34
- data,
35
- });
36
- });
37
- });
38
- };
39
- exports.getCrudDataList = getCrudDataList;
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getProtobufDataOrder = void 0;
4
- const getProtobufDataOrder = (order) => {
5
- return order.map(o => {
6
- var _a;
7
- return ({
8
- field: o.field,
9
- descending: (_a = o.descending) !== null && _a !== void 0 ? _a : false,
10
- });
11
- });
12
- };
13
- exports.getProtobufDataOrder = getProtobufDataOrder;
@@ -1,14 +0,0 @@
1
- import { ServiceClient } from "@fraym/proto/freym/crud/delivery";
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: ServiceClient) => Promise<UpdateResponse<T>>;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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) => {
14
- const requestData = {};
15
- for (const key in data) {
16
- requestData[key] = JSON.stringify(data[key]);
17
- }
18
- return new Promise((resolve, reject) => {
19
- serviceClient.updateEntry({
20
- type,
21
- auth: (0, auth_1.getProtobufAuthData)(authData),
22
- data: requestData,
23
- id,
24
- eventMetadata,
25
- }, (error, response) => {
26
- if (error) {
27
- reject(error.message);
28
- return;
29
- }
30
- if (response.validationErrors.length > 0 ||
31
- Object.keys(response.fieldValidationErrors).length > 0) {
32
- resolve({
33
- validationErrors: response.validationErrors,
34
- fieldValidationErrors: response.fieldValidationErrors,
35
- });
36
- return;
37
- }
38
- const data = {};
39
- for (const key in response.newData) {
40
- data[key] = JSON.parse(response.newData[key]);
41
- }
42
- resolve({
43
- data,
44
- });
45
- });
46
- });
47
- };
48
- exports.updateCrudData = updateCrudData;
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getProtobufDataWait = void 0;
4
- const filter_1 = require("./filter");
5
- const getProtobufDataWait = (wait) => {
6
- var _a;
7
- if (!wait) {
8
- return undefined;
9
- }
10
- return {
11
- conditionFilter: (0, filter_1.getProtobufDataFilter)(wait.conditionFilter),
12
- timeout: ((_a = wait.timeout) !== null && _a !== void 0 ? _a : 0).toString(),
13
- };
14
- };
15
- exports.getProtobufDataWait = getProtobufDataWait;
File without changes