spaps-server-quickstart 0.4.0__tar.gz → 0.5.1__tar.gz

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 (582) hide show
  1. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/.gitignore +17 -0
  2. spaps_server_quickstart-0.5.1/CHANGELOG.md +128 -0
  3. spaps_server_quickstart-0.5.1/PKG-INFO +288 -0
  4. spaps_server_quickstart-0.5.1/README.md +214 -0
  5. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/MIGRATION_GUIDE.md +7 -7
  6. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/TDD_PLAN.md +4 -4
  7. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/TM-ENV-001-checklist.md +2 -3
  8. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/TM-ENV-001-email-environment-safety.md +3 -3
  9. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/UPGRADING.md +1 -1
  10. spaps_server_quickstart-0.5.1/docs/feature-plans/INDEX.md +24 -0
  11. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/README.md +1 -1
  12. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/plan.md +3 -3
  13. spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/README.md +38 -0
  14. spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/backend.md +149 -0
  15. spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/describe-wave-1-principal-proxy-reuse.md +79 -0
  16. spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/flows.md +60 -0
  17. spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/frontend.md +34 -0
  18. spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/plan.md +202 -0
  19. spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/schema.mmd +61 -0
  20. spaps_server_quickstart-0.5.1/docs/feature-plans/trust-invariants-kernel/shared.md +120 -0
  21. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/security-audit-remediation-2026q1-tm007-tm008.md +6 -2
  22. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/pyproject.toml +13 -2
  23. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/__init__.py +1 -1
  24. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/domains/health_router.py +3 -5
  25. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/app_factory.py +2 -0
  26. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/auth/__init__.py +13 -10
  27. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/db/__init__.py +9 -1
  28. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/db/session.py +59 -1
  29. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/_db/model_registry.py +37 -0
  30. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/_db/rls.py +1 -1
  31. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/repository.py +4 -0
  32. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/router.py +17 -2
  33. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/schemas.py +65 -8
  34. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/service.py +133 -25
  35. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/errors.py +10 -0
  36. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/repository.py +14 -0
  37. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/router.py +126 -17
  38. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/schemas.py +28 -0
  39. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/service.py +125 -19
  40. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/applications/blueprints.py +563 -0
  41. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/models.py +6 -0
  42. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/repository.py +2 -1
  43. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/router.py +2 -0
  44. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/schemas.py +2 -0
  45. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/service.py +23 -4
  46. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/__init__.py +9 -0
  47. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/errors.py +82 -0
  48. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/models.py +131 -0
  49. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/repository.py +80 -0
  50. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/router.py +77 -0
  51. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/schemas.py +89 -0
  52. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/service.py +214 -0
  53. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/router.py +8 -4
  54. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/service.py +13 -2
  55. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/repository.py +7 -1
  56. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/router.py +98 -13
  57. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/schemas.py +9 -5
  58. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/service.py +457 -136
  59. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/billing_accounts/__init__.py +5 -0
  60. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/billing_accounts/models.py +55 -0
  61. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/billing_accounts/repository.py +110 -0
  62. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/billing_accounts/resolver.py +272 -0
  63. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/repository.py +18 -0
  64. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/router.py +48 -3
  65. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/schemas.py +13 -0
  66. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/service.py +134 -12
  67. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/cfo_roles/deps.py +85 -0
  68. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/me_router.py +2 -0
  69. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/router.py +6 -1
  70. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/service.py +11 -4
  71. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/repository.py +85 -0
  72. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/router.py +212 -69
  73. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/schemas.py +57 -2
  74. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/service.py +232 -48
  75. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/router.py +2 -0
  76. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/schemas.py +1 -1
  77. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/service.py +17 -4
  78. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/docs/discovery.py +50 -0
  79. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/repository.py +29 -0
  80. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/router.py +30 -0
  81. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/schemas.py +43 -0
  82. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/service.py +40 -19
  83. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/email/config.py +72 -0
  84. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/mailgun.py +13 -1
  85. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/router.py +22 -8
  86. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/service.py +347 -131
  87. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/repository.py +26 -0
  88. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/router.py +9 -1
  89. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/service.py +236 -99
  90. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/__init__.py +2 -0
  91. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/errors.py +61 -0
  92. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/models.py +70 -0
  93. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/repository.py +189 -0
  94. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/router.py +338 -0
  95. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/schemas.py +106 -0
  96. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/issue_reporting_platform/service.py +884 -0
  97. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/__init__.py +1 -0
  98. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/errors.py +25 -0
  99. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/evaluator.py +415 -0
  100. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/models.py +115 -0
  101. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/repository.py +138 -0
  102. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/router.py +198 -0
  103. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/schemas.py +124 -0
  104. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/policies/service.py +323 -0
  105. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/redirects.py +145 -0
  106. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/models.py +5 -0
  107. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/repository.py +18 -4
  108. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/router.py +2 -0
  109. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/service.py +14 -1
  110. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/router.py +14 -9
  111. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/schemas.py +2 -0
  112. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/service.py +25 -5
  113. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/admin_detection.py +5 -8
  114. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/blacklist_service.py +58 -36
  115. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/password_service.py +11 -0
  116. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/guest_checkout.py +27 -14
  117. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/models.py +3 -0
  118. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/repository.py +40 -3
  119. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/router.py +78 -7
  120. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/schemas.py +64 -5
  121. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/service.py +181 -43
  122. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/stripe/webhook_handler.py +561 -0
  123. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/__init__.py +2 -0
  124. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/errors.py +55 -0
  125. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/models.py +141 -0
  126. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/repository.py +318 -0
  127. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/router.py +263 -0
  128. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/schemas.py +149 -0
  129. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/support_telemetry_platform/service.py +529 -0
  130. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/router.py +33 -39
  131. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/schemas.py +0 -2
  132. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/service.py +3 -2
  133. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/delivery.py +71 -51
  134. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/domains/webhooks/destination_security.py +41 -0
  135. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/errors.py +7 -0
  136. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/schemas.py +5 -1
  137. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/service.py +39 -20
  138. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/signing.py +49 -0
  139. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/models.py +1 -1
  140. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/repository.py +2 -2
  141. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/router.py +36 -17
  142. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/schemas.py +1 -1
  143. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/service.py +1 -1
  144. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/logging.py +14 -1
  145. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/api_key.py +47 -32
  146. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/middleware/client_ip.py +91 -0
  147. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/middleware/envelope.py +169 -0
  148. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/error_handler.py +13 -1
  149. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/middleware/key_scope.py +169 -0
  150. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/local_mode.py +3 -1
  151. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/middleware/origin_validation.py +135 -0
  152. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/rate_limiting.py +119 -31
  153. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/spaps_deps.py +84 -13
  154. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/server_clients.py +35 -40
  155. spaps_server_quickstart-0.5.1/src/spaps_server_quickstart/sdk/trusted_service_middleware.py +283 -0
  156. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/seeds/cli.py +34 -27
  157. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/settings.py +1 -0
  158. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/spaps_app.py +100 -4
  159. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/spaps_settings.py +32 -3
  160. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/startup.py +200 -82
  161. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/alembic/env.py +1 -1
  162. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/alembic.ini +1 -1
  163. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/.env.production.example +1 -1
  164. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/.github/workflows/rollback.yml +1 -1
  165. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/Makefile +1 -1
  166. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/deploy/docker-compose.migration.yml +1 -1
  167. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/conftest.py +2 -2
  168. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/Makefile +1 -1
  169. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/.env.production.example +1 -1
  170. spaps_server_quickstart-0.5.1/tests/conftest.py +45 -0
  171. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_auth_contract.py +1 -1
  172. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_celery_contract.py +3 -3
  173. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_db_contract.py +18 -2
  174. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_dependencies_contract.py +2 -2
  175. spaps_server_quickstart-0.5.1/tests/contracts/test_golden_app_pack.py +126 -0
  176. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_manifest_parity.py +12 -13
  177. spaps_server_quickstart-0.5.1/tests/contracts/test_oss_hygiene_script.py +53 -0
  178. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_settings_contract.py +2 -2
  179. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/affiliate_referrals/test_router.py +203 -1
  180. spaps_server_quickstart-0.5.1/tests/domains/affiliate_referrals/test_schemas.py +76 -0
  181. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/affiliate_referrals/test_service.py +225 -2
  182. spaps_server_quickstart-0.5.1/tests/domains/agent_approvals/test_callback_url_validation.py +283 -0
  183. spaps_server_quickstart-0.5.1/tests/domains/agent_approvals/test_repository.py +77 -0
  184. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/agent_approvals/test_router.py +130 -14
  185. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/agent_approvals/test_service.py +377 -24
  186. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/applications/test_repository.py +27 -1
  187. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/applications/test_router.py +259 -0
  188. spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening/conftest.py +54 -0
  189. spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening/test_router.py +322 -0
  190. spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening/test_service.py +380 -0
  191. spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening/test_wiring.py +439 -0
  192. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/audit/test_router.py +12 -3
  193. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/audit/test_service.py +45 -3
  194. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/auth/test_refresh_token_anomaly.py +51 -0
  195. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/auth/test_repository.py +37 -0
  196. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/auth/test_router.py +255 -2
  197. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/auth/test_service.py +811 -2
  198. spaps_server_quickstart-0.5.1/tests/domains/billing_accounts/test_repository.py +251 -0
  199. spaps_server_quickstart-0.5.1/tests/domains/billing_accounts/test_resolver.py +211 -0
  200. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo/test_router.py +139 -1
  201. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo/test_service.py +450 -85
  202. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo_roles/test_router.py +258 -0
  203. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo_roles/test_service.py +25 -0
  204. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_enhanced_booking_service.py +113 -0
  205. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_repository.py +214 -0
  206. spaps_server_quickstart-0.5.1/tests/domains/dayrate/test_router.py +1118 -0
  207. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_service.py +429 -30
  208. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/device_flow/test_router.py +7 -1
  209. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/device_flow/test_service.py +79 -0
  210. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/docs/test_repository.py +41 -0
  211. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/docs/test_router.py +67 -1
  212. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/docs/test_service.py +64 -4
  213. spaps_server_quickstart-0.5.1/tests/domains/email/test_config.py +112 -0
  214. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/email/test_env_safety.py +1 -0
  215. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/email/test_router.py +93 -6
  216. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/email/test_service.py +395 -10
  217. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/entitlements/test_router.py +51 -0
  218. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/entitlements/test_service.py +395 -0
  219. spaps_server_quickstart-0.5.1/tests/domains/issue_reporting_platform/test_router.py +566 -0
  220. spaps_server_quickstart-0.5.1/tests/domains/issue_reporting_platform/test_service.py +813 -0
  221. spaps_server_quickstart-0.5.1/tests/domains/policies/test_evaluator.py +375 -0
  222. spaps_server_quickstart-0.5.1/tests/domains/policies/test_router.py +78 -0
  223. spaps_server_quickstart-0.5.1/tests/domains/policies/test_service.py +324 -0
  224. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/security/test_repository.py +84 -7
  225. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/security/test_router.py +44 -1
  226. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/security/test_service.py +20 -6
  227. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/self_service/test_router.py +141 -26
  228. spaps_server_quickstart-0.5.1/tests/domains/sessions/test_admin_detection.py +38 -0
  229. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_guest_checkout.py +252 -61
  230. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_repository.py +29 -3
  231. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_router.py +370 -6
  232. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_service.py +324 -17
  233. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_webhook_handler.py +411 -36
  234. spaps_server_quickstart-0.5.1/tests/domains/stripe/test_webhook_hardening.py +336 -0
  235. spaps_server_quickstart-0.5.1/tests/domains/support_telemetry_platform/__init__.py +2 -0
  236. spaps_server_quickstart-0.5.1/tests/domains/support_telemetry_platform/test_repository.py +116 -0
  237. spaps_server_quickstart-0.5.1/tests/domains/support_telemetry_platform/test_router.py +257 -0
  238. spaps_server_quickstart-0.5.1/tests/domains/support_telemetry_platform/test_service.py +361 -0
  239. spaps_server_quickstart-0.5.1/tests/domains/wallets/test_legacy_routes_tenant_binding.py +82 -0
  240. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/wallets/test_router.py +12 -15
  241. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/wallets/test_service.py +73 -0
  242. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_delivery.py +115 -9
  243. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_router.py +16 -6
  244. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_service.py +149 -60
  245. spaps_server_quickstart-0.5.1/tests/domains/whitelist/__init__.py +0 -0
  246. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/whitelist/test_repository.py +1 -1
  247. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/whitelist/test_router.py +70 -3
  248. spaps_server_quickstart-0.5.1/tests/middleware/__init__.py +0 -0
  249. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_api_key.py +34 -3
  250. spaps_server_quickstart-0.5.1/tests/middleware/test_client_ip.py +89 -0
  251. spaps_server_quickstart-0.5.1/tests/middleware/test_envelope.py +115 -0
  252. spaps_server_quickstart-0.5.1/tests/middleware/test_key_scope.py +234 -0
  253. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_origin_validation.py +27 -5
  254. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_rate_limiting.py +223 -15
  255. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_spaps_deps.py +173 -4
  256. spaps_server_quickstart-0.5.1/tests/seeds/test_cli.py +89 -0
  257. spaps_server_quickstart-0.5.1/tests/test_alembic_path_bootstrap.py +66 -0
  258. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_auth.py +89 -16
  259. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_auth_cookies.py +3 -3
  260. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_db_session.py +127 -8
  261. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_environment_safety.py +68 -0
  262. spaps_server_quickstart-0.5.1/tests/test_health_router.py +239 -0
  263. spaps_server_quickstart-0.5.1/tests/test_readme_snippets.py +25 -0
  264. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sdk.py +164 -25
  265. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sessions_blacklist.py +97 -7
  266. spaps_server_quickstart-0.5.1/tests/test_spaps_app.py +79 -0
  267. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_startup_validation.py +82 -0
  268. spaps_server_quickstart-0.4.0/CHANGELOG.md +0 -38
  269. spaps_server_quickstart-0.4.0/PKG-INFO +0 -337
  270. spaps_server_quickstart-0.4.0/README.md +0 -272
  271. spaps_server_quickstart-0.4.0/coverage.xml +0 -1607
  272. spaps_server_quickstart-0.4.0/docs/TM-ENV-001-summary.md +0 -177
  273. spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/domains/cfo_roles/deps.py +0 -39
  274. spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/domains/stripe/webhook_handler.py +0 -290
  275. spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/middleware/envelope.py +0 -129
  276. spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/middleware/key_scope.py +0 -80
  277. spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/middleware/origin_validation.py +0 -83
  278. spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/sdk/trusted_service_middleware.py +0 -110
  279. spaps_server_quickstart-0.4.0/tests/conftest.py +0 -9
  280. spaps_server_quickstart-0.4.0/tests/domains/dayrate/test_router.py +0 -560
  281. spaps_server_quickstart-0.4.0/tests/middleware/test_key_scope.py +0 -104
  282. spaps_server_quickstart-0.4.0/tests/test_health_router.py +0 -94
  283. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/.python-version +0 -0
  284. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/TM-002-IMPLEMENTATION.md +0 -0
  285. /spaps_server_quickstart-0.4.0/diff/plan.md → /spaps_server_quickstart-0.5.1/docs/feature-plans/_archived/diff-mvp-plan.md +0 -0
  286. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/AUDIT_REPORT.md +0 -0
  287. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/backend.md +0 -0
  288. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/flows.md +0 -0
  289. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/frontend.md +0 -0
  290. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/schema.mmd +0 -0
  291. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/feature-plans/security-audit-remediation-2026q1/shared.md +0 -0
  292. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/docs/messaging-broker-plan.md +0 -0
  293. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/scripts/release.sh +0 -0
  294. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/alembic/__init__.py +0 -0
  295. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/alembic/naming.py +0 -0
  296. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/__init__.py +0 -0
  297. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/dependencies.py +0 -0
  298. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/domains/__init__.py +0 -0
  299. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/domains/metrics_router.py +0 -0
  300. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/health.py +0 -0
  301. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/api/router.py +0 -0
  302. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/auth/cookies.py +0 -0
  303. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/auth/dependencies.py +0 -0
  304. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/auth_channels.py +0 -0
  305. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/db/alembic_status.py +0 -0
  306. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/db/migration_runner.py +0 -0
  307. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/__init__.py +0 -0
  308. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/_db/__init__.py +0 -0
  309. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/_db/base.py +0 -0
  310. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/_db/types.py +0 -0
  311. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/__init__.py +0 -0
  312. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/errors.py +0 -0
  313. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/affiliate_referrals/models.py +0 -0
  314. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/__init__.py +0 -0
  315. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/agent_approvals/models.py +0 -0
  316. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/applications/__init__.py +0 -0
  317. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/__init__.py +0 -0
  318. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/errors.py +0 -0
  319. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/models.py +0 -0
  320. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/repository.py +0 -0
  321. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/retention.py +0 -0
  322. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/audit/schemas.py +0 -0
  323. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/auth/__init__.py +0 -0
  324. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/__init__.py +0 -0
  325. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/errors.py +0 -0
  326. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/models.py +0 -0
  327. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo/quickbooks.py +0 -0
  328. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/__init__.py +0 -0
  329. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/errors.py +0 -0
  330. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/cfo_roles/schemas.py +0 -0
  331. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/__init__.py +0 -0
  332. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/errors.py +0 -0
  333. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/models.py +0 -0
  334. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/repository.py +0 -0
  335. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/router.py +0 -0
  336. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/schemas.py +0 -0
  337. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/crypto/service.py +0 -0
  338. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/__init__.py +0 -0
  339. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/errors.py +0 -0
  340. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/models.py +0 -0
  341. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/dayrate/pricing.py +0 -0
  342. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/__init__.py +0 -0
  343. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/repository.py +0 -0
  344. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/device_flow/store.py +0 -0
  345. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/__init__.py +0 -0
  346. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/errors.py +0 -0
  347. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/docs/models.py +0 -0
  348. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/__init__.py +0 -0
  349. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/errors.py +0 -0
  350. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/models.py +0 -0
  351. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/repository.py +0 -0
  352. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/email/schemas.py +0 -0
  353. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/__init__.py +0 -0
  354. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/errors.py +0 -0
  355. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/models.py +0 -0
  356. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/entitlements/schemas.py +0 -0
  357. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/errors.py +0 -0
  358. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/events.py +0 -0
  359. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/__init__.py +0 -0
  360. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/encryption.py +0 -0
  361. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/errors.py +0 -0
  362. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/models.py +0 -0
  363. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/repository.py +0 -0
  364. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/router.py +0 -0
  365. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/schemas.py +0 -0
  366. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/secure_messages/service.py +0 -0
  367. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/__init__.py +0 -0
  368. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/errors.py +0 -0
  369. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/security/schemas.py +0 -0
  370. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/__init__.py +0 -0
  371. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/self_service/errors.py +0 -0
  372. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/__init__.py +0 -0
  373. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/jwt_service.py +0 -0
  374. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/models.py +0 -0
  375. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/nonce_service.py +0 -0
  376. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/repository.py +0 -0
  377. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/router.py +0 -0
  378. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/schemas.py +0 -0
  379. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/sessions/service.py +0 -0
  380. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/__init__.py +0 -0
  381. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/stripe/errors.py +0 -0
  382. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/__init__.py +0 -0
  383. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/models.py +0 -0
  384. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/repository.py +0 -0
  385. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/router.py +0 -0
  386. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/schemas.py +0 -0
  387. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/users/service.py +0 -0
  388. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/__init__.py +0 -0
  389. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/chains/__init__.py +0 -0
  390. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/chains/dispatcher.py +0 -0
  391. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/chains/ethereum.py +0 -0
  392. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/chains/solana.py +0 -0
  393. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/models.py +0 -0
  394. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/wallets/repository.py +0 -0
  395. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/__init__.py +0 -0
  396. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/models.py +0 -0
  397. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/repository.py +0 -0
  398. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/webhooks/router.py +0 -0
  399. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/domains/whitelist/__init__.py +0 -0
  400. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/local_mode/__init__.py +0 -0
  401. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/local_mode/middleware.py +0 -0
  402. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/local_mode/personas.py +0 -0
  403. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/__init__.py +0 -0
  404. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/jwt_auth.py +0 -0
  405. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware/security_headers.py +0 -0
  406. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/middleware.py +0 -0
  407. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/rbac/__init__.py +0 -0
  408. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/schemas/__init__.py +0 -0
  409. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/schemas/health.py +0 -0
  410. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/__init__.py +0 -0
  411. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/_ttl_cache.py +0 -0
  412. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/admin_token_cache.py +0 -0
  413. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/feature_evaluator.py +0 -0
  414. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/sdk/role_hierarchy.py +0 -0
  415. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/secure_messaging.py +0 -0
  416. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/seeds/__init__.py +0 -0
  417. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/seeds/schemas.py +0 -0
  418. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/seeds/validator.py +0 -0
  419. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/tasks/__init__.py +0 -0
  420. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/tasks/celery_factory.py +0 -0
  421. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/tasks/health.py +0 -0
  422. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/tasks/notifications.py +0 -0
  423. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/.pre-commit-config.yaml +0 -0
  424. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/__init__.py +0 -0
  425. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/alembic/script.py.mako +0 -0
  426. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/alembic/versions/.gitkeep +0 -0
  427. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/docs/templates/API_DOCUMENTATION_TEMPLATE.md +0 -0
  428. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/docs/templates/DEBUG_REPORT_TEMPLATE.md +0 -0
  429. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/docs/templates/OPERATIONS_PLAYBOOK_TEMPLATE.md +0 -0
  430. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/__init__.py +0 -0
  431. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/admin/router.py +0 -0
  432. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/auth/local_routes.py +0 -0
  433. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/__init__.py +0 -0
  434. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/models.py +0 -0
  435. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/repository.py +0 -0
  436. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/router.py +0 -0
  437. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/schemas.py +0 -0
  438. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/domains/users/service.py +0 -0
  439. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/.githooks/pre-push +0 -0
  440. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/.github/workflows/deploy.yml +0 -0
  441. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/deploy/deploy.sh +0 -0
  442. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/deploy/post-deploy-verify.sh +0 -0
  443. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/deploy/pre-deploy-checks.sh +0 -0
  444. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/docker-compose.prod.yml +0 -0
  445. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/backup-db.sh +0 -0
  446. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/await_db.py +0 -0
  447. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/fetch-prod-db.sh +0 -0
  448. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/local-debug-loop.sh +0 -0
  449. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/start-db.sh +0 -0
  450. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/stop-db.sh +0 -0
  451. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/new-migration.sh +0 -0
  452. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/prepush.sh +0 -0
  453. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/operations/scripts/restore-db.sh +0 -0
  454. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/__init__.py +0 -0
  455. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/seeds/__init__.py +0 -0
  456. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/seeds/data/users.yaml +0 -0
  457. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/seeds/schemas/__init__.py +0 -0
  458. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/scripts/seeds/schemas/users.py +0 -0
  459. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/README.md +0 -0
  460. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/__init__.py +0 -0
  461. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/api/__init__.py +0 -0
  462. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/api/test_health.py +0 -0
  463. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/api/test_users_auth.py +0 -0
  464. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/__init__.py +0 -0
  465. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/example/__init__.py +0 -0
  466. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/example/conftest.py +0 -0
  467. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/users/__init__.py +0 -0
  468. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/domains/users/conftest.py +0 -0
  469. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/integration/__init__.py +0 -0
  470. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/integration/test_db_connectivity.py +0 -0
  471. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/unit/__init__.py +0 -0
  472. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/templates/tests/unit/test_settings.py +0 -0
  473. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/src/spaps_server_quickstart/testing.py +0 -0
  474. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/docker-compose.yml +0 -0
  475. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/.github/workflows/deploy.yml +0 -0
  476. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/Makefile +0 -0
  477. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/deploy.sh +0 -0
  478. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/post-deploy-verify.sh +0 -0
  479. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/pre-deploy-checks.sh +0 -0
  480. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/README.md +0 -0
  481. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/certs/.gitkeep +0 -0
  482. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/docker-compose.yml +0 -0
  483. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/nginx.conf +0 -0
  484. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/sites-available/.gitkeep +0 -0
  485. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/sites-enabled/.gitkeep +0 -0
  486. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/static/.gitkeep +0 -0
  487. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/deploy/reverse-proxy/up.sh +0 -0
  488. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/docker-compose.dev.yml +0 -0
  489. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/docker-compose.prod.yml +0 -0
  490. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/scripts/dev/await_db.py +0 -0
  491. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/scripts/dev/local-debug-loop.sh +0 -0
  492. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/scripts/dev/start-db.sh +0 -0
  493. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/operations/scripts/dev/stop-db.sh +0 -0
  494. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/templates/tests/conftest.py +0 -0
  495. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/__init__.py +0 -0
  496. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_app_factory_contract.py +0 -0
  497. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_health_contract.py +0 -0
  498. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/contracts/test_router_contract.py +0 -0
  499. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/__init__.py +0 -0
  500. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/affiliate_referrals/__init__.py +0 -0
  501. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/agent_approvals/__init__.py +0 -0
  502. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/applications/__init__.py +0 -0
  503. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/applications/test_service.py +0 -0
  504. {spaps_server_quickstart-0.4.0/tests/domains/audit → spaps_server_quickstart-0.5.1/tests/domains/approval_authz_prod_hardening}/__init__.py +0 -0
  505. {spaps_server_quickstart-0.4.0/tests/domains/auth → spaps_server_quickstart-0.5.1/tests/domains/audit}/__init__.py +0 -0
  506. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/audit/test_repository.py +0 -0
  507. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/audit/test_retention.py +0 -0
  508. {spaps_server_quickstart-0.4.0/tests/domains/cfo → spaps_server_quickstart-0.5.1/tests/domains/auth}/__init__.py +0 -0
  509. {spaps_server_quickstart-0.4.0/tests/domains/crypto → spaps_server_quickstart-0.5.1/tests/domains/cfo}/__init__.py +0 -0
  510. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo/test_repository.py +0 -0
  511. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/cfo_roles/__init__.py +0 -0
  512. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/conftest.py +0 -0
  513. {spaps_server_quickstart-0.4.0/tests/domains/dayrate → spaps_server_quickstart-0.5.1/tests/domains/crypto}/__init__.py +0 -0
  514. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/crypto/test_repository.py +0 -0
  515. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/crypto/test_router.py +0 -0
  516. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/crypto/test_service.py +0 -0
  517. {spaps_server_quickstart-0.4.0/tests/domains/device_flow → spaps_server_quickstart-0.5.1/tests/domains/dayrate}/__init__.py +0 -0
  518. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_allotment_service.py +0 -0
  519. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_booking_policy_service.py +0 -0
  520. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_booking_routes.py +0 -0
  521. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/dayrate/test_pricing.py +0 -0
  522. {spaps_server_quickstart-0.4.0/tests/domains/docs → spaps_server_quickstart-0.5.1/tests/domains/device_flow}/__init__.py +0 -0
  523. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/device_flow/test_store.py +0 -0
  524. {spaps_server_quickstart-0.4.0/tests/domains/email → spaps_server_quickstart-0.5.1/tests/domains/docs}/__init__.py +0 -0
  525. {spaps_server_quickstart-0.4.0/tests/domains/entitlements → spaps_server_quickstart-0.5.1/tests/domains/email}/__init__.py +0 -0
  526. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/email/test_repository.py +0 -0
  527. {spaps_server_quickstart-0.4.0/tests/domains/secure_messages → spaps_server_quickstart-0.5.1/tests/domains/entitlements}/__init__.py +0 -0
  528. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/entitlements/test_repository.py +0 -0
  529. {spaps_server_quickstart-0.4.0/tests/domains/security → spaps_server_quickstart-0.5.1/tests/domains/policies}/__init__.py +0 -0
  530. {spaps_server_quickstart-0.4.0/tests/domains/self_service → spaps_server_quickstart-0.5.1/tests/domains/secure_messages}/__init__.py +0 -0
  531. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/secure_messages/test_encryption.py +0 -0
  532. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/secure_messages/test_router.py +0 -0
  533. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/secure_messages/test_service.py +0 -0
  534. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/secure_messages/test_tm013_security.py +0 -0
  535. {spaps_server_quickstart-0.4.0/tests/domains/sessions → spaps_server_quickstart-0.5.1/tests/domains/security}/__init__.py +0 -0
  536. {spaps_server_quickstart-0.4.0/tests/domains/stripe → spaps_server_quickstart-0.5.1/tests/domains/self_service}/__init__.py +0 -0
  537. {spaps_server_quickstart-0.4.0/tests/domains/users → spaps_server_quickstart-0.5.1/tests/domains/sessions}/__init__.py +0 -0
  538. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/sessions/test_repository.py +0 -0
  539. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/sessions/test_router.py +0 -0
  540. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/sessions/test_service.py +0 -0
  541. {spaps_server_quickstart-0.4.0/tests/domains/wallets → spaps_server_quickstart-0.5.1/tests/domains/stripe}/__init__.py +0 -0
  542. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/stripe/test_subscription_application_scoping.py +0 -0
  543. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/test_smoke.py +0 -0
  544. {spaps_server_quickstart-0.4.0/tests/domains/webhooks → spaps_server_quickstart-0.5.1/tests/domains/users}/__init__.py +0 -0
  545. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/users/test_repository.py +0 -0
  546. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/users/test_router.py +0 -0
  547. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/users/test_service.py +0 -0
  548. {spaps_server_quickstart-0.4.0/tests/domains/whitelist → spaps_server_quickstart-0.5.1/tests/domains/wallets}/__init__.py +0 -0
  549. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/wallets/test_chains.py +0 -0
  550. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/wallets/test_repository.py +0 -0
  551. {spaps_server_quickstart-0.4.0/tests/middleware → spaps_server_quickstart-0.5.1/tests/domains/webhooks}/__init__.py +0 -0
  552. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_repository.py +0 -0
  553. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/webhooks/test_signing.py +0 -0
  554. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/domains/whitelist/test_service.py +0 -0
  555. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_jwt_auth.py +0 -0
  556. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_local_mode.py +0 -0
  557. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/middleware/test_security_headers.py +0 -0
  558. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_alembic_naming.py +0 -0
  559. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_api_router.py +0 -0
  560. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_app_factory.py +0 -0
  561. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_auth_channels.py +0 -0
  562. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_auth_dependencies.py +0 -0
  563. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_bcrypt_compat.py +0 -0
  564. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_dev_data_pipeline.py +0 -0
  565. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_imports.py +0 -0
  566. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_local_mode.py +0 -0
  567. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_logging.py +0 -0
  568. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_middleware.py +0 -0
  569. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_migration_runner.py +0 -0
  570. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_migration_status.py +0 -0
  571. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_operations_templates.py +0 -0
  572. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_package_metadata.py +0 -0
  573. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_rbac.py +0 -0
  574. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_secure_messaging.py +0 -0
  575. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_seed_validation.py +0 -0
  576. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_session_autocommit.py +0 -0
  577. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sessions_jwt.py +0 -0
  578. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sessions_nonce.py +0 -0
  579. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_sessions_password.py +0 -0
  580. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_settings.py +0 -0
  581. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/tests/test_tasks.py +0 -0
  582. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.1}/todo.md +0 -0
