@discover-cloud/shared 1.2.9 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/authorization/index.d.ts +1 -1
  2. package/dist/authorization/index.js +1 -1
  3. package/dist/authorization/permission-cache.service.d.ts +104 -16
  4. package/dist/authorization/permission-cache.service.js +156 -143
  5. package/dist/authorization/permission-checker.d.ts +30 -0
  6. package/dist/authorization/permission-checker.js +40 -0
  7. package/dist/contracts/auth-service/account.dto.d.ts +30 -0
  8. package/dist/contracts/auth-service/account.dto.js +7 -0
  9. package/dist/contracts/auth-service/auth.dto.d.ts +21 -0
  10. package/dist/contracts/auth-service/auth.dto.js +10 -0
  11. package/dist/dtos/auth-service.dto.d.ts +72 -26
  12. package/dist/dtos/auth-service.dto.js +4 -0
  13. package/dist/dtos/cloud-service.dto.d.ts +51 -27
  14. package/dist/dtos/cloud-service.dto.js +5 -0
  15. package/dist/dtos/insights-service.dto.d.ts +18 -27
  16. package/dist/dtos/insights-service.dto.js +8 -0
  17. package/dist/dtos/response.dto.d.ts +7 -84
  18. package/dist/dtos/response.dto.js +2 -21
  19. package/dist/dtos/user-service.dto.d.ts +118 -13
  20. package/dist/enums/domain.enums.d.ts +246 -75
  21. package/dist/enums/domain.enums.js +305 -102
  22. package/dist/enums/permissions.enums.d.ts +142 -80
  23. package/dist/enums/permissions.enums.js +174 -133
  24. package/dist/errors/app-error.d.ts +13 -18
  25. package/dist/errors/app-error.js +14 -20
  26. package/dist/errors/http-errors.d.ts +105 -17
  27. package/dist/errors/http-errors.js +118 -33
  28. package/dist/http/index.d.ts +1 -0
  29. package/dist/http/index.js +1 -0
  30. package/dist/http/request-context.d.ts +8 -0
  31. package/dist/http/request-context.js +37 -0
  32. package/dist/http/service-client.d.ts +91 -38
  33. package/dist/http/service-client.js +102 -53
  34. package/dist/index.d.ts +1 -0
  35. package/dist/index.js +1 -0
  36. package/dist/jwt/index.d.ts +2 -1
  37. package/dist/jwt/index.js +2 -1
  38. package/dist/jwt/machine-jwt-verifier.d.ts +21 -0
  39. package/dist/jwt/machine-jwt-verifier.js +84 -0
  40. package/dist/jwt/machine-token-client.d.ts +35 -4
  41. package/dist/jwt/machine-token-client.js +57 -23
  42. package/dist/jwt/user-jwt-verifier.d.ts +31 -0
  43. package/dist/jwt/user-jwt-verifier.js +101 -0
  44. package/dist/messaging/index.d.ts +1 -0
  45. package/dist/{security → messaging}/index.js +1 -1
  46. package/dist/messaging/rabbitmq.client.d.ts +13 -0
  47. package/dist/messaging/rabbitmq.client.js +127 -0
  48. package/dist/middleware/error-handler.middleware.d.ts +8 -28
  49. package/dist/middleware/error-handler.middleware.js +61 -52
  50. package/dist/middleware/index.d.ts +7 -5
  51. package/dist/middleware/index.js +7 -5
  52. package/dist/middleware/request-context.middleware.d.ts +17 -0
  53. package/dist/middleware/request-context.middleware.js +73 -0
  54. package/dist/middleware/require-auth.middleware.d.ts +17 -70
  55. package/dist/middleware/require-auth.middleware.js +24 -103
  56. package/dist/middleware/require-machine.middleware.d.ts +38 -0
  57. package/dist/middleware/require-machine.middleware.js +123 -0
  58. package/dist/middleware/require-org-permission-from-body.middleware.d.ts +10 -0
  59. package/dist/middleware/require-org-permission-from-body.middleware.js +24 -0
  60. package/dist/middleware/require-org-permission.middleware.d.ts +19 -0
  61. package/dist/middleware/require-org-permission.middleware.js +115 -0
  62. package/dist/middleware/require-platform-permission.middleware.d.ts +19 -0
  63. package/dist/middleware/require-platform-permission.middleware.js +91 -0
  64. package/dist/middleware/require-user.middleware.d.ts +14 -0
  65. package/dist/middleware/require-user.middleware.js +30 -0
  66. package/dist/middleware/require-workspace-permission.middleware.d.ts +20 -0
  67. package/dist/middleware/require-workspace-permission.middleware.js +114 -0
  68. package/dist/middleware/validate.middleware.d.ts +29 -29
  69. package/dist/middleware/validate.middleware.js +30 -32
  70. package/dist/types/express.types.d.ts +83 -122
  71. package/dist/types/express.types.js +28 -47
  72. package/dist/utils/date.util.d.ts +6 -0
  73. package/dist/utils/date.util.js +11 -0
  74. package/dist/utils/env.util.d.ts +6 -0
  75. package/dist/utils/env.util.js +19 -0
  76. package/dist/utils/index.d.ts +5 -4
  77. package/dist/utils/index.js +5 -4
  78. package/dist/utils/logger.util.d.ts +26 -0
  79. package/dist/utils/logger.util.js +53 -0
  80. package/dist/utils/pagination.util.d.ts +6 -0
  81. package/dist/utils/pagination.util.js +20 -0
  82. package/dist/utils/response.util.d.ts +27 -0
  83. package/dist/utils/response.util.js +56 -0
  84. package/dist/utils/slug.util.d.ts +9 -0
  85. package/dist/utils/slug.util.js +32 -0
  86. package/dist/utils/url-safety.util.d.ts +6 -0
  87. package/dist/utils/url-safety.util.js +72 -0
  88. package/package.json +3 -1
  89. package/dist/authorization/permissions.d.ts +0 -78
  90. package/dist/authorization/permissions.js +0 -174
  91. package/dist/context/access-context.d.ts +0 -10
  92. package/dist/context/access-context.js +0 -2
  93. package/dist/context/index.d.ts +0 -1
  94. package/dist/context/index.js +0 -17
  95. package/dist/dto/auth-service.dtos.d.ts +0 -44
  96. package/dist/dto/auth-service.dtos.js +0 -2
  97. package/dist/dto/index.d.ts +0 -3
  98. package/dist/dto/index.js +0 -19
  99. package/dist/dto/response.dtos.d.ts +0 -55
  100. package/dist/dto/response.dtos.js +0 -6
  101. package/dist/dto/user-service.dtos.d.ts +0 -50
  102. package/dist/dto/user-service.dtos.js +0 -2
  103. package/dist/enums/auth-service.enums.d.ts +0 -12
  104. package/dist/enums/auth-service.enums.js +0 -17
  105. package/dist/enums/permissions.types.d.ts +0 -12
  106. package/dist/enums/permissions.types.js +0 -17
  107. package/dist/enums/user-service.enums.d.ts +0 -32
  108. package/dist/enums/user-service.enums.js +0 -41
  109. package/dist/internal/index.d.ts +0 -4
  110. package/dist/internal/index.js +0 -20
  111. package/dist/internal/internal-jwt.service.d.ts +0 -13
  112. package/dist/internal/internal-jwt.service.js +0 -88
  113. package/dist/internal/internal-jwt.types.d.ts +0 -7
  114. package/dist/internal/internal-jwt.types.js +0 -2
  115. package/dist/internal/internal-key-manager.d.ts +0 -16
  116. package/dist/internal/internal-key-manager.js +0 -67
  117. package/dist/internal/registry.d.ts +0 -8
  118. package/dist/internal/registry.js +0 -34
  119. package/dist/internal/service-client.d.ts +0 -9
  120. package/dist/internal/service-client.js +0 -94
  121. package/dist/jwt/internal-jwt-verifier.d.ts +0 -41
  122. package/dist/jwt/internal-jwt-verifier.js +0 -185
  123. package/dist/jwt/jwt-verifier.d.ts +0 -9
  124. package/dist/jwt/jwt-verifier.js +0 -36
  125. package/dist/jwt/service-client.d.ts +0 -7
  126. package/dist/jwt/service-client.js +0 -87
  127. package/dist/middleware/authorize.d.ts +0 -3
  128. package/dist/middleware/authorize.js +0 -24
  129. package/dist/middleware/authorize.middleware.d.ts +0 -54
  130. package/dist/middleware/authorize.middleware.js +0 -104
  131. package/dist/middleware/error-handler.d.ts +0 -4
  132. package/dist/middleware/error-handler.js +0 -23
  133. package/dist/middleware/request-id.d.ts +0 -2
  134. package/dist/middleware/request-id.js +0 -9
  135. package/dist/middleware/request-id.middleware.d.ts +0 -22
  136. package/dist/middleware/request-id.middleware.js +0 -34
  137. package/dist/middleware/require-auth.d.ts +0 -10
  138. package/dist/middleware/require-auth.js +0 -34
  139. package/dist/middleware/require-human.middleware.d.ts +0 -2
  140. package/dist/middleware/require-human.middleware.js +0 -18
  141. package/dist/middleware/require-internal.middleware.d.ts +0 -18
  142. package/dist/middleware/require-internal.middleware.js +0 -183
  143. package/dist/middleware/validate.d.ts +0 -5
  144. package/dist/middleware/validate.js +0 -18
  145. package/dist/middleware/validated-merge.middleware.d.ts +0 -20
  146. package/dist/middleware/validated-merge.middleware.js +0 -33
  147. package/dist/middleware/verify-internal-jwt.d.ts +0 -7
  148. package/dist/middleware/verify-internal-jwt.js +0 -25
  149. package/dist/security/guard.d.ts +0 -10
  150. package/dist/security/guard.js +0 -40
  151. package/dist/security/index.d.ts +0 -1
  152. package/dist/types/express.d.ts +0 -22
  153. package/dist/types/express.js +0 -3
  154. package/dist/utils/date.utils.d.ts +0 -25
  155. package/dist/utils/date.utils.js +0 -30
  156. package/dist/utils/env.d.ts +0 -46
  157. package/dist/utils/env.js +0 -61
  158. package/dist/utils/env.utils.d.ts +0 -46
  159. package/dist/utils/env.utils.js +0 -61
  160. package/dist/utils/logger.utils.d.ts +0 -66
  161. package/dist/utils/logger.utils.js +0 -97
  162. package/dist/utils/response.d.ts +0 -4
  163. package/dist/utils/response.js +0 -35
  164. package/dist/utils/response.utils.d.ts +0 -54
  165. package/dist/utils/response.utils.js +0 -85
