@stackonward/cli 0.0.1 → 1.0.1

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 (638) hide show
  1. package/dist/index.js +4588 -205
  2. package/dist/index.js.map +1 -1
  3. package/dist/resources/apple/.claude/docs/architecture-template.md +54 -0
  4. package/dist/resources/apple/.claude/docs/architecture.md +52 -0
  5. package/dist/resources/apple/.claude/docs/index.md +13 -0
  6. package/dist/resources/apple/.claude/docs/security-lifecycle.md +57 -0
  7. package/dist/resources/apple/.claude/docs/stack.md +93 -0
  8. package/dist/resources/apple/.claude/docs/verification.md +63 -0
  9. package/dist/resources/apple/AGENTS.md +397 -0
  10. package/dist/resources/apple/CLAUDE.md +397 -0
  11. package/dist/resources/apple/Gemfile +2 -0
  12. package/dist/resources/apple/Gemfile.lock +365 -0
  13. package/dist/resources/apple/_gitignore +14 -0
  14. package/dist/resources/apple/fastlane/Fastfile +123 -0
  15. package/dist/resources/components/nuxt/site-source/app/app.vue +42 -0
  16. package/dist/resources/components/nuxt/site-source/app/assets/css/site-shell.css +1035 -0
  17. package/dist/resources/components/nuxt/site-source/app/assets/icons/brand/.gitkeep +0 -0
  18. package/dist/resources/components/nuxt/site-source/app/assets/icons/common/.gitkeep +0 -0
  19. package/dist/resources/components/nuxt/site-source/app/components/site/ApplicationHeader.vue +35 -0
  20. package/dist/resources/components/nuxt/site-source/app/components/site/ApplicationShell.vue +56 -0
  21. package/dist/resources/components/nuxt/site-source/app/components/site/ApplicationSidebar.vue +40 -0
  22. package/dist/resources/components/nuxt/site-source/app/components/site/BackToTop.vue +42 -0
  23. package/dist/resources/components/nuxt/site-source/app/components/site/ContentArticlePage.vue +40 -0
  24. package/dist/resources/components/nuxt/site-source/app/components/site/ContentListPage.vue +30 -0
  25. package/dist/resources/components/nuxt/site-source/app/components/site/CookieConsent.vue +18 -0
  26. package/dist/resources/components/nuxt/site-source/app/components/site/MarketingFooter.vue +52 -0
  27. package/dist/resources/components/nuxt/site-source/app/components/site/MarketingHeader.vue +106 -0
  28. package/dist/resources/components/nuxt/site-source/app/components/site/MarketingShell.vue +35 -0
  29. package/dist/resources/components/nuxt/site-source/app/components/site/SiteBrand.vue +10 -0
  30. package/dist/resources/components/nuxt/site-source/app/components/site/StaticPage.vue +21 -0
  31. package/dist/resources/components/nuxt/site-source/app/components/site/ToastViewport.vue +25 -0
  32. package/dist/resources/components/nuxt/site-source/app/components/ui/BaseButton.vue +86 -0
  33. package/dist/resources/components/nuxt/site-source/app/components/ui/BaseGradientBorder.vue +59 -0
  34. package/dist/resources/components/nuxt/site-source/app/components/ui/BaseModal.vue +131 -0
  35. package/dist/resources/components/nuxt/site-source/app/components/ui/BasePopover.vue +150 -0
  36. package/dist/resources/components/nuxt/site-source/app/components/ui/BaseText.vue +138 -0
  37. package/dist/resources/components/nuxt/site-source/app/components/ui/CheckoutStatus.vue +112 -0
  38. package/dist/resources/components/nuxt/site-source/app/components/ui/CheckoutSummary.vue +172 -0
  39. package/dist/resources/components/nuxt/site-source/app/components/ui/GoogleSignInButton.vue +113 -0
  40. package/dist/resources/components/nuxt/site-source/app/components/ui/InfiniteScroll.vue +123 -0
  41. package/dist/resources/components/nuxt/site-source/app/components/ui/YoutubeEmbed.vue +126 -0
  42. package/dist/resources/components/nuxt/site-source/app/composables/useAnalytics.ts +24 -0
  43. package/dist/resources/components/nuxt/site-source/app/composables/useCheckout.ts +121 -0
  44. package/dist/resources/components/nuxt/site-source/app/composables/useConsent.ts +31 -0
  45. package/dist/resources/components/nuxt/site-source/app/composables/useGoogleIdentity.ts +163 -0
  46. package/dist/resources/components/nuxt/site-source/app/composables/useNavigation.ts +11 -0
  47. package/dist/resources/components/nuxt/site-source/app/composables/useSeo.ts +33 -0
  48. package/dist/resources/components/nuxt/site-source/app/composables/useSiteShell.ts +58 -0
  49. package/dist/resources/components/nuxt/site-source/app/composables/useToasts.ts +48 -0
  50. package/dist/resources/components/nuxt/site-source/app/layouts/app.vue +5 -0
  51. package/dist/resources/components/nuxt/site-source/app/layouts/default.vue +5 -0
  52. package/dist/resources/components/nuxt/site-source/app/plugins/analytics.client.ts +121 -0
  53. package/dist/resources/components/nuxt/site-source/app/plugins/google-identity.client.ts +24 -0
  54. package/dist/resources/components/nuxt/site-source/app/theme/accordion.ts +9 -0
  55. package/dist/resources/components/nuxt/site-source/app/theme/breadcrumb.ts +8 -0
  56. package/dist/resources/components/nuxt/site-source/app/theme/button.ts +92 -0
  57. package/dist/resources/components/nuxt/site-source/app/theme/carousel.ts +11 -0
  58. package/dist/resources/components/nuxt/site-source/app/theme/checkbox.ts +12 -0
  59. package/dist/resources/components/nuxt/site-source/app/theme/index.ts +30 -0
  60. package/dist/resources/components/nuxt/site-source/app/theme/input.ts +47 -0
  61. package/dist/resources/components/nuxt/site-source/app/theme/modal.ts +9 -0
  62. package/dist/resources/components/nuxt/site-source/app/theme/pagination.ts +6 -0
  63. package/dist/resources/components/nuxt/site-source/app/theme/select.ts +23 -0
  64. package/dist/resources/components/nuxt/site-source/app/theme/stepper.ts +10 -0
  65. package/dist/resources/components/nuxt/site-source/app/theme/toast.ts +8 -0
  66. package/dist/resources/components/nuxt/site-source/app/theme/tooltip.ts +6 -0
  67. package/dist/resources/components/nuxt/site-source/app/types/site-shell.ts +85 -0
  68. package/dist/resources/components/react/ui/Button.tsx +73 -0
  69. package/dist/resources/components/react/ui/Input.tsx +44 -0
  70. package/dist/resources/components/registry.json +355 -0
  71. package/dist/resources/components/vue/feedback/Toast.vue +120 -0
  72. package/dist/resources/components/vue/feedback/useToast.ts +70 -0
  73. package/dist/resources/components/vue/media/FileUpload.vue +229 -0
  74. package/dist/resources/components/vue/media/VideoPlayer.vue +157 -0
  75. package/dist/resources/components/vue/ui/AppImage.vue +147 -0
  76. package/dist/resources/components/vue/ui/BottomSheet.vue +217 -0
  77. package/dist/resources/components/vue/ui/Button.vue +154 -0
  78. package/dist/resources/components/vue/ui/Card.vue +111 -0
  79. package/dist/resources/components/vue/ui/Input.vue +113 -0
  80. package/dist/resources/components/vue/ui/Modal.vue +193 -0
  81. package/dist/resources/components/vue/ui/ScrollArea.vue +163 -0
  82. package/dist/resources/components/vue/ui/Tooltip.vue +115 -0
  83. package/dist/resources/registry.json +158 -0
  84. package/dist/resources/snippets/node/cache.ts +116 -0
  85. package/dist/resources/snippets/node/date.ts +126 -0
  86. package/dist/resources/snippets/node/logger.ts +104 -0
  87. package/dist/resources/snippets/node/validation.ts +132 -0
  88. package/dist/resources/snippets/react/useDebounce.ts +90 -0
  89. package/dist/resources/snippets/registry.json +65 -0
  90. package/dist/resources/snippets/vue/useAsync.ts +96 -0
  91. package/dist/resources/snippets/vue/usePagination.ts +102 -0
  92. package/dist/resources/templates/base/.claude/docs/architecture-template.md +459 -0
  93. package/dist/resources/templates/base/.claude/docs/architecture.md +137 -0
  94. package/dist/resources/templates/base/.claude/docs/index.md +42 -0
  95. package/dist/resources/templates/base/.claude/docs/security-lifecycle.md +129 -0
  96. package/dist/resources/templates/base/.claude/docs/verification.md +121 -0
  97. package/dist/resources/templates/base/AGENTS.md +415 -0
  98. package/dist/resources/templates/base/CLAUDE.md +415 -0
  99. package/dist/resources/templates/go-backend/.claude/docs/api-design.md +486 -0
  100. package/dist/resources/templates/go-backend/.claude/docs/architecture-template.md +449 -0
  101. package/dist/resources/templates/go-backend/.claude/docs/check-list.md +155 -0
  102. package/dist/resources/templates/go-backend/.claude/docs/database.md +369 -0
  103. package/dist/resources/templates/go-backend/.claude/docs/e2e-standards.md +161 -0
  104. package/dist/resources/templates/go-backend/.claude/docs/error-handling.md +558 -0
  105. package/dist/resources/templates/go-backend/.claude/docs/event-runtime-boundary.md +124 -0
  106. package/dist/resources/templates/go-backend/.claude/docs/identifier-contract.md +195 -0
  107. package/dist/resources/templates/go-backend/.claude/docs/index.md +22 -0
  108. package/dist/resources/templates/go-backend/.claude/docs/logging.md +314 -0
  109. package/dist/resources/templates/go-backend/.claude/docs/mediagen-provider-onboarding-sop.md +917 -0
  110. package/dist/resources/templates/go-backend/.claude/docs/mediagen-provider-quick-reference.md +195 -0
  111. package/dist/resources/templates/go-backend/.claude/docs/module-standards.md +309 -0
  112. package/dist/resources/templates/go-backend/.claude/docs/openapi-contract.md +141 -0
  113. package/dist/resources/templates/go-backend/.claude/docs/payment-gateway-onboarding.md +283 -0
  114. package/dist/resources/templates/go-backend/.claude/docs/platform-boundary.md +191 -0
  115. package/dist/resources/templates/go-backend/.claude/docs/quality-gates.md +112 -0
  116. package/dist/resources/templates/go-backend/.dockerignore +6 -0
  117. package/dist/resources/templates/go-backend/.env.example +13 -0
  118. package/dist/resources/templates/go-backend/.gitattributes +2 -0
  119. package/dist/resources/templates/go-backend/AGENTS.md +1139 -0
  120. package/dist/resources/templates/go-backend/CLAUDE.md +1139 -0
  121. package/dist/resources/templates/go-backend/Dockerfile +14 -0
  122. package/dist/resources/templates/go-backend/Makefile +71 -0
  123. package/dist/resources/templates/go-backend/README.md +66 -0
  124. package/dist/resources/templates/go-backend/_gitignore +10 -0
  125. package/dist/resources/templates/go-backend/api/openapi/README.md +29 -0
  126. package/dist/resources/templates/go-backend/api/openapi/dist/artifact-manifest.json +19 -0
  127. package/dist/resources/templates/go-backend/api/openapi/dist/conformance-matrix.json +276 -0
  128. package/dist/resources/templates/go-backend/api/openapi/document.go +30 -0
  129. package/dist/resources/templates/go-backend/api/openapi/package.json +28 -0
  130. package/dist/resources/templates/go-backend/api/openapi/pnpm-lock.yaml +3052 -0
  131. package/dist/resources/templates/go-backend/api/openapi/redocly-source.yaml +18 -0
  132. package/dist/resources/templates/go-backend/api/openapi/redocly.yaml +8 -0
  133. package/dist/resources/templates/go-backend/api/openapi/sdk-generators.json +16 -0
  134. package/dist/resources/templates/go-backend/api/openapi/service-registry.json +39 -0
  135. package/dist/resources/templates/go-backend/api/openapi/services/product-api/conformance/runtime.arazzo.yaml +65 -0
  136. package/dist/resources/templates/go-backend/api/openapi/services/product-api/dist/internal.openapi.json +327 -0
  137. package/dist/resources/templates/go-backend/api/openapi/services/product-api/dist/runtime-contract.json +56 -0
  138. package/dist/resources/templates/go-backend/api/openapi/services/product-api/openapi.yaml +222 -0
  139. package/dist/resources/templates/go-backend/api/openapi/services/worker/conformance/runtime.arazzo.yaml +65 -0
  140. package/dist/resources/templates/go-backend/api/openapi/services/worker/dist/internal.openapi.json +327 -0
  141. package/dist/resources/templates/go-backend/api/openapi/services/worker/dist/runtime-contract.json +56 -0
  142. package/dist/resources/templates/go-backend/api/openapi/services/worker/openapi.yaml +222 -0
  143. package/dist/resources/templates/go-backend/api/openapi/tooling/breaking.mjs +416 -0
  144. package/dist/resources/templates/go-backend/api/openapi/tooling/build.mjs +103 -0
  145. package/dist/resources/templates/go-backend/api/openapi/tooling/conformance_coverage.mjs +111 -0
  146. package/dist/resources/templates/go-backend/api/openapi/tooling/contract_compiler.mjs +62 -0
  147. package/dist/resources/templates/go-backend/api/openapi/tooling/contract_policy.mjs +208 -0
  148. package/dist/resources/templates/go-backend/api/openapi/tooling/delegated_contract.mjs +302 -0
  149. package/dist/resources/templates/go-backend/api/openapi/tooling/deterministic_archive.mjs +69 -0
  150. package/dist/resources/templates/go-backend/api/openapi/tooling/documentation_example_privacy.mjs +93 -0
  151. package/dist/resources/templates/go-backend/api/openapi/tooling/documentation_projection.mjs +498 -0
  152. package/dist/resources/templates/go-backend/api/openapi/tooling/documentation_quality.mjs +346 -0
  153. package/dist/resources/templates/go-backend/api/openapi/tooling/git_artifact_history.mjs +188 -0
  154. package/dist/resources/templates/go-backend/api/openapi/tooling/manifest.mjs +170 -0
  155. package/dist/resources/templates/go-backend/api/openapi/tooling/overlay.mjs +98 -0
  156. package/dist/resources/templates/go-backend/api/openapi/tooling/project.mjs +549 -0
  157. package/dist/resources/templates/go-backend/api/openapi/tooling/route_contract.mjs +156 -0
  158. package/dist/resources/templates/go-backend/api/openapi/tooling/runtime_conformance.mjs +193 -0
  159. package/dist/resources/templates/go-backend/api/openapi/tooling/scalar_asset_localization.mjs +164 -0
  160. package/dist/resources/templates/go-backend/api/openapi/tooling/sdk_generator.mjs +229 -0
  161. package/dist/resources/templates/go-backend/api/openapi/tooling/semantic_version.mjs +64 -0
  162. package/dist/resources/templates/go-backend/api/openapi/tooling/service_contract_inputs.mjs +16 -0
  163. package/dist/resources/templates/go-backend/api/openapi/tooling/test/breaking.test.mjs +365 -0
  164. package/dist/resources/templates/go-backend/api/openapi/tooling/test/build.test.mjs +42 -0
  165. package/dist/resources/templates/go-backend/api/openapi/tooling/test/conformance_coverage.test.mjs +88 -0
  166. package/dist/resources/templates/go-backend/api/openapi/tooling/test/contract_policy.test.mjs +257 -0
  167. package/dist/resources/templates/go-backend/api/openapi/tooling/test/delegated_contract.test.mjs +205 -0
  168. package/dist/resources/templates/go-backend/api/openapi/tooling/test/documentation_example_privacy.test.mjs +51 -0
  169. package/dist/resources/templates/go-backend/api/openapi/tooling/test/documentation_projection.test.mjs +368 -0
  170. package/dist/resources/templates/go-backend/api/openapi/tooling/test/documentation_quality.test.mjs +151 -0
  171. package/dist/resources/templates/go-backend/api/openapi/tooling/test/git_artifact_history.test.mjs +60 -0
  172. package/dist/resources/templates/go-backend/api/openapi/tooling/test/head_policy.test.mjs +8 -0
  173. package/dist/resources/templates/go-backend/api/openapi/tooling/test/overlay.test.mjs +44 -0
  174. package/dist/resources/templates/go-backend/api/openapi/tooling/test/projection.test.mjs +270 -0
  175. package/dist/resources/templates/go-backend/api/openapi/tooling/test/redocly_documentation_rules.test.mjs +146 -0
  176. package/dist/resources/templates/go-backend/api/openapi/tooling/test/release_manifest.test.mjs +76 -0
  177. package/dist/resources/templates/go-backend/api/openapi/tooling/test/route_contract.test.mjs +119 -0
  178. package/dist/resources/templates/go-backend/api/openapi/tooling/test/runtime_conformance.test.mjs +75 -0
  179. package/dist/resources/templates/go-backend/api/openapi/tooling/test/scalar_asset_localization.test.mjs +50 -0
  180. package/dist/resources/templates/go-backend/api/openapi/tooling/test/sdk_generator.test.mjs +31 -0
  181. package/dist/resources/templates/go-backend/api/openapi/tooling/test/semantic_version.test.mjs +60 -0
  182. package/dist/resources/templates/go-backend/api/openapi/tooling/test/service_contract_inputs.test.mjs +27 -0
  183. package/dist/resources/templates/go-backend/cmd/internal/runtime/resources.go +125 -0
  184. package/dist/resources/templates/go-backend/cmd/internal/runtime/runtime.go +102 -0
  185. package/dist/resources/templates/go-backend/cmd/internal/runtime/runtime_test.go +70 -0
  186. package/dist/resources/templates/go-backend/cmd/product-api/lifecycle_test.go +58 -0
  187. package/dist/resources/templates/go-backend/cmd/product-api/main.go +32 -0
  188. package/dist/resources/templates/go-backend/cmd/product-api/wire.go +13 -0
  189. package/dist/resources/templates/go-backend/cmd/product-api/wire_gen.go +94 -0
  190. package/dist/resources/templates/go-backend/cmd/worker/main.go +47 -0
  191. package/dist/resources/templates/go-backend/cmd/worker/wire.go +14 -0
  192. package/dist/resources/templates/go-backend/cmd/worker/wire_gen.go +111 -0
  193. package/dist/resources/templates/go-backend/configs/config.yaml +37 -0
  194. package/dist/resources/templates/go-backend/deployments/compose.yaml +71 -0
  195. package/dist/resources/templates/go-backend/docs/openapi-provenance.json +489 -0
  196. package/dist/resources/templates/go-backend/docs/runtime-provenance.json +175 -0
  197. package/dist/resources/templates/go-backend/docs/source-provenance.json +3568 -0
  198. package/dist/resources/templates/go-backend/docs/standards-provenance.json +1624 -0
  199. package/dist/resources/templates/go-backend/go.mod +256 -0
  200. package/dist/resources/templates/go-backend/go.sum +805 -0
  201. package/dist/resources/templates/go-backend/internal/common/canonicaljson/canonical.go +370 -0
  202. package/dist/resources/templates/go-backend/internal/common/canonicaljson/canonical_test.go +223 -0
  203. package/dist/resources/templates/go-backend/internal/common/checkoutbff/contracts.go +125 -0
  204. package/dist/resources/templates/go-backend/internal/common/checkoutbff/platform_client.go +212 -0
  205. package/dist/resources/templates/go-backend/internal/common/checkoutbff/platform_client_test.go +319 -0
  206. package/dist/resources/templates/go-backend/internal/common/contentaccess/contentaccess.go +50 -0
  207. package/dist/resources/templates/go-backend/internal/common/contracts/contact.go +85 -0
  208. package/dist/resources/templates/go-backend/internal/common/ctxutil/identity.go +20 -0
  209. package/dist/resources/templates/go-backend/internal/common/ctxutil/product.go +53 -0
  210. package/dist/resources/templates/go-backend/internal/common/enumdomain/payment.go +12 -0
  211. package/dist/resources/templates/go-backend/internal/common/enums/dto_admin.go +9 -0
  212. package/dist/resources/templates/go-backend/internal/common/enums/enum.go +1247 -0
  213. package/dist/resources/templates/go-backend/internal/common/enums/handler_admin.go +66 -0
  214. package/dist/resources/templates/go-backend/internal/common/enums/module.go +46 -0
  215. package/dist/resources/templates/go-backend/internal/common/enums/provider.go +10 -0
  216. package/dist/resources/templates/go-backend/internal/common/enums/register.go +11 -0
  217. package/dist/resources/templates/go-backend/internal/common/enums/register_audit.go +274 -0
  218. package/dist/resources/templates/go-backend/internal/common/enums/register_command_replay.go +12 -0
  219. package/dist/resources/templates/go-backend/internal/common/enums/register_config.go +27 -0
  220. package/dist/resources/templates/go-backend/internal/common/enums/register_locale.go +37 -0
  221. package/dist/resources/templates/go-backend/internal/common/enums/register_ops.go +14 -0
  222. package/dist/resources/templates/go-backend/internal/common/enums/register_outbox.go +15 -0
  223. package/dist/resources/templates/go-backend/internal/common/enums/register_rule_expression.go +63 -0
  224. package/dist/resources/templates/go-backend/internal/common/enums/registry.go +77 -0
  225. package/dist/resources/templates/go-backend/internal/common/httporigin/origin.go +62 -0
  226. package/dist/resources/templates/go-backend/internal/common/httporigin/origin_test.go +38 -0
  227. package/dist/resources/templates/go-backend/internal/common/iamcredential/plaintext.go +35 -0
  228. package/dist/resources/templates/go-backend/internal/common/iamcredential/plaintext_test.go +29 -0
  229. package/dist/resources/templates/go-backend/internal/common/iamscope/scope.go +212 -0
  230. package/dist/resources/templates/go-backend/internal/common/iamscope/scope_binding.go +26 -0
  231. package/dist/resources/templates/go-backend/internal/common/iamscope/scope_filter.go +173 -0
  232. package/dist/resources/templates/go-backend/internal/common/iamscope/scope_filter_test.go +279 -0
  233. package/dist/resources/templates/go-backend/internal/common/internalapi/authorization_details.go +10 -0
  234. package/dist/resources/templates/go-backend/internal/common/internalapi/route_permission_policies.go +660 -0
  235. package/dist/resources/templates/go-backend/internal/common/internalapi/route_permission_policies_test.go +331 -0
  236. package/dist/resources/templates/go-backend/internal/common/internalservice/audience_token_source.go +166 -0
  237. package/dist/resources/templates/go-backend/internal/common/internalservice/bootstrap_token_exchanger.go +183 -0
  238. package/dist/resources/templates/go-backend/internal/common/internalservice/bound_service_token_signer.go +52 -0
  239. package/dist/resources/templates/go-backend/internal/common/internalservice/delegated_access_token_exchanger.go +189 -0
  240. package/dist/resources/templates/go-backend/internal/common/internalservice/delegated_access_token_exchanger_test.go +159 -0
  241. package/dist/resources/templates/go-backend/internal/common/internalservice/product_scoped_service_token_signer.go +92 -0
  242. package/dist/resources/templates/go-backend/internal/common/internalservice/provider.go +25 -0
  243. package/dist/resources/templates/go-backend/internal/common/internalservice/request_signer.go +86 -0
  244. package/dist/resources/templates/go-backend/internal/common/internalservice/resolver.go +69 -0
  245. package/dist/resources/templates/go-backend/internal/common/internalservice/resolver_test.go +42 -0
  246. package/dist/resources/templates/go-backend/internal/common/internalservice/route_scope.go +95 -0
  247. package/dist/resources/templates/go-backend/internal/common/internalservice/route_scope_test.go +78 -0
  248. package/dist/resources/templates/go-backend/internal/common/internalservice/service_identity_test.go +387 -0
  249. package/dist/resources/templates/go-backend/internal/common/jsonschema/compiler.go +100 -0
  250. package/dist/resources/templates/go-backend/internal/common/jsonschema/compiler_test.go +41 -0
  251. package/dist/resources/templates/go-backend/internal/common/jwksapi/handler.go +83 -0
  252. package/dist/resources/templates/go-backend/internal/common/jwksapi/handler_test.go +104 -0
  253. package/dist/resources/templates/go-backend/internal/common/locale/locale.go +145 -0
  254. package/dist/resources/templates/go-backend/internal/common/locale/locale_test.go +75 -0
  255. package/dist/resources/templates/go-backend/internal/common/mediaref/mediaref.go +54 -0
  256. package/dist/resources/templates/go-backend/internal/common/mediaref/mediaref_test.go +77 -0
  257. package/dist/resources/templates/go-backend/internal/common/middleware/apikey_auth.go +320 -0
  258. package/dist/resources/templates/go-backend/internal/common/middleware/apikey_throttle.go +158 -0
  259. package/dist/resources/templates/go-backend/internal/common/middleware/auth.go +40 -0
  260. package/dist/resources/templates/go-backend/internal/common/middleware/auth_test.go +50 -0
  261. package/dist/resources/templates/go-backend/internal/common/middleware/client_context.go +86 -0
  262. package/dist/resources/templates/go-backend/internal/common/middleware/cors.go +68 -0
  263. package/dist/resources/templates/go-backend/internal/common/middleware/event_context.go +18 -0
  264. package/dist/resources/templates/go-backend/internal/common/middleware/gateway_identity.go +279 -0
  265. package/dist/resources/templates/go-backend/internal/common/middleware/helpers.go +159 -0
  266. package/dist/resources/templates/go-backend/internal/common/middleware/iam_delegated_route_permission.go +171 -0
  267. package/dist/resources/templates/go-backend/internal/common/middleware/iam_delegated_token_auth.go +151 -0
  268. package/dist/resources/templates/go-backend/internal/common/middleware/iam_delegated_token_auth_test.go +99 -0
  269. package/dist/resources/templates/go-backend/internal/common/middleware/iam_service_identity.go +138 -0
  270. package/dist/resources/templates/go-backend/internal/common/middleware/iam_service_token_auth.go +74 -0
  271. package/dist/resources/templates/go-backend/internal/common/middleware/idempotent.go +273 -0
  272. package/dist/resources/templates/go-backend/internal/common/middleware/idempotent_test.go +83 -0
  273. package/dist/resources/templates/go-backend/internal/common/middleware/internal_route_permission.go +45 -0
  274. package/dist/resources/templates/go-backend/internal/common/middleware/internal_route_permission_test.go +186 -0
  275. package/dist/resources/templates/go-backend/internal/common/middleware/logging.go +191 -0
  276. package/dist/resources/templates/go-backend/internal/common/middleware/metrics.go +45 -0
  277. package/dist/resources/templates/go-backend/internal/common/middleware/middleware_test.go +1516 -0
  278. package/dist/resources/templates/go-backend/internal/common/middleware/principal_context.go +160 -0
  279. package/dist/resources/templates/go-backend/internal/common/middleware/principal_context_test.go +355 -0
  280. package/dist/resources/templates/go-backend/internal/common/middleware/product_context.go +100 -0
  281. package/dist/resources/templates/go-backend/internal/common/middleware/recovery.go +40 -0
  282. package/dist/resources/templates/go-backend/internal/common/middleware/referral_attribution.go +178 -0
  283. package/dist/resources/templates/go-backend/internal/common/middleware/requestid.go +48 -0
  284. package/dist/resources/templates/go-backend/internal/common/middleware/resource_permission.go +790 -0
  285. package/dist/resources/templates/go-backend/internal/common/middleware/resource_permission_test.go +440 -0
  286. package/dist/resources/templates/go-backend/internal/common/middleware/service_credential_auth.go +67 -0
  287. package/dist/resources/templates/go-backend/internal/common/middleware/tenant.go +148 -0
  288. package/dist/resources/templates/go-backend/internal/common/middleware/throttle.go +310 -0
  289. package/dist/resources/templates/go-backend/internal/common/middleware/trusted_client_ip.go +23 -0
  290. package/dist/resources/templates/go-backend/internal/common/middleware/trusted_client_ip_test.go +60 -0
  291. package/dist/resources/templates/go-backend/internal/common/money/currency.go +25 -0
  292. package/dist/resources/templates/go-backend/internal/common/money/errors.go +23 -0
  293. package/dist/resources/templates/go-backend/internal/common/money/format.go +123 -0
  294. package/dist/resources/templates/go-backend/internal/common/money/format_test.go +204 -0
  295. package/dist/resources/templates/go-backend/internal/common/money/gateway.go +144 -0
  296. package/dist/resources/templates/go-backend/internal/common/money/gateway_test.go +165 -0
  297. package/dist/resources/templates/go-backend/internal/common/money/rounding.go +56 -0
  298. package/dist/resources/templates/go-backend/internal/common/money/rounding_test.go +51 -0
  299. package/dist/resources/templates/go-backend/internal/common/principal/context.go +56 -0
  300. package/dist/resources/templates/go-backend/internal/common/principal/principal.go +49 -0
  301. package/dist/resources/templates/go-backend/internal/common/productcode/code.go +24 -0
  302. package/dist/resources/templates/go-backend/internal/common/productcode/code_test.go +35 -0
  303. package/dist/resources/templates/go-backend/internal/common/providerconfig/schema.go +577 -0
  304. package/dist/resources/templates/go-backend/internal/common/providerconfig/schema_test.go +47 -0
  305. package/dist/resources/templates/go-backend/internal/common/requestprivacy/request.go +246 -0
  306. package/dist/resources/templates/go-backend/internal/common/requestprivacy/request_test.go +170 -0
  307. package/dist/resources/templates/go-backend/internal/common/response/pagination.go +60 -0
  308. package/dist/resources/templates/go-backend/internal/common/response/response.go +110 -0
  309. package/dist/resources/templates/go-backend/internal/common/response/response_test.go +463 -0
  310. package/dist/resources/templates/go-backend/internal/common/ruleexpression/ast.go +141 -0
  311. package/dist/resources/templates/go-backend/internal/common/ruleexpression/ast_test.go +81 -0
  312. package/dist/resources/templates/go-backend/internal/common/ruleexpression/canonical.go +184 -0
  313. package/dist/resources/templates/go-backend/internal/common/ruleexpression/canonical_test.go +319 -0
  314. package/dist/resources/templates/go-backend/internal/common/ruleexpression/decoder.go +555 -0
  315. package/dist/resources/templates/go-backend/internal/common/ruleexpression/decoder_test.go +260 -0
  316. package/dist/resources/templates/go-backend/internal/common/ruleexpression/errors.go +55 -0
  317. package/dist/resources/templates/go-backend/internal/common/ruleexpression/evaluator.go +96 -0
  318. package/dist/resources/templates/go-backend/internal/common/ruleexpression/evaluator_test.go +220 -0
  319. package/dist/resources/templates/go-backend/internal/common/ruleexpression/fuzz_test.go +116 -0
  320. package/dist/resources/templates/go-backend/internal/common/ruleexpression/limits.go +331 -0
  321. package/dist/resources/templates/go-backend/internal/common/ruleexpression/schema.go +412 -0
  322. package/dist/resources/templates/go-backend/internal/common/ruleexpression/schema_test.go +164 -0
  323. package/dist/resources/templates/go-backend/internal/common/runtimeinput/runtime_input.go +627 -0
  324. package/dist/resources/templates/go-backend/internal/common/runtimeinput/runtime_input_test.go +245 -0
  325. package/dist/resources/templates/go-backend/internal/common/semver/errors.go +6 -0
  326. package/dist/resources/templates/go-backend/internal/common/semver/semver.go +125 -0
  327. package/dist/resources/templates/go-backend/internal/common/semver/semver_test.go +205 -0
  328. package/dist/resources/templates/go-backend/internal/common/serviceidentity/audience.go +48 -0
  329. package/dist/resources/templates/go-backend/internal/common/serviceidentity/audience_test.go +35 -0
  330. package/dist/resources/templates/go-backend/internal/common/serviceidentity/resource_identifier.go +33 -0
  331. package/dist/resources/templates/go-backend/internal/common/serviceidentity/resource_identifier_test.go +32 -0
  332. package/dist/resources/templates/go-backend/internal/common/tradeno/generator.go +99 -0
  333. package/dist/resources/templates/go-backend/internal/common/tradeno/generator_test.go +396 -0
  334. package/dist/resources/templates/go-backend/internal/common/tradeno/prefix.go +247 -0
  335. package/dist/resources/templates/go-backend/internal/common/types/asset_url.go +11 -0
  336. package/dist/resources/templates/go-backend/internal/common/types/billing.go +89 -0
  337. package/dist/resources/templates/go-backend/internal/common/types/billing_test.go +77 -0
  338. package/dist/resources/templates/go-backend/internal/common/types/country.go +74 -0
  339. package/dist/resources/templates/go-backend/internal/common/types/country_test.go +28 -0
  340. package/dist/resources/templates/go-backend/internal/common/types/currency.go +60 -0
  341. package/dist/resources/templates/go-backend/internal/common/types/identifiers.go +41 -0
  342. package/dist/resources/templates/go-backend/internal/common/types/operator.go +28 -0
  343. package/dist/resources/templates/go-backend/internal/common/types/subscription_entitlement.go +24 -0
  344. package/dist/resources/templates/go-backend/internal/common/types/subscription_entitlement_test.go +35 -0
  345. package/dist/resources/templates/go-backend/internal/common/types/tier.go +72 -0
  346. package/dist/resources/templates/go-backend/internal/common/types/types.go +411 -0
  347. package/dist/resources/templates/go-backend/internal/common/types/types_test.go +295 -0
  348. package/dist/resources/templates/go-backend/internal/common/utils/constants.go +100 -0
  349. package/dist/resources/templates/go-backend/internal/common/utils/crypto.go +158 -0
  350. package/dist/resources/templates/go-backend/internal/common/utils/crypto_test.go +345 -0
  351. package/dist/resources/templates/go-backend/internal/common/utils/duration.go +25 -0
  352. package/dist/resources/templates/go-backend/internal/common/utils/helpers.go +18 -0
  353. package/dist/resources/templates/go-backend/internal/common/utils/json.go +62 -0
  354. package/dist/resources/templates/go-backend/internal/common/utils/json_test.go +76 -0
  355. package/dist/resources/templates/go-backend/internal/common/utils/pagination.go +51 -0
  356. package/dist/resources/templates/go-backend/internal/common/utils/pagination_test.go +45 -0
  357. package/dist/resources/templates/go-backend/internal/common/utils/pointer.go +107 -0
  358. package/dist/resources/templates/go-backend/internal/common/utils/pointer_test.go +15 -0
  359. package/dist/resources/templates/go-backend/internal/common/utils/slice.go +24 -0
  360. package/dist/resources/templates/go-backend/internal/common/utils/snowflake.go +110 -0
  361. package/dist/resources/templates/go-backend/internal/common/utils/snowflake_test.go +316 -0
  362. package/dist/resources/templates/go-backend/internal/common/utils/string.go +16 -0
  363. package/dist/resources/templates/go-backend/internal/common/utils/timefmt.go +42 -0
  364. package/dist/resources/templates/go-backend/internal/common/validator/validator.go +136 -0
  365. package/dist/resources/templates/go-backend/internal/common/validator/validator_test.go +240 -0
  366. package/dist/resources/templates/go-backend/internal/common/youtubeapi/client.go +224 -0
  367. package/dist/resources/templates/go-backend/internal/core/apicontract/document.go +269 -0
  368. package/dist/resources/templates/go-backend/internal/core/apicontract/document_test.go +104 -0
  369. package/dist/resources/templates/go-backend/internal/core/apicontract/route_validator.go +78 -0
  370. package/dist/resources/templates/go-backend/internal/core/apicontract/route_validator_test.go +108 -0
  371. package/dist/resources/templates/go-backend/internal/core/apidocs/assets/scalar-api-reference.js +2385 -0
  372. package/dist/resources/templates/go-backend/internal/core/apidocs/assets/scalar-api-reference.metadata.json +10 -0
  373. package/dist/resources/templates/go-backend/internal/core/apidocs/route.go +107 -0
  374. package/dist/resources/templates/go-backend/internal/core/apidocs/route_test.go +200 -0
  375. package/dist/resources/templates/go-backend/internal/core/apidocs/scalar.go +117 -0
  376. package/dist/resources/templates/go-backend/internal/core/apidocs/scalar_test.go +99 -0
  377. package/dist/resources/templates/go-backend/internal/core/audit/access_log_policy.go +91 -0
  378. package/dist/resources/templates/go-backend/internal/core/audit/access_log_policy_test.go +51 -0
  379. package/dist/resources/templates/go-backend/internal/core/audit/actor_resolver.go +36 -0
  380. package/dist/resources/templates/go-backend/internal/core/audit/constants.go +30 -0
  381. package/dist/resources/templates/go-backend/internal/core/audit/context.go +119 -0
  382. package/dist/resources/templates/go-backend/internal/core/audit/context_test.go +310 -0
  383. package/dist/resources/templates/go-backend/internal/core/audit/dto.go +468 -0
  384. package/dist/resources/templates/go-backend/internal/core/audit/dto_admin.go +172 -0
  385. package/dist/resources/templates/go-backend/internal/core/audit/enum.go +460 -0
  386. package/dist/resources/templates/go-backend/internal/core/audit/enum_test.go +314 -0
  387. package/dist/resources/templates/go-backend/internal/core/audit/errors.go +9 -0
  388. package/dist/resources/templates/go-backend/internal/core/audit/handler.go +568 -0
  389. package/dist/resources/templates/go-backend/internal/core/audit/listener.go +319 -0
  390. package/dist/resources/templates/go-backend/internal/core/audit/listener_test.go +98 -0
  391. package/dist/resources/templates/go-backend/internal/core/audit/middleware.go +669 -0
  392. package/dist/resources/templates/go-backend/internal/core/audit/middleware_test.go +268 -0
  393. package/dist/resources/templates/go-backend/internal/core/audit/model.go +306 -0
  394. package/dist/resources/templates/go-backend/internal/core/audit/partition_job.go +316 -0
  395. package/dist/resources/templates/go-backend/internal/core/audit/ports.go +9 -0
  396. package/dist/resources/templates/go-backend/internal/core/audit/provider.go +30 -0
  397. package/dist/resources/templates/go-backend/internal/core/audit/repository.go +1007 -0
  398. package/dist/resources/templates/go-backend/internal/core/audit/repository_test.go +934 -0
  399. package/dist/resources/templates/go-backend/internal/core/audit/router.go +85 -0
  400. package/dist/resources/templates/go-backend/internal/core/audit/service.go +770 -0
  401. package/dist/resources/templates/go-backend/internal/core/audit/service_test.go +331 -0
  402. package/dist/resources/templates/go-backend/internal/core/audit/vo_admin.go +475 -0
  403. package/dist/resources/templates/go-backend/internal/core/cache/config.go +30 -0
  404. package/dist/resources/templates/go-backend/internal/core/cache/key.go +41 -0
  405. package/dist/resources/templates/go-backend/internal/core/cache/key_test.go +62 -0
  406. package/dist/resources/templates/go-backend/internal/core/cache/l1.go +153 -0
  407. package/dist/resources/templates/go-backend/internal/core/cache/l1_test.go +212 -0
  408. package/dist/resources/templates/go-backend/internal/core/cache/manager.go +278 -0
  409. package/dist/resources/templates/go-backend/internal/core/cache/manager_provider.go +24 -0
  410. package/dist/resources/templates/go-backend/internal/core/cache/metrics.go +126 -0
  411. package/dist/resources/templates/go-backend/internal/core/cache/namespace.go +46 -0
  412. package/dist/resources/templates/go-backend/internal/core/cache/namespace_test.go +90 -0
  413. package/dist/resources/templates/go-backend/internal/core/cache/options.go +39 -0
  414. package/dist/resources/templates/go-backend/internal/core/cache/options_test.go +96 -0
  415. package/dist/resources/templates/go-backend/internal/core/cache/redis.go +311 -0
  416. package/dist/resources/templates/go-backend/internal/core/cache/redis_test.go +51 -0
  417. package/dist/resources/templates/go-backend/internal/core/cache/serializer.go +31 -0
  418. package/dist/resources/templates/go-backend/internal/core/cache/serializer_test.go +139 -0
  419. package/dist/resources/templates/go-backend/internal/core/cache/singleflight.go +53 -0
  420. package/dist/resources/templates/go-backend/internal/core/cache/singleflight_test.go +211 -0
  421. package/dist/resources/templates/go-backend/internal/core/cache/warming.go +86 -0
  422. package/dist/resources/templates/go-backend/internal/core/clock/clock.go +66 -0
  423. package/dist/resources/templates/go-backend/internal/core/clock/clock_test.go +26 -0
  424. package/dist/resources/templates/go-backend/internal/core/clock/runtime_clock.go +283 -0
  425. package/dist/resources/templates/go-backend/internal/core/clock/runtime_clock_test.go +98 -0
  426. package/dist/resources/templates/go-backend/internal/core/commandreplay/errors.go +6 -0
  427. package/dist/resources/templates/go-backend/internal/core/commandreplay/model.go +90 -0
  428. package/dist/resources/templates/go-backend/internal/core/commandreplay/model_test.go +79 -0
  429. package/dist/resources/templates/go-backend/internal/core/commandreplay/namespace.go +7 -0
  430. package/dist/resources/templates/go-backend/internal/core/commandreplay/persistence.go +269 -0
  431. package/dist/resources/templates/go-backend/internal/core/commandreplay/persistence_test.go +185 -0
  432. package/dist/resources/templates/go-backend/internal/core/commandreplay/provider.go +9 -0
  433. package/dist/resources/templates/go-backend/internal/core/commandreplay/repository.go +22 -0
  434. package/dist/resources/templates/go-backend/internal/core/commandreplay/service.go +853 -0
  435. package/dist/resources/templates/go-backend/internal/core/commandreplay/service_persistence_test.go +432 -0
  436. package/dist/resources/templates/go-backend/internal/core/commandreplay/service_test.go +891 -0
  437. package/dist/resources/templates/go-backend/internal/core/commandreplay/types.go +121 -0
  438. package/dist/resources/templates/go-backend/internal/core/config/config.go +2069 -0
  439. package/dist/resources/templates/go-backend/internal/core/config/config_test.go +1122 -0
  440. package/dist/resources/templates/go-backend/internal/core/config/contract/contract_test.go +388 -0
  441. package/dist/resources/templates/go-backend/internal/core/config/contract/docs.go +198 -0
  442. package/dist/resources/templates/go-backend/internal/core/config/contract/verify.go +424 -0
  443. package/dist/resources/templates/go-backend/internal/core/config/enum.go +46 -0
  444. package/dist/resources/templates/go-backend/internal/core/config/metadata.go +717 -0
  445. package/dist/resources/templates/go-backend/internal/core/config/metadata_test.go +228 -0
  446. package/dist/resources/templates/go-backend/internal/core/config/product_admin_config_test.go +210 -0
  447. package/dist/resources/templates/go-backend/internal/core/crypto/aes_gcm.go +111 -0
  448. package/dist/resources/templates/go-backend/internal/core/crypto/aes_gcm_test.go +364 -0
  449. package/dist/resources/templates/go-backend/internal/core/crypto/encryptor.go +12 -0
  450. package/dist/resources/templates/go-backend/internal/core/crypto/envelope_encryptor.go +134 -0
  451. package/dist/resources/templates/go-backend/internal/core/crypto/envelope_encryptor_test.go +118 -0
  452. package/dist/resources/templates/go-backend/internal/core/crypto/pem.go +112 -0
  453. package/dist/resources/templates/go-backend/internal/core/crypto/pem_test.go +44 -0
  454. package/dist/resources/templates/go-backend/internal/core/crypto/provider.go +130 -0
  455. package/dist/resources/templates/go-backend/internal/core/crypto/provider_test.go +92 -0
  456. package/dist/resources/templates/go-backend/internal/core/database/base_model.go +24 -0
  457. package/dist/resources/templates/go-backend/internal/core/database/clickhouse.go +121 -0
  458. package/dist/resources/templates/go-backend/internal/core/database/database.go +112 -0
  459. package/dist/resources/templates/go-backend/internal/core/database/database_logger_test.go +95 -0
  460. package/dist/resources/templates/go-backend/internal/core/database/errors.go +25 -0
  461. package/dist/resources/templates/go-backend/internal/core/database/metrics_plugin.go +105 -0
  462. package/dist/resources/templates/go-backend/internal/core/database/pool_collector.go +71 -0
  463. package/dist/resources/templates/go-backend/internal/core/database/read_replica.go +520 -0
  464. package/dist/resources/templates/go-backend/internal/core/database/transaction.go +170 -0
  465. package/dist/resources/templates/go-backend/internal/core/database/transaction_test.go +282 -0
  466. package/dist/resources/templates/go-backend/internal/core/distlock/lock.go +353 -0
  467. package/dist/resources/templates/go-backend/internal/core/distlock/lock_test.go +106 -0
  468. package/dist/resources/templates/go-backend/internal/core/errors/handler.go +189 -0
  469. package/dist/resources/templates/go-backend/internal/core/errors/handler_test.go +515 -0
  470. package/dist/resources/templates/go-backend/internal/core/eventbus/eventbus.go +667 -0
  471. package/dist/resources/templates/go-backend/internal/core/eventbus/eventbus_test.go +792 -0
  472. package/dist/resources/templates/go-backend/internal/core/eventstream/noop.go +22 -0
  473. package/dist/resources/templates/go-backend/internal/core/eventstream/provider.go +20 -0
  474. package/dist/resources/templates/go-backend/internal/core/eventstream/publisher.go +38 -0
  475. package/dist/resources/templates/go-backend/internal/core/eventstream/redis.go +109 -0
  476. package/dist/resources/templates/go-backend/internal/core/eventstream/routing.go +104 -0
  477. package/dist/resources/templates/go-backend/internal/core/eventstream/routing_test.go +71 -0
  478. package/dist/resources/templates/go-backend/internal/core/geoip/model.go +19 -0
  479. package/dist/resources/templates/go-backend/internal/core/geoip/service.go +88 -0
  480. package/dist/resources/templates/go-backend/internal/core/health/health.go +333 -0
  481. package/dist/resources/templates/go-backend/internal/core/health/health_test.go +27 -0
  482. package/dist/resources/templates/go-backend/internal/core/httpclient/client.go +772 -0
  483. package/dist/resources/templates/go-backend/internal/core/httpclient/client_test.go +287 -0
  484. package/dist/resources/templates/go-backend/internal/core/httpclient/download.go +578 -0
  485. package/dist/resources/templates/go-backend/internal/core/httpclient/download_test.go +374 -0
  486. package/dist/resources/templates/go-backend/internal/core/jwtkeyring/jwk.go +38 -0
  487. package/dist/resources/templates/go-backend/internal/core/jwtkeyring/keyring.go +144 -0
  488. package/dist/resources/templates/go-backend/internal/core/jwtkeyring/keyring_test.go +128 -0
  489. package/dist/resources/templates/go-backend/internal/core/jwtkeyring/registry.go +60 -0
  490. package/dist/resources/templates/go-backend/internal/core/logger/logger.go +53 -0
  491. package/dist/resources/templates/go-backend/internal/core/logger/logger_test.go +194 -0
  492. package/dist/resources/templates/go-backend/internal/core/observability/metrics.go +358 -0
  493. package/dist/resources/templates/go-backend/internal/core/observability/sentry.go +445 -0
  494. package/dist/resources/templates/go-backend/internal/core/observability/sentry_privacy_test.go +175 -0
  495. package/dist/resources/templates/go-backend/internal/core/observability/tracing.go +187 -0
  496. package/dist/resources/templates/go-backend/internal/core/outbox/model.go +314 -0
  497. package/dist/resources/templates/go-backend/internal/core/outbox/model_test.go +77 -0
  498. package/dist/resources/templates/go-backend/internal/core/outbox/persistence.go +51 -0
  499. package/dist/resources/templates/go-backend/internal/core/outbox/provider.go +23 -0
  500. package/dist/resources/templates/go-backend/internal/core/outbox/relay.go +1138 -0
  501. package/dist/resources/templates/go-backend/internal/core/outbox/relay_postgres_test.go +257 -0
  502. package/dist/resources/templates/go-backend/internal/core/outbox/relay_test.go +690 -0
  503. package/dist/resources/templates/go-backend/internal/core/outbox/rescheduler.go +164 -0
  504. package/dist/resources/templates/go-backend/internal/core/outbox/rescheduler_test.go +209 -0
  505. package/dist/resources/templates/go-backend/internal/core/outbox/writer.go +249 -0
  506. package/dist/resources/templates/go-backend/internal/core/outbox/writer_postgres_test.go +170 -0
  507. package/dist/resources/templates/go-backend/internal/core/outbox/writer_test.go +123 -0
  508. package/dist/resources/templates/go-backend/internal/core/provider.go +198 -0
  509. package/dist/resources/templates/go-backend/internal/core/queue/metrics_middleware.go +38 -0
  510. package/dist/resources/templates/go-backend/internal/core/queue/metrics_middleware_test.go +12 -0
  511. package/dist/resources/templates/go-backend/internal/core/queue/queue.go +288 -0
  512. package/dist/resources/templates/go-backend/internal/core/queue/queue_test.go +159 -0
  513. package/dist/resources/templates/go-backend/internal/core/resilience/bulkhead.go +514 -0
  514. package/dist/resources/templates/go-backend/internal/core/resilience/bulkhead_test.go +984 -0
  515. package/dist/resources/templates/go-backend/internal/core/resilience/circuitbreaker.go +358 -0
  516. package/dist/resources/templates/go-backend/internal/core/resilience/circuitbreaker_test.go +788 -0
  517. package/dist/resources/templates/go-backend/internal/core/resilience/retry.go +318 -0
  518. package/dist/resources/templates/go-backend/internal/core/resilience/retry_test.go +735 -0
  519. package/dist/resources/templates/go-backend/internal/core/schedule/recorder.go +305 -0
  520. package/dist/resources/templates/go-backend/internal/core/schedule/run_context.go +124 -0
  521. package/dist/resources/templates/go-backend/internal/core/schedule/run_context_test.go +85 -0
  522. package/dist/resources/templates/go-backend/internal/core/schedule/scheduler.go +1589 -0
  523. package/dist/resources/templates/go-backend/internal/core/schedule/scheduler_control_test.go +808 -0
  524. package/dist/resources/templates/go-backend/internal/core/storage/oss_provider.go +398 -0
  525. package/dist/resources/templates/go-backend/internal/core/storage/oss_provider_test.go +89 -0
  526. package/dist/resources/templates/go-backend/internal/core/storage/path.go +110 -0
  527. package/dist/resources/templates/go-backend/internal/core/storage/path_test.go +301 -0
  528. package/dist/resources/templates/go-backend/internal/core/storage/s3_provider.go +489 -0
  529. package/dist/resources/templates/go-backend/internal/core/storage/s3_provider_test.go +60 -0
  530. package/dist/resources/templates/go-backend/internal/core/storage/storage.go +268 -0
  531. package/dist/resources/templates/go-backend/internal/core/storage/validation.go +225 -0
  532. package/dist/resources/templates/go-backend/internal/core/storage/validation_test.go +495 -0
  533. package/dist/resources/templates/go-backend/internal/core/temporal/logger.go +38 -0
  534. package/dist/resources/templates/go-backend/internal/core/temporal/provider.go +126 -0
  535. package/dist/resources/templates/go-backend/internal/core/temporal/provider_test.go +67 -0
  536. package/dist/resources/templates/go-backend/internal/core/websocket/client.go +282 -0
  537. package/dist/resources/templates/go-backend/internal/core/websocket/client_test.go +81 -0
  538. package/dist/resources/templates/go-backend/internal/core/websocket/config.go +58 -0
  539. package/dist/resources/templates/go-backend/internal/core/websocket/handler.go +53 -0
  540. package/dist/resources/templates/go-backend/internal/core/websocket/hub.go +269 -0
  541. package/dist/resources/templates/go-backend/internal/core/websocket/message.go +273 -0
  542. package/dist/resources/templates/go-backend/internal/core/websocket/notifier.go +92 -0
  543. package/dist/resources/templates/go-backend/internal/core/websocket/provider.go +33 -0
  544. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/action.go +77 -0
  545. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/action_test.go +238 -0
  546. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/condition.go +107 -0
  547. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/decision.go +256 -0
  548. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/enum.go +643 -0
  549. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/errors.go +102 -0
  550. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/principal_record.go +21 -0
  551. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/product_context.go +486 -0
  552. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/resource.go +215 -0
  553. package/dist/resources/templates/go-backend/internal/integrations/onex/iam/resource_test.go +242 -0
  554. package/dist/resources/templates/go-backend/internal/products/README.md +5 -0
  555. package/dist/resources/templates/go-backend/internal/sharedevents/README.md +5 -0
  556. package/dist/resources/templates/go-backend/migrations/000001_infrastructure.down.sql +13 -0
  557. package/dist/resources/templates/go-backend/migrations/000001_infrastructure.up.sql +886 -0
  558. package/dist/resources/templates/go-backend/pkg/apierror/error.go +327 -0
  559. package/dist/resources/templates/go-backend/pkg/apierror/error_code.go +65 -0
  560. package/dist/resources/templates/go-backend/pkg/apierror/error_test.go +41 -0
  561. package/dist/resources/templates/go-backend/pkg/apierror/error_type.go +14 -0
  562. package/dist/resources/templates/go-backend/pkg/apierror/http_response.go +216 -0
  563. package/dist/resources/templates/go-backend/pkg/apierror/http_response_test.go +216 -0
  564. package/dist/resources/templates/go-backend/scripts/check-openapi-clean-deletion.sh +54 -0
  565. package/dist/resources/templates/go-backend/scripts/test-migrations.sh +32 -0
  566. package/dist/resources/templates/go-backend/tests/infrastructure.sql +69 -0
  567. package/dist/resources/templates/mcp-server/.claude/docs/stack.md +338 -0
  568. package/dist/resources/templates/mcp-server/.editorconfig +13 -0
  569. package/dist/resources/templates/mcp-server/.env.example +8 -0
  570. package/dist/resources/templates/mcp-server/.github/ISSUE_TEMPLATE/bug_report.yml +104 -0
  571. package/dist/resources/templates/mcp-server/.github/ISSUE_TEMPLATE/feature_request.yml +54 -0
  572. package/dist/resources/templates/mcp-server/.github/PULL_REQUEST_TEMPLATE.md +36 -0
  573. package/dist/resources/templates/mcp-server/.github/workflows/ci.yml +78 -0
  574. package/dist/resources/templates/mcp-server/.husky/commit-msg +1 -0
  575. package/dist/resources/templates/mcp-server/.husky/pre-commit +1 -0
  576. package/dist/resources/templates/mcp-server/.lintstagedrc.json +4 -0
  577. package/dist/resources/templates/mcp-server/.nvmrc +1 -0
  578. package/dist/resources/templates/mcp-server/.prettierrc +8 -0
  579. package/dist/resources/templates/mcp-server/CONTRIBUTING.md +184 -0
  580. package/dist/resources/templates/mcp-server/Dockerfile +23 -0
  581. package/dist/resources/templates/mcp-server/LICENSE +21 -0
  582. package/dist/resources/templates/mcp-server/README.md +123 -0
  583. package/dist/resources/templates/mcp-server/_gitignore +26 -0
  584. package/dist/resources/templates/mcp-server/commitlint.config.js +24 -0
  585. package/dist/resources/templates/mcp-server/eslint.config.js +30 -0
  586. package/dist/resources/templates/mcp-server/package.json +72 -0
  587. package/dist/resources/templates/mcp-server/src/index.ts +27 -0
  588. package/dist/resources/templates/mcp-server/src/resources.ts +33 -0
  589. package/dist/resources/templates/mcp-server/src/services/.gitkeep +0 -0
  590. package/dist/resources/templates/mcp-server/src/tools.ts +43 -0
  591. package/dist/resources/templates/mcp-server/src/types/index.ts +19 -0
  592. package/dist/resources/templates/mcp-server/src/utils/index.ts +31 -0
  593. package/dist/resources/templates/mcp-server/tsconfig.json +22 -0
  594. package/dist/resources/templates/mcp-server/tsup.config.ts +14 -0
  595. package/dist/resources/templates/mcp-server/vitest.config.ts +15 -0
  596. package/dist/resources/templates/nuxt/.claude/docs/stack.md +666 -0
  597. package/dist/resources/templates/nuxt/.editorconfig +15 -0
  598. package/dist/resources/templates/nuxt/.env.example +22 -0
  599. package/dist/resources/templates/nuxt/.github/workflows/ci.yml +34 -0
  600. package/dist/resources/templates/nuxt/.husky/commit-msg +1 -0
  601. package/dist/resources/templates/nuxt/.husky/pre-commit +1 -0
  602. package/dist/resources/templates/nuxt/.nvmrc +1 -0
  603. package/dist/resources/templates/nuxt/.prettierignore +9 -0
  604. package/dist/resources/templates/nuxt/.prettierrc +1 -0
  605. package/dist/resources/templates/nuxt/README.md +23 -0
  606. package/dist/resources/templates/nuxt/_gitignore +7 -0
  607. package/dist/resources/templates/nuxt/app/app.config.ts +105 -0
  608. package/dist/resources/templates/nuxt/app/i18n/locales/en.json +5 -0
  609. package/dist/resources/templates/nuxt/app/pages/app/index.vue +224 -0
  610. package/dist/resources/templates/nuxt/app/pages/authors/[slug].vue +37 -0
  611. package/dist/resources/templates/nuxt/app/pages/blog/[slug].vue +55 -0
  612. package/dist/resources/templates/nuxt/app/pages/blog/category/[category].vue +38 -0
  613. package/dist/resources/templates/nuxt/app/pages/blog/index.vue +46 -0
  614. package/dist/resources/templates/nuxt/app/pages/index.vue +626 -0
  615. package/dist/resources/templates/nuxt/app/pages/legal/privacy.vue +21 -0
  616. package/dist/resources/templates/nuxt/app/pages/legal/terms.vue +21 -0
  617. package/dist/resources/templates/nuxt/app/pages/ui/index.vue +397 -0
  618. package/dist/resources/templates/nuxt/commitlint.config.mjs +1 -0
  619. package/dist/resources/templates/nuxt/eslint.config.mjs +4 -0
  620. package/dist/resources/templates/nuxt/lint-staged.config.mjs +8 -0
  621. package/dist/resources/templates/nuxt/nuxt.config.ts +71 -0
  622. package/dist/resources/templates/nuxt/package.json +67 -0
  623. package/dist/resources/templates/nuxt/public/apple-touch-icon.png +0 -0
  624. package/dist/resources/templates/nuxt/public/favicon.ico +0 -0
  625. package/dist/resources/templates/nuxt/public/favicon.svg +5 -0
  626. package/dist/resources/templates/nuxt/public/icon-16x16.png +0 -0
  627. package/dist/resources/templates/nuxt/public/icon-192x192.png +0 -0
  628. package/dist/resources/templates/nuxt/public/icon-32x32.png +0 -0
  629. package/dist/resources/templates/nuxt/public/icon-512x512.png +0 -0
  630. package/dist/resources/templates/nuxt/public/logo.svg +6 -0
  631. package/dist/resources/templates/nuxt/public/media/hero-product-gallery.png +0 -0
  632. package/dist/resources/templates/nuxt/server/api/content/sitemap-urls.get.ts +12 -0
  633. package/dist/resources/templates/nuxt/server/api/preview.get.ts +9 -0
  634. package/dist/resources/templates/nuxt/stylelint.config.mjs +3 -0
  635. package/dist/resources/templates/nuxt/test/e2e/rendering.test.ts +13 -0
  636. package/dist/resources/templates/nuxt/tsconfig.json +3 -0
  637. package/dist/resources/templates/nuxt/vitest.config.ts +8 -0
  638. package/package.json +8 -5
