kybernus 1.0.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/README.md +321 -0
- package/dist/cli/commands/init.d.ts +12 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +71 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/login.d.ts +6 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +42 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +2 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/logout.js +22 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/register.d.ts +2 -0
- package/dist/cli/commands/register.d.ts.map +1 -0
- package/dist/cli/commands/register.js +69 -0
- package/dist/cli/commands/register.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +46 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +2 -0
- package/dist/cli/commands/upgrade.d.ts.map +1 -0
- package/dist/cli/commands/upgrade.js +62 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/prompts/wizard.d.ts +3 -0
- package/dist/cli/prompts/wizard.d.ts.map +1 -0
- package/dist/cli/prompts/wizard.js +121 -0
- package/dist/cli/prompts/wizard.js.map +1 -0
- package/dist/cli/services/AnalyticsClient.d.ts +11 -0
- package/dist/cli/services/AnalyticsClient.d.ts.map +1 -0
- package/dist/cli/services/AnalyticsClient.js +32 -0
- package/dist/cli/services/AnalyticsClient.js.map +1 -0
- package/dist/core/ai/documentation-generator.d.ts +36 -0
- package/dist/core/ai/documentation-generator.d.ts.map +1 -0
- package/dist/core/ai/documentation-generator.js +111 -0
- package/dist/core/ai/documentation-generator.js.map +1 -0
- package/dist/core/ai/gemini-service.d.ts +17 -0
- package/dist/core/ai/gemini-service.d.ts.map +1 -0
- package/dist/core/ai/gemini-service.js +68 -0
- package/dist/core/ai/gemini-service.js.map +1 -0
- package/dist/core/ai/prompts/documentation-prompts.d.ts +17 -0
- package/dist/core/ai/prompts/documentation-prompts.d.ts.map +1 -0
- package/dist/core/ai/prompts/documentation-prompts.js +195 -0
- package/dist/core/ai/prompts/documentation-prompts.js.map +1 -0
- package/dist/core/auth/license-validator.d.ts +33 -0
- package/dist/core/auth/license-validator.d.ts.map +1 -0
- package/dist/core/auth/license-validator.js +81 -0
- package/dist/core/auth/license-validator.js.map +1 -0
- package/dist/core/config/config-manager.d.ts +24 -0
- package/dist/core/config/config-manager.d.ts.map +1 -0
- package/dist/core/config/config-manager.js +56 -0
- package/dist/core/config/config-manager.js.map +1 -0
- package/dist/core/generator/context-builder.d.ts +10 -0
- package/dist/core/generator/context-builder.d.ts.map +1 -0
- package/dist/core/generator/context-builder.js +43 -0
- package/dist/core/generator/context-builder.js.map +1 -0
- package/dist/core/generator/project.d.ts +42 -0
- package/dist/core/generator/project.d.ts.map +1 -0
- package/dist/core/generator/project.js +278 -0
- package/dist/core/generator/project.js.map +1 -0
- package/dist/core/templates/engine.d.ts +25 -0
- package/dist/core/templates/engine.d.ts.map +1 -0
- package/dist/core/templates/engine.js +78 -0
- package/dist/core/templates/engine.js.map +1 -0
- package/dist/core/templates/helpers.d.ts +6 -0
- package/dist/core/templates/helpers.d.ts.map +1 -0
- package/dist/core/templates/helpers.js +63 -0
- package/dist/core/templates/helpers.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/models/config.d.ts +38 -0
- package/dist/models/config.d.ts.map +1 -0
- package/dist/models/config.js +2 -0
- package/dist/models/config.js.map +1 -0
- package/package.json +66 -0
- package/templates/java-spring/free/mvc/.gitignore.hbs +39 -0
- package/templates/java-spring/free/mvc/README.md.hbs +116 -0
- package/templates/java-spring/free/mvc/docker-compose.yml.hbs +18 -0
- package/templates/java-spring/free/mvc/pom.xml.hbs +92 -0
- package/templates/java-spring/free/mvc/src/main/java/{{packagePath}}/config/GlobalExceptionHandler.java.hbs +39 -0
- package/templates/java-spring/free/mvc/src/main/java/{{packagePath}}/config/WebConfig.java.hbs +30 -0
- package/templates/java-spring/free/mvc/src/main/java/{{packagePath}}/controller/HealthController.java.hbs +30 -0
- package/templates/java-spring/free/mvc/src/main/java/{{packagePath}}/model/.gitkeep +0 -0
- package/templates/java-spring/free/mvc/src/main/java/{{packagePath}}/repository/.gitkeep +0 -0
- package/templates/java-spring/free/mvc/src/main/java/{{packagePath}}/service/.gitkeep +0 -0
- package/templates/java-spring/free/mvc/src/main/java/{{packagePath}}/{{projectNamePascalCase}}Application.java.hbs +13 -0
- package/templates/java-spring/free/mvc/src/main/resources/application.yml.hbs +32 -0
- package/templates/java-spring/free/mvc/src/test/java/{{packagePath}}/{{projectNamePascalCase}}ApplicationTests.java.hbs +13 -0
- package/templates/java-spring/free/mvc/src/test/resources/application.yml.hbs +10 -0
- package/templates/java-spring/free/mvc/template.json +14 -0
- package/templates/java-spring/pro/clean/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/java-spring/pro/clean/Dockerfile.hbs +45 -0
- package/templates/java-spring/pro/clean/README.md.hbs +31 -0
- package/templates/java-spring/pro/clean/docker-compose.yml.hbs +18 -0
- package/templates/java-spring/pro/clean/infra/main.tf.hbs +83 -0
- package/templates/java-spring/pro/clean/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/java-spring/pro/clean/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/java-spring/pro/clean/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/java-spring/pro/clean/pom.xml.hbs +130 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/application/service/AuthService.java.hbs +36 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/domain/entity/User.java.hbs +77 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/domain/repository/UserRepository.java.hbs +15 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/domain/usecase/LoginUserUseCase.java.hbs +36 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/domain/usecase/RegisterUserUseCase.java.hbs +46 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/infrastructure/persistence/InMemoryUserRepository.java.hbs +41 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/infrastructure/security/SecurityAdapters.java.hbs +53 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/infrastructure/web/controller/AuthController.java.hbs +41 -0
- package/templates/java-spring/pro/clean/src/main/java/{{packagePath}}/{{projectNamePascalCase}}Application.java.hbs +14 -0
- package/templates/java-spring/pro/hexagonal/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/java-spring/pro/hexagonal/Dockerfile.hbs +45 -0
- package/templates/java-spring/pro/hexagonal/README.md.hbs +38 -0
- package/templates/java-spring/pro/hexagonal/docker-compose.yml.hbs +18 -0
- package/templates/java-spring/pro/hexagonal/infra/main.tf.hbs +83 -0
- package/templates/java-spring/pro/hexagonal/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/java-spring/pro/hexagonal/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/java-spring/pro/hexagonal/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/java-spring/pro/hexagonal/pom.xml.hbs +130 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/application/service/AuthService.java.hbs +36 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/domain/entity/User.java.hbs +77 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/domain/repository/UserRepository.java.hbs +15 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/domain/usecase/LoginUserUseCase.java.hbs +36 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/domain/usecase/RegisterUserUseCase.java.hbs +46 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/infrastructure/persistence/InMemoryUserRepository.java.hbs +41 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/infrastructure/security/SecurityAdapters.java.hbs +53 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/infrastructure/web/controller/AuthController.java.hbs +41 -0
- package/templates/java-spring/pro/hexagonal/src/main/java/{{packagePath}}/{{projectNamePascalCase}}Application.java.hbs +14 -0
- package/templates/java-spring/pro/mvc/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/java-spring/pro/mvc/Dockerfile.hbs +45 -0
- package/templates/java-spring/pro/mvc/README.md.hbs +116 -0
- package/templates/java-spring/pro/mvc/docker-compose.yml.hbs +18 -0
- package/templates/java-spring/pro/mvc/infra/main.tf.hbs +83 -0
- package/templates/java-spring/pro/mvc/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/java-spring/pro/mvc/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/java-spring/pro/mvc/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/java-spring/pro/mvc/pom.xml.hbs +130 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/config/GlobalExceptionHandler.java.hbs +39 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/config/SecurityConfig.java.hbs +44 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/config/WebConfig.java.hbs +30 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/controller/AuthController.java.hbs +69 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/controller/HealthController.java.hbs +30 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/controller/PaymentsController.java.hbs +49 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/dto/AuthRequest.java.hbs +3 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/dto/AuthResponse.java.hbs +3 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/model/.gitkeep +0 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/repository/.gitkeep +0 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/security/JwtAuthenticationFilter.java.hbs +56 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/security/JwtTokenProvider.java.hbs +59 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/service/.gitkeep +0 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/service/StripeService.java.hbs +67 -0
- package/templates/java-spring/pro/mvc/src/main/java/{{packagePath}}/{{projectNamePascalCase}}Application.java.hbs +13 -0
- package/templates/java-spring/pro/mvc/src/main/resources/application.yml.hbs +32 -0
- package/templates/java-spring/pro/mvc/src/test/java/{{packagePath}}/{{projectNamePascalCase}}ApplicationTests.java.hbs +13 -0
- package/templates/java-spring/pro/mvc/src/test/resources/application.yml.hbs +10 -0
- package/templates/java-spring/pro/mvc/template.json +14 -0
- package/templates/nestjs/free/mvc/README.md.hbs +28 -0
- package/templates/nestjs/free/mvc/package.json.hbs +29 -0
- package/templates/nestjs/free/mvc/src/app.module.ts.hbs +13 -0
- package/templates/nestjs/free/mvc/src/controllers/health.controller.ts.hbs +9 -0
- package/templates/nestjs/free/mvc/src/controllers/items.controller.ts.hbs +32 -0
- package/templates/nestjs/free/mvc/src/main.ts.hbs +17 -0
- package/templates/nestjs/free/mvc/src/models/create-item.dto.ts.hbs +10 -0
- package/templates/nestjs/free/mvc/src/models/item.model.ts.hbs +6 -0
- package/templates/nestjs/free/mvc/src/modules/items.module.ts.hbs +9 -0
- package/templates/nestjs/free/mvc/src/services/items.service.ts.hbs +32 -0
- package/templates/nestjs/free/mvc/tsconfig.json.hbs +21 -0
- package/templates/nestjs/pro/clean/.env.example.hbs +19 -0
- package/templates/nestjs/pro/clean/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/nestjs/pro/clean/Dockerfile.hbs +45 -0
- package/templates/nestjs/pro/clean/infra/main.tf.hbs +83 -0
- package/templates/nestjs/pro/clean/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/nestjs/pro/clean/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/nestjs/pro/clean/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/nestjs/pro/clean/package.json.hbs +37 -0
- package/templates/nestjs/pro/clean/src/auth.module.ts.hbs +17 -0
- package/templates/nestjs/pro/clean/src/domain/entities/user.entity.ts.hbs +12 -0
- package/templates/nestjs/pro/clean/src/domain/repositories/user.repository.ts.hbs +6 -0
- package/templates/nestjs/pro/clean/src/domain/use-cases/register.use-case.ts.hbs +18 -0
- package/templates/nestjs/pro/clean/src/infrastructure/database/in-memory.repository.ts.hbs +17 -0
- package/templates/nestjs/pro/clean/src/infrastructure/http/auth.controller.ts.hbs +16 -0
- package/templates/nestjs/pro/clean/tsconfig.json.hbs +21 -0
- package/templates/nestjs/pro/hexagonal/.env.example.hbs +19 -0
- package/templates/nestjs/pro/hexagonal/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/nestjs/pro/hexagonal/Dockerfile.hbs +45 -0
- package/templates/nestjs/pro/hexagonal/infra/main.tf.hbs +83 -0
- package/templates/nestjs/pro/hexagonal/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/nestjs/pro/hexagonal/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/nestjs/pro/hexagonal/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/nestjs/pro/hexagonal/package.json.hbs +37 -0
- package/templates/nestjs/pro/hexagonal/src/adapters/inbound/http.adapter.ts.hbs +12 -0
- package/templates/nestjs/pro/hexagonal/src/adapters/outbound/persistence.adapter.ts.hbs +13 -0
- package/templates/nestjs/pro/hexagonal/src/auth.module.ts.hbs +19 -0
- package/templates/nestjs/pro/hexagonal/src/core/auth.service.ts.hbs +16 -0
- package/templates/nestjs/pro/hexagonal/src/core/domain/user.entity.ts.hbs +8 -0
- package/templates/nestjs/pro/hexagonal/src/core/ports/ports.ts.hbs +9 -0
- package/templates/nestjs/pro/hexagonal/tsconfig.json.hbs +21 -0
- package/templates/nestjs/pro/mvc/.env.example.hbs +19 -0
- package/templates/nestjs/pro/mvc/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/nestjs/pro/mvc/Dockerfile.hbs +45 -0
- package/templates/nestjs/pro/mvc/README.md.hbs +28 -0
- package/templates/nestjs/pro/mvc/infra/main.tf.hbs +83 -0
- package/templates/nestjs/pro/mvc/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/nestjs/pro/mvc/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/nestjs/pro/mvc/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/nestjs/pro/mvc/package.json.hbs +37 -0
- package/templates/nestjs/pro/mvc/src/app.module.ts.hbs +17 -0
- package/templates/nestjs/pro/mvc/src/auth/auth.controller.ts.hbs +35 -0
- package/templates/nestjs/pro/mvc/src/auth/auth.module.ts.hbs +25 -0
- package/templates/nestjs/pro/mvc/src/auth/auth.service.ts.hbs +55 -0
- package/templates/nestjs/pro/mvc/src/auth/jwt.strategy.ts.hbs +19 -0
- package/templates/nestjs/pro/mvc/src/controllers/health.controller.ts.hbs +9 -0
- package/templates/nestjs/pro/mvc/src/controllers/items.controller.ts.hbs +32 -0
- package/templates/nestjs/pro/mvc/src/main.ts.hbs +17 -0
- package/templates/nestjs/pro/mvc/src/models/create-item.dto.ts.hbs +10 -0
- package/templates/nestjs/pro/mvc/src/models/item.model.ts.hbs +6 -0
- package/templates/nestjs/pro/mvc/src/modules/items.module.ts.hbs +9 -0
- package/templates/nestjs/pro/mvc/src/payments/payments.controller.ts.hbs +26 -0
- package/templates/nestjs/pro/mvc/src/payments/payments.module.ts.hbs +11 -0
- package/templates/nestjs/pro/mvc/src/payments/payments.service.ts.hbs +43 -0
- package/templates/nestjs/pro/mvc/src/services/items.service.ts.hbs +32 -0
- package/templates/nestjs/pro/mvc/tsconfig.json.hbs +21 -0
- package/templates/nextjs/free/default/.env.example.hbs +1 -0
- package/templates/nextjs/free/default/.gitignore.hbs +8 -0
- package/templates/nextjs/free/default/README.md.hbs +96 -0
- package/templates/nextjs/free/default/docker-compose.yml.hbs +18 -0
- package/templates/nextjs/free/default/next.config.js.hbs +4 -0
- package/templates/nextjs/free/default/package.json.hbs +32 -0
- package/templates/nextjs/free/default/postcss.config.js.hbs +6 -0
- package/templates/nextjs/free/default/prisma/schema.prisma.hbs +18 -0
- package/templates/nextjs/free/default/public/.gitkeep +0 -0
- package/templates/nextjs/free/default/src/app/api/health/route.ts.hbs +9 -0
- package/templates/nextjs/free/default/src/app/globals.css.hbs +3 -0
- package/templates/nextjs/free/default/src/app/layout.tsx.hbs +22 -0
- package/templates/nextjs/free/default/src/app/page.tsx.hbs +38 -0
- package/templates/nextjs/free/default/src/components/.gitkeep +0 -0
- package/templates/nextjs/free/default/src/lib/prisma.ts.hbs +13 -0
- package/templates/nextjs/free/default/src/proxy.ts.hbs +22 -0
- package/templates/nextjs/free/default/tailwind.config.ts.hbs +15 -0
- package/templates/nextjs/free/default/template.json +18 -0
- package/templates/nextjs/free/default/tsconfig.json.hbs +23 -0
- package/templates/nextjs/pro/default/.env.example.hbs +20 -0
- package/templates/nextjs/pro/default/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/nextjs/pro/default/Dockerfile.hbs +45 -0
- package/templates/nextjs/pro/default/README.md.hbs +96 -0
- package/templates/nextjs/pro/default/docker-compose.yml.hbs +18 -0
- package/templates/nextjs/pro/default/infra/main.tf.hbs +83 -0
- package/templates/nextjs/pro/default/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/nextjs/pro/default/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/nextjs/pro/default/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/nextjs/pro/default/next.config.js.hbs +4 -0
- package/templates/nextjs/pro/default/package.json.hbs +34 -0
- package/templates/nextjs/pro/default/postcss.config.js.hbs +6 -0
- package/templates/nextjs/pro/default/prisma/schema.prisma.hbs +18 -0
- package/templates/nextjs/pro/default/public/.gitkeep +0 -0
- package/templates/nextjs/pro/default/src/app/api/auth/[...nextauth]/route.ts.hbs +61 -0
- package/templates/nextjs/pro/default/src/app/api/checkout/route.ts.hbs +30 -0
- package/templates/nextjs/pro/default/src/app/api/health/route.ts.hbs +9 -0
- package/templates/nextjs/pro/default/src/app/api/webhook/route.ts.hbs +51 -0
- package/templates/nextjs/pro/default/src/app/dashboard/page.tsx.hbs +52 -0
- package/templates/nextjs/pro/default/src/app/globals.css.hbs +3 -0
- package/templates/nextjs/pro/default/src/app/layout.tsx.hbs +22 -0
- package/templates/nextjs/pro/default/src/app/page.tsx.hbs +38 -0
- package/templates/nextjs/pro/default/src/components/.gitkeep +0 -0
- package/templates/nextjs/pro/default/src/components/AuthButton.tsx.hbs +34 -0
- package/templates/nextjs/pro/default/src/components/Providers.tsx.hbs +7 -0
- package/templates/nextjs/pro/default/src/lib/prisma.ts.hbs +13 -0
- package/templates/nextjs/pro/default/src/proxy.ts.hbs +22 -0
- package/templates/nextjs/pro/default/tailwind.config.ts.hbs +15 -0
- package/templates/nextjs/pro/default/template.json +18 -0
- package/templates/nextjs/pro/default/tsconfig.json.hbs +40 -0
- package/templates/nodejs-express/free/mvc/.env.example.hbs +3 -0
- package/templates/nodejs-express/free/mvc/.gitignore.hbs +6 -0
- package/templates/nodejs-express/free/mvc/README.md.hbs +128 -0
- package/templates/nodejs-express/free/mvc/docker-compose.yml.hbs +18 -0
- package/templates/nodejs-express/free/mvc/package.json.hbs +39 -0
- package/templates/nodejs-express/free/mvc/src/app.ts.hbs +29 -0
- package/templates/nodejs-express/free/mvc/src/config/database.ts.hbs +10 -0
- package/templates/nodejs-express/free/mvc/src/controllers/healthController.ts.hbs +20 -0
- package/templates/nodejs-express/free/mvc/src/index.ts.hbs +12 -0
- package/templates/nodejs-express/free/mvc/src/middleware/errorHandler.ts.hbs +22 -0
- package/templates/nodejs-express/free/mvc/src/models/.gitkeep +0 -0
- package/templates/nodejs-express/free/mvc/src/routes/index.ts.hbs +14 -0
- package/templates/nodejs-express/free/mvc/src/services/.gitkeep +0 -0
- package/templates/nodejs-express/free/mvc/template.json +18 -0
- package/templates/nodejs-express/free/mvc/tsconfig.json.hbs +18 -0
- package/templates/nodejs-express/pro/clean/.env.example.hbs +19 -0
- package/templates/nodejs-express/pro/clean/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/nodejs-express/pro/clean/Dockerfile.hbs +45 -0
- package/templates/nodejs-express/pro/clean/README.md.hbs +41 -0
- package/templates/nodejs-express/pro/clean/docker-compose.yml.hbs +18 -0
- package/templates/nodejs-express/pro/clean/infra/main.tf.hbs +83 -0
- package/templates/nodejs-express/pro/clean/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/nodejs-express/pro/clean/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/nodejs-express/pro/clean/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/nodejs-express/pro/clean/package.json.hbs +55 -0
- package/templates/nodejs-express/pro/clean/src/application/services/AuthService.ts.hbs +66 -0
- package/templates/nodejs-express/pro/clean/src/domain/entities/User.ts.hbs +38 -0
- package/templates/nodejs-express/pro/clean/src/domain/repositories/IUserRepository.ts.hbs +13 -0
- package/templates/nodejs-express/pro/clean/src/domain/usecases/LoginUserUseCase.ts.hbs +39 -0
- package/templates/nodejs-express/pro/clean/src/domain/usecases/RegisterUserUseCase.ts.hbs +51 -0
- package/templates/nodejs-express/pro/clean/src/index.ts.hbs +40 -0
- package/templates/nodejs-express/pro/clean/src/infrastructure/database/InMemoryUserRepository.ts.hbs +46 -0
- package/templates/nodejs-express/pro/clean/src/infrastructure/http/controllers/AuthController.ts.hbs +45 -0
- package/templates/nodejs-express/pro/clean/src/infrastructure/http/middlewares/AuthMiddleware.ts.hbs +27 -0
- package/templates/nodejs-express/pro/clean/src/infrastructure/providers/PasswordHasher.ts.hbs +14 -0
- package/templates/nodejs-express/pro/clean/src/infrastructure/providers/TokenGenerator.ts.hbs +25 -0
- package/templates/nodejs-express/pro/clean/tsconfig.json.hbs +27 -0
- package/templates/nodejs-express/pro/hexagonal/.env.example.hbs +19 -0
- package/templates/nodejs-express/pro/hexagonal/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/nodejs-express/pro/hexagonal/Dockerfile.hbs +45 -0
- package/templates/nodejs-express/pro/hexagonal/README.md.hbs +42 -0
- package/templates/nodejs-express/pro/hexagonal/docker-compose.yml.hbs +18 -0
- package/templates/nodejs-express/pro/hexagonal/infra/main.tf.hbs +83 -0
- package/templates/nodejs-express/pro/hexagonal/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/nodejs-express/pro/hexagonal/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/nodejs-express/pro/hexagonal/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/nodejs-express/pro/hexagonal/package.json.hbs +55 -0
- package/templates/nodejs-express/pro/hexagonal/src/adapters/inbound/http/AuthController.ts.hbs +48 -0
- package/templates/nodejs-express/pro/hexagonal/src/adapters/outbound/SecurityAdapters.ts.hbs +31 -0
- package/templates/nodejs-express/pro/hexagonal/src/adapters/outbound/persistence/InMemoryUserAdapter.ts.hbs +38 -0
- package/templates/nodejs-express/pro/hexagonal/src/core/AuthService.ts.hbs +51 -0
- package/templates/nodejs-express/pro/hexagonal/src/core/domain/entities/User.ts.hbs +28 -0
- package/templates/nodejs-express/pro/hexagonal/src/core/ports/inbound/IAuthPort.ts.hbs +11 -0
- package/templates/nodejs-express/pro/hexagonal/src/core/ports/outbound/ISecurityPorts.ts.hbs +15 -0
- package/templates/nodejs-express/pro/hexagonal/src/core/ports/outbound/IUserRepositoryPort.ts.hbs +13 -0
- package/templates/nodejs-express/pro/hexagonal/src/index.ts.hbs +41 -0
- package/templates/nodejs-express/pro/hexagonal/tsconfig.json.hbs +27 -0
- package/templates/nodejs-express/pro/mvc/.env.example.hbs +19 -0
- package/templates/nodejs-express/pro/mvc/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/nodejs-express/pro/mvc/Dockerfile.hbs +45 -0
- package/templates/nodejs-express/pro/mvc/README.md.hbs +85 -0
- package/templates/nodejs-express/pro/mvc/docker-compose.yml.hbs +18 -0
- package/templates/nodejs-express/pro/mvc/infra/main.tf.hbs +83 -0
- package/templates/nodejs-express/pro/mvc/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/nodejs-express/pro/mvc/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/nodejs-express/pro/mvc/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/nodejs-express/pro/mvc/package.json.hbs +55 -0
- package/templates/nodejs-express/pro/mvc/src/app.ts.hbs +34 -0
- package/templates/nodejs-express/pro/mvc/src/config/database.ts.hbs +10 -0
- package/templates/nodejs-express/pro/mvc/src/controllers/auth.controller.ts.hbs +91 -0
- package/templates/nodejs-express/pro/mvc/src/controllers/healthController.ts.hbs +20 -0
- package/templates/nodejs-express/pro/mvc/src/controllers/payments.controller.ts.hbs +72 -0
- package/templates/nodejs-express/pro/mvc/src/index.ts.hbs +12 -0
- package/templates/nodejs-express/pro/mvc/src/middleware/errorHandler.ts.hbs +22 -0
- package/templates/nodejs-express/pro/mvc/src/middlewares/auth.middleware.ts.hbs +31 -0
- package/templates/nodejs-express/pro/mvc/src/models/.gitkeep +0 -0
- package/templates/nodejs-express/pro/mvc/src/routes/index.ts.hbs +14 -0
- package/templates/nodejs-express/pro/mvc/src/services/.gitkeep +0 -0
- package/templates/nodejs-express/pro/mvc/src/services/stripe.service.ts.hbs +102 -0
- package/templates/nodejs-express/pro/mvc/template.json +18 -0
- package/templates/nodejs-express/pro/mvc/tsconfig.json.hbs +27 -0
- package/templates/python-fastapi/free/mvc/README.md.hbs +41 -0
- package/templates/python-fastapi/free/mvc/app/controllers/health.py.hbs +7 -0
- package/templates/python-fastapi/free/mvc/app/controllers/items.py.hbs +27 -0
- package/templates/python-fastapi/free/mvc/app/main.py.hbs +26 -0
- package/templates/python-fastapi/free/mvc/app/models/item.py.hbs +11 -0
- package/templates/python-fastapi/free/mvc/app/schemas/item.py.hbs +17 -0
- package/templates/python-fastapi/free/mvc/app/services/item_service.py.hbs +33 -0
- package/templates/python-fastapi/free/mvc/requirements.txt.hbs +4 -0
- package/templates/python-fastapi/pro/clean/.env.example.hbs +17 -0
- package/templates/python-fastapi/pro/clean/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/python-fastapi/pro/clean/Dockerfile.hbs +20 -0
- package/templates/python-fastapi/pro/clean/app/domain/entities/user.py.hbs +23 -0
- package/templates/python-fastapi/pro/clean/app/domain/repositories/user_repository.py.hbs +22 -0
- package/templates/python-fastapi/pro/clean/app/domain/usecases/register_user.py.hbs +30 -0
- package/templates/python-fastapi/pro/clean/app/infrastructure/database/in_memory_repository.py.hbs +26 -0
- package/templates/python-fastapi/pro/clean/app/infrastructure/http/auth_controller.py.hbs +26 -0
- package/templates/python-fastapi/pro/clean/app/infrastructure/security/adapters.py.hbs +23 -0
- package/templates/python-fastapi/pro/clean/app/main.py.hbs +10 -0
- package/templates/python-fastapi/pro/clean/infra/main.tf.hbs +83 -0
- package/templates/python-fastapi/pro/clean/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/python-fastapi/pro/clean/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/python-fastapi/pro/clean/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/python-fastapi/pro/clean/requirements.txt.hbs +12 -0
- package/templates/python-fastapi/pro/hexagonal/.env.example.hbs +17 -0
- package/templates/python-fastapi/pro/hexagonal/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/python-fastapi/pro/hexagonal/Dockerfile.hbs +20 -0
- package/templates/python-fastapi/pro/hexagonal/app/adapters/inbound/http_adapter.py.hbs +29 -0
- package/templates/python-fastapi/pro/hexagonal/app/core/domain/user.py.hbs +15 -0
- package/templates/python-fastapi/pro/hexagonal/app/core/ports.py.hbs +25 -0
- package/templates/python-fastapi/pro/hexagonal/app/core/service.py.hbs +28 -0
- package/templates/python-fastapi/pro/hexagonal/app/main.py.hbs +22 -0
- package/templates/python-fastapi/pro/hexagonal/infra/main.tf.hbs +83 -0
- package/templates/python-fastapi/pro/hexagonal/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/python-fastapi/pro/hexagonal/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/python-fastapi/pro/hexagonal/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/python-fastapi/pro/hexagonal/requirements.txt.hbs +12 -0
- package/templates/python-fastapi/pro/mvc/.env.example.hbs +17 -0
- package/templates/python-fastapi/pro/mvc/.github/workflows/ci-cd.yml.hbs +88 -0
- package/templates/python-fastapi/pro/mvc/Dockerfile.hbs +20 -0
- package/templates/python-fastapi/pro/mvc/README.md.hbs +41 -0
- package/templates/python-fastapi/pro/mvc/app/controllers/auth.py.hbs +46 -0
- package/templates/python-fastapi/pro/mvc/app/controllers/health.py.hbs +7 -0
- package/templates/python-fastapi/pro/mvc/app/controllers/items.py.hbs +21 -0
- package/templates/python-fastapi/pro/mvc/app/controllers/payments.py.hbs +32 -0
- package/templates/python-fastapi/pro/mvc/app/main.py.hbs +20 -0
- package/templates/python-fastapi/pro/mvc/app/middleware/security.py.hbs +39 -0
- package/templates/python-fastapi/pro/mvc/app/models/item.py.hbs +11 -0
- package/templates/python-fastapi/pro/mvc/app/schemas/item.py.hbs +16 -0
- package/templates/python-fastapi/pro/mvc/app/services/item_service.py.hbs +24 -0
- package/templates/python-fastapi/pro/mvc/infra/main.tf.hbs +83 -0
- package/templates/python-fastapi/pro/mvc/infra/modules/ecs/main.tf.hbs +54 -0
- package/templates/python-fastapi/pro/mvc/infra/modules/rds/main.tf.hbs +88 -0
- package/templates/python-fastapi/pro/mvc/infra/modules/vpc/main.tf.hbs +107 -0
- package/templates/python-fastapi/pro/mvc/requirements.txt.hbs +12 -0
package/README.md
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# Kybernus CLI 🚀
|
|
2
|
+
|
|
3
|
+
[](https://github.com/ViniMTrevisan/Kybernus-CLI/actions)
|
|
4
|
+
[](https://www.npmjs.com/package/kybernus)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
**The Ultimate Backend Scaffolding Tool for Modern Developers.**
|
|
8
|
+
|
|
9
|
+
Build production-ready applications in minutes, not days. Kybernus automates the setup of robust, scalable backend and fullstack architectures with industry best practices built-in.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 📦 Project Structure
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
kybernus/
|
|
17
|
+
├── apps/web/ # Next.js Web Application (Dashboard, Admin, APIs)
|
|
18
|
+
├── src/ # CLI Source Code
|
|
19
|
+
├── templates/ # Project Templates (5 stacks × 2 tiers)
|
|
20
|
+
├── tests/ # Automated Test Suite
|
|
21
|
+
└── docs/ # Documentation
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Components
|
|
25
|
+
|
|
26
|
+
| Component | Description |
|
|
27
|
+
|-----------|-------------|
|
|
28
|
+
| **CLI** | Interactive command-line tool for project scaffolding |
|
|
29
|
+
| **Web App** | Dashboard, authentication, admin panel, payment integration |
|
|
30
|
+
| **License System** | Trial/Free/Pro tiers with usage tracking |
|
|
31
|
+
| **Templates** | Production-ready project templates for 5 tech stacks |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 🛠️ Tech Stack
|
|
36
|
+
|
|
37
|
+
### CLI
|
|
38
|
+
- **TypeScript** - Type-safe codebase
|
|
39
|
+
- **Commander.js** - CLI framework
|
|
40
|
+
- **Clack** - Beautiful interactive prompts
|
|
41
|
+
- **Handlebars** - Template engine
|
|
42
|
+
- **Google Gemini** - AI-powered documentation (Pro)
|
|
43
|
+
|
|
44
|
+
### Web Application
|
|
45
|
+
- **Next.js 16** - React framework with App Router
|
|
46
|
+
- **PostgreSQL** - Database (via Prisma ORM)
|
|
47
|
+
- **Stripe** - Payment processing
|
|
48
|
+
- **Resend** - Transactional emails
|
|
49
|
+
- **Upstash Redis** - Rate limiting & caching
|
|
50
|
+
- **TailwindCSS** - Styling
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 🚀 Supported Stacks & Architectures
|
|
55
|
+
|
|
56
|
+
| Stack | Free Tier | Pro Tier 🌟 |
|
|
57
|
+
|:------|:---------:|:-----------:|
|
|
58
|
+
| **Node.js + Express** | ✅ MVC | ✅ Clean/Hexagonal |
|
|
59
|
+
| **Next.js** | ✅ MVC | ✅ Clean/Hexagonal |
|
|
60
|
+
| **Java Spring Boot** | ✅ MVC | ✅ Clean/Hexagonal |
|
|
61
|
+
| **NestJS** | ❌ | ✅ All Patterns |
|
|
62
|
+
| **Python FastAPI** | ❌ | ✅ All Patterns |
|
|
63
|
+
|
|
64
|
+
### Features by Tier
|
|
65
|
+
|
|
66
|
+
| Feature | Free | Trial (15 days) | Pro ($97) |
|
|
67
|
+
|:--------|:----:|:---------------:|:---------:|
|
|
68
|
+
| Basic Stacks | ✅ | ✅ | ✅ |
|
|
69
|
+
| Pro Stacks (NestJS, FastAPI) | ❌ | ✅ | ✅ |
|
|
70
|
+
| Clean/Hexagonal Architecture | ❌ | ✅ | ✅ |
|
|
71
|
+
| Docker & CI/CD | ❌ | ✅ | ✅ |
|
|
72
|
+
| Terraform Configs | ❌ | ✅ | ✅ |
|
|
73
|
+
| AI Documentation | ❌ | ✅ | ✅ |
|
|
74
|
+
| Project Limit | Unlimited | 3 Projects | Unlimited |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 📖 CLI Commands
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Installation
|
|
82
|
+
npm install -g kybernus
|
|
83
|
+
|
|
84
|
+
# Core Commands
|
|
85
|
+
kybernus init # Start the interactive project generator
|
|
86
|
+
kybernus register # Create a free trial account (15 days, 3 projects)
|
|
87
|
+
kybernus login # Authenticate with a license key
|
|
88
|
+
kybernus status # Check license status and usage
|
|
89
|
+
kybernus upgrade # Upgrade to Pro ($97 lifetime)
|
|
90
|
+
kybernus logout # Sign out and remove license
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Usage Example
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Start a new project
|
|
97
|
+
$ kybernus init
|
|
98
|
+
|
|
99
|
+
┌ 🚀 Kybernus Project Generator
|
|
100
|
+
│
|
|
101
|
+
◆ Project name: my-api
|
|
102
|
+
◆ Select your stack:
|
|
103
|
+
│ ● Node.js + Express
|
|
104
|
+
│ ○ NestJS (Pro)
|
|
105
|
+
│ ○ Java Spring Boot
|
|
106
|
+
│ ○ Python FastAPI (Pro)
|
|
107
|
+
│ ○ Next.js
|
|
108
|
+
│
|
|
109
|
+
◆ Architecture: Clean Architecture
|
|
110
|
+
◆ Include Docker? Yes
|
|
111
|
+
◆ Generate AI docs? Yes
|
|
112
|
+
│
|
|
113
|
+
└ ✔ Project created successfully!
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 🌐 Web Application
|
|
119
|
+
|
|
120
|
+
The web app (`apps/web/`) provides:
|
|
121
|
+
|
|
122
|
+
### Public Pages
|
|
123
|
+
- **Landing Page** - Product showcase with pricing
|
|
124
|
+
- **Documentation** - CLI reference and guides
|
|
125
|
+
- **Privacy Policy** & **Terms of Service**
|
|
126
|
+
|
|
127
|
+
### Authentication
|
|
128
|
+
- **Register/Login** - Email + password with bcrypt hashing
|
|
129
|
+
- **Password Recovery** - Email-based reset flow
|
|
130
|
+
- **Session Management** - JWT with 7-day persistence
|
|
131
|
+
- **Cookie Consent** - LGPD compliant
|
|
132
|
+
|
|
133
|
+
### User Dashboard
|
|
134
|
+
- License key display & copy
|
|
135
|
+
- Usage tracking (projects used / limit)
|
|
136
|
+
- Profile management (email/password updates)
|
|
137
|
+
- Upgrade to Pro via Stripe
|
|
138
|
+
|
|
139
|
+
### Admin Panel
|
|
140
|
+
- User management with search/filter
|
|
141
|
+
- Analytics dashboard
|
|
142
|
+
- System metrics
|
|
143
|
+
|
|
144
|
+
### API Endpoints
|
|
145
|
+
|
|
146
|
+
| Endpoint | Description |
|
|
147
|
+
|----------|-------------|
|
|
148
|
+
| `POST /api/auth/register` | Create trial account |
|
|
149
|
+
| `POST /api/auth/login` | Authenticate user |
|
|
150
|
+
| `POST /api/licenses/validate` | Validate license key |
|
|
151
|
+
| `POST /api/licenses/consume` | Consume a project credit |
|
|
152
|
+
| `POST /api/checkout` | Create Stripe checkout session |
|
|
153
|
+
| `POST /api/webhooks/stripe` | Handle payment webhooks |
|
|
154
|
+
| `GET /api/user/me` | Get current user data |
|
|
155
|
+
| `GET /api/admin/dashboard` | Admin analytics |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 🧪 Testing
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
# Run all CLI tests (unit)
|
|
163
|
+
npm test
|
|
164
|
+
|
|
165
|
+
# Run web app tests
|
|
166
|
+
cd apps/web && npm test
|
|
167
|
+
|
|
168
|
+
# Run with watch mode
|
|
169
|
+
npm run test:watch
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Test Coverage
|
|
173
|
+
- **CLI Unit Tests**: 14 tests - Config, Generator, License Validator
|
|
174
|
+
- **Web Unit Tests**: 5 tests - Email templates
|
|
175
|
+
- **E2E Tests**: 40+ tests - API integration (run locally)
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 🚢 Deployment
|
|
180
|
+
|
|
181
|
+
### Web App (Vercel)
|
|
182
|
+
1. Import repo to Vercel
|
|
183
|
+
2. Set **Root Directory**: `apps/web`
|
|
184
|
+
3. Add environment variables
|
|
185
|
+
4. Deploy
|
|
186
|
+
|
|
187
|
+
### CLI (NPM)
|
|
188
|
+
```bash
|
|
189
|
+
# Bump version
|
|
190
|
+
npm version patch
|
|
191
|
+
|
|
192
|
+
# Create and push tag
|
|
193
|
+
git tag v1.0.0
|
|
194
|
+
git push --tags
|
|
195
|
+
|
|
196
|
+
# GitHub Actions auto-publishes to NPM
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
See [VERCEL_README.md](apps/web/VERCEL_README.md) for detailed deployment guide.
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 🔧 Development
|
|
204
|
+
|
|
205
|
+
### Prerequisites
|
|
206
|
+
- Node.js 18+
|
|
207
|
+
- PostgreSQL (or Docker)
|
|
208
|
+
- NPM account (for publishing)
|
|
209
|
+
|
|
210
|
+
### Local Setup
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Clone repository
|
|
214
|
+
git clone https://github.com/ViniMTrevisan/Kybernus-CLI.git
|
|
215
|
+
cd Kybernus-CLI
|
|
216
|
+
|
|
217
|
+
# Install CLI dependencies
|
|
218
|
+
npm install
|
|
219
|
+
npm run build
|
|
220
|
+
|
|
221
|
+
# Install Web dependencies
|
|
222
|
+
cd apps/web
|
|
223
|
+
npm install
|
|
224
|
+
|
|
225
|
+
# Setup environment
|
|
226
|
+
cp .env.example .env
|
|
227
|
+
# Edit .env with your credentials
|
|
228
|
+
|
|
229
|
+
# Run database migrations
|
|
230
|
+
npx prisma migrate dev
|
|
231
|
+
|
|
232
|
+
# Start development server
|
|
233
|
+
npm run dev
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Environment Variables
|
|
237
|
+
|
|
238
|
+
```env
|
|
239
|
+
DATABASE_URL="postgresql://..."
|
|
240
|
+
JWT_SECRET="your-secret-key"
|
|
241
|
+
STRIPE_SECRET_KEY="sk_..."
|
|
242
|
+
STRIPE_WEBHOOK_SECRET="whsec_..."
|
|
243
|
+
RESEND_API_KEY="re_..."
|
|
244
|
+
UPSTASH_REDIS_REST_URL="https://..."
|
|
245
|
+
UPSTASH_REDIS_REST_TOKEN="..."
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## 📁 Template Structure
|
|
251
|
+
|
|
252
|
+
Each template includes:
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
templates/{stack}/{tier}/
|
|
256
|
+
├── src/
|
|
257
|
+
│ ├── controllers/ # Route handlers
|
|
258
|
+
│ ├── services/ # Business logic
|
|
259
|
+
│ ├── repositories/ # Data access (Clean/Hex only)
|
|
260
|
+
│ ├── entities/ # Domain models (Clean/Hex only)
|
|
261
|
+
│ └── ports/ # Interfaces (Hexagonal only)
|
|
262
|
+
├── docker/
|
|
263
|
+
│ ├── Dockerfile
|
|
264
|
+
│ └── docker-compose.yml
|
|
265
|
+
├── .github/
|
|
266
|
+
│ └── workflows/ # CI/CD pipelines
|
|
267
|
+
├── terraform/ # Infrastructure as Code
|
|
268
|
+
└── README.md
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 🔐 License System
|
|
274
|
+
|
|
275
|
+
### How It Works
|
|
276
|
+
1. **Free Mode**: Basic stacks, MVC only, unlimited projects
|
|
277
|
+
2. **Trial Mode**: Full Pro access for 15 days, 3 project limit
|
|
278
|
+
3. **Pro Mode**: Lifetime access, all features, unlimited projects
|
|
279
|
+
|
|
280
|
+
### License Key Format
|
|
281
|
+
- Trial: `KYB-TRIAL-XXXX-XXXX-XXXX`
|
|
282
|
+
- Pro: `KYB-PRO-XXXX-XXXX-XXXX`
|
|
283
|
+
|
|
284
|
+
### Validation Flow
|
|
285
|
+
```
|
|
286
|
+
CLI → validate(licenseKey) → API → Database → Response
|
|
287
|
+
← { valid, tier, usage, limit } ←
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## 🤝 Contributing
|
|
293
|
+
|
|
294
|
+
Contributions are welcome! Please read our contributing guidelines before submitting PRs.
|
|
295
|
+
|
|
296
|
+
1. Fork the repository
|
|
297
|
+
2. Create a feature branch: `git checkout -b feature/amazing-feature`
|
|
298
|
+
3. Commit changes: `git commit -m 'feat: add amazing feature'`
|
|
299
|
+
4. Push to branch: `git push origin feature/amazing-feature`
|
|
300
|
+
5. Open a Pull Request
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 📄 License
|
|
305
|
+
|
|
306
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## 🙋 Support
|
|
311
|
+
|
|
312
|
+
- **Documentation**: [kybernus.dev/docs](https://kybernus.vercel.app/docs)
|
|
313
|
+
- **Issues**: [GitHub Issues](https://github.com/ViniMTrevisan/Kybernus-CLI/issues)
|
|
314
|
+
- **Email**: support@kybernus.dev
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
<p align="center">
|
|
319
|
+
<strong>Code less, Build more.</strong><br>
|
|
320
|
+
© 2026 Kybernus Systems. All rights reserved.
|
|
321
|
+
</p>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface InitOptions {
|
|
2
|
+
name?: string;
|
|
3
|
+
stack?: string;
|
|
4
|
+
architecture?: string;
|
|
5
|
+
buildTool?: string;
|
|
6
|
+
license?: string;
|
|
7
|
+
ai?: boolean;
|
|
8
|
+
nonInteractive?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function initCommand(options: InitOptions): Promise<void>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAQA,UAAU,WAAW;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,iBA+ErD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import { runWizard } from '../prompts/wizard.js';
|
|
3
|
+
import { ProjectGenerator } from '../../core/generator/project.js';
|
|
4
|
+
import { ConfigManager } from '../../core/config/config-manager.js';
|
|
5
|
+
import { LicenseValidator } from '../../core/auth/license-validator.js';
|
|
6
|
+
import { AnalyticsClient } from '../services/AnalyticsClient.js';
|
|
7
|
+
export async function initCommand(options) {
|
|
8
|
+
const configManager = new ConfigManager();
|
|
9
|
+
const validator = new LicenseValidator();
|
|
10
|
+
// Determinar tier de licença
|
|
11
|
+
let licenseTier = 'free';
|
|
12
|
+
let licenseKey = options.license;
|
|
13
|
+
// If no license provided via flag, check stored config
|
|
14
|
+
if (!licenseKey) {
|
|
15
|
+
licenseKey = configManager.getLicenseKey();
|
|
16
|
+
}
|
|
17
|
+
// Validate license if present
|
|
18
|
+
if (licenseKey) {
|
|
19
|
+
const result = await validator.validate(licenseKey);
|
|
20
|
+
if (result.valid && result.tier === 'PRO') {
|
|
21
|
+
const expiration = configManager.getLicenseExpiration();
|
|
22
|
+
// Check if license is still active
|
|
23
|
+
if (validator.isLicenseActive(expiration)) {
|
|
24
|
+
licenseTier = 'pro';
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
clack.log.warn('Your Pro license has expired. Switching to Free mode.');
|
|
28
|
+
configManager.clearLicense();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (licenseTier === 'free') {
|
|
33
|
+
clack.note('🆓 Modo Free ativo\n\nVocê está usando o Kybernus Free. Para acessar:\n- Arquiteturas avançadas (Clean, Hexagonal)\n- Stacks adicionais (Python FastAPI, NestJS)\n- DevOps completo (Docker, CI/CD, Terraform)\n\nAdquira uma licença Pro em: https://kybernus.dev/pro', 'ℹ️ Informação');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
clack.note('🌟 Modo Pro ativo\n\nVocê tem acesso a todos os recursos!', '✨ Pro');
|
|
37
|
+
}
|
|
38
|
+
// Executar wizard interativo (ou usar options se non-interactive)
|
|
39
|
+
const config = await runWizard(licenseTier);
|
|
40
|
+
// Validate project limit (Metered Trial)
|
|
41
|
+
if (licenseTier === 'pro' && licenseKey) {
|
|
42
|
+
const spinner = clack.spinner();
|
|
43
|
+
spinner.start('Validando cota de projetos...');
|
|
44
|
+
const creditCheck = await validator.consumeCredit(licenseKey);
|
|
45
|
+
spinner.stop('Cota verificada');
|
|
46
|
+
if (!creditCheck.authorized) {
|
|
47
|
+
clack.log.error(creditCheck.message || 'Criação de projeto bloqueada por limite da licença.');
|
|
48
|
+
if (creditCheck.message?.includes('Trial limit')) {
|
|
49
|
+
clack.note('🔓 Desbloqueie projetos ilimitados com Kybernus Pro lifetime.\nExecute: kybernus upgrade', 'Limite Atingido');
|
|
50
|
+
}
|
|
51
|
+
return; // Stop generation
|
|
52
|
+
}
|
|
53
|
+
if (creditCheck.remaining !== undefined && creditCheck.remaining >= 0) {
|
|
54
|
+
clack.log.info(`Créditos Trial: ${creditCheck.usage}/${creditCheck.limit} utilizados. (${creditCheck.remaining} restantes)`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Gerar projeto
|
|
58
|
+
const generator = new ProjectGenerator();
|
|
59
|
+
await generator.generate(config, process.cwd());
|
|
60
|
+
// Track generation
|
|
61
|
+
const analytics = new AnalyticsClient();
|
|
62
|
+
analytics.track('project_generated', {
|
|
63
|
+
name: config.projectName,
|
|
64
|
+
stack: config.stack,
|
|
65
|
+
architecture: config.architecture,
|
|
66
|
+
tier: licenseTier,
|
|
67
|
+
command: 'init'
|
|
68
|
+
});
|
|
69
|
+
clack.outro('🎉 Projeto criado com sucesso! Bom desenvolvimento!');
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAYjE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB;IAClD,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEzC,6BAA6B;IAC7B,IAAI,WAAW,GAAgB,MAAM,CAAC;IACtC,IAAI,UAAU,GAAuB,OAAO,CAAC,OAAO,CAAC;IAErD,uDAAuD;IACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;IAC/C,CAAC;IAED,8BAA8B;IAC9B,IAAI,UAAU,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEpD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,aAAa,CAAC,oBAAoB,EAAE,CAAC;YAExD,mCAAmC;YACnC,IAAI,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;gBACxC,WAAW,GAAG,KAAK,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;gBACxE,aAAa,CAAC,YAAY,EAAE,CAAC;YACjC,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CACN,wQAAwQ,EACxQ,gBAAgB,CACnB,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,2DAA2D,EAAE,OAAO,CAAC,CAAC;IACrF,CAAC;IAED,kEAAkE;IAClE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAC,CAAC;IAE5C,yCAAyC;IACzC,IAAI,WAAW,KAAK,KAAK,IAAI,UAAU,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAE9D,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAEhC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAC1B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,IAAI,qDAAqD,CAAC,CAAC;YAC9F,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC/C,KAAK,CAAC,IAAI,CAAC,0FAA0F,EAAE,iBAAiB,CAAC,CAAC;YAC9H,CAAC;YACD,OAAO,CAAC,kBAAkB;QAC9B,CAAC;QAED,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACpE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,iBAAiB,WAAW,CAAC,SAAS,aAAa,CAAC,CAAC;QACjI,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACzC,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEhD,mBAAmB;IACnB,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;IACxC,SAAS,CAAC,KAAK,CAAC,mBAAmB,EAAE;QACjC,IAAI,EAAE,MAAM,CAAC,WAAW;QACxB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,MAAM;KAClB,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAIA,UAAU,YAAY;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,iBA+CvD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import { ConfigManager } from '../../core/config/config-manager.js';
|
|
3
|
+
import { LicenseValidator } from '../../core/auth/license-validator.js';
|
|
4
|
+
export async function loginCommand(options) {
|
|
5
|
+
clack.intro('🔐 Kybernus Pro Login');
|
|
6
|
+
const configManager = new ConfigManager();
|
|
7
|
+
const validator = new LicenseValidator();
|
|
8
|
+
let licenseKey = options.key;
|
|
9
|
+
// If no key provided via flag, prompt for it
|
|
10
|
+
if (!licenseKey) {
|
|
11
|
+
const keyInput = await clack.text({
|
|
12
|
+
message: 'Enter your Pro license key:',
|
|
13
|
+
placeholder: 'KYB-PRO-XXXXXXXX',
|
|
14
|
+
validate: (value) => {
|
|
15
|
+
if (!value)
|
|
16
|
+
return 'License key is required';
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
if (clack.isCancel(keyInput)) {
|
|
20
|
+
clack.cancel('Login cancelled');
|
|
21
|
+
process.exit(0);
|
|
22
|
+
}
|
|
23
|
+
licenseKey = keyInput;
|
|
24
|
+
}
|
|
25
|
+
// Validate the key
|
|
26
|
+
const spinner = clack.spinner();
|
|
27
|
+
spinner.start('Validating license key...');
|
|
28
|
+
const result = await validator.validate(licenseKey);
|
|
29
|
+
spinner.stop();
|
|
30
|
+
if (!result.valid) {
|
|
31
|
+
clack.log.error(result.message || 'Invalid license key');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
// Save license to config
|
|
35
|
+
configManager.setLicenseKey(licenseKey);
|
|
36
|
+
configManager.setLicenseTier(result.tier);
|
|
37
|
+
if (result.expiration) {
|
|
38
|
+
configManager.setLicenseExpiration(result.expiration.toISOString());
|
|
39
|
+
}
|
|
40
|
+
clack.outro('✅ Successfully authenticated! You now have access to Pro features.');
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAMxE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAqB;IACpD,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAEzC,IAAI,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAE7B,6CAA6C;IAC7C,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;YAC9B,OAAO,EAAE,6BAA6B;YACtC,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,IAAI,CAAC,KAAK;oBAAE,OAAO,yBAAyB,CAAC;YACjD,CAAC;SACJ,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QAED,UAAU,GAAG,QAAkB,CAAC;IACpC,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAE3C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEpD,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAChB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,qBAAqB,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,yBAAyB;IACzB,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACxC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,aAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,kBAwBlC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import { ConfigManager } from '../../core/config/config-manager.js';
|
|
3
|
+
export async function logoutCommand() {
|
|
4
|
+
clack.intro('🔓 Kybernus Logout');
|
|
5
|
+
const configManager = new ConfigManager();
|
|
6
|
+
const currentKey = configManager.getLicenseKey();
|
|
7
|
+
if (!currentKey) {
|
|
8
|
+
clack.log.warn('No active license found');
|
|
9
|
+
clack.outro('Already in Free mode');
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const shouldLogout = await clack.confirm({
|
|
13
|
+
message: 'Are you sure you want to logout? You will lose access to Pro features.',
|
|
14
|
+
});
|
|
15
|
+
if (clack.isCancel(shouldLogout) || !shouldLogout) {
|
|
16
|
+
clack.cancel('Logout cancelled');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
configManager.clearLicense();
|
|
20
|
+
clack.outro('✅ Successfully logged out. Switched to Free mode.');
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;IAEjD,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC1C,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO;IACX,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QACrC,OAAO,EAAE,wEAAwE;KACpF,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAChD,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACjC,OAAO;IACX,CAAC;IAED,aAAa,CAAC,YAAY,EAAE,CAAC;IAE7B,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"AAMA,wBAAsB,eAAe,kBA+EpC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import { ConfigManager } from '../../core/config/config-manager.js';
|
|
3
|
+
import { AnalyticsClient } from '../services/AnalyticsClient.js';
|
|
4
|
+
const API_URL = process.env.KYBERNUS_API_URL || 'http://localhost:3010/api';
|
|
5
|
+
export async function registerCommand() {
|
|
6
|
+
console.clear();
|
|
7
|
+
clack.intro('🚀 Kybernus Registration');
|
|
8
|
+
const configManager = new ConfigManager();
|
|
9
|
+
// Check if already registered
|
|
10
|
+
const existingKey = configManager.getLicenseKey();
|
|
11
|
+
if (existingKey) {
|
|
12
|
+
clack.log.warn('You are already registered.');
|
|
13
|
+
const shouldOverwrite = await clack.confirm({
|
|
14
|
+
message: 'Do you want to register a new account? This will replace your current license.',
|
|
15
|
+
});
|
|
16
|
+
if (clack.isCancel(shouldOverwrite) || !shouldOverwrite) {
|
|
17
|
+
clack.outro('Operation cancelled.');
|
|
18
|
+
process.exit(0);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const email = await clack.text({
|
|
22
|
+
message: 'Enter your email address to unlock 3 Free Pro Projects (Metered Trial):',
|
|
23
|
+
placeholder: 'you@example.com',
|
|
24
|
+
validate: (value) => {
|
|
25
|
+
if (!value)
|
|
26
|
+
return 'Email is required';
|
|
27
|
+
if (!value.includes('@'))
|
|
28
|
+
return 'Please enter a valid email';
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
if (clack.isCancel(email)) {
|
|
32
|
+
clack.outro('Operation cancelled.');
|
|
33
|
+
process.exit(0);
|
|
34
|
+
}
|
|
35
|
+
const s = clack.spinner();
|
|
36
|
+
s.start('Registering account...');
|
|
37
|
+
try {
|
|
38
|
+
const machineId = configManager.getMachineId();
|
|
39
|
+
const response = await fetch(`${API_URL}/auth/register`, {
|
|
40
|
+
method: 'POST',
|
|
41
|
+
headers: { 'Content-Type': 'application/json' },
|
|
42
|
+
body: JSON.stringify({ email, machineId }),
|
|
43
|
+
});
|
|
44
|
+
const data = await response.json();
|
|
45
|
+
if (!response.ok) {
|
|
46
|
+
s.stop('Registration failed');
|
|
47
|
+
clack.log.error(data.error || 'Unknown error occurred');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Save new credentials
|
|
51
|
+
configManager.setLicenseKey(data.licenseKey);
|
|
52
|
+
configManager.setEmail(email);
|
|
53
|
+
configManager.setLicenseTier(data.tier === 'pro' ? 'PRO' : 'FREE');
|
|
54
|
+
if (data.trialEndsAt) {
|
|
55
|
+
configManager.setLicenseExpiration(data.trialEndsAt);
|
|
56
|
+
}
|
|
57
|
+
// Track registration
|
|
58
|
+
const analytics = new AnalyticsClient();
|
|
59
|
+
analytics.track('user_registered', { email });
|
|
60
|
+
s.stop('Registration successful! 🎉');
|
|
61
|
+
clack.note(`License Key: ${data.licenseKey}\nPlan: Metered Trial (3 Projects included)`, 'Trial Activated');
|
|
62
|
+
clack.outro('You are now ready to build amazing projects with Kybernus!');
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
s.stop('Error connecting to server');
|
|
66
|
+
clack.log.error(error.message);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,eAAe;IACjC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAE1C,8BAA8B;IAC9B,MAAM,WAAW,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;IAClD,IAAI,WAAW,EAAE,CAAC;QACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC9C,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACxC,OAAO,EAAE,gFAAgF;SAC5F,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACtD,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC3B,OAAO,EAAE,yEAAyE;QAClF,WAAW,EAAE,iBAAiB;QAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAChB,IAAI,CAAC,KAAK;gBAAE,OAAO,mBAAmB,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,OAAO,4BAA4B,CAAC;QAClE,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAElC,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gBAAgB,EAAE;YACrD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;SAC7C,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAE1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;YACxD,OAAO;QACX,CAAC;QAED,uBAAuB;QACvB,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,aAAa,CAAC,QAAQ,CAAC,KAAe,CAAC,CAAC;QACxC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,CAAC;QAED,qBAAqB;QACrB,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;QACxC,SAAS,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAE9C,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAEtC,KAAK,CAAC,IAAI,CACN,gBAAgB,IAAI,CAAC,UAAU,6CAA6C,EAC5E,iBAAiB,CACpB,CAAC;QAEF,KAAK,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAE9E,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACrC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,kBAuDlC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as clack from '@clack/prompts';
|
|
2
|
+
import { ConfigManager } from '../../core/config/config-manager.js';
|
|
3
|
+
import { LicenseValidator } from '../../core/auth/license-validator.js';
|
|
4
|
+
export async function statusCommand() {
|
|
5
|
+
console.clear();
|
|
6
|
+
clack.intro('📊 Kybernus Status');
|
|
7
|
+
const configManager = new ConfigManager();
|
|
8
|
+
const validator = new LicenseValidator();
|
|
9
|
+
const key = configManager.getLicenseKey();
|
|
10
|
+
if (!key) {
|
|
11
|
+
clack.log.warn('No license found. You are running in unregistered mode.');
|
|
12
|
+
clack.outro('Run "kybernus register" to start a Free Trial.');
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const s = clack.spinner();
|
|
16
|
+
s.start('Validating license...');
|
|
17
|
+
const result = await validator.validate(key);
|
|
18
|
+
s.stop('Validation complete');
|
|
19
|
+
// Update local cache based on remote validation
|
|
20
|
+
configManager.setLicenseTier(result.tier);
|
|
21
|
+
if (result.expiration) {
|
|
22
|
+
configManager.setLicenseExpiration(result.expiration.toISOString());
|
|
23
|
+
}
|
|
24
|
+
const statusMap = {
|
|
25
|
+
'TRIAL': '🟢 Active Trial (All Features Unlocked)',
|
|
26
|
+
'TRIAL_EXPIRED': '🔴 Trial Expired',
|
|
27
|
+
'FREE_ACTIVE': '🟢 Active Monthly Subscription',
|
|
28
|
+
'FREE_PAST_DUE': '🟠 Subscription Past Due',
|
|
29
|
+
'PRO_ACTIVE': '💎 Pro Lifetime',
|
|
30
|
+
'CANCELLED': '🔴 Cancelled'
|
|
31
|
+
};
|
|
32
|
+
const statusLabel = result.status ? (statusMap[result.status] || result.status) : 'Unknown';
|
|
33
|
+
let details = `License Key: ${key}\n` +
|
|
34
|
+
`Tier: ${result.tier}\n` +
|
|
35
|
+
`Status: ${statusLabel}\n`;
|
|
36
|
+
if (result.status === 'TRIAL' && result.limit !== undefined) {
|
|
37
|
+
details += `Usage: ${result.usage}/${result.limit} Projects\n`;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
details += `Expires: ${result.expiration ? result.expiration.toLocaleDateString() : 'Never'}\n`;
|
|
41
|
+
}
|
|
42
|
+
details += `Message: ${result.message || ''}`;
|
|
43
|
+
clack.note(details, 'License Information');
|
|
44
|
+
clack.outro('Use "kybernus upgrade" to change your plan.');
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,aAAa;IAC/B,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAElC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACzC,MAAM,GAAG,GAAG,aAAa,CAAC,aAAa,EAAE,CAAC;IAE1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QAC1E,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC9D,OAAO;IACX,CAAC;IAED,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAE9B,gDAAgD;IAChD,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,aAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,SAAS,GAA2B;QACtC,OAAO,EAAE,yCAAyC;QAClD,eAAe,EAAE,kBAAkB;QACnC,aAAa,EAAE,gCAAgC;QAC/C,eAAe,EAAE,0BAA0B;QAC3C,YAAY,EAAE,iBAAiB;QAC/B,WAAW,EAAE,cAAc;KAC9B,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5F,IAAI,OAAO,GAAG,gBAAgB,GAAG,IAAI;QACjC,SAAS,MAAM,CAAC,IAAI,IAAI;QACxB,WAAW,WAAW,IAAI,CAAC;IAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,IAAI,UAAU,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,aAAa,CAAC;IACnE,CAAC;SAAM,CAAC;QACJ,OAAO,IAAI,YAAY,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC;IACpG,CAAC;IAED,OAAO,IAAI,YAAY,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;IAE9C,KAAK,CAAC,IAAI,CACN,OAAO,EACP,qBAAqB,CACxB,CAAC;IAEF,KAAK,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upgrade.ts"],"names":[],"mappings":"AAOA,wBAAsB,cAAc,kBAoEnC"}
|