@@ -78,6 +78,10 @@ storybook-static/
78
78
  # IDE
79
79
  .vscode/
80
80
  .idea/
81
+ .codex/
82
+ .mcp.json
83
+ .claude/settings.local.json
84
+ .claude/skills/
81
85
  *.swp
82
86
  *.swo
83
87
  *.swn
@@ -150,6 +154,13 @@ backup-feb8.sql
150
154
  # Stripe CLI
151
155
  .stripe-listen.pid
152
156
 
157
+ # Local modes/swarm artifacts
158
+ .ntm/
159
+ .skillbox/
160
+ MODES_ANALYSIS_PROGRESS.md
161
+ MODES_OF_REASONING_REPORT_AND_ANALYSIS_OF_PROJECT.md
162
+ MODES_SWARM/
163
+
153
164
  # OS files
154
165
  Thumbs.db
155
166
  Desktop.ini
@@ -168,3 +179,9 @@ playwright/.cache/
168
179
  # (keep package-lock.json for applications)
169
180
  # yarn.lock
170
181
  # pnpm-lock.yaml*.tgz
182
+
183
+ **/coverage.xml
184
+
185
+ context.yaml
186
+ MODES_OF_REASONING_SECOND_PASS_REPORT.md
187
+ skillbox-config/
@@ -0,0 +1,128 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ - No changes yet.
10
+
11
+ ## [0.5.0] - 2026-03-29
12
+
13
+ ### Added
14
+
15
+ - End-user issue-reporting flows, runtime token admin support, and support-telemetry helpers for downstream FastAPI services.
16
+ - Browser-friendly device-flow verification and expanded reusable database helper surface.
17
+
18
+ ### Fixed
19
+
20
+ - Magic-link redirect handling, stale session admin-email behavior, and related auth/session hardening.
21
+ - Hotspot complexity and coverage gaps across webhook, auth, and session paths.
22
+
23
+ ## [0.4.0] - 2026-02-11
24
+
25
+ ### Added
26
+
27
+ - Full domain rewrite covering auth, sessions, users, wallets, payments, entitlements, dayrate, agent approvals, affiliate referrals, email templates, and related operational domains.
28
+ - Approval capability gates and governance health endpoint.
29
+
30
+ ### Changed
31
+
32
+ - Production cutover to Python SPAPS stack (CI/CD, Docker Compose, deploy scripts).
33
+ - Consolidated SPAPS integration patterns into published packages.
34
+
35
+ ### Security
36
+
37
+ - Rate limiting by client IP.
38
+ - PII encryption startup checks.
39
+ - Webhook authentication hardening.
40
+ - Row-level locking on refresh tokens.
41
+ - Fail-closed settings defaults.
42
+
43
+ ## [0.3.0] - 2026-02-08
44
+
45
+ ### Added
46
+
47
+ - Contract tests and shared testing module.
48
+ - Health endpoint enhancements.
49
+
50
+ ### Changed
51
+
52
+ - Expanded coverage across settings, middleware, database, Celery, and auth helpers.
53
+
54
+ ## [0.2.3] - 2026-01-12
55
+
56
+ ### Fixed
57
+
58
+ - `SpapsAuthMiddleware` now skips execution when `authenticated_user` is already populated.
59
+
60
+ ## [0.2.2] - 2026-01-11
61
+
62
+ ### Added
63
+
64
+ - `fnmatch` glob support for `spaps_auth_exempt_paths`.
65
+ - Set-password endpoint support for authenticated users.
66
+ - Stripe webhook admin tooling for entitlement workflows.
67
+ - Tier 3 templates: seeds, tests, domain examples, docs.
68
+ - Startup validation, Alembic templates, and CI/CD workflow scaffolding.
69
+
70
+ ## [0.2.1] - 2025-12-01
71
+
72
+ ### Added
73
+
74
+ - Shared pgvector dev scripts: `start-db.sh`, `stop-db.sh`, `await_db.py`.
75
+ - Dynamic DNS resolver support for Docker reverse-proxy setups.
76
+
77
+ ### Fixed
78
+
79
+ - nginx DNS caching behavior.
80
+ - HTMA rate-limiting exemption handling.
81
+
82
+ ## [0.2.0] - 2025-10-15
83
+
84
+ ### Added
85
+
86
+ - Local auth bypass mode with pre-configured admin/user personas.
87
+ - Deployment check scripts (`pre-deploy`, `post-deploy`).
88
+ - Database caching workflow for local debug loops.
89
+ - Operational templates (Makefile, GHCR deploy, compose/reverse-proxy stubs).
90
+
91
+ ### Security
92
+
93
+ - Production guardrails for local-auth bypass mode.
94
+
95
+ ## [0.1.2] - 2025-10-15
96
+
97
+ ### Fixed
98
+
99
+ - CI pipeline trigger scoping and quickstart build stability.
100
+
101
+ ## [0.1.1] - 2025-10-14
102
+
103
+ ### Changed
104
+
105
+ - Maintenance release to unblock automated PyPI publishing workflow.
106
+
107
+ ## [0.1.0] - 2025-10-14
108
+
109
+ ### Added
110
+
111
+ - FastAPI lifespan handling for SPAPS auth cleanup.
112
+ - Migration and upgrading guidance for downstream services.
113
+ - Shared refresh-cookie configuration and browser helper exports.
114
+ - Expanded package exports for auth helpers and operational templates.
115
+ - RBAC role helpers and sample domain routers.
116
+ - Comprehensive unit tests across settings, middleware, DB, Celery, and auth helpers.
117
+
118
+ ## [0.0.2] - 2025-10-12
119
+
120
+ ### Added
121
+
122
+ - Declared the `spaps` Python client dependency for downstream installs and CI runs.
123
+
124
+ ## [0.0.1] - 2025-10-14
125
+
126
+ ### Added
127
+
128
+ - Initial `spaps-server-quickstart` scaffold with shared FastAPI/Celery/database utilities.
@@ -0,0 +1,288 @@
1
+ Metadata-Version: 2.4
2
+ Name: spaps-server-quickstart
3
+ Version: 0.5.1
4
+ Summary: Shared FastAPI/Celery scaffolding for Sweet Potato service backends.
5
+ Project-URL: Homepage, https://api.sweetpotato.dev
6
+ Project-URL: Repository, https://github.com/sweet-potato/spaps
7
+ Author-email: buildooor <buildooor@gmail.com>
8
+ License: MIT
9
+ Keywords: celery,fastapi,quickstart,spaps,sweet-potato
10
+ Classifier: Framework :: FastAPI
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3 :: Only
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Internet :: WWW/HTTP
17
+ Requires-Python: >=3.12
18
+ Requires-Dist: alembic<2.0,>=1.13.1
19
+ Requires-Dist: asyncpg<0.31,>=0.30.0
20
+ Requires-Dist: bcrypt<6.0,>=4.0.0
21
+ Requires-Dist: celery<6.0,>=5.5.3
22
+ Requires-Dist: cryptography<45.0,>=42.0.0
23
+ Requires-Dist: email-validator<3.0,>=2.1.0
24
+ Requires-Dist: eth-account<1.0,>=0.13.0
25
+ Requires-Dist: fastapi<0.119,>=0.118.0
26
+ Requires-Dist: greenlet<4.0,>=3.0.3
27
+ Requires-Dist: httpx<0.29,>=0.28.1
28
+ Requires-Dist: orjson<4.0,>=3.10.0
29
+ Requires-Dist: pgvector<0.5,>=0.4.1
30
+ Requires-Dist: psycopg[binary]<3.3,>=3.2.10
31
+ Requires-Dist: pydantic-settings<3.0,>=2.3.0
32
+ Requires-Dist: pydantic<3.0,>=2.8.0
33
+ Requires-Dist: pyjwt<3.0,>=2.8.0
34
+ Requires-Dist: python-dotenv<2.0,>=1.0.1
35
+ Requires-Dist: redis<7.0,>=6.4.0
36
+ Requires-Dist: slowapi<1.0,>=0.1.9
37
+ Requires-Dist: solders<1.0,>=0.21.0
38
+ Requires-Dist: spaps>=0.1.2
39
+ Requires-Dist: sqlalchemy<3.0,>=2.0.30
40
+ Requires-Dist: stripe<12.0,>=8.0.0
41
+ Requires-Dist: structlog<26.0,>=25.4.0
42
+ Requires-Dist: uvicorn[standard]<0.38,>=0.37.0
43
+ Provides-Extra: dev
44
+ Requires-Dist: anyio<5.0,>=4.4.0; extra == 'dev'
45
+ Requires-Dist: bcrypt<6.0,>=4.0.0; extra == 'dev'
46
+ Requires-Dist: coverage<8.0,>=7.4.0; extra == 'dev'
47
+ Requires-Dist: docker<8.0,>=7.0.0; extra == 'dev'
48
+ Requires-Dist: filelock<4.0,>=3.12.0; extra == 'dev'
49
+ Requires-Dist: httpx<0.29,>=0.28.1; extra == 'dev'
50
+ Requires-Dist: mypy<1.12,>=1.10.0; extra == 'dev'
51
+ Requires-Dist: pytest-asyncio<0.24,>=0.23.0; extra == 'dev'
52
+ Requires-Dist: pytest-cov<6.0,>=5.0.0; extra == 'dev'
53
+ Requires-Dist: pytest-testmon<3.0,>=2.1.0; extra == 'dev'
54
+ Requires-Dist: pytest-xdist<4.0,>=3.6.1; extra == 'dev'
55
+ Requires-Dist: pytest<9.0,>=8.2.0; extra == 'dev'
56
+ Requires-Dist: respx<0.23,>=0.22.0; extra == 'dev'
57
+ Requires-Dist: ruff<0.5,>=0.4.1; extra == 'dev'
58
+ Requires-Dist: testcontainers[postgres]<5.0,>=4.0.0; extra == 'dev'
59
+ Requires-Dist: types-pyyaml<7.0,>=6.0.0; extra == 'dev'
60
+ Provides-Extra: release
61
+ Requires-Dist: build<2.0,>=1.2.1; extra == 'release'
62
+ Requires-Dist: twine<6.0,>=5.0.0; extra == 'release'
63
+ Provides-Extra: testing
64
+ Requires-Dist: docker<8.0,>=7.0.0; extra == 'testing'
65
+ Requires-Dist: filelock<4.0,>=3.12.0; extra == 'testing'
66
+ Requires-Dist: httpx<0.29,>=0.28.1; extra == 'testing'
67
+ Requires-Dist: pytest-asyncio<0.24,>=0.23.0; extra == 'testing'
68
+ Requires-Dist: pytest-testmon<3.0,>=2.1.0; extra == 'testing'
69
+ Requires-Dist: pytest-xdist<4.0,>=3.6.1; extra == 'testing'
70
+ Requires-Dist: pytest<9.0,>=8.2.0; extra == 'testing'
71
+ Requires-Dist: respx<0.23,>=0.22.0; extra == 'testing'
72
+ Requires-Dist: testcontainers[postgres]<5.0,>=4.0.0; extra == 'testing'
73
+ Description-Content-Type: text/markdown
74
+
75
+ # spaps-server-quickstart
76
+
77
+ Reusable FastAPI, SQLAlchemy, Celery, auth, and operational scaffolding for SPAPS-aligned Python services. This is the active backend package in this repository.
78
+
79
+ Examples in this README use placeholders such as `https://api.example.test` and local-only database URLs. Replace them with values from your own environment.
80
+
81
+ ## Install
82
+
83
+ ```bash
84
+ pip install spaps-server-quickstart
85
+ ```
86
+
87
+ This package targets Python 3.12+.
88
+
89
+ ## When It Fits
90
+
91
+ | Need | Package gives you |
92
+ | --- | --- |
93
+ | A real FastAPI starting point | `create_app`, settings loaders, request logging, and startup checks |
94
+ | Shared auth and RBAC | SPAPS auth middleware, auth channels, cookies, and role dependencies |
95
+ | Async database plumbing | SQLAlchemy 2 async session helpers and Alembic support |
96
+ | Operational scaffolding | Celery setup, deploy templates, local-mode helpers, and service SDK utilities |
97
+
98
+ ## Quick Start
99
+
100
+ ```python
101
+ from fastapi import APIRouter
102
+
103
+ from spaps_server_quickstart import create_app
104
+ from spaps_server_quickstart.settings import (
105
+ BaseServiceSettings,
106
+ create_settings_loader,
107
+ )
108
+
109
+
110
+ class ExampleSettings(BaseServiceSettings):
111
+ app_name: str = "Example Service"
112
+ spaps_auth_enabled: bool = False
113
+
114
+
115
+ router = APIRouter()
116
+
117
+
118
+ @router.get("/health")
119
+ async def health() -> dict[str, bool]:
120
+ return {"ok": True}
121
+
122
+
123
+ app = create_app(
124
+ settings_loader=create_settings_loader(ExampleSettings),
125
+ api_router=router,
126
+ )
127
+ ```
128
+
129
+ ## What the Package Ships
130
+
131
+ | Area | Highlights |
132
+ | --- | --- |
133
+ | App lifecycle | `create_app`, startup validation, logging, CORS wiring |
134
+ | Auth | `SpapsAuthMiddleware`, auth cookies, auth channel service, local mode |
135
+ | Routing and RBAC | Base router builder, authenticated-user dependencies, `require_roles`, `has_required_roles` |
136
+ | Database | Async sessionmaker factory, migration runner, Alembic helpers |
137
+ | Tasks | Celery app factory plus notification and ping task helpers |
138
+ | Service SDK helpers | Admin token cache, server-side SPAPS clients, trusted-service middleware, feature evaluation |
139
+ | Templates | Domain examples, tests, deployment scaffolding, and local operations helpers |
140
+ | Reference contract | The `golden_path` app blueprint, seeded paid-access policy, and downstream runbook for the core auth -> billing -> entitlement -> access loop |
141
+
142
+ ## Golden App Pack
143
+
144
+ If you want one SPAPS-native reference contract instead of a blank scaffold, start with the `golden_path` blueprint.
145
+
146
+ It is the canonical pack for:
147
+
148
+ - browser auth and session bootstrap
149
+ - Stripe checkout or subscription flows
150
+ - entitlement projection into `paid_access`
151
+ - policy-gated access through the seeded `access-paid-features` rule
152
+ - an operator runbook under `docs/downstream_apps/golden-path-reference/`
153
+
154
+ ## Local Development Mode
155
+
156
+ Set `DEVELOPMENT_ENVIRONMENT=local` to enable local auth bypass in development and tests.
157
+
158
+ ```python
159
+ from spaps_server_quickstart.local_mode import (
160
+ LocalAuthMiddleware,
161
+ get_default_registry,
162
+ )
163
+ from spaps_server_quickstart.settings import BaseServiceSettings
164
+
165
+ settings = BaseServiceSettings(development_environment="local")
166
+
167
+ if settings.is_local_development:
168
+ app.add_middleware(LocalAuthMiddleware, registry=get_default_registry())
169
+ ```
170
+
171
+ Default personas:
172
+
173
+ | Persona | Token | Roles |
174
+ | --- | --- | --- |
175
+ | Admin | `local-admin` | `admin`, `user` |
176
+ | User | `local-user` | `user` |
177
+
178
+ ## Configuration
179
+
180
+ Common settings exposed through `BaseServiceSettings`:
181
+
182
+ | Setting | Purpose |
183
+ | --- | --- |
184
+ | `development_environment` | Enables local bypass mode when set to `local` |
185
+ | `spaps_auth_enabled` | Turns SPAPS auth middleware on or off |
186
+ | `spaps_auth_exempt_paths` | Comma-separated paths that skip SPAPS auth |
187
+ | `cors_allow_origins` | Shared CORS configuration |
188
+ | `database_url` | Async SQLAlchemy database URL |
189
+ | `redis_url` | Redis URL used by Celery defaults |
190
+ | `secure_messages_enabled` | Enables secure-messaging gateway support |
191
+
192
+ Example environment:
193
+
194
+ ```bash
195
+ DEVELOPMENT_ENVIRONMENT=local
196
+ SPAPS_API_URL=https://api.example.test
197
+ SPAPS_API_KEY=spaps_sec_example
198
+ DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/service
199
+ SPAPS_AUTH_EXEMPT_PATHS=/health,/docs
200
+ CORS_ALLOW_ORIGINS=http://localhost:3000,http://localhost:5173
201
+ ```
202
+
203
+ ## Validation
204
+
205
+ From the repository root, the `Makefile` is the canonical workflow:
206
+
207
+ ```bash
208
+ make install
209
+ make pytest
210
+ make lint
211
+ make typecheck
212
+ make pytest-cov
213
+ make test
214
+ ```
215
+
216
+ Useful additional commands:
217
+
218
+ ```bash
219
+ make pytest-full
220
+ make migrate
221
+ make new-migration MSG="add_example_table"
222
+ make local-up
223
+ ```
224
+
225
+ ## Troubleshooting
226
+
227
+ ### `make pytest` reports no affected tests
228
+
229
+ That is expected when testmon sees no impacted tests. Use `make pytest-full` when you need a full run.
230
+
231
+ ### Local auth bypass is not active
232
+
233
+ Confirm `DEVELOPMENT_ENVIRONMENT=local` is set before application startup and that `LocalAuthMiddleware` is wired into the app.
234
+
235
+ ### Unauthenticated routes still require auth
236
+
237
+ Check `spaps_auth_exempt_paths` and make sure the configured paths match the router paths exactly.
238
+
239
+ ### Startup fails on environment validation
240
+
241
+ Review the required settings and any safety checks triggered during startup.
242
+
243
+ ### I need a new service quickly
244
+
245
+ Start from the included templates, then keep the repo-root validation path intact while adapting domain code and settings.
246
+
247
+ ## Limitations
248
+
249
+ - This package is a scaffold, not a finished application.
250
+ - Downstream services still need their own routers, schemas, repositories, and deployment settings.
251
+ - Some operational templates intentionally need environment-specific edits before production use.
252
+
253
+ ## FAQ
254
+
255
+ ### Is this the active backend package in this repo?
256
+
257
+ Yes. This package replaces the old Node/Express stack as the active backend surface.
258
+
259
+ ### Does it include local auth bypass support?
260
+
261
+ Yes. Set `DEVELOPMENT_ENVIRONMENT=local` and wire in the local-mode helpers.
262
+
263
+ ### Can I use it without Celery?
264
+
265
+ Yes. Celery helpers are included, but you can compose only the pieces your service needs.
266
+
267
+ ### Does it include RBAC helpers?
268
+
269
+ Yes. Use `require_roles`, `has_required_roles`, and the authenticated-user dependencies.
270
+
271
+ ### What is the recommended validation path here?
272
+
273
+ From the repository root: `make pytest`, `make lint`, `make typecheck`, `make pytest-cov`, and `make test`.
274
+
275
+ ## Metadata
276
+
277
+ - `package_name`: `spaps-server-quickstart`
278
+ - `latest_version`: `0.5.0`
279
+ - `minimum_runtime`: `Python >=3.12`
280
+ - `api_base_url`: `https://api.sweetpotato.dev`
281
+
282
+ ## About Contributions
283
+
284
+ > *About Contributions:* Please don't take this the wrong way, but I do not accept outside contributions for any of my projects. I simply don't have the mental bandwidth to review anything, and it's my name on the thing, so I'm responsible for any problems it causes; thus, the risk-reward is highly asymmetric from my perspective. I'd also have to worry about other "stakeholders," which seems unwise for tools I mostly make for myself for free. Feel free to submit issues, and even PRs if you want to illustrate a proposed fix, but know I won't merge them directly. Instead, I'll have Claude or Codex review submissions via `gh` and independently decide whether and how to address them. Bug reports in particular are welcome. Sorry if this offends, but I want to avoid wasted time and hurt feelings. I understand this isn't in sync with the prevailing open-source ethos that seeks community contributions, but it's the only way I can move at this velocity and keep my sanity.
285
+
286
+ ## License
287
+
288
+ MIT
@@ -0,0 +1,214 @@
1
+ # spaps-server-quickstart
2
+
3
+ Reusable FastAPI, SQLAlchemy, Celery, auth, and operational scaffolding for SPAPS-aligned Python services. This is the active backend package in this repository.
4
+
5
+ Examples in this README use placeholders such as `https://api.example.test` and local-only database URLs. Replace them with values from your own environment.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ pip install spaps-server-quickstart
11
+ ```
12
+
13
+ This package targets Python 3.12+.
14
+
15
+ ## When It Fits
16
+
17
+ | Need | Package gives you |
18
+ | --- | --- |
19
+ | A real FastAPI starting point | `create_app`, settings loaders, request logging, and startup checks |
20
+ | Shared auth and RBAC | SPAPS auth middleware, auth channels, cookies, and role dependencies |
21
+ | Async database plumbing | SQLAlchemy 2 async session helpers and Alembic support |
22
+ | Operational scaffolding | Celery setup, deploy templates, local-mode helpers, and service SDK utilities |
23
+
24
+ ## Quick Start
25
+
26
+ ```python
27
+ from fastapi import APIRouter
28
+
29
+ from spaps_server_quickstart import create_app
30
+ from spaps_server_quickstart.settings import (
31
+ BaseServiceSettings,
32
+ create_settings_loader,
33
+ )
34
+
35
+
36
+ class ExampleSettings(BaseServiceSettings):
37
+ app_name: str = "Example Service"
38
+ spaps_auth_enabled: bool = False
39
+
40
+
41
+ router = APIRouter()
42
+
43
+
44
+ @router.get("/health")
45
+ async def health() -> dict[str, bool]:
46
+ return {"ok": True}
47
+
48
+
49
+ app = create_app(
50
+ settings_loader=create_settings_loader(ExampleSettings),
51
+ api_router=router,
52
+ )
53
+ ```
54
+
55
+ ## What the Package Ships
56
+
57
+ | Area | Highlights |
58
+ | --- | --- |
59
+ | App lifecycle | `create_app`, startup validation, logging, CORS wiring |
60
+ | Auth | `SpapsAuthMiddleware`, auth cookies, auth channel service, local mode |
61
+ | Routing and RBAC | Base router builder, authenticated-user dependencies, `require_roles`, `has_required_roles` |
62
+ | Database | Async sessionmaker factory, migration runner, Alembic helpers |
63
+ | Tasks | Celery app factory plus notification and ping task helpers |
64
+ | Service SDK helpers | Admin token cache, server-side SPAPS clients, trusted-service middleware, feature evaluation |
65
+ | Templates | Domain examples, tests, deployment scaffolding, and local operations helpers |
66
+ | Reference contract | The `golden_path` app blueprint, seeded paid-access policy, and downstream runbook for the core auth -> billing -> entitlement -> access loop |
67
+
68
+ ## Golden App Pack
69
+
70
+ If you want one SPAPS-native reference contract instead of a blank scaffold, start with the `golden_path` blueprint.
71
+
72
+ It is the canonical pack for:
73
+
74
+ - browser auth and session bootstrap
75
+ - Stripe checkout or subscription flows
76
+ - entitlement projection into `paid_access`
77
+ - policy-gated access through the seeded `access-paid-features` rule
78
+ - an operator runbook under `docs/downstream_apps/golden-path-reference/`
79
+
80
+ ## Local Development Mode
81
+
82
+ Set `DEVELOPMENT_ENVIRONMENT=local` to enable local auth bypass in development and tests.
83
+
84
+ ```python
85
+ from spaps_server_quickstart.local_mode import (
86
+ LocalAuthMiddleware,
87
+ get_default_registry,
88
+ )
89
+ from spaps_server_quickstart.settings import BaseServiceSettings
90
+
91
+ settings = BaseServiceSettings(development_environment="local")
92
+
93
+ if settings.is_local_development:
94
+ app.add_middleware(LocalAuthMiddleware, registry=get_default_registry())
95
+ ```
96
+
97
+ Default personas:
98
+
99
+ | Persona | Token | Roles |
100
+ | --- | --- | --- |
101
+ | Admin | `local-admin` | `admin`, `user` |
102
+ | User | `local-user` | `user` |
103
+
104
+ ## Configuration
105
+
106
+ Common settings exposed through `BaseServiceSettings`:
107
+
108
+ | Setting | Purpose |
109
+ | --- | --- |
110
+ | `development_environment` | Enables local bypass mode when set to `local` |
111
+ | `spaps_auth_enabled` | Turns SPAPS auth middleware on or off |
112
+ | `spaps_auth_exempt_paths` | Comma-separated paths that skip SPAPS auth |
113
+ | `cors_allow_origins` | Shared CORS configuration |
114
+ | `database_url` | Async SQLAlchemy database URL |
115
+ | `redis_url` | Redis URL used by Celery defaults |
116
+ | `secure_messages_enabled` | Enables secure-messaging gateway support |
117
+
118
+ Example environment:
119
+
120
+ ```bash
121
+ DEVELOPMENT_ENVIRONMENT=local
122
+ SPAPS_API_URL=https://api.example.test
123
+ SPAPS_API_KEY=spaps_sec_example
124
+ DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:5432/service
125
+ SPAPS_AUTH_EXEMPT_PATHS=/health,/docs
126
+ CORS_ALLOW_ORIGINS=http://localhost:3000,http://localhost:5173
127
+ ```
128
+
129
+ ## Validation
130
+
131
+ From the repository root, the `Makefile` is the canonical workflow:
132
+
133
+ ```bash
134
+ make install
135
+ make pytest
136
+ make lint
137
+ make typecheck
138
+ make pytest-cov
139
+ make test
140
+ ```
141
+
142
+ Useful additional commands:
143
+
144
+ ```bash
145
+ make pytest-full
146
+ make migrate
147
+ make new-migration MSG="add_example_table"
148
+ make local-up
149
+ ```
150
+
151
+ ## Troubleshooting
152
+
153
+ ### `make pytest` reports no affected tests
154
+
155
+ That is expected when testmon sees no impacted tests. Use `make pytest-full` when you need a full run.
156
+
157
+ ### Local auth bypass is not active
158
+
159
+ Confirm `DEVELOPMENT_ENVIRONMENT=local` is set before application startup and that `LocalAuthMiddleware` is wired into the app.
160
+
161
+ ### Unauthenticated routes still require auth
162
+
163
+ Check `spaps_auth_exempt_paths` and make sure the configured paths match the router paths exactly.
164
+
165
+ ### Startup fails on environment validation
166
+
167
+ Review the required settings and any safety checks triggered during startup.
168
+
169
+ ### I need a new service quickly
170
+
171
+ Start from the included templates, then keep the repo-root validation path intact while adapting domain code and settings.
172
+
173
+ ## Limitations
174
+
175
+ - This package is a scaffold, not a finished application.
176
+ - Downstream services still need their own routers, schemas, repositories, and deployment settings.
177
+ - Some operational templates intentionally need environment-specific edits before production use.
178
+
179
+ ## FAQ
180
+
181
+ ### Is this the active backend package in this repo?
182
+
183
+ Yes. This package replaces the old Node/Express stack as the active backend surface.
184
+
185
+ ### Does it include local auth bypass support?
186
+
187
+ Yes. Set `DEVELOPMENT_ENVIRONMENT=local` and wire in the local-mode helpers.
188
+
189
+ ### Can I use it without Celery?
190
+
191
+ Yes. Celery helpers are included, but you can compose only the pieces your service needs.
192
+
193
+ ### Does it include RBAC helpers?
194
+
195
+ Yes. Use `require_roles`, `has_required_roles`, and the authenticated-user dependencies.
196
+
197
+ ### What is the recommended validation path here?
198
+
199
+ From the repository root: `make pytest`, `make lint`, `make typecheck`, `make pytest-cov`, and `make test`.
200
+
201
+ ## Metadata
202
+
203
+ - `package_name`: `spaps-server-quickstart`
204
+ - `latest_version`: `0.5.0`
205
+ - `minimum_runtime`: `Python >=3.12`
206
+ - `api_base_url`: `https://api.sweetpotato.dev`
207
+
208
+ ## About Contributions
209
+
210
+ > *About Contributions:* Please don't take this the wrong way, but I do not accept outside contributions for any of my projects. I simply don't have the mental bandwidth to review anything, and it's my name on the thing, so I'm responsible for any problems it causes; thus, the risk-reward is highly asymmetric from my perspective. I'd also have to worry about other "stakeholders," which seems unwise for tools I mostly make for myself for free. Feel free to submit issues, and even PRs if you want to illustrate a proposed fix, but know I won't merge them directly. Instead, I'll have Claude or Codex review submissions via `gh` and independently decide whether and how to address them. Bug reports in particular are welcome. Sorry if this offends, but I want to avoid wasted time and hurt feelings. I understand this isn't in sync with the prevailing open-source ethos that seeks community contributions, but it's the only way I can move at this velocity and keep my sanity.
211
+
212
+ ## License
213
+
214
+ MIT