@fraym/projections 0.17.0 → 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 (50) hide show
  1. package/README.md +6 -260
  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 +20 -0
  5. package/dist/client/client.js +1 -0
  6. package/dist/client/config.js +1 -0
  7. package/dist/client/data.d.ts +1 -0
  8. package/dist/client/data.js +1 -0
  9. package/dist/client/delete.d.ts +5 -0
  10. package/dist/client/delete.js +1 -0
  11. package/dist/client/eventMetadata.d.ts +7 -0
  12. package/dist/client/eventMetadata.js +1 -0
  13. package/dist/{delivery → client}/filter.d.ts +1 -1
  14. package/dist/client/filter.js +1 -0
  15. package/dist/client/getData.d.ts +6 -0
  16. package/dist/client/getData.js +1 -0
  17. package/dist/client/getDataList.d.ts +12 -0
  18. package/dist/client/getDataList.js +1 -0
  19. package/dist/client/getViewData.d.ts +5 -0
  20. package/dist/client/getViewData.js +1 -0
  21. package/dist/client/getViewDataList.d.ts +12 -0
  22. package/dist/client/getViewDataList.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/upsert.d.ts +16 -0
  26. package/dist/client/upsert.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 +9 -7
  31. package/dist/index.js +1 -22
  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 -17
  36. package/dist/delivery/client.js +0 -45
  37. package/dist/delivery/delete.d.ts +0 -5
  38. package/dist/delivery/delete.js +0 -23
  39. package/dist/delivery/eventMetadata.d.ts +0 -4
  40. package/dist/delivery/eventMetadata.js +0 -2
  41. package/dist/delivery/filter.js +0 -20
  42. package/dist/delivery/getData.d.ts +0 -5
  43. package/dist/delivery/getData.js +0 -34
  44. package/dist/delivery/getDataList.d.ts +0 -11
  45. package/dist/delivery/getDataList.js +0 -39
  46. package/dist/delivery/order.js +0 -13
  47. package/dist/delivery/upsert.d.ts +0 -15
  48. package/dist/delivery/upsert.js +0 -48
  49. package/dist/delivery/wait.js +0 -15
  50. /package/dist/{config → client}/config.d.ts +0 -0
package/README.md CHANGED
@@ -1,265 +1,11 @@
1
- # projections-nodejs
1
+ # projections
2
2
 
