@nathapp/na-cli 1.0.0-rc.10 → 1.0.0-rc.12

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 (169) hide show
  1. package/.gitlab-ci.yml +20 -3
  2. package/.npm/_cacache/index-v5/05/34/1929926becc54c1f69c0921ab74c461c1777ab3d43213900acd4779dbf27 +1 -1
  3. package/.npm/_cacache/index-v5/0b/57/19385728919a097d1777ef98285f6cdfca14b66511276b641ec4a3af64bc +1 -1
  4. package/.npm/_cacache/index-v5/0b/90/c147816be94e86ed9bbb4b9e20409e4791a8991fcfd41d7a44489dedd29b +1 -1
  5. package/.npm/_cacache/index-v5/0b/ac/1bc19a224468b5a9e4382b946d33bb4c236306c2cefe190e5e2db1ded98a +1 -1
  6. package/.npm/_cacache/index-v5/12/6d/f094b1c476935fbda8814b43ee001b439b1f793c265ee5bd97d566143fb4 +1 -1
  7. package/.npm/_cacache/index-v5/12/80/c192e66daf6ba49f528ae81b986857735e6d257bdf4b0b1758eb795cae9b +1 -1
  8. package/.npm/_cacache/index-v5/13/32/a5865acd35ae515cde972c2d6cbff2863e694975883870de78b62a80f30e +1 -1
  9. package/.npm/_cacache/index-v5/14/33/be443b6e6c3ef0ff8f09987bc62d5ef9e61259f3331c422182f6bb74fdeb +1 -1
  10. package/.npm/_cacache/index-v5/14/f7/87042931e5944467d47331c350feb4384bf9143ab6ceebf7108a55905843 +1 -1
  11. package/.npm/_cacache/index-v5/14/fa/f87baceab26935686548c742091e7014930673bc1f077574c54c4c6c2d2d +1 -1
  12. package/.npm/_cacache/index-v5/15/26/abf1072208668be6e34a4311ad25f34fc908c21abc17ef01b5836cef1879 +1 -1
  13. package/.npm/_cacache/index-v5/1a/fd/532a4c7bf52c908d567ded2bb11b0f3282f0733d0d079a5291c2f72e0077 +1 -1
  14. package/.npm/_cacache/index-v5/1b/15/2ed036cc76081b7f1bfb3aa59d491eb3b3602c9381ec8d81435ceecf56b5 +1 -1
  15. package/.npm/_cacache/index-v5/27/b7/7f36d855e73b72c900bef7ba44a2a553de3d77b218493b4ddb6ae6fce516 +1 -1
  16. package/.npm/_cacache/index-v5/27/cc/afd4aa090b087c509f17e75196209f498c916da50ee4e9f26bd8424fd6f7 +1 -1
  17. package/.npm/_cacache/index-v5/2d/80/b5e9ca2e40744e7fa089861626d2a29c62363c01729964f4cf0c3e8ee632 +1 -1
  18. package/.npm/_cacache/index-v5/2d/ed/7f785cb92982f557fdc81aec4081952ce428eb449dd91fa0867b6676fa17 +1 -1
  19. package/.npm/_cacache/index-v5/2e/30/64338ba8469bd5c48ab7843f9d06a83992a346cfd592194af9c6d4d6dc48 +1 -1
  20. package/.npm/_cacache/index-v5/2e/a8/503d5f11e5dcde5786e3973ff160d2acc4736af22f9cd5a883c26adc7824 +1 -1
  21. package/.npm/_cacache/index-v5/30/98/41b0d8db0052e964e4843260ec8a0b12f2541721317cd5ee90b07b6a4d59 +1 -1
  22. package/.npm/_cacache/index-v5/31/64/15cefe5f3b923ebb9c684b37db7451ccf335632aab377fa3c730ec2e79cd +1 -1
  23. package/.npm/_cacache/index-v5/31/ac/4d241faeb3fea9ec8318fd93dd55eb70a87cc8a6e3f849ccef9863882b4b +3 -3
  24. package/.npm/_cacache/index-v5/31/ca/a8c3ab0670811a3887ede187dcd3856d14272349a18f6844f7c8007cc05e +1 -1
  25. package/.npm/_cacache/index-v5/34/a0/f70f68dcf9baef2ff21f29fdd206513fe5b10736be36ddd2f65a654a8f23 +1 -1
  26. package/.npm/_cacache/index-v5/34/f7/8879c3cd1412a0890461590276aa13d0344cb4e09494a4b3d854a7c7660a +1 -1
  27. package/.npm/_cacache/index-v5/35/e5/adb97753b463aa67dc9f26f39e8a52f68bf467cf1187509be7da174c057d +1 -1
  28. package/.npm/_cacache/index-v5/37/53/b5dccfb634beb6de718b268b6434849f27d3cf60d426dc19472a642a3f01 +1 -1
  29. package/.npm/_cacache/index-v5/38/2e/fe53691fa43d2f5ac447c8a2431535ec49118be55bf483c6362d4f72c79b +1 -1
  30. package/.npm/_cacache/index-v5/3c/f6/26a7f7dccb969c764b8bdecb3667023c64bc1159e674fbeeca633c54964c +1 -1
  31. package/.npm/_cacache/index-v5/3d/dd/3e8c6b6c875addf2057fb5fa152fff0fab217f78a8e51c0aa457a925bf12 +1 -1
  32. package/.npm/_cacache/index-v5/3e/77/916dd3c99bb6e83a0217305b0a2a541f122d977edcb92fa6b58eed796c17 +1 -1
  33. package/.npm/_cacache/index-v5/40/62/d04e75208dec117f72a95a5989f81fac7565a530fd22f70ea5e3abc377c3 +2 -2
  34. package/.npm/_cacache/index-v5/42/89/e110619623b1c9111a6392de4b1a62a904fb08d0601f87b9c8e1d493f5d6 +1 -1
  35. package/.npm/_cacache/index-v5/46/5b/f3ce50d3f54a5d65ac316d3c71ef8a8f8bdb072b6dfabc2c69018c3e942a +1 -1
  36. package/.npm/_cacache/index-v5/48/17/0ecf04bc0839b23c609ec7bfea9d339fa2cc3ee5982716cf7465ffaea675 +1 -1
  37. package/.npm/_cacache/index-v5/53/aa/b41f4759346e1d3b6651322d78c7983a4a546cdd6c18c3eb56c944571e4b +1 -1
  38. package/.npm/_cacache/index-v5/57/4d/cdafdfd03e43ca95652cbbb0b23bbbbeef3e16fa307726cb2ae8a5658531 +1 -1
  39. package/.npm/_cacache/index-v5/58/c9/9f8c27572bf3034e8fa9cc74fc00878e45fa7d75d4570d4430e82bfb5ef3 +1 -1
  40. package/.npm/_cacache/index-v5/5a/8c/47e273da29b52c911f59eca44c62faa84be4bb59b1de259ba100ff968559 +1 -1
  41. package/.npm/_cacache/index-v5/5e/89/be4afbbaa5c56c070a74790be14bd112b9e1b3f251324d766264b2c5f880 +1 -1
  42. package/.npm/_cacache/index-v5/5e/e7/453bd89145eccf9d67f5797fb09e5a017b5b13f1ac45cb7b70bda45940ec +2 -2
  43. package/.npm/_cacache/index-v5/5f/57/67c3b0c63ea4198903509c050bb99de2eabd6a2fba583067c4f587dc25f7 +1 -1
  44. package/.npm/_cacache/index-v5/60/8c/b74a2ae1c6978d635a1a21438c553d956a762176742b2749d09db964bf4d +1 -1
  45. package/.npm/_cacache/index-v5/68/6b/1f834b2ea43c7a9d1ffd80eb09f9d44af0895dc31dc3955d4b4c797ea825 +1 -1
  46. package/.npm/_cacache/index-v5/6d/61/c9e7e8446341cea439547eb023fbf47c954ba932e6944a3fd50413c1e861 +1 -1
  47. package/.npm/_cacache/index-v5/6d/b3/82949bd186224f1f51cb3fabdad6a93aa6a64c685b395a36f0a34af15119 +1 -1
  48. package/.npm/_cacache/index-v5/6f/d8/170c71ac7185da1b8040f10243c7294ff9a667a27fffc3479ba2f222f014 +1 -1
  49. package/.npm/_cacache/index-v5/74/d3/f9a4984e5548c5f72b3dc858046781cc3a892b34b6b7e7c353fbc93aa060 +1 -1
  50. package/.npm/_cacache/index-v5/75/ec/5dd4c902abf3f9ae589620cd4fd5b6ccfe045b8abdfbfa050d1a5ba8c01e +1 -1
  51. package/.npm/_cacache/index-v5/77/be/4d3f23909fd5905444d34cb0ce78d5bf6ce157670ae6ed614389a2027d18 +1 -1
  52. package/.npm/_cacache/index-v5/7d/8f/423d7e791f7fedd6bef784f0f467761c619f209ce9c788f08b63e968a880 +1 -1
  53. package/.npm/_cacache/index-v5/80/da/c34ca077ec2051cad25b3313e4e75ff4ad2dc2b12a9c250cb9545c0adc4b +1 -1
  54. package/.npm/_cacache/index-v5/84/d7/a5acf52705a1beb66603196f4bc44e583052d0f1d5a23dfb5316da1811d3 +1 -1
  55. package/.npm/_cacache/index-v5/86/7a/c59a43ec4985d34346e5714968f7220d176ea3a61b55464a7fecae01ac47 +1 -1
  56. package/.npm/_cacache/index-v5/87/55/e56d34b37c3170079064597cabb288d076b0d0468eaba3b8a0cf8686ce1f +1 -1
  57. package/.npm/_cacache/index-v5/8a/c9/c10bf71d66461aba0899e81d7a146332c45dbbacb1693c38fc2e4e578e39 +3 -3
  58. package/.npm/_cacache/index-v5/8a/ee/e3e86b627c10a9fc4ed610c15792507293ba1c14e7ba839e22aec609f1e0 +1 -1
  59. package/.npm/_cacache/index-v5/8b/ee/c2ea22c4bf9c5ddcd0333850e543442de3364478847c7ebc382b1ff3a70d +2 -2
  60. package/.npm/_cacache/index-v5/8c/2d/fc95c0f3896963b4fe4b745b6d2bbc04a2a75f31f108ff740215559617f0 +1 -1
  61. package/.npm/_cacache/index-v5/8e/95/715914a073e3319f22dfec7ffac9df9f293d150c0d6723a60ce08ab7f735 +1 -1
  62. package/.npm/_cacache/index-v5/92/a4/7b5bd924b74993fc2b0de1a458842881545ca2cc22f6bc104a0db4fafdab +1 -1
  63. package/.npm/_cacache/index-v5/96/3a/a15f6c4dc3aeb3fd89c0b7a8c3ba58cb31a9b72c98e3b11a8ef1647b537f +1 -1
  64. package/.npm/_cacache/index-v5/96/b2/def9b882b950a49a7096d71afd5fce3a6a9454795fc060b1901e41d44620 +1 -1
  65. package/.npm/_cacache/index-v5/98/64/01faddae5e2bf199c5f8953942897841c5634b1800e246226ea5489f4584 +1 -1
  66. package/.npm/_cacache/index-v5/99/a9/8e746181ef13bc400da207da412881206f4d2004d75453373f6ee7b25ffa +1 -1
  67. package/.npm/_cacache/index-v5/9a/fc/baddd71f459a50b3c710a007fa7d59fa62febef98033b7331374bf02db64 +1 -1
  68. package/.npm/_cacache/index-v5/9b/55/1bc87872916d09156d5c7056d7ac2b245e7a7638b817eb3dbeafa9d33be8 +1 -1
  69. package/.npm/_cacache/index-v5/9b/b8/d45062af43674e433f967d20768d308ed6ce195be6acadfb7cfd21d11e67 +1 -1
  70. package/.npm/_cacache/index-v5/9c/0e/3faaf557a9613fb7f09b5cecc63ebe78da10371a1f2f58b636f8dcb9a914 +1 -1
  71. package/.npm/_cacache/index-v5/9c/b1/fff150691ce095677426e98bb894621ce4a88097d4b2c5c342224e1852ae +1 -1
  72. package/.npm/_cacache/index-v5/9d/eb/0927bbd589e18b447a3726f591019d6728da728f603e77a1ded3f78dc6eb +1 -1
  73. package/.npm/_cacache/index-v5/9f/43/3636172cbc03abf2262c921f9f71572e6b049aa3db8c65d166bcfe5aca5f +1 -1
  74. package/.npm/_cacache/index-v5/a0/9e/5b7b95cdee86846e4fbe92c9e16e0e7f337c77d2c12de9778522b15bed2e +1 -1
  75. package/.npm/_cacache/index-v5/a1/ff/6532bc014331c9b572482a4bd805bf54a7ff8b4ca179b1c811aff3dec690 +1 -1
  76. package/.npm/_cacache/index-v5/a7/11/13f3c5864a7e9d12ca50a19b99d77d88fbcebb1ceb7455eb7ff77f158b64 +1 -1
  77. package/.npm/_cacache/index-v5/aa/9b/8b6d9e0f45dde1c6af2a4fc211f9b3a74f14041dc04a8a20490a478660b2 +1 -1
  78. package/.npm/_cacache/index-v5/aa/c4/489c0e6a9e4cbd64a8acd4fbfda113e9dfdd114f464830471fda53fff0cd +1 -1
  79. package/.npm/_cacache/index-v5/ab/47/d7a88d46cb8996b726bc7ed9280b5eea26889ab7c848149032a6e8911e4b +1 -1
  80. package/.npm/_cacache/index-v5/ac/4c/71e880f5d5c742e0e3807e7f3c398e920dd019bbf723586f0a7342715580 +1 -1
  81. package/.npm/_cacache/index-v5/ac/86/c0732592365d753d382502d91754a3c88f8b20e22cc25a0327beb9429687 +1 -1
  82. package/.npm/_cacache/index-v5/b0/9b/1a1d76c3ad82dd54353bb8ac8397667df4c5db97e42abf0de3fab68065bb +1 -1
  83. package/.npm/_cacache/index-v5/b3/b3/05a8af0a671c32b41850c1223429fe74449cfcb4c7cac54a9c7c213dfcae +3 -3
  84. package/.npm/_cacache/index-v5/b3/ba/fbf7da5c8eb06d9cc72143e3d36d7f701447b4e0a221c40d4960e06c7296 +1 -1
  85. package/.npm/_cacache/index-v5/b5/5f/1a200e91b7580c5893016e1b1397b6a076ff51cc7c5d382c3b1f1e52edd5 +1 -1
  86. package/.npm/_cacache/index-v5/b6/a8/3bf06da815e92239da2bd4ef7322819b458ee23ae8db9f02dc9a3dca722f +1 -1
  87. package/.npm/_cacache/index-v5/b7/38/992d3e6c01fc9098d137f7dbccfcaa5f5124ba9c487e582e6e0d83f99d30 +1 -1
  88. package/.npm/_cacache/index-v5/b7/d6/b5986a5f5d44d726090a94a22a8dff7a7c391df4a4fa4862bb50b1da196b +1 -1
  89. package/.npm/_cacache/index-v5/ba/d5/f7d95a8e3571758f8b5d095a21909a8f6cdfe7fd2349f7f72b2801eef079 +1 -1
  90. package/.npm/_cacache/index-v5/bb/8a/9c0052bb21f628e48a1e8d25084ee4adb402eba28c747d0299ebf4c3185d +1 -1
  91. package/.npm/_cacache/index-v5/be/a3/c0779c8e0be92c748c91a7dad4e6f0fe57ba0158b6bb1bcfddd8fc56c934 +1 -1
  92. package/.npm/_cacache/index-v5/be/c2/aa68eca6cebd477430ae24727732ec08ee9fc9ef2482df77932eb2f413d9 +1 -1
  93. package/.npm/_cacache/index-v5/bf/7c/375aec77f76404d91225e72006a0105b2a6ec04bb02cfa365ebcd4a0232b +1 -1
  94. package/.npm/_cacache/index-v5/c0/15/8b360dbe06b62052f2a43702140af0bca66e2e4064d7d2016efb4a2a149a +1 -1
  95. package/.npm/_cacache/index-v5/c2/a4/488f71f39bc65742422faf2c74e3b330852ef2192dbb3198fed044e60c20 +1 -1
  96. package/.npm/_cacache/index-v5/c4/89/38b2ab5b89326ead12dbed7a2076caa44d1207dd6cdb3f9f93273843dcf5 +1 -1
  97. package/.npm/_cacache/index-v5/c4/ac/4511be3eecea50ee9cadc09a612f9be8598d7b29d5c8b1253c75fa283cc5 +1 -1
  98. package/.npm/_cacache/index-v5/c5/2d/90031096314e15f4fcc35c804c2180f88214a7851b531aa27bd64064f740 +1 -1
  99. package/.npm/_cacache/index-v5/c7/5e/2acc90bb8fd9d3150354ec8b2f7e7cc2c8e0e59efd575a1963f1ca66cbed +1 -1
  100. package/.npm/_cacache/index-v5/c9/f5/c4a24d8834c4e9523cc24e10c6db63876e3eecdb2cf33762b159e3a1e92f +1 -1
  101. package/.npm/_cacache/index-v5/cc/2d/3cc1e00b73d00c921b8f8c92faaae480a160fc63637ba7b098518db79e02 +1 -1
  102. package/.npm/_cacache/index-v5/cf/56/427919eefb09afe942b12902069325293191afa7d59ff0f2b016c402b4ec +1 -1
  103. package/.npm/_cacache/index-v5/d3/ba/564670f99cd2d757d1ac6209834faf1ce9a94ed856243cf090249d9b2b38 +1 -1
  104. package/.npm/_cacache/index-v5/d5/f4/0913a74f5e223a4fe6108493dd3b03c2d47259df459926160659513c9ad3 +1 -1
  105. package/.npm/_cacache/index-v5/dd/03/456ce7d8bffee20c3acf7e18ef6501b637d59a6fa3fa7bac5ed160b6be3f +1 -1
  106. package/.npm/_cacache/index-v5/e3/6a/b90e45414a9e52cdf1e4a96698065357795b9400d7af079b0a75ee8fd76d +1 -1
  107. package/.npm/_cacache/index-v5/e7/16/c0952e37a6a02b506441a59ee6b0e7fa873a515247763df9dddd162bbcf0 +1 -1
  108. package/.npm/_cacache/index-v5/e8/50/601e38974398787a5a8a8b8d835e29447814cd68ff6fe2e9629738e124c6 +1 -1
  109. package/.npm/_cacache/index-v5/ee/47/02714e9e61ca394444a92772fe85340de8bd216b58f59e1af25d5618303f +1 -1
  110. package/.npm/_cacache/index-v5/ef/74/026f830458505ca7ae44dac678900360af24ed6e76521eb12df5fadcf26f +1 -1
  111. package/.npm/_cacache/index-v5/f1/75/91238e32e2ac4d9c4976deec39a2e6ca85c0c678a4466a50ca4412272a7c +1 -1
  112. package/.npm/_cacache/index-v5/f2/1f/c662626ec8eafafa54476678b9f71799a74ee368f2b7845a6ec9f9174a4d +3 -3
  113. package/.npm/_cacache/index-v5/f5/a4/ca599571c5bcfc5351ca53c418a6cd9d162539528b1ed87a692a1677020e +1 -1
  114. package/.npm/_cacache/index-v5/f6/18/16e565c66306149a0b31bb2af01babb55bd65ef7cb85a8a11d486d933b60 +1 -1
  115. package/.npm/_cacache/index-v5/f8/f5/f04b833fa130e113a9093088ad108d8cf9b2b1d5a0336e48cbf0916b8686 +1 -1
  116. package/.npm/_cacache/index-v5/fa/88/31cbd6ca584e75edf3642c6f8b079c1f2b5eca1d7b2780ce2e86c24f1e84 +1 -1
  117. package/.npm/_cacache/index-v5/fb/ae/46c38299837b3b4dcee9dc45854a6901355864326b4e64c730727ca1c88a +1 -1
  118. package/.npm/_cacache/index-v5/fc/1c/958fc085ebdc42fa37d4985cba976a5cca21f678c751c968f8fe9b259455 +1 -1
  119. package/.npm/_cacache/index-v5/fd/2e/6ead8880f4d02a536a570e21b13b4e7c9700082833e556cd53e9e92bfd1b +1 -1
  120. package/.npm/_cacache/index-v5/fd/46/fa56121e15b7f090f8050d0c954bbc9452e4c7ddde82777b2e00552c4220 +1 -1
  121. package/Makefile +1 -0
  122. package/README.md +3 -2
  123. package/dist/templates/mxw-base-api-express/.dockerignore +2 -0
  124. package/dist/templates/mxw-base-api-express/.env +10 -0
  125. package/dist/templates/mxw-base-api-express/.gitlab-ci.yml +172 -0
  126. package/dist/templates/mxw-base-api-express/.nvmrc +1 -0
  127. package/dist/templates/mxw-base-api-express/Dockerfile +14 -0
  128. package/dist/templates/mxw-base-api-express/Makefile +84 -0
  129. package/dist/templates/mxw-base-api-express/README.md +71 -0
  130. package/dist/templates/mxw-base-api-express/package.json +55 -0
  131. package/dist/templates/mxw-base-api-express/src/app-service.test.ts +94 -0
  132. package/dist/templates/mxw-base-api-express/src/app-service.ts +498 -0
  133. package/dist/templates/mxw-base-api-express/src/auth/auth-user.test.ts +215 -0
  134. package/dist/templates/mxw-base-api-express/src/auth/auth-user.ts +86 -0
  135. package/dist/templates/mxw-base-api-express/src/auth/auth.ts +81 -0
  136. package/dist/templates/mxw-base-api-express/src/core-service.ts +72 -0
  137. package/dist/templates/mxw-base-api-express/src/crud.ts +84 -0
  138. package/dist/templates/mxw-base-api-express/src/http-handler.ts +71 -0
  139. package/dist/templates/mxw-base-api-express/src/server.ts +54 -0
  140. package/dist/templates/mxw-base-api-express/src/test.ts +38 -0
  141. package/dist/templates/mxw-base-api-express/src/utils/api-utilities.ts +52 -0
  142. package/dist/templates/mxw-base-api-express/src/utils/file-utilities.ts +55 -0
  143. package/dist/templates/mxw-base-api-express/tsconfig.json +32 -0
  144. package/dist/templates/ts-library/.gitlab-ci.yml +20 -3
  145. package/dist/templates/ts-library/Makefile +1 -0
  146. package/package.json +1 -1
  147. package/templates/mxw-base-api-express/.dockerignore +2 -0
  148. package/templates/mxw-base-api-express/.env +10 -0
  149. package/templates/mxw-base-api-express/.gitlab-ci.yml +172 -0
  150. package/templates/mxw-base-api-express/.nvmrc +1 -0
  151. package/templates/mxw-base-api-express/Dockerfile +14 -0
  152. package/templates/mxw-base-api-express/Makefile +84 -0
  153. package/templates/mxw-base-api-express/README.md +71 -0
  154. package/templates/mxw-base-api-express/package.json +55 -0
  155. package/templates/mxw-base-api-express/src/app-service.test.ts +94 -0
  156. package/templates/mxw-base-api-express/src/app-service.ts +498 -0
  157. package/templates/mxw-base-api-express/src/auth/auth-user.test.ts +215 -0
  158. package/templates/mxw-base-api-express/src/auth/auth-user.ts +86 -0
  159. package/templates/mxw-base-api-express/src/auth/auth.ts +81 -0
  160. package/templates/mxw-base-api-express/src/core-service.ts +72 -0
  161. package/templates/mxw-base-api-express/src/crud.ts +84 -0
  162. package/templates/mxw-base-api-express/src/http-handler.ts +71 -0
  163. package/templates/mxw-base-api-express/src/server.ts +54 -0
  164. package/templates/mxw-base-api-express/src/test.ts +38 -0
  165. package/templates/mxw-base-api-express/src/utils/api-utilities.ts +52 -0
  166. package/templates/mxw-base-api-express/src/utils/file-utilities.ts +55 -0
  167. package/templates/mxw-base-api-express/tsconfig.json +32 -0
  168. package/templates/ts-library/.gitlab-ci.yml +20 -3
  169. package/templates/ts-library/Makefile +1 -0
