@things-factory/integration-sftp 9.0.0-beta.27 → 9.0.0-beta.29

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 (80) hide show
  1. package/dist-server/controllers/herbalife/apis/create-serial-number.d.ts +18 -0
  2. package/dist-server/controllers/herbalife/apis/create-serial-number.js +46 -0
  3. package/dist-server/controllers/herbalife/apis/create-serial-number.js.map +1 -0
  4. package/dist-server/controllers/herbalife/apis/create-shipment.d.ts +19 -0
  5. package/dist-server/controllers/herbalife/apis/create-shipment.js +84 -0
  6. package/dist-server/controllers/herbalife/apis/create-shipment.js.map +1 -0
  7. package/dist-server/controllers/herbalife/apis/echo.d.ts +12 -0
  8. package/dist-server/controllers/herbalife/apis/echo.js +18 -0
  9. package/dist-server/controllers/herbalife/apis/echo.js.map +1 -0
  10. package/dist-server/controllers/herbalife/apis/get-outbound-order.d.ts +14 -0
  11. package/dist-server/controllers/herbalife/apis/get-outbound-order.js +107 -0
  12. package/dist-server/controllers/herbalife/apis/get-outbound-order.js.map +1 -0
  13. package/dist-server/controllers/herbalife/apis/index.d.ts +4 -0
  14. package/dist-server/controllers/herbalife/apis/index.js +8 -0
  15. package/dist-server/controllers/herbalife/apis/index.js.map +1 -0
  16. package/dist-server/controllers/herbalife/herbalife.d.ts +8 -0
  17. package/dist-server/controllers/herbalife/herbalife.js +40 -0
  18. package/dist-server/controllers/herbalife/herbalife.js.map +1 -0
  19. package/dist-server/controllers/herbalife/index.d.ts +1 -0
  20. package/dist-server/controllers/herbalife/index.js +9 -0
  21. package/dist-server/controllers/herbalife/index.js.map +1 -0
  22. package/dist-server/controllers/herbalife/platform-action.d.ts +5 -0
  23. package/dist-server/controllers/herbalife/platform-action.js +30 -0
  24. package/dist-server/controllers/herbalife/platform-action.js.map +1 -0
  25. package/dist-server/controllers/index.d.ts +2 -0
  26. package/dist-server/controllers/index.js +6 -0
  27. package/dist-server/controllers/index.js.map +1 -0
  28. package/dist-server/controllers/sftp-api/decorators.d.ts +1 -0
  29. package/dist-server/controllers/sftp-api/decorators.js +28 -0
  30. package/dist-server/controllers/sftp-api/decorators.js.map +1 -0
  31. package/dist-server/controllers/sftp-api/index.d.ts +11 -0
  32. package/dist-server/controllers/sftp-api/index.js +56 -0
  33. package/dist-server/controllers/sftp-api/index.js.map +1 -0
  34. package/dist-server/controllers/sftp-api/types.d.ts +0 -0
  35. package/dist-server/controllers/sftp-api/types.js +1 -0
  36. package/dist-server/controllers/sftp-api/types.js.map +1 -0
  37. package/dist-server/index.d.ts +6 -0
  38. package/dist-server/index.js +10 -0
  39. package/dist-server/index.js.map +1 -0
  40. package/dist-server/middlewares/index.d.ts +1 -0
  41. package/dist-server/middlewares/index.js +7 -0
  42. package/dist-server/middlewares/index.js.map +1 -0
  43. package/dist-server/routes.d.ts +1 -0
  44. package/dist-server/routes.js +25 -0
  45. package/dist-server/routes.js.map +1 -0
  46. package/dist-server/service/index.d.ts +5 -0
  47. package/dist-server/service/index.js +19 -0
  48. package/dist-server/service/index.js.map +1 -0
  49. package/dist-server/service/sftp/index.d.ts +5 -0
  50. package/dist-server/service/sftp/index.js +9 -0
  51. package/dist-server/service/sftp/index.js.map +1 -0
  52. package/dist-server/service/sftp/sftp-mutation.d.ts +15 -0
  53. package/dist-server/service/sftp/sftp-mutation.js +250 -0
  54. package/dist-server/service/sftp/sftp-mutation.js.map +1 -0
  55. package/dist-server/service/sftp/sftp-query.d.ts +11 -0
  56. package/dist-server/service/sftp/sftp-query.js +74 -0
  57. package/dist-server/service/sftp/sftp-query.js.map +1 -0
  58. package/dist-server/service/sftp/sftp-type.d.ts +29 -0
  59. package/dist-server/service/sftp/sftp-type.js +113 -0
  60. package/dist-server/service/sftp/sftp-type.js.map +1 -0
  61. package/dist-server/service/sftp/sftp.d.ts +33 -0
  62. package/dist-server/service/sftp/sftp.js +163 -0
  63. package/dist-server/service/sftp/sftp.js.map +1 -0
  64. package/dist-server/sftp-const.d.ts +11 -0
  65. package/dist-server/sftp-const.js +16 -0
  66. package/dist-server/sftp-const.js.map +1 -0
  67. package/dist-server/sftp-s3.d.ts +1 -0
  68. package/dist-server/sftp-s3.js +67 -0
  69. package/dist-server/sftp-s3.js.map +1 -0
  70. package/dist-server/tsconfig.tsbuildinfo +1 -0
  71. package/dist-server/util/generate-files.d.ts +2 -0
  72. package/dist-server/util/generate-files.js +29 -0
  73. package/dist-server/util/generate-files.js.map +1 -0
  74. package/dist-server/util/get-permitted-directories.d.ts +3 -0
  75. package/dist-server/util/get-permitted-directories.js +15 -0
  76. package/dist-server/util/get-permitted-directories.js.map +1 -0
  77. package/dist-server/util/index.d.ts +2 -0
  78. package/dist-server/util/index.js +6 -0
  79. package/dist-server/util/index.js.map +1 -0
  80. package/package.json +7 -7