@@ -1,84 +1,146 @@
1
1
  /**
2
- * PERMISSION ENUMS (@discover-cloud/shared)
3
- * ────────────────────────────────────────────
4
- * Platform-level roles and permissions. These are the single source of
5
- * truth for the entire permission system — the Redis permission cache,
6
- * JWT payloads, and route guards all derive from these definitions.
7
- *
8
- * File layout:
9
- * AccountRole — platform-level account roles (highest → lowest privilege)
10
- * GlobalPermission — platform-wide permissions derived from AccountRole
11
- * OrganizationRole — per-org roles (future)
12
- * OrgPermission — per-org permissions checked by tenant middleware (future)
2
+ * @file permissions.enums.ts
3
+ * @description Static permission keys seeded into RBAC databases.
13
4
  */
14
- /**
15
- * SUPERADMIN — Full platform control. Internal engineering / founders only.
16
- * Can impersonate users, access all data, manage platform config.
17
- *
18
- * ADMIN — Platform operations team. Can manage users, view system health,
19
- * handle support escalations. Cannot touch billing infrastructure.
20
- *
21
- * SUPPORT — Customer support agents. Read-only access to user accounts
22
- * and cloud cost data for support purposes. Cannot modify anything.
23
- *
24
- * MODERATOR — Content / alert moderation (future). Included now so the
25
- * role exists in the system before the feature ships.
26
- *
27
- * USER — Standard authenticated user. Accesses only their own data.
28
- * All cloud cost features are gated at the service level.
29
- */
30
- export declare enum AccountRole {
31
- SUPERADMIN = "SUPERADMIN",
32
- ADMIN = "ADMIN",
33
- SUPPORT = "SUPPORT",
34
- MODERATOR = "MODERATOR",
35
- USER = "USER"
36
- }
37
- export declare enum GlobalPermission {
38
- MANAGE_ACCOUNTS = "MANAGE_ACCOUNTS",
39
- VIEW_ANY_ACCOUNT = "VIEW_ANY_ACCOUNT",
40
- IMPERSONATE_ACCOUNT = "IMPERSONATE_ACCOUNT",
41
- SUSPEND_ACCOUNT = "SUSPEND_ACCOUNT",
42
- DELETE_ACCOUNT = "DELETE_ACCOUNT",
43
- VIEW_ANY_COST_DATA = "VIEW_ANY_COST_DATA",
44
- EXPORT_ANY_COST_DATA = "EXPORT_ANY_COST_DATA",
45
- MANAGE_COST_ALERTS = "MANAGE_COST_ALERTS",
46
- VIEW_SYSTEM_LOGS = "VIEW_SYSTEM_LOGS",
47
- VIEW_SYSTEM_HEALTH = "VIEW_SYSTEM_HEALTH",
48
- MANAGE_PLATFORM_CONFIG = "MANAGE_PLATFORM_CONFIG",
49
- SUPPORT_VIEW = "SUPPORT_VIEW",
50
- SUPPORT_WRITE = "SUPPORT_WRITE",
51
- MANAGE_BILLING = "MANAGE_BILLING",
52
- MODERATE_CONTENT = "MODERATE_CONTENT",
53
- MANAGE_INTEGRATIONS = "MANAGE_INTEGRATIONS"
54
- }
55
- /**
56
- * OWNER — Created the org. Full control, including deletion and billing.
57
- * ADMIN — Manages members and org settings. Cannot delete the org.
58
- * EDITOR — Can create/edit cost reports and dashboards within the org.
59
- * VIEWER — Read-only access to org cost data.
60
- * BILLING — Dedicated billing contact. Access to invoices and payment only.
61
- */
62
- export declare enum OrganizationRole {
63
- OWNER = "OWNER",
64
- ADMIN = "ADMIN",
65
- EDITOR = "EDITOR",
66
- VIEWER = "VIEWER",
67
- BILLING = "BILLING"
5
+ export declare enum PlatformPermission {
6
+ TENANT_VIEW = "tenant:view",
7
+ TENANT_CREATE = "tenant:create",
8
+ TENANT_UPDATE = "tenant:update",
9
+ TENANT_SUSPEND = "tenant:suspend",
10
+ TENANT_DELETE = "tenant:delete",
11
+ GLOBAL_USER_VIEW = "global_user:view",
12
+ GLOBAL_USER_UPDATE = "global_user:update",
13
+ GLOBAL_USER_SUSPEND = "global_user:suspend",
14
+ GLOBAL_USER_DELETE = "global_user:delete",
15
+ GLOBAL_USER_SESSION_REVOKE = "global_user:session:revoke",
16
+ PLATFORM_ROLE_VIEW = "platform_role:view",
17
+ PLATFORM_ROLE_CREATE = "platform_role:create",
18
+ PLATFORM_ROLE_UPDATE = "platform_role:update",
19
+ PLATFORM_ROLE_DELETE = "platform_role:delete",
20
+ PLATFORM_ROLE_ASSIGN = "platform_role:assign",
21
+ PLATFORM_PERMISSION_VIEW = "platform_permission:view",
22
+ PLATFORM_PERMISSION_CREATE = "platform_permission:create",
23
+ PLATFORM_PERMISSION_UPDATE = "platform_permission:update",
24
+ PLATFORM_PERMISSION_DELETE = "platform_permission:delete",
25
+ GLOBAL_BILLING_VIEW = "global_billing:view",
26
+ GLOBAL_BILLING_MANAGE = "global_billing:manage",
27
+ SUBSCRIPTION_PLAN_VIEW = "subscription_plan:view",
28
+ SUBSCRIPTION_PLAN_MANAGE = "subscription_plan:manage",
29
+ SYSTEM_CONFIG_VIEW = "system_config:view",
30
+ SYSTEM_CONFIG_UPDATE = "system_config:update",
31
+ FEATURE_FLAG_VIEW = "feature_flag:view",
32
+ FEATURE_FLAG_MANAGE = "feature_flag:manage",
33
+ SERVICE_CLIENT_VIEW = "service_client:view",
34
+ SERVICE_CLIENT_MANAGE = "service_client:manage",
35
+ GLOBAL_AUDIT_VIEW = "global_audit:view",
36
+ GLOBAL_AUDIT_EXPORT = "global_audit:export",
37
+ SECURITY_POLICY_VIEW = "security_policy:view",
38
+ SECURITY_POLICY_MANAGE = "security_policy:manage",
39
+ SUPPORT_TICKET_VIEW = "support_ticket:view",
40
+ SUPPORT_TICKET_MANAGE = "support_ticket:manage",
41
+ USER_IMPERSONATE = "user:impersonate",
42
+ SYSTEM_TELEMETRY_VIEW = "system_telemetry:view",
43
+ GLOBAL_ANALYTICS_VIEW = "global_analytics:view",
44
+ GLOBAL_REPORT_GENERATE = "global_report:generate"
68
45
  }
69
- export declare enum OrgPermission {
70
- DELETE_ORG = "DELETE_ORG",
71
- MANAGE_ORG_SETTINGS = "MANAGE_ORG_SETTINGS",
72
- INVITE_MEMBERS = "INVITE_MEMBERS",
73
- REMOVE_MEMBERS = "REMOVE_MEMBERS",
74
- CHANGE_MEMBER_ROLES = "CHANGE_MEMBER_ROLES",
75
- VIEW_MEMBERS = "VIEW_MEMBERS",
76
- VIEW_COST_DATA = "VIEW_COST_DATA",
77
- EXPORT_COST_DATA = "EXPORT_COST_DATA",
78
- MANAGE_COST_REPORTS = "MANAGE_COST_REPORTS",
79
- MANAGE_ALERTS = "MANAGE_ALERTS",
80
- MANAGE_CLOUD_ACCOUNTS = "MANAGE_CLOUD_ACCOUNTS",
81
- VIEW_CLOUD_ACCOUNTS = "VIEW_CLOUD_ACCOUNTS",
82
- VIEW_BILLING = "VIEW_BILLING",
83
- MANAGE_BILLING = "MANAGE_BILLING"
46
+ export declare enum Permission {
47
+ ORG_VIEW = "org:view",
48
+ ORG_UPDATE = "org:update",
49
+ ORG_DELETE = "org:delete",
50
+ ORG_TRANSFER = "org:transfer",
51
+ WORKSPACE_VIEW = "workspace:view",
52
+ WORKSPACE_CREATE = "workspace:create",
53
+ WORKSPACE_UPDATE = "workspace:update",
54
+ WORKSPACE_DELETE = "workspace:delete",
55
+ WORKSPACE_TRANSFER = "workspace:transfer",
56
+ ORG_MEMBER_VIEW = "org:member:view",
57
+ ORG_MEMBER_INVITE = "org:member:invite",
58
+ ORG_MEMBER_REMOVE = "org:member:remove",
59
+ ORG_MEMBER_ROLE_UPDATE = "org:member:role:update",
60
+ ORG_INVITE_VIEW = "org:invite:view",
61
+ ORG_INVITE_CREATE = "org:invite:create",
62
+ ORG_INVITE_REVOKE = "org:invite:revoke",
63
+ ORG_ROLE_VIEW = "org:role:view",
64
+ ORG_ROLE_CREATE = "org:role:create",
65
+ ORG_ROLE_UPDATE = "org:role:update",
66
+ ORG_ROLE_DELETE = "org:role:delete",
67
+ ORG_ROLE_ASSIGN = "org:role:assign",
68
+ ORG_ROLE_PERMISSION_SYNC = "org:role:permission:sync",
69
+ WORKSPACE_MEMBER_VIEW = "workspace:member:view",
70
+ WORKSPACE_MEMBER_ADD = "workspace:member:add",
71
+ WORKSPACE_MEMBER_REMOVE = "workspace:member:remove",
72
+ WORKSPACE_MEMBER_ROLE_UPDATE = "workspace:member:role:update",
73
+ WORKSPACE_INVITE_VIEW = "workspace:invite:view",
74
+ WORKSPACE_INVITE_CREATE = "workspace:invite:create",
75
+ WORKSPACE_INVITE_REVOKE = "workspace:invite:revoke",
76
+ CLOUD_ACCOUNT_VIEW = "cloud_account:view",
77
+ CLOUD_ACCOUNT_CONNECT = "cloud_account:connect",
78
+ CLOUD_ACCOUNT_UPDATE = "cloud_account:update",
79
+ CLOUD_ACCOUNT_SYNC = "cloud_account:sync",
80
+ CLOUD_ACCOUNT_REMOVE = "cloud_account:remove",
81
+ CLOUD_RESOURCE_VIEW = "cloud_resource:view",
82
+ CLOUD_RESOURCE_TAG = "cloud_resource:tag",
83
+ CLOUD_RESOURCE_ACTION = "cloud_resource:action",// e.g. start/stop/terminate
84
+ INVENTORY_VIEW = "inventory:view",
85
+ INVENTORY_EXPORT = "inventory:export",
86
+ COST_VIEW = "cost:view",
87
+ COST_BREAKDOWN_VIEW = "cost:breakdown:view",
88
+ COST_EXPORT = "cost:export",
89
+ BUDGET_VIEW = "budget:view",
90
+ BUDGET_CREATE = "budget:create",
91
+ BUDGET_UPDATE = "budget:update",
92
+ BUDGET_DELETE = "budget:delete",
93
+ FORECAST_VIEW = "forecast:view",
94
+ FORECAST_GENERATE = "forecast:generate",
95
+ OPTIMIZATION_VIEW = "optimization:view",
96
+ OPTIMIZATION_APPLY = "optimization:apply",
97
+ RECOMMENDATION_VIEW = "recommendation:view",
98
+ RECOMMENDATION_APPLY = "recommendation:apply",
99
+ RECOMMENDATION_REJECT = "recommendation:reject",
100
+ ALERT_RULE_VIEW = "alert_rule:view",
101
+ ALERT_RULE_CREATE = "alert_rule:create",
102
+ ALERT_RULE_UPDATE = "alert_rule:update",
103
+ ALERT_RULE_DELETE = "alert_rule:delete",
104
+ ALERT_RULE_CHANNEL_SYNC = "alert_rule:channel:sync",
105
+ ANOMALY_VIEW = "anomaly:view",
106
+ ANOMALY_INVESTIGATE = "anomaly:investigate",
107
+ ANOMALY_DISMISS = "anomaly:dismiss",
108
+ NOTIFICATION_VIEW = "notification:view",
109
+ NOTIFICATION_MANAGE = "notification:manage",// Slack/Email/webhook integrations
110
+ DASHBOARD_VIEW = "dashboard:view",
111
+ DASHBOARD_CREATE = "dashboard:create",
112
+ DASHBOARD_UPDATE = "dashboard:update",
113
+ DASHBOARD_DELETE = "dashboard:delete",
114
+ DASHBOARD_SHARE = "dashboard:share",
115
+ REPORT_VIEW = "report:view",
116
+ REPORT_CREATE = "report:create",
117
+ REPORT_SCHEDULE = "report:schedule",
118
+ REPORT_EXPORT = "report:export",
119
+ REPORT_DELETE = "report:delete",
120
+ ANALYTICS_VIEW = "analytics:view",
121
+ ANALYTICS_QUERY = "analytics:query",
122
+ ANALYTICS_EXPORT = "analytics:export",
123
+ SECURITY_POSTURE_VIEW = "security:posture:view",
124
+ SECURITY_ISSUE_VIEW = "security:issue:view",
125
+ SECURITY_ISSUE_MANAGE = "security:issue:manage",
126
+ COMPLIANCE_VIEW = "compliance:view",
127
+ COMPLIANCE_EXPORT = "compliance:export",
128
+ AUDIT_LOG_VIEW = "audit_log:view",
129
+ AUDIT_LOG_EXPORT = "audit_log:export",
130
+ AUTOMATION_VIEW = "automation:view",
131
+ AUTOMATION_CREATE = "automation:create",
132
+ AUTOMATION_UPDATE = "automation:update",
133
+ AUTOMATION_DELETE = "automation:delete",
134
+ AUTOMATION_EXECUTE = "automation:execute",
135
+ WORKFLOW_VIEW = "workflow:view",
136
+ WORKFLOW_CREATE = "workflow:create",
137
+ WORKFLOW_UPDATE = "workflow:update",
138
+ WORKFLOW_DELETE = "workflow:delete",
139
+ WORKFLOW_EXECUTE = "workflow:execute",
140
+ BILLING_VIEW = "billing:view",
141
+ BILLING_MANAGE = "billing:manage",
142
+ SUBSCRIPTION_VIEW = "subscription:view",
143
+ SUBSCRIPTION_MANAGE = "subscription:manage",
144
+ SYSTEM_CONFIG_VIEW = "system_config:view",
145
+ SYSTEM_CONFIG_UPDATE = "system_config:update"
84
146
  }
@@ -1,137 +1,178 @@
1
1
  "use strict";
2
2
  /**
3
- * PERMISSION ENUMS (@discover-cloud/shared)
4
- * ────────────────────────────────────────────
5
- * Platform-level roles and permissions. These are the single source of
6
- * truth for the entire permission system — the Redis permission cache,
7
- * JWT payloads, and route guards all derive from these definitions.
8
- *
9
- * File layout:
10
- * AccountRole — platform-level account roles (highest → lowest privilege)
11
- * GlobalPermission — platform-wide permissions derived from AccountRole
12
- * OrganizationRole — per-org roles (future)
13
- * OrgPermission — per-org permissions checked by tenant middleware (future)
3
+ * @file permissions.enums.ts
4
+ * @description Static permission keys seeded into RBAC databases.
14
5
  */
15
6
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.OrgPermission = exports.OrganizationRole = exports.GlobalPermission = exports.AccountRole = void 0;
17
- /* ====================================================================
18
- ACCOUNT ROLES
19
- Ordered from highest to lowest privilege.
20
- ==================================================================== */
21
- /**
22
- * SUPERADMIN — Full platform control. Internal engineering / founders only.
23
- * Can impersonate users, access all data, manage platform config.
24
- *
25
- * ADMIN — Platform operations team. Can manage users, view system health,
26
- * handle support escalations. Cannot touch billing infrastructure.
27
- *
28
- * SUPPORT — Customer support agents. Read-only access to user accounts
29
- * and cloud cost data for support purposes. Cannot modify anything.
30
- *
31
- * MODERATOR — Content / alert moderation (future). Included now so the
32
- * role exists in the system before the feature ships.
33
- *
34
- * USER — Standard authenticated user. Accesses only their own data.
35
- * All cloud cost features are gated at the service level.
36
- */
37
- var AccountRole;
38
- (function (AccountRole) {
39
- AccountRole["SUPERADMIN"] = "SUPERADMIN";
40
- AccountRole["ADMIN"] = "ADMIN";
41
- AccountRole["SUPPORT"] = "SUPPORT";
42
- AccountRole["MODERATOR"] = "MODERATOR";
43
- AccountRole["USER"] = "USER";
44
- })(AccountRole || (exports.AccountRole = AccountRole = {}));
45
- /* ====================================================================
46
- GLOBAL PERMISSIONS
47
- Platform-wide permissions derived from AccountRole.
48
- Checked at the gateway / service middleware level via Redis cache.
49
-
50
- Naming convention: VERB_NOUN or VERB_SCOPE_NOUN
51
- ==================================================================== */
52
- var GlobalPermission;
53
- (function (GlobalPermission) {
54
- // ── Account management ────────────────────────────────────────────
55
- // MANAGE_ACCOUNTS — Create, update, suspend, delete any account
56
- // VIEW_ANY_ACCOUNT — Read any account's profile and metadata
57
- // IMPERSONATE_ACCOUNT — Act as another user (SUPERADMIN only)
58
- // SUSPEND_ACCOUNT — Suspend / unsuspend without full delete
59
- // DELETE_ACCOUNT — Hard delete an account and all associated data
60
- GlobalPermission["MANAGE_ACCOUNTS"] = "MANAGE_ACCOUNTS";
61
- GlobalPermission["VIEW_ANY_ACCOUNT"] = "VIEW_ANY_ACCOUNT";
62
- GlobalPermission["IMPERSONATE_ACCOUNT"] = "IMPERSONATE_ACCOUNT";
63
- GlobalPermission["SUSPEND_ACCOUNT"] = "SUSPEND_ACCOUNT";
64
- GlobalPermission["DELETE_ACCOUNT"] = "DELETE_ACCOUNT";
65
- // ── Cloud cost data (platform-level, not per-org) ─────────────────
66
- // VIEW_ANY_COST_DATA — Read any user's cloud cost reports
67
- // EXPORT_ANY_COST_DATA — Export cost data for any user (compliance)
68
- // MANAGE_COST_ALERTS — Create/edit/delete alert rules platform-wide
69
- GlobalPermission["VIEW_ANY_COST_DATA"] = "VIEW_ANY_COST_DATA";
70
- GlobalPermission["EXPORT_ANY_COST_DATA"] = "EXPORT_ANY_COST_DATA";
71
- GlobalPermission["MANAGE_COST_ALERTS"] = "MANAGE_COST_ALERTS";
72
- // ── Platform operations ───────────────────────────────────────────
73
- // VIEW_SYSTEM_LOGS — Access platform audit logs and system events
74
- // VIEW_SYSTEM_HEALTH — Read service health and metrics dashboards
75
- // MANAGE_PLATFORM_CONFIG Modify platform-wide settings (limits, features)
76
- GlobalPermission["VIEW_SYSTEM_LOGS"] = "VIEW_SYSTEM_LOGS";
77
- GlobalPermission["VIEW_SYSTEM_HEALTH"] = "VIEW_SYSTEM_HEALTH";
78
- GlobalPermission["MANAGE_PLATFORM_CONFIG"] = "MANAGE_PLATFORM_CONFIG";
79
- // ── Support tooling ───────────────────────────────────────────────
80
- // SUPPORT_VIEW — Read-only access to user data for support purposes
81
- // SUPPORT_WRITE — Support-sanctioned changes on behalf of users
82
- GlobalPermission["SUPPORT_VIEW"] = "SUPPORT_VIEW";
83
- GlobalPermission["SUPPORT_WRITE"] = "SUPPORT_WRITE";
84
- // ── Future — defined now so they exist in the type system ─────────
85
- GlobalPermission["MANAGE_BILLING"] = "MANAGE_BILLING";
86
- GlobalPermission["MODERATE_CONTENT"] = "MODERATE_CONTENT";
87
- GlobalPermission["MANAGE_INTEGRATIONS"] = "MANAGE_INTEGRATIONS";
88
- })(GlobalPermission || (exports.GlobalPermission = GlobalPermission = {}));
89
- /* ====================================================================
90
- ORGANIZATION ROLES (future work)
91
- Defined now so the type system is ready when org support ships.
92
- ==================================================================== */
93
- /**
94
- * OWNER — Created the org. Full control, including deletion and billing.
95
- * ADMIN — Manages members and org settings. Cannot delete the org.
96
- * EDITOR — Can create/edit cost reports and dashboards within the org.
97
- * VIEWER — Read-only access to org cost data.
98
- * BILLING — Dedicated billing contact. Access to invoices and payment only.
99
- */
100
- var OrganizationRole;
101
- (function (OrganizationRole) {
102
- OrganizationRole["OWNER"] = "OWNER";
103
- OrganizationRole["ADMIN"] = "ADMIN";
104
- OrganizationRole["EDITOR"] = "EDITOR";
105
- OrganizationRole["VIEWER"] = "VIEWER";
106
- OrganizationRole["BILLING"] = "BILLING";
107
- })(OrganizationRole || (exports.OrganizationRole = OrganizationRole = {}));
108
- /* ====================================================================
109
- ORG PERMISSIONS (future work)
110
- Granular org-scoped permissions checked by tenant middleware in each
111
- service via DB lookup — NOT embedded in the JWT (org membership changes
112
- too frequently to embed reliably).
113
-
114
- Naming: VERB_RESOURCE
115
- ==================================================================== */
116
- var OrgPermission;
117
- (function (OrgPermission) {
118
- // Org management
119
- OrgPermission["DELETE_ORG"] = "DELETE_ORG";
120
- OrgPermission["MANAGE_ORG_SETTINGS"] = "MANAGE_ORG_SETTINGS";
121
- // Member management
122
- OrgPermission["INVITE_MEMBERS"] = "INVITE_MEMBERS";
123
- OrgPermission["REMOVE_MEMBERS"] = "REMOVE_MEMBERS";
124
- OrgPermission["CHANGE_MEMBER_ROLES"] = "CHANGE_MEMBER_ROLES";
125
- OrgPermission["VIEW_MEMBERS"] = "VIEW_MEMBERS";
126
- // Cost data within org
127
- OrgPermission["VIEW_COST_DATA"] = "VIEW_COST_DATA";
128
- OrgPermission["EXPORT_COST_DATA"] = "EXPORT_COST_DATA";
129
- OrgPermission["MANAGE_COST_REPORTS"] = "MANAGE_COST_REPORTS";
130
- OrgPermission["MANAGE_ALERTS"] = "MANAGE_ALERTS";
131
- // Cloud account integrations within org
132
- OrgPermission["MANAGE_CLOUD_ACCOUNTS"] = "MANAGE_CLOUD_ACCOUNTS";
133
- OrgPermission["VIEW_CLOUD_ACCOUNTS"] = "VIEW_CLOUD_ACCOUNTS";
134
- // Billing within org
135
- OrgPermission["VIEW_BILLING"] = "VIEW_BILLING";
136
- OrgPermission["MANAGE_BILLING"] = "MANAGE_BILLING";
137
- })(OrgPermission || (exports.OrgPermission = OrgPermission = {}));
7
+ exports.Permission = exports.PlatformPermission = void 0;
8
+ /* ---------------------------------------------------------------------------
9
+ Platform Permissions
10
+ --------------------------------------------------------------------------- */
11
+ var PlatformPermission;
12
+ (function (PlatformPermission) {
13
+ // ─── TENANT MANAGEMENT ───────────────────────────────────────────────────
14
+ PlatformPermission["TENANT_VIEW"] = "tenant:view";
15
+ PlatformPermission["TENANT_CREATE"] = "tenant:create";
16
+ PlatformPermission["TENANT_UPDATE"] = "tenant:update";
17
+ PlatformPermission["TENANT_SUSPEND"] = "tenant:suspend";
18
+ PlatformPermission["TENANT_DELETE"] = "tenant:delete";
19
+ // ─── USER MANAGEMENT ─────────────────────────────────────────────────────
20
+ PlatformPermission["GLOBAL_USER_VIEW"] = "global_user:view";
21
+ PlatformPermission["GLOBAL_USER_UPDATE"] = "global_user:update";
22
+ PlatformPermission["GLOBAL_USER_SUSPEND"] = "global_user:suspend";
23
+ PlatformPermission["GLOBAL_USER_DELETE"] = "global_user:delete";
24
+ PlatformPermission["GLOBAL_USER_SESSION_REVOKE"] = "global_user:session:revoke";
25
+ // ─── ACCESS MANAGEMENT ───────────────────────────────────────────────────
26
+ PlatformPermission["PLATFORM_ROLE_VIEW"] = "platform_role:view";
27
+ PlatformPermission["PLATFORM_ROLE_CREATE"] = "platform_role:create";
28
+ PlatformPermission["PLATFORM_ROLE_UPDATE"] = "platform_role:update";
29
+ PlatformPermission["PLATFORM_ROLE_DELETE"] = "platform_role:delete";
30
+ PlatformPermission["PLATFORM_ROLE_ASSIGN"] = "platform_role:assign";
31
+ PlatformPermission["PLATFORM_PERMISSION_VIEW"] = "platform_permission:view";
32
+ PlatformPermission["PLATFORM_PERMISSION_CREATE"] = "platform_permission:create";
33
+ PlatformPermission["PLATFORM_PERMISSION_UPDATE"] = "platform_permission:update";
34
+ PlatformPermission["PLATFORM_PERMISSION_DELETE"] = "platform_permission:delete";
35
+ // ─── BILLING & SUBSCRIPTION ──────────────────────────────────────────────
36
+ PlatformPermission["GLOBAL_BILLING_VIEW"] = "global_billing:view";
37
+ PlatformPermission["GLOBAL_BILLING_MANAGE"] = "global_billing:manage";
38
+ PlatformPermission["SUBSCRIPTION_PLAN_VIEW"] = "subscription_plan:view";
39
+ PlatformPermission["SUBSCRIPTION_PLAN_MANAGE"] = "subscription_plan:manage";
40
+ // ─── SYSTEM CONFIGURATION ────────────────────────────────────────────────
41
+ PlatformPermission["SYSTEM_CONFIG_VIEW"] = "system_config:view";
42
+ PlatformPermission["SYSTEM_CONFIG_UPDATE"] = "system_config:update";
43
+ PlatformPermission["FEATURE_FLAG_VIEW"] = "feature_flag:view";
44
+ PlatformPermission["FEATURE_FLAG_MANAGE"] = "feature_flag:manage";
45
+ PlatformPermission["SERVICE_CLIENT_VIEW"] = "service_client:view";
46
+ PlatformPermission["SERVICE_CLIENT_MANAGE"] = "service_client:manage";
47
+ // ─── SECURITY & COMPLIANCE ───────────────────────────────────────────────
48
+ PlatformPermission["GLOBAL_AUDIT_VIEW"] = "global_audit:view";
49
+ PlatformPermission["GLOBAL_AUDIT_EXPORT"] = "global_audit:export";
50
+ PlatformPermission["SECURITY_POLICY_VIEW"] = "security_policy:view";
51
+ PlatformPermission["SECURITY_POLICY_MANAGE"] = "security_policy:manage";
52
+ // ─── SUPPORT & TROUBLESHOOTING ───────────────────────────────────────────
53
+ PlatformPermission["SUPPORT_TICKET_VIEW"] = "support_ticket:view";
54
+ PlatformPermission["SUPPORT_TICKET_MANAGE"] = "support_ticket:manage";
55
+ PlatformPermission["USER_IMPERSONATE"] = "user:impersonate";
56
+ PlatformPermission["SYSTEM_TELEMETRY_VIEW"] = "system_telemetry:view";
57
+ // ─── ANALYTICS & REPORTING ───────────────────────────────────────────────
58
+ PlatformPermission["GLOBAL_ANALYTICS_VIEW"] = "global_analytics:view";
59
+ PlatformPermission["GLOBAL_REPORT_GENERATE"] = "global_report:generate";
60
+ })(PlatformPermission || (exports.PlatformPermission = PlatformPermission = {}));
61
+ /* ---------------------------------------------------------------------------
62
+ Organization / Workspace Permissions
63
+ --------------------------------------------------------------------------- */
64
+ var Permission;
65
+ (function (Permission) {
66
+ // ─── CORE TENANT MANAGEMENT ───────────────────────────────────────────────
67
+ Permission["ORG_VIEW"] = "org:view";
68
+ Permission["ORG_UPDATE"] = "org:update";
69
+ Permission["ORG_DELETE"] = "org:delete";
70
+ Permission["ORG_TRANSFER"] = "org:transfer";
71
+ Permission["WORKSPACE_VIEW"] = "workspace:view";
72
+ Permission["WORKSPACE_CREATE"] = "workspace:create";
73
+ Permission["WORKSPACE_UPDATE"] = "workspace:update";
74
+ Permission["WORKSPACE_DELETE"] = "workspace:delete";
75
+ Permission["WORKSPACE_TRANSFER"] = "workspace:transfer";
76
+ // ─── ORG MEMBERS ──────────────────────────────────────────────────────────
77
+ Permission["ORG_MEMBER_VIEW"] = "org:member:view";
78
+ Permission["ORG_MEMBER_INVITE"] = "org:member:invite";
79
+ Permission["ORG_MEMBER_REMOVE"] = "org:member:remove";
80
+ Permission["ORG_MEMBER_ROLE_UPDATE"] = "org:member:role:update";
81
+ // ─── ORG INVITES ──────────────────────────────────────────────────────────
82
+ Permission["ORG_INVITE_VIEW"] = "org:invite:view";
83
+ Permission["ORG_INVITE_CREATE"] = "org:invite:create";
84
+ Permission["ORG_INVITE_REVOKE"] = "org:invite:revoke";
85
+ // ─── ORG ROLES & PERMISSIONS ──────────────────────────────────────────────
86
+ Permission["ORG_ROLE_VIEW"] = "org:role:view";
87
+ Permission["ORG_ROLE_CREATE"] = "org:role:create";
88
+ Permission["ORG_ROLE_UPDATE"] = "org:role:update";
89
+ Permission["ORG_ROLE_DELETE"] = "org:role:delete";
90
+ Permission["ORG_ROLE_ASSIGN"] = "org:role:assign";
91
+ Permission["ORG_ROLE_PERMISSION_SYNC"] = "org:role:permission:sync";
92
+ // ─── WORKSPACE MEMBERS ────────────────────────────────────────────────────
93
+ Permission["WORKSPACE_MEMBER_VIEW"] = "workspace:member:view";
94
+ Permission["WORKSPACE_MEMBER_ADD"] = "workspace:member:add";
95
+ Permission["WORKSPACE_MEMBER_REMOVE"] = "workspace:member:remove";
96
+ Permission["WORKSPACE_MEMBER_ROLE_UPDATE"] = "workspace:member:role:update";
97
+ // ─── WORKSPACE INVITES ────────────────────────────────────────────────────
98
+ Permission["WORKSPACE_INVITE_VIEW"] = "workspace:invite:view";
99
+ Permission["WORKSPACE_INVITE_CREATE"] = "workspace:invite:create";
100
+ Permission["WORKSPACE_INVITE_REVOKE"] = "workspace:invite:revoke";
101
+ // ─── CLOUD INFRASTRUCTURE ─────────────────────────────────────────────────
102
+ Permission["CLOUD_ACCOUNT_VIEW"] = "cloud_account:view";
103
+ Permission["CLOUD_ACCOUNT_CONNECT"] = "cloud_account:connect";
104
+ Permission["CLOUD_ACCOUNT_UPDATE"] = "cloud_account:update";
105
+ Permission["CLOUD_ACCOUNT_SYNC"] = "cloud_account:sync";
106
+ Permission["CLOUD_ACCOUNT_REMOVE"] = "cloud_account:remove";
107
+ Permission["CLOUD_RESOURCE_VIEW"] = "cloud_resource:view";
108
+ Permission["CLOUD_RESOURCE_TAG"] = "cloud_resource:tag";
109
+ Permission["CLOUD_RESOURCE_ACTION"] = "cloud_resource:action";
110
+ Permission["INVENTORY_VIEW"] = "inventory:view";
111
+ Permission["INVENTORY_EXPORT"] = "inventory:export";
112
+ // ─── FINOPS & CLOUD FINANCIAL MANAGEMENT ──────────────────────────────────
113
+ Permission["COST_VIEW"] = "cost:view";
114
+ Permission["COST_BREAKDOWN_VIEW"] = "cost:breakdown:view";
115
+ Permission["COST_EXPORT"] = "cost:export";
116
+ Permission["BUDGET_VIEW"] = "budget:view";
117
+ Permission["BUDGET_CREATE"] = "budget:create";
118
+ Permission["BUDGET_UPDATE"] = "budget:update";
119
+ Permission["BUDGET_DELETE"] = "budget:delete";
120
+ Permission["FORECAST_VIEW"] = "forecast:view";
121
+ Permission["FORECAST_GENERATE"] = "forecast:generate";
122
+ Permission["OPTIMIZATION_VIEW"] = "optimization:view";
123
+ Permission["OPTIMIZATION_APPLY"] = "optimization:apply";
124
+ Permission["RECOMMENDATION_VIEW"] = "recommendation:view";
125
+ Permission["RECOMMENDATION_APPLY"] = "recommendation:apply";
126
+ Permission["RECOMMENDATION_REJECT"] = "recommendation:reject";
127
+ // ─── OBSERVABILITY & ALERTING ─────────────────────────────────────────────
128
+ Permission["ALERT_RULE_VIEW"] = "alert_rule:view";
129
+ Permission["ALERT_RULE_CREATE"] = "alert_rule:create";
130
+ Permission["ALERT_RULE_UPDATE"] = "alert_rule:update";
131
+ Permission["ALERT_RULE_DELETE"] = "alert_rule:delete";
132
+ Permission["ALERT_RULE_CHANNEL_SYNC"] = "alert_rule:channel:sync";
133
+ Permission["ANOMALY_VIEW"] = "anomaly:view";
134
+ Permission["ANOMALY_INVESTIGATE"] = "anomaly:investigate";
135
+ Permission["ANOMALY_DISMISS"] = "anomaly:dismiss";
136
+ Permission["NOTIFICATION_VIEW"] = "notification:view";
137
+ Permission["NOTIFICATION_MANAGE"] = "notification:manage";
138
+ // ─── REPORTING & VISUALIZATION ────────────────────────────────────────────
139
+ Permission["DASHBOARD_VIEW"] = "dashboard:view";
140
+ Permission["DASHBOARD_CREATE"] = "dashboard:create";
141
+ Permission["DASHBOARD_UPDATE"] = "dashboard:update";
142
+ Permission["DASHBOARD_DELETE"] = "dashboard:delete";
143
+ Permission["DASHBOARD_SHARE"] = "dashboard:share";
144
+ Permission["REPORT_VIEW"] = "report:view";
145
+ Permission["REPORT_CREATE"] = "report:create";
146
+ Permission["REPORT_SCHEDULE"] = "report:schedule";
147
+ Permission["REPORT_EXPORT"] = "report:export";
148
+ Permission["REPORT_DELETE"] = "report:delete";
149
+ Permission["ANALYTICS_VIEW"] = "analytics:view";
150
+ Permission["ANALYTICS_QUERY"] = "analytics:query";
151
+ Permission["ANALYTICS_EXPORT"] = "analytics:export";
152
+ // ─── SECURITY & COMPLIANCE ────────────────────────────────────────────────
153
+ Permission["SECURITY_POSTURE_VIEW"] = "security:posture:view";
154
+ Permission["SECURITY_ISSUE_VIEW"] = "security:issue:view";
155
+ Permission["SECURITY_ISSUE_MANAGE"] = "security:issue:manage";
156
+ Permission["COMPLIANCE_VIEW"] = "compliance:view";
157
+ Permission["COMPLIANCE_EXPORT"] = "compliance:export";
158
+ Permission["AUDIT_LOG_VIEW"] = "audit_log:view";
159
+ Permission["AUDIT_LOG_EXPORT"] = "audit_log:export";
160
+ // ─── OPS & AUTOMATION ─────────────────────────────────────────────────────
161
+ Permission["AUTOMATION_VIEW"] = "automation:view";
162
+ Permission["AUTOMATION_CREATE"] = "automation:create";
163
+ Permission["AUTOMATION_UPDATE"] = "automation:update";
164
+ Permission["AUTOMATION_DELETE"] = "automation:delete";
165
+ Permission["AUTOMATION_EXECUTE"] = "automation:execute";
166
+ Permission["WORKFLOW_VIEW"] = "workflow:view";
167
+ Permission["WORKFLOW_CREATE"] = "workflow:create";
168
+ Permission["WORKFLOW_UPDATE"] = "workflow:update";
169
+ Permission["WORKFLOW_DELETE"] = "workflow:delete";
170
+ Permission["WORKFLOW_EXECUTE"] = "workflow:execute";
171
+ // ─── BILLING & SUBSCRIPTION ───────────────────────────────────────────────
172
+ Permission["BILLING_VIEW"] = "billing:view";
173
+ Permission["BILLING_MANAGE"] = "billing:manage";
174
+ Permission["SUBSCRIPTION_VIEW"] = "subscription:view";
175
+ Permission["SUBSCRIPTION_MANAGE"] = "subscription:manage";
176
+ Permission["SYSTEM_CONFIG_VIEW"] = "system_config:view";
177
+ Permission["SYSTEM_CONFIG_UPDATE"] = "system_config:update";
178
+ })(Permission || (exports.Permission = Permission = {}));
@@ -1,26 +1,21 @@
1
1
  /**
2
- * APP ERROR (@discover-cloud/shared)
3
- * ─────────────────────────────────────
4
- * Base class for all known operational errors across every service.
5
- * Subclasses (see http-errors.ts) map to specific HTTP status codes and
6
- * error codes that the global error handler serialises into responses.
7
- *
8
- * Design decisions:
9
- * - GlobalErrorHandler catches `instanceof AppError` — no duck-typing,
10
- * no accidental matches on arbitrary thrown objects.
11
- * - details?: unknown (not any) — TypeScript's type checking is preserved
12
- * on the most variable field. Callers that need a specific details shape
13
- * should cast after an instanceof guard.
14
- * - Object.freeze(this) — prevents accidental post-construction mutation of
15
- * a thrown error. Freeze is shallow: if details is an object, its contents
16
- * remain mutable. This is acceptable — details is for logging/response
17
- * context, not program logic.
18
- * - captureStackTrace — strips the AppError constructor frame from the stack
19
- * so the trace points to the throw site, not the base class constructor.
2
+ * @file app-error.ts
3
+ * @description Base class for operational errors throughout the application ecosystem.
4
+ * Structured to support clean serialization in global error boundaries.
5
+ */
6
+ /**
7
+ * Base operational error class. Extends standard Error with application-specific
8
+ * machine codes and HTTP status mapping.
20
9
  */
21
10
  export declare class AppError extends Error {
22
11
  readonly code: string;
23
12
  readonly statusCode: number;
24
13
  readonly details?: unknown;
14
+ /**
15
+ * @param {string} code - Machine-readable stable error code identifier.
16
+ * @param {number} statusCode - Target HTTP status code mapping (e.g. 404, 409).
17
+ * @param {string} message - Human-readable error message.
18
+ * @param {unknown} [details] - Optional structured context context data.
19
+ */
25
20
  constructor(code: string, statusCode: number, message: string, details?: unknown);
26
21
  }