@kubbisec/ai-linux-arm64 0.1.10 → 0.1.11

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 (149) hide show
  1. package/bin/kubbisec +0 -0
  2. package/bundled/components/kubbisec-model-selector.d.ts +44 -0
  3. package/bundled/components/kubbisec-model-selector.d.ts.map +1 -0
  4. package/bundled/components/kubbisec-model-selector.js +197 -0
  5. package/bundled/components/kubbisec-model-selector.js.map +1 -0
  6. package/bundled/config/ensure-kubbisec-project-settings.d.ts +5 -4
  7. package/bundled/config/ensure-kubbisec-project-settings.d.ts.map +1 -1
  8. package/bundled/config/ensure-kubbisec-project-settings.js +9 -22
  9. package/bundled/config/ensure-kubbisec-project-settings.js.map +1 -1
  10. package/bundled/config/llm-config.d.ts +3 -1
  11. package/bundled/config/llm-config.d.ts.map +1 -1
  12. package/bundled/config/llm-config.js +13 -8
  13. package/bundled/config/llm-config.js.map +1 -1
  14. package/bundled/config/materialize-kubbisec-pi-resources.d.ts +14 -8
  15. package/bundled/config/materialize-kubbisec-pi-resources.d.ts.map +1 -1
  16. package/bundled/config/materialize-kubbisec-pi-resources.js +112 -40
  17. package/bundled/config/materialize-kubbisec-pi-resources.js.map +1 -1
  18. package/bundled/node_modules/@aspm/shared/dist/ai/evaluation-dataset-50.d.ts +311 -0
  19. package/bundled/node_modules/@aspm/shared/dist/ai/evaluation-dataset-50.d.ts.map +1 -0
  20. package/bundled/node_modules/@aspm/shared/dist/ai/evaluation-dataset-50.js +357 -0
  21. package/bundled/node_modules/@aspm/shared/dist/ai/evaluation-dataset-50.js.map +1 -0
  22. package/bundled/node_modules/@aspm/shared/dist/ai/index.d.ts +2 -0
  23. package/bundled/node_modules/@aspm/shared/dist/ai/index.d.ts.map +1 -0
  24. package/bundled/node_modules/@aspm/shared/dist/ai/index.js +18 -0
  25. package/bundled/node_modules/@aspm/shared/dist/ai/index.js.map +1 -0
  26. package/bundled/node_modules/@aspm/shared/dist/assistant/assistant-session-key.d.ts +20 -0
  27. package/bundled/node_modules/@aspm/shared/dist/assistant/assistant-session-key.d.ts.map +1 -0
  28. package/bundled/node_modules/@aspm/shared/dist/assistant/assistant-session-key.js +33 -0
  29. package/bundled/node_modules/@aspm/shared/dist/assistant/assistant-session-key.js.map +1 -0
  30. package/bundled/node_modules/@aspm/shared/dist/assistant/index.d.ts +2 -0
  31. package/bundled/node_modules/@aspm/shared/dist/assistant/index.d.ts.map +1 -0
  32. package/bundled/node_modules/@aspm/shared/dist/assistant/index.js +18 -0
  33. package/bundled/node_modules/@aspm/shared/dist/assistant/index.js.map +1 -0
  34. package/bundled/node_modules/@aspm/shared/dist/cli-user-error.d.ts +18 -0
  35. package/bundled/node_modules/@aspm/shared/dist/cli-user-error.d.ts.map +1 -0
  36. package/bundled/node_modules/@aspm/shared/dist/cli-user-error.js +92 -0
  37. package/bundled/node_modules/@aspm/shared/dist/cli-user-error.js.map +1 -0
  38. package/bundled/node_modules/@aspm/shared/dist/dto/bulk-import-github-projects.dto.d.ts +25 -0
  39. package/bundled/node_modules/@aspm/shared/dist/dto/bulk-import-github-projects.dto.d.ts.map +1 -0
  40. package/bundled/node_modules/@aspm/shared/dist/dto/bulk-import-github-projects.dto.js +85 -0
  41. package/bundled/node_modules/@aspm/shared/dist/dto/bulk-import-github-projects.dto.js.map +1 -0
  42. package/bundled/node_modules/@aspm/shared/dist/dto/create-bundle-report.dto.d.ts +14 -0
  43. package/bundled/node_modules/@aspm/shared/dist/dto/create-bundle-report.dto.d.ts.map +1 -0
  44. package/bundled/node_modules/@aspm/shared/dist/dto/create-bundle-report.dto.js +64 -0
  45. package/bundled/node_modules/@aspm/shared/dist/dto/create-bundle-report.dto.js.map +1 -0
  46. package/bundled/node_modules/@aspm/shared/dist/dto/create-coverage-report.dto.d.ts +18 -0
  47. package/bundled/node_modules/@aspm/shared/dist/dto/create-coverage-report.dto.d.ts.map +1 -0
  48. package/bundled/node_modules/@aspm/shared/dist/dto/create-coverage-report.dto.js +124 -0
  49. package/bundled/node_modules/@aspm/shared/dist/dto/create-coverage-report.dto.js.map +1 -0
  50. package/bundled/node_modules/@aspm/shared/dist/dto/create-project.dto.d.ts +65 -0
  51. package/bundled/node_modules/@aspm/shared/dist/dto/create-project.dto.d.ts.map +1 -0
  52. package/bundled/node_modules/@aspm/shared/dist/dto/create-project.dto.js +359 -0
  53. package/bundled/node_modules/@aspm/shared/dist/dto/create-project.dto.js.map +1 -0
  54. package/bundled/node_modules/@aspm/shared/dist/dto/create-report.dto.d.ts +26 -0
  55. package/bundled/node_modules/@aspm/shared/dist/dto/create-report.dto.d.ts.map +1 -0
  56. package/bundled/node_modules/@aspm/shared/dist/dto/create-report.dto.js +139 -0
  57. package/bundled/node_modules/@aspm/shared/dist/dto/create-report.dto.js.map +1 -0
  58. package/bundled/node_modules/@aspm/shared/dist/dto/create-scan-target.dto.d.ts +8 -0
  59. package/bundled/node_modules/@aspm/shared/dist/dto/create-scan-target.dto.d.ts.map +1 -0
  60. package/bundled/node_modules/@aspm/shared/dist/dto/create-scan-target.dto.js +51 -0
  61. package/bundled/node_modules/@aspm/shared/dist/dto/create-scan-target.dto.js.map +1 -0
  62. package/bundled/node_modules/@aspm/shared/dist/dto/create-vulnerability.dto.d.ts +34 -0
  63. package/bundled/node_modules/@aspm/shared/dist/dto/create-vulnerability.dto.d.ts.map +1 -0
  64. package/bundled/node_modules/@aspm/shared/dist/dto/create-vulnerability.dto.js +186 -0
  65. package/bundled/node_modules/@aspm/shared/dist/dto/create-vulnerability.dto.js.map +1 -0
  66. package/bundled/node_modules/@aspm/shared/dist/dto/index.d.ts +13 -0
  67. package/bundled/node_modules/@aspm/shared/dist/dto/index.d.ts.map +1 -0
  68. package/bundled/node_modules/@aspm/shared/dist/dto/index.js +41 -0
  69. package/bundled/node_modules/@aspm/shared/dist/dto/index.js.map +1 -0
  70. package/bundled/node_modules/@aspm/shared/dist/dto/metrics.dto.d.ts +203 -0
  71. package/bundled/node_modules/@aspm/shared/dist/dto/metrics.dto.d.ts.map +1 -0
  72. package/bundled/node_modules/@aspm/shared/dist/dto/metrics.dto.js +42 -0
  73. package/bundled/node_modules/@aspm/shared/dist/dto/metrics.dto.js.map +1 -0
  74. package/bundled/node_modules/@aspm/shared/dist/dto/update-coverage-gate.dto.d.ts +7 -0
  75. package/bundled/node_modules/@aspm/shared/dist/dto/update-coverage-gate.dto.d.ts.map +1 -0
  76. package/bundled/node_modules/@aspm/shared/dist/dto/update-coverage-gate.dto.js +47 -0
  77. package/bundled/node_modules/@aspm/shared/dist/dto/update-coverage-gate.dto.js.map +1 -0
  78. package/bundled/node_modules/@aspm/shared/dist/dto/update-performance-gate.dto.d.ts +6 -0
  79. package/bundled/node_modules/@aspm/shared/dist/dto/update-performance-gate.dto.d.ts.map +1 -0
  80. package/bundled/node_modules/@aspm/shared/dist/dto/update-performance-gate.dto.js +36 -0
  81. package/bundled/node_modules/@aspm/shared/dist/dto/update-performance-gate.dto.js.map +1 -0
  82. package/bundled/node_modules/@aspm/shared/dist/dto/update-security-gate.dto.d.ts +9 -0
  83. package/bundled/node_modules/@aspm/shared/dist/dto/update-security-gate.dto.d.ts.map +1 -0
  84. package/bundled/node_modules/@aspm/shared/dist/dto/update-security-gate.dto.js +58 -0
  85. package/bundled/node_modules/@aspm/shared/dist/dto/update-security-gate.dto.js.map +1 -0
  86. package/bundled/node_modules/@aspm/shared/dist/dto/update-vulnerability.dto.d.ts +6 -0
  87. package/bundled/node_modules/@aspm/shared/dist/dto/update-vulnerability.dto.d.ts.map +1 -0
  88. package/bundled/node_modules/@aspm/shared/dist/dto/update-vulnerability.dto.js +30 -0
  89. package/bundled/node_modules/@aspm/shared/dist/dto/update-vulnerability.dto.js.map +1 -0
  90. package/bundled/node_modules/@aspm/shared/dist/enums.d.ts +86 -0
  91. package/bundled/node_modules/@aspm/shared/dist/enums.d.ts.map +1 -0
  92. package/bundled/node_modules/@aspm/shared/dist/enums.js +132 -0
  93. package/bundled/node_modules/@aspm/shared/dist/enums.js.map +1 -0
  94. package/bundled/node_modules/@aspm/shared/dist/github/kubbisec-github-label.d.ts +6 -0
  95. package/bundled/node_modules/@aspm/shared/dist/github/kubbisec-github-label.d.ts.map +1 -0
  96. package/bundled/node_modules/@aspm/shared/dist/github/kubbisec-github-label.js +9 -0
  97. package/bundled/node_modules/@aspm/shared/dist/github/kubbisec-github-label.js.map +1 -0
  98. package/bundled/node_modules/@aspm/shared/dist/index.d.ts +12 -0
  99. package/bundled/node_modules/@aspm/shared/dist/index.d.ts.map +1 -0
  100. package/bundled/node_modules/@aspm/shared/dist/index.js +28 -0
  101. package/bundled/node_modules/@aspm/shared/dist/index.js.map +1 -0
  102. package/bundled/node_modules/@aspm/shared/dist/rbac/better-auth-org-roles.d.ts +23 -0
  103. package/bundled/node_modules/@aspm/shared/dist/rbac/better-auth-org-roles.d.ts.map +1 -0
  104. package/bundled/node_modules/@aspm/shared/dist/rbac/better-auth-org-roles.js +54 -0
  105. package/bundled/node_modules/@aspm/shared/dist/rbac/better-auth-org-roles.js.map +1 -0
  106. package/bundled/node_modules/@aspm/shared/dist/rbac/index.d.ts +7 -0
  107. package/bundled/node_modules/@aspm/shared/dist/rbac/index.d.ts.map +1 -0
  108. package/bundled/node_modules/@aspm/shared/dist/rbac/index.js +23 -0
  109. package/bundled/node_modules/@aspm/shared/dist/rbac/index.js.map +1 -0
  110. package/bundled/node_modules/@aspm/shared/dist/rbac/kubbisec-permission-descriptions.d.ts +9 -0
  111. package/bundled/node_modules/@aspm/shared/dist/rbac/kubbisec-permission-descriptions.d.ts.map +1 -0
  112. package/bundled/node_modules/@aspm/shared/dist/rbac/kubbisec-permission-descriptions.js +91 -0
  113. package/bundled/node_modules/@aspm/shared/dist/rbac/kubbisec-permission-descriptions.js.map +1 -0
  114. package/bundled/node_modules/@aspm/shared/dist/rbac/kubbisec-permissions.d.ts +12 -0
  115. package/bundled/node_modules/@aspm/shared/dist/rbac/kubbisec-permissions.d.ts.map +1 -0
  116. package/bundled/node_modules/@aspm/shared/dist/rbac/kubbisec-permissions.js +86 -0
  117. package/bundled/node_modules/@aspm/shared/dist/rbac/kubbisec-permissions.js.map +1 -0
  118. package/bundled/node_modules/@aspm/shared/dist/rbac/platform-staff.d.ts +14 -0
  119. package/bundled/node_modules/@aspm/shared/dist/rbac/platform-staff.d.ts.map +1 -0
  120. package/bundled/node_modules/@aspm/shared/dist/rbac/platform-staff.js +52 -0
  121. package/bundled/node_modules/@aspm/shared/dist/rbac/platform-staff.js.map +1 -0
  122. package/bundled/node_modules/@aspm/shared/dist/rbac/resolve-org-permissions.d.ts +10 -0
  123. package/bundled/node_modules/@aspm/shared/dist/rbac/resolve-org-permissions.d.ts.map +1 -0
  124. package/bundled/node_modules/@aspm/shared/dist/rbac/resolve-org-permissions.js +199 -0
  125. package/bundled/node_modules/@aspm/shared/dist/rbac/resolve-org-permissions.js.map +1 -0
  126. package/bundled/node_modules/@aspm/shared/dist/rbac/resolve-platform-permissions.d.ts +7 -0
  127. package/bundled/node_modules/@aspm/shared/dist/rbac/resolve-platform-permissions.d.ts.map +1 -0
  128. package/bundled/node_modules/@aspm/shared/dist/rbac/resolve-platform-permissions.js +23 -0
  129. package/bundled/node_modules/@aspm/shared/dist/rbac/resolve-platform-permissions.js.map +1 -0
  130. package/bundled/node_modules/@aspm/shared/dist/redaction.d.ts +13 -0
  131. package/bundled/node_modules/@aspm/shared/dist/redaction.d.ts.map +1 -0
  132. package/bundled/node_modules/@aspm/shared/dist/redaction.js +249 -0
  133. package/bundled/node_modules/@aspm/shared/dist/redaction.js.map +1 -0
  134. package/bundled/node_modules/@aspm/shared/dist/severity-map.d.ts +8 -0
  135. package/bundled/node_modules/@aspm/shared/dist/severity-map.d.ts.map +1 -0
  136. package/bundled/node_modules/@aspm/shared/dist/severity-map.js +47 -0
  137. package/bundled/node_modules/@aspm/shared/dist/severity-map.js.map +1 -0
  138. package/bundled/node_modules/@aspm/shared/dist/sort-findings.d.ts +16 -0
  139. package/bundled/node_modules/@aspm/shared/dist/sort-findings.d.ts.map +1 -0
  140. package/bundled/node_modules/@aspm/shared/dist/sort-findings.js +67 -0
  141. package/bundled/node_modules/@aspm/shared/dist/sort-findings.js.map +1 -0
  142. package/bundled/node_modules/@aspm/shared/package.json +39 -0
  143. package/bundled/resolve-bundled-dist-root.js +9 -5
  144. package/bundled/resolve-bundled-dist-root.js.map +1 -1
  145. package/bundled/workflow/session-workflow-mode.d.ts +10 -0
  146. package/bundled/workflow/session-workflow-mode.d.ts.map +1 -0
  147. package/bundled/workflow/session-workflow-mode.js +51 -0
  148. package/bundled/workflow/session-workflow-mode.js.map +1 -0
  149. package/package.json +1 -1
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KUBBISEC_PERMISSION_DESCRIPTIONS = void 0;
4
+ exports.getKubbisecPermissionDescription = getKubbisecPermissionDescription;
5
+ exports.assertKubbisecPermissionDescriptionsComplete = assertKubbisecPermissionDescriptionsComplete;
6
+ const kubbisec_permissions_1 = require("./kubbisec-permissions");
7
+ /**
8
+ * Human-readable descriptions (pt-BR) — keep in sync with docs/core/rbac-catalog.md
9
+ */
10
+ exports.KUBBISEC_PERMISSION_DESCRIPTIONS = {
11
+ "kbsc.org.profile.read": "Nome, slug e metadados não sensíveis da organização.",
12
+ "kbsc.org.profile.update": "Alterar nome, branding e metadados da organização.",
13
+ "kbsc.org.settings.manage": "Quotas, defaults do workspace e flags da organização.",
14
+ "kbsc.org.delete": "Eliminar a organização (operação irreversível).",
15
+ "kbsc.identity.member.read": "Listar e ver detalhes dos membros do workspace.",
16
+ "kbsc.identity.member.invite": "Enviar convites e definir o papel na entrada.",
17
+ "kbsc.identity.member.role.update": "Promover ou rebaixar papéis de membros.",
18
+ "kbsc.identity.member.remove": "Revogar o acesso de um membro ao workspace.",
19
+ "kbsc.identity.invitation.manage": "Cancelar ou reenviar convites pendentes.",
20
+ "kbsc.asset.project.read": "Listar projetos, ativos e repositórios ligados.",
21
+ "kbsc.asset.project.create": "Registar novos ativos no ASPM.",
22
+ "kbsc.asset.project.update": "Alterar metadados, ramo default e ligações.",
23
+ "kbsc.asset.project.delete": "Remover um ativo do workspace.",
24
+ "kbsc.finding.read": "Ver achados, vulnerabilidades e histórico.",
25
+ "kbsc.finding.triage.update": "Alterar estados, prioridade e comentários internos.",
26
+ "kbsc.finding.remediation.manage": "Gerir tickets e workflows de correção.",
27
+ "kbsc.finding.remediation.auto-apply": "Disparar remediação automática (branch + PR GitHub, sem merge).",
28
+ "kbsc.finding.export": "Exportar relatórios de achados (PDF/CSV conforme produto).",
29
+ "kbsc.ingest.report.create": "Ingerir relatórios de scan via API ou runner.",
30
+ "kbsc.ingest.coverage.create": "Ingerir dados de cobertura de testes.",
31
+ "kbsc.ingest.bundle.create": "Ingerir bundles de performance e artefactos.",
32
+ "kbsc.ingest.gate.evaluate": "Avaliar portões de qualidade durante a ingestão.",
33
+ "kbsc.supply.read": "Ver SBOM, pacotes e metadados de dependências.",
34
+ "kbsc.supply.policy.comment": "Adicionar anotações de risco sem alterar integrações.",
35
+ "kbsc.supply.scan.trigger": "Disparar análise manual de supply chain.",
36
+ "kbsc.governance.read": "Ver políticas, portões e coverage (somente leitura).",
37
+ "kbsc.governance.gate.manage": "Configurar limiares e regras de bloqueio.",
38
+ "kbsc.governance.coverage.manage": "Gerir configuração de coverage (org/projeto).",
39
+ "kbsc.integration.read": "Ver estado das integrações (GitHub, Jira, etc.).",
40
+ "kbsc.integration.connect": "Ligar integrações via OAuth ou credenciais partilhadas.",
41
+ "kbsc.integration.disconnect": "Desligar integrações e remover ligações.",
42
+ "kbsc.integration.secret.write": "Gravar tokens e segredos de integração.",
43
+ "kbsc.integration.issue.create": "Criar issues em trackers conectados via IA.",
44
+ "kbsc.integration.pr.create": "Abrir pull requests em repositórios conectados via IA.",
45
+ "kbsc.integration.pr.merge": "Fazer merge automático de PRs após gates aprovados.",
46
+ "kbsc.project.ai-autopilot.manage": "Configurar autopilot de IA do projeto (limites, ativação).",
47
+ "kbsc.project.ai-autopilot.run": "Disparar manualmente um ciclo do autopilot de IA.",
48
+ "kbsc.ci.read": "Ver pipelines, runners, execuções e histórico.",
49
+ "kbsc.ci.pipeline.manage": "Criar, editar e apagar definições de pipeline.",
50
+ "kbsc.ci.pipeline.run": "Disparar execuções manuais de pipeline.",
51
+ "kbsc.ci.privileged.run": "Executar jobs CI com containers privilegiados (requer runner habilitado).",
52
+ "kbsc.ci.runner.manage": "Registar, revogar e apagar runners.",
53
+ "kbsc.ci.envpack.manage": "Gerir pacotes de ambiente e ligações a projetos.",
54
+ "kbsc.ci.bootstrap.manage": "Gerir tokens de bootstrap para onboarding de runners.",
55
+ "kbsc.credential.apikey.read": "Listar metadados de API keys (sem expor o segredo).",
56
+ "kbsc.credential.apikey.create": "Emitir chaves para CLI e automação.",
57
+ "kbsc.credential.apikey.revoke": "Invalidar API keys existentes.",
58
+ "kbsc.notification.read": "Ver o centro de alertas e notificações.",
59
+ "kbsc.notification.preference.manage": "Configurar canal, frequência e silenciamento.",
60
+ "kbsc.ai.provider.manage": "Gerir configuração BYOK do provedor de IA.",
61
+ "kbsc.ai.usage.read": "Ver resumo e histórico de utilização de IA.",
62
+ "kbsc.ai.assistant.use": "Usar o assistente de IA in-app (sem alterar dados).",
63
+ "kbsc.ai.automation.auto": "Executar automação de IA em modo auto (patch, branch, merge sem revisão).",
64
+ "kbsc.platform.org.read": "Ver organizações de todos os tenants (staff).",
65
+ "kbsc.platform.org.support": "Executar ações de suporte aprovadas em organizações.",
66
+ "kbsc.platform.user.read": "Ver utilizadores cross-tenant para diagnóstico.",
67
+ "kbsc.platform.impersonate.request": "Pedir sessão de suporte com impersonação controlada.",
68
+ "kbsc.platform.config.manage": "Gerir configuração global da plataforma e feature flags.",
69
+ "kbsc.ops.metrics.read": "Ver snapshot completo de métricas operacionais da plataforma.",
70
+ "kbsc.billing.read": "Ver plano, trial, assinatura e resumo financeiro da organização.",
71
+ "kbsc.billing.manage": "Iniciar checkout Pro, portal Stripe e alterações de billing.",
72
+ "kbsc.contract.read": "Ver contratos Business/Pilot e estado de assinatura.",
73
+ "kbsc.contract.manage": "Gerir contratos e fluxos comerciais offline da organização.",
74
+ "kbsc.identity.member.permission.manage": "Personalizar permissões funcionais por membro (sem escopo de plataforma).",
75
+ "kbsc.org.security.read": "Ver postura de segurança dos membros (2FA, sessões).",
76
+ "kbsc.org.security.manage": "Gerir políticas de segurança do workspace.",
77
+ "kbsc.org.assistant.manage": "Habilitar ou desabilitar o KubbiSec Assistant na organização.",
78
+ };
79
+ function getKubbisecPermissionDescription(permission) {
80
+ return exports.KUBBISEC_PERMISSION_DESCRIPTIONS[permission];
81
+ }
82
+ /** Ensures every catalog permission has a pt-BR description at build/test time. */
83
+ function assertKubbisecPermissionDescriptionsComplete() {
84
+ for (const permission of kubbisec_permissions_1.KUBBISEC_PERMISSIONS) {
85
+ const description = exports.KUBBISEC_PERMISSION_DESCRIPTIONS[permission];
86
+ if (!description?.trim()) {
87
+ throw new Error(`Missing description for permission: ${permission}`);
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=kubbisec-permission-descriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-permission-descriptions.js","sourceRoot":"","sources":["../../src/rbac/kubbisec-permission-descriptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * KubbiSec permission slugs — keep in sync with docs/core/rbac-catalog.md
3
+ */
4
+ export declare const KUBBISEC_PERMISSIONS: readonly ["kbsc.org.profile.read", "kbsc.org.profile.update", "kbsc.org.settings.manage", "kbsc.org.delete", "kbsc.identity.member.read", "kbsc.identity.member.invite", "kbsc.identity.member.role.update", "kbsc.identity.member.remove", "kbsc.identity.invitation.manage", "kbsc.asset.project.read", "kbsc.asset.project.create", "kbsc.asset.project.update", "kbsc.asset.project.delete", "kbsc.finding.read", "kbsc.finding.triage.update", "kbsc.finding.remediation.manage", "kbsc.finding.remediation.auto-apply", "kbsc.finding.export", "kbsc.ingest.report.create", "kbsc.supply.read", "kbsc.supply.policy.comment", "kbsc.supply.scan.trigger", "kbsc.governance.read", "kbsc.governance.gate.manage", "kbsc.governance.coverage.manage", "kbsc.ingest.coverage.create", "kbsc.ingest.bundle.create", "kbsc.ingest.gate.evaluate", "kbsc.integration.read", "kbsc.integration.connect", "kbsc.integration.disconnect", "kbsc.integration.secret.write", "kbsc.integration.issue.create", "kbsc.integration.pr.create", "kbsc.integration.pr.merge", "kbsc.project.ai-autopilot.manage", "kbsc.project.ai-autopilot.run", "kbsc.ci.read", "kbsc.ci.pipeline.manage", "kbsc.ci.pipeline.run", "kbsc.ci.privileged.run", "kbsc.ci.runner.manage", "kbsc.ci.envpack.manage", "kbsc.ci.bootstrap.manage", "kbsc.credential.apikey.read", "kbsc.credential.apikey.create", "kbsc.credential.apikey.revoke", "kbsc.notification.read", "kbsc.notification.preference.manage", "kbsc.ai.provider.manage", "kbsc.ai.usage.read", "kbsc.ai.assistant.use", "kbsc.ai.automation.auto", "kbsc.platform.org.read", "kbsc.platform.org.support", "kbsc.platform.user.read", "kbsc.platform.impersonate.request", "kbsc.platform.config.manage", "kbsc.ops.metrics.read", "kbsc.billing.read", "kbsc.billing.manage", "kbsc.contract.read", "kbsc.contract.manage", "kbsc.identity.member.permission.manage", "kbsc.org.security.read", "kbsc.org.security.manage", "kbsc.org.assistant.manage"];
5
+ export type KubbisecPermission = (typeof KUBBISEC_PERMISSIONS)[number];
6
+ /** Full catalog — super admin / legacy `admin` global role. */
7
+ export declare const ALL_KUBBISEC_PERMISSIONS: ReadonlySet<KubbisecPermission>;
8
+ export declare const ORG_ROLE_SLUGS: readonly ["org_administrator", "org_finance", "org_security_engineer", "org_delivery_engineer", "org_observer"];
9
+ export type OrgRoleSlug = (typeof ORG_ROLE_SLUGS)[number];
10
+ export declare const PLATFORM_ROLE_SLUGS: readonly ["platform_super_admin", "platform_account_manager"];
11
+ export type PlatformRoleSlug = (typeof PLATFORM_ROLE_SLUGS)[number];
12
+ //# sourceMappingURL=kubbisec-permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-permissions.d.ts","sourceRoot":"","sources":["../../src/rbac/kubbisec-permissions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,oBAAoB,m4DAoEvB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,kBAAkB,CAAiC,CAAC;AAEvG,eAAO,MAAM,cAAc,iHAMjB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,eAAO,MAAM,mBAAmB,+DAAgE,CAAC;AAEjG,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PLATFORM_ROLE_SLUGS = exports.ORG_ROLE_SLUGS = exports.ALL_KUBBISEC_PERMISSIONS = exports.KUBBISEC_PERMISSIONS = void 0;
4
+ /**
5
+ * KubbiSec permission slugs — keep in sync with docs/core/rbac-catalog.md
6
+ */
7
+ exports.KUBBISEC_PERMISSIONS = [
8
+ "kbsc.org.profile.read",
9
+ "kbsc.org.profile.update",
10
+ "kbsc.org.settings.manage",
11
+ "kbsc.org.delete",
12
+ "kbsc.identity.member.read",
13
+ "kbsc.identity.member.invite",
14
+ "kbsc.identity.member.role.update",
15
+ "kbsc.identity.member.remove",
16
+ "kbsc.identity.invitation.manage",
17
+ "kbsc.asset.project.read",
18
+ "kbsc.asset.project.create",
19
+ "kbsc.asset.project.update",
20
+ "kbsc.asset.project.delete",
21
+ "kbsc.finding.read",
22
+ "kbsc.finding.triage.update",
23
+ "kbsc.finding.remediation.manage",
24
+ "kbsc.finding.remediation.auto-apply",
25
+ "kbsc.finding.export",
26
+ "kbsc.ingest.report.create",
27
+ "kbsc.supply.read",
28
+ "kbsc.supply.policy.comment",
29
+ "kbsc.supply.scan.trigger",
30
+ "kbsc.governance.read",
31
+ "kbsc.governance.gate.manage",
32
+ "kbsc.governance.coverage.manage",
33
+ "kbsc.ingest.coverage.create",
34
+ "kbsc.ingest.bundle.create",
35
+ "kbsc.ingest.gate.evaluate",
36
+ "kbsc.integration.read",
37
+ "kbsc.integration.connect",
38
+ "kbsc.integration.disconnect",
39
+ "kbsc.integration.secret.write",
40
+ "kbsc.integration.issue.create",
41
+ "kbsc.integration.pr.create",
42
+ "kbsc.integration.pr.merge",
43
+ "kbsc.project.ai-autopilot.manage",
44
+ "kbsc.project.ai-autopilot.run",
45
+ "kbsc.ci.read",
46
+ "kbsc.ci.pipeline.manage",
47
+ "kbsc.ci.pipeline.run",
48
+ "kbsc.ci.privileged.run",
49
+ "kbsc.ci.runner.manage",
50
+ "kbsc.ci.envpack.manage",
51
+ "kbsc.ci.bootstrap.manage",
52
+ "kbsc.credential.apikey.read",
53
+ "kbsc.credential.apikey.create",
54
+ "kbsc.credential.apikey.revoke",
55
+ "kbsc.notification.read",
56
+ "kbsc.notification.preference.manage",
57
+ "kbsc.ai.provider.manage",
58
+ "kbsc.ai.usage.read",
59
+ "kbsc.ai.assistant.use",
60
+ "kbsc.ai.automation.auto",
61
+ "kbsc.platform.org.read",
62
+ "kbsc.platform.org.support",
63
+ "kbsc.platform.user.read",
64
+ "kbsc.platform.impersonate.request",
65
+ "kbsc.platform.config.manage",
66
+ "kbsc.ops.metrics.read",
67
+ "kbsc.billing.read",
68
+ "kbsc.billing.manage",
69
+ "kbsc.contract.read",
70
+ "kbsc.contract.manage",
71
+ "kbsc.identity.member.permission.manage",
72
+ "kbsc.org.security.read",
73
+ "kbsc.org.security.manage",
74
+ "kbsc.org.assistant.manage",
75
+ ];
76
+ /** Full catalog — super admin / legacy `admin` global role. */
77
+ exports.ALL_KUBBISEC_PERMISSIONS = new Set(exports.KUBBISEC_PERMISSIONS);
78
+ exports.ORG_ROLE_SLUGS = [
79
+ "org_administrator",
80
+ "org_finance",
81
+ "org_security_engineer",
82
+ "org_delivery_engineer",
83
+ "org_observer",
84
+ ];
85
+ exports.PLATFORM_ROLE_SLUGS = ["platform_super_admin", "platform_account_manager"];
86
+ //# sourceMappingURL=kubbisec-permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-permissions.js","sourceRoot":"","sources":["../../src/rbac/kubbisec-permissions.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,oBAAoB,GAAG;IAClC,uBAAuB;IACvB,yBAAyB;IACzB,0BAA0B;IAC1B,iBAAiB;IACjB,2BAA2B;IAC3B,6BAA6B;IAC7B,kCAAkC;IAClC,6BAA6B;IAC7B,iCAAiC;IACjC,yBAAyB;IACzB,2BAA2B;IAC3B,2BAA2B;IAC3B,2BAA2B;IAC3B,mBAAmB;IACnB,4BAA4B;IAC5B,iCAAiC;IACjC,qCAAqC;IACrC,qBAAqB;IACrB,2BAA2B;IAC3B,kBAAkB;IAClB,4BAA4B;IAC5B,0BAA0B;IAC1B,sBAAsB;IACtB,6BAA6B;IAC7B,iCAAiC;IACjC,6BAA6B;IAC7B,2BAA2B;IAC3B,2BAA2B;IAC3B,uBAAuB;IACvB,0BAA0B;IAC1B,6BAA6B;IAC7B,+BAA+B;IAC/B,+BAA+B;IAC/B,4BAA4B;IAC5B,2BAA2B;IAC3B,kCAAkC;IAClC,+BAA+B;IAC/B,cAAc;IACd,yBAAyB;IACzB,sBAAsB;IACtB,wBAAwB;IACxB,uBAAuB;IACvB,wBAAwB;IACxB,0BAA0B;IAC1B,6BAA6B;IAC7B,+BAA+B;IAC/B,+BAA+B;IAC/B,wBAAwB;IACxB,qCAAqC;IACrC,yBAAyB;IACzB,oBAAoB;IACpB,uBAAuB;IACvB,yBAAyB;IACzB,wBAAwB;IACxB,2BAA2B;IAC3B,yBAAyB;IACzB,mCAAmC;IACnC,6BAA6B;IAC7B,uBAAuB;IACvB,mBAAmB;IACnB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,wCAAwC;IACxC,wBAAwB;IACxB,0BAA0B;IAC1B,2BAA2B;CACnB,CAAC;AAIX,+DAA+D;AAClD,QAAA,wBAAwB,GAAoC,IAAI,GAAG,CAAC,4BAAoB,CAAC,CAAC;AAE1F,QAAA,cAAc,GAAG;IAC5B,mBAAmB;IACnB,aAAa;IACb,uBAAuB;IACvB,uBAAuB;IACvB,cAAc;CACN,CAAC;AAIE,QAAA,mBAAmB,GAAG,CAAC,sBAAsB,EAAE,0BAA0B,CAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { KubbisecPermission } from "./kubbisec-permissions";
2
+ /** Global `user.role` values used by Better Auth admin plugin + KubbiSec platform staff. */
3
+ export declare const GLOBAL_USER_ROLE_SLUGS: readonly ["user", "admin", "platform_super_admin", "platform_account_manager"];
4
+ export type GlobalUserRoleSlug = (typeof GLOBAL_USER_ROLE_SLUGS)[number];
5
+ export declare const GLOBAL_ROLE_OPTIONS: ReadonlyArray<{
6
+ value: GlobalUserRoleSlug;
7
+ label: string;
8
+ }>;
9
+ /** Parses comma-separated global roles from `user.role`. */
10
+ export declare function parseGlobalUserRoles(role: string | null | undefined): string[];
11
+ export declare function isPlatformStaffRole(role: string | null | undefined): boolean;
12
+ export declare function hasPlatformPermission(role: string | null | undefined, permission: KubbisecPermission): boolean;
13
+ export declare function getMergedPlatformPermissions(role: string | null | undefined): ReadonlySet<KubbisecPermission>;
14
+ //# sourceMappingURL=platform-staff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-staff.d.ts","sourceRoot":"","sources":["../../src/rbac/platform-staff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,gFAKzB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzE,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAK3F,CAAC;AAIF,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAM9E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE5E;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC/B,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAMT;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,WAAW,CAAC,kBAAkB,CAAC,CAQjC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GLOBAL_ROLE_OPTIONS = exports.GLOBAL_USER_ROLE_SLUGS = void 0;
4
+ exports.parseGlobalUserRoles = parseGlobalUserRoles;
5
+ exports.isPlatformStaffRole = isPlatformStaffRole;
6
+ exports.hasPlatformPermission = hasPlatformPermission;
7
+ exports.getMergedPlatformPermissions = getMergedPlatformPermissions;
8
+ const resolve_platform_permissions_1 = require("./resolve-platform-permissions");
9
+ /** Global `user.role` values used by Better Auth admin plugin + KubbiSec platform staff. */
10
+ exports.GLOBAL_USER_ROLE_SLUGS = [
11
+ "user",
12
+ "admin",
13
+ "platform_super_admin",
14
+ "platform_account_manager",
15
+ ];
16
+ exports.GLOBAL_ROLE_OPTIONS = [
17
+ { value: "user", label: "Utilizador" },
18
+ { value: "admin", label: "Administrador da plataforma" },
19
+ { value: "platform_super_admin", label: "Super administrador da plataforma" },
20
+ { value: "platform_account_manager", label: "Gestor de contas" },
21
+ ];
22
+ const STAFF_ROLE_SET = new Set(["admin", "platform_super_admin", "platform_account_manager"]);
23
+ /** Parses comma-separated global roles from `user.role`. */
24
+ function parseGlobalUserRoles(role) {
25
+ if (!role?.trim())
26
+ return ["user"];
27
+ return role
28
+ .split(",")
29
+ .map((r) => r.trim())
30
+ .filter(Boolean);
31
+ }
32
+ function isPlatformStaffRole(role) {
33
+ return parseGlobalUserRoles(role).some((r) => STAFF_ROLE_SET.has(r));
34
+ }
35
+ function hasPlatformPermission(role, permission) {
36
+ const roles = parseGlobalUserRoles(role);
37
+ for (const r of roles) {
38
+ if ((0, resolve_platform_permissions_1.getPlatformPermissionsFromGlobalUserRole)(r).has(permission))
39
+ return true;
40
+ }
41
+ return false;
42
+ }
43
+ function getMergedPlatformPermissions(role) {
44
+ const merged = new Set();
45
+ for (const r of parseGlobalUserRoles(role)) {
46
+ for (const p of (0, resolve_platform_permissions_1.getPlatformPermissionsFromGlobalUserRole)(r)) {
47
+ merged.add(p);
48
+ }
49
+ }
50
+ return merged;
51
+ }
52
+ //# sourceMappingURL=platform-staff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-staff.js","sourceRoot":"","sources":["../../src/rbac/platform-staff.ts"],"names":[],"mappings":";;;AAuBA,oDAMC;AAED,kDAEC;AAED,sDASC;AAED,oEAUC;AAvDD,iFAA0F;AAE1F,4FAA4F;AAC/E,QAAA,sBAAsB,GAAG;IACpC,MAAM;IACN,OAAO;IACP,sBAAsB;IACtB,0BAA0B;CAClB,CAAC;AAIE,QAAA,mBAAmB,GAAgE;IAC9F,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;IACtC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,6BAA6B,EAAE;IACxD,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,mCAAmC,EAAE;IAC7E,EAAE,KAAK,EAAE,0BAA0B,EAAE,KAAK,EAAE,kBAAkB,EAAE;CACjE,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,CAAC,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,CAAC,CAAC,CAAC;AAEtG,4DAA4D;AAC5D,SAAgB,oBAAoB,CAAC,IAA+B;IAClE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;QAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,IAAI;SACR,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,mBAAmB,CAAC,IAA+B;IACjE,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAgB,qBAAqB,CACnC,IAA+B,EAC/B,UAA8B;IAE9B,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,IAAA,uEAAwC,EAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,4BAA4B,CAC1C,IAA+B;IAE/B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,IAAA,uEAAwC,EAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { normalizeStoredOrgRole } from "./better-auth-org-roles";
2
+ import type { KubbisecPermission, OrgRoleSlug } from "./kubbisec-permissions";
3
+ /** Maps stored org roles (Kubbisec slugs + legacy Better Auth) → canonical `OrgRoleSlug`. */
4
+ export declare const normalizeOrgMemberRole: typeof normalizeStoredOrgRole;
5
+ /** Effective tenant permissions for an organization member role (see rbac-catalog.md §4). */
6
+ export declare function getTenantPermissionsForOrgRole(role: OrgRoleSlug): ReadonlySet<KubbisecPermission>;
7
+ /** Full tenant permission set (e.g. API-key-only automation, parity with org admin). */
8
+ export declare function getAllTenantPermissions(): ReadonlySet<KubbisecPermission>;
9
+ export declare function parseApiKeyPermissionsJson(raw: string | Record<string, unknown> | unknown[] | null | undefined): KubbisecPermission[] | null;
10
+ //# sourceMappingURL=resolve-org-permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-org-permissions.d.ts","sourceRoot":"","sources":["../../src/rbac/resolve-org-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE9E,6FAA6F;AAC7F,eAAO,MAAM,sBAAsB,+BAAyB,CAAC;AAqE7D,6FAA6F;AAC7F,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC,kBAAkB,CAAC,CA+FjG;AAED,wFAAwF;AACxF,wBAAgB,uBAAuB,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAEzE;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,GACnE,kBAAkB,EAAE,GAAG,IAAI,CAqB7B"}
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeOrgMemberRole = void 0;
4
+ exports.getTenantPermissionsForOrgRole = getTenantPermissionsForOrgRole;
5
+ exports.getAllTenantPermissions = getAllTenantPermissions;
6
+ exports.parseApiKeyPermissionsJson = parseApiKeyPermissionsJson;
7
+ const better_auth_org_roles_1 = require("./better-auth-org-roles");
8
+ /** Maps stored org roles (Kubbisec slugs + legacy Better Auth) → canonical `OrgRoleSlug`. */
9
+ exports.normalizeOrgMemberRole = better_auth_org_roles_1.normalizeStoredOrgRole;
10
+ const ALL_TENANT = new Set([
11
+ "kbsc.org.profile.read",
12
+ "kbsc.org.profile.update",
13
+ "kbsc.org.settings.manage",
14
+ "kbsc.org.delete",
15
+ "kbsc.identity.member.read",
16
+ "kbsc.identity.member.invite",
17
+ "kbsc.identity.member.role.update",
18
+ "kbsc.identity.member.remove",
19
+ "kbsc.identity.invitation.manage",
20
+ "kbsc.asset.project.read",
21
+ "kbsc.asset.project.create",
22
+ "kbsc.asset.project.update",
23
+ "kbsc.asset.project.delete",
24
+ "kbsc.finding.read",
25
+ "kbsc.finding.triage.update",
26
+ "kbsc.finding.remediation.manage",
27
+ "kbsc.finding.remediation.auto-apply",
28
+ "kbsc.finding.export",
29
+ "kbsc.ingest.report.create",
30
+ "kbsc.supply.read",
31
+ "kbsc.supply.policy.comment",
32
+ "kbsc.supply.scan.trigger",
33
+ "kbsc.governance.read",
34
+ "kbsc.governance.gate.manage",
35
+ "kbsc.governance.coverage.manage",
36
+ "kbsc.ingest.coverage.create",
37
+ "kbsc.ingest.gate.evaluate",
38
+ "kbsc.integration.read",
39
+ "kbsc.integration.connect",
40
+ "kbsc.integration.disconnect",
41
+ "kbsc.integration.secret.write",
42
+ "kbsc.integration.issue.create",
43
+ "kbsc.integration.pr.create",
44
+ "kbsc.ci.read",
45
+ "kbsc.ci.pipeline.manage",
46
+ "kbsc.ci.pipeline.run",
47
+ "kbsc.ci.privileged.run",
48
+ "kbsc.ci.runner.manage",
49
+ "kbsc.ci.envpack.manage",
50
+ "kbsc.ci.bootstrap.manage",
51
+ "kbsc.credential.apikey.read",
52
+ "kbsc.credential.apikey.create",
53
+ "kbsc.credential.apikey.revoke",
54
+ "kbsc.notification.read",
55
+ "kbsc.notification.preference.manage",
56
+ "kbsc.ai.provider.manage",
57
+ "kbsc.ai.usage.read",
58
+ "kbsc.ai.assistant.use",
59
+ "kbsc.ai.automation.auto",
60
+ "kbsc.project.ai-autopilot.manage",
61
+ "kbsc.project.ai-autopilot.run",
62
+ "kbsc.integration.pr.merge",
63
+ "kbsc.billing.read",
64
+ "kbsc.billing.manage",
65
+ "kbsc.contract.read",
66
+ "kbsc.contract.manage",
67
+ "kbsc.identity.member.permission.manage",
68
+ "kbsc.org.security.read",
69
+ "kbsc.org.security.manage",
70
+ "kbsc.org.assistant.manage",
71
+ ].map((p) => p));
72
+ /** Effective tenant permissions for an organization member role (see rbac-catalog.md §4). */
73
+ function getTenantPermissionsForOrgRole(role) {
74
+ switch (role) {
75
+ case "org_administrator":
76
+ return ALL_TENANT;
77
+ case "org_finance":
78
+ return new Set([
79
+ "kbsc.org.profile.read",
80
+ "kbsc.identity.member.read",
81
+ "kbsc.billing.read",
82
+ "kbsc.billing.manage",
83
+ "kbsc.contract.read",
84
+ "kbsc.contract.manage",
85
+ "kbsc.notification.read",
86
+ ]);
87
+ case "org_security_engineer":
88
+ return new Set([
89
+ "kbsc.org.profile.read",
90
+ "kbsc.identity.member.read",
91
+ "kbsc.asset.project.read",
92
+ "kbsc.asset.project.create",
93
+ "kbsc.asset.project.update",
94
+ "kbsc.finding.read",
95
+ "kbsc.finding.triage.update",
96
+ "kbsc.finding.remediation.manage",
97
+ "kbsc.finding.remediation.auto-apply",
98
+ "kbsc.finding.export",
99
+ "kbsc.ingest.report.create",
100
+ "kbsc.supply.read",
101
+ "kbsc.supply.policy.comment",
102
+ "kbsc.supply.scan.trigger",
103
+ "kbsc.governance.read",
104
+ "kbsc.governance.gate.manage",
105
+ "kbsc.governance.coverage.manage",
106
+ "kbsc.ingest.coverage.create",
107
+ "kbsc.ingest.gate.evaluate",
108
+ "kbsc.integration.read",
109
+ "kbsc.integration.connect",
110
+ "kbsc.ci.read",
111
+ "kbsc.credential.apikey.read",
112
+ "kbsc.notification.read",
113
+ "kbsc.notification.preference.manage",
114
+ "kbsc.ai.usage.read",
115
+ "kbsc.ai.assistant.use",
116
+ "kbsc.project.ai-autopilot.run",
117
+ ]);
118
+ case "org_delivery_engineer":
119
+ return new Set([
120
+ "kbsc.org.profile.read",
121
+ "kbsc.identity.member.read",
122
+ "kbsc.asset.project.read",
123
+ "kbsc.asset.project.create",
124
+ "kbsc.asset.project.update",
125
+ "kbsc.finding.read",
126
+ "kbsc.finding.export",
127
+ "kbsc.ingest.report.create",
128
+ "kbsc.supply.read",
129
+ "kbsc.supply.scan.trigger",
130
+ "kbsc.governance.read",
131
+ "kbsc.governance.coverage.manage",
132
+ "kbsc.ingest.coverage.create",
133
+ "kbsc.ingest.gate.evaluate",
134
+ "kbsc.integration.read",
135
+ "kbsc.integration.connect",
136
+ "kbsc.integration.disconnect",
137
+ "kbsc.integration.secret.write",
138
+ "kbsc.ci.read",
139
+ "kbsc.ci.pipeline.manage",
140
+ "kbsc.ci.pipeline.run",
141
+ "kbsc.ci.runner.manage",
142
+ "kbsc.ci.envpack.manage",
143
+ "kbsc.ci.bootstrap.manage",
144
+ "kbsc.credential.apikey.read",
145
+ "kbsc.credential.apikey.create",
146
+ "kbsc.credential.apikey.revoke",
147
+ "kbsc.notification.read",
148
+ "kbsc.notification.preference.manage",
149
+ "kbsc.ai.usage.read",
150
+ "kbsc.ai.assistant.use",
151
+ ]);
152
+ case "org_observer":
153
+ return new Set([
154
+ "kbsc.org.profile.read",
155
+ "kbsc.identity.member.read",
156
+ "kbsc.asset.project.read",
157
+ "kbsc.finding.read",
158
+ "kbsc.finding.export",
159
+ "kbsc.supply.read",
160
+ "kbsc.governance.read",
161
+ "kbsc.integration.read",
162
+ "kbsc.ci.read",
163
+ "kbsc.notification.read",
164
+ "kbsc.ai.usage.read",
165
+ "kbsc.ai.assistant.use",
166
+ ]);
167
+ }
168
+ }
169
+ /** Full tenant permission set (e.g. API-key-only automation, parity with org admin). */
170
+ function getAllTenantPermissions() {
171
+ return ALL_TENANT;
172
+ }
173
+ function parseApiKeyPermissionsJson(raw) {
174
+ if (raw == null)
175
+ return null;
176
+ try {
177
+ const v = typeof raw === "string" ? (raw.trim() === "" ? null : JSON.parse(raw)) : raw;
178
+ if (v == null)
179
+ return null;
180
+ const rawPermissions = Array.isArray(v)
181
+ ? v
182
+ : typeof v === "object" && v !== null
183
+ ? Object.values(v).flatMap((value) => (Array.isArray(value) ? value : []))
184
+ : null;
185
+ if (!rawPermissions)
186
+ return null;
187
+ const out = new Set();
188
+ for (const x of rawPermissions) {
189
+ if (typeof x === "string" && ALL_TENANT.has(x)) {
190
+ out.add(x);
191
+ }
192
+ }
193
+ return out.size ? [...out] : null;
194
+ }
195
+ catch {
196
+ return null;
197
+ }
198
+ }
199
+ //# sourceMappingURL=resolve-org-permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-org-permissions.js","sourceRoot":"","sources":["../../src/rbac/resolve-org-permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type KubbisecPermission } from "./kubbisec-permissions";
2
+ /**
3
+ * Maps global `user.role` (Better Auth admin plugin uses `admin`) + future slugs.
4
+ * `admin` and `platform_super_admin` receive the full `kbsc.*` catalog (tenant + platform).
5
+ */
6
+ export declare function getPlatformPermissionsFromGlobalUserRole(role: string | null | undefined): ReadonlySet<KubbisecPermission>;
7
+ //# sourceMappingURL=resolve-platform-permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-platform-permissions.d.ts","sourceRoot":"","sources":["../../src/rbac/resolve-platform-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAO3F;;;GAGG;AACH,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,WAAW,CAAC,kBAAkB,CAAC,CAMjC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPlatformPermissionsFromGlobalUserRole = getPlatformPermissionsFromGlobalUserRole;
4
+ const kubbisec_permissions_1 = require("./kubbisec-permissions");
5
+ const PLATFORM_ACCOUNT_MANAGER = new Set([
6
+ "kbsc.platform.org.read",
7
+ "kbsc.platform.user.read",
8
+ ]);
9
+ /**
10
+ * Maps global `user.role` (Better Auth admin plugin uses `admin`) + future slugs.
11
+ * `admin` and `platform_super_admin` receive the full `kbsc.*` catalog (tenant + platform).
12
+ */
13
+ function getPlatformPermissionsFromGlobalUserRole(role) {
14
+ if (!role)
15
+ return new Set();
16
+ const r = role.trim();
17
+ if (r === "admin" || r === "platform_super_admin")
18
+ return kubbisec_permissions_1.ALL_KUBBISEC_PERMISSIONS;
19
+ if (r === "platform_account_manager")
20
+ return PLATFORM_ACCOUNT_MANAGER;
21
+ return new Set();
22
+ }
23
+ //# sourceMappingURL=resolve-platform-permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-platform-permissions.js","sourceRoot":"","sources":["../../src/rbac/resolve-platform-permissions.ts"],"names":[],"mappings":";;AAWA,4FAQC;AAnBD,iEAA2F;AAE3F,MAAM,wBAAwB,GAAoC,IAAI,GAAG,CAAC;IACxE,wBAAwB;IACxB,yBAAyB;CAC1B,CAAC,CAAC;AAEH;;;GAGG;AACH,SAAgB,wCAAwC,CACtD,IAA+B;IAE/B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,sBAAsB;QAAE,OAAO,+CAAwB,CAAC;IACnF,IAAI,CAAC,KAAK,0BAA0B;QAAE,OAAO,wBAAwB,CAAC;IACtE,OAAO,IAAI,GAAG,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare const REDACTED_VALUE = "[REDACTED]";
2
+ export type RedactionOptions = {
3
+ redactRawData?: boolean;
4
+ redactMetadata?: boolean;
5
+ };
6
+ export declare function redactSensitiveData<T>(value: T): T;
7
+ export declare function sanitizeReportPayload<T extends {
8
+ metadata?: Record<string, unknown>;
9
+ vulnerabilities?: Array<{
10
+ rawData?: Record<string, unknown>;
11
+ }>;
12
+ }>(report: T, options?: RedactionOptions): T;
13
+ //# sourceMappingURL=redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,cAAc,eAAe,CAAC;AAiD3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AA+LF,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CA2ClD;AAED,wBAAgB,qBAAqB,CACnC,CAAC,SAAS;IACR,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAChE,EACD,MAAM,EAAE,CAAC,EAAE,OAAO,GAAE,gBAAqB,GAAG,CAAC,CA0B9C"}