@digitaldefiance/express-suite-starter 2.3.5 → 2.3.7

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 (95) hide show
  1. package/package.json +3 -2
  2. package/scaffolding/api/.env.example.mustache +52 -0
  3. package/scaffolding/api/src/assets/.gitkeep +0 -0
  4. package/scaffolding/api/src/main.ts.mustache +19 -0
  5. package/scaffolding/api/src/views/index.ejs +34 -0
  6. package/scaffolding/api-lib/src/index.ts +9 -0
  7. package/scaffolding/api-lib/src/lib/application.ts +35 -0
  8. package/scaffolding/api-lib/src/lib/constants.ts.mustache +10 -0
  9. package/scaffolding/api-lib/src/lib/documents/index.ts +1 -0
  10. package/scaffolding/api-lib/src/lib/documents/user.ts +17 -0
  11. package/scaffolding/api-lib/src/lib/environment.ts +52 -0
  12. package/scaffolding/api-lib/src/lib/interfaces/constants.ts +9 -0
  13. package/scaffolding/api-lib/src/lib/interfaces/environment-aws.ts +7 -0
  14. package/scaffolding/api-lib/src/lib/interfaces/environment.ts +9 -0
  15. package/scaffolding/api-lib/src/lib/middlewares.ts.mustache +113 -0
  16. package/scaffolding/api-lib/src/lib/models/email-token.ts +12 -0
  17. package/scaffolding/api-lib/src/lib/models/mnemonic.ts +12 -0
  18. package/scaffolding/api-lib/src/lib/models/role.ts +12 -0
  19. package/scaffolding/api-lib/src/lib/models/used-direct-login-token.ts +12 -0
  20. package/scaffolding/api-lib/src/lib/models/user-role.ts +12 -0
  21. package/scaffolding/api-lib/src/lib/models/user.ts +14 -0
  22. package/scaffolding/api-lib/src/lib/routers/api.ts +23 -0
  23. package/scaffolding/api-lib/src/lib/routers/app.ts +31 -0
  24. package/scaffolding/api-lib/src/lib/routers/index.ts +2 -0
  25. package/scaffolding/api-lib/src/lib/schemas/index.ts +2 -0
  26. package/scaffolding/api-lib/src/lib/schemas/schema.ts +53 -0
  27. package/scaffolding/api-lib/src/lib/schemas/user.ts +13 -0
  28. package/scaffolding/api-lib/src/lib/services/email.ts +109 -0
  29. package/scaffolding/api-lib/src/lib/services/index.ts +1 -0
  30. package/scaffolding/api-lib/src/lib/shared-types.ts +172 -0
  31. package/scaffolding/devcontainer-mongodb/.devcontainer/.env.example +3 -0
  32. package/scaffolding/devcontainer-mongodb/.devcontainer/Dockerfile +6 -0
  33. package/scaffolding/devcontainer-mongodb/.devcontainer/devcontainer.json.mustache +31 -0
  34. package/scaffolding/devcontainer-mongodb/.devcontainer/docker-compose.yml +31 -0
  35. package/scaffolding/devcontainer-mongodb/.devcontainer/load-env.sh +20 -0
  36. package/scaffolding/devcontainer-mongodb/.devcontainer/post-create.sh.hbs +54 -0
  37. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/.env.example +14 -0
  38. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/Dockerfile +38 -0
  39. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/Mongo.Dockerfile +24 -0
  40. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/devcontainer.json +69 -0
  41. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/docker-compose.yml +66 -0
  42. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/entrypoint.sh +29 -0
  43. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/load-env.sh +20 -0
  44. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/mongodb_entrypoint.sh +124 -0
  45. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/mongodb_healthcheck.sh +36 -0
  46. package/scaffolding/devcontainer-mongodb-replicaset/.devcontainer/post-create.sh.hbs +54 -0
  47. package/scaffolding/devcontainer-simple/.devcontainer/.env.example +4 -0
  48. package/scaffolding/devcontainer-simple/.devcontainer/devcontainer.json.mustache +60 -0
  49. package/scaffolding/devcontainer-simple/.devcontainer/post-create.sh.hbs +72 -0
  50. package/scaffolding/inituserdb/.env.example.mustache +9 -0
  51. package/scaffolding/inituserdb/src/main.ts.mustache +178 -0
  52. package/scaffolding/lib/src/index.ts.mustache +6 -0
  53. package/scaffolding/lib/src/lib/constants.ts.mustache +15 -0
  54. package/scaffolding/lib/src/lib/ecies-config.ts +10 -0
  55. package/scaffolding/lib/src/lib/enumerations/{{workspaceName}}-string-key.ts.mustache +5 -0
  56. package/scaffolding/lib/src/lib/i18n-setup.ts.mustache +99 -0
  57. package/scaffolding/lib/src/lib/interfaces/constants.ts +13 -0
  58. package/scaffolding/lib/src/lib/strings-collection.ts.mustache +45 -0
  59. package/scaffolding/react/src/app/app.tsx.mustache +170 -0
  60. package/scaffolding/react/src/app/menus/extraMenu.tsx +20 -0
  61. package/scaffolding/react/src/app/menus/index.ts +5 -0
  62. package/scaffolding/react/src/app/pages/SplashPage.tsx +60 -0
  63. package/scaffolding/react/src/app/theme.tsx.mustache +91 -0
  64. package/scaffolding/react/src/assets/albatross.ico +0 -0
  65. package/scaffolding/react/src/assets/albatross.png +0 -0
  66. package/scaffolding/react/src/assets/albatross.svg +108 -0
  67. package/scaffolding/react/src/assets/fonts/allroundgothic-xlig.otf +0 -0
  68. package/scaffolding/react/src/assets/fonts/allroundgothic-xlig.ttf +0 -0
  69. package/scaffolding/react/src/assets/fonts/allroundgothic-xlig.woff +0 -0
  70. package/scaffolding/react/src/assets/fonts/allroundgothic-xlig.woff2 +0 -0
  71. package/scaffolding/react/src/assets/gen-by-albatross.png +0 -0
  72. package/scaffolding/react/src/assets/gen-by-albatross.svg +124 -0
  73. package/scaffolding/react/src/config/ecies.ts +10 -0
  74. package/scaffolding/react/src/config/runtime-config.ts +25 -0
  75. package/scaffolding/react/src/environments/environment.prod.ts.mustache +16 -0
  76. package/scaffolding/react/src/environments/environment.ts +15 -0
  77. package/scaffolding/react/src/interfaces/environment.ts +5 -0
  78. package/scaffolding/react/src/main.tsx +22 -0
  79. package/scaffolding/react/src/styles.scss +103 -0
  80. package/scaffolding/react/src/test-setup.ts +1 -0
  81. package/scaffolding/react-lib/src/index.ts +6 -0
  82. package/scaffolding/react-lib/src/theme/theme.tsx +67 -0
  83. package/scaffolding/root/.github/dependabot.yml +11 -0
  84. package/scaffolding/root/.github/workflows/ci.yml +44 -0
  85. package/scaffolding/root/.vscode/extensions.json +9 -0
  86. package/scaffolding/root/DEPLOYMENT.md +104 -0
  87. package/scaffolding/root/do-yarn.sh +148 -0
  88. package/scaffolding/root/ensure-git-globals.sh +30 -0
  89. package/scaffolding/root/eslint.config.mjs +70 -0
  90. package/scaffolding/root/list-scripts.sh +12 -0
  91. package/scaffolding/root/npm-install-globals.sh +5 -0
  92. package/scaffolding/root/nuke-node-modules.sh +23 -0
  93. package/scaffolding/root/recover-yarn.sh +37 -0
  94. package/scaffolding/root/reset.sh.mustache +25 -0
  95. package/scaffolding/root/setup-nvm.sh +15 -0