@@ -1,2 +1,2 @@
1
1
 
2
- 468e8c325e58e1479377db0513ecc4e2bb705d1e {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz","integrity":"sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==","time":1673783350754,"size":14311,"metadata":{"url":"https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:tslib@https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz"],"pacote-integrity":["sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Sun, 15 Jan 2023 11:49:09 GMT"],"content-type":["application/octet-stream"],"content-length":["14311"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["2110752"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"427dbdd18c8a743e6fc8c2458aac367f\""],"last-modified":["Fri, 22 Jun 2018 07:45:10 GMT"],"vary":["Accept-Encoding"],"server":["cloudflare"]}}}
2
+ 49f28517f2fa0291a9190354eef7102ec1fe8c7d {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz","integrity":"sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==","time":1674017814782,"size":14311,"metadata":{"url":"https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:tslib@https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz"],"pacote-integrity":["sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Wed, 18 Jan 2023 04:56:53 GMT"],"content-type":["application/octet-stream"],"content-length":["14311"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["2345216"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"427dbdd18c8a743e6fc8c2458aac367f\""],"last-modified":["Fri, 22 Jun 2018 07:45:10 GMT"],"vary":["Accept-Encoding"],"server":["cloudflare"]}}}
@@ -1,2 +1,2 @@
1
1
 