@@ -0,0 +1,18 @@
1
+ export declare function createSerialNumber(): {
2
+ method: string;
3
+ path: string;
4
+ denormalize(req: any): {
5
+ resource: {
6
+ folderPath: any;
7
+ folderType: string;
8
+ snPath: string;
9
+ };
10
+ payload: {
11
+ title: string;
12
+ content: string;
13
+ sftp: any;
14
+ backupPath: string;
15
+ };
16
+ };
17
+ normalize(res: any): any;
18
+ };
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSerialNumber = createSerialNumber;
4
+ const sftp_const_1 = require("../../../sftp-const");
5
+ function createSerialNumber() {
6
+ return {
7
+ method: 'post',
8
+ path: '{folderPath}/{folderType}{snPath}',
9
+ denormalize(req) {
10
+ let { releaseGood, inventoryItems, sftp } = req;
11
+ let { folderPath, platform } = sftp;
12
+ const folderType = sftp.isDevelopment ? `dev` : `prd`;
13
+ const snPath = sftp_const_1.SNSUBMITDATAPATH;
14
+ const backupPath = `${sftp_const_1.BACKUPPATH}${platform}/${folderType}`;
15
+ let responseFilePattern = JSON.parse(sftp.responseFilePattern);
16
+ const { snSuffix, fileExtension, snRunningNumberDigit, snSequence } = responseFilePattern;
17
+ let newSeq = parseFloat(snSequence) + 1;
18
+ let newSequence = newSeq.toString().padStart(snRunningNumberDigit, '0');
19
+ let newResponseFilePattern = JSON.stringify(Object.assign(Object.assign({}, responseFilePattern), { snSequence: newSeq.toString() }));
20
+ sftp = Object.assign(Object.assign({}, sftp), { responseFilePattern: newResponseFilePattern });
21
+ const today = new Date();
22
+ const year = today.getFullYear().toString();
23
+ const month = (today.getMonth() + 1).toString().padStart(2, '0');
24
+ const day = today.getDate().toString().padStart(2, '0');
25
+ const newDate = day + month + year;
26
+ let title = snSuffix ? snSuffix : ``;
27
+ title += `_` + newDate;
28
+ title += `_` + newSequence;
29
+ title += fileExtension ? `.` + fileExtension : ``;
30
+ let content = '';
31
+ const orderNo = releaseGood.refNo;
32
+ for (let i = 0; i < inventoryItems.length; i++) {
33
+ let serialNumber = inventoryItems[i].serialNumber;
34
+ content += orderNo + '|' + serialNumber + '\n';
35
+ }
36
+ return {
37
+ resource: { folderPath, folderType, snPath },
38
+ payload: { title, content, sftp, backupPath }
39
+ };
40
+ },
41
+ normalize(res) {
42
+ return res;
43
+ }
44
+ };
45
+ }
46
+ //# sourceMappingURL=create-serial-number.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-serial-number.js","sourceRoot":"","sources":["../../../../server/controllers/herbalife/apis/create-serial-number.ts"],"names":[],"mappings":";;AAEA,gDAgDC;AAlDD,oDAAkE;AAElE,SAAgB,kBAAkB;IAChC,OAAO;QACL,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,mCAAmC;QACzC,WAAW,CAAC,GAAG;YACb,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,GAAG,CAAA;YAC/C,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;YACnC,MAAM,UAAU,GAAW,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;YAC7D,MAAM,MAAM,GAAW,6BAAgB,CAAA;YACvC,MAAM,UAAU,GAAW,GAAG,uBAAU,GAAG,QAAQ,IAAI,UAAU,EAAE,CAAA;YAEnE,IAAI,mBAAmB,GAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;YACnE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,oBAAoB,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAA;YACzF,IAAI,MAAM,GAAW,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YAC/C,IAAI,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;YACvE,IAAI,sBAAsB,GAAW,IAAI,CAAC,SAAS,iCAC9C,mBAAmB,KACtB,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,IAC7B,CAAA;YACF,IAAI,mCAAQ,IAAI,KAAE,mBAAmB,EAAE,sBAAsB,GAAE,CAAA;YAE/D,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAA;YAC3C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAChE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YACvD,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,CAAA;YAElC,IAAI,KAAK,GAAW,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;YAC5C,KAAK,IAAI,GAAG,GAAG,OAAO,CAAA;YACtB,KAAK,IAAI,GAAG,GAAG,WAAW,CAAA;YAC1B,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAA;YAEjD,IAAI,OAAO,GAAW,EAAE,CAAA;YACxB,MAAM,OAAO,GAAW,WAAW,CAAC,KAAK,CAAA;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,IAAI,YAAY,GAAW,cAAc,CAAC,CAAC,CAAC,CAAC,YAAY,CAAA;gBACzD,OAAO,IAAI,OAAO,GAAG,GAAG,GAAG,YAAY,GAAG,IAAI,CAAA;YAChD,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE;gBAC5C,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE;aAC9C,CAAA;QACH,CAAC;QACD,SAAS,CAAC,GAAG;YACX,OAAO,GAAG,CAAA;QACZ,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["import { BACKUPPATH, SNSUBMITDATAPATH } from '../../../sftp-const'\n\nexport function createSerialNumber() {\n return {\n method: 'post',\n path: '{folderPath}/{folderType}{snPath}',\n denormalize(req) {\n let { releaseGood, inventoryItems, sftp } = req\n let { folderPath, platform } = sftp\n const folderType: string = sftp.isDevelopment ? `dev` : `prd`\n const snPath: string = SNSUBMITDATAPATH\n const backupPath: string = `${BACKUPPATH}${platform}/${folderType}`\n\n let responseFilePattern: any = JSON.parse(sftp.responseFilePattern)\n const { snSuffix, fileExtension, snRunningNumberDigit, snSequence } = responseFilePattern\n let newSeq: number = parseFloat(snSequence) + 1\n let newSequence = newSeq.toString().padStart(snRunningNumberDigit, '0')\n let newResponseFilePattern: string = JSON.stringify({\n ...responseFilePattern,\n snSequence: newSeq.toString()\n })\n sftp = { ...sftp, responseFilePattern: newResponseFilePattern }\n\n const today = new Date()\n const year = today.getFullYear().toString()\n const month = (today.getMonth() + 1).toString().padStart(2, '0')\n const day = today.getDate().toString().padStart(2, '0')\n const newDate = day + month + year\n\n let title: string = snSuffix ? snSuffix : ``\n title += `_` + newDate\n title += `_` + newSequence\n title += fileExtension ? `.` + fileExtension : ``\n\n let content: string = ''\n const orderNo: string = releaseGood.refNo\n for (let i = 0; i < inventoryItems.length; i++) {\n let serialNumber: string = inventoryItems[i].serialNumber\n content += orderNo + '|' + serialNumber + '\\n'\n }\n\n return {\n resource: { folderPath, folderType, snPath },\n payload: { title, content, sftp, backupPath }\n }\n },\n normalize(res) {\n return res\n }\n }\n}\n"]}
@@ -0,0 +1,19 @@
1
+ export declare function createShipment(): {
2
+ method: string;
3
+ path: string;
4
+ denormalize(req: any): {
5
+ resource: {
6
+ folderPath: any;
7
+ folderType: string;
8
+ shipmentCompletePath: string;
9
+ };
10
+ payload: {
11
+ title: string;
12
+ backupTitle: string;
13
+ content: string;
14
+ sftp: any;
15
+ backupPath: string;
16
+ };
17
+ };
18
+ normalize(res: any): any;
19
+ };
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createShipment = createShipment;
4
+ const sftp_const_1 = require("../../../sftp-const");
5
+ function createShipment() {
6
+ return {
7
+ method: 'post',
8
+ path: '{folderPath}/{folderType}{shipmentCompletePath}',
9
+ denormalize(req) {
10
+ let { releaseGoods, sftp } = req;
11
+ let { folderPath, platform } = sftp;
12
+ const folderType = sftp.isDevelopment ? `dev` : `prd`;
13
+ const shipmentCompletePath = sftp_const_1.COMPLETEDATAPATH;
14
+ const backupPath = `${sftp_const_1.BACKUPPATH}${platform}/${folderType}`;
15
+ let responseFilePattern = JSON.parse(sftp.responseFilePattern);
16
+ const { suffix, fileExtension, runningNumberDigit, sequence } = responseFilePattern;
17
+ let newSeq = parseFloat(sequence) + 1;
18
+ let newSequence = newSeq.toString().padStart(runningNumberDigit, '0');
19
+ let newResponseFilePattern = JSON.stringify(Object.assign(Object.assign({}, responseFilePattern), { sequence: newSeq.toString() }));
20
+ sftp = Object.assign(Object.assign({}, sftp), { responseFilePattern: newResponseFilePattern });
21
+ const warehouseNumber = releaseGoods[0].refNo2;
22
+ let title = suffix ? suffix : ``;
23
+ title += newSequence;
24
+ title += warehouseNumber ? `_` + warehouseNumber : ``;
25
+ title += fileExtension ? `.` + fileExtension : ``;
26
+ let backupTitle = releaseGoods[0].refNo + '_' + title;
27
+ const orderNoColumn = 15;
28
+ const shipmentColumn = 27;
29
+ const trackingNoColumn = 20;
30
+ let bulkContent = '';
31
+ for (let releaseGood of releaseGoods) {
32
+ const refNoLength = releaseGood.refNo.length;
33
+ let content = `1710` + releaseGood.refNo;
34
+ let spaceNeeded = orderNoColumn - refNoLength;
35
+ for (let i = 0; i < spaceNeeded; i++) {
36
+ content += ` `;
37
+ }
38
+ content += warehouseNumber;
39
+ content += `001000001`;
40
+ for (let i = 0; i < shipmentColumn; i++) {
41
+ content += ` `;
42
+ }
43
+ content += `000000 `;
44
+ for (let i = 0; i < trackingNoColumn; i++) {
45
+ content += ` `;
46
+ }
47
+ content += `000000000000 `;
48
+ const today = new Date();
49
+ const year = today.getFullYear().toString();
50
+ const month = (today.getMonth() + 1).toString().padStart(2, '0');
51
+ const day = today.getDate().toString().padStart(2, '0');
52
+ const newDate = year + month + day;
53
+ content += newDate + '\n';
54
+ for (let i = 0; i < releaseGood.orderInventories.length; i++) {
55
+ const orderInventory = releaseGood.orderInventories[i];
56
+ let sku = orderInventory.product.brandSku;
57
+ content += `1810` + releaseGood.refNo;
58
+ for (let i = 0; i < spaceNeeded; i++) {
59
+ content += ` `;
60
+ }
61
+ const idx = (i + 1).toString().padStart(2, '0');
62
+ const productCode = sku.substring(0, 4);
63
+ content += idx + `000000` + productCode;
64
+ let productCodeSpaceNeeded = 7 - productCode.length;
65
+ for (let i = 0; i < productCodeSpaceNeeded; i++) {
66
+ content += ` `;
67
+ }
68
+ const orderedQty = orderInventory.releaseQty.toString().padStart(4, '0');
69
+ const pickedQty = orderInventory.pickedQty.toString().padStart(4, '0');
70
+ content += orderedQty + pickedQty + '\n';
71
+ }
72
+ bulkContent += content;
73
+ }
74
+ return {
75
+ resource: { folderPath, folderType, shipmentCompletePath },
76
+ payload: { title, backupTitle, content: bulkContent, sftp, backupPath }
77
+ };
78
+ },
79
+ normalize(res) {
80
+ return res;
81
+ }
82
+ };
83
+ }
84
+ //# sourceMappingURL=create-shipment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-shipment.js","sourceRoot":"","sources":["../../../../server/controllers/herbalife/apis/create-shipment.ts"],"names":[],"mappings":"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","sourcesContent":["import { BACKUPPATH, COMPLETEDATAPATH } from '../../../sftp-const'\n\nexport function createShipment() {\n return {\n method: 'post',\n path: '{folderPath}/{folderType}{shipmentCompletePath}',\n denormalize(req) {\n let { releaseGoods, sftp } = req\n let { folderPath, platform } = sftp\n const folderType: string = sftp.isDevelopment ? `dev` : `prd`\n const shipmentCompletePath: string = COMPLETEDATAPATH\n const backupPath: string = `${BACKUPPATH}${platform}/${folderType}`\n\n let responseFilePattern: any = JSON.parse(sftp.responseFilePattern)\n const { suffix, fileExtension, runningNumberDigit, sequence } = responseFilePattern\n let newSeq: number = parseFloat(sequence) + 1\n let newSequence = newSeq.toString().padStart(runningNumberDigit, '0')\n let newResponseFilePattern: string = JSON.stringify({\n ...responseFilePattern,\n sequence: newSeq.toString()\n })\n sftp = { ...sftp, responseFilePattern: newResponseFilePattern }\n\n const warehouseNumber: string = releaseGoods[0].refNo2\n let title: string = suffix ? suffix : ``\n title += newSequence\n title += warehouseNumber ? `_` + warehouseNumber : ``\n title += fileExtension ? `.` + fileExtension : ``\n\n let backupTitle: string = releaseGoods[0].refNo + '_' + title\n const orderNoColumn: number = 15\n const shipmentColumn: number = 27\n const trackingNoColumn: number = 20\n let bulkContent = ''\n for (let releaseGood of releaseGoods) {\n const refNoLength: number = releaseGood.refNo.length\n let content: string = `1710` + releaseGood.refNo\n let spaceNeeded: number = orderNoColumn - refNoLength\n for (let i = 0; i < spaceNeeded; i++) {\n content += ` `\n }\n content += warehouseNumber\n content += `001000001`\n for (let i = 0; i < shipmentColumn; i++) {\n content += ` `\n }\n content += `000000 `\n for (let i = 0; i < trackingNoColumn; i++) {\n content += ` `\n }\n content += `000000000000 `\n const today = new Date()\n const year = today.getFullYear().toString()\n const month = (today.getMonth() + 1).toString().padStart(2, '0')\n const day = today.getDate().toString().padStart(2, '0')\n const newDate = year + month + day\n content += newDate + '\\n'\n\n for (let i = 0; i < releaseGood.orderInventories.length; i++) {\n const orderInventory: any = releaseGood.orderInventories[i]\n let sku: string = orderInventory.product.brandSku\n content += `1810` + releaseGood.refNo\n for (let i = 0; i < spaceNeeded; i++) {\n content += ` `\n }\n const idx = (i + 1).toString().padStart(2, '0')\n const productCode: string = sku.substring(0, 4)\n content += idx + `000000` + productCode\n let productCodeSpaceNeeded = 7 - productCode.length\n for (let i = 0; i < productCodeSpaceNeeded; i++) {\n content += ` `\n }\n const orderedQty = orderInventory.releaseQty.toString().padStart(4, '0')\n const pickedQty = orderInventory.pickedQty.toString().padStart(4, '0')\n content += orderedQty + pickedQty + '\\n'\n }\n bulkContent += content\n }\n return {\n resource: { folderPath, folderType, shipmentCompletePath },\n payload: { title, backupTitle, content: bulkContent, sftp, backupPath }\n }\n },\n normalize(res) {\n return res\n }\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ export declare function echo(): {
2
+ path: string;
3
+ denormalize(req: any): any;
4
+ normalize(res: any): any;
5
+ action({ store, method, path, request, platformAction }: {
6
+ store: any;
7
+ method: any;
8
+ path: any;
9
+ request: any;
10
+ platformAction: any;
11
+ }): any;
12
+ };
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.echo = echo;
4
+ function echo() {
5
+ return {
6
+ path: '/echo',
7
+ denormalize(req) {
8
+ return Object.assign({}, req);
9
+ },
10
+ normalize(res) {
11
+ return Object.assign({}, res);
12
+ },
13
+ action({ store, method, path, request, platformAction }) {
14
+ return Object.assign({}, request);
15
+ }
16
+ };
17
+ }
18
+ //# sourceMappingURL=echo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../../../server/controllers/herbalife/apis/echo.ts"],"names":[],"mappings":";;AAAA,oBAaC;AAbD,SAAgB,IAAI;IAClB,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,CAAC,GAAG;YACb,yBAAY,GAAG,EAAE;QACnB,CAAC;QACD,SAAS,CAAC,GAAG;YACX,yBAAY,GAAG,EAAE;QACnB,CAAC;QACD,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE;YACrD,yBAAY,OAAO,EAAE;QACvB,CAAC;KACF,CAAA;AACH,CAAC","sourcesContent":["export function echo() {\n return {\n path: '/echo',\n denormalize(req) {\n return { ...req }\n },\n normalize(res) {\n return { ...res }\n },\n action({ store, method, path, request, platformAction }) {\n return { ...request }\n }\n }\n}\n"]}
@@ -0,0 +1,14 @@
1
+ export declare function getOutboundOrder(): {
2
+ method: string;
3
+ path: string;
4
+ denormalize(req: any): {
5
+ resource: {
6
+ folderPath: any;
7
+ folderType: any;
8
+ fileKey: any;
9
+ };
10
+ };
11
+ normalize(res: any, { sftp }: {
12
+ sftp: any;
13
+ }): any;
14
+ };
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getOutboundOrder = getOutboundOrder;
4
+ function getOutboundOrder() {
5
+ return {
6
+ method: 'get',
7
+ path: '{folderPath}/{folderType}/sob/data/{fileKey}',
8
+ denormalize(req) {
9
+ const { folderPath, folderType, fileKey } = req;
10
+ return {
11
+ resource: { folderPath, folderType, fileKey }
12
+ };
13
+ },
14
+ normalize(res, { sftp }) {
15
+ const { Order } = res;
16
+ let isAccept = false;
17
+ const responseFilePattern = JSON.parse(sftp.responseFilePattern);
18
+ const acceptOrderTypes = responseFilePattern.acceptOrderTypes; // ['RSO', 'MSO', 'MSBO']
19
+ const acceptNTSStatuses = responseFilePattern.acceptNTSStatuses; //['', 'BACKORDER']
20
+ const acceptWarehouseNumber = responseFilePattern.acceptWarehouseNumber; //['NK']
21
+ const acceptCommand = responseFilePattern.acceptCommand; //['NTS', '']
22
+ const acceptFreightCode = responseFilePattern.acceptFreightCode; // ['PU']
23
+ let orderHeader = Order.OrderHeader;
24
+ let generalInfo = orderHeader.General;
25
+ let distributorDetails = orderHeader.DistributorDetails;
26
+ let shippingInstructions = Order.ShippingInstructions;
27
+ let orderType = generalInfo.OrderType._text;
28
+ let ntsStatus = generalInfo.NTSStatus._text || '';
29
+ let command = generalInfo.Command._text || '';
30
+ let warehouseNumber = generalInfo.WarehouseNumber._text;
31
+ let freightCode = shippingInstructions.FreightCode._text;
32
+ if (acceptWarehouseNumber.includes(warehouseNumber) &&
33
+ acceptOrderTypes.includes(orderType) &&
34
+ acceptNTSStatuses.includes(ntsStatus) &&
35
+ acceptCommand.includes(command) &&
36
+ acceptFreightCode.includes(freightCode)) {
37
+ isAccept = true;
38
+ }
39
+ let shippingInstruction = shippingInstructions.ShippingInstructions._text;
40
+ let ntsDateParts = generalInfo.NTS_Date._text.split('/');
41
+ let releaseDate = ntsDateParts[2] + '-' + ntsDateParts[1] + '-' + ntsDateParts[0];
42
+ let orderInfo = {
43
+ refNo: generalInfo.OrderNumber._text,
44
+ refNo2: warehouseNumber,
45
+ type: 'b2b',
46
+ releaseDate,
47
+ collectionOrderNo: generalInfo.OrderNumber._text,
48
+ marketplaceOrderStatus: ntsStatus,
49
+ ownTransport: true,
50
+ exportOption: false,
51
+ packingOption: false,
52
+ remark: shippingInstruction,
53
+ billTo: {
54
+ billingAddress: distributorDetails.BillTo.BillToAddress._text
55
+ },
56
+ deliverTo: {
57
+ deliveryAddress1: distributorDetails.ShipTo.Address1._text,
58
+ deliveryAddress2: distributorDetails.ShipTo.Address2._text,
59
+ deliveryAddress3: distributorDetails.ShipTo.Address3._text,
60
+ attentionTo: distributorDetails.ShipTo.Name._text,
61
+ city: distributorDetails.ShipTo.City._text,
62
+ state: distributorDetails.ShipTo.ShipToState._text,
63
+ postalCode: distributorDetails.ShipTo.Zipcode._text,
64
+ country: distributorDetails.ShipTo.Country._text,
65
+ phone1: distributorDetails.ShipTo.Phone._text
66
+ }
67
+ };
68
+ let OrderLine = Order.PickList;
69
+ let totalItems = parseFloat(Order.PickList.LinesInPickList._text);
70
+ let itemsToPick = [];
71
+ let checkDuplicationValidation;
72
+ if (totalItems == 1) {
73
+ if (parseFloat(OrderLine.Item.QuantityReleased._text) > 0) {
74
+ itemsToPick.push({
75
+ product: {
76
+ sku: OrderLine.Item.StockingSKU._text
77
+ },
78
+ releaseQty: parseFloat(OrderLine.Item.QuantityReleased._text)
79
+ });
80
+ }
81
+ }
82
+ else {
83
+ OrderLine.Item.map(line => {
84
+ if (parseFloat(line.QuantityReleased._text) > 0) {
85
+ itemsToPick.push({
86
+ product: {
87
+ sku: line.StockingSKU._text
88
+ },
89
+ releaseQty: parseFloat(line.QuantityReleased._text)
90
+ });
91
+ }
92
+ });
93
+ }
94
+ if (ntsStatus == 'BACKORDER' && OrderLine.Item.some(itm => itm.QuantityReleased._text == 0)) {
95
+ checkDuplicationValidation = false;
96
+ }
97
+ if (itemsToPick.length == 0) {
98
+ isAccept = false;
99
+ }
100
+ let orderItems = itemsToPick;
101
+ let result = Object.assign(Object.assign({}, orderInfo), { orderInventories: orderItems, isAccept,
102
+ checkDuplicationValidation });
103
+ return result;
104
+ }
105
+ };
106
+ }
107
+ //# sourceMappingURL=get-outbound-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-outbound-order.js","sourceRoot":"","sources":["../../../../server/controllers/herbalife/apis/get-outbound-order.ts"],"names":[],"mappings":"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","sourcesContent":["export function getOutboundOrder() {\n return {\n method: 'get',\n path: '{folderPath}/{folderType}/sob/data/{fileKey}',\n denormalize(req) {\n const { folderPath, folderType, fileKey } = req\n return {\n resource: { folderPath, folderType, fileKey }\n }\n },\n normalize(res, { sftp }) {\n const { Order } = res\n let isAccept: boolean = false\n\n const responseFilePattern = JSON.parse(sftp.responseFilePattern)\n const acceptOrderTypes = responseFilePattern.acceptOrderTypes // ['RSO', 'MSO', 'MSBO']\n const acceptNTSStatuses = responseFilePattern.acceptNTSStatuses //['', 'BACKORDER']\n const acceptWarehouseNumber = responseFilePattern.acceptWarehouseNumber //['NK']\n const acceptCommand = responseFilePattern.acceptCommand //['NTS', '']\n const acceptFreightCode = responseFilePattern.acceptFreightCode // ['PU']\n\n let orderHeader: any = Order.OrderHeader\n let generalInfo: any = orderHeader.General\n let distributorDetails: any = orderHeader.DistributorDetails\n let shippingInstructions: any = Order.ShippingInstructions\n\n let orderType: string = generalInfo.OrderType._text\n let ntsStatus: string = generalInfo.NTSStatus._text || ''\n let command: string = generalInfo.Command._text || ''\n let warehouseNumber: string = generalInfo.WarehouseNumber._text\n let freightCode: string = shippingInstructions.FreightCode._text\n\n if (\n acceptWarehouseNumber.includes(warehouseNumber) &&\n acceptOrderTypes.includes(orderType) &&\n acceptNTSStatuses.includes(ntsStatus) &&\n acceptCommand.includes(command) &&\n acceptFreightCode.includes(freightCode)\n ) {\n isAccept = true\n }\n\n let shippingInstruction: string = shippingInstructions.ShippingInstructions._text\n let ntsDateParts = generalInfo.NTS_Date._text.split('/')\n let releaseDate: string = ntsDateParts[2] + '-' + ntsDateParts[1] + '-' + ntsDateParts[0]\n let orderInfo: any = {\n refNo: generalInfo.OrderNumber._text,\n refNo2: warehouseNumber,\n type: 'b2b',\n releaseDate,\n collectionOrderNo: generalInfo.OrderNumber._text,\n marketplaceOrderStatus: ntsStatus,\n ownTransport: true,\n exportOption: false,\n packingOption: false,\n remark: shippingInstruction,\n billTo: {\n billingAddress: distributorDetails.BillTo.BillToAddress._text\n },\n deliverTo: {\n deliveryAddress1: distributorDetails.ShipTo.Address1._text,\n deliveryAddress2: distributorDetails.ShipTo.Address2._text,\n deliveryAddress3: distributorDetails.ShipTo.Address3._text,\n attentionTo: distributorDetails.ShipTo.Name._text,\n city: distributorDetails.ShipTo.City._text,\n state: distributorDetails.ShipTo.ShipToState._text,\n postalCode: distributorDetails.ShipTo.Zipcode._text,\n country: distributorDetails.ShipTo.Country._text,\n phone1: distributorDetails.ShipTo.Phone._text\n }\n }\n\n let OrderLine = Order.PickList\n let totalItems: number = parseFloat(Order.PickList.LinesInPickList._text)\n let itemsToPick: any[] = []\n let checkDuplicationValidation\n if (totalItems == 1) {\n if (parseFloat(OrderLine.Item.QuantityReleased._text) > 0) {\n itemsToPick.push({\n product: {\n sku: OrderLine.Item.StockingSKU._text\n },\n releaseQty: parseFloat(OrderLine.Item.QuantityReleased._text)\n })\n }\n } else {\n OrderLine.Item.map(line => {\n if (parseFloat(line.QuantityReleased._text) > 0) {\n itemsToPick.push({\n product: {\n sku: line.StockingSKU._text\n },\n releaseQty: parseFloat(line.QuantityReleased._text)\n })\n }\n })\n }\n\n if (ntsStatus == 'BACKORDER' && OrderLine.Item.some(itm => itm.QuantityReleased._text == 0)) {\n checkDuplicationValidation = false\n }\n\n if (itemsToPick.length == 0) {\n isAccept = false\n }\n\n let orderItems: any[] = itemsToPick\n\n let result: any = {\n ...orderInfo,\n orderInventories: orderItems,\n isAccept,\n checkDuplicationValidation\n }\n\n return result\n }\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export * from './echo';
2
+ export * from './get-outbound-order';
3
+ export * from './create-shipment';
4
+ export * from './create-serial-number';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./echo"), exports);
5
+ tslib_1.__exportStar(require("./get-outbound-order"), exports);
6
+ tslib_1.__exportStar(require("./create-shipment"), exports);
7
+ tslib_1.__exportStar(require("./create-serial-number"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/controllers/herbalife/apis/index.ts"],"names":[],"mappings":";;;AAAA,iDAAsB;AACtB,+DAAoC;AACpC,4DAAiC;AACjC,iEAAsC","sourcesContent":["export * from './echo'\nexport * from './get-outbound-order'\nexport * from './create-shipment'\nexport * from './create-serial-number'\n"]}
@@ -0,0 +1,8 @@
1
+ import '../../sftp-s3';
2
+ import { Sftp } from '../../service';
3
+ export type HerbalifeConfig = {};
4
+ export declare class Herbalife {
5
+ constructor();
6
+ get(path: string, data?: any): Promise<any>;
7
+ post(path: string, data?: any): Promise<Sftp>;
8
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Herbalife = void 0;
4
+ require("../../sftp-s3");
5
+ const xml_js_1 = require("xml-js");
6
+ const sftp_const_1 = require("../../sftp-const");
7
+ const generate_files_1 = require("../../util/generate-files");
8
+ const debug = require('debug')('things-factory:integration-sftp:herbalife');
9
+ class Herbalife {
10
+ constructor() { }
11
+ async get(path, data = {}) {
12
+ const fileResult = await sftp_const_1.SFTPFILESTORAGE.readFile(path, 'utf-8');
13
+ const item = (0, xml_js_1.xml2js)(fileResult, {
14
+ compact: true
15
+ });
16
+ const result = Object.assign({}, item);
17
+ return result;
18
+ }
19
+ async post(path, data = {}) {
20
+ const { title, backupTitle, content, sftp, backupPath } = data;
21
+ let params = [
22
+ {
23
+ title,
24
+ uploadPath: path,
25
+ content
26
+ }
27
+ ];
28
+ if (backupPath) {
29
+ params.push({
30
+ title: backupTitle,
31
+ uploadPath: backupPath,
32
+ content
33
+ });
34
+ }
35
+ await (0, generate_files_1.generateFiles)(params);
36
+ return sftp;
37
+ }
38
+ }
39
+ exports.Herbalife = Herbalife;
40
+ //# sourceMappingURL=herbalife.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"herbalife.js","sourceRoot":"","sources":["../../../server/controllers/herbalife/herbalife.ts"],"names":[],"mappings":";;;AAAA,yBAAsB;AAEtB,mCAA+B;AAG/B,iDAAkD;AAClD,8DAAyD;AAEzD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,2CAA2C,CAAC,CAAA;AAI3E,MAAa,SAAS;IACpB,gBAAe,CAAC;IAEhB,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,OAAY,EAAE;QACpC,MAAM,UAAU,GAAQ,MAAM,4BAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACrE,MAAM,IAAI,GAAQ,IAAA,eAAM,EAAC,UAAU,EAAE;YACnC,OAAO,EAAE,IAAI;SACd,CAAC,CAAA;QACF,MAAM,MAAM,qBAAa,IAAI,CAAE,CAAA;QAC/B,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,OAAY,EAAE;QACrC,MAAM,EACJ,KAAK,EACL,WAAW,EACX,OAAO,EACP,IAAI,EACJ,UAAU,EACX,GAA4F,IAAI,CAAA;QAEjG,IAAI,MAAM,GAAU;YAClB;gBACE,KAAK;gBACL,UAAU,EAAE,IAAI;gBAChB,OAAO;aACR;SACF,CAAA;QAED,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,UAAU;gBACtB,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;QACD,MAAM,IAAA,8BAAa,EAAC,MAAM,CAAC,CAAA;QAE3B,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAxCD,8BAwCC","sourcesContent":["import '../../sftp-s3'\n\nimport { xml2js } from 'xml-js'\n\nimport { Sftp } from '../../service'\nimport { SFTPFILESTORAGE } from '../../sftp-const'\nimport { generateFiles } from '../../util/generate-files'\n\nconst debug = require('debug')('things-factory:integration-sftp:herbalife')\n\nexport type HerbalifeConfig = {}\n\nexport class Herbalife {\n constructor() {}\n\n async get(path: string, data: any = {}) {\n const fileResult: any = await SFTPFILESTORAGE.readFile(path, 'utf-8')\n const item: any = xml2js(fileResult, {\n compact: true\n })\n const result: any = { ...item }\n return result\n }\n\n async post(path: string, data: any = {}) {\n const {\n title,\n backupTitle,\n content,\n sftp,\n backupPath\n }: { title: string; backupTitle: string; content: string; sftp: Sftp; backupPath: string } = data\n\n let params: any[] = [\n {\n title,\n uploadPath: path,\n content\n }\n ]\n\n if (backupPath) {\n params.push({\n title: backupTitle,\n uploadPath: backupPath,\n content\n })\n }\n await generateFiles(params)\n\n return sftp\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export * from './herbalife';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const sftp_api_1 = require("../sftp-api");
5
+ const APIS = tslib_1.__importStar(require("./apis"));
6
+ const platform_action_1 = require("./platform-action");
7
+ tslib_1.__exportStar(require("./herbalife"), exports);
8
+ sftp_api_1.SftpAPI.registerPlatform('herbalife', platform_action_1.action, APIS);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/controllers/herbalife/index.ts"],"names":[],"mappings":";;;AAAA,0CAAqC;AACrC,qDAA8B;AAC9B,uDAA0C;AAE1C,sDAA2B;AAE3B,kBAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,wBAAM,EAAE,IAAI,CAAC,CAAA","sourcesContent":["import { SftpAPI } from '../sftp-api'\nimport * as APIS from './apis'\nimport { action } from './platform-action'\n\nexport * from './herbalife'\n\nSftpAPI.registerPlatform('herbalife', action, APIS)\n"]}
@@ -0,0 +1,5 @@
1
+ export declare const action: ({ method, path, request }: {
2
+ method?: string;
3
+ path: any;
4
+ request: any;
5
+ }) => Promise<any>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.action = void 0;
4
+ const herbalife_1 = require("./herbalife");
5
+ function substitute(path, obj) {
6
+ var props = [];
7
+ var re = /{([^}]+)}/g;
8
+ var text;
9
+ while ((text = re.exec(path))) {
10
+ props.push(text[1]);
11
+ }
12
+ var result = path;
13
+ props.forEach(prop => {
14
+ let value = obj[prop.trim()];
15
+ result = result.replace(`{${prop}}`, value === undefined ? '' : value);
16
+ });
17
+ return result;
18
+ }
19
+ const action = async ({ method = 'get', path, request }) => {
20
+ const client = new herbalife_1.Herbalife();
21
+ const { resource = {}, payload = {} } = request;
22
+ path = substitute(path, resource);
23
+ var response = await client[method](path, payload);
24
+ if (response.errors) {
25
+ throw response;
26
+ }
27
+ return response;
28
+ };
29
+ exports.action = action;
30
+ //# sourceMappingURL=platform-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-action.js","sourceRoot":"","sources":["../../../server/controllers/herbalife/platform-action.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AAEvC,SAAS,UAAU,CAAC,IAAI,EAAE,GAAG;IAC3B,IAAI,KAAK,GAAG,EAAE,CAAA;IACd,IAAI,EAAE,GAAG,YAAY,CAAA;IACrB,IAAI,IAAI,CAAA;IAER,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACrB,CAAC;IAED,IAAI,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5B,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAEM,MAAM,MAAM,GAAG,KAAK,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,IAAI,qBAAS,EAAE,CAAA;IAE9B,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,OAAO,CAAA;IAE/C,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAEjC,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClD,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,CAAA;IAChB,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAbY,QAAA,MAAM,UAalB","sourcesContent":["import { Herbalife } from './herbalife'\n\nfunction substitute(path, obj) {\n var props = []\n var re = /{([^}]+)}/g\n var text\n\n while ((text = re.exec(path))) {\n props.push(text[1])\n }\n\n var result = path\n props.forEach(prop => {\n let value = obj[prop.trim()]\n result = result.replace(`{${prop}}`, value === undefined ? '' : value)\n })\n\n return result\n}\n\nexport const action = async ({ method = 'get', path, request }) => {\n const client = new Herbalife()\n\n const { resource = {}, payload = {} } = request\n\n path = substitute(path, resource)\n\n var response = await client[method](path, payload)\n if (response.errors) {\n throw response\n }\n\n return response\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import './herbalife';
2
+ export * from './sftp-api';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ require("./herbalife");
5
+ tslib_1.__exportStar(require("./sftp-api"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/controllers/index.ts"],"names":[],"mappings":";;;AAAA,uBAAoB;AAEpB,qDAA0B","sourcesContent":["import './herbalife'\n\nexport * from './sftp-api'\n"]}
@@ -0,0 +1 @@
1
+ export declare const api: (target: Object, property: string, descriptor: TypedPropertyDescriptor<any>) => any;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.api = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const debug_1 = tslib_1.__importDefault(require("debug"));
6
+ const debug = (0, debug_1.default)('things-factory:integration-sftp:sftp-api-decorator');
7
+ const NOOP = v => v;
8
+ const api = (target, property, descriptor) => {
9
+ const method = descriptor.value;
10
+ descriptor.value = async function (sftp, request) {
11
+ const SftpAPI = this;
12
+ var { platform } = sftp;
13
+ var { action: platformAction, apis } = SftpAPI.getPlatform(platform);
14
+ var m = apis[method.name];
15
+ if (!m) {
16
+ throw Error(`SFTP doesn't have API ${method.name}`);
17
+ }
18
+ var { path, method: httpMethod = 'post', denormalize = NOOP, normalize = NOOP, action = platformAction } = m.apply(this, [request]);
19
+ var denormalized = await denormalize(request || {}, { sftp });
20
+ debug('request', denormalized);
21
+ var response = await action.apply(this, [{ sftp, method: httpMethod, path, request: denormalized, platformAction }]);
22
+ debug('response', response);
23
+ return await normalize(response, { sftp });
24
+ };
25
+ return descriptor;
26
+ };
27
+ exports.api = api;
28
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../../server/controllers/sftp-api/decorators.ts"],"names":[],"mappings":";;;;AAAA,0DAAyB;AAIzB,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,oDAAoD,CAAC,CAAA;AAEzE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEZ,MAAM,GAAG,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,UAAwC,EAAO,EAAE;IACrG,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAA;IAE/B,UAAU,CAAC,KAAK,GAAG,KAAK,WAAW,IAAU,EAAE,OAAO;QACpD,MAAM,OAAO,GAAG,IAAI,CAAA;QAEpB,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;QAEpE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzB,IAAI,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,KAAK,CAAC,yBAAyB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACrD,CAAC;QAED,IAAI,EACF,IAAI,EACJ,MAAM,EAAE,UAAU,GAAG,MAAM,EAC3B,WAAW,GAAG,IAAI,EAClB,SAAS,GAAG,IAAI,EAChB,MAAM,GAAG,cAAc,EACxB,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;QAE5B,IAAI,YAAY,GAAG,MAAM,WAAW,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7D,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAE9B,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;QAEpH,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAE3B,OAAO,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC,CAAA;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA;AAlCY,QAAA,GAAG,OAkCf","sourcesContent":["import Debug from 'debug'\n\nimport { Sftp } from '../../service'\n\nconst debug = Debug('things-factory:integration-sftp:sftp-api-decorator')\n\nconst NOOP = v => v\n\nexport const api = (target: Object, property: string, descriptor: TypedPropertyDescriptor<any>): any => {\n const method = descriptor.value\n\n descriptor.value = async function (sftp: Sftp, request) {\n const SftpAPI = this\n\n var { platform } = sftp\n\n var { action: platformAction, apis } = SftpAPI.getPlatform(platform)\n\n var m = apis[method.name]\n if (!m) {\n throw Error(`SFTP doesn't have API ${method.name}`)\n }\n\n var {\n path,\n method: httpMethod = 'post',\n denormalize = NOOP,\n normalize = NOOP,\n action = platformAction\n } = m.apply(this, [request])\n\n var denormalized = await denormalize(request || {}, { sftp })\n debug('request', denormalized)\n\n var response = await action.apply(this, [{ sftp, method: httpMethod, path, request: denormalized, platformAction }])\n\n debug('response', response)\n\n return await normalize(response, { sftp })\n }\n\n return descriptor\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { Sftp } from '../../service';
2
+ export declare class SftpAPI {
3
+ static platforms: {};
4
+ static registerPlatform(name: any, action: any, apis: any): void;
5
+ static getPlatform(name: any): any;
6
+ static getSftp(id: any): Promise<Sftp>;
7
+ static echo(sftp: any, req: any): any;
8
+ static getOutboundOrder(sftp: any, req: any): any;
9
+ static createShipment(sftp: any, req: any): any;
10
+ static createSerialNumber(sftp: any, req: any): any;
11
+ }