spaps-server-quickstart 0.4.0__tar.gz → 0.5.0__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 (536) hide show
  1. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/.gitignore +3 -0
  2. spaps_server_quickstart-0.5.0/CHANGELOG.md +116 -0
  3. spaps_server_quickstart-0.5.0/PKG-INFO +299 -0
  4. spaps_server_quickstart-0.5.0/README.md +226 -0
  5. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/MIGRATION_GUIDE.md +6 -6
  6. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/TDD_PLAN.md +4 -4
  7. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/TM-ENV-001-checklist.md +2 -2
  8. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/TM-ENV-001-email-environment-safety.md +3 -3
  9. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/TM-ENV-001-summary.md +1 -1
  10. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/UPGRADING.md +1 -1
  11. spaps_server_quickstart-0.5.0/docs/feature-plans/INDEX.md +23 -0
  12. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/feature-plans/security-audit-remediation-2026q1/README.md +1 -1
  13. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/feature-plans/security-audit-remediation-2026q1/plan.md +3 -3
  14. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/pyproject.toml +12 -2
  15. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/__init__.py +1 -1
  16. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/api/domains/health_router.py +2 -4
  17. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/db/__init__.py +9 -1
  18. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/db/session.py +59 -1
  19. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/_db/rls.py +1 -1
  20. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/affiliate_referrals/router.py +11 -1
  21. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/affiliate_referrals/schemas.py +65 -8
  22. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/affiliate_referrals/service.py +99 -24
  23. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/agent_approvals/errors.py +10 -0
  24. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/agent_approvals/repository.py +14 -0
  25. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/agent_approvals/router.py +124 -16
  26. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/agent_approvals/schemas.py +4 -0
  27. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/agent_approvals/service.py +90 -2
  28. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/__init__.py +9 -0
  29. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/errors.py +82 -0
  30. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/models.py +131 -0
  31. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/repository.py +80 -0
  32. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/router.py +77 -0
  33. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/schemas.py +89 -0
  34. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/approval_authz_prod_hardening/service.py +214 -0
  35. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/auth/router.py +4 -0
  36. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/auth/schemas.py +4 -0
  37. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/auth/service.py +406 -116
  38. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo/repository.py +18 -0
  39. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo/router.py +42 -1
  40. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo/schemas.py +10 -0
  41. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo/service.py +96 -9
  42. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/cfo_roles/deps.py +85 -0
  43. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo_roles/me_router.py +2 -0
  44. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo_roles/router.py +6 -1
  45. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo_roles/service.py +11 -4
  46. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/dayrate/router.py +131 -59
  47. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/dayrate/schemas.py +8 -0
  48. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/dayrate/service.py +31 -11
  49. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/device_flow/schemas.py +1 -1
  50. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/device_flow/service.py +10 -2
  51. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/email/config.py +72 -0
  52. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/email/mailgun.py +13 -1
  53. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/email/router.py +1 -0
  54. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/email/service.py +331 -128
  55. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/entitlements/service.py +161 -93
  56. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/issue_reporting_platform/__init__.py +2 -0
  57. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/issue_reporting_platform/errors.py +55 -0
  58. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/issue_reporting_platform/models.py +61 -0
  59. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/issue_reporting_platform/repository.py +164 -0
  60. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/issue_reporting_platform/router.py +277 -0
  61. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/issue_reporting_platform/schemas.py +93 -0
  62. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/issue_reporting_platform/service.py +409 -0
  63. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/admin_detection.py +3 -8
  64. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/guest_checkout.py +10 -0
  65. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/service.py +10 -0
  66. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/webhook_handler.py +76 -0
  67. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/support_telemetry_platform/__init__.py +2 -0
  68. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/support_telemetry_platform/errors.py +55 -0
  69. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/support_telemetry_platform/models.py +141 -0
  70. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/support_telemetry_platform/repository.py +318 -0
  71. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/support_telemetry_platform/router.py +262 -0
  72. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/support_telemetry_platform/schemas.py +149 -0
  73. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/support_telemetry_platform/service.py +527 -0
  74. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/delivery.py +48 -46
  75. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/domains/webhooks/destination_security.py +35 -0
  76. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/schemas.py +4 -0
  77. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/service.py +15 -13
  78. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/error_handler.py +13 -1
  79. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/key_scope.py +2 -0
  80. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/local_mode.py +3 -1
  81. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/rate_limiting.py +6 -2
  82. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/sdk/server_clients.py +35 -40
  83. spaps_server_quickstart-0.5.0/src/spaps_server_quickstart/sdk/trusted_service_middleware.py +283 -0
  84. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/seeds/cli.py +34 -27
  85. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/spaps_app.py +13 -1
  86. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/spaps_settings.py +22 -3
  87. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/startup.py +170 -83
  88. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/alembic/env.py +1 -1
  89. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/alembic.ini +1 -1
  90. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/.env.production.example +1 -1
  91. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/.github/workflows/rollback.yml +1 -1
  92. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/Makefile +1 -1
  93. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/deploy/docker-compose.migration.yml +1 -1
  94. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/conftest.py +2 -2
  95. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/Makefile +1 -1
  96. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/.env.production.example +1 -1
  97. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_auth_contract.py +1 -1
  98. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_celery_contract.py +3 -3
  99. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_db_contract.py +18 -2
  100. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_dependencies_contract.py +2 -2
  101. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_manifest_parity.py +12 -13
  102. spaps_server_quickstart-0.5.0/tests/contracts/test_oss_hygiene_script.py +53 -0
  103. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_settings_contract.py +2 -2
  104. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/affiliate_referrals/test_router.py +33 -0
  105. spaps_server_quickstart-0.5.0/tests/domains/affiliate_referrals/test_schemas.py +76 -0
  106. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/affiliate_referrals/test_service.py +199 -2
  107. spaps_server_quickstart-0.5.0/tests/domains/agent_approvals/test_repository.py +77 -0
  108. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/agent_approvals/test_router.py +119 -0
  109. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/agent_approvals/test_service.py +322 -10
  110. spaps_server_quickstart-0.5.0/tests/domains/approval_authz_prod_hardening/conftest.py +54 -0
  111. spaps_server_quickstart-0.5.0/tests/domains/approval_authz_prod_hardening/test_router.py +322 -0
  112. spaps_server_quickstart-0.5.0/tests/domains/approval_authz_prod_hardening/test_service.py +380 -0
  113. spaps_server_quickstart-0.5.0/tests/domains/approval_authz_prod_hardening/test_wiring.py +439 -0
  114. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/auth/test_refresh_token_anomaly.py +51 -0
  115. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/auth/test_router.py +62 -2
  116. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/auth/test_service.py +524 -0
  117. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/cfo/test_router.py +129 -1
  118. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/cfo/test_service.py +372 -83
  119. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/cfo_roles/test_router.py +258 -0
  120. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/cfo_roles/test_service.py +25 -0
  121. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/dayrate/test_repository.py +88 -0
  122. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/dayrate/test_router.py +188 -1
  123. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/dayrate/test_service.py +181 -0
  124. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/device_flow/test_service.py +31 -0
  125. spaps_server_quickstart-0.5.0/tests/domains/email/test_config.py +112 -0
  126. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/email/test_env_safety.py +1 -0
  127. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/email/test_router.py +6 -0
  128. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/email/test_service.py +300 -0
  129. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/entitlements/test_service.py +346 -0
  130. spaps_server_quickstart-0.5.0/tests/domains/issue_reporting_platform/test_router.py +405 -0
  131. spaps_server_quickstart-0.5.0/tests/domains/issue_reporting_platform/test_service.py +369 -0
  132. spaps_server_quickstart-0.5.0/tests/domains/sessions/test_admin_detection.py +38 -0
  133. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/stripe/test_guest_checkout.py +43 -0
  134. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/stripe/test_service.py +41 -0
  135. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/stripe/test_webhook_handler.py +66 -0
  136. spaps_server_quickstart-0.5.0/tests/domains/support_telemetry_platform/__init__.py +2 -0
  137. spaps_server_quickstart-0.5.0/tests/domains/support_telemetry_platform/test_repository.py +116 -0
  138. spaps_server_quickstart-0.5.0/tests/domains/support_telemetry_platform/test_router.py +255 -0
  139. spaps_server_quickstart-0.5.0/tests/domains/support_telemetry_platform/test_service.py +358 -0
  140. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/wallets/test_service.py +73 -0
  141. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/webhooks/test_delivery.py +18 -9
  142. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/webhooks/test_service.py +4 -2
  143. spaps_server_quickstart-0.5.0/tests/middleware/__init__.py +0 -0
  144. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/middleware/test_key_scope.py +6 -0
  145. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/middleware/test_rate_limiting.py +115 -5
  146. spaps_server_quickstart-0.5.0/tests/seeds/test_cli.py +89 -0
  147. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_auth_cookies.py +3 -3
  148. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_db_session.py +127 -8
  149. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_environment_safety.py +53 -0
  150. spaps_server_quickstart-0.5.0/tests/test_health_router.py +239 -0
  151. spaps_server_quickstart-0.5.0/tests/test_readme_snippets.py +25 -0
  152. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_sdk.py +164 -25
  153. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_startup_validation.py +55 -0
  154. spaps_server_quickstart-0.4.0/CHANGELOG.md +0 -38
  155. spaps_server_quickstart-0.4.0/PKG-INFO +0 -337
  156. spaps_server_quickstart-0.4.0/README.md +0 -272
  157. spaps_server_quickstart-0.4.0/coverage.xml +0 -1607
  158. spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/domains/cfo_roles/deps.py +0 -39
  159. spaps_server_quickstart-0.4.0/src/spaps_server_quickstart/sdk/trusted_service_middleware.py +0 -110
  160. spaps_server_quickstart-0.4.0/tests/test_health_router.py +0 -94
  161. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/.python-version +0 -0
  162. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/TM-002-IMPLEMENTATION.md +0 -0
  163. /spaps_server_quickstart-0.4.0/diff/plan.md → /spaps_server_quickstart-0.5.0/docs/feature-plans/_archived/diff-mvp-plan.md +0 -0
  164. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/feature-plans/security-audit-remediation-2026q1/AUDIT_REPORT.md +0 -0
  165. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/feature-plans/security-audit-remediation-2026q1/backend.md +0 -0
  166. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/feature-plans/security-audit-remediation-2026q1/flows.md +0 -0
  167. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/feature-plans/security-audit-remediation-2026q1/frontend.md +0 -0
  168. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/feature-plans/security-audit-remediation-2026q1/schema.mmd +0 -0
  169. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/feature-plans/security-audit-remediation-2026q1/shared.md +0 -0
  170. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/messaging-broker-plan.md +0 -0
  171. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/docs/security-audit-remediation-2026q1-tm007-tm008.md +0 -0
  172. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/scripts/release.sh +0 -0
  173. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/alembic/__init__.py +0 -0
  174. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/alembic/naming.py +0 -0
  175. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/api/__init__.py +0 -0
  176. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/api/dependencies.py +0 -0
  177. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/api/domains/__init__.py +0 -0
  178. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/api/domains/metrics_router.py +0 -0
  179. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/api/health.py +0 -0
  180. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/api/router.py +0 -0
  181. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/app_factory.py +0 -0
  182. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/auth/__init__.py +0 -0
  183. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/auth/cookies.py +0 -0
  184. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/auth/dependencies.py +0 -0
  185. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/auth_channels.py +0 -0
  186. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/db/alembic_status.py +0 -0
  187. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/db/migration_runner.py +0 -0
  188. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/__init__.py +0 -0
  189. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/_db/__init__.py +0 -0
  190. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/_db/base.py +0 -0
  191. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/_db/types.py +0 -0
  192. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/affiliate_referrals/__init__.py +0 -0
  193. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/affiliate_referrals/errors.py +0 -0
  194. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/affiliate_referrals/models.py +0 -0
  195. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/affiliate_referrals/repository.py +0 -0
  196. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/agent_approvals/__init__.py +0 -0
  197. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/agent_approvals/models.py +0 -0
  198. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/applications/__init__.py +0 -0
  199. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/applications/models.py +0 -0
  200. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/applications/repository.py +0 -0
  201. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/applications/router.py +0 -0
  202. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/applications/schemas.py +0 -0
  203. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/applications/service.py +0 -0
  204. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/audit/__init__.py +0 -0
  205. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/audit/errors.py +0 -0
  206. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/audit/models.py +0 -0
  207. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/audit/repository.py +0 -0
  208. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/audit/retention.py +0 -0
  209. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/audit/router.py +0 -0
  210. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/audit/schemas.py +0 -0
  211. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/audit/service.py +0 -0
  212. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/auth/__init__.py +0 -0
  213. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/auth/repository.py +0 -0
  214. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo/__init__.py +0 -0
  215. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo/errors.py +0 -0
  216. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo/models.py +0 -0
  217. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo/quickbooks.py +0 -0
  218. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo_roles/__init__.py +0 -0
  219. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo_roles/errors.py +0 -0
  220. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/cfo_roles/schemas.py +0 -0
  221. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/crypto/__init__.py +0 -0
  222. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/crypto/errors.py +0 -0
  223. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/crypto/models.py +0 -0
  224. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/crypto/repository.py +0 -0
  225. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/crypto/router.py +0 -0
  226. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/crypto/schemas.py +0 -0
  227. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/crypto/service.py +0 -0
  228. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/dayrate/__init__.py +0 -0
  229. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/dayrate/errors.py +0 -0
  230. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/dayrate/models.py +0 -0
  231. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/dayrate/pricing.py +0 -0
  232. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/dayrate/repository.py +0 -0
  233. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/device_flow/__init__.py +0 -0
  234. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/device_flow/repository.py +0 -0
  235. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/device_flow/router.py +0 -0
  236. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/device_flow/store.py +0 -0
  237. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/docs/__init__.py +0 -0
  238. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/docs/errors.py +0 -0
  239. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/docs/models.py +0 -0
  240. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/docs/repository.py +0 -0
  241. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/docs/router.py +0 -0
  242. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/docs/schemas.py +0 -0
  243. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/docs/service.py +0 -0
  244. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/email/__init__.py +0 -0
  245. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/email/errors.py +0 -0
  246. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/email/models.py +0 -0
  247. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/email/repository.py +0 -0
  248. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/email/schemas.py +0 -0
  249. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/entitlements/__init__.py +0 -0
  250. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/entitlements/errors.py +0 -0
  251. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/entitlements/models.py +0 -0
  252. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/entitlements/repository.py +0 -0
  253. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/entitlements/router.py +0 -0
  254. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/entitlements/schemas.py +0 -0
  255. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/errors.py +0 -0
  256. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/events.py +0 -0
  257. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/secure_messages/__init__.py +0 -0
  258. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/secure_messages/encryption.py +0 -0
  259. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/secure_messages/errors.py +0 -0
  260. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/secure_messages/models.py +0 -0
  261. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/secure_messages/repository.py +0 -0
  262. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/secure_messages/router.py +0 -0
  263. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/secure_messages/schemas.py +0 -0
  264. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/secure_messages/service.py +0 -0
  265. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/security/__init__.py +0 -0
  266. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/security/errors.py +0 -0
  267. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/security/models.py +0 -0
  268. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/security/repository.py +0 -0
  269. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/security/router.py +0 -0
  270. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/security/schemas.py +0 -0
  271. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/security/service.py +0 -0
  272. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/self_service/__init__.py +0 -0
  273. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/self_service/errors.py +0 -0
  274. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/self_service/router.py +0 -0
  275. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/self_service/schemas.py +0 -0
  276. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/self_service/service.py +0 -0
  277. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/__init__.py +0 -0
  278. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/blacklist_service.py +0 -0
  279. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/jwt_service.py +0 -0
  280. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/models.py +0 -0
  281. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/nonce_service.py +0 -0
  282. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/password_service.py +0 -0
  283. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/repository.py +0 -0
  284. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/router.py +0 -0
  285. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/schemas.py +0 -0
  286. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/sessions/service.py +0 -0
  287. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/__init__.py +0 -0
  288. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/errors.py +0 -0
  289. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/models.py +0 -0
  290. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/repository.py +0 -0
  291. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/router.py +0 -0
  292. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/stripe/schemas.py +0 -0
  293. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/users/__init__.py +0 -0
  294. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/users/models.py +0 -0
  295. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/users/repository.py +0 -0
  296. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/users/router.py +0 -0
  297. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/users/schemas.py +0 -0
  298. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/users/service.py +0 -0
  299. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/__init__.py +0 -0
  300. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/chains/__init__.py +0 -0
  301. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/chains/dispatcher.py +0 -0
  302. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/chains/ethereum.py +0 -0
  303. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/chains/solana.py +0 -0
  304. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/models.py +0 -0
  305. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/repository.py +0 -0
  306. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/router.py +0 -0
  307. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/schemas.py +0 -0
  308. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/wallets/service.py +0 -0
  309. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/__init__.py +0 -0
  310. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/errors.py +0 -0
  311. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/models.py +0 -0
  312. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/repository.py +0 -0
  313. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/router.py +0 -0
  314. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/webhooks/signing.py +0 -0
  315. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/whitelist/__init__.py +0 -0
  316. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/whitelist/models.py +0 -0
  317. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/whitelist/repository.py +0 -0
  318. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/whitelist/router.py +0 -0
  319. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/whitelist/schemas.py +0 -0
  320. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/domains/whitelist/service.py +0 -0
  321. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/local_mode/__init__.py +0 -0
  322. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/local_mode/middleware.py +0 -0
  323. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/local_mode/personas.py +0 -0
  324. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/logging.py +0 -0
  325. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/__init__.py +0 -0
  326. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/api_key.py +0 -0
  327. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/envelope.py +0 -0
  328. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/jwt_auth.py +0 -0
  329. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/origin_validation.py +0 -0
  330. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/security_headers.py +0 -0
  331. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware/spaps_deps.py +0 -0
  332. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/middleware.py +0 -0
  333. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/rbac/__init__.py +0 -0
  334. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/schemas/__init__.py +0 -0
  335. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/schemas/health.py +0 -0
  336. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/sdk/__init__.py +0 -0
  337. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/sdk/_ttl_cache.py +0 -0
  338. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/sdk/admin_token_cache.py +0 -0
  339. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/sdk/feature_evaluator.py +0 -0
  340. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/sdk/role_hierarchy.py +0 -0
  341. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/secure_messaging.py +0 -0
  342. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/seeds/__init__.py +0 -0
  343. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/seeds/schemas.py +0 -0
  344. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/seeds/validator.py +0 -0
  345. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/settings.py +0 -0
  346. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/tasks/__init__.py +0 -0
  347. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/tasks/celery_factory.py +0 -0
  348. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/tasks/health.py +0 -0
  349. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/tasks/notifications.py +0 -0
  350. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/.pre-commit-config.yaml +0 -0
  351. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/__init__.py +0 -0
  352. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/alembic/script.py.mako +0 -0
  353. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/alembic/versions/.gitkeep +0 -0
  354. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/docs/templates/API_DOCUMENTATION_TEMPLATE.md +0 -0
  355. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/docs/templates/DEBUG_REPORT_TEMPLATE.md +0 -0
  356. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/docs/templates/OPERATIONS_PLAYBOOK_TEMPLATE.md +0 -0
  357. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/__init__.py +0 -0
  358. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/admin/router.py +0 -0
  359. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/auth/local_routes.py +0 -0
  360. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/users/__init__.py +0 -0
  361. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/users/models.py +0 -0
  362. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/users/repository.py +0 -0
  363. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/users/router.py +0 -0
  364. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/users/schemas.py +0 -0
  365. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/domains/users/service.py +0 -0
  366. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/.githooks/pre-push +0 -0
  367. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/.github/workflows/deploy.yml +0 -0
  368. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/deploy/deploy.sh +0 -0
  369. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/deploy/post-deploy-verify.sh +0 -0
  370. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/deploy/pre-deploy-checks.sh +0 -0
  371. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/docker-compose.prod.yml +0 -0
  372. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/backup-db.sh +0 -0
  373. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/dev/await_db.py +0 -0
  374. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/dev/fetch-prod-db.sh +0 -0
  375. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/dev/local-debug-loop.sh +0 -0
  376. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/dev/start-db.sh +0 -0
  377. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/dev/stop-db.sh +0 -0
  378. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/new-migration.sh +0 -0
  379. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/prepush.sh +0 -0
  380. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/operations/scripts/restore-db.sh +0 -0
  381. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/scripts/__init__.py +0 -0
  382. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/scripts/seeds/__init__.py +0 -0
  383. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/scripts/seeds/data/users.yaml +0 -0
  384. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/scripts/seeds/schemas/__init__.py +0 -0
  385. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/scripts/seeds/schemas/users.py +0 -0
  386. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/README.md +0 -0
  387. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/__init__.py +0 -0
  388. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/api/__init__.py +0 -0
  389. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/api/test_health.py +0 -0
  390. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/api/test_users_auth.py +0 -0
  391. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/domains/__init__.py +0 -0
  392. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/domains/example/__init__.py +0 -0
  393. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/domains/example/conftest.py +0 -0
  394. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/domains/users/__init__.py +0 -0
  395. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/domains/users/conftest.py +0 -0
  396. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/integration/__init__.py +0 -0
  397. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/integration/test_db_connectivity.py +0 -0
  398. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/unit/__init__.py +0 -0
  399. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/templates/tests/unit/test_settings.py +0 -0
  400. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/src/spaps_server_quickstart/testing.py +0 -0
  401. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/docker-compose.yml +0 -0
  402. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/.github/workflows/deploy.yml +0 -0
  403. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/Makefile +0 -0
  404. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/deploy.sh +0 -0
  405. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/post-deploy-verify.sh +0 -0
  406. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/pre-deploy-checks.sh +0 -0
  407. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/reverse-proxy/README.md +0 -0
  408. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/reverse-proxy/certs/.gitkeep +0 -0
  409. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/reverse-proxy/docker-compose.yml +0 -0
  410. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/reverse-proxy/nginx.conf +0 -0
  411. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/reverse-proxy/sites-available/.gitkeep +0 -0
  412. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/reverse-proxy/sites-enabled/.gitkeep +0 -0
  413. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/reverse-proxy/static/.gitkeep +0 -0
  414. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/deploy/reverse-proxy/up.sh +0 -0
  415. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/docker-compose.dev.yml +0 -0
  416. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/docker-compose.prod.yml +0 -0
  417. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/scripts/dev/await_db.py +0 -0
  418. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/scripts/dev/local-debug-loop.sh +0 -0
  419. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/scripts/dev/start-db.sh +0 -0
  420. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/operations/scripts/dev/stop-db.sh +0 -0
  421. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/templates/tests/conftest.py +0 -0
  422. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/conftest.py +0 -0
  423. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/__init__.py +0 -0
  424. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_app_factory_contract.py +0 -0
  425. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_health_contract.py +0 -0
  426. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/contracts/test_router_contract.py +0 -0
  427. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/__init__.py +0 -0
  428. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/affiliate_referrals/__init__.py +0 -0
  429. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/agent_approvals/__init__.py +0 -0
  430. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/applications/__init__.py +0 -0
  431. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/applications/test_repository.py +0 -0
  432. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/applications/test_router.py +0 -0
  433. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/applications/test_service.py +0 -0
  434. {spaps_server_quickstart-0.4.0/tests/domains/audit → spaps_server_quickstart-0.5.0/tests/domains/approval_authz_prod_hardening}/__init__.py +0 -0
  435. {spaps_server_quickstart-0.4.0/tests/domains/auth → spaps_server_quickstart-0.5.0/tests/domains/audit}/__init__.py +0 -0
  436. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/audit/test_repository.py +0 -0
  437. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/audit/test_retention.py +0 -0
  438. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/audit/test_router.py +0 -0
  439. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/audit/test_service.py +0 -0
  440. {spaps_server_quickstart-0.4.0/tests/domains/cfo → spaps_server_quickstart-0.5.0/tests/domains/auth}/__init__.py +0 -0
  441. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/auth/test_repository.py +0 -0
  442. {spaps_server_quickstart-0.4.0/tests/domains/crypto → spaps_server_quickstart-0.5.0/tests/domains/cfo}/__init__.py +0 -0
  443. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/cfo/test_repository.py +0 -0
  444. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/cfo_roles/__init__.py +0 -0
  445. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/conftest.py +0 -0
  446. {spaps_server_quickstart-0.4.0/tests/domains/dayrate → spaps_server_quickstart-0.5.0/tests/domains/crypto}/__init__.py +0 -0
  447. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/crypto/test_repository.py +0 -0
  448. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/crypto/test_router.py +0 -0
  449. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/crypto/test_service.py +0 -0
  450. {spaps_server_quickstart-0.4.0/tests/domains/device_flow → spaps_server_quickstart-0.5.0/tests/domains/dayrate}/__init__.py +0 -0
  451. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/dayrate/test_allotment_service.py +0 -0
  452. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/dayrate/test_booking_policy_service.py +0 -0
  453. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/dayrate/test_booking_routes.py +0 -0
  454. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/dayrate/test_enhanced_booking_service.py +0 -0
  455. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/dayrate/test_pricing.py +0 -0
  456. {spaps_server_quickstart-0.4.0/tests/domains/docs → spaps_server_quickstart-0.5.0/tests/domains/device_flow}/__init__.py +0 -0
  457. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/device_flow/test_router.py +0 -0
  458. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/device_flow/test_store.py +0 -0
  459. {spaps_server_quickstart-0.4.0/tests/domains/email → spaps_server_quickstart-0.5.0/tests/domains/docs}/__init__.py +0 -0
  460. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/docs/test_repository.py +0 -0
  461. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/docs/test_router.py +0 -0
  462. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/docs/test_service.py +0 -0
  463. {spaps_server_quickstart-0.4.0/tests/domains/entitlements → spaps_server_quickstart-0.5.0/tests/domains/email}/__init__.py +0 -0
  464. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/email/test_repository.py +0 -0
  465. {spaps_server_quickstart-0.4.0/tests/domains/secure_messages → spaps_server_quickstart-0.5.0/tests/domains/entitlements}/__init__.py +0 -0
  466. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/entitlements/test_repository.py +0 -0
  467. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/entitlements/test_router.py +0 -0
  468. {spaps_server_quickstart-0.4.0/tests/domains/security → spaps_server_quickstart-0.5.0/tests/domains/secure_messages}/__init__.py +0 -0
  469. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/secure_messages/test_encryption.py +0 -0
  470. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/secure_messages/test_router.py +0 -0
  471. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/secure_messages/test_service.py +0 -0
  472. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/secure_messages/test_tm013_security.py +0 -0
  473. {spaps_server_quickstart-0.4.0/tests/domains/self_service → spaps_server_quickstart-0.5.0/tests/domains/security}/__init__.py +0 -0
  474. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/security/test_repository.py +0 -0
  475. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/security/test_router.py +0 -0
  476. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/security/test_service.py +0 -0
  477. {spaps_server_quickstart-0.4.0/tests/domains/sessions → spaps_server_quickstart-0.5.0/tests/domains/self_service}/__init__.py +0 -0
  478. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/self_service/test_router.py +0 -0
  479. {spaps_server_quickstart-0.4.0/tests/domains/stripe → spaps_server_quickstart-0.5.0/tests/domains/sessions}/__init__.py +0 -0
  480. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/sessions/test_repository.py +0 -0
  481. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/sessions/test_router.py +0 -0
  482. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/sessions/test_service.py +0 -0
  483. {spaps_server_quickstart-0.4.0/tests/domains/users → spaps_server_quickstart-0.5.0/tests/domains/stripe}/__init__.py +0 -0
  484. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/stripe/test_repository.py +0 -0
  485. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/stripe/test_router.py +0 -0
  486. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/stripe/test_subscription_application_scoping.py +0 -0
  487. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/test_smoke.py +0 -0
  488. {spaps_server_quickstart-0.4.0/tests/domains/wallets → spaps_server_quickstart-0.5.0/tests/domains/users}/__init__.py +0 -0
  489. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/users/test_repository.py +0 -0
  490. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/users/test_router.py +0 -0
  491. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/users/test_service.py +0 -0
  492. {spaps_server_quickstart-0.4.0/tests/domains/webhooks → spaps_server_quickstart-0.5.0/tests/domains/wallets}/__init__.py +0 -0
  493. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/wallets/test_chains.py +0 -0
  494. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/wallets/test_repository.py +0 -0
  495. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/wallets/test_router.py +0 -0
  496. {spaps_server_quickstart-0.4.0/tests/domains/whitelist → spaps_server_quickstart-0.5.0/tests/domains/webhooks}/__init__.py +0 -0
  497. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/webhooks/test_repository.py +0 -0
  498. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/webhooks/test_router.py +0 -0
  499. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/webhooks/test_signing.py +0 -0
  500. {spaps_server_quickstart-0.4.0/tests/middleware → spaps_server_quickstart-0.5.0/tests/domains/whitelist}/__init__.py +0 -0
  501. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/whitelist/test_repository.py +0 -0
  502. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/whitelist/test_router.py +0 -0
  503. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/domains/whitelist/test_service.py +0 -0
  504. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/middleware/test_api_key.py +0 -0
  505. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/middleware/test_jwt_auth.py +0 -0
  506. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/middleware/test_local_mode.py +0 -0
  507. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/middleware/test_origin_validation.py +0 -0
  508. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/middleware/test_security_headers.py +0 -0
  509. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/middleware/test_spaps_deps.py +0 -0
  510. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_alembic_naming.py +0 -0
  511. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_api_router.py +0 -0
  512. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_app_factory.py +0 -0
  513. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_auth.py +0 -0
  514. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_auth_channels.py +0 -0
  515. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_auth_dependencies.py +0 -0
  516. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_bcrypt_compat.py +0 -0
  517. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_dev_data_pipeline.py +0 -0
  518. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_imports.py +0 -0
  519. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_local_mode.py +0 -0
  520. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_logging.py +0 -0
  521. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_middleware.py +0 -0
  522. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_migration_runner.py +0 -0
  523. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_migration_status.py +0 -0
  524. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_operations_templates.py +0 -0
  525. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_package_metadata.py +0 -0
  526. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_rbac.py +0 -0
  527. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_secure_messaging.py +0 -0
  528. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_seed_validation.py +0 -0
  529. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_session_autocommit.py +0 -0
  530. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_sessions_blacklist.py +0 -0
  531. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_sessions_jwt.py +0 -0
  532. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_sessions_nonce.py +0 -0
  533. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_sessions_password.py +0 -0
  534. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_settings.py +0 -0
  535. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/tests/test_tasks.py +0 -0
  536. {spaps_server_quickstart-0.4.0 → spaps_server_quickstart-0.5.0}/todo.md +0 -0