2
- df145667930371bd8af4a1ee13f35c81ddd06707 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz","integrity":"sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==","time":1673783349993,"size":6391,"metadata":{"url":"https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:v8-compile-cache-lib@https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"],"pacote-integrity":["sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Sun, 15 Jan 2023 11:49:09 GMT"],"content-type":["application/octet-stream"],"content-length":["6391"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["130549"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"9a89304195fa9f55086f3a666b8865de\""],"last-modified":["Sat, 16 Apr 2022 01:03:40 GMT"],"vary":["Accept-Encoding"],"x-amz-replication-status":["COMPLETED"],"server":["cloudflare"]}}}
2
+ 72c3b77b5623d20ab37a7244a97c6e1ccdc74f0a {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz","integrity":"sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==","time":1674017814092,"size":6391,"metadata":{"url":"https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:v8-compile-cache-lib@https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"],"pacote-integrity":["sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Wed, 18 Jan 2023 04:56:53 GMT"],"content-type":["application/octet-stream"],"content-length":["6391"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["2346606"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"9a89304195fa9f55086f3a666b8865de\""],"last-modified":["Sat, 16 Apr 2022 01:03:40 GMT"],"vary":["Accept-Encoding"],"x-amz-replication-status":["COMPLETED"],"server":["cloudflare"]}}}
@@ -1,2 +1,2 @@
1
1
 
