cc-core-cli 1.0.130 → 1.0.133

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 (154) hide show
  1. package/bin/index.js +6 -6
  2. package/package.json +1 -1
  3. package/template/admin_v3/Dockerfile +15 -0
  4. package/template/admin_v3/README.md +1 -0
  5. package/template/admin_v3/_env +10 -0
  6. package/template/admin_v3/_gitignore +5 -0
  7. package/template/admin_v3/_npmrc +1 -0
  8. package/template/admin_v3/docker-compose.yml +11 -0
  9. package/template/admin_v3/next-env.d.ts +5 -0
  10. package/template/admin_v3/package.json +37 -0
  11. package/template/admin_v3/postcss.config.js +6 -0
  12. package/template/admin_v3/public/images/component/barchart.svg +20 -0
  13. package/template/admin_v3/public/images/component/bubble_chart.svg +17 -0
  14. package/template/admin_v3/public/images/component/button.svg +17 -0
  15. package/template/admin_v3/public/images/component/calendar.svg +63 -0
  16. package/template/admin_v3/public/images/component/checkbox.svg +25 -0
  17. package/template/admin_v3/public/images/component/color_picker.svg +25 -0
  18. package/template/admin_v3/public/images/component/cron_tab.svg +33 -0
  19. package/template/admin_v3/public/images/component/currency.svg +34 -0
  20. package/template/admin_v3/public/images/component/custom_fields.svg +34 -0
  21. package/template/admin_v3/public/images/component/data_table.svg +101 -0
  22. package/template/admin_v3/public/images/component/date_picker.svg +47 -0
  23. package/template/admin_v3/public/images/component/donut.svg +23 -0
  24. package/template/admin_v3/public/images/component/edit_table.svg +96 -0
  25. package/template/admin_v3/public/images/component/entity_field.svg +36 -0
  26. package/template/admin_v3/public/images/component/entity_layout.svg +40 -0
  27. package/template/admin_v3/public/images/component/entity_list.svg +88 -0
  28. package/template/admin_v3/public/images/component/file.svg +36 -0
  29. package/template/admin_v3/public/images/component/hidden_field.svg +34 -0
  30. package/template/admin_v3/public/images/component/image.svg +38 -0
  31. package/template/admin_v3/public/images/component/input.svg +34 -0
  32. package/template/admin_v3/public/images/component/input_icon.svg +13 -0
  33. package/template/admin_v3/public/images/component/input_number.svg +34 -0
  34. package/template/admin_v3/public/images/component/input_translate.svg +47 -0
  35. package/template/admin_v3/public/images/component/json.svg +31 -0
  36. package/template/admin_v3/public/images/component/label.svg +11 -0
  37. package/template/admin_v3/public/images/component/line_chart.svg +19 -0
  38. package/template/admin_v3/public/images/component/matrix_table.svg +34 -0
  39. package/template/admin_v3/public/images/component/mixed_chart.svg +25 -0
  40. package/template/admin_v3/public/images/component/polar_chart.svg +33 -0
  41. package/template/admin_v3/public/images/component/radio.svg +24 -0
  42. package/template/admin_v3/public/images/component/redar_chart.svg +17 -0
  43. package/template/admin_v3/public/images/component/scatter_chart.svg +25 -0
  44. package/template/admin_v3/public/images/component/select.svg +34 -0
  45. package/template/admin_v3/public/images/component/summary_box.svg +31 -0
  46. package/template/admin_v3/public/images/component/switch.svg +12 -0
  47. package/template/admin_v3/public/images/component/translate.svg +35 -0
  48. package/template/admin_v3/public/images/component/tree.svg +78 -0
  49. package/template/admin_v3/public/images/default-profile.png +0 -0
  50. package/template/admin_v3/public/images/empty-data.png +0 -0
  51. package/template/admin_v3/public/images/file.png +0 -0
  52. package/template/admin_v3/public/images/forgot-step-1.png +0 -0
  53. package/template/admin_v3/public/images/forgot-step-2.png +0 -0
  54. package/template/admin_v3/public/images/forgot-step-3.png +0 -0
  55. package/template/admin_v3/public/images/form.png +0 -0
  56. package/template/admin_v3/public/images/info-panel.png +0 -0
  57. package/template/admin_v3/public/images/panel.png +0 -0
  58. package/template/admin_v3/public/images/split.svg +1 -0
  59. package/template/admin_v3/public/images/stack.png +0 -0
  60. package/template/admin_v3/public/images/type-all.png +0 -0
  61. package/template/admin_v3/public/images/type-boolean.png +0 -0
  62. package/template/admin_v3/public/images/type-date.png +0 -0
  63. package/template/admin_v3/public/images/type-file.png +0 -0
  64. package/template/admin_v3/public/images/type-image.png +0 -0
  65. package/template/admin_v3/public/images/type-json.png +0 -0
  66. package/template/admin_v3/public/images/type-number.png +0 -0
  67. package/template/admin_v3/public/images/type-options.png +0 -0
  68. package/template/admin_v3/public/images/type-password.png +0 -0
  69. package/template/admin_v3/public/images/type-related.png +0 -0
  70. package/template/admin_v3/public/images/type-string.png +0 -0
  71. package/template/admin_v3/public/images/type-trash.png +0 -0
  72. package/template/admin_v3/public/images/type-unknown.png +0 -0
  73. package/template/admin_v3/public/images/upload.png +0 -0
  74. package/template/admin_v3/public/private-image-worker.js +24 -0
  75. package/template/admin_v3/src/pages/[...url_key].tsx +9 -0
  76. package/template/admin_v3/src/pages/_app.tsx +22 -0
  77. package/template/admin_v3/src/pages/activate.tsx +9 -0
  78. package/template/admin_v3/src/pages/api/auth/activate_account/confirm.ts +13 -0
  79. package/template/admin_v3/src/pages/api/auth/activate_account/index.ts +13 -0
  80. package/template/admin_v3/src/pages/api/auth/activate_account/resend.ts +13 -0
  81. package/template/admin_v3/src/pages/api/auth/activate_account/set_password.ts +17 -0
  82. package/template/admin_v3/src/pages/api/auth/authen/confirm.ts +24 -0
  83. package/template/admin_v3/src/pages/api/auth/authen/resend.ts +13 -0
  84. package/template/admin_v3/src/pages/api/auth/callback/index.ts +24 -0
  85. package/template/admin_v3/src/pages/api/auth/forgot_password/confirm.ts +13 -0
  86. package/template/admin_v3/src/pages/api/auth/forgot_password/index.ts +13 -0
  87. package/template/admin_v3/src/pages/api/auth/forgot_password/resend.ts +13 -0
  88. package/template/admin_v3/src/pages/api/auth/forgot_password/reset.ts +17 -0
  89. package/template/admin_v3/src/pages/api/auth/login.ts +24 -0
  90. package/template/admin_v3/src/pages/api/auth/logout.ts +30 -0
  91. package/template/admin_v3/src/pages/api/custom/[...path].ts +16 -0
  92. package/template/admin_v3/src/pages/api/download.ts +79 -0
  93. package/template/admin_v3/src/pages/api/entity/[entity]/[id].ts +46 -0
  94. package/template/admin_v3/src/pages/api/entity/[entity]/delete.ts +18 -0
  95. package/template/admin_v3/src/pages/api/entity/[entity]/find.ts +17 -0
  96. package/template/admin_v3/src/pages/api/entity/[entity]/index.ts +30 -0
  97. package/template/admin_v3/src/pages/api/entity/[entity]/update.ts +18 -0
  98. package/template/admin_v3/src/pages/api/entity/approve/[entity]/[id].ts +19 -0
  99. package/template/admin_v3/src/pages/api/entity/schema/[entity]/index.ts +27 -0
  100. package/template/admin_v3/src/pages/api/entity/schema/[entity]/relate.ts +16 -0
  101. package/template/admin_v3/src/pages/api/entity/schema/index.ts +27 -0
  102. package/template/admin_v3/src/pages/api/import_export/example/index.ts +13 -0
  103. package/template/admin_v3/src/pages/api/import_export/execute/index.ts +13 -0
  104. package/template/admin_v3/src/pages/api/import_export/export/index.ts +13 -0
  105. package/template/admin_v3/src/pages/api/import_export/import/index.ts +13 -0
  106. package/template/admin_v3/src/pages/api/import_export/progresses/index.ts +13 -0
  107. package/template/admin_v3/src/pages/api/import_export/verify_progress/index.ts +13 -0
  108. package/template/admin_v3/src/pages/api/language/set.ts +15 -0
  109. package/template/admin_v3/src/pages/api/media/private.ts +49 -0
  110. package/template/admin_v3/src/pages/api/queue/[queue]/count.ts +17 -0
  111. package/template/admin_v3/src/pages/api/queue/[queue]/flush.ts +17 -0
  112. package/template/admin_v3/src/pages/api/queue/[queue]/flushall.ts +16 -0
  113. package/template/admin_v3/src/pages/api/queue/[queue]/index.ts +20 -0
  114. package/template/admin_v3/src/pages/api/queue/index.ts +13 -0
  115. package/template/admin_v3/src/pages/api/redis/[connect]/index.ts +0 -0
  116. package/template/admin_v3/src/pages/api/redis/index.ts +0 -0
  117. package/template/admin_v3/src/pages/api/setting/[code].ts +21 -0
  118. package/template/admin_v3/src/pages/api/system/config.ts +13 -0
  119. package/template/admin_v3/src/pages/api/system/data_source/[code].ts +17 -0
  120. package/template/admin_v3/src/pages/api/system/endpoint/[method].ts +17 -0
  121. package/template/admin_v3/src/pages/api/system/queue.ts +13 -0
  122. package/template/admin_v3/src/pages/api/system/role.ts +13 -0
  123. package/template/admin_v3/src/pages/api/user/change_password.ts +13 -0
  124. package/template/admin_v3/src/pages/api/user/filter/index.ts +13 -0
  125. package/template/admin_v3/src/pages/api/user/me.ts +24 -0
  126. package/template/admin_v3/src/pages/api/user/register.ts +13 -0
  127. package/template/admin_v3/src/pages/callback/[channel].tsx +9 -0
  128. package/template/admin_v3/src/pages/entity/[entity]/[layout]/[id].tsx +17 -0
  129. package/template/admin_v3/src/pages/entity/[entity]/[layout]/index.tsx +19 -0
  130. package/template/admin_v3/src/pages/forgot_password.tsx +9 -0
  131. package/template/admin_v3/src/pages/index.tsx +7 -0
  132. package/template/admin_v3/src/pages/login.tsx +9 -0
  133. package/template/admin_v3/src/pages/profile.tsx +9 -0
  134. package/template/admin_v3/src/pages/register.tsx +9 -0
  135. package/template/admin_v3/src/pages/setting/entities/[key].tsx +10 -0
  136. package/template/admin_v3/src/pages/setting/entities/index.tsx +10 -0
  137. package/template/admin_v3/src/pages/setting/module/[module]/[layout].tsx +16 -0
  138. package/template/admin_v3/src/pages/setting/modules.tsx +10 -0
  139. package/template/admin_v3/src/styles/global.css +101 -0
  140. package/template/admin_v3/src/styles/workflow.css +40 -0
  141. package/template/admin_v3/src/utils/color.ts +88 -0
  142. package/template/admin_v3/tailwind.config.js +57 -0
  143. package/template/admin_v3/tsconfig.json +36 -0
  144. package/template/core/_gitignore +4 -0
  145. package/template/core/buildspec.yml +29 -0
  146. package/template/core/jest.config.js +43 -0
  147. package/template/core/package.json +14 -2
  148. package/template/core/sonar-project.properties +27 -0
  149. package/template/core/test/__mocks__/cc-core-lib.d.ts +161 -0
  150. package/template/core/test/__mocks__/cc-core-lib.js +311 -0
  151. package/template/core/test/__mocks__/pdf-img-convert.js +5 -0
  152. package/template/core/test/jest.setup.ts +25 -0
  153. package/template/core/tsconfig.json +13 -13
  154. package/template/core/tsconfig.test.json +17 -0
