integreat 0.8.4 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -5
- package/dist/handlers/delete.js +8 -4
- package/dist/handlers/delete.js.map +1 -1
- package/dist/handlers/get.js +8 -0
- package/dist/handlers/get.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/service/endpoints/create.js +23 -1
- package/dist/service/endpoints/create.js.map +1 -1
- package/dist/service/endpoints/types.d.ts +7 -1
- package/dist/utils/mutateAndSend.js +4 -0
- package/dist/utils/mutateAndSend.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -230,9 +230,9 @@ to signal that this is an authenticated service.
|
|
|
230
230
|
|
|
231
231
|
### Endpoints
|
|
232
232
|
|
|
233
|
-
A service will have at least one endpoint, but often there will be several.
|
|
234
|
-
|
|
235
|
-
service. You decide how you want to set up the endpoints and what is the right
|
|
233
|
+
A service will have at least one endpoint, but often there will be several.
|
|
234
|
+
Endpoints are the definitions of the different ways Integreat may interact with
|
|
235
|
+
a service. You decide how you want to set up the endpoints and what is the right
|
|
236
236
|
"endpoint design" for a service, but there might be one endpoint for each
|
|
237
237
|
operation that can be done with a type of data.
|
|
238
238
|
|
|
@@ -259,8 +259,9 @@ different database operations (through the transporter).
|
|
|
259
259
|
|
|
260
260
|
When you dispatch an action, Integreat will figure out what service and what
|
|
261
261
|
endpoint to send the action to. The target service is often specified in the
|
|
262
|
-
action payload with the `service` property, but
|
|
263
|
-
the schema specified with the payload `type`
|
|
262
|
+
action payload with the `targetService` (or shorthand `service`) property, but
|
|
263
|
+
if not, the default service of the schema specified with the payload `type`
|
|
264
|
+
property, will be used.
|
|
264
265
|
|
|
265
266
|
The matching to an endpoint is done by finding the endpoint whose `match` object
|
|
266
267
|
matches the action with most accuracy. The rules of the endpoint matching is
|
|
@@ -279,6 +280,12 @@ Here's the format of an endpoint definition:
|
|
|
279
280
|
incoming: <boolean>,
|
|
280
281
|
filters: {...}
|
|
281
282
|
},
|
|
283
|
+
validate: [
|
|
284
|
+
{
|
|
285
|
+
condition: <mutation pipeline>,
|
|
286
|
+
failResponse: <response object>
|
|
287
|
+
}
|
|
288
|
+
]
|
|
282
289
|
mutation: <mutation pipeline>,
|
|
283
290
|
options: {...},
|
|
284
291
|
allowRawRequest: <boolean>,
|
|
@@ -297,6 +304,15 @@ specify a few things:
|
|
|
297
304
|
the action you dispatch.
|
|
298
305
|
- `match`: The match object is used to decide the right endpoint for an action.
|
|
299
306
|
More one this in the [Match properties](#match-properties) section.
|
|
307
|
+
- `validate`: This is an array of condition that have to be met in order for
|
|
308
|
+
Integreat to proceed with the endpoint. This may sound similar to `match`, but
|
|
309
|
+
`validate` is only processed after a match is found, and if the validation
|
|
310
|
+
fails, no other endpoint is considered and the `failResponse` is returned as
|
|
311
|
+
the response from this action without ever running mutations or sending
|
|
312
|
+
anything to the service (or a `badrequest` response if no `failResponse` is
|
|
313
|
+
provided). The `condition` is a mutation pipeline that should return a truthy
|
|
314
|
+
value for the validation to pass. Any falsy value will cause the validation to
|
|
315
|
+
fail. If `validate` is missing or an empty array, no validation will be done.
|
|
300
316
|
- `mutation`: A mutation pipeline for the endpoint. The pipeline is run for both
|
|
301
317
|
actions going to a service and the response coming back, so keep this in mind
|
|
302
318
|
when you set up this pipeline. See [Mutation pipelines](#mutations)
|
package/dist/handlers/delete.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import debugLib from 'debug';
|
|
2
2
|
import mutateAndSend from '../utils/mutateAndSend.js';
|
|
3
|
+
import { isTypedData } from '../utils/is.js';
|
|
3
4
|
import { setDataOnActionPayload, createErrorResponse } from '../utils/action.js';
|
|
4
5
|
import createUnknownServiceError from '../utils/createUnknownServiceError.js';
|
|
5
6
|
const debug = debugLib('great');
|
|
6
7
|
const prepareData = ({ type, id, data }) => type && id
|
|
7
8
|
?
|
|
8
|
-
|
|
9
|
-
:
|
|
10
|
-
|
|
9
|
+
{ id, $type: type }
|
|
10
|
+
: Array.isArray(data)
|
|
11
|
+
? data.filter(isTypedData)
|
|
12
|
+
: isTypedData(data)
|
|
13
|
+
? data
|
|
14
|
+
: undefined;
|
|
11
15
|
export default async function deleteFn(action, { getService }) {
|
|
12
16
|
const { type, id, targetService: serviceId, endpoint: endpointId, } = action.payload;
|
|
13
17
|
const service = getService(type, serviceId);
|
|
@@ -15,7 +19,7 @@ export default async function deleteFn(action, { getService }) {
|
|
|
15
19
|
return createUnknownServiceError(type, serviceId, 'DELETE');
|
|
16
20
|
}
|
|
17
21
|
const data = prepareData(action.payload);
|
|
18
|
-
if (data.length === 0) {
|
|
22
|
+
if ((Array.isArray(data) && data.length === 0) || !data) {
|
|
19
23
|
return createErrorResponse(`No items to delete from service '${service.id}'`, 'noaction');
|
|
20
24
|
}
|
|
21
25
|
const endpointDebug = endpointId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/handlers/delete.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,OAAO,CAAA;AAC5B,OAAO,aAAa,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,yBAAyB,MAAM,uCAAuC,CAAA;AAQ7E,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;AAE/B,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAW,EAAE,EAAE,CAClD,IAAI,IAAI,EAAE;IACR,CAAC;QACC,
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/handlers/delete.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,OAAO,CAAA;AAC5B,OAAO,aAAa,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAChF,OAAO,yBAAyB,MAAM,uCAAuC,CAAA;AAQ7E,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;AAE/B,MAAM,WAAW,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAW,EAAE,EAAE,CAClD,IAAI,IAAI,EAAE;IACR,CAAC;QACC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;IACrB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACrB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAC1B,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YACnB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,SAAS,CAAA;AAKf,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,QAAQ,CACpC,MAAc,EACd,EAAE,UAAU,EAA0B;IAEtC,MAAM,EACJ,IAAI,EACJ,EAAE,EACF,aAAa,EAAE,SAAS,EACxB,QAAQ,EAAE,UAAU,GACrB,GAAG,MAAM,CAAC,OAAO,CAAA;IAElB,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC3C,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;KAC5D;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;QACvD,OAAO,mBAAmB,CACxB,oCAAoC,OAAO,CAAC,EAAE,GAAG,EACjD,UAAU,CACX,CAAA;KACF;IAED,MAAM,aAAa,GAAG,UAAU;QAC9B,CAAC,CAAC,aAAa,UAAU,GAAG;QAC5B,CAAC,CAAC,qBAAqB,IAAI,QAAQ,EAAE,EAAE,CAAA;IACzC,KAAK,CAAC,yCAAyC,EAAE,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAA;IAE3E,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAA;IACvD,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,mBAAmB,CACxB,wBAAwB,UAAU,CAAC,IAAI,wBAAwB,SAAS,IAAI,EAC5E,YAAY,CACb,CAAA;KACF;IAED,OAAO,MAAM,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAA;AAC3D,CAAC"}
|
package/dist/handlers/get.js
CHANGED
|
@@ -24,6 +24,10 @@ async function runAsIndividualActions(action, service, mapPerId) {
|
|
|
24
24
|
if (!endpoint) {
|
|
25
25
|
return createNoEndpointError(action, service.id);
|
|
26
26
|
}
|
|
27
|
+
const validateResponse = await endpoint.validateAction(action);
|
|
28
|
+
if (validateResponse) {
|
|
29
|
+
return validateResponse;
|
|
30
|
+
}
|
|
27
31
|
return combineResponses(action, await Promise.all(actions.map((action) => pLimit(1)(() => mapPerId(endpoint)(action)))));
|
|
28
32
|
}
|
|
29
33
|
const doRunIndividualIds = (action, endpoint) => Array.isArray(action.payload.id) &&
|
|
@@ -37,6 +41,10 @@ async function runOneOrMany(action, service, mapPerId) {
|
|
|
37
41
|
if (!endpoint) {
|
|
38
42
|
return createNoEndpointError(action, service.id);
|
|
39
43
|
}
|
|
44
|
+
const validateResponse = await endpoint.validateAction(action);
|
|
45
|
+
if (validateResponse) {
|
|
46
|
+
return validateResponse;
|
|
47
|
+
}
|
|
40
48
|
return mapPerId(endpoint)(action);
|
|
41
49
|
}
|
|
42
50
|
const runOne = (service) => (endpoint) => async function (action) {
|
package/dist/handlers/get.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/handlers/get.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../src/handlers/get.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ export * as middleware from './middleware/index.js';
|
|
|
8
8
|
export * as adapters from './adapters/index.js';
|
|
9
9
|
export { createAction } from './utils/action.js';
|
|
10
10
|
export default {
|
|
11
|
-
version: '0.8.
|
|
11
|
+
version: '0.8.6',
|
|
12
12
|
create,
|
|
13
13
|
mergeDefinitions,
|
|
14
14
|
mergeResources,
|
|
@@ -17,6 +17,26 @@ function mutateAction(mutator, isRev, normalize = async (action) => action, seri
|
|
|
17
17
|
return rev ? await serialize(mutatedAction) : mutatedAction;
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
+
function prepareValidator(validate, mapOptions) {
|
|
21
|
+
if (!Array.isArray(validate) || validate.length === 0) {
|
|
22
|
+
return async () => null;
|
|
23
|
+
}
|
|
24
|
+
const validators = validate.map(({ condition, failResponse }) => ({
|
|
25
|
+
validate: mapTransform(condition, mapOptions),
|
|
26
|
+
failResponse,
|
|
27
|
+
}));
|
|
28
|
+
return async function validateAction(action) {
|
|
29
|
+
for (const { validate, failResponse } of validators) {
|
|
30
|
+
const result = validate(action);
|
|
31
|
+
if (!result)
|
|
32
|
+
return (failResponse || {
|
|
33
|
+
status: 'badrequest',
|
|
34
|
+
error: 'Did not satisfy endpoint validation',
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
20
40
|
const flattenIfOneOrNone = (arr) => arr.length <= 1 ? arr[0] : arr;
|
|
21
41
|
const setModifyFlag = (def) => isObject(def) ? { ...def, $modify: true } : def;
|
|
22
42
|
const prepareAdapter = (options, serviceId, doSerialize = false) => function prepareAdapter(adapter) {
|
|
@@ -28,13 +48,14 @@ const prepareAdapter = (options, serviceId, doSerialize = false) => function pre
|
|
|
28
48
|
const pipeAdapters = (adapters) => adapters.length > 0 ? pPipe(...adapters) : undefined;
|
|
29
49
|
export default function createEndpoint(serviceId, serviceOptions, mapOptions, serviceMutation, prepareOptions = (options) => options, serviceAdapters = []) {
|
|
30
50
|
return function (endpointDef) {
|
|
51
|
+
const { id, validate, allowRawRequest = false, allowRawResponse = false, match, adapters = [], } = endpointDef;
|
|
31
52
|
const mutation = flattenIfOneOrNone([...ensureArray(serviceMutation), ...ensureArray(endpointDef.mutation)]
|
|
32
53
|
.map(setModifyFlag)
|
|
33
54
|
.filter(isNotNullOrUndefined));
|
|
34
55
|
const mutator = mutation ? mapTransform(mutation, mapOptions) : null;
|
|
56
|
+
const validator = prepareValidator(validate, mapOptions);
|
|
35
57
|
const options = { ...serviceOptions, ...endpointDef.options };
|
|
36
58
|
const preparedOptions = prepareOptions(options, serviceId);
|
|
37
|
-
const { id, allowRawRequest = false, allowRawResponse = false, match, adapters = [], } = endpointDef;
|
|
38
59
|
const allAdapters = [...serviceAdapters, ...adapters];
|
|
39
60
|
const normalize = pipeAdapters(allAdapters.map(prepareAdapter(options, serviceId, false)));
|
|
40
61
|
allAdapters.reverse();
|
|
@@ -45,6 +66,7 @@ export default function createEndpoint(serviceId, serviceOptions, mapOptions, se
|
|
|
45
66
|
allowRawResponse,
|
|
46
67
|
match,
|
|
47
68
|
options: preparedOptions,
|
|
69
|
+
validateAction: validator,
|
|
48
70
|
mutateRequest: mutateAction(mutator, true, normalize, serialize),
|
|
49
71
|
mutateResponse: mutateAction(mutator, false, normalize, serialize),
|
|
50
72
|
isMatch: isMatch(endpointDef),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/service/endpoints/create.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/service/endpoints/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TransformDefinition } from 'map-transform/types.js';
|
|
2
|
-
import type { Action, Condition, Adapter } from '../../types.js';
|
|
2
|
+
import type { Action, Response, Condition, Adapter } from '../../types.js';
|
|
3
3
|
export type EndpointOptions = Record<string, unknown>;
|
|
4
4
|
export interface MatchObject {
|
|
5
5
|
action?: string | string[];
|
|
@@ -9,9 +9,14 @@ export interface MatchObject {
|
|
|
9
9
|
filters?: Record<string, Condition | boolean | undefined>;
|
|
10
10
|
incoming?: boolean;
|
|
11
11
|
}
|
|
12
|
+
export interface ValidateObject {
|
|
13
|
+
condition: TransformDefinition;
|
|
14
|
+
failResponse?: Response;
|
|
15
|
+
}
|
|
12
16
|
export interface EndpointDef {
|
|
13
17
|
id?: string;
|
|
14
18
|
match?: MatchObject;
|
|
19
|
+
validate?: ValidateObject[];
|
|
15
20
|
options?: EndpointOptions;
|
|
16
21
|
mutation?: TransformDefinition;
|
|
17
22
|
adapters?: (string | Adapter)[];
|
|
@@ -22,6 +27,7 @@ export interface Endpoint {
|
|
|
22
27
|
id?: string;
|
|
23
28
|
match?: MatchObject;
|
|
24
29
|
options: EndpointOptions;
|
|
30
|
+
validateAction: (action: Action) => Promise<Response | null>;
|
|
25
31
|
mutateRequest: (action: Action, isIncoming?: boolean) => Promise<Action>;
|
|
26
32
|
mutateResponse: (action: Action, isIncoming?: boolean) => Promise<Action>;
|
|
27
33
|
isMatch: (action: Action, isIncoming?: boolean) => boolean;
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { setResponseOnAction } from '../utils/action.js';
|
|
2
2
|
export default async function mutateAndSend(service, endpoint, action) {
|
|
3
|
+
const validateResponse = await endpoint.validateAction(action);
|
|
4
|
+
if (validateResponse) {
|
|
5
|
+
return validateResponse;
|
|
6
|
+
}
|
|
3
7
|
const authorizedAction = service.authorizeAction(action);
|
|
4
8
|
const requestAction = await service.mutateRequest(authorizedAction, endpoint);
|
|
5
9
|
const response = await service.send(requestAction);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutateAndSend.js","sourceRoot":"","sources":["../../src/utils/mutateAndSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAKxD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,aAAa,CACzC,OAAgB,EAChB,QAAkB,EAClB,MAAc;IAEd,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IAC7E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAClD,OAAO,MAAM,OAAO,CAAC,cAAc,CACjC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EACrC,QAAQ,CACT,CAAA;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"mutateAndSend.js","sourceRoot":"","sources":["../../src/utils/mutateAndSend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAKxD,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,aAAa,CACzC,OAAgB,EAChB,QAAkB,EAClB,MAAc;IAEd,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;IAC9D,IAAI,gBAAgB,EAAE;QACpB,OAAO,gBAAgB,CAAA;KACxB;IAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IACxD,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;IAC7E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAClD,OAAO,MAAM,OAAO,CAAC,cAAc,CACjC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,EACrC,QAAQ,CACT,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "integreat",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.6",
|
|
4
4
|
"description": "Node.js integration layer",
|
|
5
5
|
"author": "Kjell-Morten Bratsberg Thorsen <kjellmorten@integreat.io> (https://integreat.io/)",
|
|
6
6
|
"license": "ISC",
|
|
@@ -54,11 +54,11 @@
|
|
|
54
54
|
"rfdc": "^1.3.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@integreat/ts-dev-setup": "^4.1.
|
|
57
|
+
"@integreat/ts-dev-setup": "^4.1.1",
|
|
58
58
|
"@types/sinon": "^10.0.15",
|
|
59
|
-
"integreat-adapter-json": "^0.
|
|
60
|
-
"integreat-transporter-http": "0.1.
|
|
61
|
-
"nock": "^13.3.
|
|
59
|
+
"integreat-adapter-json": "^0.7.0",
|
|
60
|
+
"integreat-transporter-http": "0.1.1",
|
|
61
|
+
"nock": "^13.3.2",
|
|
62
62
|
"sinon": "^15.2.0"
|
|
63
63
|
}
|
|
64
64
|
}
|