3
- Client implementation in javascript for the [projections service](https://github.com/fraym/projections).
3
+ Client implementation in JavaScript for the Freym service [projections](https://github.com/fraym/projections).
4
4
 
5
- ## Installation
5
+ ## Docs
6
6
 
7
- ```shell
8
- npm i @fraym/projections
9
- ```
7
+ Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/projections/introduction).
10
8
 
11
- ## GraphQL
9
+ ## License
12
10
 
13
- You can access the graphQL api at `http://projections:3000/delivery/graphql`.
14
- There is a sandbox available at `http://projections: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
- PROJECTIONS_SERVER_ADDRESS=127.0.0.1:9000
24
- ```
25
-
26
- ## Env variable placeholders in migrations
27
-
28
- You can use placeholders that match environment variables in argument strings in your schema definitions:
29
-
30
- In the following example the `{{env.BACKEND_HOSTNAME}}` part will be replaced by the value of the `BACKEND_HOSTNAME` environment variable.
31
- Please add your used env variables to the `.env` file that is used to [configure the migration command](#config).
32
-
33
- ```graphql
34
- type TestType {
35
- value: String
36
- @webhook(
37
- url: "http://{{env.BACKEND_HOSTNAME}}/event-organizing/contingent/projections/frontend/contingent-management/webhook"
38
- method: "GET"
39
- header: [{ key: "Content-Type", value: "'application/json'" }]
40
- body: [
41
- { key: "metadata", value: "metadata" }
42
- { key: "payload", value: "payload" }
43
- { key: "projection", value: "projection" }
44
- ]
45
- )
46
- }
47
- ```
48
-
49
- ## Usage
50
-
51
- ### Create the client
52
-
53
- ```typescript
54
- const deliveryClient = await newDeliveryClient();
55
- ```
56
-
57
- ### Authorization
58
-
59
- All delivery client functions make use of the `AuthData` object.
60
- This data is used to check access for the desired action.
61
-
62
- You can add the `FRAYM_AUTH_OWNER` scope in case you are performing an action that is no subject to restrictions.
63
-
64
- Fields:
65
-
66
- - `tenantId`: Id of the tenant to use
67
- - `scopes`: Slice of scopes to use for the action
68
- - `data`: Data that is used in directives like `@filterFromJwtData`
69
-
70
- ### Event Metadata
71
-
72
- 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:
73
-
74
- ```typescript
75
- const eventMetadata = {
76
- correlationId: "some-correlation-id",
77
- causationId: "some-causation-id",
78
- };
79
- ```
80
-
81
- ### Upsert data in projection
82
-
83
- In general you upsert data by publishing events on the event stream.
84
- There are cases where you want to improve performance and get detailed validation output. In these cases you can use the client to directly upsert data. Do not worry, this is still event based under the hood.
85
-
86
- ```typescript
87
- const response = await client.upsertData<{ fieldName: string }>(
88
- "ProjectionName",
89
- authData,
90
- "dataId",
91
- {
92
- fieldName: "value",
93
- },
94
- eventMetadata
95
- );
96
- ```
97
-
98
- The response contains the following fields:
99
-
100
- In case of no validation errors:
101
-
102
- - `data`: The new data after your upsert action
103
-
104
- In case of validation errors:
105
-
106
- - `validationErrors`: List of global validation errors that are not related to a single field
107
- - `fieldValidationErrors`: Validation errors mapped by the name of the field that they relate to
108
-
109
- ### Delete data from projection
110
-
111
- In general you delete data by publishing events on the event stream.
112
- There are cases where you want to improve performance and get detailed validation output. In these cases you can use the client to directly delete data. Do not worry, this is still event based under the hood.
113
-
114
- Delete by Id:
115
-
116
- ```go
117
- const numberOfDeletedEntries = await client.deleteDataById("ProjectionName", authData, "dataId", eventMetadata)
118
- ```
119
-
120
- Delete by filter:
121
-
122
- ```go
123
- const numberOfDeletedEntries = client.deleteDataByFilter("ProjectionName", authData, filter, eventMetadata)
124
- ```
125
-
126
- ### Get a single projection element
127
-
128
- A filter could look like this:
129
-
130
- ```go
131
- const filter := {
132
- fields: {
133
- fieldName: {
134
- operation: "equals",
135
- type: "Int",
136
- value: 123,
137
- },
138
- },
139
- }
140
- ```
141
-
142
- The name of `YourProjection` has to equal your projection name in your schema (also in casing).
143
- The `id` has to match the id of the projection element that you want to get.
144
-
145
- ```typescript
146
- const data = await deliveryClient.getData(
147
- "YourProjection",
148
- authData,
149
- "id",
150
- filter,
151
- returnEmptyDataIfNotFound
152
- );
153
- ```
154
-
155
- ### Get (paginated / filtered / ordered) data
156
-
157
- The name of `YourProjection` has to equal your type name in your schema (also in casing).
158
-
159
- No pagination:
160
-
161
- ```typescript
162
- const dataList = await deliveryClient.getDataList("YourProjection", authData);
163
- ```
164
-
165
- The dataList response contains the following fields:
166
-
167
- - `limit`: The pagination limit
168
- - `page`: The pagination page
169
- - `total`: The total amount of elements matching the given filter
170
- - `data`: The selected data
171
-
172
- With pagination:
173
-
174
- ```typescript
175
- const limit = 50; // elements to query per page
176
- const page = 1; // number of the page you want to select, first page starts at: 1
177
- const dataList = await deliveryClient.getDataList("YourProjection", authData, limit, page);
178
- ```
179
-
180
- With filter:
181
-
182
- ```typescript
183
- const dataList = await deliveryClient.getDataList(
184
- "YourProjection",
185
- authData,
186
- undefined,
187
- undefined,
188
- {
189
- fields: {
190
- fieldName: {
191
- operation: "equals",
192
- type: "Int",
193
- value: 123,
194
- },
195
- },
196
- }
197
- );
198
- ```
199
-
200
- All `Filter`s are evaluated by:
201
-
202
- - checking that all field filters match
203
- - checking that all `and` filters match
204
- - checking that one of the `or` filters match
205
-
206
- Avaliable types:
207
-
208
- - `String`
209
- - `ID`
210
- - `DateTime`
211
- - `Int`
212
- - `Float`
213
- - `Boolean`
214
-
215
- Avaliable operators for all types:
216
-
217
- - `equals`
218
- - `notEquals`
219
-
220
- Avaliable options for the filter type `DateTime`:
221
-
222
- - `inArray`
223
- - `notInArray`
224
- - `after`
225
- - `before`
226
-
227
- Avaliable options for the filter type `String` and `ID`:
228
-
229
- - `inArray`
230
- - `notInArray`
231
-
232
- Avaliable options for the filter type `Int` and `Float`:
233
-
234
- - `lessThan`
235
- - `greaterThan`
236
- - `lessThanOrEqual`
237
- - `greaterThanOrEqual`
238
-
239
- With order:
240
-
241
- All order definitions are prioritized in the order that they are defined (the first definition is prioritized over the second).
242
-
243
- ```typescript
244
- const dataList = await client.getDataList(
245
- "YourProjection",
246
- authData,
247
- undefined,
248
- undefined,
249
- undefined,
250
- [
251
- {
252
- field: "fieldName",
253
- descending: true, // omit this value for asc order
254
- },
255
- ]
256
- );
257
- ```
258
-
259
- ### Gracefully close the delivery client
260
-
261
- You won't lose any data if you don't. Use it for your peace of mind.
262
-
263
- ```typescript
264
- client.close();
265
- ```
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/projections/delivery";
1
+ import { AuthData as PbAuthData } from "@fraym/proto/dist/index.freym.projections.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,20 @@
1
+ import { AuthData } from "./auth";
2
+ import { DeliveryClientConfig } from "./config";
3
+ import { ProjectionData } from "./data";
4
+ import { EventMetadata } from "./eventMetadata";
5
+ import { Filter } from "./filter";
6
+ import { GetProjectionDataList } from "./getDataList";
7
+ import { Order } from "./order";
8
+ import { UpsertResponse } from "./upsert";
9
+ import { Wait } from "./wait";
10
+ export interface DeliveryClient {
11
+ getData: <T extends ProjectionData>(projection: string, authData: AuthData, id: string, filter?: Filter, returnEmptyDataIfNotFound?: boolean, useStrongConsistency?: boolean, deploymentId?: number, wait?: Wait) => Promise<T | null>;
12
+ getViewData: <T extends ProjectionData>(view: string, authData: AuthData, filter?: Filter, useStrongConsistency?: boolean, deploymentId?: number) => Promise<T | null>;
13
+ getDataList: <T extends ProjectionData>(projection: string, authData: AuthData, limit?: number, page?: number, filter?: Filter, order?: Order[], useStrongConsistency?: boolean, deploymentId?: number) => Promise<GetProjectionDataList<T> | null>;
14
+ getViewDataList: <T extends ProjectionData>(view: string, authData: AuthData, limit?: number, page?: number, filter?: Filter, order?: Order[], useStrongConsistency?: boolean, deploymentId?: number) => Promise<GetProjectionDataList<T> | null>;
15
+ upsertData: <T extends ProjectionData>(projection: string, authData: AuthData, dataId: string, payload: Partial<T>, eventMetadata?: Partial<EventMetadata>) => Promise<UpsertResponse<T>>;
16
+ deleteDataById: (projection: string, authData: AuthData, dataId: string, eventMetadata?: Partial<EventMetadata>) => Promise<number>;
17
+ deleteDataByFilter: (projection: string, authData: AuthData, filter?: Filter, eventMetadata?: Partial<EventMetadata>) => Promise<number>;
18
+ close: () => Promise<void>;
19
+ }
20
+ 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 _indexfreymprojectionsdelivery=require("@fraym/proto/dist/index.freym.projections.delivery");var _grpcjs=require("@grpc/grpc-js");var _config=require("./config");var _delete=require("./delete");var _getData=require("./getData");var _getDataList=require("./getDataList");var _getViewData=require("./getViewData");var _getViewDataList=require("./getViewDataList");var _upsert=require("./upsert");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,getViewData,getDataList,getViewDataList,upsertData,deleteDataById,deleteDataByFilter,close;return _ts_generator(this,function(_state){config=(0,_config.useDeliveryConfigDefaults)(config);serviceClient=new _indexfreymprojectionsdelivery.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(projection,auth,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.getProjectionData)(projection,auth,id,filter,returnEmptyDataIfNotFound,!!useStrongConsistency,deploymentId,serviceClient,wait)];case 1:return[2,_state.sent()]}})});return function getData(projection,auth,id){return _ref.apply(this,arguments)}}();getViewData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(view,auth){var filter,useStrongConsistency,deploymentId;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:[]},useStrongConsistency=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:false,deploymentId=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:null;return[4,(0,_getViewData.getViewData)(view,auth,filter,!!useStrongConsistency,deploymentId,serviceClient)];case 1:return[2,_state.sent()]}})});return function getViewData(view,auth){return _ref.apply(this,arguments)}}();getDataList=/*#__PURE__*/function(){var _ref=_async_to_generator(function(projection,auth){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.getProjectionDataList)(projection,auth,limit,page,filter,order,!!useStrongConsistency,deploymentId,serviceClient)];case 1:return[2,_state.sent()]}})});return function getDataList(projection,auth){return _ref.apply(this,arguments)}}();getViewDataList=/*#__PURE__*/function(){var _ref=_async_to_generator(function(view,auth){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,_getViewDataList.getViewDataList)(view,auth,limit,page,filter,order,!!useStrongConsistency,deploymentId,serviceClient)];case 1:return[2,_state.sent()]}})});return function getViewDataList(view,auth){return _ref.apply(this,arguments)}}();upsertData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(projection,authData,dataId,payload){var eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){eventMetadata=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:null;return[2,(0,_upsert.upsertProjectionData)(projection,authData,dataId,payload,eventMetadata,serviceClient)]})});return function upsertData(projection,authData,dataId,payload){return _ref.apply(this,arguments)}}();deleteDataById=/*#__PURE__*/function(){var _ref=_async_to_generator(function(projection,authData,dataId){var eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){eventMetadata=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:null;return[2,(0,_delete.deleteProjectionData)(projection,authData,dataId,{fields:{},and:[],or:[]},eventMetadata,serviceClient)]})});return function deleteDataById(projection,authData,dataId){return _ref.apply(this,arguments)}}();deleteDataByFilter=/*#__PURE__*/function(){var _ref=_async_to_generator(function(projection,authData){var filter,eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){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[2,(0,_delete.deleteProjectionData)(projection,authData,"",filter,eventMetadata,serviceClient)]})});return function deleteDataByFilter(projection,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,getViewData:getViewData,getDataList:getDataList,getViewDataList:getViewDataList,upsertData:upsertData,deleteDataById:deleteDataById,deleteDataByFilter:deleteDataByFilter,close:close}]})});return function newDeliveryClient(config){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_PROJECTIONS_SERVER_ADDRESS;var serverAddress=(_process_env_PROJECTIONS_SERVER_ADDRESS=process.env.PROJECTIONS_SERVER_ADDRESS)!==null&&_process_env_PROJECTIONS_SERVER_ADDRESS!==void 0?_process_env_PROJECTIONS_SERVER_ADDRESS:"";var keepaliveInterval;var keepaliveTimeout;var keepaliveIntervalString=process.env.PROJECTIONS_CONNECTION_KEEPALIVE_INTERVAL;var keepaliveTimeoutString=process.env.PROJECTIONS_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_keepaliveInterval,_config_keepaliveTimeout;return{serverAddress:config.serverAddress,keepaliveInterval:(_config_keepaliveInterval=config.keepaliveInterval)!==null&&_config_keepaliveInterval!==void 0?_config_keepaliveInterval:40*1e3,keepaliveTimeout:(_config_keepaliveTimeout=config.keepaliveTimeout)!==null&&_config_keepaliveTimeout!==void 0?_config_keepaliveTimeout:3*1e3}};
@@ -0,0 +1 @@
1
+ export type ProjectionData = Record<string, any>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});
@@ -0,0 +1,5 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.projections.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { EventMetadata } from "./eventMetadata";
4
+ import { Filter } from "./filter";
5
+ export declare const deleteProjectionData: (projection: string, auth: AuthData, dataId: string, filter: Filter, eventMetadata: Partial<EventMetadata> | null, serviceClient: ServiceClient) => Promise<number>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"deleteProjectionData",{enumerable:true,get:function(){return deleteProjectionData}});var _auth=require("./auth");var _eventMetadata=require("./eventMetadata");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 deleteProjectionData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(projection,auth,dataId,filter,eventMetadata,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.delete({projection:projection,auth:(0,_auth.getProtobufAuthData)(auth),dataId:dataId,filter:(0,_filter.getProtobufDataFilter)(filter),eventMetadata:(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata)},function(error,response){if(error){reject(error.message);return}resolve(parseInt(response.numberOfDeletedEntries,10))})})]})});return function deleteProjectionData(projection,auth,dataId,filter,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -0,0 +1,7 @@
1
+ export interface EventMetadata {
2
+ causationId: string;
3
+ correlationId: 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/projections/delivery";
1
+ import { DataFilter } from "@fraym/proto/dist/index.freym.projections.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.map(function(and){return getProtobufDataFilter(and)}),or:filter.or.map(function(or){return getProtobufDataFilter(or)})}};
@@ -0,0 +1,6 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.projections.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { ProjectionData } from "./data";
4
+ import { Filter } from "./filter";
5
+ import { Wait } from "./wait";
6
+ export declare const getProjectionData: <T extends ProjectionData>(projection: string, auth: AuthData, dataId: 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,"getProjectionData",{enumerable:true,get:function(){return getProjectionData}});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 getProjectionData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(projection,auth,dataId,filter,returnEmptyDataIfNotFound,useStrongConsistency,deploymentId,serviceClient,wait){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){var _deploymentId_toString;serviceClient.getData({projection:projection,auth:(0,_auth.getProtobufAuthData)(auth),dataId:dataId,filter:(0,_filter.getProtobufDataFilter)(filter),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||!result.data||Object.keys(result.data).length===0){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 getProjectionData(projection,auth,dataId,filter,returnEmptyDataIfNotFound,useStrongConsistency,deploymentId,serviceClient,wait){return _ref.apply(this,arguments)}}();
@@ -0,0 +1,12 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.projections.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { ProjectionData } from "./data";
4
+ import { Filter } from "./filter";
5
+ import { Order } from "./order";
6
+ export interface GetProjectionDataList<T extends ProjectionData> {
7
+ limit: number;
8
+ page: number;
9
+ total: number;
10
+ data: T[];
11
+ }
12
+ export declare const getProjectionDataList: <T extends ProjectionData>(projection: string, auth: AuthData, limit: number, page: number, filter: Filter, order: Order[], useStrongConsistency: boolean, deploymentId: number | null, serviceClient: ServiceClient) => Promise<GetProjectionDataList<T> | null>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getProjectionDataList",{enumerable:true,get:function(){return getProjectionDataList}});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 getProjectionDataList=/*#__PURE__*/function(){var _ref=_async_to_generator(function(projection,auth,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({projection:projection,auth:(0,_auth.getProtobufAuthData)(auth),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 getProjectionDataList(projection,auth,limit,page,filter,order,useStrongConsistency,deploymentId,serviceClient){return _ref.apply(this,arguments)}}();
@@ -0,0 +1,5 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.projections.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { ProjectionData } from "./data";
4
+ import { Filter } from "./filter";
5
+ export declare const getViewData: <T extends ProjectionData>(view: string, auth: AuthData, filter: Filter, useStrongConsistency: boolean, deploymentId: number | null, serviceClient: ServiceClient) => Promise<T | null>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getViewData",{enumerable:true,get:function(){return getViewData}});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 getViewData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(view,auth,filter,useStrongConsistency,deploymentId,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){var _deploymentId_toString;serviceClient.getViewData({view:view,auth:(0,_auth.getProtobufAuthData)(auth),filter:(0,_filter.getProtobufDataFilter)(filter),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||!result.data||Object.keys(result.data).length===0){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 getViewData(view,auth,filter,useStrongConsistency,deploymentId,serviceClient){return _ref.apply(this,arguments)}}();
@@ -0,0 +1,12 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.projections.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { ProjectionData } from "./data";
4
+ import { Filter } from "./filter";
5
+ import { Order } from "./order";
6
+ export interface GetViewDataList<T extends ProjectionData> {
7
+ limit: number;
8
+ page: number;
9
+ total: number;
10
+ data: T[];
11
+ }
12
+ export declare const getViewDataList: <T extends ProjectionData>(view: string, auth: AuthData, limit: number, page: number, filter: Filter, order: Order[], useStrongConsistency: boolean, deploymentId: number | null, serviceClient: ServiceClient) => Promise<GetViewDataList<T> | null>;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getViewDataList",{enumerable:true,get:function(){return getViewDataList}});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 getViewDataList=/*#__PURE__*/function(){var _ref=_async_to_generator(function(view,auth,limit,page,filter,order,useStrongConsistency,deploymentId,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){var _deploymentId_toString;serviceClient.getViewDataList({view:view,auth:(0,_auth.getProtobufAuthData)(auth),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 getViewDataList(view,auth,limit,page,filter,order,useStrongConsistency,deploymentId,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,4 +1,4 @@
1
- import { DataOrder } from "@fraym/proto/freym/projections/delivery";
1
+ import { DataOrder } from "@fraym/proto/dist/index.freym.projections.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,16 @@
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.projections.delivery";
2
+ import { AuthData } from "./auth";
3
+ import { ProjectionData } from "./data";
4
+ import { EventMetadata } from "./eventMetadata";
5
+ export type UpsertResponse<T extends ProjectionData> = UpsertSuccessResponse<T> | UpsertValidationResponse;
6
+ export interface UpsertSuccessResponse<T extends ProjectionData> {
7
+ data: T;
8
+ id: string;
9
+ }
10
+ export interface UpsertValidationResponse {
11
+ validationErrors: string[];
12
+ fieldValidationErrors: Record<string, string>;
13
+ }
14
+ export declare const isUpsertSuccessResponse: <T extends ProjectionData>(response: UpsertResponse<T>) => response is UpsertSuccessResponse<T>;
15
+ export declare const isUpsertValidationResponse: <T extends ProjectionData>(response: UpsertResponse<T>) => response is UpsertValidationResponse;
16
+ export declare const upsertProjectionData: <T extends ProjectionData>(projection: string, auth: AuthData, dataId: string, payload: Partial<T>, eventMetadata: Partial<EventMetadata> | null, serviceClient: ServiceClient) => Promise<UpsertResponse<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,{isUpsertSuccessResponse:function(){return isUpsertSuccessResponse},isUpsertValidationResponse:function(){return isUpsertValidationResponse},upsertProjectionData:function(){return upsertProjectionData}});var _auth=require("./auth");var _eventMetadata=require("./eventMetadata");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 isUpsertSuccessResponse=function(response){return Object.prototype.hasOwnProperty.call(response,"data")};var isUpsertValidationResponse=function(response){return!Object.prototype.hasOwnProperty.call(response,"data")};var upsertProjectionData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(projection,auth,dataId,payload,eventMetadata,serviceClient){var usedPayload,key;return _ts_generator(this,function(_state){usedPayload={};for(var key in payload){usedPayload[key]=JSON.stringify(payload[key])}return[2,new Promise(function(resolve,reject){serviceClient.upsert({projection:projection,auth:(0,_auth.getProtobufAuthData)(auth),dataId:dataId,payload:usedPayload,eventMetadata:(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata)},function(error,response){if(error){reject(error.message);return}if(response.validationErrors||response.fieldValidationErrors){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,id:response.id})})})]})});return function upsertProjectionData(projection,auth,dataId,payload,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,4 +1,4 @@
1
- import { DataWait } from "@fraym/proto/freym/projections/delivery";
1
+ import { DataWait } from "@fraym/proto/dist/index.freym.projections.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,7 +1,9 @@
1
- export * from "./config/config";
2
- export * from "./delivery/client";
3
- export { Filter, FieldFilter } from "./delivery/filter";
4
- export { GetProjectionDataList } from "./delivery/getDataList";
5
- export { AuthData } from "./delivery/auth";
6
- export { Order } from "./delivery/order";
7
- export { UpsertResponse, UpsertSuccessResponse, UpsertValidationResponse, isUpsertSuccessResponse, isUpsertValidationResponse, } from "./delivery/upsert";
1
+ export * from "./client/config";
2
+ export * from "./client/client";
3
+ export type { Filter, FieldFilter } from "./client/filter";
4
+ export type { AuthData } from "./client/auth";
5
+ export type { ProjectionData } from "./client/data";
6
+ export type { Order } from "./client/order";
7
+ export type { Wait } from "./client/wait";
8
+ export type { EventMetadata } from "./client/eventMetadata";
9
+ export { isUpsertSuccessResponse, isUpsertValidationResponse } from "./client/upsert";
package/dist/index.js CHANGED
@@ -1,22 +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
- exports.isUpsertValidationResponse = exports.isUpsertSuccessResponse = void 0;
18
- __exportStar(require("./config/config"), exports);
19
- __exportStar(require("./delivery/client"), exports);
20
- var upsert_1 = require("./delivery/upsert");
21
- Object.defineProperty(exports, "isUpsertSuccessResponse", { enumerable: true, get: function () { return upsert_1.isUpsertSuccessResponse; } });
22
- Object.defineProperty(exports, "isUpsertValidationResponse", { enumerable: true, get: function () { return upsert_1.isUpsertValidationResponse; } });
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,{isUpsertSuccessResponse:function(){return _upsert.isUpsertSuccessResponse},isUpsertValidationResponse:function(){return _upsert.isUpsertValidationResponse}});_export_star(require("./client/config"),exports);_export_star(require("./client/client"),exports);var _upsert=require("./client/upsert");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/projections",
3
- "version": "0.17.0",
3
+ "version": "0.30.0",
4
4
  "license": "MIT",
5
- "homepage": "https://github.com/fraym/projections-nodejs",
5
+ "homepage": "https://github.com/fraym/freym-api",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "git+https://github.com/fraym/projections-nodejs.git"
8
+ "url": "git+https://github.com/fraym/freym-api.git"
9
9
  },