2
- 09d5ced0bfbc000f7a297ed45373aa00988c350d {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz","integrity":"sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==","time":1673783351160,"size":57485,"metadata":{"url":"https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:shelljs@https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz"],"pacote-integrity":["sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Sun, 15 Jan 2023 11:49:09 GMT"],"content-type":["application/octet-stream"],"content-length":["57485"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["1504769"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"ff3f1bc09a257edcf3de6d7ca5f69943\""],"last-modified":["Fri, 07 Jan 2022 05:31:50 GMT"],"vary":["Accept-Encoding"],"x-amz-replication-status":["COMPLETED"],"server":["cloudflare"]}}}
2
+ f029688d5255e33731313c6924b6026338974d22 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz","integrity":"sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==","time":1674017815343,"size":57485,"metadata":{"url":"https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:shelljs@https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz"],"pacote-integrity":["sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Wed, 18 Jan 2023 04:56:53 GMT"],"content-type":["application/octet-stream"],"content-length":["57485"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["2346345"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"ff3f1bc09a257edcf3de6d7ca5f69943\""],"last-modified":["Fri, 07 Jan 2022 05:31:50 GMT"],"vary":["Accept-Encoding"],"x-amz-replication-status":["COMPLETED"],"server":["cloudflare"]}}}
@@ -1,2 +1,2 @@
1
1
 