@@ -0,0 +1,78 @@
1
+ <svg width="73" height="49" viewBox="0 0 73 49" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_3669_28569)">
3
+ <rect width="73" height="49" rx="4" fill="#F5F5F7"/>
4
+ <g filter="url(#filter0_d_3669_28569)">
5
+ <path d="M72 4H12C9.79086 4 8 5.79086 8 8V15C8 17.2091 9.79086 19 12 19H72V4Z" fill="url(#paint0_linear_3669_28569)"/>
6
+ <path d="M12 4.25C9.92893 4.25 8.25 5.92893 8.25 8V15C8.25 17.0711 9.92893 18.75 12 18.75H71.75V4.25H12Z" stroke="url(#paint1_linear_3669_28569)" stroke-width="0.5"/>
7
+ </g>
8
+ <g filter="url(#filter1_d_3669_28569)">
9
+ <path d="M72 22H26C23.7909 22 22 23.7909 22 26V33C22 35.2091 23.7909 37 26 37H72V22Z" fill="url(#paint2_linear_3669_28569)"/>
10
+ <path d="M26 22.25C23.9289 22.25 22.25 23.9289 22.25 26V33C22.25 35.0711 23.9289 36.75 26 36.75H71.75V22.25H26Z" stroke="url(#paint3_linear_3669_28569)" stroke-width="0.5"/>
11
+ </g>
12
+ <path d="M15 19V43C15 44.1046 15.8954 45 17 45H22" stroke="#DAE1EB"/>
13
+ <path d="M15 19V28C15 29.1046 15.8954 30 17 30H22" stroke="#DAE1EB"/>
14
+ <g filter="url(#filter2_d_3669_28569)">
15
+ <path d="M69 40H26C23.7909 40 22 41.7909 22 44V49H69V40Z" fill="url(#paint4_linear_3669_28569)"/>
16
+ <path d="M26 40.25C23.9289 40.25 22.25 41.9289 22.25 44V48.75H68.75V40.25H26Z" stroke="url(#paint5_linear_3669_28569)" stroke-width="0.5"/>
17
+ </g>
18
+ </g>
19
+ <defs>
20
+ <filter id="filter0_d_3669_28569" x="4" y="4" width="72" height="23" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
21
+ <feFlood flood-opacity="0" result="BackgroundImageFix"/>
22
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
23
+ <feOffset dy="4"/>
24
+ <feGaussianBlur stdDeviation="2"/>
25
+ <feComposite in2="hardAlpha" operator="out"/>
26
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05 0"/>
27
+ <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_3669_28569"/>
28
+ <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_3669_28569" result="shape"/>
29
+ </filter>
30
+ <filter id="filter1_d_3669_28569" x="18" y="22" width="58" height="23" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
31
+ <feFlood flood-opacity="0" result="BackgroundImageFix"/>
32
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
33
+ <feOffset dy="4"/>
34
+ <feGaussianBlur stdDeviation="2"/>
35
+ <feComposite in2="hardAlpha" operator="out"/>
36
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05 0"/>
37
+ <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_3669_28569"/>
38
+ <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_3669_28569" result="shape"/>
39
+ </filter>
40
+ <filter id="filter2_d_3669_28569" x="18" y="40" width="55" height="17" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
41
+ <feFlood flood-opacity="0" result="BackgroundImageFix"/>
42
+ <feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
43
+ <feOffset dy="4"/>
44
+ <feGaussianBlur stdDeviation="2"/>
45
+ <feComposite in2="hardAlpha" operator="out"/>
46
+ <feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.05 0"/>
47
+ <feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_3669_28569"/>
48
+ <feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_3669_28569" result="shape"/>
49
+ </filter>
50
+ <linearGradient id="paint0_linear_3669_28569" x1="8" y1="11.5" x2="72" y2="11.5" gradientUnits="userSpaceOnUse">
51
+ <stop offset="0.620192" stop-color="white"/>
52
+ <stop offset="1" stop-color="#F5F5F7"/>
53
+ </linearGradient>
54
+ <linearGradient id="paint1_linear_3669_28569" x1="8" y1="11.5" x2="72" y2="11.5" gradientUnits="userSpaceOnUse">
55
+ <stop stop-color="#DAE1EB"/>
56
+ <stop offset="1" stop-color="#F5F5F7"/>
57
+ </linearGradient>
58
+ <linearGradient id="paint2_linear_3669_28569" x1="22" y1="29.5" x2="72" y2="29.5" gradientUnits="userSpaceOnUse">
59
+ <stop offset="0.620192" stop-color="white"/>
60
+ <stop offset="1" stop-color="#F5F5F7"/>
61
+ </linearGradient>
62
+ <linearGradient id="paint3_linear_3669_28569" x1="22" y1="29.5" x2="72" y2="29.5" gradientUnits="userSpaceOnUse">
63
+ <stop stop-color="#DAE1EB"/>
64
+ <stop offset="1" stop-color="#F5F5F7"/>
65
+ </linearGradient>
66
+ <linearGradient id="paint4_linear_3669_28569" x1="22" y1="44.5" x2="69" y2="44.5" gradientUnits="userSpaceOnUse">
67
+ <stop offset="0.620192" stop-color="white"/>
68
+ <stop offset="1" stop-color="#F5F5F7"/>
69
+ </linearGradient>
70
+ <linearGradient id="paint5_linear_3669_28569" x1="22" y1="44.5" x2="69" y2="44.5" gradientUnits="userSpaceOnUse">
71
+ <stop stop-color="#DAE1EB"/>
72
+ <stop offset="1" stop-color="#F5F5F7"/>
73
+ </linearGradient>
74
+ <clipPath id="clip0_3669_28569">
75
+ <rect width="73" height="49" rx="4" fill="white"/>
76
+ </clipPath>
77
+ </defs>
78
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="512" height="512" x="0" y="0" viewBox="0 0 682.667 682.667" style="enable-background:new 0 0 512 512" xml:space="preserve" class=""><g transform="matrix(-1,-1.2246467991473532e-16,1.2246467991473532e-16,-1,682.6649284362793,682.6689567565918)"><defs><clipPath id="a" clipPathUnits="userSpaceOnUse"><path d="M0 512h512V0H0Z" fill="#000000" opacity="1" data-original="#000000"></path></clipPath></defs><g clip-path="url(#a)" transform="matrix(1.33333 0 0 -1.33333 0 682.667)"><path d="m0 0-53.787 54.144c-11.716 11.808-30.71 11.808-42.426 0L-150 1" style="stroke-width:40;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" transform="translate(170 429)" fill="none" stroke="#000000" stroke-width="40" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-dasharray="none" stroke-opacity="" data-original="#000000"></path><path d="m0 0-52.787 53.144c-11.716 11.808-30.71 11.808-42.426 0L-148 1" style="stroke-width:40;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" transform="translate(492 430)" fill="none" stroke="#000000" stroke-width="40" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-dasharray="none" stroke-opacity="" data-original="#000000"></path><path d="M0 0v85.231c-.124 34.801-14.588 67.849-40.884 90.643l-78.536 68.081A120.53 120.53 0 0 0-161 335.028V458" style="stroke-width:40;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" transform="translate(256 20)" fill="none" stroke="#000000" stroke-width="40" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-dasharray="none" stroke-opacity="" data-original="#000000"></path><path d="m0 0 68.42 59.312A120.529 120.529 0 0 1 110 150.385v122.971" style="stroke-width:40;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" transform="translate(308 204.644)" fill="none" stroke="#000000" stroke-width="40" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-dasharray="none" stroke-opacity="" data-original="#000000"></path></g></g></svg>
@@ -0,0 +1,24 @@
1
+ self.addEventListener('activate', event => {
2
+ event.waitUntil(self.clients.claim());
3
+ });
4
+
5
+ self.addEventListener('fetch', event => {
6
+ const privateHost = new URL(self.serviceWorker.scriptURL).searchParams.get('host');
7
+
8
+ if (!event.request.url.startsWith(privateHost)) {
9
+ return;
10
+ }
11
+
12
+ event.respondWith(modifyAPIResponse(event.request));
13
+ });
14
+
15
+ async function modifyAPIResponse(request) {
16
+ const imageLink = request.url;
17
+ request = new Request(`/api/media/private?url=${encodeURIComponent(imageLink)}`, {
18
+ method: 'GET',
19
+ headers: request.headers,
20
+ mode: 'same-origin',
21
+ credentials: 'include',
22
+ });
23
+ return await fetch(request);
24
+ }
@@ -0,0 +1,9 @@
1
+ import { Page } from '@shopstack/cs-admin-lib';
2
+
3
+ const UrlKey = () => {
4
+ return (
5
+ <Page />
6
+ )
7
+ }
8
+
9
+ export default UrlKey
@@ -0,0 +1,22 @@
1
+ import { MyAppComponent } from '@shopstack/cs-admin-lib';
2
+ import { getInitProps } from '@shopstack/cs-admin-lib/server'
3
+ import '../styles/global.css';
4
+ import { Prompt, Sarabun } from 'next/font/google';
5
+
6
+ const prompt = Prompt({
7
+ subsets: ["thai", "latin"],
8
+ weight: ["100", "200", "300", "400", "500", "600", "700", "800", "900"],
9
+ });
10
+
11
+ const sarabun = Sarabun({
12
+ subsets: ["thai", "latin"],
13
+ weight: ["100", "200", "300", "400", "500", "600", "700", "800"],
14
+ });
15
+
16
+ function AppComponent({ Component, pageProps }) {
17
+ return <MyAppComponent Component={Component} pageProps={pageProps} fonts={{ prompt, sarabun }} />
18
+ }
19
+
20
+ AppComponent.getInitialProps = getInitProps
21
+
22
+ export default AppComponent
@@ -0,0 +1,9 @@
1
+ import { ActivateAccountForm } from '@shopstack/cs-admin-lib';
2
+
3
+ const ActivateAccountPage = () => {
4
+ return (
5
+ <ActivateAccountForm />
6
+ )
7
+ }
8
+
9
+ export default ActivateAccountPage
@@ -0,0 +1,13 @@
1
+ import { requestConfirmOtpActivateAccount } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'PUT') {
6
+ try {
7
+ const result = await requestConfirmOtpActivateAccount(req.body, {})
8
+ return res.status(200).json(result)
9
+ } catch (e) {
10
+ return res.status(e.status).json(e.error)
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ import { requestActivateAccount } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'PUT') {
6
+ try {
7
+ const result = await requestActivateAccount(req.body, {})
8
+ return res.status(200).json(result)
9
+ } catch (e) {
10
+ return res.status(e.status).json(e.error)
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ import { requestResendOtpActivateAccount } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'PUT') {
6
+ try {
7
+ const result = await requestResendOtpActivateAccount(req.body, {})
8
+ return res.status(200).json(result)
9
+ } catch (e) {
10
+ return res.status(e.status).json(e.error)
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,17 @@
1
+ import _isString from 'lodash/isString'
2
+ import { requestSetNewPassword } from '@shopstack/cs-admin-lib/server'
3
+ import { NextApiRequest, NextApiResponse } from "next";
4
+
5
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
6
+ if (req.method === 'POST') {
7
+ try {
8
+ const result = await requestSetNewPassword(req.body, {})
9
+ return res.status(200).json(result)
10
+ } catch (e) {
11
+ if (_isString(e.error)) {
12
+ return res.status(500).json({ message: e.error })
13
+ }
14
+ return res.status(500).json(e.error)
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,24 @@
1
+ import { requestConfirmAuthenOtp, getHeadersFromRequest } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+ import Cookies from 'cookies'
4
+
5
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
6
+ if (req.method === 'POST') {
7
+ try {
8
+ const result = await requestConfirmAuthenOtp(req.body, getHeadersFromRequest(req))
9
+ const cookies = new Cookies(req, res)
10
+ if (result?.['token']) {
11
+ cookies.set('token', result['token'], {
12
+ path: '/',
13
+ sameSite: process.env.COOKIE_SAME_SITE || 'lax',
14
+ secure: process.env.COOKIE_SECURE === 'true',
15
+ httpOnly: process.env.COOKIE_HTTP_ONLY === 'true',
16
+ maxAge: result['expires'] * 1000
17
+ })
18
+ }
19
+ return res.status(200).json(result)
20
+ } catch (e) {
21
+ return res.status(e.status).json(e.error)
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,13 @@
1
+ import { requestResendAuthenOtp } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'POST') {
6
+ try {
7
+ const result = await requestResendAuthenOtp(req.body, {})
8
+ return res.status(200).json(result)
9
+ } catch (e) {
10
+ return res.status(e.status).json(e.error)
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,24 @@
1
+ import { requestLoginCallback } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+ import Cookies from 'cookies'
4
+
5
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
6
+ if (req.method === 'POST') {
7
+ try {
8
+ const result = await requestLoginCallback(req.query.channel, req.body, {})
9
+ const cookies = new Cookies(req, res)
10
+ if (result?.['token']) {
11
+ cookies.set('token', result['token'], {
12
+ path: '/',
13
+ sameSite: process.env.COOKIE_SAME_SITE || 'lax',
14
+ secure: process.env.COOKIE_SECURE === 'true',
15
+ httpOnly: process.env.COOKIE_HTTP_ONLY === 'true',
16
+ maxAge: result['expires'] * 1000
17
+ })
18
+ }
19
+ return res.status(200).json(result)
20
+ } catch (e) {
21
+ return res.status(e.status).json(e.error)
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,13 @@
1
+ import { requestConfirmForgotPasswordOtp } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'PATCH') {
6
+ try {
7
+ const result = await requestConfirmForgotPasswordOtp(req.body, {})
8
+ return res.status(200).json(result)
9
+ } catch (e) {
10
+ return res.status(e.status).json(e.error)
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ import { requestForgotPassword } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'POST') {
6
+ try {
7
+ const result = await requestForgotPassword(req.body, {})
8
+ return res.status(200).json(result)
9
+ } catch (e) {
10
+ return res.status(e.status).json(e.error)
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,13 @@
1
+ import { requestResendOtpForgotPassword } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'PATCH') {
6
+ try {
7
+ const result = await requestResendOtpForgotPassword(req.body, {})
8
+ return res.status(200).json(result)
9
+ } catch (e) {
10
+ return res.status(e.status).json(e.error)
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,17 @@
1
+ import _isString from 'lodash/isString'
2
+ import { requestResetPassword } from '@shopstack/cs-admin-lib/server'
3
+ import { NextApiRequest, NextApiResponse } from "next";
4
+
5
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
6
+ if (req.method === 'POST') {
7
+ try {
8
+ const result = await requestResetPassword(req.body, {})
9
+ return res.status(200).json(result)
10
+ } catch (e) {
11
+ if (_isString(e.error)) {
12
+ return res.status(500).json({ message: e.error })
13
+ }
14
+ return res.status(500).json(e.error)
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,24 @@
1
+ import { requestLogin, getHeadersFromRequest } from '@shopstack/cs-admin-lib/server'
2
+ import Cookies from 'cookies'
3
+ import { NextApiRequest, NextApiResponse } from "next";
4
+
5
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
6
+ if (req.method === 'POST') {
7
+ try {
8
+ const result = await requestLogin(req.body, getHeadersFromRequest(req))
9
+ const cookies = new Cookies(req, res)
10
+ if (result?.['token']) {
11
+ cookies.set('token', result['token'], {
12
+ path: '/',
13
+ sameSite: process.env.COOKIE_SAME_SITE || 'lax',
14
+ secure: process.env.COOKIE_SECURE === 'true',
15
+ httpOnly: process.env.COOKIE_HTTP_ONLY === 'true',
16
+ maxAge: result['expires'] * 1000
17
+ })
18
+ }
19
+ return res.status(200).json(result)
20
+ } catch (e) {
21
+ return res.status(e.status || 500).json(e.error || e.message)
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,30 @@
1
+ import { requestLogout, getHeadersFromRequest } from '@shopstack/cs-admin-lib/server'
2
+ import Cookies from 'cookies'
3
+ import { NextApiRequest, NextApiResponse } from "next";
4
+
5
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
6
+ if (req.method === 'POST') {
7
+ try {
8
+ const result = await requestLogout(getHeadersFromRequest(req))
9
+ const cookies = new Cookies(req, res)
10
+ cookies.set('token', '', {
11
+ path: '/',
12
+ sameSite: process.env.COOKIE_SAME_SITE || 'lax',
13
+ secure: process.env.COOKIE_SECURE === 'true',
14
+ httpOnly: process.env.COOKIE_HTTP_ONLY === 'true',
15
+ maxAge: 0
16
+ })
17
+ return res.status(200).json(result)
18
+ } catch (e) {
19
+ const cookies = new Cookies(req, res)
20
+ cookies.set('token', '', {
21
+ path: '/',
22
+ sameSite: process.env.COOKIE_SAME_SITE || 'lax',
23
+ secure: process.env.COOKIE_SECURE === 'true',
24
+ httpOnly: process.env.COOKIE_HTTP_ONLY === 'true',
25
+ maxAge: 0
26
+ })
27
+ return res.status(e.status).json(e.error)
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,16 @@
1
+ import { requestCustomEndpoint, getHeadersFromRequest } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ try {
6
+ const result = await requestCustomEndpoint(
7
+ (req.query.path as string[]).join('/'),
8
+ req.method,
9
+ req.body,
10
+ getHeadersFromRequest(req)
11
+ )
12
+ return res.status(200).json(result)
13
+ } catch (e) {
14
+ return res.status(e.status).json(e.error)
15
+ }
16
+ }
@@ -0,0 +1,79 @@
1
+ import type { NextApiRequest, NextApiResponse } from 'next';
2
+ import Cookies from 'cookies';
3
+
4
+ export default async function handler(req: NextApiRequest, res: NextApiResponse) {
5
+ if (req.method !== 'GET') {
6
+ return res.status(405).json({ message: 'Method not allowed' });
7
+ }
8
+
9
+ const { id } = req.query;
10
+ if (!id || typeof id !== 'string') {
11
+ return res.status(400).json({ message: 'Missing or invalid file ID' });
12
+ }
13
+
14
+ const cookies = new Cookies(req)
15
+ const token = cookies.get('token');
16
+
17
+ const userAgent = req.headers['user-agent'] || '';
18
+ const clientIp =
19
+ (req.headers['x-forwarded-for'] as string)?.split(',')[0] ||
20
+ req.socket.remoteAddress ||
21
+ '';
22
+
23
+ try {
24
+ const apiUrl = `${process.env.API_GATEWAY}/attachment/stream/${encodeURIComponent(id)}`;
25
+
26
+ const response = await fetch(apiUrl, {
27
+ headers: {
28
+ Authorization: `Bearer ${token}`,
29
+ 'X-Client-IP': clientIp === '::1' ? '127.0.0.1' : clientIp,
30
+ 'User-Agent': userAgent,
31
+ },
32
+ });
33
+
34
+ if (!response.ok || !response.body) {
35
+ return res.status(response.status).json({ message: 'Error fetching file' });
36
+ }
37
+
38
+ // Forward headers
39
+ res.setHeader(
40
+ 'Content-Disposition',
41
+ response.headers.get('content-disposition') || `attachment; filename="${id}"`
42
+ );
43
+ res.setHeader(
44
+ 'Content-Type',
45
+ response.headers.get('content-type') || 'application/octet-stream'
46
+ );
47
+
48
+ // Pipe fetch response to Next.js response
49
+ const reader = response.body.getReader();
50
+
51
+ const stream = new ReadableStream({
52
+ async pull(controller) {
53
+ const { done, value } = await reader.read();
54
+ if (done) {
55
+ controller.close();
56
+ } else {
57
+ controller.enqueue(value);
58
+ }
59
+ },
60
+ });
61
+
62
+ const streamResponse = new Response(stream);
63
+ const body = streamResponse.body;
64
+
65
+ if (body) {
66
+ body.pipeTo(new WritableStream({
67
+ write(chunk) {
68
+ res.write(Buffer.from(chunk));
69
+ },
70
+ close() {
71
+ res.end();
72
+ },
73
+ }));
74
+ }
75
+ } catch (err: any) {
76
+ console.error('Download error:', err?.message || err);
77
+ res.status(500).json({ message: 'Error downloading file' });
78
+ }
79
+ }
@@ -0,0 +1,46 @@
1
+ import { requestDelete, requestGet, requestUpdate, getHeadersFromRequest } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'GET') {
6
+ try {
7
+ const result = await requestGet(
8
+ req.query.entity as string,
9
+ req.query as any,
10
+ getHeadersFromRequest(req)
11
+ )
12
+ return res.status(200).json(result)
13
+ } catch (e) {
14
+ return res.status(e.status).json(e.error)
15
+ }
16
+ }
17
+
18
+ if (req.method == 'PUT') {
19
+ try {
20
+ const result = await requestUpdate(
21
+ req.query.entity as string,
22
+ req.query.id as string,
23
+ req.body,
24
+ req.query.system as string,
25
+ getHeadersFromRequest(req)
26
+ )
27
+ return res.status(200).json(result)
28
+ } catch (e) {
29
+ return res.status(e.status).json(e.error)
30
+ }
31
+ }
32
+
33
+ if (req.method == 'DELETE') {
34
+ try {
35
+ const result = await requestDelete(
36
+ req.query.entity as string,
37
+ req.query.id as string,
38
+ req.query.system as string,
39
+ getHeadersFromRequest(req)
40
+ )
41
+ return res.status(200).json(result)
42
+ } catch (e) {
43
+ return res.status(e.status).json(e.error)
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,18 @@
1
+ import { requestBulkDeleteList, getHeadersFromRequest } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method == 'POST') {
6
+ try {
7
+ const result = await requestBulkDeleteList(
8
+ req.query.entity as string,
9
+ req.body,
10
+ req.query.system as string,
11
+ getHeadersFromRequest(req)
12
+ )
13
+ return res.status(200).json(result)
14
+ } catch (e) {
15
+ return res.status(e.status || 500).json(e.error)
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,17 @@
1
+ import { requestFind, getHeadersFromRequest } from '@shopstack/cs-admin-lib/server'
2
+ import { NextApiRequest, NextApiResponse } from "next";
3
+
4
+ export default async (req: NextApiRequest, res: NextApiResponse) => {
5
+ if (req.method === 'GET') {
6
+ try {
7
+ const result = await requestFind(
8
+ req.query.entity as string,
9
+ req.query as any,
10
+ getHeadersFromRequest(req)
11
+ )
12
+ return res.status(200).json(result)
13
+ } catch (e) {
14
+ return res.status(e.status).json(e.error)
15
+ }
16
+ }
17
+ }