@@ -78,6 +78,7 @@ storybook-static/
78
78
  # IDE
79
79
  .vscode/
80
80
  .idea/
81
+ .claude/settings.local.json
81
82
  *.swp
82
83
  *.swo
83
84
  *.swn
@@ -168,3 +169,5 @@ playwright/.cache/
168
169
  # (keep package-lock.json for applications)
169
170
  # yarn.lock
170
171
  # pnpm-lock.yaml*.tgz
172
+
173
+ **/coverage.xml
@@ -0,0 +1,116 @@
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.4.0] - 2026-02-11
12
+
13
+ ### Added
14
+
15
+ - Full domain rewrite covering auth, sessions, users, wallets, payments, entitlements, dayrate, agent approvals, affiliate referrals, email templates, and related operational domains.
16
+ - Approval capability gates and governance health endpoint.
17
+
18
+ ### Changed
19
+
20
+ - Production cutover to Python SPAPS stack (CI/CD, Docker Compose, deploy scripts).
21
+ - Consolidated SPAPS integration patterns into published packages.
22
+
23
+ ### Security
24
+
25
+ - Rate limiting by client IP.
26
+ - PII encryption startup checks.
27
+ - Webhook authentication hardening.
28
+ - Row-level locking on refresh tokens.
29
+ - Fail-closed settings defaults.
30
+
31
+ ## [0.3.0] - 2026-02-08
32
+
33
+ ### Added
34
+
35
+ - Contract tests and shared testing module.
36
+ - Health endpoint enhancements.
37
+
38
+ ### Changed
39
+
40
+ - Expanded coverage across settings, middleware, database, Celery, and auth helpers.
41
+
42
+ ## [0.2.3] - 2026-01-12
43
+
44
+ ### Fixed
45
+
46
+ - `SpapsAuthMiddleware` now skips execution when `authenticated_user` is already populated.
47
+
48
+ ## [0.2.2] - 2026-01-11
49
+
50
+ ### Added
51
+
52
+ - `fnmatch` glob support for `spaps_auth_exempt_paths`.
53
+ - Set-password endpoint support for authenticated users.
54
+ - Stripe webhook admin tooling for entitlement workflows.
55
+ - Tier 3 templates: seeds, tests, domain examples, docs.
56
+ - Startup validation, Alembic templates, and CI/CD workflow scaffolding.
57
+
58
+ ## [0.2.1] - 2025-12-01
59
+
60
+ ### Added
61
+
62
+ - Shared pgvector dev scripts: `start-db.sh`, `stop-db.sh`, `await_db.py`.
63
+ - Dynamic DNS resolver support for Docker reverse-proxy setups.
64
+
65
+ ### Fixed
66
+
67
+ - nginx DNS caching behavior.
68
+ - HTMA rate-limiting exemption handling.
69
+
70
+ ## [0.2.0] - 2025-10-15
71
+
72
+ ### Added
73
+
74
+ - Local auth bypass mode with pre-configured admin/user personas.
75
+ - Deployment check scripts (`pre-deploy`, `post-deploy`).
76
+ - Database caching workflow for local debug loops.
77
+ - Operational templates (Makefile, GHCR deploy, compose/reverse-proxy stubs).
78
+
79
+ ### Security
80
+
81
+ - Production guardrails for local-auth bypass mode.
82
+
83
+ ## [0.1.2] - 2025-10-15
84
+
85
+ ### Fixed
86
+
87
+ - CI pipeline trigger scoping and quickstart build stability.
88
+
89
+ ## [0.1.1] - 2025-10-14
90
+
91
+ ### Changed
92
+
93
+ - Maintenance release to unblock automated PyPI publishing workflow.
94
+
95
+ ## [0.1.0] - 2025-10-14
96
+
97
+ ### Added
98
+
99
+ - FastAPI lifespan handling for SPAPS auth cleanup.
100
+ - Migration and upgrading guidance for downstream services.
101
+ - Shared refresh-cookie configuration and browser helper exports.
102
+ - Expanded package exports for auth helpers and operational templates.
103
+ - RBAC role helpers and sample domain routers.
104
+ - Comprehensive unit tests across settings, middleware, DB, Celery, and auth helpers.
105
+
106
+ ## [0.0.2] - 2025-10-12
107
+
108
+ ### Added
109
+
110
+ - Declared the `spaps` Python client dependency for downstream installs and CI runs.
111
+
112
+ ## [0.0.1] - 2025-10-14
113
+
114
+ ### Added
115
+
116
+ - Initial `spaps-server-quickstart` scaffold with shared FastAPI/Celery/database utilities.
@@ -0,0 +1,299 @@
1
+ Metadata-Version: 2.4
2
+ Name: spaps-server-quickstart
3
+ Version: 0.5.0
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: pgvector<0.5,>=0.4.1
29
+ Requires-Dist: psycopg[binary]<3.3,>=3.2.10
30
+ Requires-Dist: pydantic-settings<3.0,>=2.3.0
31
+ Requires-Dist: pydantic<3.0,>=2.8.0
32
+ Requires-Dist: pyjwt<3.0,>=2.8.0
33
+ Requires-Dist: python-dotenv<2.0,>=1.0.1
34
+ Requires-Dist: redis<7.0,>=6.4.0
35
+ Requires-Dist: slowapi<1.0,>=0.1.9
36
+ Requires-Dist: solders<1.0,>=0.21.0
37
+ Requires-Dist: spaps>=0.1.2
38
+ Requires-Dist: sqlalchemy<3.0,>=2.0.30
39
+ Requires-Dist: stripe<12.0,>=8.0.0
40
+ Requires-Dist: structlog<26.0,>=25.4.0
41
+ Requires-Dist: uvicorn[standard]<0.38,>=0.37.0
42
+ Provides-Extra: dev
43
+ Requires-Dist: anyio<5.0,>=4.4.0; extra == 'dev'
44
+ Requires-Dist: bcrypt<6.0,>=4.0.0; extra == 'dev'
45
+ Requires-Dist: coverage<8.0,>=7.4.0; extra == 'dev'
46
+ Requires-Dist: docker<8.0,>=7.0.0; extra == 'dev'
47
+ Requires-Dist: filelock<4.0,>=3.12.0; extra == 'dev'
48
+ Requires-Dist: httpx<0.29,>=0.28.1; extra == 'dev'
49
+ Requires-Dist: mypy<1.12,>=1.10.0; extra == 'dev'
50
+ Requires-Dist: pytest-asyncio<0.24,>=0.23.0; extra == 'dev'
51
+ Requires-Dist: pytest-cov<6.0,>=5.0.0; extra == 'dev'
52
+ Requires-Dist: pytest-testmon<3.0,>=2.1.0; extra == 'dev'
53
+ Requires-Dist: pytest-xdist<4.0,>=3.6.1; extra == 'dev'
54
+ Requires-Dist: pytest<9.0,>=8.2.0; extra == 'dev'
55
+ Requires-Dist: respx<0.23,>=0.22.0; extra == 'dev'
56
+ Requires-Dist: ruff<0.5,>=0.4.1; extra == 'dev'
57
+ Requires-Dist: testcontainers[postgres]<5.0,>=4.0.0; extra == 'dev'
58
+ Requires-Dist: types-pyyaml<7.0,>=6.0.0; extra == 'dev'
59
+ Provides-Extra: release
60
+ Requires-Dist: build<2.0,>=1.2.1; extra == 'release'
61
+ Requires-Dist: twine<6.0,>=5.0.0; extra == 'release'
62
+ Provides-Extra: testing
63
+ Requires-Dist: docker<8.0,>=7.0.0; extra == 'testing'
64
+ Requires-Dist: filelock<4.0,>=3.12.0; extra == 'testing'
65
+ Requires-Dist: httpx<0.29,>=0.28.1; extra == 'testing'
66
+ Requires-Dist: pytest-asyncio<0.24,>=0.23.0; extra == 'testing'
67
+ Requires-Dist: pytest-testmon<3.0,>=2.1.0; extra == 'testing'
68
+ Requires-Dist: pytest-xdist<4.0,>=3.6.1; extra == 'testing'
69
+ Requires-Dist: pytest<9.0,>=8.2.0; extra == 'testing'
70
+ Requires-Dist: respx<0.23,>=0.22.0; extra == 'testing'
71
+ Requires-Dist: testcontainers[postgres]<5.0,>=4.0.0; extra == 'testing'
72
+ Description-Content-Type: text/markdown
73
+
74
+ # SPAPS Server Quickstart
75
+
76
+ Reusable FastAPI, SQLAlchemy, Celery, auth, and operational scaffolding for Sweet Potato service backends. This is the active backend package in the repository and the shared foundation for SPAPS-aligned Python services.
77
+
78
+ ```bash
79
+ pip install spaps-server-quickstart
80
+ ```
81
+
82
+ ## TL;DR
83
+
84
+ **The Problem**: new FastAPI services keep re-solving the same problems around app factories, auth middleware, RBAC, async database wiring, Celery bootstrapping, and deployment guardrails.
85
+
86
+ **The Solution**: `spaps-server-quickstart` packages the shared SPAPS backend conventions into one installable Python package so new services start from a tested baseline instead of ad hoc scaffolding.
87
+
88
+ ### Why Use `spaps-server-quickstart`?
89
+
90
+ | Feature | What it gives you |
91
+ | --- | --- |
92
+ | App factory and startup checks | `create_app`, settings loaders, and environment validation |
93
+ | Shared auth + RBAC | SPAPS auth middleware, auth channels, trusted-service middleware, and role dependencies |
94
+ | Async data layer | SQLAlchemy 2.0 async helpers, migration runner, and session dependencies |
95
+ | Operational templates | Deployment scripts, compose stubs, dev DB helpers, and packaging patterns |
96
+
97
+ ## Metadata
98
+
99
+ - `package_name`: `spaps-server-quickstart`
100
+ - `latest_version`: `0.4.0`
101
+ - `minimum_runtime`: `Python >=3.12`
102
+ - `api_base_url`: `https://api.sweetpotato.dev`
103
+
104
+ ## Quick Start
105
+
106
+ ```python
107
+ from fastapi import APIRouter
108
+
109
+ from spaps_server_quickstart import create_app
110
+ from spaps_server_quickstart.settings import BaseServiceSettings
111
+
112
+
113
+ def load_settings() -> BaseServiceSettings:
114
+ return BaseServiceSettings(env="test", app_name="README Quickstart")
115
+
116
+
117
+ router = APIRouter()
118
+
119
+
120
+ @router.get("/hello")
121
+ async def hello() -> dict[str, str]:
122
+ return {"message": "Hello from SPAPS"}
123
+
124
+
125
+ app = create_app(settings_loader=load_settings, api_router=router)
126
+ ```
127
+
128
+ ## Design Principles
129
+
130
+ 1. Start from a real service baseline, not a toy template.
131
+ 2. Keep auth, middleware, and operational guardrails reusable across services.
132
+ 3. Prefer explicit service composition through settings loaders and dependency injection.
133
+ 4. Keep the local-development path close to production behavior.
134
+ 5. Make the happy path easy without hiding the underlying FastAPI and SQLAlchemy primitives.
135
+
136
+ ## What the Package Includes
137
+
138
+ | Area | Highlights |
139
+ | --- | --- |
140
+ | App lifecycle | `create_app`, startup checks, environment validation, logging |
141
+ | Auth | `SpapsAuthMiddleware`, auth cookies, auth channel service, local auth mode |
142
+ | Routing and RBAC | Base router builder, role helpers, authenticated-user dependencies |
143
+ | Database | Async sessionmaker factory, migration runner, Alembic helpers |
144
+ | Tasks | Celery app factory plus notification and ping task helpers |
145
+ | Service SDK helpers | Admin token cache, server-side SPAPS clients, feature evaluation, trusted-service middleware |
146
+ | Templates | Domain examples, operations bundle, env examples, and local dev helpers |
147
+
148
+ ## Local Development Mode
149
+
150
+ Set `DEVELOPMENT_ENVIRONMENT=local` to enable the local-auth bypass workflow used in development and tests.
151
+
152
+ ```python
153
+ from spaps_server_quickstart.local_mode import (
154
+ LocalAuthMiddleware,
155
+ get_default_registry,
156
+ )
157
+ from spaps_server_quickstart.settings import BaseServiceSettings
158
+
159
+ settings = BaseServiceSettings(development_environment="local")
160
+
161
+ if settings.is_local_development:
162
+ app.add_middleware(LocalAuthMiddleware, registry=get_default_registry())
163
+ ```
164
+
165
+ Default personas:
166
+
167
+ | Persona | Token | Roles |
168
+ | --- | --- | --- |
169
+ | Admin | `local-admin` | `admin`, `user` |
170
+ | User | `local-user` | `user` |
171
+
172
+ ## Configuration
173
+
174
+ Key settings exposed through `BaseServiceSettings` and related SPAPS settings:
175
+
176
+ | Setting | Purpose |
177
+ | --- | --- |
178
+ | `development_environment` | Enables local bypass mode when set to `local` |
179
+ | `spaps_auth_exempt_paths` | Comma-separated paths that skip SPAPS auth |
180
+ | `cors_allow_origins` | Shared CORS configuration |
181
+ | `secure_messages_enabled` | Toggles secure-messaging gateway support |
182
+ | `secure_messages_timeout` | HTTP timeout for secure-messaging calls |
183
+
184
+ Example environment:
185
+
186
+ ```bash
187
+ DEVELOPMENT_ENVIRONMENT=local
188
+ SPAPS_AUTH_EXEMPT_PATHS=/health,/docs
189
+ CORS_ALLOW_ORIGINS=http://localhost:3000,http://localhost:5173
190
+ ```
191
+
192
+ ## Operational Templates
193
+
194
+ The package ships with templates and scripts for the workflows the real SPAPS services use:
195
+
196
+ - Docker Compose and reverse-proxy stubs
197
+ - Deploy scripts with preflight and post-deploy checks
198
+ - Database backup, restore, and migration helpers
199
+ - Shared dev DB helpers and local debug-loop support
200
+ - Example domains and tests for bootstrapping new services
201
+
202
+ ## Architecture
203
+
204
+ ```text
205
+ FastAPI service
206
+ |
207
+ +--> create_app + settings loader
208
+ |
209
+ +--> auth middleware / RBAC / dependencies
210
+ |
211
+ +--> async DB session + Alembic helpers
212
+ |
213
+ +--> Celery tasks + service SDK helpers
214
+ |
215
+ +--> shared operational templates
216
+ |
217
+ v
218
+ SPAPS-aligned production service
219
+ ```
220
+
221
+ ## Validation and Development
222
+
223
+ When working in this repository, the root `Makefile` is the canonical workflow:
224
+
225
+ ```bash
226
+ make install
227
+ make pytest
228
+ make lint
229
+ make typecheck
230
+ make test
231
+ make local-up
232
+ ```
233
+
234
+ Useful additional commands:
235
+
236
+ ```bash
237
+ make pytest-full
238
+ make pytest-cov
239
+ make migrate
240
+ make new-migration MSG="add_example_table"
241
+ ```
242
+
243
+ ## Troubleshooting
244
+
245
+ ### `make pytest` reports no affected tests
246
+
247
+ That is expected when testmon sees no impacted tests. Use `make pytest-full` when you need a full run.
248
+
249
+ ### Local auth bypass is not active
250
+
251
+ Confirm `DEVELOPMENT_ENVIRONMENT=local` is set before application startup.
252
+
253
+ ### Unauthenticated routes still require auth
254
+
255
+ Check `spaps_auth_exempt_paths` and make sure the configured paths match the actual router paths.
256
+
257
+ ### Startup fails on environment validation
258
+
259
+ Review the required settings and any environment-safety checks triggered during startup validation.
260
+
261
+ ### I need a new service quickly
262
+
263
+ Start from the included templates and keep the repo-root validation path intact while adapting the service-specific settings.
264
+
265
+ ## Limitations
266
+
267
+ - This package is a scaffold, not a complete application by itself.
268
+ - Downstream services still need their own domain routers, schemas, repositories, and deployment configuration.
269
+ - Some operational templates intentionally require environment-specific edits before production use.
270
+
271
+ ## FAQ
272
+
273
+ ### Is this the active SPAPS backend in this repo?
274
+
275
+ Yes. This package replaces the old Node/Express stack as the active backend surface.
276
+
277
+ ### Does it include local auth bypass support?
278
+
279
+ Yes. Set `DEVELOPMENT_ENVIRONMENT=local` and wire in the local-mode helpers.
280
+
281
+ ### Can I use it without Celery?
282
+
283
+ Yes. Celery helpers are included, but you can compose only the pieces your service needs.
284
+
285
+ ### Does it include RBAC helpers?
286
+
287
+ Yes. Use `require_roles`, `has_required_roles`, and the authenticated-user dependencies.
288
+
289
+ ### What is the recommended validation path here?
290
+
291
+ From the repository root: `make pytest`, `make lint`, `make typecheck`, and `make test`.
292
+
293
+ ## About Contributions
294
+
295
+ > *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.
296
+
297
+ ## License
298
+
299
+ MIT
@@ -0,0 +1,226 @@
1
+ # SPAPS Server Quickstart
2
+
3
+ Reusable FastAPI, SQLAlchemy, Celery, auth, and operational scaffolding for Sweet Potato service backends. This is the active backend package in the repository and the shared foundation for SPAPS-aligned Python services.
4
+
5
+ ```bash
6
+ pip install spaps-server-quickstart
7
+ ```
8
+
9
+ ## TL;DR
10
+
11
+ **The Problem**: new FastAPI services keep re-solving the same problems around app factories, auth middleware, RBAC, async database wiring, Celery bootstrapping, and deployment guardrails.
12
+
13
+ **The Solution**: `spaps-server-quickstart` packages the shared SPAPS backend conventions into one installable Python package so new services start from a tested baseline instead of ad hoc scaffolding.
14
+
15
+ ### Why Use `spaps-server-quickstart`?
16
+
17
+ | Feature | What it gives you |
18
+ | --- | --- |
19
+ | App factory and startup checks | `create_app`, settings loaders, and environment validation |
20
+ | Shared auth + RBAC | SPAPS auth middleware, auth channels, trusted-service middleware, and role dependencies |
21
+ | Async data layer | SQLAlchemy 2.0 async helpers, migration runner, and session dependencies |
22
+ | Operational templates | Deployment scripts, compose stubs, dev DB helpers, and packaging patterns |
23
+
24
+ ## Metadata
25
+
26
+ - `package_name`: `spaps-server-quickstart`
27
+ - `latest_version`: `0.4.0`
28
+ - `minimum_runtime`: `Python >=3.12`
29
+ - `api_base_url`: `https://api.sweetpotato.dev`
30
+
31
+ ## Quick Start
32
+
33
+ ```python
34
+ from fastapi import APIRouter
35
+
36
+ from spaps_server_quickstart import create_app
37
+ from spaps_server_quickstart.settings import BaseServiceSettings
38
+
39
+
40
+ def load_settings() -> BaseServiceSettings:
41
+ return BaseServiceSettings(env="test", app_name="README Quickstart")
42
+
43
+
44
+ router = APIRouter()
45
+
46
+
47
+ @router.get("/hello")
48
+ async def hello() -> dict[str, str]:
49
+ return {"message": "Hello from SPAPS"}
50
+
51
+
52
+ app = create_app(settings_loader=load_settings, api_router=router)
53
+ ```
54
+
55
+ ## Design Principles
56
+
57
+ 1. Start from a real service baseline, not a toy template.
58
+ 2. Keep auth, middleware, and operational guardrails reusable across services.
59
+ 3. Prefer explicit service composition through settings loaders and dependency injection.
60
+ 4. Keep the local-development path close to production behavior.
61
+ 5. Make the happy path easy without hiding the underlying FastAPI and SQLAlchemy primitives.
62
+
63
+ ## What the Package Includes
64
+
65
+ | Area | Highlights |
66
+ | --- | --- |
67
+ | App lifecycle | `create_app`, startup checks, environment validation, logging |
68
+ | Auth | `SpapsAuthMiddleware`, auth cookies, auth channel service, local auth mode |
69
+ | Routing and RBAC | Base router builder, role helpers, authenticated-user dependencies |
70
+ | Database | Async sessionmaker factory, migration runner, Alembic helpers |
71
+ | Tasks | Celery app factory plus notification and ping task helpers |
72
+ | Service SDK helpers | Admin token cache, server-side SPAPS clients, feature evaluation, trusted-service middleware |
73
+ | Templates | Domain examples, operations bundle, env examples, and local dev helpers |
74
+
75
+ ## Local Development Mode
76
+
77
+ Set `DEVELOPMENT_ENVIRONMENT=local` to enable the local-auth bypass workflow used in development and tests.
78
+
79
+ ```python
80
+ from spaps_server_quickstart.local_mode import (
81
+ LocalAuthMiddleware,
82
+ get_default_registry,
83
+ )
84
+ from spaps_server_quickstart.settings import BaseServiceSettings
85
+
86
+ settings = BaseServiceSettings(development_environment="local")
87
+
88
+ if settings.is_local_development:
89
+ app.add_middleware(LocalAuthMiddleware, registry=get_default_registry())
90
+ ```
91
+
92
+ Default personas:
93
+
94
+ | Persona | Token | Roles |
95
+ | --- | --- | --- |
96
+ | Admin | `local-admin` | `admin`, `user` |
97
+ | User | `local-user` | `user` |
98
+
99
+ ## Configuration
100
+
101
+ Key settings exposed through `BaseServiceSettings` and related SPAPS settings:
102
+
103
+ | Setting | Purpose |
104
+ | --- | --- |
105
+ | `development_environment` | Enables local bypass mode when set to `local` |
106
+ | `spaps_auth_exempt_paths` | Comma-separated paths that skip SPAPS auth |
107
+ | `cors_allow_origins` | Shared CORS configuration |
108
+ | `secure_messages_enabled` | Toggles secure-messaging gateway support |
109
+ | `secure_messages_timeout` | HTTP timeout for secure-messaging calls |
110
+
111
+ Example environment:
112
+
113
+ ```bash
114
+ DEVELOPMENT_ENVIRONMENT=local
115
+ SPAPS_AUTH_EXEMPT_PATHS=/health,/docs
116
+ CORS_ALLOW_ORIGINS=http://localhost:3000,http://localhost:5173
117
+ ```
118
+
119
+ ## Operational Templates
120
+
121
+ The package ships with templates and scripts for the workflows the real SPAPS services use:
122
+
123
+ - Docker Compose and reverse-proxy stubs
124
+ - Deploy scripts with preflight and post-deploy checks
125
+ - Database backup, restore, and migration helpers
126
+ - Shared dev DB helpers and local debug-loop support
127
+ - Example domains and tests for bootstrapping new services
128
+
129
+ ## Architecture
130
+
131
+ ```text
132
+ FastAPI service
133
+ |
134
+ +--> create_app + settings loader
135
+ |
136
+ +--> auth middleware / RBAC / dependencies
137
+ |
138
+ +--> async DB session + Alembic helpers
139
+ |
140
+ +--> Celery tasks + service SDK helpers
141
+ |
142
+ +--> shared operational templates
143
+ |
144
+ v
145
+ SPAPS-aligned production service
146
+ ```
147
+
148
+ ## Validation and Development
149
+
150
+ When working in this repository, the root `Makefile` is the canonical workflow:
151
+
152
+ ```bash
153
+ make install
154
+ make pytest
155
+ make lint
156
+ make typecheck
157
+ make test
158
+ make local-up
159
+ ```
160
+
161
+ Useful additional commands:
162
+
163
+ ```bash
164
+ make pytest-full
165
+ make pytest-cov
166
+ make migrate
167
+ make new-migration MSG="add_example_table"
168
+ ```
169
+
170
+ ## Troubleshooting
171
+
172
+ ### `make pytest` reports no affected tests
173
+
174
+ That is expected when testmon sees no impacted tests. Use `make pytest-full` when you need a full run.
175
+
176
+ ### Local auth bypass is not active
177
+
178
+ Confirm `DEVELOPMENT_ENVIRONMENT=local` is set before application startup.
179
+
180
+ ### Unauthenticated routes still require auth
181
+
182
+ Check `spaps_auth_exempt_paths` and make sure the configured paths match the actual router paths.
183
+
184
+ ### Startup fails on environment validation
185
+
186
+ Review the required settings and any environment-safety checks triggered during startup validation.
187
+
188
+ ### I need a new service quickly
189
+
190
+ Start from the included templates and keep the repo-root validation path intact while adapting the service-specific settings.
191
+
192
+ ## Limitations
193
+
194
+ - This package is a scaffold, not a complete application by itself.
195
+ - Downstream services still need their own domain routers, schemas, repositories, and deployment configuration.
196
+ - Some operational templates intentionally require environment-specific edits before production use.
197
+
198
+ ## FAQ
199
+
200
+ ### Is this the active SPAPS backend in this repo?
201
+
202
+ Yes. This package replaces the old Node/Express stack as the active backend surface.
203
+
204
+ ### Does it include local auth bypass support?
205
+
206
+ Yes. Set `DEVELOPMENT_ENVIRONMENT=local` and wire in the local-mode helpers.
207
+
208
+ ### Can I use it without Celery?
209
+
210
+ Yes. Celery helpers are included, but you can compose only the pieces your service needs.
211
+
212
+ ### Does it include RBAC helpers?
213
+
214
+ Yes. Use `require_roles`, `has_required_roles`, and the authenticated-user dependencies.
215
+
216
+ ### What is the recommended validation path here?
217
+
218
+ From the repository root: `make pytest`, `make lint`, `make typecheck`, and `make test`.
219
+
220
+ ## About Contributions
221
+
222
+ > *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.
223
+
224
+ ## License
225
+
226
+ MIT
@@ -1,6 +1,6 @@
1
1
  # Migrating a Service to `spaps-server-quickstart`
