@digitaldefiance/express-suite-starter 3.0.1 → 3.0.3

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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Node Express Suite Starter
2
2
 
3
- <a alt="Nx logo" href="https://nx.dev" target="_blank" rel="noreferrer"><img src="https://raw.githubusercontent.com/nrwl/nx/master/images/nx-logo.png" width="45"></a>
3
+ <img src="assets/albatross.svg" style="height: 200px;" />
4
4
 
5
5
  Automated generator for MERN stack monorepos using [@digitaldefiance/node-express-suite](https://www.npmjs.com/package/@digitaldefiance/node-express-suite).
6
6
 
@@ -25,6 +25,20 @@ Part of [Express Suite](https://github.com/Digital-Defiance/express-suite)
25
25
  - ✅ **Validation** - Post-generation checks with fix suggestions
26
26
  - 🖥️ **Cross-Platform** - Windows, macOS, and Linux support
27
27
 
28
+ **Express Suite** is a comprehensive TypeScript framework providing a complete foundation for building secure, scalable, and internationalized web applications. It integrates enterprise-grade cryptography, multi-language internationalization, and a full-stack MERN framework—all structured as modular packages for modern development workflows.
29
+
30
+ Formerly known as **Project Albatross**, the suite draws inspiration from the great albatross bird, symbolizing endurance and the ability to traverse vast distances—qualities reflected in the suite's goal to deliver far-reaching, reliable solutions.
31
+
32
+ Express Suite Starter is a scaffolding generator which can produce fully functional application boilerplate using all of Express Suite's features (internationalization, mnemonic login, backup codes, etc):
33
+
34
+ <img width="1071" height="1051" alt="Screenshot 2026-02-22 at 11 39 01 AM" src="https://github.com/user-attachments/assets/5cc74425-aa8a-4a10-94f1-5a1e2979b646" />
35
+
36
+ <img width="1071" height="1051" alt="Screenshot 2026-02-22 at 11 40 09 AM" src="https://github.com/user-attachments/assets/4b6c9c13-9452-4fa2-9356-5cdd1f26f42d" />
37
+
38
+ <img width="1071" height="1051" alt="Screenshot 2026-02-22 at 11 40 19 AM" src="https://github.com/user-attachments/assets/2ef7614f-fa96-4af5-843b-663a5322bc38" />
39
+
40
+ <img width="1071" height="1051" alt="Screenshot 2026-02-22 at 11 39 50 AM" src="https://github.com/user-attachments/assets/92dda51f-204e-4e1a-84bb-367b6bd0a44a" />
41
+
28
42
  ## Quick Start
29
43
 
30
44
  ### NPX (Recommended)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/express-suite-starter",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
4
4
  "license": "MIT",
5
5
  "bin": {
6
6
  "create-express-suite": "./dist/src/cli.js"
@@ -1,13 +1,13 @@
1
1
  import { Types } from '@digitaldefiance/mongoose-types';
2
2
  import { AccountStatus, IUserBase } from '@digitaldefiance/suite-core-lib';
3
- import { IBaseDocument } from '@digitaldefiance/node-express-suite';
3
+ import { BaseDocument } from '@digitaldefiance/node-express-suite';
4
4
  import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
5
5
  import { PlatformID } from '@digitaldefiance/node-ecies-lib';
6
6
 
7
7
  /**
8
8
  * Composite interface for user collection documents
9
9
  */
10
- export interface IUserDocument<TID extends PlatformID = PlatformID, TDate extends Date = Date, TLanguage extends string = CoreLanguageCode, TAccountStatus extends AccountStatus = AccountStatus> extends IBaseDocument<
10
+ export interface IUserDocument<TID extends PlatformID = PlatformID, TDate extends Date = Date, TLanguage extends string = CoreLanguageCode, TAccountStatus extends AccountStatus = AccountStatus> extends BaseDocument<
11
11
  IUserBase<
12
12
  TID,
13
13
  TDate,
@@ -1,8 +1,8 @@
1
- import { BaseModelName, SchemaCollection, IEmailTokenDocument, EmailTokenSchema } from '@digitaldefiance/node-express-suite';
1
+ import { BaseModelName, SchemaCollection, EmailTokenDocument, EmailTokenSchema } from '@digitaldefiance/node-express-suite';
2
2
  import { Connection } from '@digitaldefiance/mongoose-types';
3
3
 
4
4
  export function EmailTokenModel(connection: Connection) {
5
- return connection.model<IEmailTokenDocument>(
5
+ return connection.model<EmailTokenDocument>(
6
6
  BaseModelName.EmailToken,
7
7
  EmailTokenSchema,
8
8
  SchemaCollection.EmailToken,
@@ -1,8 +1,8 @@
1
- import { BaseModelName, SchemaCollection, IMnemonicDocument, MnemonicSchema } from '@digitaldefiance/node-express-suite';
1
+ import { BaseModelName, SchemaCollection, MnemonicDocument, MnemonicSchema } from '@digitaldefiance/node-express-suite';
2
2
  import { Connection } from '@digitaldefiance/mongoose-types';
3
3
 
4
4
  export function MnemonicModel(connection: Connection) {
5
- return connection.model<IMnemonicDocument>(
5
+ return connection.model<MnemonicDocument>(
6
6
  BaseModelName.Mnemonic,
7
7
  MnemonicSchema,
8
8
  SchemaCollection.Mnemonic,
@@ -1,8 +1,8 @@
1
- import { BaseModelName, SchemaCollection, IRoleDocument, RoleSchema } from '@digitaldefiance/node-express-suite';
1
+ import { BaseModelName, SchemaCollection, RoleDocument, RoleSchema } from '@digitaldefiance/node-express-suite';
2
2
  import { Connection } from '@digitaldefiance/mongoose-types';
3
3
 
4
4
  export function RoleModel(connection: Connection) {
5
- return connection.model<IRoleDocument>(
5
+ return connection.model<RoleDocument>(
6
6
  BaseModelName.Role,
7
7
  RoleSchema,
8
8
  SchemaCollection.Role,
@@ -1,10 +1,10 @@
1
- import { BaseModelName, IUsedDirectLoginTokenDocument, SchemaCollection,UsedDirectLoginTokenSchema } from '@digitaldefiance/node-express-suite';
1
+ import { BaseModelName, UsedDirectLoginTokenDocument, SchemaCollection,UsedDirectLoginTokenSchema } from '@digitaldefiance/node-express-suite';
2
2
  import { Connection, Model } from '@digitaldefiance/mongoose-types';
3
3
 
4
4
  export default function UsedDirectLoginTokenModel(
5
5
  connection: Connection,
6
- ): Model<IUsedDirectLoginTokenDocument> {
7
- return connection.model<IUsedDirectLoginTokenDocument>(
6
+ ): Model<UsedDirectLoginTokenDocument> {
7
+ return connection.model<UsedDirectLoginTokenDocument>(
8
8
  BaseModelName.UsedDirectLoginToken,
9
9
  UsedDirectLoginTokenSchema,
10
10
  SchemaCollection.UsedDirectLoginToken,
@@ -1,10 +1,10 @@
1
- import { SchemaCollection, IUserRoleDocument, UserRoleSchema, BaseModelName } from '@digitaldefiance/node-express-suite';
1
+ import { SchemaCollection, UserRoleDocument, UserRoleSchema, BaseModelName } from '@digitaldefiance/node-express-suite';
2
2
  import { Connection, Model } from '@digitaldefiance/mongoose-types';
3
3
 
4
4
  export default function UserRoleModel(
5
5
  connection: Connection,
6
- ): Model<IUserRoleDocument> {
7
- return connection.model<IUserRoleDocument>(
6
+ ): Model<UserRoleDocument> {
7
+ return connection.model<UserRoleDocument>(
8
8
  BaseModelName.UserRole,
9
9
  UserRoleSchema,
10
10
  SchemaCollection.UserRole,
@@ -1,5 +1,5 @@
1
1
  import { SESClient, SendEmailCommand } from '@aws-sdk/client-ses';
2
- import { IApplication, IBaseDocument } from '@digitaldefiance/node-express-suite';
2
+ import { IApplication, BaseDocument } from '@digitaldefiance/node-express-suite';
3
3
 
4
4
  // Simple debugLog implementation
5
5
  function debugLog(debug: boolean, type: 'log' | 'warn' | 'error', ...args: any[]): void {
@@ -5,7 +5,7 @@ import { Brand } from 'ts-brand';
5
5
  import type { IUserDocument } from './documents/user';
6
6
  import { CoreLanguageCode } from '@digitaldefiance/i18n-lib';
7
7
  import { IKeyPairBufferWithUnEncryptedPrivateKey, ISigningKeyPrivateKeyInfo, ISimplePublicKeyOnly, ISimpleKeyPairBuffer, ISimplePublicKeyOnlyBuffer } from '@digitaldefiance/node-ecies-lib'
8
- import {IApiErrorResponse, IApiMessageResponse, ISchema, IStatusCodeResponse, IApiExpressValidationErrorResponse, IApiMongoValidationErrorResponse, IUserRoleDocument, IUsedDirectLoginTokenDocument, IRoleDocument, IMnemonicDocument, IEmailTokenDocument } from '@digitaldefiance/node-express-suite';
8
+ import {IApiErrorResponse, IApiMessageResponse, ISchema, IStatusCodeResponse, IApiExpressValidationErrorResponse, IApiMongoValidationErrorResponse, UserRoleDocument, UsedDirectLoginTokenDocument, RoleDocument, MnemonicDocument, EmailTokenDocument } from '@digitaldefiance/node-express-suite';
9
9
 
10
10
  export type DefaultBackendIdType = Types.ObjectId;
11
11
 
@@ -36,12 +36,12 @@ export type ValidatedBody<T extends string> = {
36
36
  * Schema map interface
37
37
  */
38
38
  export type ModelDocMap = {
39
- EmailToken: IEmailTokenDocument;
40
- Mnemonic: IMnemonicDocument;
41
- Role: IRoleDocument;
42
- UsedDirectLoginToken: IUsedDirectLoginTokenDocument;
39
+ EmailToken: EmailTokenDocument;
40
+ Mnemonic: MnemonicDocument;
41
+ Role: RoleDocument;
42
+ UsedDirectLoginToken: UsedDirectLoginTokenDocument;
43
43
  User: IUserDocument;
44
- UserRole: IUserRoleDocument;
44
+ UserRole: UserRoleDocument;
45
45
  };
46
46
 
47
47
  export type SchemaMap = {
@@ -6,7 +6,7 @@ import { Route, Routes, useNavigate } from 'react-router-dom';
6
6
  import '../styles.scss';
7
7
  import SplashPage from './pages/SplashPage';
8
8
  import { createAppTheme } from './theme.tsx';
9
- import { AppThemeProvider, DashboardPage, MenuProvider, I18nProvider as TranslationProvider, AuthProvider, SuiteConfigProvider, ApiAccess, ChangePasswordFormWrapper, VerifyEmailPageWrapper, RegisterFormWrapper, UserSettingsFormWrapper, LogoutPageWrapper, LoginFormWrapper, PrivateRoute, UnAuthRoute, TopMenu, TranslatedTitle, BackupCodeLoginWrapper, BackupCodesWrapper } from '@digitaldefiance/express-suite-react-components';
9
+ import { AppThemeProvider, DashboardPage, MenuProvider, I18nProvider as TranslationProvider, AuthProvider, SuiteConfigProvider, ApiAccess, ChangePasswordFormWrapper, VerifyEmailPageWrapper, RegisterFormWrapper, UserSettingsFormWrapper, LogoutPageWrapper, LoginFormWrapper, PrivateRoute, UnAuthRoute, TopMenu, TranslatedTitle, BackupCodeLoginWrapper, BackupCodesWrapper, ForgotPasswordFormWrapper, ResetPasswordFormWrapper } from '@digitaldefiance/express-suite-react-components';
10
10
  import { environment } from '../environments/environment';
11
11
  import { {{WorkspaceName}}StringKey, ComponentId, i18nEngine } from '{{namespace}}/lib';
12
12
  import AlbatrossLogo from '../assets/albatross.svg';
@@ -96,6 +96,22 @@ const InnerApp: FC = () => {
96
96
  </PrivateRoute>
97
97
  }
98
98
  />
99
+ <Route
100
+ path="/forgot-password"
101
+ element={
102
+ <UnAuthRoute>
103
+ <ForgotPasswordFormWrapper />
104
+ </UnAuthRoute>
105
+ }
106
+ />
107
+ <Route
108
+ path="/reset-password"
109
+ element={
110
+ <UnAuthRoute>
111
+ <ResetPasswordFormWrapper />
112
+ </UnAuthRoute>
113
+ }
114
+ />
99
115
  <Route path="/backup-code" element={<BackupCodeLoginWrapper />} />
100
116
  <Route
101
117
  path="/backup-codes"