2
- 2746dd6160cf1e704bf1252c19258548266febd1 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz","integrity":"sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==","time":1673783350019,"size":3776,"metadata":{"url":"https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:rechoir@https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz"],"pacote-integrity":["sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Sun, 15 Jan 2023 11:49:09 GMT"],"content-type":["application/octet-stream"],"content-length":["3776"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["43699"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"9a0aa4db2a887a452ef08921160c7eb4\""],"last-modified":["Sun, 27 May 2018 15:30:14 GMT"],"vary":["Accept-Encoding"],"server":["cloudflare"]}}}
2
+ 35d5380d72cd6254764ce357e56be4e3f10b9d4c {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz","integrity":"sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==","time":1674017814118,"size":3776,"metadata":{"url":"https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:rechoir@https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz"],"pacote-integrity":["sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Wed, 18 Jan 2023 04:56:53 GMT"],"content-type":["application/octet-stream"],"content-length":["3776"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["278163"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"9a0aa4db2a887a452ef08921160c7eb4\""],"last-modified":["Sun, 27 May 2018 15:30:14 GMT"],"vary":["Accept-Encoding"],"server":["cloudflare"]}}}
@@ -1,2 +1,2 @@
1
1
 
2
- b7789733414f9d0d79a3065a2b1740ea284a3847 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz","integrity":"sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==","time":1673783349997,"size":1751,"metadata":{"url":"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:has-flag@https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"],"pacote-integrity":["sha1-tdRU3CGZriJWmfNGfloH87lVuv0=sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Sun, 15 Jan 2023 11:49:09 GMT"],"content-type":["application/octet-stream"],"content-length":["1751"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["2497341"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"1fa1fa951639c7058277abcecca86922\""],"last-modified":["Sun, 27 May 2018 03:34:16 GMT"],"vary":["Accept-Encoding"],"server":["cloudflare"]}}}
2
+ f4fc47fb5743aa6e247b04bd1da4fa6e5e6c8210 {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz","integrity":"sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==","time":1674017814095,"size":1751,"metadata":{"url":"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:has-flag@https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"],"pacote-integrity":["sha1-tdRU3CGZriJWmfNGfloH87lVuv0=sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Wed, 18 Jan 2023 04:56:53 GMT"],"content-type":["application/octet-stream"],"content-length":["1751"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["2347369"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"1fa1fa951639c7058277abcecca86922\""],"last-modified":["Sun, 27 May 2018 03:34:16 GMT"],"vary":["Accept-Encoding"],"server":["cloudflare"]}}}
@@ -1,2 +1,2 @@
1
1
 
2
- 93ff960716a337a959303ce7851dd1ef899bbd3d {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz","integrity":"sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==","time":1673783350029,"size":4975,"metadata":{"url":"https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:es6-object-assign@https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz"],"pacote-integrity":["sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Sun, 15 Jan 2023 11:49:09 GMT"],"content-type":["application/octet-stream"],"content-length":["4975"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["1505127"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"84776ff526114e20ca0f10b9bfc12a42\""],"last-modified":["Sat, 26 May 2018 23:42:08 GMT"],"vary":["Accept-Encoding"],"server":["cloudflare"]}}}
2
+ 212f627d955cda0788924962a7f7613ac3fb1efe {"key":"make-fetch-happen:request-cache:https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz","integrity":"sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==","time":1674017814134,"size":4975,"metadata":{"url":"https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz","reqHeaders":{"user-agent":["npm/7.15.1 node/v16.3.0 linux x64 workspaces/false ci/gitlab"],"pacote-version":["11.3.3"],"pacote-req-type":["tarball"],"pacote-pkg-id":["remote:es6-object-assign@https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz"],"pacote-integrity":["sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw== sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw=="],"npm-command":["ci"],"connection":["keep-alive"]},"resHeaders":{"date":["Wed, 18 Jan 2023 04:56:53 GMT"],"content-type":["application/octet-stream"],"content-length":["4975"],"connection":["keep-alive"],"accept-ranges":["bytes"],"access-control-allow-origin":["*"],"age":["2339603"],"cache-control":["public, immutable, max-age=31557600"],"etag":["\"84776ff526114e20ca0f10b9bfc12a42\""],"last-modified":["Sat, 26 May 2018 23:42:08 GMT"],"vary":["Accept-Encoding"],"server":["cloudflare"]}}}
package/Makefile CHANGED
@@ -1,5 +1,6 @@
1
1
  MAKEFILE := $(abspath $(lastword $(MAKEFILE_LIST)))
2
2
  ROOT_PATH := $(shell pwd)
3
+ SERVICE_NAME := na-cli
3
4
 
4
5
  .PHONY: test
5
6
 
package/README.md CHANGED
@@ -2,11 +2,12 @@
2
2
 
3
3
  Command line for create a project with your own templates
4
4
 
5
- 1. Note, Please change .npmignore to .npmignore-rename inside templates folder, because na-cli will ignore files in .npmignore publish the the cli on `npm publish`
5
+ 1. Note: when `npm publish`, npm will ignore files inside .npmignore which will cause missing files on generated projects, so please rename .npmignore to .npmignore-rename, template engine will auto rename .npmignore-rename back .npmignore
6
6
 
7
7
  ## Version 1.0.0
8
8
 
9
- 1. Add ts-library template 1.0.0
9
+ 1. ts-library template 1.0.0
10
+ 2. mxw-base-api-express template 1.0.0
10
11
 
11
12
  ## Inspired by https://github.com/pongsatt/mycli
12
13
 
