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.
- package/package.json +1 -1
- package/src/templates.ts +56 -10
package/package.json
CHANGED
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.
|
|
23
|
+
'@mantiq/auth': '^0.2.0',
|
|
24
24
|
'@mantiq/cli': '^0.1.6',
|
|
25
|
-
'@mantiq/core': '^0.
|
|
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
|
|
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.
|
|
812
|
+
'@mantiq/auth': '^0.2.0',
|
|
770
813
|
'@mantiq/cli': '^0.1.6',
|
|
771
|
-
'@mantiq/core': '^0.
|
|
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'])
|