@things-factory/integration-base 4.3.534 → 4.3.536
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/dist-server/service/index.js +5 -3
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/webhook/webhook-mutation.js +1 -42
- package/dist-server/service/webhook/webhook-mutation.js.map +1 -1
- package/dist-server/service/webhook/webhook.js +6 -1
- package/dist-server/service/webhook/webhook.js.map +1 -1
- package/dist-server/service/webhook-event/webhhok-event-enums.js +31 -0
- package/dist-server/service/webhook-event/webhhok-event-enums.js.map +1 -0
- package/dist-server/service/webhook-event/webhook-event.js +10 -1
- package/dist-server/service/webhook-event/webhook-event.js.map +1 -1
- package/dist-server/service/webhook-handler/lambda-handler.js +30 -0
- package/dist-server/service/webhook-handler/lambda-handler.js.map +1 -0
- package/dist-server/service/webhook-handler/webhook-controller.js +54 -0
- package/dist-server/service/webhook-handler/webhook-controller.js.map +1 -0
- package/dist-server/util/lambda/lambda-const.js +2 -1
- package/dist-server/util/lambda/lambda-const.js.map +1 -1
- package/package.json +6 -6
- package/server/service/index.ts +13 -45
- package/server/service/webhook/webhook-mutation.ts +0 -46
- package/server/service/webhook/webhook.ts +7 -2
- package/server/service/webhook-event/webhhok-event-enums.ts +29 -0
- package/server/service/webhook-event/webhook-event.ts +14 -16
- package/server/service/webhook-handler/lambda-handler.ts +27 -0
- package/server/service/webhook-handler/webhook-controller.ts +50 -0
- package/server/util/lambda/lambda-const.ts +1 -0
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
17
|
+
exports.WebhookEvents = exports.webhookHandler = exports.createPayloadLog = exports.PayloadType = exports.schema = exports.entities = void 0;
|
|
18
18
|
const connection_1 = require("./connection");
|
|
19
19
|
const connector_1 = require("./connector");
|
|
20
20
|
const integration_1 = require("./integration");
|
|
@@ -70,6 +70,8 @@ var payload_log_2 = require("./payload-log/payload-log");
|
|
|
70
70
|
Object.defineProperty(exports, "PayloadType", { enumerable: true, get: function () { return payload_log_2.PayloadType; } });
|
|
71
71
|
var payload_log_mutation_1 = require("./payload-log/payload-log-mutation");
|
|
72
72
|
Object.defineProperty(exports, "createPayloadLog", { enumerable: true, get: function () { return payload_log_mutation_1.createPayloadLog; } });
|
|
73
|
-
var
|
|
74
|
-
Object.defineProperty(exports, "
|
|
73
|
+
var webhook_controller_1 = require("./webhook-handler/webhook-controller");
|
|
74
|
+
Object.defineProperty(exports, "webhookHandler", { enumerable: true, get: function () { return webhook_controller_1.webhookHandler; } });
|
|
75
|
+
var webhhok_event_enums_1 = require("./webhook-event/webhhok-event-enums");
|
|
76
|
+
Object.defineProperty(exports, "WebhookEvents", { enumerable: true, get: function () { return webhhok_event_enums_1.WebhookEvents; } });
|
|
75
77
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/service/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAA+F;AAC/F,2CAA4F;AAC5F,+CAAkG;AAClG,+CAAgG;AAChG,yCAAyF;AACzF,2DAAkH;AAClH,qDAAyG;AACzG,iCAA6E;AAC7E,2CAA0F;AAC1F,uCAAsF;AACtF,mDAAsG;AAEtG,kDAA+B;AAC/B,6DAA0C;AAC1C,6DAA0C;AAC1C,+DAA4C;AAC5C,2DAAwC;AACxC,6EAA0D;AAC1D,uEAAoD;AACpD,mDAAgC;AAChC,gEAA6C;AAC7C,4DAAyC;AACzC,4DAAyC;AACzC,oDAAiC;AAEpB,QAAA,QAAQ,GAAG;IACtB,GAAG,oBAAgB;IACnB,GAAG,oBAAiB;IACpB,GAAG,qBAAkB;IACrB,GAAG,mBAAgB;IACnB,GAAG,4BAAwB;IAC3B,GAAG,yBAAqB;IACxB,GAAG,eAAY;IACf,GAAG,sBAAkB;IACrB,GAAG,sBAAmB;IACtB,GAAG,kBAAe;IAClB,GAAG,wBAAoB;CACxB,CAAA;AAEY,QAAA,MAAM,GAAG;IACpB,eAAe,EAAE;QACf,GAAG,qBAAiB;QACpB,GAAG,qBAAkB;QACrB,GAAG,sBAAmB;QACtB,GAAG,oBAAiB;QACpB,GAAG,6BAAyB;QAC5B,GAAG,0BAAsB;QACzB,GAAG,gBAAa;QAChB,GAAG,uBAAmB;QACtB,GAAG,uBAAoB;QACvB,GAAG,mBAAgB;QACnB,GAAG,yBAAqB;KACzB;CACF,CAAA;AAED,yDAAuD;AAA9C,0GAAA,WAAW,OAAA;AACpB,2EAAqE;AAA5D,wHAAA,gBAAgB,OAAA;AACzB,2EAAqE;AAA5D,oHAAA,cAAc,OAAA;AACvB,2EAAmE;AAA1D,oHAAA,aAAa,OAAA"}
|
|
@@ -6,7 +6,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.
|
|
9
|
+
exports.WebhookMutation = void 0;
|
|
10
10
|
const type_graphql_1 = require("type-graphql");
|
|
11
11
|
const webhook_1 = require("./webhook");
|
|
12
12
|
const axios = require('axios');
|
|
@@ -16,45 +16,4 @@ WebhookMutation = __decorate([
|
|
|
16
16
|
(0, type_graphql_1.Resolver)(webhook_1.Webhook)
|
|
17
17
|
], WebhookMutation);
|
|
18
18
|
exports.WebhookMutation = WebhookMutation;
|
|
19
|
-
async function triggerWebhook(id, bizplaceIds, name, context) {
|
|
20
|
-
try {
|
|
21
|
-
const { tx } = context === null || context === void 0 ? void 0 : context.state;
|
|
22
|
-
let qb = await tx
|
|
23
|
-
.getRepository(webhook_1.Webhook)
|
|
24
|
-
.createQueryBuilder('webhook')
|
|
25
|
-
.innerJoinAndSelect('webhook.bizplaces', 'bz')
|
|
26
|
-
.innerJoinAndSelect('webhook.webhookEvents', 'webhookEvent')
|
|
27
|
-
.where('bz.id IN (:...bizplaceIds)', { bizplaceIds: bizplaceIds })
|
|
28
|
-
.andWhere('webhookEvent.name = :name', { name: name })
|
|
29
|
-
.andWhere(`webhook.active = 'TRUE'`);
|
|
30
|
-
const results = await qb.getMany();
|
|
31
|
-
if (results) {
|
|
32
|
-
await Promise.all(results.map(async (result) => {
|
|
33
|
-
for (const bizplace of result.bizplaces) {
|
|
34
|
-
const data = {
|
|
35
|
-
eventName: name,
|
|
36
|
-
id: id,
|
|
37
|
-
bizplaceId: bizplace.id,
|
|
38
|
-
timestamp: new Date()
|
|
39
|
-
};
|
|
40
|
-
const config = {
|
|
41
|
-
method: 'post',
|
|
42
|
-
url: result.targetUrl,
|
|
43
|
-
data
|
|
44
|
-
};
|
|
45
|
-
try {
|
|
46
|
-
await axios(config);
|
|
47
|
-
}
|
|
48
|
-
catch (e) {
|
|
49
|
-
console.error(e.message);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}));
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
catch (e) {
|
|
56
|
-
console.error(e);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.triggerWebhook = triggerWebhook;
|
|
60
19
|
//# sourceMappingURL=webhook-mutation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-mutation.js","sourceRoot":"","sources":["../../../server/service/webhook/webhook-mutation.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAAuC;AAGvC,uCAAmC;AAEnC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAGvB,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,eAAe;IAD3B,IAAA,uBAAQ,EAAC,iBAAO,CAAC;GACL,eAAe,CAAG;AAAlB,0CAAe
|
|
1
|
+
{"version":3,"file":"webhook-mutation.js","sourceRoot":"","sources":["../../../server/service/webhook/webhook-mutation.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+CAAuC;AAGvC,uCAAmC;AAEnC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAGvB,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,eAAe;IAD3B,IAAA,uBAAQ,EAAC,iBAAO,CAAC;GACL,eAAe,CAAG;AAAlB,0CAAe"}
|
|
@@ -37,6 +37,10 @@ __decorate([
|
|
|
37
37
|
(0, typeorm_1.Column)(),
|
|
38
38
|
__metadata("design:type", String)
|
|
39
39
|
], Webhook.prototype, "targetUrl", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], Webhook.prototype, "extensionUrl", void 0);
|
|
40
44
|
__decorate([
|
|
41
45
|
(0, typeorm_1.OneToMany)(type => webhook_event_1.WebhookEvent, webhookEvent => webhookEvent.webhook),
|
|
42
46
|
(0, type_graphql_1.Field)(type => [webhook_event_1.WebhookEvent], { nullable: true }),
|
|
@@ -52,7 +56,8 @@ __decorate([
|
|
|
52
56
|
(0, typeorm_1.CreateDateColumn)(),
|
|
53
57
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
54
58
|
__metadata("design:type", Date
|
|
55
|
-
// targetUrl varchar [note:'
|
|
59
|
+
// targetUrl varchar [note:'The main URL that Lambda calls to send webhook event data.']
|
|
60
|
+
// extensionUrl varchar [note:'A flexible path segment that can be updated as needed to access different resources or endpoints under the base URL.']
|
|
56
61
|
// headers JSON [note:'Hook specific additional HTTP headers that should be added to HTTP request, stored as JSON blob']
|
|
57
62
|
// properties JSON [note:'Hook specific additional data that should be added to payload, stored as JSON blob']
|
|
58
63
|
// includeTime bool [note:'To include sending timestamp during hashing']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../server/service/webhook/webhook.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAIqB;AACrB,qCASgB;AAEhB,uDAAmD;AAEnD,kEAA6D;AAKtD,IAAM,OAAO,GAAb,MAAM,OAAO;
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../server/service/webhook/webhook.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAIqB;AACrB,qCASgB;AAEhB,uDAAmD;AAEnD,kEAA6D;AAKtD,IAAM,OAAO,GAAb,MAAM,OAAO;CA2CnB,CAAA;AA1CC;IAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;mCACC;AAEnB;IAAC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;qCACI;AAEZ;IAAC,IAAA,gBAAM,EAAC;QACN,QAAQ,EAAE,IAAI;KACf,CAAC;IACD,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uCACV;AAEhB;IAAC,IAAA,gBAAM,GAAE;;0CACQ;AAEjB;IAAC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACN;AAErB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,4BAAY,EAAE,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;IACrE,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,4BAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACrB;AAE7B;IAAC,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC,mBAAQ,CAAC;IAC5B,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;IACxC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,mBAAQ,CAAC,CAAC;;0CACJ;AAEtB;IAAC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACd,IAAI;IAGhB,wFAAwF;IACxF,qJAAqJ;IACrJ,wHAAwH;IACxH,8GAA8G;IAC9G,wEAAwE;IACxE,6CAA6C;IAC7C,mPAAmP;IACnP,2IAA2I;;0CAV3H;AAhCL,OAAO;IAHnB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,cAAc,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC7E,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;GACrC,OAAO,CA2CnB;AA3CY,0BAAO"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebhookEvents = void 0;
|
|
4
|
+
var WebhookEvents;
|
|
5
|
+
(function (WebhookEvents) {
|
|
6
|
+
//Inbound Events
|
|
7
|
+
WebhookEvents["ArrivalNoticeCreated"] = "arrival_notice_created";
|
|
8
|
+
WebhookEvents["ArrivalNoticeUpdated"] = "arrival_notice_updated";
|
|
9
|
+
WebhookEvents["ArrivalNoticeConfirmed"] = "arrival_notice_confirmed";
|
|
10
|
+
WebhookEvents["ArrivalNoticeCompleted"] = "arrival_notice_completed";
|
|
11
|
+
WebhookEvents["GrnCreated"] = "grn_created";
|
|
12
|
+
//Outbound Events
|
|
13
|
+
WebhookEvents["DraftOrderCreated"] = "draft_order_created";
|
|
14
|
+
WebhookEvents["DraftOrderUpdated"] = "draft_order_updated";
|
|
15
|
+
WebhookEvents["DraftOrderConverted"] = "draft_order_converted";
|
|
16
|
+
WebhookEvents["ReleaseOrderCreated"] = "release_order_created";
|
|
17
|
+
WebhookEvents["ReleaseOrderUpdated"] = "release_order_updated";
|
|
18
|
+
WebhookEvents["ReleaseOrderConfirmed"] = "release_order_confirmed";
|
|
19
|
+
WebhookEvents["ReleaseOrderCompleted"] = "release_order_completed";
|
|
20
|
+
WebhookEvents["PickingStarted"] = "picking_started";
|
|
21
|
+
WebhookEvents["PickingCompleted"] = "picking_completed";
|
|
22
|
+
WebhookEvents["PackingStarted"] = "packing_started";
|
|
23
|
+
WebhookEvents["PackingCompleted"] = "packing_completed";
|
|
24
|
+
WebhookEvents["LoadingStarted"] = "loading_started";
|
|
25
|
+
WebhookEvents["LoadingCompleted"] = "loading_completed";
|
|
26
|
+
//Inventory Events
|
|
27
|
+
WebhookEvents["InventoryAdjusted"] = "inventory_adjusted";
|
|
28
|
+
//Manifest Events
|
|
29
|
+
WebhookEvents["DispatchManifest"] = "dispatch_manifest";
|
|
30
|
+
})(WebhookEvents = exports.WebhookEvents || (exports.WebhookEvents = {}));
|
|
31
|
+
//# sourceMappingURL=webhhok-event-enums.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhhok-event-enums.js","sourceRoot":"","sources":["../../../server/service/webhook-event/webhhok-event-enums.ts"],"names":[],"mappings":";;;AAAA,IAAY,aA4BX;AA5BD,WAAY,aAAa;IACrB,iBAAiB;IACjB,gEAA+C,CAAA;IAC/C,gEAA+C,CAAA;IAC/C,oEAAmD,CAAA;IACnD,oEAAmD,CAAA;IACnD,2CAA0B,CAAA;IAE1B,iBAAiB;IACjB,0DAAyC,CAAA;IACzC,0DAAyC,CAAA;IACzC,8DAA6C,CAAA;IAC7C,8DAA4C,CAAA;IAC5C,8DAA4C,CAAA;IAC5C,kEAAiD,CAAA;IACjD,kEAAgD,CAAA;IAChD,mDAAkC,CAAA;IAClC,uDAAsC,CAAA;IACtC,mDAAkC,CAAA;IAClC,uDAAsC,CAAA;IACtC,mDAAkC,CAAA;IAClC,uDAAsC,CAAA;IAEtC,kBAAkB;IAClB,yDAAwC,CAAA;IAExC,iBAAiB;IACjB,uDAAsC,CAAA;AAC1C,CAAC,EA5BW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QA4BxB"}
|
|
@@ -13,6 +13,11 @@ exports.WebhookEvent = void 0;
|
|
|
13
13
|
const type_graphql_1 = require("type-graphql");
|
|
14
14
|
const typeorm_1 = require("typeorm");
|
|
15
15
|
const webhook_1 = require("../webhook/webhook");
|
|
16
|
+
const webhhok_event_enums_1 = require("../webhook-event/webhhok-event-enums");
|
|
17
|
+
(0, type_graphql_1.registerEnumType)(webhhok_event_enums_1.WebhookEvents, {
|
|
18
|
+
name: 'WebhookEvents',
|
|
19
|
+
description: 'state enumeration of a webhook events'
|
|
20
|
+
});
|
|
16
21
|
let WebhookEvent = class WebhookEvent {
|
|
17
22
|
};
|
|
18
23
|
__decorate([
|
|
@@ -21,7 +26,11 @@ __decorate([
|
|
|
21
26
|
__metadata("design:type", String)
|
|
22
27
|
], WebhookEvent.prototype, "id", void 0);
|
|
23
28
|
__decorate([
|
|
24
|
-
(0, typeorm_1.Column)(
|
|
29
|
+
(0, typeorm_1.Column)({
|
|
30
|
+
type: 'enum',
|
|
31
|
+
enum: webhhok_event_enums_1.WebhookEvents,
|
|
32
|
+
enumName: 'webhook_events_enum'
|
|
33
|
+
}),
|
|
25
34
|
(0, type_graphql_1.Field)(),
|
|
26
35
|
__metadata("design:type", String)
|
|
27
36
|
], WebhookEvent.prototype, "name", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-event.js","sourceRoot":"","sources":["../../../server/service/webhook-event/webhook-event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"webhook-event.js","sourceRoot":"","sources":["../../../server/service/webhook-event/webhook-event.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAAsE;AACtE,qCAAgH;AAEhH,gDAA4C;AAC5C,8EAAoE;AAEpE,IAAA,+BAAgB,EAAC,mCAAa,EAAE;IAC9B,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,uCAAuC;CACrD,CAAC,CAAA;AAOK,IAAM,YAAY,GAAlB,MAAM,YAAY;CAwBxB,CAAA;AAvBC;IAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;wCACC;AAEnB;IAAC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,mCAAa;QACnB,QAAQ,EAAE,qBAAqB;KAChC,CAAC;IACD,IAAA,oBAAK,GAAE;;0CACW;AAEnB;IAAC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAO,CAAC;8BACb,iBAAO;6CAAA;AAEjB;IAAC,IAAA,oBAAU,EAAC,CAAC,YAA0B,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC;;+CAC/C;AAElB;IAAC,IAAA,oBAAK,GAAE;IACP,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACd,IAAI;+CAAA;AAvBL,YAAY;IALxB,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,oBAAoB,EAAE,CAAC,YAA0B,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE;QACtG,MAAM,EAAE,IAAI;KACb,CAAC;IACD,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;GAC1C,YAAY,CAwBxB;AAxBY,oCAAY"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.lambdaService = void 0;
|
|
4
|
+
const client_lambda_1 = require("@aws-sdk/client-lambda");
|
|
5
|
+
const lambda_const_1 = require("../../util/lambda/lambda-const");
|
|
6
|
+
async function lambdaService(funcName, payload) {
|
|
7
|
+
try {
|
|
8
|
+
if (!!!lambda_const_1.LambdaConfigMy) {
|
|
9
|
+
throw new Error('Lambda config not found');
|
|
10
|
+
}
|
|
11
|
+
const client = new client_lambda_1.LambdaClient({
|
|
12
|
+
region: lambda_const_1.LambdaConfigMy.region,
|
|
13
|
+
credentials: {
|
|
14
|
+
accessKeyId: lambda_const_1.LambdaConfigMy.accessKeyId,
|
|
15
|
+
secretAccessKey: lambda_const_1.LambdaConfigMy.secretAccessKey
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
const command = new client_lambda_1.InvokeCommand({
|
|
19
|
+
FunctionName: funcName,
|
|
20
|
+
Payload: JSON.stringify(payload),
|
|
21
|
+
LogType: client_lambda_1.LogType.Tail
|
|
22
|
+
});
|
|
23
|
+
client.send(command);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error(error.message);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.lambdaService = lambdaService;
|
|
30
|
+
//# sourceMappingURL=lambda-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lambda-handler.js","sourceRoot":"","sources":["../../../server/service/webhook-handler/lambda-handler.ts"],"names":[],"mappings":";;;AAAA,0DAA6E;AAE7E,iEAA+D;AAExD,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,OAAY;IAChE,IAAI;QACF,IAAI,CAAC,CAAC,CAAC,6BAAc,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;SAC3C;QACD,MAAM,MAAM,GAAG,IAAI,4BAAY,CAAC;YAC9B,MAAM,EAAE,6BAAc,CAAC,MAAM;YAC7B,WAAW,EAAE;gBACX,WAAW,EAAE,6BAAc,CAAC,WAAW;gBACvC,eAAe,EAAE,6BAAc,CAAC,eAAe;aAChD;SACF,CAAC,CAAA;QACF,MAAM,OAAO,GAAG,IAAI,6BAAa,CAAC;YAChC,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAChC,OAAO,EAAE,uBAAO,CAAC,IAAI;SACtB,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;KACrB;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;KAC7B;AACH,CAAC;AAtBD,sCAsBC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.webhookHandler = void 0;
|
|
4
|
+
const webhook_1 = require("../webhook/webhook");
|
|
5
|
+
const typeorm_1 = require("typeorm");
|
|
6
|
+
const lambda_handler_1 = require("./lambda-handler");
|
|
7
|
+
async function webhookHandler(data, bizplaces, event) {
|
|
8
|
+
//fetch the webhook
|
|
9
|
+
try {
|
|
10
|
+
let qb = await (0, typeorm_1.getRepository)(webhook_1.Webhook)
|
|
11
|
+
.createQueryBuilder('webhook')
|
|
12
|
+
.innerJoinAndSelect('webhook.bizplaces', 'bz')
|
|
13
|
+
.innerJoinAndSelect('webhook.webhookEvents', 'webhookEvent')
|
|
14
|
+
.where('bz.id IN (:...bizplaceIds)', { bizplaceIds: Array.isArray(bizplaces) ? bizplaces : [bizplaces.id] })
|
|
15
|
+
.andWhere('webhookEvent.name = :name', { name: event })
|
|
16
|
+
.andWhere('webhook.active = :active', { active: true });
|
|
17
|
+
let webhooks = await qb.getMany();
|
|
18
|
+
// Could potentially improve performance by using qb.getRawMany(), then it is already flatten without needing to reduce. (To be improve later on)
|
|
19
|
+
if (webhooks.length > 0) {
|
|
20
|
+
const mappedData = webhooks.reduce((acc, wb) => {
|
|
21
|
+
const bizplaceData = wb.bizplaces.map(bz => {
|
|
22
|
+
var _a;
|
|
23
|
+
return ({
|
|
24
|
+
data: {
|
|
25
|
+
event: {
|
|
26
|
+
eventName: event,
|
|
27
|
+
id: Array.isArray(bizplaces) ? data : data.id,
|
|
28
|
+
name: data.name,
|
|
29
|
+
bizplace: {
|
|
30
|
+
id: bz.id
|
|
31
|
+
},
|
|
32
|
+
domain: {
|
|
33
|
+
id: ((_a = data.domain) === null || _a === void 0 ? void 0 : _a.id) || data.domainId || ''
|
|
34
|
+
},
|
|
35
|
+
timestamp: new Date().toISOString()
|
|
36
|
+
},
|
|
37
|
+
retryCount: 0,
|
|
38
|
+
endPoint: wb.extensionUrl ? wb.targetUrl.concat('/', wb.extensionUrl) : wb.targetUrl
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
return acc.concat(bizplaceData);
|
|
43
|
+
}, []);
|
|
44
|
+
for (const data of mappedData) {
|
|
45
|
+
await (0, lambda_handler_1.lambdaService)('processWebhookEvent', data);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
console.error(e.message);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.webhookHandler = webhookHandler;
|
|
54
|
+
//# sourceMappingURL=webhook-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-controller.js","sourceRoot":"","sources":["../../../server/service/webhook-handler/webhook-controller.ts"],"names":[],"mappings":";;;AAAA,gDAA4C;AAC5C,qCAA2D;AAC3D,qDAAgD;AAEzC,KAAK,UAAU,cAAc,CAAC,IAAS,EAAE,SAAyB,EAAE,KAAa;IACtF,mBAAmB;IACnB,IAAI;QACF,IAAI,EAAE,GAAgC,MAAM,IAAA,uBAAa,EAAC,iBAAO,CAAC;aAC/D,kBAAkB,CAAC,SAAS,CAAC;aAC7B,kBAAkB,CAAC,mBAAmB,EAAE,IAAI,CAAC;aAC7C,kBAAkB,CAAC,uBAAuB,EAAE,cAAc,CAAC;aAC3D,KAAK,CAAC,4BAA4B,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;aAC3G,QAAQ,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aACtD,QAAQ,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QAEzD,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;QAEjC,iJAAiJ;QACjJ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACvB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;gBAC7C,MAAM,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;;oBAAC,OAAA,CAAC;wBAC3C,IAAI,EAAE;4BACJ,KAAK,EAAE;gCACL,SAAS,EAAE,KAAK;gCAChB,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gCAC7C,IAAI,EAAE,IAAI,CAAC,IAAI;gCACf,QAAQ,EAAE;oCACR,EAAE,EAAE,EAAE,CAAC,EAAE;iCACV;gCACD,MAAM,EAAE;oCACN,EAAE,EAAE,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,EAAE,KAAI,IAAI,CAAC,QAAQ,IAAI,EAAE;iCAC3C;gCACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;6BACpC;4BACD,UAAU,EAAE,CAAC;4BACb,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS;yBACrF;qBACF,CAAC,CAAA;iBAAA,CAAC,CAAA;gBAEH,OAAO,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YACjC,CAAC,EAAE,EAAE,CAAC,CAAA;YAEN,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;gBAC7B,MAAM,IAAA,8BAAa,EAAC,qBAAqB,EAAE,IAAI,CAAC,CAAA;aACjD;SACF;KACF;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;KACzB;AACH,CAAC;AA7CD,wCA6CC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LambdaConfig = void 0;
|
|
3
|
+
exports.LambdaConfigMy = exports.LambdaConfig = void 0;
|
|
4
4
|
const env_1 = require("@things-factory/env");
|
|
5
5
|
exports.LambdaConfig = env_1.config.get('lambda');
|
|
6
|
+
exports.LambdaConfigMy = env_1.config.get('lambdaMy');
|
|
6
7
|
//# sourceMappingURL=lambda-const.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lambda-const.js","sourceRoot":"","sources":["../../../server/util/lambda/lambda-const.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAEjC,QAAA,YAAY,GAAQ,YAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"lambda-const.js","sourceRoot":"","sources":["../../../server/util/lambda/lambda-const.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAEjC,QAAA,YAAY,GAAQ,YAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;AACtC,QAAA,cAAc,GAAQ,YAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/integration-base",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.536",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"@apollo/client": "^3.5.6",
|
|
28
28
|
"@aws-sdk/client-lambda": "3.513.0",
|
|
29
29
|
"@aws-sdk/client-sqs": "^3.46.0",
|
|
30
|
-
"@things-factory/api": "^4.3.
|
|
31
|
-
"@things-factory/auth-base": "^4.3.
|
|
32
|
-
"@things-factory/oauth2-client": "^4.3.
|
|
33
|
-
"@things-factory/shell": "^4.3.
|
|
30
|
+
"@things-factory/api": "^4.3.535",
|
|
31
|
+
"@things-factory/auth-base": "^4.3.535",
|
|
32
|
+
"@things-factory/oauth2-client": "^4.3.535",
|
|
33
|
+
"@things-factory/shell": "^4.3.535",
|
|
34
34
|
"async-mqtt": "^2.5.0",
|
|
35
35
|
"cron": "^1.7.2",
|
|
36
36
|
"cross-fetch": "^3.0.4",
|
|
@@ -42,5 +42,5 @@
|
|
|
42
42
|
"uuid": "10.0.0",
|
|
43
43
|
"vm2": "^3.9.2"
|
|
44
44
|
},
|
|
45
|
-
"gitHead": "
|
|
45
|
+
"gitHead": "49cdab239e10ed9594af6de554f76de622af75af"
|
|
46
46
|
}
|
package/server/service/index.ts
CHANGED
|
@@ -1,47 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
} from './
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
} from './
|
|
9
|
-
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
} from './integration'
|
|
13
|
-
import {
|
|
14
|
-
entities as PayloadLogEntities,
|
|
15
|
-
resolvers as PayloadLogResolvers
|
|
16
|
-
} from './payload-log'
|
|
17
|
-
import {
|
|
18
|
-
entities as ScenarioEntities,
|
|
19
|
-
resolvers as ScenarioResolvers
|
|
20
|
-
} from './scenario'
|
|
21
|
-
import {
|
|
22
|
-
entities as ScenarioInstanceEntities,
|
|
23
|
-
resolvers as ScenarioInstanceResolvers
|
|
24
|
-
} from './scenario-instance'
|
|
25
|
-
import {
|
|
26
|
-
entities as ScenarioQueueEntities,
|
|
27
|
-
resolvers as ScenarioQueueResolvers
|
|
28
|
-
} from './scenario-queue'
|
|
29
|
-
import {
|
|
30
|
-
entities as StepEntities,
|
|
31
|
-
resolvers as StepResolvers
|
|
32
|
-
} from './step'
|
|
33
|
-
import {
|
|
34
|
-
entities as TaskTypeEntities,
|
|
35
|
-
resolvers as TaskTypeResolvers
|
|
36
|
-
} from './task-type'
|
|
37
|
-
import {
|
|
38
|
-
entities as WebhookEntities,
|
|
39
|
-
resolvers as WebhookResolvers
|
|
40
|
-
} from './webhook'
|
|
41
|
-
import {
|
|
42
|
-
entities as WebhookEventEntities,
|
|
43
|
-
resolvers as WebhookEventResolvers
|
|
44
|
-
} from './webhook-event'
|
|
1
|
+
import { entities as ConnectionEntities, resolvers as ConnectionResolvers } from './connection'
|
|
2
|
+
import { entities as ConnectorEntities, resolvers as ConnectorResolvers } from './connector'
|
|
3
|
+
import { entities as IntegrationEntities, resolvers as IntegrationResolvers } from './integration'
|
|
4
|
+
import { entities as PayloadLogEntities, resolvers as PayloadLogResolvers } from './payload-log'
|
|
5
|
+
import { entities as ScenarioEntities, resolvers as ScenarioResolvers } from './scenario'
|
|
6
|
+
import { entities as ScenarioInstanceEntities, resolvers as ScenarioInstanceResolvers } from './scenario-instance'
|
|
7
|
+
import { entities as ScenarioQueueEntities, resolvers as ScenarioQueueResolvers } from './scenario-queue'
|
|
8
|
+
import { entities as StepEntities, resolvers as StepResolvers } from './step'
|
|
9
|
+
import { entities as TaskTypeEntities, resolvers as TaskTypeResolvers } from './task-type'
|
|
10
|
+
import { entities as WebhookEntities, resolvers as WebhookResolvers } from './webhook'
|
|
11
|
+
import { entities as WebhookEventEntities, resolvers as WebhookEventResolvers } from './webhook-event'
|
|
45
12
|
|
|
46
13
|
export * from './property-spec'
|
|
47
14
|
export * from './task-type/task-type-type'
|
|
@@ -88,4 +55,5 @@ export const schema = {
|
|
|
88
55
|
|
|
89
56
|
export { PayloadType } from './payload-log/payload-log'
|
|
90
57
|
export { createPayloadLog } from './payload-log/payload-log-mutation'
|
|
91
|
-
export {
|
|
58
|
+
export { webhookHandler } from './webhook-handler/webhook-controller'
|
|
59
|
+
export { WebhookEvents } from './webhook-event/webhhok-event-enums'
|
|
@@ -7,49 +7,3 @@ const axios = require('axios')
|
|
|
7
7
|
|
|
8
8
|
@Resolver(Webhook)
|
|
9
9
|
export class WebhookMutation {}
|
|
10
|
-
|
|
11
|
-
export async function triggerWebhook(id: string, bizplaceIds: string[], name: string, context?: any): Promise<void> {
|
|
12
|
-
try {
|
|
13
|
-
const { tx } = context?.state
|
|
14
|
-
|
|
15
|
-
let qb: SelectQueryBuilder<Webhook> = await tx
|
|
16
|
-
.getRepository(Webhook)
|
|
17
|
-
.createQueryBuilder('webhook')
|
|
18
|
-
.innerJoinAndSelect('webhook.bizplaces', 'bz')
|
|
19
|
-
.innerJoinAndSelect('webhook.webhookEvents', 'webhookEvent')
|
|
20
|
-
.where('bz.id IN (:...bizplaceIds)', { bizplaceIds: bizplaceIds })
|
|
21
|
-
.andWhere('webhookEvent.name = :name', { name: name })
|
|
22
|
-
.andWhere(`webhook.active = 'TRUE'`)
|
|
23
|
-
|
|
24
|
-
const results = await qb.getMany()
|
|
25
|
-
|
|
26
|
-
if (results) {
|
|
27
|
-
await Promise.all(
|
|
28
|
-
results.map(async result => {
|
|
29
|
-
for (const bizplace of result.bizplaces) {
|
|
30
|
-
const data = {
|
|
31
|
-
eventName: name,
|
|
32
|
-
id: id,
|
|
33
|
-
bizplaceId: bizplace.id,
|
|
34
|
-
timestamp: new Date()
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const config = {
|
|
38
|
-
method: 'post',
|
|
39
|
-
url: result.targetUrl,
|
|
40
|
-
data
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
await axios(config)
|
|
45
|
-
} catch (e) {
|
|
46
|
-
console.error(e.message)
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
})
|
|
50
|
-
)
|
|
51
|
-
}
|
|
52
|
-
} catch (e) {
|
|
53
|
-
console.error(e)
|
|
54
|
-
}
|
|
55
|
-
}
|
|
@@ -37,7 +37,10 @@ export class Webhook {
|
|
|
37
37
|
active?: boolean
|
|
38
38
|
|
|
39
39
|
@Column()
|
|
40
|
-
targetUrl
|
|
40
|
+
targetUrl: string
|
|
41
|
+
|
|
42
|
+
@Column({ nullable: true })
|
|
43
|
+
extensionUrl?: string
|
|
41
44
|
|
|
42
45
|
@OneToMany(type => WebhookEvent, webhookEvent => webhookEvent.webhook)
|
|
43
46
|
@Field(type => [WebhookEvent], { nullable: true })
|
|
@@ -52,7 +55,9 @@ export class Webhook {
|
|
|
52
55
|
@Field({ nullable: true })
|
|
53
56
|
createdAt?: Date
|
|
54
57
|
|
|
55
|
-
|
|
58
|
+
|
|
59
|
+
// targetUrl varchar [note:'The main URL that Lambda calls to send webhook event data.']
|
|
60
|
+
// extensionUrl varchar [note:'A flexible path segment that can be updated as needed to access different resources or endpoints under the base URL.']
|
|
56
61
|
// headers JSON [note:'Hook specific additional HTTP headers that should be added to HTTP request, stored as JSON blob']
|
|
57
62
|
// properties JSON [note:'Hook specific additional data that should be added to payload, stored as JSON blob']
|
|
58
63
|
// includeTime bool [note:'To include sending timestamp during hashing']
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export enum WebhookEvents {
|
|
2
|
+
//Inbound Events
|
|
3
|
+
ArrivalNoticeCreated = 'arrival_notice_created',
|
|
4
|
+
ArrivalNoticeUpdated = 'arrival_notice_updated',
|
|
5
|
+
ArrivalNoticeConfirmed = 'arrival_notice_confirmed',
|
|
6
|
+
ArrivalNoticeCompleted = 'arrival_notice_completed',
|
|
7
|
+
GrnCreated = 'grn_created',
|
|
8
|
+
|
|
9
|
+
//Outbound Events
|
|
10
|
+
DraftOrderCreated = 'draft_order_created',
|
|
11
|
+
DraftOrderUpdated = 'draft_order_updated',
|
|
12
|
+
DraftOrderConverted = 'draft_order_converted',
|
|
13
|
+
ReleaseOrderCreated ='release_order_created',
|
|
14
|
+
ReleaseOrderUpdated ='release_order_updated',
|
|
15
|
+
ReleaseOrderConfirmed = 'release_order_confirmed',
|
|
16
|
+
ReleaseOrderCompleted ='release_order_completed',
|
|
17
|
+
PickingStarted = 'picking_started',
|
|
18
|
+
PickingCompleted = 'picking_completed',
|
|
19
|
+
PackingStarted = 'packing_started',
|
|
20
|
+
PackingCompleted = 'packing_completed',
|
|
21
|
+
LoadingStarted = 'loading_started',
|
|
22
|
+
LoadingCompleted = 'loading_completed',
|
|
23
|
+
|
|
24
|
+
//Inventory Events
|
|
25
|
+
InventoryAdjusted = 'inventory_adjusted',
|
|
26
|
+
|
|
27
|
+
//Manifest Events
|
|
28
|
+
DispatchManifest = 'dispatch_manifest'
|
|
29
|
+
}
|
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
ID,
|
|
4
|
-
ObjectType
|
|
5
|
-
} from 'type-graphql'
|
|
6
|
-
import {
|
|
7
|
-
Column,
|
|
8
|
-
CreateDateColumn,
|
|
9
|
-
Entity,
|
|
10
|
-
Index,
|
|
11
|
-
ManyToOne,
|
|
12
|
-
PrimaryGeneratedColumn,
|
|
13
|
-
RelationId
|
|
14
|
-
} from 'typeorm'
|
|
1
|
+
import { Field, ID, ObjectType, registerEnumType } from 'type-graphql'
|
|
2
|
+
import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId } from 'typeorm'
|
|
15
3
|
|
|
16
4
|
import { Webhook } from '../webhook/webhook'
|
|
5
|
+
import { WebhookEvents } from '../webhook-event/webhhok-event-enums'
|
|
6
|
+
|
|
7
|
+
registerEnumType(WebhookEvents, {
|
|
8
|
+
name: 'WebhookEvents',
|
|
9
|
+
description: 'state enumeration of a webhook events'
|
|
10
|
+
})
|
|
17
11
|
|
|
18
12
|
@Entity()
|
|
19
13
|
@Index('ix_webhook_event_0', (webhookEvent: WebhookEvent) => [webhookEvent.name, webhookEvent.webhook], {
|
|
@@ -25,9 +19,13 @@ export class WebhookEvent {
|
|
|
25
19
|
@Field(type => ID)
|
|
26
20
|
readonly id: string
|
|
27
21
|
|
|
28
|
-
@Column(
|
|
22
|
+
@Column({
|
|
23
|
+
type: 'enum',
|
|
24
|
+
enum: WebhookEvents,
|
|
25
|
+
enumName: 'webhook_events_enum'
|
|
26
|
+
})
|
|
29
27
|
@Field()
|
|
30
|
-
name:
|
|
28
|
+
name: WebhookEvents
|
|
31
29
|
|
|
32
30
|
@ManyToOne(type => Webhook, { nullable: true })
|
|
33
31
|
@Field(type => Webhook)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { InvokeCommand, LambdaClient, LogType } from '@aws-sdk/client-lambda'
|
|
2
|
+
|
|
3
|
+
import { LambdaConfigMy } from '../../util/lambda/lambda-const'
|
|
4
|
+
|
|
5
|
+
export async function lambdaService(funcName: string, payload: any) {
|
|
6
|
+
try {
|
|
7
|
+
if (!!!LambdaConfigMy) {
|
|
8
|
+
throw new Error('Lambda config not found')
|
|
9
|
+
}
|
|
10
|
+
const client = new LambdaClient({
|
|
11
|
+
region: LambdaConfigMy.region,
|
|
12
|
+
credentials: {
|
|
13
|
+
accessKeyId: LambdaConfigMy.accessKeyId,
|
|
14
|
+
secretAccessKey: LambdaConfigMy.secretAccessKey
|
|
15
|
+
}
|
|
16
|
+
})
|
|
17
|
+
const command = new InvokeCommand({
|
|
18
|
+
FunctionName: funcName,
|
|
19
|
+
Payload: JSON.stringify(payload),
|
|
20
|
+
LogType: LogType.Tail
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
client.send(command)
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error(error.message)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Webhook } from '../webhook/webhook'
|
|
2
|
+
import { SelectQueryBuilder, getRepository } from 'typeorm'
|
|
3
|
+
import { lambdaService } from './lambda-handler'
|
|
4
|
+
|
|
5
|
+
export async function webhookHandler(data: any, bizplaces: any | string[], event: String) {
|
|
6
|
+
//fetch the webhook
|
|
7
|
+
try {
|
|
8
|
+
let qb: SelectQueryBuilder<Webhook> = await getRepository(Webhook)
|
|
9
|
+
.createQueryBuilder('webhook')
|
|
10
|
+
.innerJoinAndSelect('webhook.bizplaces', 'bz')
|
|
11
|
+
.innerJoinAndSelect('webhook.webhookEvents', 'webhookEvent')
|
|
12
|
+
.where('bz.id IN (:...bizplaceIds)', { bizplaceIds: Array.isArray(bizplaces) ? bizplaces : [bizplaces.id] })
|
|
13
|
+
.andWhere('webhookEvent.name = :name', { name: event })
|
|
14
|
+
.andWhere('webhook.active = :active', { active: true })
|
|
15
|
+
|
|
16
|
+
let webhooks = await qb.getMany()
|
|
17
|
+
|
|
18
|
+
// Could potentially improve performance by using qb.getRawMany(), then it is already flatten without needing to reduce. (To be improve later on)
|
|
19
|
+
if (webhooks.length > 0) {
|
|
20
|
+
const mappedData = webhooks.reduce((acc, wb) => {
|
|
21
|
+
const bizplaceData = wb.bizplaces.map(bz => ({
|
|
22
|
+
data: {
|
|
23
|
+
event: {
|
|
24
|
+
eventName: event,
|
|
25
|
+
id: Array.isArray(bizplaces) ? data : data.id, // data if multiple bizplaces
|
|
26
|
+
name: data.name,
|
|
27
|
+
bizplace: {
|
|
28
|
+
id: bz.id
|
|
29
|
+
},
|
|
30
|
+
domain: {
|
|
31
|
+
id: data.domain?.id || data.domainId || ''
|
|
32
|
+
},
|
|
33
|
+
timestamp: new Date().toISOString()
|
|
34
|
+
},
|
|
35
|
+
retryCount: 0,
|
|
36
|
+
endPoint: wb.extensionUrl ? wb.targetUrl.concat('/', wb.extensionUrl) : wb.targetUrl
|
|
37
|
+
}
|
|
38
|
+
}))
|
|
39
|
+
|
|
40
|
+
return acc.concat(bizplaceData)
|
|
41
|
+
}, [])
|
|
42
|
+
|
|
43
|
+
for (const data of mappedData) {
|
|
44
|
+
await lambdaService('processWebhookEvent', data)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
} catch (e) {
|
|
48
|
+
console.error(e.message)
|
|
49
|
+
}
|
|
50
|
+
}
|