@@ -0,0 +1,2 @@
1
+ dist
2
+ node_modules
@@ -0,0 +1,10 @@
1
+ JWT_SECRET="JWT_SECRET"
2
+ WHITELIST="*"
3
+ CORS="*"
4
+
5
+ SERVICE_DOMAIN="DOMAIN"
6
+ SERVICE_SESSION_TIMEOUT="60000"
7
+ SERVICE_WALLET_JSON={"address":"mxw1pv3lfk3s0mp0nw9sftv95s5tfzwqu26qqw3d2s","id":"99ddd9b3-23aa-4dbf-a8cc-d89e885121d2","version":3,"Crypto":{"cipher":"aes-128-ctr","cipherparams":{"iv":"1fd9e58278c96fd902b334e4a3b16838"},"ciphertext":"fa5ea57bdae0a4dffb997d2c09c93f9a472b2a881c42c486cbd6ba001d112dcd","kdf":"scrypt","kdfparams":{"salt":"f03e572526d9f6fc204f7061d4766cd8eda9760a78f91803783c441879efc5ac","n":131072,"dklen":32,"p":1,"r":8},"mac":"770b8ba60c1167ffaeaace160341d6868437fd4992b772951cc217025082b1f8"},"x-mxw":{"client":"mxw-sdk","filename":"UTC--2019-07-25T11-49-57.0Z--mxw1pv3lfk3s0mp0nw9sftv95s5tfzwqu26qqw3d2s","mnemonicCounter":"d04f8666f6b894af7f4ef90bb568d7b0","mnemonicCiphertext":"0af223d5975c3466b0e2aecd30cdeab0","path":"m/44'/376'/0'/0/0","version":"0.1"}}
8
+ SERVICE_WALLET_PASSWORD=any strong password
9
+
10
+ MYSQL_URL="mysql://user:password@db/db"
@@ -0,0 +1,172 @@
1
+ # Project must implement Makefile for commands (test, version-prerelease, version-patch, name, version, image)
2
+ # command:
3
+ # - test: run project test cases
4
+ # - version-prerelease: bump prerelease version
5
+ # - version-patch: bump release version
6
+ # - name: display project name
7
+ # - version: display project version
8
+ # - image: display project name and version (e.g. hello-world:1.0.0)
9
+ #
10
+ stages:
11
+ # run test cases
12
+ - test
13
+ # build container image and push to registry
14
+ - prepare
15
+ - build-init
16
+ - build
17
+ - build-commit
18
+ # mark release commit as verified
19
+ - release
20
+ - notify
21
+
22
+ run-test:
23
+ stage: test
24
+ image: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/docker:18-ci
25
+ services:
26
+ - docker:18-dind
27
+ script:
28
+ - make test
29
+ rules:
30
+ # NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT tag was created
31
+ - if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_COMMIT_TAG != null'
32
+ when: never
33
+ # Merge request
34
+ - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
35
+ # Commit to protected branch or commit branch is default branch (master)
36
+ - if: '$CI_COMMIT_REF_PROTECTED == "true" || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
37
+ # Commit message contains `run-test` keyword
38
+ - if: '$CI_COMMIT_MESSAGE =~ /run-test/'
39
+ # Commit message contains `run-prerelease` keyword and commit branch is not default branch (master)
40
+ - if: '$CI_COMMIT_MESSAGE =~ /run-prerelease/ && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
41
+
42
+ run-pre-prepare:
43
+ stage: prepare
44
+ image: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/node:10.20.0-alpine-ci-1
45
+ artifacts:
46
+ paths:
47
+ - package.json
48
+ - package-lock.json
49
+ - image-tag.txt
50
+ - postman-collection.json
51
+ script:
52
+ - make spec
53
+ - make version-prerelease
54
+ - make image | awk '{ printf("%s/%s/%s", ENVIRON["CONTAINER_REGISTRY_URL"], ENVIRON["CONTAINER_REGISTRY_NAMESPACE"], $0)}' > image-tag.txt
55
+ rules:
56
+ # NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT merge request and NOT tag was created
57
+ - if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_TAG != null'
58
+ when: never
59
+ # Commit message contains `run-prerelease` keyword and commit branch is not default branch (master)
60
+ - if: '$CI_COMMIT_MESSAGE =~ /run-prerelease/ && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
61
+
62
+ run-prepare:
63
+ stage: prepare
64
+ image: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/node:10.20.0-alpine-ci-1
65
+ artifacts:
66
+ paths:
67
+ - package.json
68
+ - package-lock.json
69
+ - image-tag.txt
70
+ - postman-collection.json
71
+ script:
72
+ - make spec
73
+ - make version-patch
74
+ - make image | awk '{ printf("%s/%s/%s", ENVIRON["CONTAINER_REGISTRY_URL"], ENVIRON["CONTAINER_REGISTRY_NAMESPACE"], $0)}' > image-tag.txt
75
+ rules:
76
+ # NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT merge request and NOT tag was created
77
+ - if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_TAG != null'
78
+ when: never
79
+ # Commit into default branch (master)
80
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
81
+
82
+ run-build-warmer:
83
+ stage: build-init
84
+ image:
85
+ name: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/kaniko-warmer:debug
86
+ entrypoint: [""]
87
+ before_script:
88
+ - echo "$DOCKER_AUTH_CONFIG" > /kaniko/.docker/config.json
89
+ script:
90
+ - warmer `cat $CI_PROJECT_DIR/Dockerfile | grep FROM | awk -F" " '{ printf("--image=%s ", $2) }'`
91
+ rules:
92
+ # NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT merge request and NOT tag was created
93
+ - if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_TAG != null'
94
+ when: never
95
+ # Commit message contains `run-prerelease` keyword and commit branch is not default branch (master)
96
+ - if: '$CI_COMMIT_MESSAGE =~ /run-prerelease/ && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
97
+ # Commit into default branch (master)
98
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
99
+
100
+ run-build:
101
+ stage: build
102
+ image:
103
+ name: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/kaniko-executor:debug
104
+ entrypoint: [""]
105
+ artifacts:
106
+ paths:
107
+ - image-digest.txt
108
+ before_script:
109
+ - echo "$DOCKER_AUTH_CONFIG" > /kaniko/.docker/config.json
110
+ script:
111
+ - echo "BUILDING... `cat $CI_PROJECT_DIR/image-tag.txt`"
112
+ - if [ -f $CI_PROJECT_DIR/dependency.txt ] && ! [ -z "`cat $CI_PROJECT_DIR/dependency.txt`" ]; then cat $CI_PROJECT_DIR/dependency.txt | awk '{$1=$1;print;exit}' > $CI_PROJECT_DIR/dep.txt; else echo > $CI_PROJECT_DIR/dep.txt; fi
113
+ - echo -n 'LABEL DEPENDENCY='; cat $CI_PROJECT_DIR/dep.txt
114
+ - executor --cache=true --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --digest-file $CI_PROJECT_DIR/image-digest.txt --destination "`cat $CI_PROJECT_DIR/image-tag.txt`" --label "dependency=`cat $CI_PROJECT_DIR/dep.txt`"
115
+ - echo "PUSHED `cat $CI_PROJECT_DIR/image-tag.txt` (`cat $CI_PROJECT_DIR/image-digest.txt`)"
116
+ rules:
117
+ # NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT merge request and NOT tag was created
118
+ - if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_TAG != null'
119
+ when: never
120
+ # Commit message contains `run-prerelease` keyword and commit branch is not default branch (master)
121
+ - if: '$CI_COMMIT_MESSAGE =~ /run-prerelease/ && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
122
+ # Commit into default branch (master)
123
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
124
+
125
+ run-build-commit:
126
+ stage: build-commit
127
+ image: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/node:10.20.0-alpine-ci-1
128
+ before_script:
129
+ - git config --global user.name "$GITLAB_USER_NAME"
130
+ - git config --global user.email "$GITLAB_USER_EMAIL"
131
+ script:
132
+ - git add -A
133
+ - git commit -m "$(make version)" -m "== release-by-bot ($CI_COMMIT_SHA) =="
134
+ - git tag -a "$(make version)" -m "$(cat image-tag.txt) ($(cat image-digest.txt))"
135
+ - git push "https://${GITLAB_USER_NAME}:${CI_GIT_TOKEN}@${CI_REPOSITORY_URL#*@}" "HEAD:${CI_COMMIT_BRANCH}"
136
+ - git push "https://${GITLAB_USER_NAME}:${CI_GIT_TOKEN}@${CI_REPOSITORY_URL#*@}" --tags
137
+ rules:
138
+ # NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT merge request and NOT tag was created
139
+ - if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_TAG != null'
140
+ when: never
141
+ # Commit message contains `run-prerelease` keyword and commit branch is not default branch (master)
142
+ - if: '$CI_COMMIT_MESSAGE =~ /run-prerelease/ && $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH'
143
+ # Commit into default branch (master)
144
+ - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
145
+
146
+ run-release:
147
+ stage: release
148
+ image: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/node:10.20.0-alpine-ci-1
149
+ script:
150
+ - echo "Bumped version $(make version)"
151
+ rules:
152
+ # NOT commit message contains `run-without-release` keyword and NOT merge request
153
+ - if: '$CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event"'
154
+ when: never
155
+ # Tag was created
156
+ - if: '$CI_COMMIT_TAG != null'
157
+
158
+ run-notify:
159
+ stage: notify
160
+ image: registry-intl.cn-hongkong.aliyuncs.com/d_mxw/node:10.20.0-alpine-ci-1
161
+ before_script:
162
+ - apk --no-cache add curl
163
+ script:
164
+ - 'curl -X POST -H "Content-Type: application/json" -d "{\"chat_id\": \"$TELEGRAM_CHAT_ID\", \"text\": \"CI: $CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME version:$(make version) has been released \"}" https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage'
165
+ rules:
166
+ # NOT triggerred by bot and NOT commit message contains `run-without-release` keyword and NOT merge request and NOT tag was created
167
+ - if: '$CI_COMMIT_MESSAGE =~ /release-by-bot/ || $CI_COMMIT_MESSAGE =~ /run-without-release/ || $CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_TAG != null'
168
+ when: never
169
+ - if: $TELEGRAM_BOT_TOKEN != null
170
+ - if: $TELEGRAM_BOT_TOKEN != ""
171
+ - if: $TELEGRAM_CHAT_ID != null
172
+ - if: $TELEGRAM_CHAT_ID != ""
@@ -0,0 +1 @@
1
+ v14.18.2
@@ -0,0 +1,14 @@
1
+ FROM node:14.15.5-buster as builder
2
+ WORKDIR /backend/
3
+ ADD ./package.json /backend/
4
+ ADD ./package-lock.json /backend/
5
+ ADD ./tsconfig.json /backend/
6
+ ADD ./src /backend/src
7
+ RUN npm ci --production && npm cache clean --force
8
+ RUN npm run build
9
+
10
+ FROM node:14.15.5-alpine3.13
11
+ WORKDIR /backend/
12
+ COPY --chown=node:node --from=builder /backend /backend/
13
+ USER node
14
+ CMD [ "node", "dist/server.js" ]
@@ -0,0 +1,84 @@
1
+ MAKEFILE := $(abspath $(lastword $(MAKEFILE_LIST)))
2
+ ROOT_PATH := $(shell pwd)
3
+ SERVICE_NAME := <%= projectName %>
4
+
5
+ .PHONY: version name image
6
+
7
+ version-major: version-sync
8
+ @npm -s version major --no-git-tag-version
9
+
10
+ version-minor: version-sync
11
+ @npm -s version minor --no-git-tag-version
12
+
13
+ version-patch: version-sync
14
+ @npm -s version patch --no-git-tag-version
15
+
16
+ version-prerelease: version-sync
17
+ @npm -s version prerelease --preid=rc --no-git-tag-version
18
+
19
+ version-latest:
20
+ @(git tag --sort=-creatordate || echo) | awk 'NR==1 { \
21
+ split($$0, n, "-"); \
22
+ if (n[1] != "") { \
23
+ split(n[1], v, "."); \
24
+ if (v[1] ~ /^[0-9]+$$/ && v[2] ~ /^[0-9]+$$/ && v[3] ~ /^[0-9]+$$/) { \
25
+ print $$0; \
26
+ exit 0; \
27
+ } \
28
+ } \
29
+ print "1.0.0-rc.0"; \
30
+ } \
31
+ END { \
32
+ if (NR == 0) { \
33
+ print "1.0.0-rc.0"; \
34
+ } \
35
+ }'
36
+
37
+ version-sync:
38
+ @git checkout $(CI_COMMIT_BRANCH)
39
+ @git pull --tags 2&>/dev/null || true
40
+ @git tag --sort=-creatordate | head -10
41
+ @cat package.json | jq -r --arg PKG_VERSION `make --no-print-directory -f$(MAKEFILE) version-latest` '.version=$$PKG_VERSION' > package.json;
42
+ @echo -n "Current Git tag: "; cat package.json | jq -r '.version'
43
+
44
+ version:
45
+ @echo $(shell node -p "require('$(ROOT_PATH)/package.json').version")
46
+
47
+ name:
48
+ @echo $(SERVICE_NAME)
49
+
50
+ image:
51
+ @echo $(SERVICE_NAME):$(shell node -p "require('$(ROOT_PATH)/package.json').version")
52
+
53
+ test:
54
+ @npm i
55
+ @npm run -s test
56
+
57
+ spec:
58
+ @set -e -o pipefail; \
59
+ if [ -f "$(ROOT_PATH)/spec.yaml" ]; then \
60
+ make --no-print-directory -f$(MAKEFILE) spec-file > $(ROOT_PATH)/all-spec.yaml; \
61
+ openapi2postmanv2 -s $(ROOT_PATH)/all-spec.yaml -o postman-collection.json | \
62
+ awk ' \
63
+ BEGIN{ result = 0; error = "" } \
64
+ { \
65
+ if (0 < index($$0, "Conversion successful, collection written to file")) { \
66
+ result = 1; \
67
+ } \
68
+ error = error $$0; \
69
+ } \
70
+ END{ \
71
+ if (result != 1) { \
72
+ print error; \
73
+ exit(-1); \
74
+ } \
75
+ }'; \
76
+ rm -f $(ROOT_PATH)/all-spec.yaml; \
77
+ fi;
78
+
79
+ spec-file:
80
+ @cat $(ROOT_PATH)/spec.yaml;
81
+ @for file in `find $(ROOT_PATH)/src -iname "*-spec.yaml"`; do \
82
+ echo ""; \
83
+ cat $$file; \
84
+ done;
@@ -0,0 +1,71 @@
1
+ # <%= projectName %>
2
+
3
+ ### Getting Started
4
+
5
+ The service provides API endpoints for digital signature.
6
+
7
+ ### How to setup environment?
8
+
9
+ 1. Clone this repository.
10
+
11
+ 2. Change directory to the repository.
12
+
13
+ 3. Install package dependencies.
14
+ ```
15
+ npm install
16
+ ```
17
+ 4. Allow `direnv` to populate environment variables from the `.envrc` file. The `direnv` command is required to be installed.
18
+ ```
19
+ direnv allow .
20
+ ```
21
+
22
+ ### How to run unit-test?
23
+
24
+ 1. Write test cases in a `*.test.ts` file under the same folder with the actual module file. For example, module file `src/app-service.ts`, unit-test file `src/app-service.test.ts`.
25
+
26
+ 2. Run unit-test command.
27
+
28
+ - To run single module unit-test.
29
+
30
+ ```
31
+ npm run test-this src/app-service.test.ts
32
+ ```
33
+
34
+ - To run all unit-test.
35
+ ```
36
+ npm run test
37
+ ```
38
+
39
+ ### How to debug?
40
+
41
+ Please use unit-test method for debugging.
42
+
43
+ 1. Set breakpoint on the source code by pressing `F9` key.
44
+
45
+ 2. Run unit-test command with debugging.
46
+
47
+ ```
48
+ npm run debug-this src/app-service.test.ts
49
+ ```
50
+
51
+ 3. Start debugging by pressing `F5` key.
52
+
53
+ ### How to release version?
54
+
55
+ Git pipeline will perform unit-test, build container image and push to the container registry.
56
+
57
+ - Bump a `prerelease` version (E.g. `1.0.0-rc.0`).
58
+
59
+ - Write commit message that contain `run-prerelease` keyword to `feature` branch.
60
+
61
+ - Bump a `release` version (E.g. `1.0.0`).
62
+
63
+ - Merge into `default` branch (main/master) with any commit message.
64
+
65
+ > Note: **Code review** process should be perform before merge into `default` branch or release version.
66
+
67
+ ### Merge into default branch without trigger pipeline
68
+
69
+ If you want to merge into `default` branch without triggering the pipeline, write commit message that contain `run-without-release`.
70
+
71
+ chatbot: 0
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "<%= projectName %>",
3
+ "version": "1.0.0-rc.0",
4
+ "description": "API Description",
5
+ "repository": {},
6
+ "devDependencies": {
7
+ "@types/chai": "^4.3.0",
8
+ "@types/sinon": "^10.0.6",
9
+ "chai": "^4.3.4",
10
+ "dotenv": "^8.2.0",
11
+ "mocha": "^9.1.3",
12
+ "sinon": "^12.0.1",
13
+ "ts-node": "^10.4.0",
14
+ "tsconfig-paths": "^3.12.0"
15
+ },
16
+ "dependencies": {
17
+ "@types/body-parser": "^1.19.2",
18
+ "@types/cors": "^2.8.12",
19
+ "@types/express": "^4.17.13",
20
+ "@types/jsonwebtoken": "^9.0.0",
21
+ "@types/multer": "^1.4.7",
22
+ "@types/node": "^14.18.2",
23
+ "@types/response-time": "^2.3.5",
24
+ "body-parser": "^1.19.1",
25
+ "cors": "^2.8.5",
26
+ "express": "^4.17.2",
27
+ "form-data": "^3.0.1",
28
+ "jsonwebtoken": "^9.0.0",
29
+ "multer": "1.4.4-lts.1",
30
+ "mxw-libs-api-token": "^1.0.13",
31
+ "mxw-libs-clogger": "^1.0.0",
32
+ "mxw-libs-database": "^1.0.19",
33
+ "mxw-libs-email-notify": "^1.0.6",
34
+ "mxw-libs-errors": "^1.0.5",
35
+ "mxw-libs-push-notify": "^1.0.5",
36
+ "mxw-libs-utils": "^1.0.35",
37
+ "process": "^0.11.10",
38
+ "response-time": "^2.3.2",
39
+ "streamifier": "^0.1.1",
40
+ "typescript": "^4.5.4"
41
+ },
42
+ "scripts": {
43
+ "build": "npm run build-ts",
44
+ "build-ts": "tsc",
45
+ "dev": "npm run build && NODE_ENV=local node dist/server.js",
46
+ "start": "node dist/server.js",
47
+ "test": "mocha --recursive --timeout 30000 -r tsconfig-paths/register -r ts-node/register src/**/*.test.ts src/**/**/*.test.ts src/**/**/**/*.test.ts",
48
+ "test-this": "mocha --recursive --timeout 30000 -r tsconfig-paths/register -r ts-node/register",
49
+ "debug": "tsc && node --inspect-brk=0.0.0.0:9229 dist/server.js",
50
+ "debug-this": "npm run build && mocha --inspect-brk=0.0.0.0:9229 --timeout 3000000 -r ts-node/register"
51
+ },
52
+ "keywords": [],
53
+ "author": "",
54
+ "license": "ISC"
55
+ }
@@ -0,0 +1,94 @@
1
+ 'use strict';
2
+
3
+ import { describe, it, beforeEach, afterEach } from 'mocha';
4
+ import { expect } from 'chai';
5
+ import Sinon from "sinon";
6
+ import AppService from './app-service';
7
+
8
+ let sandbox: Sinon.SinonSandbox;
9
+
10
+ describe('Suite: Endpoint - App Service', () => {
11
+ beforeEach(() => {
12
+ sandbox = Sinon.createSandbox();
13
+ });
14
+
15
+ afterEach(() => {
16
+ if (sandbox) {
17
+ sandbox.restore();
18
+ sandbox = undefined;
19
+ }
20
+ });
21
+
22
+ describe("Initialization", async () => {
23
+ it("Initialize service", async () => {
24
+ sandbox.stub(process, "env").get(() => {
25
+ return {
26
+ JWT_SECRET: "secret",
27
+
28
+ SERVICE_DOMAIN: "default",
29
+ SERVICE_SESSION_TIMEOUT: 6000,
30
+ SERVICE_WALLET_JSON: "hello",
31
+ SERVICE_WALLET_PASSWORD: "world",
32
+
33
+ MYSQL_URL: "hello mysql",
34
+
35
+ CACHE_DIR: null,
36
+ MAX_FILE_SIZE: null,
37
+
38
+ MAX_REQUEST: 100
39
+ };
40
+ });
41
+
42
+ const instance = await AppService.init();
43
+
44
+ expect(instance).is.instanceOf(AppService);
45
+ expect(AppService.Instance).is.instanceOf(AppService);
46
+ });
47
+ });
48
+
49
+ describe("GET /readiness", async () => {
50
+ it("Service is ready", async () => {
51
+ const req: any = {
52
+ query: {}
53
+ };
54
+ const res: any = {
55
+ json: () => { }
56
+ };
57
+
58
+ const stubRes = sandbox.stub(res, "json").callsFake((body: any) => {
59
+ // console.log(JSON.stringify(body, null, 2));
60
+ expect(body).is.undefined;
61
+ });
62
+
63
+ await AppService.Instance["onReadiness"](req, res);
64
+
65
+ Sinon.assert.calledOnce(stubRes);
66
+ });
67
+ });
68
+
69
+ describe("GET /liveness", async () => {
70
+ it("Service is alive", async () => {
71
+ const req: any = {
72
+ query: {}
73
+ };
74
+ const res: any = {
75
+ json: () => { }
76
+ };
77
+
78
+ const stubRes = sandbox.stub(res, "json").callsFake((body: any) => {
79
+ // console.log(JSON.stringify(body, null, 2));
80
+ expect(body).is.undefined;
81
+ });
82
+
83
+ await AppService.Instance["onLiveness"](req, res);
84
+
85
+ Sinon.assert.calledOnce(stubRes);
86
+ });
87
+ });
88
+
89
+ describe("Termination", async () => {
90
+ it("Terminate service", async () => {
91
+ await AppService.term();
92
+ });
93
+ });
94
+ });