@@ -0,0 +1,643 @@
1
+ package domain
2
+
3
+ // ═══════════════════════════════════════════════════════════════
4
+ // IAM 授权内核 — 枚举词汇表(全包共享契约)
5
+ // ═══════════════════════════════════════════════════════════════
6
+ //
7
+ // 设计对标 阿里云 RAM / AWS IAM / Amazon Verified Permissions (Cedar)。
8
+ // 所有面向前端的枚举(label/color)由 internal/common/enums/register_iam.go
9
+ // 统一注册,前端经 useEnum 消费;本文件只定义字面值与校验,不重复 label。
10
+
11
+ // PrincipalType 授权主体类型。
12
+ //
13
+ // 人、服务账号、被扮演角色、AI Agent 与 root 账号统一进入同一主体模型,
14
+ // 任何主体只能通过 group / role / 直接 policy 绑定获得权限。
15
+ type PrincipalType string
16
+
17
+ const (
18
+ // PrincipalTypeRootAccount 平台根账号(break-glass,高风险审计)
19
+ PrincipalTypeRootAccount PrincipalType = "root_account"
20
+ // PrincipalTypeHumanUser 人类操作员。
21
+ PrincipalTypeHumanUser PrincipalType = "human_user"
22
+ // PrincipalTypeServiceAccount 自动化 / 外部系统调用主体
23
+ PrincipalTypeServiceAccount PrincipalType = "service_account"
24
+ // PrincipalTypeAssumedRole 限时扮演角色(携带 delegated_by)
25
+ PrincipalTypeAssumedRole PrincipalType = "assumed_role"
26
+ // PrincipalTypeAIAgent AI Agent 主体
27
+ PrincipalTypeAIAgent PrincipalType = "ai_agent"
28
+ )
29
+
30
+ // IsValid 校验主体类型是否合法。
31
+ func (t PrincipalType) IsValid() bool {
32
+ switch t {
33
+ case PrincipalTypeRootAccount, PrincipalTypeHumanUser, PrincipalTypeServiceAccount,
34
+ PrincipalTypeAssumedRole, PrincipalTypeAIAgent:
35
+ return true
36
+ default:
37
+ return false
38
+ }
39
+ }
40
+
41
+ // PrincipalStatus 账号管理主体状态投影。
42
+ type PrincipalStatus string
43
+
44
+ const (
45
+ // PrincipalStatusActive 主体与身份均可用。
46
+ PrincipalStatusActive PrincipalStatus = "active"
47
+ // PrincipalStatusAuthorizationDisabled IAM 主体授权已停用。
48
+ PrincipalStatusAuthorizationDisabled PrincipalStatus = "authorization_disabled"
49
+ // PrincipalStatusSuspended 关联身份已封禁。
50
+ PrincipalStatusSuspended PrincipalStatus = "suspended"
51
+ // PrincipalStatusLocked 关联身份已锁定。
52
+ PrincipalStatusLocked PrincipalStatus = "locked"
53
+ // PrincipalStatusPendingDeletion 关联身份待删除。
54
+ PrincipalStatusPendingDeletion PrincipalStatus = "pending_deletion"
55
+ // PrincipalStatusDeleted 关联身份已删除。
56
+ PrincipalStatusDeleted PrincipalStatus = "deleted"
57
+ // PrincipalStatusPendingSetup 账号已创建但初始化配置未完成。
58
+ PrincipalStatusPendingSetup PrincipalStatus = "pending_setup"
59
+ )
60
+
61
+ // MFAStatus 账号管理 MFA 状态投影。
62
+ type MFAStatus string
63
+
64
+ const (
65
+ // MFAStatusEnabled 已启用 MFA。
66
+ MFAStatusEnabled MFAStatus = "enabled"
67
+ // MFAStatusMissing 未启用 MFA。
68
+ MFAStatusMissing MFAStatus = "missing"
69
+ // MFAStatusRequired 已要求绑定 MFA。
70
+ MFAStatusRequired MFAStatus = "required"
71
+ // MFAStatusResetRequired 需要重置 MFA。
72
+ MFAStatusResetRequired MFAStatus = "reset_required"
73
+ // MFAStatusNotApplicable 无关联登录身份。
74
+ MFAStatusNotApplicable MFAStatus = "not_applicable"
75
+ )
76
+
77
+ // PrincipalRiskLabel 账号管理风险标签投影。
78
+ type PrincipalRiskLabel string
79
+
80
+ const (
81
+ // PrincipalRiskNoMFA 人类账号未启用 MFA。
82
+ PrincipalRiskNoMFA PrincipalRiskLabel = "no_mfa"
83
+ // PrincipalRiskRootAccount 根账号或高危主体。
84
+ PrincipalRiskRootAccount PrincipalRiskLabel = "root_account"
85
+ // PrincipalRiskDisabled 主体或身份不可用。
86
+ PrincipalRiskDisabled PrincipalRiskLabel = "disabled"
87
+ // PrincipalRiskLocked 身份处于锁定状态。
88
+ PrincipalRiskLocked PrincipalRiskLabel = "locked"
89
+ // PrincipalRiskGlobalScope 存在全局授权范围。
90
+ PrincipalRiskGlobalScope PrincipalRiskLabel = "global_scope"
91
+ // PrincipalRiskDirectPolicy 存在直接策略绑定。
92
+ PrincipalRiskDirectPolicy PrincipalRiskLabel = "direct_policy"
93
+ // PrincipalRiskActiveSession 存在活跃会话。
94
+ PrincipalRiskActiveSession PrincipalRiskLabel = "active_session"
95
+ // PrincipalRiskStaleLogin 长时间无登录记录。
96
+ PrincipalRiskStaleLogin PrincipalRiskLabel = "stale_login"
97
+ )
98
+
99
+ // CredentialStatus 服务账号凭证状态。
100
+ //
101
+ // 凭证状态机:签发即 active;inactive 为可恢复停用态;revoked 为终态。
102
+ // 过期由 expires_at 在认证链路运行时判定,不入此状态机。
103
+ type CredentialStatus string
104
+
105
+ const (
106
+ // CredentialStatusActive 活跃(可用于认证)
107
+ CredentialStatusActive CredentialStatus = "active"
108
+ // CredentialStatusInactive 已停用(可恢复,认证链路拒绝)
109
+ CredentialStatusInactive CredentialStatus = "inactive"
110
+ // CredentialStatusRevoked 已吊销(终态,不可复活)
111
+ CredentialStatusRevoked CredentialStatus = "revoked"
112
+ )
113
+
114
+ // IsValid 校验凭证状态是否合法。
115
+ func (s CredentialStatus) IsValid() bool {
116
+ switch s {
117
+ case CredentialStatusActive, CredentialStatusInactive, CredentialStatusRevoked:
118
+ return true
119
+ default:
120
+ return false
121
+ }
122
+ }
123
+
124
+ // PolicyType 策略类型。
125
+ //
126
+ // boundary / session 只能收紧有效权限(取交);break_glass 为应急高风险策略。
127
+ type PolicyType string
128
+
129
+ const (
130
+ // PolicyTypeSystem 系统策略(迁移 / 后台注册生成,只读)
131
+ PolicyTypeSystem PolicyType = "system"
132
+ // PolicyTypeCustom 自定义策略(管理员维护)
133
+ PolicyTypeCustom PolicyType = "custom"
134
+ // PolicyTypeBoundary 权限边界策略(取交收紧)
135
+ PolicyTypeBoundary PolicyType = "boundary"
136
+ // PolicyTypeSession 会话策略(扮演 / 提权时取交收紧)
137
+ PolicyTypeSession PolicyType = "session"
138
+ // PolicyTypeBreakGlass 应急策略(高风险,强制审计)
139
+ PolicyTypeBreakGlass PolicyType = "break_glass"
140
+ )
141
+
142
+ // IsValid 校验策略类型是否合法。
143
+ func (t PolicyType) IsValid() bool {
144
+ switch t {
145
+ case PolicyTypeSystem, PolicyTypeCustom, PolicyTypeBoundary, PolicyTypeSession, PolicyTypeBreakGlass:
146
+ return true
147
+ default:
148
+ return false
149
+ }
150
+ }
151
+
152
+ // IsSystemManaged 系统策略只读,普通管理员不可编辑。
153
+ func (t PolicyType) IsSystemManaged() bool {
154
+ return t == PolicyTypeSystem
155
+ }
156
+
157
+ // Effect 策略语句效果。Deny 始终优先于 Allow。
158
+ type Effect string
159
+
160
+ const (
161
+ // EffectAllow 允许
162
+ EffectAllow Effect = "Allow"
163
+ // EffectDeny 拒绝(全局优先)
164
+ EffectDeny Effect = "Deny"
165
+ )
166
+
167
+ // IsValid 校验效果是否合法。
168
+ func (e Effect) IsValid() bool {
169
+ return e == EffectAllow || e == EffectDeny
170
+ }
171
+
172
+ // PolicyStatus 策略版本状态机。
173
+ type PolicyStatus string
174
+
175
+ const (
176
+ // PolicyStatusDraft 草稿
177
+ PolicyStatusDraft PolicyStatus = "draft"
178
+ // PolicyStatusPendingApproval 待审批(高风险策略发布前)
179
+ PolicyStatusPendingApproval PolicyStatus = "pending_approval"
180
+ // PolicyStatusActive 已生效
181
+ PolicyStatusActive PolicyStatus = "active"
182
+ // PolicyStatusArchived 已归档(被新版本取代,终态)
183
+ PolicyStatusArchived PolicyStatus = "archived"
184
+ // PolicyStatusDiscarded 已废弃(终态)
185
+ PolicyStatusDiscarded PolicyStatus = "discarded"
186
+ )
187
+
188
+ // policyTransitions 策略状态机允许的流转。终态显式置空 slice,防 CanTransitionTo 漏判。
189
+ var policyTransitions = map[PolicyStatus][]PolicyStatus{
190
+ PolicyStatusDraft: {PolicyStatusPendingApproval, PolicyStatusDiscarded},
191
+ PolicyStatusPendingApproval: {PolicyStatusActive, PolicyStatusDraft, PolicyStatusDiscarded},
192
+ PolicyStatusActive: {PolicyStatusArchived},
193
+ PolicyStatusArchived: {},
194
+ PolicyStatusDiscarded: {},
195
+ }
196
+
197
+ // IsValid 校验状态是否合法。
198
+ func (s PolicyStatus) IsValid() bool {
199
+ _, ok := policyTransitions[s]
200
+ return ok
201
+ }
202
+
203
+ // IsTerminal 是否终态。
204
+ func (s PolicyStatus) IsTerminal() bool {
205
+ next, ok := policyTransitions[s]
206
+ return ok && len(next) == 0
207
+ }
208
+
209
+ // CanTransitionTo 判断能否从当前状态流转到目标状态。
210
+ func (s PolicyStatus) CanTransitionTo(target PolicyStatus) bool {
211
+ for _, allowed := range policyTransitions[s] {
212
+ if allowed == target {
213
+ return true
214
+ }
215
+ }
216
+ return false
217
+ }
218
+
219
+ // GroupSourceType 用户组来源类型。
220
+ //
221
+ // local 由控制台维护;system 由迁移或系统注册生成;sso 由外部身份源同步。非 local 组不允许在控制台
222
+ // 直接修改基础资料、成员或策略绑定。
223
+ type GroupSourceType string
224
+
225
+ const (
226
+ // GroupSourceTypeLocal 控制台本地维护。
227
+ GroupSourceTypeLocal GroupSourceType = "local"
228
+ // GroupSourceTypeSystem 系统内置。
229
+ GroupSourceTypeSystem GroupSourceType = "system"
230
+ // GroupSourceTypeSSO 外部身份源同步。
231
+ GroupSourceTypeSSO GroupSourceType = "sso"
232
+ )
233
+
234
+ // IsValid 校验用户组来源类型是否合法。
235
+ func (t GroupSourceType) IsValid() bool {
236
+ switch t {
237
+ case GroupSourceTypeLocal, GroupSourceTypeSystem, GroupSourceTypeSSO:
238
+ return true
239
+ default:
240
+ return false
241
+ }
242
+ }
243
+
244
+ // IsEditableInConsole 判断该来源是否允许控制台直接编辑。
245
+ func (t GroupSourceType) IsEditableInConsole() bool {
246
+ return t == GroupSourceTypeLocal
247
+ }
248
+
249
+ // GroupSyncStatus 用户组外部同步状态。
250
+ type GroupSyncStatus string
251
+
252
+ const (
253
+ // GroupSyncStatusNotApplicable 本地或系统组不适用外部同步。
254
+ GroupSyncStatusNotApplicable GroupSyncStatus = "not_applicable"
255
+ // GroupSyncStatusSynced 外部身份源已同步。
256
+ GroupSyncStatusSynced GroupSyncStatus = "synced"
257
+ // GroupSyncStatusSyncing 正在同步。
258
+ GroupSyncStatusSyncing GroupSyncStatus = "syncing"
259
+ // GroupSyncStatusError 最近一次同步失败。
260
+ GroupSyncStatusError GroupSyncStatus = "error"
261
+ )
262
+
263
+ // IsValid 校验用户组同步状态是否合法。
264
+ func (s GroupSyncStatus) IsValid() bool {
265
+ switch s {
266
+ case GroupSyncStatusNotApplicable, GroupSyncStatusSynced, GroupSyncStatusSyncing, GroupSyncStatusError:
267
+ return true
268
+ default:
269
+ return false
270
+ }
271
+ }
272
+
273
+ // Sensitivity 字段 / 资源敏感度等级(由低到高)。
274
+ type Sensitivity string
275
+
276
+ const (
277
+ // SensitivityPublic 公开
278
+ SensitivityPublic Sensitivity = "public"
279
+ // SensitivityInternal 内部
280
+ SensitivityInternal Sensitivity = "internal"
281
+ // SensitivityRestricted 受限
282
+ SensitivityRestricted Sensitivity = "restricted"
283
+ // SensitivitySensitive 敏感(PII / 财务)
284
+ SensitivitySensitive Sensitivity = "sensitive"
285
+ // SensitivitySecret 机密(凭证,写后不回显)
286
+ SensitivitySecret Sensitivity = "secret"
287
+ )
288
+
289
+ // sensitivityRank 敏感度排序值,用于 max_sensitivity 条件比较。
290
+ var sensitivityRank = map[Sensitivity]int{
291
+ SensitivityPublic: 0,
292
+ SensitivityInternal: 1,
293
+ SensitivityRestricted: 2,
294
+ SensitivitySensitive: 3,
295
+ SensitivitySecret: 4,
296
+ }
297
+
298
+ // IsValid 校验敏感度是否合法。
299
+ func (s Sensitivity) IsValid() bool {
300
+ _, ok := sensitivityRank[s]
301
+ return ok
302
+ }
303
+
304
+ // Rank 返回敏感度排序值,未知值返回最高级(最严格 fail-safe)。
305
+ func (s Sensitivity) Rank() int {
306
+ if rank, ok := sensitivityRank[s]; ok {
307
+ return rank
308
+ }
309
+ return sensitivityRank[SensitivitySecret]
310
+ }
311
+
312
+ // AtMost 判断当前敏感度是否不超过上限(用于 max_sensitivity 条件)。
313
+ func (s Sensitivity) AtMost(ceiling Sensitivity) bool {
314
+ return s.Rank() <= ceiling.Rank()
315
+ }
316
+
317
+ // MaskingStrategy 字段脱敏策略。
318
+ type MaskingStrategy string
319
+
320
+ const (
321
+ // MaskingFull 完全遮蔽
322
+ MaskingFull MaskingStrategy = "full"
323
+ // MaskingPartial 部分遮蔽(如手机号中间四位)
324
+ MaskingPartial MaskingStrategy = "partial"
325
+ // MaskingHash 哈希
326
+ MaskingHash MaskingStrategy = "hash"
327
+ // MaskingNone 不脱敏
328
+ MaskingNone MaskingStrategy = "none"
329
+ )
330
+
331
+ // IsValid 校验脱敏策略是否合法。
332
+ func (m MaskingStrategy) IsValid() bool {
333
+ switch m {
334
+ case MaskingFull, MaskingPartial, MaskingHash, MaskingNone:
335
+ return true
336
+ default:
337
+ return false
338
+ }
339
+ }
340
+
341
+ // RiskLevel 动作 / 页面动作风险等级。
342
+ type RiskLevel string
343
+
344
+ const (
345
+ // RiskLevelLow 低风险
346
+ RiskLevelLow RiskLevel = "low"
347
+ // RiskLevelMedium 中风险
348
+ RiskLevelMedium RiskLevel = "medium"
349
+ // RiskLevelHigh 高风险(求值绕过内存缓存实时校验 + 写决策日志)
350
+ RiskLevelHigh RiskLevel = "high"
351
+ // RiskLevelCritical 极高风险(强制审批 + MFA)
352
+ RiskLevelCritical RiskLevel = "critical"
353
+ )
354
+
355
+ // IsValid 校验风险等级是否合法。
356
+ func (l RiskLevel) IsValid() bool {
357
+ switch l {
358
+ case RiskLevelLow, RiskLevelMedium, RiskLevelHigh, RiskLevelCritical:
359
+ return true
360
+ default:
361
+ return false
362
+ }
363
+ }
364
+
365
+ // RequiresDecisionLog 高风险及以上动作必须写访问决策日志。
366
+ func (l RiskLevel) RequiresDecisionLog() bool {
367
+ return l == RiskLevelHigh || l == RiskLevelCritical
368
+ }
369
+
370
+ // AuditLevel 页面动作审计等级。
371
+ type AuditLevel string
372
+
373
+ const (
374
+ // AuditLevelNone 不审计
375
+ AuditLevelNone AuditLevel = "none"
376
+ // AuditLevelDecision 仅记决策日志
377
+ AuditLevelDecision AuditLevel = "decision"
378
+ // AuditLevelOperation 仅记操作日志
379
+ AuditLevelOperation AuditLevel = "operation"
380
+ // AuditLevelDecisionAndOperation 决策 + 操作双记
381
+ AuditLevelDecisionAndOperation AuditLevel = "decision_and_operation"
382
+ )
383
+
384
+ // IsValid 校验审计等级是否合法。
385
+ func (l AuditLevel) IsValid() bool {
386
+ switch l {
387
+ case AuditLevelNone, AuditLevelDecision, AuditLevelOperation, AuditLevelDecisionAndOperation:
388
+ return true
389
+ default:
390
+ return false
391
+ }
392
+ }
393
+
394
+ // Placement 页面动作摆放位置。
395
+ type Placement string
396
+
397
+ const (
398
+ // PlacementToolbar 工具栏
399
+ PlacementToolbar Placement = "toolbar"
400
+ // PlacementRow 行操作
401
+ PlacementRow Placement = "row"
402
+ // PlacementDetail 详情页操作
403
+ PlacementDetail Placement = "detail"
404
+ // PlacementDrawerFooter 抽屉底部操作
405
+ PlacementDrawerFooter Placement = "drawer_footer"
406
+ // PlacementBatch 批量操作
407
+ PlacementBatch Placement = "batch"
408
+ // PlacementPage 页面级操作(页面头部主操作,如导出 / 注册 / 详情页主按钮)
409
+ PlacementPage Placement = "page"
410
+ // PlacementInspector 侧栏检视面板操作(工作台 inspector / 详情侧栏内的动作)
411
+ PlacementInspector Placement = "inspector"
412
+ )
413
+
414
+ // IsValid 校验摆放位置是否合法。
415
+ func (p Placement) IsValid() bool {
416
+ switch p {
417
+ case PlacementToolbar, PlacementRow, PlacementDetail, PlacementDrawerFooter, PlacementBatch, PlacementPage, PlacementInspector:
418
+ return true
419
+ default:
420
+ return false
421
+ }
422
+ }
423
+
424
+ // ScopeType 绑定作用域 / 资源归属维度(承载粗粒度边界与继承)。
425
+ type ScopeType string
426
+
427
+ const (
428
+ // ScopeTypeGlobal 全局
429
+ ScopeTypeGlobal ScopeType = "global"
430
+ // ScopeTypeProduct 产品线。
431
+ ScopeTypeProduct ScopeType = "product"
432
+ // ScopeTypeOrganization 跨产品共享组织。
433
+ ScopeTypeOrganization ScopeType = "organization"
434
+ // ScopeTypeWorkspace 产品自有工作区。
435
+ ScopeTypeWorkspace ScopeType = "workspace"
436
+ // ScopeTypeMerchant 商户(marketplace 卖家,隔离维度 exact-match)
437
+ ScopeTypeMerchant ScopeType = "merchant"
438
+ // ScopeTypeTenant 租户(B2B 多租户,隔离维度 exact-match)
439
+ ScopeTypeTenant ScopeType = "tenant"
440
+ // ScopeTypeAgent 代理 / 分销主体
441
+ ScopeTypeAgent ScopeType = "agent"
442
+ // ScopeTypeFacility 设施(门店 / 厨房 / 仓库 / 配送区,scope_value 源 p_inventory_locations)
443
+ ScopeTypeFacility ScopeType = "facility"
444
+ )
445
+
446
+ // IsValid 校验作用域类型是否合法。
447
+ func (t ScopeType) IsValid() bool {
448
+ switch t {
449
+ case ScopeTypeGlobal, ScopeTypeProduct, ScopeTypeOrganization, ScopeTypeWorkspace,
450
+ ScopeTypeMerchant, ScopeTypeTenant, ScopeTypeAgent, ScopeTypeFacility:
451
+ return true
452
+ default:
453
+ return false
454
+ }
455
+ }
456
+
457
+ // RoleCodePlatformSuper 平台超级管理员角色编码(绑 sys.platform.super 全通配策略,取代旧 RBAC super_admin)。
458
+ //
459
+ // 管理护栏锚点(迁自旧 RBAC ErrLastSuperAdmin 语义):解绑该角色绑定时校验不可删除最后一个,
460
+ // 避免平台失去全部超管而锁死所有授权管理(与 AWS「最后一个 root/admin 保护」同向)。
461
+ const RoleCodePlatformSuper = "platform_super"
462
+
463
+ const (
464
+ // RoleCodeOrganizationOwner 组织所有者系统角色,仅允许组织权威服务管理绑定。
465
+ RoleCodeOrganizationOwner = "organization_owner"
466
+ // PolicyCodeOrganizationOwner 组织所有者系统策略,仅允许系统角色承载。
467
+ PolicyCodeOrganizationOwner = "sys.organization.owner"
468
+ )
469
+
470
+ // IsIsolationScope 隔离维度(无约束=拒绝,禁通配,须 exact-match)。
471
+ func (t ScopeType) IsIsolationScope() bool {
472
+ switch t {
473
+ case ScopeTypeOrganization, ScopeTypeWorkspace, ScopeTypeMerchant, ScopeTypeTenant, ScopeTypeAgent, ScopeTypeFacility:
474
+ return true
475
+ default:
476
+ return false
477
+ }
478
+ }
479
+
480
+ // Verb 规范动作动词。动作格式为 <domain>:<resource>:<verb>。
481
+ type Verb string
482
+
483
+ const (
484
+ VerbList Verb = "list"
485
+ VerbRead Verb = "read"
486
+ VerbCreate Verb = "create"
487
+ VerbUpdate Verb = "update"
488
+ VerbDelete Verb = "delete"
489
+ VerbManage Verb = "manage"
490
+ VerbExport Verb = "export"
491
+ VerbApprove Verb = "approve"
492
+ VerbReject Verb = "reject"
493
+ VerbRefund Verb = "refund"
494
+ VerbPublish Verb = "publish"
495
+ VerbRollback Verb = "rollback"
496
+ VerbConfigure Verb = "configure"
497
+ VerbImpersonate Verb = "impersonate"
498
+ VerbRun Verb = "run"
499
+ VerbRecover Verb = "recover"
500
+ VerbReplay Verb = "replay"
501
+ VerbRotate Verb = "rotate"
502
+ VerbRevoke Verb = "revoke"
503
+ VerbGrant Verb = "grant"
504
+ VerbAssign Verb = "assign"
505
+ VerbClose Verb = "close"
506
+ VerbModerate Verb = "moderate"
507
+ VerbBind Verb = "bind"
508
+ VerbAdjust Verb = "adjust"
509
+ VerbCancel Verb = "cancel"
510
+ VerbErase Verb = "erase"
511
+ VerbSuspend Verb = "suspend"
512
+ VerbVerify Verb = "verify"
513
+ VerbReplace Verb = "replace"
514
+ VerbRedeem Verb = "redeem"
515
+ )
516
+
517
+ // allVerbs 保存 IAM 动作语法允许的完整规范动词集合。
518
+ var allVerbs = []Verb{
519
+ VerbList, VerbRead, VerbCreate, VerbUpdate, VerbDelete, VerbManage, VerbExport,
520
+ VerbApprove, VerbReject, VerbRefund, VerbPublish, VerbRollback, VerbConfigure,
521
+ VerbImpersonate, VerbRun, VerbRecover, VerbReplay, VerbRotate, VerbRevoke,
522
+ VerbGrant, VerbAssign, VerbClose, VerbModerate, VerbBind, VerbAdjust,
523
+ VerbCancel, VerbErase, VerbSuspend, VerbVerify, VerbReplace, VerbRedeem,
524
+ }
525
+
526
+ // AllVerbs 返回全部规范动词副本。
527
+ func AllVerbs() []Verb {
528
+ out := make([]Verb, len(allVerbs))
529
+ copy(out, allVerbs)
530
+ return out
531
+ }
532
+
533
+ // IsValid 校验动词是否在规范集合内。
534
+ func (v Verb) IsValid() bool {
535
+ for _, item := range allVerbs {
536
+ if item == v {
537
+ return true
538
+ }
539
+ }
540
+ return false
541
+ }
542
+
543
+ // RoleCategory 角色类别(岗位语义分组)。
544
+ type RoleCategory string
545
+
546
+ const (
547
+ // RoleCategoryGlobal 全局后台岗位
548
+ RoleCategoryGlobal RoleCategory = "global"
549
+ // RoleCategoryProduct 产品上下文岗位
550
+ RoleCategoryProduct RoleCategory = "product"
551
+ // RoleCategoryService 服务账号岗位
552
+ RoleCategoryService RoleCategory = "service"
553
+ // RoleCategoryOrganization 组织成员岗位。
554
+ RoleCategoryOrganization RoleCategory = "organization"
555
+ )
556
+
557
+ // IsValid 校验角色类别是否合法。
558
+ func (c RoleCategory) IsValid() bool {
559
+ switch c {
560
+ case RoleCategoryGlobal, RoleCategoryProduct, RoleCategoryService, RoleCategoryOrganization:
561
+ return true
562
+ default:
563
+ return false
564
+ }
565
+ }
566
+
567
+ // ReasonKind 决策原因类别,用于前端区分 HTTP 状态码语义。
568
+ type ReasonKind string
569
+
570
+ const (
571
+ // ReasonKindAuthorization 授权类(映射 403)
572
+ ReasonKindAuthorization ReasonKind = "authorization"
573
+ // ReasonKindState 业务状态类(映射 409 / 422)
574
+ ReasonKindState ReasonKind = "state"
575
+ )
576
+
577
+ // 变更目标类型常量(PolicyChangeLog.TargetType / apierror 资源名,N3:禁止字面量散落)。
578
+ const (
579
+ // TargetTypePolicy 策略目标类型(控制台策略管理审计与 404 资源名)。
580
+ TargetTypePolicy = "iam_policy"
581
+ // TargetTypePrincipal 主体目标类型(控制台主体管理审计与 404 资源名)。
582
+ TargetTypePrincipal = "iam_principal"
583
+ // TargetTypeRole 角色目标类型(控制台角色管理审计与 404 资源名)。
584
+ TargetTypeRole = "iam_role"
585
+ // TargetTypeRoleBinding 角色绑定目标类型(绑定增删审计与 404 资源名)。
586
+ TargetTypeRoleBinding = "iam_role_binding"
587
+ // TargetTypePolicyBinding 策略绑定目标类型(绑定增删审计与 404 资源名)。
588
+ TargetTypePolicyBinding = "iam_policy_binding"
589
+ // TargetTypeGroup 用户组目标类型(控制台用户组管理审计与 404 资源名)。
590
+ TargetTypeGroup = "iam_group"
591
+ // TargetTypeGroupMember 用户组成员目标类型(成员增删审计与 404 资源名)。
592
+ TargetTypeGroupMember = "iam_group_member"
593
+ // TargetTypePageAction 页面动作契约目标类型(控制台页面动作管理审计与 404 资源名)。
594
+ TargetTypePageAction = "iam_page_action"
595
+ // TargetTypeFieldRule 字段脱敏规则目标类型(控制台字段规则管理审计与 404 资源名)。
596
+ TargetTypeFieldRule = "iam_field_rule"
597
+ // TargetTypeCredential 服务账号凭证目标类型(签发 / 轮换 / 吊销审计与 404 资源名)。
598
+ TargetTypeCredential = "iam_credential" //nolint:gosec // G101: 审计资源名常量,非凭据
599
+ )
600
+
601
+ // BindingChangeAction 绑定变更动作(IAMBindingChangedEvent 承载,前端 / 审计据此区分增删)。
602
+ type BindingChangeAction string
603
+
604
+ const (
605
+ // BindingChangeActionGranted 绑定建立(授予)
606
+ BindingChangeActionGranted BindingChangeAction = "granted"
607
+ // BindingChangeActionRevoked 绑定解除(回收)
608
+ BindingChangeActionRevoked BindingChangeAction = "revoked"
609
+ )
610
+
611
+ // BindingKind 绑定类别(IAMBindingChangedEvent 承载,区分角色绑定 / 策略绑定)。
612
+ type BindingKind string
613
+
614
+ const (
615
+ // BindingKindRole 角色绑定(principal ↔ role)
616
+ BindingKindRole BindingKind = "role"
617
+ // BindingKindPolicy 策略绑定(policy ↔ principal/role/group 三选一)
618
+ BindingKindPolicy BindingKind = "policy"
619
+ // BindingKindGroupMember 组成员绑定(principal ↔ group,主体经组继承组上策略绑定)
620
+ BindingKindGroupMember BindingKind = "group_member"
621
+ )
622
+
623
+ // 决策原因码(授权求值与页面动作状态前置条件产出)。
624
+ const (
625
+ // ReasonExplicitDeny 命中显式 Deny
626
+ ReasonExplicitDeny = "explicit_deny"
627
+ // ReasonNoMatchingAllow 无任一 Allow 匹配(默认拒绝)
628
+ ReasonNoMatchingAllow = "no_matching_allow"
629
+ // ReasonBoundaryExcluded 权限边界排除
630
+ ReasonBoundaryExcluded = "boundary_excluded"
631
+ // ReasonSessionExcluded 会话策略排除
632
+ ReasonSessionExcluded = "session_excluded"
633
+ // ReasonScopeMismatch 资源归属与工作区上下文冲突
634
+ ReasonScopeMismatch = "scope_mismatch"
635
+ // ReasonProductScopeDenied 工作区产品不在主体绑定的产品作用域内(路由级产品准入,取代旧 RBAC RequireProductScope)
636
+ ReasonProductScopeDenied = "product_scope_denied"
637
+ // ReasonAllowed 允许
638
+ ReasonAllowed = "allowed"
639
+ // ReasonPageActionStateRequirementNotMet 页面动作状态前置条件未满足
640
+ ReasonPageActionStateRequirementNotMet = "page_action_state_requirement_not_met"
641
+ // ReasonPageActionStateRequirementInvalid 页面动作状态前置条件契约非法
642
+ ReasonPageActionStateRequirementInvalid = "page_action_state_requirement_invalid"
643
+ )