10
- "description": "nodejs client implementation for our projections service",
10
+ "description": "JS client implementation of the projections 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.3.0",
30
- "@graphql-tools/graphql-file-loader": "^7.5.17",
31
- "@graphql-tools/load": "^7.8.14",
32
- "@grpc/grpc-js": "^1.9.7",
33
- "dotenv": "^16.3.1",
34
- "graphql": "^16.8.1",
35
- "yargs": "^17.7.2"
36
- },
37
- "devDependencies": {
38
- "@becklyn/prettier": "^1.0.2",
39
- "@types/uuid": "^9.0.6",
40
- "@types/yargs": "^17.0.29",
41
- "prettier": "^2.8.8",
42
- "typescript": "^5.2.2",
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.PROJECTIONS_SERVER_ADDRESS) !== null && _a !== void 0 ? _a : "";
9
- let keepaliveInterval;
10
- let keepaliveTimeout;
11
- const keepaliveIntervalString = process.env.PROJECTIONS_CONNECTION_KEEPALIVE_INTERVAL;
12
- const keepaliveTimeoutString = process.env.PROJECTIONS_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,17 +0,0 @@
1
- import { DeliveryClientConfig } from "../config/config";
2
- import { Filter } from "./filter";
3
- import { GetProjectionDataList } from "./getDataList";
4
- import { Order } from "./order";
5
- import { AuthData } from "./auth";
6
- import { UpsertResponse } from "./upsert";
7
- import { EventMetadata } from "./eventMetadata";
8
- import { Wait } from "./wait";
9
- export interface DeliveryClient {
10
- getData: <T extends {}>(projection: string, authData: AuthData, id: string, filter?: Filter, returnEmptyDataIfNotFound?: boolean, wait?: Wait) => Promise<T | null>;
11
- getDataList: <T extends {}>(projection: string, authData: AuthData, limit?: number, page?: number, filter?: Filter, order?: Order[]) => Promise<GetProjectionDataList<T> | null>;
12
- upsertData: <T extends {}>(projection: string, authData: AuthData, dataId: string, payload: Record<string, any>, eventMetadata?: EventMetadata) => Promise<UpsertResponse<T>>;
13
- deleteDataById: (projection: string, authData: AuthData, dataId: string, eventMetadata?: EventMetadata) => Promise<number>;
14
- deleteDataByFilter: (projection: string, authData: AuthData, filter?: Filter, eventMetadata?: EventMetadata) => Promise<number>;
15
- close: () => Promise<void>;
16
- }
17
- export declare const newDeliveryClient: (config?: DeliveryClientConfig) => Promise<DeliveryClient>;
@@ -1,45 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.newDeliveryClient = void 0;
4
- const delivery_1 = require("@fraym/proto/freym/projections/delivery");
5
- const grpc_js_1 = require("@grpc/grpc-js");
6
- const config_1 = require("../config/config");
7
- const getData_1 = require("./getData");
8
- const getDataList_1 = require("./getDataList");
9
- const upsert_1 = require("./upsert");
10
- const delete_1 = require("./delete");
11
- const newDeliveryClient = async (config) => {
12
- config = (0, config_1.useDeliveryConfigDefaults)(config);
13
- const serviceClient = new delivery_1.ServiceClient(config.serverAddress, grpc_js_1.credentials.createInsecure(), {
14
- "grpc.keepalive_time_ms": config.keepaliveInterval,
15
- "grpc.keepalive_timeout_ms": config.keepaliveTimeout,
16
- "grpc.keepalive_permit_without_calls": 1,
17
- });
18
- const getData = async (projection, auth, id, filter = { fields: {}, and: [], or: [] }, returnEmptyDataIfNotFound = false, wait) => {
19
- return await (0, getData_1.getProjectionData)(projection, auth, id, filter, returnEmptyDataIfNotFound, serviceClient, wait);
20
- };
21
- const getDataList = async (projection, auth, limit = 0, page = 1, filter = { fields: {}, and: [], or: [] }, order = []) => {
22
- return await (0, getDataList_1.getProjectionDataList)(projection, auth, limit, page, filter, order, serviceClient);
23
- };
24
- const upsertData = async (projection, authData, dataId, payload, eventMetadata = { causationId: "", correlationId: "" }) => {
25
- return (0, upsert_1.upsertProjectionData)(projection, authData, dataId, payload, eventMetadata, serviceClient);
26
- };
27
- const deleteDataById = async (projection, authData, dataId, eventMetadata = { causationId: "", correlationId: "" }) => {
28
- return (0, delete_1.deleteProjectionData)(projection, authData, dataId, { fields: {}, and: [], or: [] }, eventMetadata, serviceClient);
29
- };
30
- const deleteDataByFilter = async (projection, authData, filter = { fields: {}, and: [], or: [] }, eventMetadata = { causationId: "", correlationId: "" }) => {
31
- return (0, delete_1.deleteProjectionData)(projection, authData, "", filter, eventMetadata, serviceClient);
32
- };
33
- const close = async () => {
34
- serviceClient.close();
35
- };
36
- return {
37
- getData,
38
- getDataList,
39
- upsertData,
40
- deleteDataById,
41
- deleteDataByFilter,
42
- close,
43
- };
44
- };
45
- exports.newDeliveryClient = newDeliveryClient;
@@ -1,5 +0,0 @@
1
- import { ServiceClient } from "@fraym/proto/freym/projections/delivery";
2
- import { AuthData } from "./auth";
3
- import { EventMetadata } from "./eventMetadata";
4
- import { Filter } from "./filter";
5
- export declare const deleteProjectionData: (projection: string, auth: AuthData, dataId: string, filter: Filter, eventMetadata: EventMetadata, serviceClient: ServiceClient) => Promise<number>;
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteProjectionData = void 0;
4
- const auth_1 = require("./auth");
5
- const filter_1 = require("./filter");
6
- const deleteProjectionData = async (projection, auth, dataId, filter, eventMetadata, serviceClient) => {
7
- return new Promise((resolve, reject) => {
8
- serviceClient.deleteData({
9
- projection,
10
- auth: (0, auth_1.getProtobufAuthData)(auth),
11
- dataId,
12
- filter: (0, filter_1.getProtobufDataFilter)(filter),
13
- eventMetadata,
14
- }, (error, response) => {
15
- if (error) {
16
- reject(error.message);
17
- return;
18
- }
19
- resolve(response.numberOfDeletedEntries);
20
- });
21
- });
22
- };
23
- exports.deleteProjectionData = deleteProjectionData;
@@ -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.map(and => (0, exports.getProtobufDataFilter)(and)),
17
- 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/projections/delivery";
2
- import { AuthData } from "./auth";
3
- import { Filter } from "./filter";
4
- import { Wait } from "./wait";
5
- export declare const getProjectionData: <T extends {}>(projection: string, auth: AuthData, dataId: 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.getProjectionData = void 0;
4
- const auth_1 = require("./auth");
5
- const filter_1 = require("./filter");
6
- const wait_1 = require("./wait");
7
- const getProjectionData = async (projection, auth, dataId, filter, returnEmptyDataIfNotFound, serviceClient, wait) => {
8
- return new Promise((resolve, reject) => {
9
- serviceClient.getData({
10
- projection,
11
- auth: (0, auth_1.getProtobufAuthData)(auth),
12
- dataId,
13
- filter: (0, filter_1.getProtobufDataFilter)(filter),
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.getProjectionData = getProjectionData;
@@ -1,11 +0,0 @@
1
- import { ServiceClient } from "@fraym/proto/freym/projections/delivery";
2
- import { AuthData } from "./auth";
3
- import { Filter } from "./filter";
4
- import { Order } from "./order";
5
- export interface GetProjectionDataList<T extends {}> {
6
- limit: number;
7
- page: number;
8
- total: number;
9
- data: T[];
10
- }
11
- export declare const getProjectionDataList: <T extends {}>(projection: string, auth: AuthData, limit: number, page: number, filter: Filter, order: Order[], serviceClient: ServiceClient) => Promise<GetProjectionDataList<T> | null>;
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getProjectionDataList = void 0;
4
- const auth_1 = require("./auth");
5
- const filter_1 = require("./filter");
6
- const order_1 = require("./order");
7
- const getProjectionDataList = async (projection, auth, limit, page, filter, order, serviceClient) => {
8
- return new Promise((resolve, reject) => {
9
- serviceClient.getDataList({
10
- projection,
11
- auth: (0, auth_1.getProtobufAuthData)(auth),
12
- limit,
13
- page,
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: response.limit,
32
- page: response.page,
33
- total: response.total,
34
- data,
35
- });
36
- });
37
- });
38
- };
39
- exports.getProjectionDataList = getProjectionDataList;
@@ -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,15 +0,0 @@
1
- import { ServiceClient } from "@fraym/proto/freym/projections/delivery";
2
- import { AuthData } from "./auth";
3
- import { EventMetadata } from "./eventMetadata";
4
- export type UpsertResponse<T extends {}> = UpsertSuccessResponse<T> | UpsertValidationResponse;
5
- export interface UpsertSuccessResponse<T extends {}> {
6
- data: T;
7
- id: string;
8
- }
9
- export interface UpsertValidationResponse {
10
- validationErrors: string[];
11
- fieldValidationErrors: Record<string, string>;
12
- }
13
- export declare const isUpsertSuccessResponse: <T extends {}>(response: UpsertResponse<T>) => response is UpsertSuccessResponse<T>;
14
- export declare const isUpsertValidationResponse: <T extends {}>(response: UpsertResponse<T>) => response is UpsertValidationResponse;
15
- export declare const upsertProjectionData: <T extends {}>(projection: string, auth: AuthData, dataId: string, payload: Record<string, any>, eventMetadata: EventMetadata, serviceClient: ServiceClient) => Promise<UpsertResponse<T>>;
@@ -1,48 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.upsertProjectionData = exports.isUpsertValidationResponse = exports.isUpsertSuccessResponse = void 0;
4
- const auth_1 = require("./auth");
5
- const isUpsertSuccessResponse = (response) => {
6
- return response.hasOwnProperty("data");
7
- };
8
- exports.isUpsertSuccessResponse = isUpsertSuccessResponse;
9
- const isUpsertValidationResponse = (response) => {
10
- return !response.hasOwnProperty("data");
11
- };
12
- exports.isUpsertValidationResponse = isUpsertValidationResponse;
13
- const upsertProjectionData = async (projection, auth, dataId, payload, eventMetadata, serviceClient) => {
14
- const usedPayload = {};
15
- for (const key in payload) {
16
- usedPayload[key] = JSON.stringify(payload[key]);
17
- }
18
- return new Promise((resolve, reject) => {
19
- serviceClient.upsertData({
20
- projection,
21
- auth: (0, auth_1.getProtobufAuthData)(auth),
22
- dataId,
23
- payload: usedPayload,
24
- eventMetadata,
25
- }, (error, response) => {
26
- if (error) {
27
- reject(error.message);
28
- return;
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
- }
41
- resolve({
42
- data,
43
- id: response.id,
44
- });
45
- });
46
- });
47
- };
48
- exports.upsertProjectionData = upsertProjectionData;
@@ -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,
13
- };
14
- };
15
- exports.getProtobufDataWait = getProtobufDataWait;
File without changes