2
2
 
3
- This playbook describes the concrete steps for services like `htma_server` and
3
+ This playbook describes the concrete steps for services like `consumer_server` and
4
4
  `ingredient_server` to replace local scaffolding with the shared package. Expect a
5
5
  single PR per service.
6
6
 
@@ -27,8 +27,8 @@ single PR per service.
27
27
 
28
28
  class Settings(BaseServiceSettings):
29
29
  app_name: str = "HTMA Server"
30
- service_slug: str = "htma-server"
31
- database_url: str = "postgresql+asyncpg://.../htma"
30
+ service_slug: str = "consumer_app-server"
31
+ database_url: str = "postgresql+asyncpg://.../consumer_app"
32
32
  # include service-specific fields (e.g., practitioners, ingredient keys)
33
33
 
34
34
  get_settings = create_settings_loader(Settings)
@@ -112,7 +112,7 @@ single PR per service.
112
112
  ```python
113
113
  from spaps_server_quickstart.tasks import create_celery_app
114
114
 
115
- celery_app = create_celery_app(get_settings(), task_modules=["htma_server.tasks"])
115
+ celery_app = create_celery_app(get_settings(), task_modules=["consumer_server.tasks"])
116
116
  ```
117
117
  2. Update shared tasks (`build_ping_task`, `build_notification_task`) or keep service-specific overrides as needed.
118
118
 
@@ -232,8 +232,8 @@ The package includes ready-to-copy templates for Alembic configuration and CI/CD
232
232
 
233
233
  | Placeholder | Description | Example |
234
234
  |-------------|-------------|---------|
235
- | `{{SERVICE_NAME}}` | Service identifier (used in paths, networks, env vars) | `htma`, `ingredient` |
236
- | `{{SERVICE_MODULE}}` | Python module name for imports | `htma_server`, `ingredient_server` |
235
+ | `{{SERVICE_NAME}}` | Service identifier (used in paths, networks, env vars) | `consumer_app`, `ingredient` |
236
+ | `{{SERVICE_MODULE}}` | Python module name for imports | `consumer_server`, `ingredient_server` |
237
237
  | `{{DB_NAME}}` | PostgreSQL database name | `htma_db`, `ingredient_db` |
238
238
 
239
239
  ### Alembic Templates