@things-factory/integration-base 4.3.535 → 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.
Files changed (25) hide show
  1. package/dist-server/service/index.js +5 -3
  2. package/dist-server/service/index.js.map +1 -1
  3. package/dist-server/service/webhook/webhook-mutation.js +1 -42
  4. package/dist-server/service/webhook/webhook-mutation.js.map +1 -1
  5. package/dist-server/service/webhook/webhook.js +6 -1
  6. package/dist-server/service/webhook/webhook.js.map +1 -1
  7. package/dist-server/service/webhook-event/webhhok-event-enums.js +31 -0
  8. package/dist-server/service/webhook-event/webhhok-event-enums.js.map +1 -0
  9. package/dist-server/service/webhook-event/webhook-event.js +10 -1
  10. package/dist-server/service/webhook-event/webhook-event.js.map +1 -1
  11. package/dist-server/service/webhook-handler/lambda-handler.js +30 -0
  12. package/dist-server/service/webhook-handler/lambda-handler.js.map +1 -0
  13. package/dist-server/service/webhook-handler/webhook-controller.js +54 -0
  14. package/dist-server/service/webhook-handler/webhook-controller.js.map +1 -0
  15. package/dist-server/util/lambda/lambda-const.js +2 -1
  16. package/dist-server/util/lambda/lambda-const.js.map +1 -1
  17. package/package.json +2 -2
  18. package/server/service/index.ts +13 -45
  19. package/server/service/webhook/webhook-mutation.ts +0 -46
  20. package/server/service/webhook/webhook.ts +7 -2
  21. package/server/service/webhook-event/webhhok-event-enums.ts +29 -0
  22. package/server/service/webhook-event/webhook-event.ts +14 -16
  23. package/server/service/webhook-handler/lambda-handler.ts +27 -0
  24. package/server/service/webhook-handler/webhook-controller.ts +50 -0
  25. 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.triggerWebhook = exports.createPayloadLog = exports.PayloadType = exports.schema = exports.entities = void 0;
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 webhook_mutation_1 = require("./webhook/webhook-mutation");
74
- Object.defineProperty(exports, "triggerWebhook", { enumerable: true, get: function () { return webhook_mutation_1.triggerWebhook; } });
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,6CAGqB;AACrB,2CAGoB;AACpB,+CAGsB;AACtB,+CAGsB;AACtB,yCAGmB;AACnB,2DAG4B;AAC5B,qDAGyB;AACzB,iCAGe;AACf,2CAGoB;AACpB,uCAGkB;AAClB,mDAGwB;AAExB,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,+DAA2D;AAAlD,kHAAA,cAAc,OAAA"}
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.triggerWebhook = exports.WebhookMutation = void 0;
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;AAErB,KAAK,UAAU,cAAc,CAAC,EAAU,EAAE,WAAqB,EAAE,IAAY,EAAE,OAAa;IACjG,IAAI;QACF,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,CAAA;QAE7B,IAAI,EAAE,GAAgC,MAAM,EAAE;aAC3C,aAAa,CAAC,iBAAO,CAAC;aACtB,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,WAAW,EAAE,CAAC;aACjE,QAAQ,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;aACrD,QAAQ,CAAC,yBAAyB,CAAC,CAAA;QAEtC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;QAElC,IAAI,OAAO,EAAE;YACX,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;gBACzB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;oBACvC,MAAM,IAAI,GAAG;wBACX,SAAS,EAAE,IAAI;wBACf,EAAE,EAAE,EAAE;wBACN,UAAU,EAAE,QAAQ,CAAC,EAAE;wBACvB,SAAS,EAAE,IAAI,IAAI,EAAE;qBACtB,CAAA;oBAED,MAAM,MAAM,GAAG;wBACb,MAAM,EAAE,MAAM;wBACd,GAAG,EAAE,MAAM,CAAC,SAAS;wBACrB,IAAI;qBACL,CAAA;oBAED,IAAI;wBACF,MAAM,KAAK,CAAC,MAAM,CAAC,CAAA;qBACpB;oBAAC,OAAO,CAAC,EAAE;wBACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;qBACzB;iBACF;YACH,CAAC,CAAC,CACH,CAAA;SACF;KACF;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KACjB;AACH,CAAC;AA5CD,wCA4CC"}
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:'Destination to POST event info to URL for webhooks']
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;CAsCnB,CAAA;AArCC;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;;0CACS;AAElB;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;IAEhB,gFAAgF;IAChF,wHAAwH;IACxH,8GAA8G;IAC9G,wEAAwE;IACxE,6CAA6C;IAC7C,mPAAmP;IACnP,2IAA2I;;0CAR3H;AA7BL,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,CAsCnB;AAtCY,0BAAO"}
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,+CAIqB;AACrB,qCAQgB;AAEhB,gDAA4C;AAOrC,IAAM,YAAY,GAAlB,MAAM,YAAY;CAoBxB,CAAA;AAnBC;IAAC,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;wCACC;AAEnB;IAAC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,GAAE;;0CACI;AAEZ;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;AAnBL,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,CAoBxB;AApBY,oCAAY"}
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.535",
3
+ "version": "4.3.536",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -42,5 +42,5 @@
42
42
  "uuid": "10.0.0",
43
43
  "vm2": "^3.9.2"
44
44
  },
45
- "gitHead": "d2755223b36e17526402f86cb9a100d632728863"
45
+ "gitHead": "49cdab239e10ed9594af6de554f76de622af75af"
46
46
  }
@@ -1,47 +1,14 @@
1
- import {
2
- entities as ConnectionEntities,
3
- resolvers as ConnectionResolvers
4
- } from './connection'
5
- import {
6
- entities as ConnectorEntities,
7
- resolvers as ConnectorResolvers
8
- } from './connector'
9
- import {
10
- entities as IntegrationEntities,
11
- resolvers as IntegrationResolvers
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 { triggerWebhook } from './webhook/webhook-mutation'
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?: string
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
- // targetUrl varchar [note:'Destination to POST event info to URL for webhooks']
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
- Field,
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: string
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
+ }
@@ -1,3 +1,4 @@
1
1
  import { config } from '@things-factory/env'
2
2
 
3
3
  export var LambdaConfig: any = config.get('lambda')
4
+ export const LambdaConfigMy: any = config.get('lambdaMy')