@@ -0,0 +1,124 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 1600">
3
+ <defs>
4
+ <style>
5
+ .cls-1 {
6
+ fill: #433834;
7
+ }
8
+
9
+ .cls-2, .cls-3, .cls-4, .cls-5, .cls-6 {
10
+ mix-blend-mode: multiply;
11
+ }
12
+
13
+ .cls-2, .cls-5 {
14
+ opacity: .2;
15
+ }
16
+
17
+ .cls-2, .cls-7 {
18
+ fill: #bebfaf;
19
+ }
20
+
21
+ .cls-3, .cls-4, .cls-6 {
22
+ opacity: .3;
23
+ }
24
+
25
+ .cls-8 {
26
+ fill: #9ca6b2;
27
+ }
28
+
29
+ .cls-9 {
30
+ fill: #d5561e;
31
+ }
32
+
33
+ .cls-10 {
34
+ isolation: isolate;
35
+ }
36
+
37
+ .cls-4 {
38
+ fill: #60260f;
39
+ }
40
+
41
+ .cls-11 {
42
+ fill: #fcfcf5;
43
+ }
44
+
45
+ .cls-12 {
46
+ font-size: 131px;
47
+ }
48
+
49
+ .cls-12, .cls-13 {
50
+ font-family: AllRoundGothic-XLig, 'All Round Gothic';
51
+ }
52
+
53
+ .cls-13 {
54
+ font-size: 72px;
55
+ }
56
+
57
+ .cls-14 {
58
+ fill: #352b28;
59
+ }
60
+
61
+ .cls-5 {
62
+ fill: #a7a9ac;
63
+ }
64
+
65
+ .cls-6 {
66
+ fill: #4d5156;
67
+ }
68
+ </style>
69
+ </defs>
70
+ <g class="cls-10">
71
+ <g id="Layer_2" data-name="Layer 2">
72
+ <g>
73
+ <ellipse class="cls-5" cx="872.69" cy="1277.99" rx="380.57" ry="77.75"/>
74
+ <g>
75
+ <g>
76
+ <path class="cls-8" d="M976.47,1201.8c0-3.09.18-6.15.52-9.17.46-4.06-3.13-7.68-8.23-8.31-11.33-1.4-23.42-2.16-35.98-2.16-64.56,0-116.89,20.06-116.89,44.8s52.33,44.8,116.89,44.8c21.23,0,41.13-2.17,58.29-5.97,5.02-1.11,7.42-5.65,4.79-9.21-18.67-25.27,22.96-22.5,19.15-34.59-2.55-8.09-38.54-11.53-38.54-20.17Z"/>
77
+ <g class="cls-3">
78
+ <path class="cls-7" d="M1007.03,1230.96c-72.34.52-129.17,5.7-129.17,12.01,0,5.95,50.46,10.89,116.82,11.88-10.02-15.12,2.91-19.51,12.35-23.89Z"/>
79
+ </g>
80
+ <g class="cls-3">
81
+ <path class="cls-7" d="M877.86,1202.53c0,8.8,59.6,15.99,134.42,16.39-8.94-6.06-35.81-9.65-35.81-17.11,0-3.09.18-6.15.52-9.17.24-2.15-.65-4.16-2.3-5.69-56.24,2.16-96.83,8.32-96.83,15.58Z"/>
82
+ </g>
83
+ <path class="cls-8" d="M836.52,1230.28h0c-9.34,2.3-19.27-1.82-22.17-9.21l-63.52-161.3,33.82-8.32,63.53,161.3c2.91,7.38-2.31,15.23-11.65,17.53Z"/>
84
+ <g class="cls-3">
85
+ <path class="cls-7" d="M834.81,1221.08l-63.52-161.3,15.16-3.73-1.81-4.59-33.82,8.32,63.52,161.3c2.91,7.38,12.84,11.5,22.17,9.21,1.83-.45,3.5-1.12,4.98-1.95-3.07-1.71-5.48-4.2-6.69-7.25Z"/>
86
+ </g>
87
+ <path class="cls-8" d="M756.31,1104.46c6.26,17.08,21.26,20.15,36.24,16.72,14.99-3.43,24.28-12.07,18.02-29.15-6.26-17.08-25.71-36.14-40.69-32.71s-19.84,28.06-13.58,45.14Z"/>
88
+ <path class="cls-11" d="M909,976.19c0,48.76-23.15,19.97-84.8,98.24-13.99,17.76-80.03,16.79-101.98-2.95-22.77-20.47-1.21-60.51-1.21-85.34,0-48.76,42.08-88.29,94-88.29s94,29.57,94,78.33Z"/>
89
+ </g>
90
+ <path class="cls-6" d="M992.51,1251c-.03-.06-.06-.12-.08-.18-.53-1.18-.89-2.29-1.11-3.32-.01-.06-.02-.11-.03-.17-.2-1.03-.26-1.99-.2-2.89,0-.03,0-.07,0-.1.13-1.49.61-2.81,1.36-3.99.02-.04.05-.08.07-.12.45-.69.98-1.32,1.59-1.92.05-.05.11-.11.17-.16.38-.36.78-.71,1.21-1.05.03-.03.07-.05.1-.08.22-.17.45-.34.68-.5.09-.06.18-.13.27-.19.38-.26.78-.52,1.18-.77.12-.08.25-.15.38-.23.23-.13.45-.27.69-.4.19-.11.39-.22.59-.32.32-.17.64-.34.97-.51.2-.1.39-.2.59-.3.2-.1.39-.2.59-.29.35-.17.71-.34,1.07-.51.18-.08.36-.17.54-.25.33-.15.65-.3.98-.45.11-.05.21-.1.32-.15.5-.22.99-.45,1.48-.67.36-.16.71-.32,1.06-.48,5.21-2.41,9.37-4.82,8.04-9.02-1.68-5.31-17.75-8.62-28.6-12.71,0,0,0,0,0,0-.48-.18-.95-.36-1.41-.55-.07-.03-.15-.06-.22-.09-.39-.16-.77-.32-1.14-.48-.09-.04-.19-.08-.28-.12-.35-.16-.69-.31-1.03-.47-.09-.04-.18-.08-.26-.13-.37-.18-.72-.36-1.06-.55-.04-.02-.08-.04-.11-.06-.38-.21-.74-.42-1.08-.64-.02-.01-.04-.03-.06-.04-.3-.19-.58-.39-.84-.58-.09-.06-.16-.13-.24-.19-.19-.15-.37-.3-.54-.45-.09-.08-.17-.16-.25-.24-.14-.14-.27-.28-.4-.43-.07-.09-.14-.17-.21-.26-.11-.15-.2-.29-.29-.44-.05-.09-.11-.18-.15-.27-.08-.16-.14-.32-.19-.49-.03-.08-.06-.16-.08-.24-.06-.24-.1-.49-.1-.75,0-3.09.18-6.15.52-9.17.03-.26.04-.52.04-.78,0-.06-.01-.13-.01-.19,0-.19-.02-.39-.05-.58,0-.06-.03-.13-.04-.19-.03-.19-.07-.38-.12-.57-.01-.05-.03-.1-.05-.15-.06-.2-.12-.4-.2-.59-.01-.04-.03-.07-.05-.11-.09-.21-.19-.41-.3-.61-.01-.02-.02-.04-.04-.06-.12-.21-.25-.42-.39-.62,0,0-.01-.02-.02-.03-.15-.21-.32-.42-.49-.62,0,0,0,0,0,0-.18-.2-.37-.4-.58-.59,0,0,0,0,0,0h0c-1.47-1.36-3.53-2.33-5.93-2.63-11.33-1.4-23.42-2.16-35.98-2.16-36.34,0-68.81,6.36-90.25,16.33l-33.78-85.77c4.06-4.8,5.17-11.52,1.82-20.68-.99-2.69-2.3-5.43-3.87-8.13,7.9-2.1,14.18-5.25,17.5-9.47,61.66-78.28,84.8-49.48,84.8-98.24s-42.08-78.33-94-78.33-94,39.53-94,88.29c0,24.83-21.57,64.87,1.21,85.34,7.05,6.33,18.64,10.72,31.59,13.19-.54,6.69.28,13.71,2.5,19.77,3.77,10.28,10.7,15.48,18.89,17.25l39.14,99.38c.18.46.39.91.63,1.35.33.62.74,1.2,1.17,1.76-.15.92-.24,1.84-.24,2.76,0,24.74,52.33,44.8,116.89,44.8,21.23,0,41.13-2.17,58.29-5.97,5.02-1.11,7.42-5.65,4.79-9.21-.44-.59-.81-1.16-1.18-1.72h0c-.29-.44-.56-.87-.81-1.29-.06-.1-.12-.2-.18-.31-.46-.78-.85-1.53-1.18-2.25Z"/>
91
+ </g>
92
+ <path class="cls-11" d="M1194.47,782.67c0-63.81-28.95-302.84-2.04-360.7,6.67-14.35,14.03-25.52,21.39-31.01,8.51-6.35-2.9-54.36-14.32-74.47-18.12-31.91-63.01-64.45-140.71-62.71-98.62,2.21-119.57,131.56-129.32,229.77-3.42,34.45-16.76,67.19-38.56,94.08-48.99,60.43-565.02,65.2-552.07,89.8,175.7,333.62,423.24,375,551.17,375s304.46-144.05,304.46-259.76Z"/>
93
+ <path class="cls-14" d="M1025.12,324.63c-1.48-.8,1.2-2.38,2.76-1.76,17.35,6.88,29.25,13.9,49.78,16.28,6.99.81,42.96-1.94,43.94,4.81s-6.07,15.21-9.01,18.21c-3.6,3.68-9.25,7.01-16.55,4.91-22.3-6.41-47.37-29.78-70.91-42.45Z"/>
94
+ <path class="cls-2" d="M1214.83,389.84c.15-.23.31-.46.44-.73.08-.15.14-.32.21-.48.12-.27.23-.55.32-.85.06-.19.12-.38.17-.58.09-.32.17-.65.24-1,.04-.21.09-.42.13-.64.07-.39.13-.8.18-1.23.03-.2.05-.4.07-.62.05-.54.09-1.1.12-1.68,0-.12.02-.23.02-.35.06-1.47.04-3.07-.05-4.77,0-.14-.02-.28-.03-.43-.04-.72-.09-1.44-.16-2.19-.02-.19-.04-.38-.05-.57-.07-.73-.14-1.48-.23-2.24-.02-.18-.04-.36-.06-.54-.1-.82-.21-1.64-.33-2.49-.02-.13-.04-.25-.05-.38-.74-5.06-1.86-10.57-3.25-16.13-29.04,21.91-14.64,61.6-107.53,97.81-24.43,9.52,53.57,17.47,87.92,295.39-5.64-91.53-23.51-273.67-.48-323.17,6.67-14.35,14.03-25.52,21.39-31.01.29-.21.55-.49.79-.79.08-.1.15-.22.22-.33Z"/>
95
+ <path class="cls-9" d="M1366.44,386.36c-1.81-28.76-12.74-45.51-31.47-48.8-22.07-3.88-34.72,8.32-76.28,3.83-23.6-2.55-59.03-32.51-76.45-26.66-.37.12-.72.29-1.08.43,2.36,19.84,3.66,41.64,3.66,64.53v.12c0,6.65,4.5,12.06,10.11,12.06h153.73c5.47,0,9.91,5.26,9.91,11.75,4.22,4.27,8.26-11.15,7.87-17.25Z"/>
96
+ <path class="cls-4" d="M1184.34,356.04c.31,7.73.48,15.61.48,23.64v.12c0,6.65,4.5,12.06,10.11,12.06h153.73c1.44,0,2.81.37,4.05,1.03-14.56-13.42-26.21-12.53-102.16-16.62-31.65-1.7-42.55-19.25-66.21-20.24Z"/>
97
+ <path class="cls-4" d="M1194.47,329.76s26.43,2.41,24.55,12.93c-1.89,10.53-24.55-12.93-24.55-12.93Z"/>
98
+ <path class="cls-1" d="M979.82,646.42l-88.91-68.79-408.37,11.75c-45.79,1.32-90.15,16.29-127.37,43l-81.11,58.2,491.41,215.46c27.72,12.15,60.13,4.85,79.95-18.03l142.12-164.01c20.18-23.28,16.65-58.74-7.72-77.59Z"/>
99
+ <path class="cls-1" d="M484.86,812c-92.91-11.57-216.44-40.22-301.96-112.63-11.29-9.56-3.49-27.88,11.24-26.46,74.57,7.18,114.89,5.92,195.39-24.83l95.33,163.93Z"/>
100
+ <path class="cls-6" d="M317.05,659.72l-43,30.85,491.41,215.46c27.72,12.15,60.13,4.85,79.95-18.03l89.24-102.98c-255.46-.35-481.11-49.79-617.61-125.3Z"/>
101
+ <g>
102
+ <path class="cls-8" d="M1033.27,1263.74c0-2.52.18-5.02.52-7.49.46-3.31-3.13-6.27-8.23-6.79-11.33-1.15-23.42-1.77-35.98-1.77-64.56,0-116.89,16.37-116.89,36.56s52.33,36.56,116.89,36.56c21.23,0,41.13-1.78,58.29-4.87,5.02-.91,7.42-4.61,4.79-7.52-18.67-20.62,22.96-18.37,19.15-28.23-2.55-6.61-38.54-9.41-38.54-16.46Z"/>
103
+ <g class="cls-3">
104
+ <path class="cls-7" d="M1063.83,1287.54c-72.34.42-129.17,4.65-129.17,9.8,0,4.86,50.46,8.89,116.82,9.69-10.02-12.34,2.91-15.92,12.35-19.49Z"/>
105
+ </g>
106
+ <g class="cls-3">
107
+ <path class="cls-7" d="M934.66,1264.33c0,7.18,59.6,13.05,134.42,13.38-8.94-4.95-35.81-7.87-35.81-13.97,0-2.52.18-5.02.52-7.49.24-1.75-.65-3.4-2.3-4.64-56.24,1.76-96.83,6.79-96.83,12.72Z"/>
108
+ </g>
109
+ <path class="cls-8" d="M893.32,1290.65h0c-9.34,2.56-19.27-2.03-22.17-10.25l-63.53-179.6,33.82-9.27,63.52,179.6c2.91,8.22-2.31,16.96-11.65,19.52Z"/>
110
+ <g class="cls-3">
111
+ <path class="cls-7" d="M891.61,1280.4l-63.53-179.6,15.16-4.15-1.81-5.11-33.82,9.27,63.53,179.6c2.91,8.22,12.84,12.81,22.17,10.25,1.83-.5,3.5-1.25,4.98-2.17-3.07-1.91-5.48-4.67-6.69-8.08Z"/>
112
+ </g>
113
+ <path class="cls-8" d="M813.11,1150.54c6.26,19.02,21.26,22.44,36.24,18.62,14.99-3.82,24.28-13.43,18.02-32.45-6.26-19.02-25.71-40.24-40.69-36.42-14.99,3.82-19.84,31.24-13.58,50.26Z"/>
114
+ <path class="cls-11" d="M1033.18,996.49c-52.32,35.42-90.52,33.46-152.18,120.62-13.99,19.77-80.03,18.69-101.98-3.28-22.77-22.8-1.21-67.38-1.21-95.03,0-54.29,42.08-98.31,94-98.31s206.33,45.56,161.37,75.99Z"/>
115
+ <g class="cls-3">
116
+ <path class="cls-7" d="M777.81,1018.81c0-22.63,7.33-43.47,19.62-60.08-97.47-15.5-206.88-50.65-326.4-102.42,103.54,109.89,214.46,156.36,305.7,174.87.65-4.38,1.07-8.54,1.07-12.37Z"/>
117
+ </g>
118
+ </g>
119
+ </g>
120
+ <text class="cls-12" transform="translate(258.22 1508.21)"><tspan x="0" y="0">Project Albatross</tspan></text>
121
+ <text class="cls-13" transform="translate(93.92 160.51)"><tspan x="0" y="0">generated by</tspan></text>
122
+ </g>
123
+ </g>
124
+ </svg>
@@ -0,0 +1,10 @@
1
+ import { IECIESConfig, ECIES } from '@digitaldefiance/ecies-lib';
2
+
3
+ export const config: IECIESConfig = {
4
+ curveName: ECIES.CURVE_NAME,
5
+ primaryKeyDerivationPath: ECIES.PRIMARY_KEY_DERIVATION_PATH,
6
+ mnemonicStrength: ECIES.MNEMONIC_STRENGTH,
7
+ symmetricAlgorithm: ECIES.SYMMETRIC_ALGORITHM_CONFIGURATION,
8
+ symmetricKeyBits: ECIES.SYMMETRIC.KEY_BITS,
9
+ symmetricKeyMode: ECIES.SYMMETRIC.MODE,
10
+ };
@@ -0,0 +1,25 @@
1
+ import { environment } from '../environments/environment';
2
+
3
+ interface RuntimeConfig {
4
+ apiUrl: string;
5
+ }
6
+
7
+ let runtimeConfig: RuntimeConfig | null = null;
8
+
9
+ export async function loadRuntimeConfig(): Promise<RuntimeConfig> {
10
+ if (runtimeConfig) return runtimeConfig;
11
+
12
+ try {
13
+ const response = await fetch('/config.json');
14
+ runtimeConfig = await response.json();
15
+ return runtimeConfig;
16
+ } catch {
17
+ runtimeConfig = { apiUrl: environment.apiUrl };
18
+ return runtimeConfig;
19
+ }
20
+ }
21
+
22
+ export function getApiBaseUrl(): string {
23
+ const apiUrl = runtimeConfig?.apiUrl || environment.apiUrl;
24
+ return apiUrl.replace(/\/api$/, '');
25
+ }
@@ -0,0 +1,16 @@
1
+ import { IAppConfig } from '@digitaldefiance/express-suite-react-components';
2
+ import { IEnvironment } from '../interfaces/environment';
3
+
4
+ const appConfig: IAppConfig | undefined =
5
+ 'APP_CONFIG' in window
6
+ ? ((window as any).APP_CONFIG as IAppConfig)
7
+ : undefined;
8
+
9
+ const server = appConfig?.server;
10
+
11
+ export const environment: IEnvironment = {
12
+ production: false,
13
+ siteUrl: server ?? 'https://{{hostname}}',
14
+ apiUrl:
15
+ server !== undefined ? `${server}/api` : 'https://{{hostname}}/api',
16
+ };
@@ -0,0 +1,15 @@
1
+ import { IAppConfig } from '@digitaldefiance/express-suite-react-components';
2
+ import { IEnvironment } from '../interfaces/environment';
3
+
4
+ const appConfig: IAppConfig | undefined =
5
+ 'APP_CONFIG' in window
6
+ ? ((window as any).APP_CONFIG as IAppConfig)
7
+ : undefined;
8
+
9
+ const server = appConfig?.server;
10
+
11
+ export const environment: IEnvironment = {
12
+ production: false,
13
+ siteUrl: server ?? 'http://localhost:3000',
14
+ apiUrl: server !== undefined ? `${server}/api` : 'http://localhost:3000/api',
15
+ };
@@ -0,0 +1,5 @@
1
+ export interface IEnvironment {
2
+ production: boolean;
3
+ siteUrl: string;
4
+ apiUrl: string;
5
+ }
@@ -0,0 +1,22 @@
1
+ import { GlobalActiveContext, IActiveContext, CoreLanguageCode } from '@digitaldefiance/i18n-lib';
2
+ import { StrictMode } from 'react';
3
+ import * as ReactDOM from 'react-dom/client';
4
+ import { BrowserRouter } from 'react-router-dom';
5
+ import App from './app/app';
6
+
7
+ const root = ReactDOM.createRoot(
8
+ document.getElementById('root') as HTMLElement,
9
+ );
10
+
11
+ const context = GlobalActiveContext.getInstance<CoreLanguageCode, IActiveContext<CoreLanguageCode>>();
12
+ context.languageContextSpace = 'user';
13
+
14
+ root.render(
15
+ <StrictMode>
16
+ <BrowserRouter
17
+ future={{ v7_relativeSplatPath: true, v7_startTransition: true }}
18
+ >
19
+ <App />
20
+ </BrowserRouter>
21
+ </StrictMode>,
22
+ );
@@ -0,0 +1,103 @@
1
+ @use 'sass:color';
2
+
3
+ // Theme colors
4
+ $primary-color: #1976d2;
5
+ $secondary-color: #dc004e;
6
+ $background-color: #0a1c21;
7
+ $success-color: #28a745;
8
+ $danger-color: #d32f2f;
9
+ $warning-color: #ed6c02;
10
+ $light-color: #f8f9fa;
11
+ $dark-color: #343a40;
12
+ $text-color: #333;
13
+
14
+ $font-family: 'Roboto', sans-serif;
15
+
16
+ // Reset and base styles
17
+ * {
18
+ box-sizing: border-box;
19
+ margin: 0;
20
+ padding: 0;
21
+ }
22
+
23
+ body {
24
+ font-family: $font-family;
25
+ font-weight: 400;
26
+ line-height: 1.6;
27
+ color: $text-color;
28
+ background-color: $light-color;
29
+ }
30
+
31
+ // Common form styles
32
+ .form-group {
33
+ margin-bottom: 1rem;
34
+
35
+ label {
36
+ display: block;
37
+ margin-bottom: 0.5rem;
38
+ }
39
+
40
+ input,
41
+ select,
42
+ textarea {
43
+ width: 100%;
44
+ padding: 0.75rem;
45
+ border: 1px solid #ced4da;
46
+ border-radius: 4px;
47
+ font-size: 1rem;
48
+ }
49
+
50
+ .help-text {
51
+ font-size: 0.875rem;
52
+ color: $secondary-color;
53
+ margin-top: 0.25rem;
54
+ }
55
+ }
56
+
57
+ // Button styles
58
+ .btn {
59
+ display: inline-block;
60
+ padding: 0.75rem 1.5rem;
61
+ font-size: 1rem;
62
+ text-align: center;
63
+ text-decoration: none;
64
+ border-radius: 4px;
65
+ transition: background-color 0.3s ease;
66
+ cursor: pointer;
67
+
68
+ &-primary {
69
+ background-color: $primary-color;
70
+ color: white;
71
+ border: none;
72
+
73
+ &:hover {
74
+ background-color: color.adjust($primary-color, $lightness: -10%);
75
+ }
76
+ }
77
+
78
+ &-secondary {
79
+ background-color: $secondary-color;
80
+ color: white;
81
+ border: none;
82
+
83
+ &:hover {
84
+ background-color: color.adjust($secondary-color, $lightness: -10%);
85
+ }
86
+ }
87
+ }
88
+
89
+ .success-message {
90
+ color: $success-color;
91
+ margin-top: 1rem;
92
+ font-weight: bold;
93
+ }
94
+
95
+ .error-message {
96
+ color: $danger-color;
97
+ margin-top: 1rem;
98
+ font-weight: bold;
99
+ }
100
+
101
+ .cursor-pointer {
102
+ cursor: pointer;
103
+ }
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom';
@@ -0,0 +1,6 @@
1
+ // Export custom theme
2
+ export { default as theme } from './theme/theme';
3
+
4
+ // Re-export express-suite-react-components when available
5
+ // Uncomment when @digitaldefiance/express-suite-react-components is published
6
+ // export * from '@digitaldefiance/express-suite-react-components';
@@ -0,0 +1,67 @@
1
+ import { createTheme } from '@mui/material/styles';
2
+
3
+ const theme = createTheme({
4
+ palette: {
5
+ primary: {
6
+ main: '#1976d2',
7
+ light: '#42a5f5',
8
+ dark: '#1565c0',
9
+ contrastText: '#ffffff',
10
+ },
11
+ secondary: {
12
+ main: '#dc004e',
13
+ light: '#f73378',
14
+ dark: '#9a0036',
15
+ contrastText: '#ffffff',
16
+ },
17
+ background: {
18
+ default: '#f8f9fa',
19
+ paper: '#ffffff',
20
+ },
21
+ text: {
22
+ primary: '#212121',
23
+ },
24
+ error: {
25
+ main: '#d32f2f',
26
+ },
27
+ warning: {
28
+ main: '#ed6c02',
29
+ },
30
+ success: {
31
+ main: '#2e7d32',
32
+ },
33
+ },
34
+ typography: {
35
+ fontFamily: "'Roboto', sans-serif",
36
+ h1: {
37
+ fontWeight: 500,
38
+ },
39
+ h2: {
40
+ fontWeight: 500,
41
+ },
42
+ h3: {
43
+ fontWeight: 500,
44
+ },
45
+ h4: {
46
+ fontWeight: 500,
47
+ },
48
+ h5: {
49
+ fontWeight: 500,
50
+ },
51
+ h6: {
52
+ fontWeight: 500,
53
+ },
54
+ },
55
+ components: {
56
+ MuiButton: {
57
+ styleOverrides: {
58
+ root: {
59
+ borderRadius: '4px',
60
+ textTransform: 'none',
61
+ },
62
+ },
63
+ },
64
+ },
65
+ });
66
+
67
+ export default theme;
@@ -0,0 +1,11 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "npm" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "weekly"
@@ -0,0 +1,44 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+
9
+ permissions:
10
+ actions: read
11
+ contents: read
12
+
13
+ jobs:
14
+ main:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ with:
19
+ filter: tree:0
20
+ fetch-depth: 0
21
+
22
+
23
+
24
+
25
+ # This enables task distribution via Nx Cloud
26
+ # Run this command as early as possible, before dependencies are installed
27
+ # Learn more at https://nx.dev/ci/reference/nx-cloud-cli#npx-nxcloud-startcirun
28
+ # Uncomment this line to enable task distribution
29
+ # - run: yarn nx-cloud start-ci-run --distribute-on="3 linux-medium-js" --stop-agents-after="build"
30
+
31
+
32
+ # Cache node_modules
33
+ - uses: actions/setup-node@v4
34
+ with:
35
+ node-version: 20
36
+ cache: 'yarn'
37
+
38
+ - run: yarn install --frozen-lockfile
39
+ - uses: nrwl/nx-set-shas@v4
40
+
41
+ # Prepend any command with "nx-cloud record --" to record its logs to Nx Cloud
42
+ # - run: yarn nx-cloud record -- echo Hello World
43
+ # Nx Affected runs only tasks affected by the changes in this PR/commit. Learn more: https://nx.dev/ci/features/affected
44
+ - run: yarn nx affected -t lint test build
@@ -0,0 +1,9 @@
1
+ {
2
+ "recommendations": [
3
+ "nrwl.angular-console",
4
+ "esbenp.prettier-vscode",
5
+ "dbaeumer.vscode-eslint",
6
+ "ms-playwright.playwright",
7
+ "firsttris.vscode-jest-runner"
8
+ ]
9
+ }
@@ -0,0 +1,104 @@
1
+ # Deployment Guide
2
+
3
+ ## API Base URL Configuration
4
+
5
+ The React frontend needs to know where your API is hosted. There are three configuration methods:
6
+
7
+ ### 1. Same Domain (Recommended for Production)
8
+
9
+ Deploy frontend and API on the same domain. The production build uses relative URLs by default.
10
+
11
+ **Example**: `https://example.com` (frontend) and `https://example.com/api` (API)
12
+
13
+ No configuration needed - uses `environment.prod.ts` with `apiUrl: '/api'`
14
+
15
+ ### 2. Different Domain (Build-Time)
16
+
17
+ Edit `{{prefix}}-react/src/environments/environment.prod.ts`:
18
+
19
+ ```typescript
20
+ export const environment = {
21
+ production: true,
22
+ apiUrl: 'https://api.example.com/api',
23
+ };
24
+ ```
25
+
26
+ Rebuild: `yarn build`
27
+
28
+ ### 3. Different Domain (Runtime)
29
+
30
+ For deploying the same build to multiple domains, inject runtime config in your index.html:
31
+
32
+ ```html
33
+ <script>
34
+ window.APP_CONFIG = {
35
+ apiUrl: 'https://api.example.com/api'
36
+ };
37
+ </script>
38
+ ```
39
+
40
+ This overrides the environment file without rebuilding.
41
+
42
+ ## Environment Files
43
+
44
+ ### Development (`environment.ts`)
45
+
46
+ ```typescript
47
+ export const environment = {
48
+ production: false,
49
+ apiUrl: 'http://localhost:3000/api',
50
+ };
51
+ ```
52
+
53
+ ### Production (`environment.prod.ts`)
54
+
55
+ ```typescript
56
+ export const environment = {
57
+ production: true,
58
+ apiUrl: '/api', // Relative URL for same-domain deployment
59
+ };
60
+ ```
61
+
62
+ ## Build Commands
63
+
64
+ ```bash
65
+ # Development
66
+ yarn serve:dev
67
+
68
+ # Production build
69
+ yarn build
70
+
71
+ # Production serve
72
+ yarn serve
73
+ ```
74
+
75
+ ## API Environment Variables
76
+
77
+ Configure `{{prefix}}-api/.env`:
78
+
79
+ ```bash
80
+ # Required
81
+ MONGO_URI=mongodb://localhost:27017/{{workspaceName}}
82
+ JWT_SECRET=your-64-char-hex-secret
83
+ MNEMONIC_HMAC_SECRET=your-64-char-hex-secret
84
+ MNEMONIC_ENCRYPTION_KEY=your-64-char-hex-secret
85
+
86
+ # Optional
87
+ PORT=3000
88
+ HOST=0.0.0.0
89
+ DEBUG=false
90
+ ```
91
+
92
+ Generate secrets: `yarn new:secret`
93
+
94
+ ## Deployment Checklist
95
+
96
+ - [ ] Set production environment variables in `{{prefix}}-api/.env`
97
+ - [ ] Configure API base URL (method 1, 2, or 3 above)
98
+ - [ ] Run `yarn build` to build all projects
99
+ - [ ] Test production build locally: `yarn serve`
100
+ - [ ] Deploy `dist/{{prefix}}-api` to your API server
101
+ - [ ] Deploy `dist/{{prefix}}-react` to your web server
102
+ - [ ] Verify HTTPS is enabled
103
+ - [ ] Test authentication flow
104
+ - [ ] Monitor logs for errors