create-mantiq 0.6.0 → 0.8.0

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/templates.ts +56 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-mantiq",
3
- "version": "0.6.0",
3
+ "version": "0.8.0",
4
4
  "description": "Scaffold a new MantiqJS application",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/templates.ts CHANGED
@@ -20,9 +20,9 @@ export function getTemplates(ctx: TemplateContext): Record<string, string> {
20
20
  mantiq: 'bun run mantiq.ts',
21
21
  },
22
22
  dependencies: {
23
- '@mantiq/auth': '^0.1.2',
23
+ '@mantiq/auth': '^0.2.0',
24
24
  '@mantiq/cli': '^0.1.6',
25
- '@mantiq/core': '^0.1.4',
25
+ '@mantiq/core': '^0.2.0',
26
26
  '@mantiq/database': '^0.1.4',
27
27
  '@mantiq/events': '^0.1.2',
28
28
  '@mantiq/filesystem': '^0.1.2',
@@ -108,8 +108,8 @@ storage/heartbeat/
108
108
 
109
109
  // ── Entry points ────────────────────────────────────────────────────────
110
110
 
111
- 'index.ts': `import { Application, CoreServiceProvider, HttpKernel, RouterImpl, CorsMiddleware, StartSession, EncryptCookies, VerifyCsrfToken } from '@mantiq/core'
112
- import { AuthServiceProvider, Authenticate, RedirectIfAuthenticated } from '@mantiq/auth'
111
+ 'index.ts': `import { Application, CoreServiceProvider, HttpKernel, RouterImpl, CorsMiddleware, StartSession, EncryptCookies, VerifyCsrfToken, RateLimiter, ThrottleRequests } from '@mantiq/core'
112
+ import { AuthServiceProvider, Authenticate, RedirectIfAuthenticated, CheckAbilities, CheckForAnyAbility } from '@mantiq/auth'
113
113
  import { FilesystemServiceProvider } from '@mantiq/filesystem'
114
114
  import { LoggingServiceProvider } from '@mantiq/logging'
115
115
  import { EventServiceProvider } from '@mantiq/events'
@@ -169,6 +169,9 @@ kernel.registerMiddleware('csrf', VerifyCsrfToken)
169
169
  kernel.registerMiddleware('auth', Authenticate)
170
170
  kernel.registerMiddleware('guest', RedirectIfAuthenticated)
171
171
  kernel.registerMiddleware('heartbeat', HeartbeatMiddleware)
172
+ kernel.registerMiddleware('abilities', CheckAbilities)
173
+ kernel.registerMiddleware('ability', CheckForAnyAbility)
174
+ kernel.registerMiddleware('throttle', new ThrottleRequests(new RateLimiter()))
172
175
 
173
176
  // Global middleware
174
177
  kernel.setGlobalMiddleware(['cors', 'encrypt.cookies', 'session', 'heartbeat'])
@@ -322,6 +325,7 @@ export default {
322
325
 
323
326
  guards: {
324
327
  web: { driver: 'session', provider: 'users' },
328
+ api: { driver: 'token', provider: 'users' },
325
329
  },
326
330
 
327
331
  providers: {
@@ -663,10 +667,19 @@ export class User extends Model implements Authenticatable {
663
667
  setRememberToken(token: string | null): void { this.setAttribute('remember_token', token) }
664
668
  getRememberTokenName(): string { return 'remember_token' }
665
669
  }
670
+ `,
671
+
672
+ 'app/Models/PersonalAccessToken.ts': `import { PersonalAccessToken as BaseToken } from '@mantiq/auth'
673
+
674
+ // Re-export the built-in PersonalAccessToken.
675
+ // Extend this class if you need to add custom logic.
676
+ export class PersonalAccessToken extends BaseToken {}
666
677
  `,
667
678
 
668
679
  'app/Providers/DatabaseServiceProvider.ts': `import { ServiceProvider, config } from '@mantiq/core'
669
680
  import { DatabaseManager, setupModels, setManager, Migrator } from '@mantiq/database'
681
+ import { applyHasApiTokens, PersonalAccessToken } from '@mantiq/auth'
682
+ import { User } from '../Models/User.ts'
670
683
 
671
684
  export class DatabaseServiceProvider extends ServiceProvider {
672
685
  override register(): void {
@@ -683,7 +696,11 @@ export class DatabaseServiceProvider extends ServiceProvider {
683
696
 
684
697
  override async boot(): Promise<void> {
685
698
  // Resolve the manager (triggers creation via the singleton factory)
686
- this.app.make(DatabaseManager)
699
+ const manager = this.app.make(DatabaseManager)
700
+
701
+ // Set up PersonalAccessToken connection and apply HasApiTokens mixin
702
+ PersonalAccessToken.setConnection(manager.connection())
703
+ applyHasApiTokens(User)
687
704
  }
688
705
  }
689
706
  `,
@@ -709,6 +726,30 @@ export default class CreateUsersTable extends Migration {
709
726
  await schema.dropIfExists('users')
710
727
  }
711
728
  }
729
+ `,
730
+
731
+ 'database/migrations/002_create_personal_access_tokens_table.ts': `import { Migration } from '@mantiq/database'
732
+ import type { SchemaBuilder } from '@mantiq/database'
733
+
734
+ export default class CreatePersonalAccessTokensTable extends Migration {
735
+ override async up(schema: SchemaBuilder) {
736
+ await schema.create('personal_access_tokens', (t) => {
737
+ t.id()
738
+ t.string('tokenable_type')
739
+ t.unsignedBigInteger('tokenable_id')
740
+ t.string('name')
741
+ t.string('token', 64).unique()
742
+ t.json('abilities').nullable()
743
+ t.timestamp('last_used_at').nullable()
744
+ t.timestamp('expires_at').nullable()
745
+ t.timestamps()
746
+ })
747
+ }
748
+
749
+ override async down(schema: SchemaBuilder) {
750
+ await schema.dropIfExists('personal_access_tokens')
751
+ }
752
+ }
712
753
  `,
713
754
 
714
755
  'database/seeders/DatabaseSeeder.ts': `import { Seeder } from '@mantiq/database'
@@ -758,7 +799,9 @@ function applyKitOverrides(templates: Record<string, string>, ctx: TemplateConte
758
799
  private: true,
759
800
  type: 'module',
760
801
  scripts: {
761
- dev: 'bun run --watch index.ts',
802
+ dev: 'bun run dev:backend & bun run dev:frontend & wait',
803
+ 'dev:backend': 'bun run --watch index.ts',
804
+ 'dev:frontend': 'bunx vite --clearScreen false',
762
805
  start: 'bun run index.ts',
763
806
  mantiq: 'bun run mantiq.ts',
764
807
  build: `vite build && vite build --ssr ${kit === 'react' ? 'src/ssr.tsx' : 'src/ssr.ts'} --outDir bootstrap/ssr`,
@@ -766,9 +809,9 @@ function applyKitOverrides(templates: Record<string, string>, ctx: TemplateConte
766
809
  postinstall: 'rm -rf node_modules/@mantiq/*/node_modules/@mantiq 2>/dev/null; true',
767
810
  },
768
811
  dependencies: {
769
- '@mantiq/auth': '^0.1.2',
812
+ '@mantiq/auth': '^0.2.0',
770
813
  '@mantiq/cli': '^0.1.6',
771
- '@mantiq/core': '^0.1.4',
814
+ '@mantiq/core': '^0.2.0',
772
815
  '@mantiq/database': '^0.1.4',
773
816
  '@mantiq/events': '^0.1.2',
774
817
  '@mantiq/filesystem': '^0.1.2',
@@ -847,9 +890,9 @@ bootstrap/
847
890
  `
848
891
 
849
892
  // ── index.ts ────────────────────────────────────────────────────────────
850
- templates['index.ts'] = `import { Application, CoreServiceProvider, HttpKernel, RouterImpl, CorsMiddleware, StartSession, EncryptCookies, VerifyCsrfToken } from '@mantiq/core'
893
+ templates['index.ts'] = `import { Application, CoreServiceProvider, HttpKernel, RouterImpl, CorsMiddleware, StartSession, EncryptCookies, VerifyCsrfToken, RateLimiter, ThrottleRequests } from '@mantiq/core'
851
894
  import { ViteServiceProvider, ServeStaticFiles } from '@mantiq/vite'
852
- import { AuthServiceProvider, Authenticate, RedirectIfAuthenticated } from '@mantiq/auth'
895
+ import { AuthServiceProvider, Authenticate, RedirectIfAuthenticated, CheckAbilities, CheckForAnyAbility } from '@mantiq/auth'
853
896
  import { FilesystemServiceProvider } from '@mantiq/filesystem'
854
897
  import { LoggingServiceProvider } from '@mantiq/logging'
855
898
  import { EventServiceProvider } from '@mantiq/events'
@@ -921,6 +964,9 @@ kernel.registerMiddleware('csrf', VerifyCsrfToken)
921
964
  kernel.registerMiddleware('auth', Authenticate)
922
965
  kernel.registerMiddleware('guest', RedirectIfAuthenticated)
923
966
  kernel.registerMiddleware('heartbeat', HeartbeatMiddleware)
967
+ kernel.registerMiddleware('abilities', CheckAbilities)
968
+ kernel.registerMiddleware('ability', CheckForAnyAbility)
969
+ kernel.registerMiddleware('throttle', new ThrottleRequests(new RateLimiter()))
924
970
 
925
971
  // Global middleware
926
972
  kernel.setGlobalMiddleware(['static', 'cors', 'encrypt.cookies', 'session', 'heartbeat'])