spaps-server-quickstart 0.6.0__tar.gz → 0.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (681) hide show
  1. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/CHANGELOG.md +7 -0
  2. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/PKG-INFO +4 -4
  3. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/README.md +1 -1
  4. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/UPGRADING.md +10 -0
  5. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/pyproject.toml +3 -3
  6. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/__init__.py +1 -1
  7. spaps_server_quickstart-0.6.1/src/spaps_server_quickstart/openapi_auth.py +229 -0
  8. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/spaps_app.py +26 -0
  9. spaps_server_quickstart-0.6.1/tests/contracts/test_manifest_fastapi_script.py +82 -0
  10. spaps_server_quickstart-0.6.1/tests/contracts/test_openapi_auth_metadata.py +189 -0
  11. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_sdk_docs_parity_script.py +156 -0
  12. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/.gitignore +0 -0
  13. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/.python-version +0 -0
  14. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/TM-002-IMPLEMENTATION.md +0 -0
  15. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/MIGRATION_GUIDE.md +0 -0
  16. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/TDD_PLAN.md +0 -0
  17. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/TM-ENV-001-checklist.md +0 -0
  18. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/TM-ENV-001-email-environment-safety.md +0 -0
  19. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/INDEX.md +0 -0
  20. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/_archived/diff-mvp-plan.md +0 -0
  21. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/security-audit-remediation-2026q1/AUDIT_REPORT.md +0 -0
  22. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/security-audit-remediation-2026q1/README.md +0 -0
  23. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/security-audit-remediation-2026q1/backend.md +0 -0
  24. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/security-audit-remediation-2026q1/flows.md +0 -0
  25. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/security-audit-remediation-2026q1/frontend.md +0 -0
  26. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/security-audit-remediation-2026q1/plan.md +0 -0
  27. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/security-audit-remediation-2026q1/schema.mmd +0 -0
  28. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/security-audit-remediation-2026q1/shared.md +0 -0
  29. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/trust-invariants-kernel/README.md +0 -0
  30. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/trust-invariants-kernel/backend.md +0 -0
  31. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/trust-invariants-kernel/describe-wave-1-principal-proxy-reuse.md +0 -0
  32. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/trust-invariants-kernel/flows.md +0 -0
  33. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/trust-invariants-kernel/frontend.md +0 -0
  34. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/trust-invariants-kernel/plan.md +0 -0
  35. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/trust-invariants-kernel/schema.mmd +0 -0
  36. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/feature-plans/trust-invariants-kernel/shared.md +0 -0
  37. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/messaging-broker-plan.md +0 -0
  38. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/docs/security-audit-remediation-2026q1-tm007-tm008.md +0 -0
  39. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/scripts/release.sh +0 -0
  40. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/alembic/__init__.py +0 -0
  41. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/alembic/naming.py +0 -0
  42. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/api/__init__.py +0 -0
  43. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/api/dependencies.py +0 -0
  44. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/api/domains/__init__.py +0 -0
  45. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/api/domains/health_router.py +0 -0
  46. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/api/domains/metrics_router.py +0 -0
  47. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/api/health.py +0 -0
  48. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/api/router.py +0 -0
  49. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/app_factory.py +0 -0
  50. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/auth/__init__.py +0 -0
  51. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/auth/cookies.py +0 -0
  52. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/auth/dependencies.py +0 -0
  53. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/auth_channels.py +0 -0
  54. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/db/__init__.py +0 -0
  55. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/db/alembic_status.py +0 -0
  56. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/db/migration_runner.py +0 -0
  57. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/db/session.py +0 -0
  58. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/__init__.py +0 -0
  59. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/_common/clients.py +0 -0
  60. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/_common/pagination.py +0 -0
  61. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/_db/__init__.py +0 -0
  62. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/_db/base.py +0 -0
  63. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/_db/model_registry.py +0 -0
  64. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/_db/orm_helpers.py +0 -0
  65. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/_db/rls.py +0 -0
  66. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/_db/types.py +0 -0
  67. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/affiliate_referrals/__init__.py +0 -0
  68. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/affiliate_referrals/errors.py +0 -0
  69. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/affiliate_referrals/models.py +0 -0
  70. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/affiliate_referrals/repository.py +0 -0
  71. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/affiliate_referrals/router.py +0 -0
  72. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/affiliate_referrals/schemas.py +0 -0
  73. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/affiliate_referrals/service.py +0 -0
  74. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/agent_approvals/__init__.py +0 -0
  75. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/agent_approvals/authz.py +0 -0
  76. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/agent_approvals/errors.py +0 -0
  77. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/agent_approvals/models.py +0 -0
  78. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/agent_approvals/repository.py +0 -0
  79. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/agent_approvals/router.py +0 -0
  80. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/agent_approvals/schemas.py +0 -0
  81. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/agent_approvals/service.py +0 -0
  82. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/app_links/__init__.py +0 -0
  83. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/app_links/errors.py +0 -0
  84. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/app_links/models.py +0 -0
  85. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/app_links/repository.py +0 -0
  86. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/app_links/router.py +0 -0
  87. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/app_links/schemas.py +0 -0
  88. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/app_links/service.py +0 -0
  89. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/applications/__init__.py +0 -0
  90. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/applications/blueprints.py +0 -0
  91. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/applications/models.py +0 -0
  92. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/applications/repository.py +0 -0
  93. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/applications/router.py +0 -0
  94. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/applications/schemas.py +0 -0
  95. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/applications/service.py +0 -0
  96. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/__init__.py +0 -0
  97. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/errors.py +0 -0
  98. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/models.py +0 -0
  99. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/repository.py +0 -0
  100. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/retention.py +0 -0
  101. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/router.py +0 -0
  102. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/schemas.py +0 -0
  103. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/service.py +0 -0
  104. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/audit/tasks.py +0 -0
  105. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/auth/__init__.py +0 -0
  106. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/auth/repository.py +0 -0
  107. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/auth/router.py +0 -0
  108. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/auth/schemas.py +0 -0
  109. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/auth/service.py +0 -0
  110. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/billing_accounts/__init__.py +0 -0
  111. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/billing_accounts/models.py +0 -0
  112. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/billing_accounts/repository.py +0 -0
  113. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/billing_accounts/resolver.py +0 -0
  114. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/billing_accounts/router.py +0 -0
  115. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/billing_accounts/schemas.py +0 -0
  116. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/billing_accounts/service.py +0 -0
  117. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo/__init__.py +0 -0
  118. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo/errors.py +0 -0
  119. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo/models.py +0 -0
  120. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo/quickbooks.py +0 -0
  121. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo/repository.py +0 -0
  122. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo/router.py +0 -0
  123. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo/schemas.py +0 -0
  124. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo/service.py +0 -0
  125. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo_roles/__init__.py +0 -0
  126. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo_roles/errors.py +0 -0
  127. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo_roles/me_router.py +0 -0
  128. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo_roles/router.py +0 -0
  129. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo_roles/schemas.py +0 -0
  130. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/cfo_roles/service.py +0 -0
  131. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/crypto/__init__.py +0 -0
  132. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/crypto/errors.py +0 -0
  133. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/crypto/models.py +0 -0
  134. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/crypto/repository.py +0 -0
  135. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/crypto/router.py +0 -0
  136. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/crypto/schemas.py +0 -0
  137. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/crypto/service.py +0 -0
  138. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dayrate/__init__.py +0 -0
  139. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dayrate/errors.py +0 -0
  140. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dayrate/models.py +0 -0
  141. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dayrate/pricing.py +0 -0
  142. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dayrate/repository.py +0 -0
  143. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dayrate/router.py +0 -0
  144. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dayrate/schemas.py +0 -0
  145. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dayrate/service.py +0 -0
  146. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dev/__init__.py +0 -0
  147. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dev/router.py +0 -0
  148. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dev/schemas.py +0 -0
  149. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/dev/service.py +0 -0
  150. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/device_flow/__init__.py +0 -0
  151. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/device_flow/repository.py +0 -0
  152. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/device_flow/router.py +0 -0
  153. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/device_flow/schemas.py +0 -0
  154. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/device_flow/service.py +0 -0
  155. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/device_flow/store.py +0 -0
  156. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/docs/__init__.py +0 -0
  157. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/docs/discovery.py +0 -0
  158. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/docs/errors.py +0 -0
  159. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/docs/models.py +0 -0
  160. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/docs/repository.py +0 -0
  161. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/docs/router.py +0 -0
  162. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/docs/schemas.py +0 -0
  163. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/docs/service.py +0 -0
  164. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/__init__.py +0 -0
  165. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/config.py +0 -0
  166. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/errors.py +0 -0
  167. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/mailgun.py +0 -0
  168. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/models.py +0 -0
  169. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/repository.py +0 -0
  170. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/router.py +0 -0
  171. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/schemas.py +0 -0
  172. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/email/service.py +0 -0
  173. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/entitlements/__init__.py +0 -0
  174. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/entitlements/errors.py +0 -0
  175. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/entitlements/models.py +0 -0
  176. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/entitlements/repository.py +0 -0
  177. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/entitlements/router.py +0 -0
  178. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/entitlements/schemas.py +0 -0
  179. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/entitlements/service.py +0 -0
  180. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/errors.py +0 -0
  181. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/events.py +0 -0
  182. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/hosted_assets/__init__.py +0 -0
  183. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/hosted_assets/errors.py +0 -0
  184. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/hosted_assets/models.py +0 -0
  185. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/hosted_assets/storage.py +0 -0
  186. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/issue_reporting_platform/__init__.py +0 -0
  187. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/issue_reporting_platform/errors.py +0 -0
  188. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/issue_reporting_platform/models.py +0 -0
  189. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/issue_reporting_platform/repository.py +0 -0
  190. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/issue_reporting_platform/router.py +0 -0
  191. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/issue_reporting_platform/schemas.py +0 -0
  192. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/issue_reporting_platform/service.py +0 -0
  193. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/notifications/__init__.py +0 -0
  194. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/notifications/models.py +0 -0
  195. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/notifications/repository.py +0 -0
  196. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/notifications/router.py +0 -0
  197. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/notifications/schemas.py +0 -0
  198. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/notifications/service.py +0 -0
  199. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/notifications/tasks.py +0 -0
  200. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/policies/__init__.py +0 -0
  201. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/policies/errors.py +0 -0
  202. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/policies/evaluator.py +0 -0
  203. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/policies/models.py +0 -0
  204. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/policies/repository.py +0 -0
  205. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/policies/router.py +0 -0
  206. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/policies/schemas.py +0 -0
  207. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/policies/service.py +0 -0
  208. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/realtime/__init__.py +0 -0
  209. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/realtime/router.py +0 -0
  210. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/realtime/schemas.py +0 -0
  211. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/realtime/service.py +0 -0
  212. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/redirects.py +0 -0
  213. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/secure_messages/__init__.py +0 -0
  214. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/secure_messages/encryption.py +0 -0
  215. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/secure_messages/errors.py +0 -0
  216. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/secure_messages/models.py +0 -0
  217. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/secure_messages/repository.py +0 -0
  218. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/secure_messages/router.py +0 -0
  219. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/secure_messages/schemas.py +0 -0
  220. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/secure_messages/service.py +0 -0
  221. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/security/__init__.py +0 -0
  222. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/security/errors.py +0 -0
  223. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/security/models.py +0 -0
  224. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/security/repository.py +0 -0
  225. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/security/router.py +0 -0
  226. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/security/schemas.py +0 -0
  227. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/security/service.py +0 -0
  228. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/self_service/__init__.py +0 -0
  229. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/self_service/errors.py +0 -0
  230. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/self_service/router.py +0 -0
  231. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/self_service/schemas.py +0 -0
  232. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/self_service/service.py +0 -0
  233. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/__init__.py +0 -0
  234. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/admin_detection.py +0 -0
  235. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/blacklist_service.py +0 -0
  236. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/jwt_service.py +0 -0
  237. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/models.py +0 -0
  238. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/nonce_service.py +0 -0
  239. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/password_service.py +0 -0
  240. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/repository.py +0 -0
  241. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/router.py +0 -0
  242. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/schemas.py +0 -0
  243. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/sessions/service.py +0 -0
  244. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/skill_evals/__init__.py +0 -0
  245. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/skill_evals/errors.py +0 -0
  246. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/skill_evals/models.py +0 -0
  247. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/skill_evals/repository.py +0 -0
  248. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/skill_evals/router.py +0 -0
  249. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/skill_evals/schemas.py +0 -0
  250. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/skill_evals/service.py +0 -0
  251. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/__init__.py +0 -0
  252. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/errors.py +0 -0
  253. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/guest_checkout.py +0 -0
  254. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/models.py +0 -0
  255. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/repository.py +0 -0
  256. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/router.py +0 -0
  257. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/schemas.py +0 -0
  258. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/service.py +0 -0
  259. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/tasks.py +0 -0
  260. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/stripe/webhook_handler.py +0 -0
  261. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/support_telemetry_platform/__init__.py +0 -0
  262. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/support_telemetry_platform/errors.py +0 -0
  263. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/support_telemetry_platform/models.py +0 -0
  264. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/support_telemetry_platform/repository.py +0 -0
  265. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/support_telemetry_platform/router.py +0 -0
  266. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/support_telemetry_platform/schemas.py +0 -0
  267. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/support_telemetry_platform/service.py +0 -0
  268. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/usage_control/__init__.py +0 -0
  269. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/usage_control/errors.py +0 -0
  270. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/usage_control/models.py +0 -0
  271. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/usage_control/repository.py +0 -0
  272. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/usage_control/router.py +0 -0
  273. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/usage_control/schemas.py +0 -0
  274. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/usage_control/service.py +0 -0
  275. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/users/__init__.py +0 -0
  276. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/users/models.py +0 -0
  277. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/users/repository.py +0 -0
  278. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/users/router.py +0 -0
  279. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/users/schemas.py +0 -0
  280. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/users/service.py +0 -0
  281. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/__init__.py +0 -0
  282. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/addressing.py +0 -0
  283. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/chains/__init__.py +0 -0
  284. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/chains/dispatcher.py +0 -0
  285. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/chains/ethereum.py +0 -0
  286. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/chains/solana.py +0 -0
  287. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/models.py +0 -0
  288. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/repository.py +0 -0
  289. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/router.py +0 -0
  290. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/schemas.py +0 -0
  291. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/wallets/service.py +0 -0
  292. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/__init__.py +0 -0
  293. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/delivery.py +0 -0
  294. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/destination_security.py +0 -0
  295. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/errors.py +0 -0
  296. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/models.py +0 -0
  297. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/repository.py +0 -0
  298. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/router.py +0 -0
  299. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/schemas.py +0 -0
  300. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/service.py +0 -0
  301. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/signing.py +0 -0
  302. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/webhooks/tasks.py +0 -0
  303. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/whitelist/__init__.py +0 -0
  304. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/whitelist/models.py +0 -0
  305. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/whitelist/repository.py +0 -0
  306. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/whitelist/router.py +0 -0
  307. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/whitelist/schemas.py +0 -0
  308. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/whitelist/service.py +0 -0
  309. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/__init__.py +0 -0
  310. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/adapter.py +0 -0
  311. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/constants.py +0 -0
  312. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/errors.py +0 -0
  313. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/models.py +0 -0
  314. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/repository.py +0 -0
  315. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/router.py +0 -0
  316. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/schemas.py +0 -0
  317. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/security.py +0 -0
  318. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/domains/x402/service.py +0 -0
  319. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/local_mode/__init__.py +0 -0
  320. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/local_mode/middleware.py +0 -0
  321. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/local_mode/personas.py +0 -0
  322. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/logging.py +0 -0
  323. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/__init__.py +0 -0
  324. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/api_key.py +0 -0
  325. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/client_ip.py +0 -0
  326. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/envelope.py +0 -0
  327. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/error_handler.py +0 -0
  328. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/jwt_auth.py +0 -0
  329. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/key_scope.py +0 -0
  330. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/local_mode.py +0 -0
  331. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/origin_validation.py +0 -0
  332. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/rate_limiting.py +0 -0
  333. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/security_headers.py +0 -0
  334. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware/spaps_deps.py +0 -0
  335. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/middleware.py +0 -0
  336. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/money/__init__.py +0 -0
  337. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/rbac/__init__.py +0 -0
  338. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/schemas/__init__.py +0 -0
  339. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/schemas/health.py +0 -0
  340. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/sdk/__init__.py +0 -0
  341. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/sdk/_ttl_cache.py +0 -0
  342. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/sdk/admin_token_cache.py +0 -0
  343. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/sdk/feature_evaluator.py +0 -0
  344. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/sdk/role_hierarchy.py +0 -0
  345. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/sdk/server_clients.py +0 -0
  346. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/sdk/trusted_service_middleware.py +0 -0
  347. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/secure_messaging.py +0 -0
  348. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/seeds/__init__.py +0 -0
  349. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/seeds/cli.py +0 -0
  350. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/seeds/schemas.py +0 -0
  351. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/seeds/validator.py +0 -0
  352. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/settings.py +0 -0
  353. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/spaps_settings.py +0 -0
  354. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/startup.py +0 -0
  355. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/tasks/__init__.py +0 -0
  356. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/tasks/celery_factory.py +0 -0
  357. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/tasks/health.py +0 -0
  358. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/tasks/notifications.py +0 -0
  359. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/.pre-commit-config.yaml +0 -0
  360. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/__init__.py +0 -0
  361. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/alembic/env.py +0 -0
  362. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/alembic/script.py.mako +0 -0
  363. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/alembic/versions/.gitkeep +0 -0
  364. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/alembic.ini +0 -0
  365. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/docs/templates/API_DOCUMENTATION_TEMPLATE.md +0 -0
  366. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/docs/templates/DEBUG_REPORT_TEMPLATE.md +0 -0
  367. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/docs/templates/OPERATIONS_PLAYBOOK_TEMPLATE.md +0 -0
  368. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/__init__.py +0 -0
  369. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/admin/router.py +0 -0
  370. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/auth/local_routes.py +0 -0
  371. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/users/__init__.py +0 -0
  372. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/users/models.py +0 -0
  373. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/users/repository.py +0 -0
  374. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/users/router.py +0 -0
  375. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/users/schemas.py +0 -0
  376. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/domains/users/service.py +0 -0
  377. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/.env.production.example +0 -0
  378. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/.githooks/pre-push +0 -0
  379. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/.github/workflows/deploy.yml +0 -0
  380. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/.github/workflows/rollback.yml +0 -0
  381. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/Makefile +0 -0
  382. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/deploy/deploy.sh +0 -0
  383. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/deploy/docker-compose.migration.yml +0 -0
  384. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/deploy/post-deploy-verify.sh +0 -0
  385. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/deploy/pre-deploy-checks.sh +0 -0
  386. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/docker-compose.prod.yml +0 -0
  387. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/backup-db.sh +0 -0
  388. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/await_db.py +0 -0
  389. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/fetch-prod-db.sh +0 -0
  390. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/local-debug-loop.sh +0 -0
  391. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/start-db.sh +0 -0
  392. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/dev/stop-db.sh +0 -0
  393. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/new-migration.sh +0 -0
  394. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/prepush.sh +0 -0
  395. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/operations/scripts/restore-db.sh +0 -0
  396. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/scripts/__init__.py +0 -0
  397. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/scripts/seeds/__init__.py +0 -0
  398. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/scripts/seeds/data/users.yaml +0 -0
  399. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/scripts/seeds/schemas/__init__.py +0 -0
  400. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/scripts/seeds/schemas/users.py +0 -0
  401. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/README.md +0 -0
  402. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/__init__.py +0 -0
  403. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/api/__init__.py +0 -0
  404. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/api/test_health.py +0 -0
  405. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/api/test_users_auth.py +0 -0
  406. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/conftest.py +0 -0
  407. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/domains/__init__.py +0 -0
  408. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/domains/example/__init__.py +0 -0
  409. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/domains/example/conftest.py +0 -0
  410. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/domains/users/__init__.py +0 -0
  411. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/domains/users/conftest.py +0 -0
  412. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/integration/__init__.py +0 -0
  413. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/integration/test_db_connectivity.py +0 -0
  414. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/unit/__init__.py +0 -0
  415. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/templates/tests/unit/test_settings.py +0 -0
  416. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/testing.py +0 -0
  417. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/tools/__init__.py +0 -0
  418. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/src/spaps_server_quickstart/tools/dependency_alignment.py +0 -0
  419. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/Makefile +0 -0
  420. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/docker-compose.yml +0 -0
  421. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/.env.production.example +0 -0
  422. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/.github/workflows/deploy.yml +0 -0
  423. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/Makefile +0 -0
  424. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/deploy.sh +0 -0
  425. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/post-deploy-verify.sh +0 -0
  426. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/pre-deploy-checks.sh +0 -0
  427. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/reverse-proxy/README.md +0 -0
  428. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/reverse-proxy/certs/.gitkeep +0 -0
  429. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/reverse-proxy/docker-compose.yml +0 -0
  430. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/reverse-proxy/nginx.conf +0 -0
  431. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/reverse-proxy/sites-available/.gitkeep +0 -0
  432. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/reverse-proxy/sites-enabled/.gitkeep +0 -0
  433. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/reverse-proxy/static/.gitkeep +0 -0
  434. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/deploy/reverse-proxy/up.sh +0 -0
  435. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/docker-compose.dev.yml +0 -0
  436. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/docker-compose.prod.yml +0 -0
  437. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/scripts/dev/await_db.py +0 -0
  438. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/scripts/dev/local-debug-loop.sh +0 -0
  439. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/scripts/dev/start-db.sh +0 -0
  440. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/operations/scripts/dev/stop-db.sh +0 -0
  441. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/templates/tests/conftest.py +0 -0
  442. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/conftest.py +0 -0
  443. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/__init__.py +0 -0
  444. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_app_factory_contract.py +0 -0
  445. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_auth_contract.py +0 -0
  446. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_celery_contract.py +0 -0
  447. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_db_contract.py +0 -0
  448. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_dependencies_contract.py +0 -0
  449. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_error_copy_contract.py +0 -0
  450. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_golden_app_pack.py +0 -0
  451. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_health_contract.py +0 -0
  452. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_manifest_parity.py +0 -0
  453. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_oss_hygiene_script.py +0 -0
  454. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_pagination_contract.py +0 -0
  455. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_router_contract.py +0 -0
  456. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_settings_contract.py +0 -0
  457. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_x402_devnet_prereq_script.py +0 -0
  458. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_x402_mainnet_billing_sql_script.py +0 -0
  459. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_x402_mainnet_db_script.py +0 -0
  460. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_x402_mainnet_env_script.py +0 -0
  461. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_x402_mainnet_evidence_script.py +0 -0
  462. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_x402_mainnet_live_script.py +0 -0
  463. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/contracts/test_x402_production_deployment_script.py +0 -0
  464. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/__init__.py +0 -0
  465. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/_db/__init__.py +0 -0
  466. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/_db/test_orm_helpers.py +0 -0
  467. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/affiliate_referrals/__init__.py +0 -0
  468. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/affiliate_referrals/test_repository.py +0 -0
  469. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/affiliate_referrals/test_router.py +0 -0
  470. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/affiliate_referrals/test_schemas.py +0 -0
  471. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/affiliate_referrals/test_service.py +0 -0
  472. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/agent_approvals/__init__.py +0 -0
  473. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/agent_approvals/test_authz.py +0 -0
  474. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/agent_approvals/test_authz_wiring.py +0 -0
  475. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/agent_approvals/test_callback_url_validation.py +0 -0
  476. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/agent_approvals/test_repository.py +0 -0
  477. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/agent_approvals/test_router.py +0 -0
  478. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/agent_approvals/test_service.py +0 -0
  479. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/app_links/__init__.py +0 -0
  480. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/app_links/test_blueprints.py +0 -0
  481. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/app_links/test_router.py +0 -0
  482. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/app_links/test_service.py +0 -0
  483. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/applications/__init__.py +0 -0
  484. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/applications/test_blueprints.py +0 -0
  485. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/applications/test_repository.py +0 -0
  486. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/applications/test_router.py +0 -0
  487. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/applications/test_service.py +0 -0
  488. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/audit/__init__.py +0 -0
  489. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/audit/test_repository.py +0 -0
  490. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/audit/test_retention.py +0 -0
  491. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/audit/test_router.py +0 -0
  492. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/audit/test_service.py +0 -0
  493. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/auth/__init__.py +0 -0
  494. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/auth/test_refresh_token_anomaly.py +0 -0
  495. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/auth/test_repository.py +0 -0
  496. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/auth/test_router.py +0 -0
  497. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/auth/test_service.py +0 -0
  498. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/auth/test_user_enumeration_timing.py +0 -0
  499. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/billing_accounts/__init__.py +0 -0
  500. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/billing_accounts/test_repository.py +0 -0
  501. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/billing_accounts/test_resolver.py +0 -0
  502. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/billing_accounts/test_router.py +0 -0
  503. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/cfo/__init__.py +0 -0
  504. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/cfo/test_repository.py +0 -0
  505. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/cfo/test_router.py +0 -0
  506. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/cfo/test_service.py +0 -0
  507. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/cfo_roles/__init__.py +0 -0
  508. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/cfo_roles/test_router.py +0 -0
  509. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/cfo_roles/test_service.py +0 -0
  510. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/conftest.py +0 -0
  511. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/crypto/__init__.py +0 -0
  512. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/crypto/test_repository.py +0 -0
  513. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/crypto/test_router.py +0 -0
  514. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/crypto/test_service.py +0 -0
  515. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/__init__.py +0 -0
  516. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/test_allotment_service.py +0 -0
  517. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/test_booking_policy_service.py +0 -0
  518. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/test_booking_routes.py +0 -0
  519. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/test_enhanced_booking_service.py +0 -0
  520. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/test_pricing.py +0 -0
  521. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/test_repository.py +0 -0
  522. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/test_router.py +0 -0
  523. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dayrate/test_service.py +0 -0
  524. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dev/__init__.py +0 -0
  525. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dev/test_router.py +0 -0
  526. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/dev/test_service.py +0 -0
  527. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/device_flow/__init__.py +0 -0
  528. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/device_flow/test_router.py +0 -0
  529. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/device_flow/test_service.py +0 -0
  530. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/device_flow/test_store.py +0 -0
  531. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/docs/__init__.py +0 -0
  532. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/docs/test_repository.py +0 -0
  533. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/docs/test_router.py +0 -0
  534. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/docs/test_service.py +0 -0
  535. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/email/__init__.py +0 -0
  536. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/email/test_config.py +0 -0
  537. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/email/test_env_safety.py +0 -0
  538. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/email/test_repository.py +0 -0
  539. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/email/test_router.py +0 -0
  540. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/email/test_service.py +0 -0
  541. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/entitlements/__init__.py +0 -0
  542. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/entitlements/test_repository.py +0 -0
  543. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/entitlements/test_router.py +0 -0
  544. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/entitlements/test_service.py +0 -0
  545. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/hosted_assets/__init__.py +0 -0
  546. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/hosted_assets/test_storage.py +0 -0
  547. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/issue_reporting_platform/__init__.py +0 -0
  548. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/issue_reporting_platform/test_repository.py +0 -0
  549. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/issue_reporting_platform/test_router.py +0 -0
  550. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/issue_reporting_platform/test_service.py +0 -0
  551. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/notifications/__init__.py +0 -0
  552. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/notifications/test_models.py +0 -0
  553. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/notifications/test_repository.py +0 -0
  554. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/notifications/test_router.py +0 -0
  555. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/notifications/test_service.py +0 -0
  556. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/policies/__init__.py +0 -0
  557. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/policies/test_evaluator.py +0 -0
  558. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/policies/test_repository.py +0 -0
  559. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/policies/test_router.py +0 -0
  560. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/policies/test_service.py +0 -0
  561. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/realtime/__init__.py +0 -0
  562. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/realtime/test_service.py +0 -0
  563. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/secure_messages/__init__.py +0 -0
  564. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/secure_messages/test_encryption.py +0 -0
  565. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/secure_messages/test_repository.py +0 -0
  566. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/secure_messages/test_router.py +0 -0
  567. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/secure_messages/test_service.py +0 -0
  568. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/secure_messages/test_tm013_security.py +0 -0
  569. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/security/__init__.py +0 -0
  570. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/security/test_repository.py +0 -0
  571. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/security/test_router.py +0 -0
  572. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/security/test_service.py +0 -0
  573. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/self_service/__init__.py +0 -0
  574. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/self_service/test_router.py +0 -0
  575. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/sessions/__init__.py +0 -0
  576. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/sessions/test_admin_detection.py +0 -0
  577. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/sessions/test_repository.py +0 -0
  578. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/sessions/test_router.py +0 -0
  579. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/sessions/test_service.py +0 -0
  580. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/skill_evals/__init__.py +0 -0
  581. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/skill_evals/test_dogfood_workflow.py +0 -0
  582. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/skill_evals/test_router.py +0 -0
  583. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/skill_evals/test_service.py +0 -0
  584. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/__init__.py +0 -0
  585. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/test_guest_checkout.py +0 -0
  586. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/test_repository.py +0 -0
  587. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/test_router.py +0 -0
  588. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/test_service.py +0 -0
  589. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/test_subscription_application_scoping.py +0 -0
  590. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/test_tasks.py +0 -0
  591. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/test_webhook_handler.py +0 -0
  592. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/stripe/test_webhook_hardening.py +0 -0
  593. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/support_telemetry_platform/__init__.py +0 -0
  594. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/support_telemetry_platform/test_repository.py +0 -0
  595. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/support_telemetry_platform/test_router.py +0 -0
  596. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/support_telemetry_platform/test_service.py +0 -0
  597. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/test_redirects.py +0 -0
  598. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/test_smoke.py +0 -0
  599. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/usage_control/test_repository.py +0 -0
  600. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/usage_control/test_router.py +0 -0
  601. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/usage_control/test_service.py +0 -0
  602. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/users/__init__.py +0 -0
  603. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/users/test_repository.py +0 -0
  604. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/users/test_router.py +0 -0
  605. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/users/test_service.py +0 -0
  606. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/wallets/__init__.py +0 -0
  607. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/wallets/test_addressing.py +0 -0
  608. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/wallets/test_chains.py +0 -0
  609. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/wallets/test_legacy_routes_tenant_binding.py +0 -0
  610. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/wallets/test_repository.py +0 -0
  611. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/wallets/test_router.py +0 -0
  612. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/wallets/test_service.py +0 -0
  613. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/webhooks/__init__.py +0 -0
  614. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/webhooks/test_delivery.py +0 -0
  615. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/webhooks/test_destination_security.py +0 -0
  616. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/webhooks/test_repository.py +0 -0
  617. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/webhooks/test_router.py +0 -0
  618. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/webhooks/test_service.py +0 -0
  619. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/webhooks/test_signing.py +0 -0
  620. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/webhooks/test_tasks.py +0 -0
  621. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/whitelist/__init__.py +0 -0
  622. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/whitelist/test_repository.py +0 -0
  623. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/whitelist/test_router.py +0 -0
  624. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/whitelist/test_service.py +0 -0
  625. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/x402/__init__.py +0 -0
  626. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/x402/test_facilitator_adapter.py +0 -0
  627. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/x402/test_money_contract.py +0 -0
  628. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/x402/test_router.py +0 -0
  629. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/domains/x402/test_service.py +0 -0
  630. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/__init__.py +0 -0
  631. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_api_key.py +0 -0
  632. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_client_ip.py +0 -0
  633. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_envelope.py +0 -0
  634. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_error_envelope_v1.py +0 -0
  635. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_jwt_auth.py +0 -0
  636. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_key_scope.py +0 -0
  637. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_local_mode.py +0 -0
  638. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_origin_validation.py +0 -0
  639. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_rate_limiting.py +0 -0
  640. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_security_headers.py +0 -0
  641. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/middleware/test_spaps_deps.py +0 -0
  642. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/seeds/test_cli.py +0 -0
  643. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_alembic_naming.py +0 -0
  644. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_alembic_path_bootstrap.py +0 -0
  645. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_api_naming_guard.py +0 -0
  646. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_api_router.py +0 -0
  647. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_app_factory.py +0 -0
  648. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_auth.py +0 -0
  649. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_auth_channels.py +0 -0
  650. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_auth_cookies.py +0 -0
  651. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_auth_dependencies.py +0 -0
  652. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_bcrypt_compat.py +0 -0
  653. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_db_session.py +0 -0
  654. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_dependency_alignment.py +0 -0
  655. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_dev_data_pipeline.py +0 -0
  656. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_environment_safety.py +0 -0
  657. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_health_router.py +0 -0
  658. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_imports.py +0 -0
  659. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_local_mode.py +0 -0
  660. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_logging.py +0 -0
  661. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_middleware.py +0 -0
  662. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_migration_runner.py +0 -0
  663. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_migration_status.py +0 -0
  664. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_operations_templates.py +0 -0
  665. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_package_metadata.py +0 -0
  666. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_primitive_guardrails.py +0 -0
  667. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_rbac.py +0 -0
  668. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_readme_snippets.py +0 -0
  669. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_sdk.py +0 -0
  670. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_secure_messaging.py +0 -0
  671. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_seed_validation.py +0 -0
  672. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_session_autocommit.py +0 -0
  673. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_sessions_blacklist.py +0 -0
  674. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_sessions_jwt.py +0 -0
  675. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_sessions_nonce.py +0 -0
  676. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_sessions_password.py +0 -0
  677. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_settings.py +0 -0
  678. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_spaps_app.py +0 -0
  679. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_startup_validation.py +0 -0
  680. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/tests/test_tasks.py +0 -0
  681. {spaps_server_quickstart-0.6.0 → spaps_server_quickstart-0.6.1}/todo.md +0 -0
@@ -6,6 +6,13 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.6.1] - 2026-06-01
10
+
11
+ ### Changed
12
+
13
+ - Relaxed the FastAPI upper bound to `<0.120` so downstream services can adopt FastAPI 0.119 and Starlette security fixes.
14
+ - Relaxed the `cryptography` upper bound to `<46.0` so downstream services can resolve CVE-fixed releases without local pip-audit ignores.
15
+
9
16
  ## [0.6.0] - 2026-05-29
10
17
 
11
18
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spaps-server-quickstart
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Shared FastAPI/Celery scaffolding for Sweet Potato service backends.
5
5
  Project-URL: Homepage, https://api.sweetpotato.dev
6
6
  Project-URL: Repository, https://github.com/sweet-potato/spaps
@@ -21,10 +21,10 @@ Requires-Dist: asyncpg<0.31,>=0.30.0
21
21
  Requires-Dist: bcrypt<6.0,>=4.0.0
22
22
  Requires-Dist: botocore<2.0,>=1.35.0
23
23
  Requires-Dist: celery<6.0,>=5.5.3
24
- Requires-Dist: cryptography<45.0,>=42.0.0
24
+ Requires-Dist: cryptography<46.0,>=42.0.0
25
25
  Requires-Dist: email-validator<3.0,>=2.1.0
26
26
  Requires-Dist: eth-account<1.0,>=0.13.0
27
- Requires-Dist: fastapi<0.119,>=0.118.0
27
+ Requires-Dist: fastapi<0.120,>=0.118.0
28
28
  Requires-Dist: greenlet<4.0,>=3.0.3
29
29
  Requires-Dist: httpx<0.29,>=0.28.1
30
30
  Requires-Dist: orjson<4.0,>=3.10.0
@@ -295,7 +295,7 @@ From the repository root: `make pytest`, `make lint`, `make typecheck`, `make py
295
295
  ## Metadata
296
296
 
297
297
  - `package_name`: `spaps-server-quickstart`
298
- - `latest_version`: `0.5.1`
298
+ - `latest_version`: `0.6.1`
299
299
  - `minimum_runtime`: `Python >=3.12`
300
300
  - `api_base_url`: `https://api.sweetpotato.dev`
301
301
 
@@ -216,7 +216,7 @@ From the repository root: `make pytest`, `make lint`, `make typecheck`, `make py
216
216
  ## Metadata
217
217
 
218
218
  - `package_name`: `spaps-server-quickstart`
219
- - `latest_version`: `0.5.1`
219
+ - `latest_version`: `0.6.1`
220
220
  - `minimum_runtime`: `Python >=3.12`
221
221
  - `api_base_url`: `https://api.sweetpotato.dev`
222
222
 
@@ -4,6 +4,16 @@ When `spaps-server-quickstart` publishes new releases, dependent services (e.g.
4
4
  `consumer_server`, `ingredient_server`) need a predictable upgrade cadence. Follow this
5
5
  checklist whenever we cut a release or adopt a newer version downstream.
6
6
 
7
+ ## 0.6.1
8
+
9
+ This is a dependency-bound patch release only. It permits FastAPI 0.119.x
10
+ (including compatible Starlette security fixes) and `cryptography` 45.x without
11
+ requiring any SPAPS application-code migration.
12
+
13
+ Downstream services should refresh their dependency lockfile after bumping
14
+ `spaps-server-quickstart` to 0.6.1, then run their normal lint, typecheck, test,
15
+ and security-audit gates.
16
+
7
17
  ## For the Quickstart Maintainer (Publishing a Release)
8
18
 
9
19
  1. **Triage changes** – confirm whether the release is a patch, minor, or major bump.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "spaps-server-quickstart"
7
- version = "0.6.0"
7
+ version = "0.6.1"
8
8
  description = "Shared FastAPI/Celery scaffolding for Sweet Potato service backends."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12"
@@ -23,7 +23,7 @@ classifiers = [
23
23
  "Topic :: Internet :: WWW/HTTP",
24
24
  ]
25
25
  dependencies = [
26
- "fastapi>=0.118.0,<0.119",
26
+ "fastapi>=0.118.0,<0.120",
27
27
  "uvicorn[standard]>=0.37.0,<0.38",
28
28
  "sqlalchemy>=2.0.30,<3.0",
29
29
  "asyncpg>=0.30.0,<0.31",
@@ -55,7 +55,7 @@ dependencies = [
55
55
  # Phase 3-4: Stripe + Entitlements
56
56
  "stripe>=8.0.0,<12.0",
57
57
  # Phase 7: PII Encryption (AES-256-GCM + HKDF-SHA256)
58
- "cryptography>=42.0.0,<45.0",
58
+ "cryptography>=42.0.0,<46.0",
59
59
  ]
60
60
 
61
61
  [project.optional-dependencies]
@@ -60,7 +60,7 @@ from .sdk import (
60
60
  FeatureContext,
61
61
  )
62
62
 
63
- __version__ = "0.6.0"
63
+ __version__ = "0.6.1"
64
64
 
65
65
  __all__ = [
66
66
  "create_app",
@@ -0,0 +1,229 @@
1
+ """OpenAPI authentication metadata for the SPAPS route contract."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Iterable
6
+ from copy import deepcopy
7
+ from typing import Any
8
+
9
+ from fastapi.routing import APIRoute
10
+
11
+ from .middleware.key_scope import is_endpoint_allowed_for_publishable
12
+
13
+ OPENAPI_AUTH_EXTENSION = "x-spaps-auth"
14
+
15
+ SPAPS_SECURITY_SCHEMES: dict[str, dict[str, Any]] = {
16
+ "SpapsApiKey": {
17
+ "type": "apiKey",
18
+ "in": "header",
19
+ "name": "X-API-Key",
20
+ "description": "Generic SPAPS application API key. Prefer the more specific publishable or secret-key schemes when an operation declares them.",
21
+ },
22
+ "SpapsPublishableKey": {
23
+ "type": "apiKey",
24
+ "in": "header",
25
+ "name": "X-API-Key",
26
+ "description": "Browser-safe SPAPS publishable key (`spaps_pub_*`). Requires an allowed Origin and route/method scope.",
27
+ },
28
+ "SpapsSecretKey": {
29
+ "type": "apiKey",
30
+ "in": "header",
31
+ "name": "X-API-Key",
32
+ "description": "Server-side SPAPS secret or legacy application key (`spaps_sec_*` or migrated `spaps_*`). Never expose this key in browser code.",
33
+ },
34
+ "BearerJWT": {
35
+ "type": "http",
36
+ "scheme": "bearer",
37
+ "bearerFormat": "JWT",
38
+ "description": "SPAPS user access token carried as `Authorization: Bearer <jwt>`.",
39
+ },
40
+ "StripeWebhookSignature": {
41
+ "type": "apiKey",
42
+ "in": "header",
43
+ "name": "stripe-signature",
44
+ "description": "Stripe webhook signature header verified against the configured Stripe webhook secret.",
45
+ },
46
+ "MailgunWebhookSignature": {
47
+ "type": "http",
48
+ "scheme": "mailgun-signature",
49
+ "description": "Mailgun webhook signature payload verified against the configured Mailgun signing key.",
50
+ },
51
+ }
52
+
53
+ PROVIDER_SIGNATURE_ROUTES: dict[tuple[str, str], tuple[str, str]] = {
54
+ ("POST", "/api/stripe/webhooks"): (
55
+ "StripeWebhookSignature",
56
+ "stripe_webhook_signature",
57
+ ),
58
+ ("POST", "/api/stripe/webhooks/{billing_account_id}"): (
59
+ "StripeWebhookSignature",
60
+ "stripe_webhook_signature",
61
+ ),
62
+ ("POST", "/api/webhooks/mailgun/events"): (
63
+ "MailgunWebhookSignature",
64
+ "mailgun_webhook_signature",
65
+ ),
66
+ }
67
+
68
+
69
+ def dependency_call_names(route: APIRoute) -> set[str]:
70
+ """Return all dependency call names for a route, including nested dependencies."""
71
+
72
+ names: set[str] = set()
73
+
74
+ def walk(dependant: Any) -> None:
75
+ for dependency in getattr(dependant, "dependencies", []):
76
+ call = getattr(dependency, "call", None)
77
+ name = getattr(call, "__name__", None)
78
+ if name:
79
+ names.add(name)
80
+ walk(dependency)
81
+
82
+ walk(route.dependant)
83
+ return names
84
+
85
+
86
+ def _route_path(route: APIRoute) -> str:
87
+ return getattr(route, "path_format", route.path)
88
+
89
+
90
+ def _route_accepts_publishable_key(route: APIRoute, method: str) -> bool:
91
+ return is_endpoint_allowed_for_publishable(
92
+ _route_path(route),
93
+ None,
94
+ method=method,
95
+ )
96
+
97
+
98
+ def _application_key_schemes(route: APIRoute, method: str) -> tuple[list[str], str]:
99
+ if _route_accepts_publishable_key(route, method):
100
+ return ["SpapsPublishableKey", "SpapsSecretKey"], "publishable_or_secret"
101
+ return ["SpapsSecretKey"], "secret"
102
+
103
+
104
+ def route_auth_metadata(route: APIRoute, method: str) -> dict[str, Any]:
105
+ """Classify a FastAPI route into machine-readable SPAPS auth metadata."""
106
+
107
+ method = method.upper()
108
+ path = _route_path(route)
109
+ provider_signature = PROVIDER_SIGNATURE_ROUTES.get((method, path))
110
+ if provider_signature is not None:
111
+ scheme, auth_type = provider_signature
112
+ return {
113
+ "auth_type": auth_type,
114
+ "required": True,
115
+ "schemes": [scheme],
116
+ "provider_signature": {"required": True, "scheme": scheme},
117
+ "api_key": {"required": False, "accepted": []},
118
+ "jwt": {"required": False, "optional": False},
119
+ "roles": [],
120
+ }
121
+
122
+ dependencies = dependency_call_names(route)
123
+ if "get_application" not in dependencies:
124
+ return {
125
+ "auth_type": "public",
126
+ "required": False,
127
+ "schemes": [],
128
+ "api_key": {"required": False, "accepted": []},
129
+ "jwt": {"required": False, "optional": False},
130
+ "roles": [],
131
+ }
132
+
133
+ key_schemes, key_type = _application_key_schemes(route, method)
134
+ roles: list[str] = []
135
+ jwt_required = False
136
+ jwt_optional = False
137
+ auth_type = "application"
138
+
139
+ if "require_super_admin_user" in dependencies:
140
+ roles = ["super_admin"]
141
+ jwt_required = True
142
+ auth_type = "super_admin"
143
+ elif "require_admin_user" in dependencies:
144
+ roles = ["admin"]
145
+ jwt_required = True
146
+ auth_type = "admin"
147
+ elif "get_current_user" in dependencies:
148
+ roles = ["user"]
149
+ jwt_required = True
150
+ auth_type = "user"
151
+ elif "get_optional_user" in dependencies:
152
+ jwt_optional = True
153
+ auth_type = "application_optional_user"
154
+
155
+ schemes = [*key_schemes]
156
+ if jwt_required:
157
+ schemes.append("BearerJWT")
158
+ return {
159
+ "auth_type": auth_type,
160
+ "required": True,
161
+ "schemes": schemes,
162
+ "api_key": {
163
+ "required": True,
164
+ "accepted": ["publishable", "secret"] if key_type == "publishable_or_secret" else ["secret"],
165
+ },
166
+ "jwt": {"required": jwt_required, "optional": jwt_optional},
167
+ "roles": roles,
168
+ }
169
+
170
+
171
+ def operation_security(metadata: dict[str, Any]) -> list[dict[str, list[Any]]]:
172
+ """Translate SPAPS auth metadata into OpenAPI security requirements."""
173
+
174
+ if not metadata["required"]:
175
+ return []
176
+
177
+ provider_signature = metadata.get("provider_signature")
178
+ if provider_signature:
179
+ return [{str(provider_signature["scheme"]): []}]
180
+
181
+ api_key = metadata.get("api_key", {})
182
+ key_types = list(api_key.get("accepted", []))
183
+ key_schemes = (
184
+ ["SpapsPublishableKey", "SpapsSecretKey"]
185
+ if "publishable" in key_types
186
+ else ["SpapsSecretKey"]
187
+ )
188
+
189
+ requirements: list[dict[str, list[Any]]] = []
190
+ for scheme in key_schemes:
191
+ requirement: dict[str, list[Any]] = {scheme: []}
192
+ if metadata.get("jwt", {}).get("required"):
193
+ requirement["BearerJWT"] = []
194
+ requirements.append(requirement)
195
+ return requirements
196
+
197
+
198
+ def _route_methods(route: APIRoute) -> Iterable[str]:
199
+ for method in sorted(route.methods or []):
200
+ if method.upper() not in {"HEAD", "OPTIONS"}:
201
+ yield method.upper()
202
+
203
+
204
+ def apply_openapi_auth_metadata(
205
+ schema: dict[str, Any],
206
+ routes: Iterable[Any],
207
+ ) -> dict[str, Any]:
208
+ """Attach SPAPS security schemes and operation auth metadata to a schema."""
209
+
210
+ components = schema.setdefault("components", {})
211
+ security_schemes = components.setdefault("securitySchemes", {})
212
+ for name, scheme in SPAPS_SECURITY_SCHEMES.items():
213
+ security_schemes[name] = deepcopy(scheme)
214
+
215
+ paths = schema.setdefault("paths", {})
216
+ for route in routes:
217
+ if not isinstance(route, APIRoute) or not route.include_in_schema:
218
+ continue
219
+ path = _route_path(route)
220
+ operations = paths.get(path, {})
221
+ for method in _route_methods(route):
222
+ operation = operations.get(method.lower())
223
+ if operation is None:
224
+ continue
225
+ metadata = route_auth_metadata(route, method)
226
+ operation["security"] = operation_security(metadata)
227
+ operation[OPENAPI_AUTH_EXTENSION] = metadata
228
+
229
+ return schema
@@ -16,6 +16,7 @@ from collections.abc import AsyncGenerator
16
16
  from contextlib import asynccontextmanager
17
17
 
18
18
  from fastapi import FastAPI
19
+ from fastapi.openapi.utils import get_openapi
19
20
  from fastapi.responses import ORJSONResponse
20
21
  from sqlalchemy import text
21
22
 
@@ -111,12 +112,36 @@ from .middleware.envelope import ResponseEnvelopeMiddleware
111
112
  from .middleware.error_handler import install_error_handlers
112
113
  from .middleware.rate_limiting import RateLimitMiddleware
113
114
  from .middleware.security_headers import SecurityHeadersMiddleware
115
+ from .openapi_auth import apply_openapi_auth_metadata
114
116
  from .spaps_settings import SpapsSettings, get_spaps_settings
115
117
  from .startup import startup_checks
116
118
 
117
119
  logger = logging.getLogger(__name__)
118
120
 
119
121
 
122
+ def _install_openapi_auth_metadata(app: FastAPI) -> None:
123
+ """Generate OpenAPI once, then attach SPAPS auth metadata from route dependencies."""
124
+
125
+ def custom_openapi() -> dict:
126
+ if app.openapi_schema:
127
+ return app.openapi_schema
128
+
129
+ schema = get_openapi(
130
+ title=app.title,
131
+ version=app.version,
132
+ openapi_version=app.openapi_version,
133
+ summary=app.summary,
134
+ description=app.description,
135
+ routes=app.routes,
136
+ tags=app.openapi_tags,
137
+ servers=app.servers,
138
+ )
139
+ app.openapi_schema = apply_openapi_auth_metadata(schema, app.routes)
140
+ return app.openapi_schema
141
+
142
+ app.openapi = custom_openapi # type: ignore[method-assign]
143
+
144
+
120
145
  async def _validate_tm013_pii_startup_invariant(
121
146
  settings: SpapsSettings,
122
147
  db_resources: DatabaseResources,
@@ -365,6 +390,7 @@ def create_spaps_app(
365
390
 
366
391
  # Include routers
367
392
  app.include_router(api_router)
393
+ _install_openapi_auth_metadata(app)
368
394
 
369
395
  # Store references on app.state for health checks and dependency injection
370
396
  app.state.db_resources = db_resources
@@ -0,0 +1,82 @@
1
+ from __future__ import annotations
2
+
3
+ import importlib.util
4
+ import sys
5
+ from pathlib import Path
6
+ from types import ModuleType
7
+
8
+ import pytest
9
+
10
+
11
+ def _load_script() -> ModuleType:
12
+ repo_root = Path(__file__).resolve().parents[4]
13
+ script_path = repo_root / "scripts" / "validate_manifest_fastapi.py"
14
+ spec = importlib.util.spec_from_file_location("validate_manifest_fastapi", script_path)
15
+ assert spec is not None
16
+ assert spec.loader is not None
17
+ module = importlib.util.module_from_spec(spec)
18
+ sys.modules[spec.name] = module
19
+ spec.loader.exec_module(module)
20
+ return module
21
+
22
+
23
+ SCRIPT = _load_script()
24
+
25
+
26
+ def test_non_manifest_app_routes_fail_closed_except_framework_allowlist() -> None:
27
+ realtime_source = SCRIPT.REPO_ROOT / "packages/python-server-quickstart/src/spaps_server_quickstart/domains/realtime/router.py"
28
+ app_routes = {
29
+ ("GET", "/docs"): SCRIPT.AppRoute(method="GET", path="/docs"),
30
+ ("POST", "/api/realtime/ws-ticket"): SCRIPT.AppRoute(
31
+ method="POST",
32
+ path="/api/realtime/ws-ticket",
33
+ file=realtime_source,
34
+ line=18,
35
+ ),
36
+ }
37
+
38
+ missing = SCRIPT._non_manifest_app_routes(app_routes, manifest_pairs=set())
39
+
40
+ assert [route.method + " " + route.path for route in missing] == ["POST /api/realtime/ws-ticket"]
41
+ assert missing[0].source_label() == (
42
+ "packages/python-server-quickstart/src/spaps_server_quickstart/domains/realtime/router.py:18"
43
+ )
44
+
45
+
46
+ def test_manifest_path_normalization_matches_fastapi_parameters() -> None:
47
+ assert SCRIPT._normalize_path("/api/items/{itemId}") == "/api/items/{item_id}"
48
+ assert SCRIPT._normalize_path("/api/items/{item_id:int}/") == "/api/items/{item_id}"
49
+
50
+
51
+ def test_main_fails_on_duplicate_manifest_endpoints(
52
+ monkeypatch: pytest.MonkeyPatch,
53
+ capsys: pytest.CaptureFixture[str],
54
+ ) -> None:
55
+ monkeypatch.setattr(
56
+ SCRIPT,
57
+ "_load_manifest_endpoint_entries",
58
+ lambda: (2, [("GET", "/api/items"), ("GET", "/api/items")]),
59
+ )
60
+ monkeypatch.setattr(
61
+ SCRIPT,
62
+ "_extract_app_routes",
63
+ lambda: {("GET", "/api/items"): SCRIPT.AppRoute(method="GET", path="/api/items")},
64
+ )
65
+
66
+ assert SCRIPT.main() == 1
67
+ assert "Duplicate endpoints in manifest" in capsys.readouterr().out
68
+
69
+
70
+ def test_main_fails_on_framework_routes_declared_in_manifest(
71
+ monkeypatch: pytest.MonkeyPatch,
72
+ capsys: pytest.CaptureFixture[str],
73
+ ) -> None:
74
+ monkeypatch.setattr(SCRIPT, "_load_manifest_endpoint_entries", lambda: (1, [("GET", "/docs")]))
75
+ monkeypatch.setattr(
76
+ SCRIPT,
77
+ "_extract_app_routes",
78
+ lambda: {("GET", "/docs"): SCRIPT.AppRoute(method="GET", path="/docs")},
79
+ )
80
+
81
+ assert SCRIPT.main() == 1
82
+ assert "Framework-only routes should not be listed in manifest" in capsys.readouterr().out
@@ -0,0 +1,189 @@
1
+ """Contract tests for SPAPS OpenAPI authentication metadata."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib.util
6
+ import os
7
+ import sys
8
+ from copy import deepcopy
9
+ from pathlib import Path
10
+ from types import ModuleType
11
+ from typing import Any
12
+ from unittest.mock import MagicMock, patch
13
+
14
+ import pytest
15
+
16
+ from spaps_server_quickstart.openapi_auth import (
17
+ SPAPS_SECURITY_SCHEMES,
18
+ apply_openapi_auth_metadata,
19
+ )
20
+ from spaps_server_quickstart.spaps_app import create_spaps_app
21
+
22
+
23
+ def _load_validator_script() -> ModuleType:
24
+ repo_root = Path(__file__).resolve().parents[4]
25
+ script_path = repo_root / "scripts" / "validate_openapi_auth_metadata.py"
26
+ spec = importlib.util.spec_from_file_location(
27
+ "validate_openapi_auth_metadata",
28
+ script_path,
29
+ )
30
+ assert spec is not None
31
+ assert spec.loader is not None
32
+ module = importlib.util.module_from_spec(spec)
33
+ sys.modules[spec.name] = module
34
+ spec.loader.exec_module(module)
35
+ return module
36
+
37
+
38
+ VALIDATOR_SCRIPT = _load_validator_script()
39
+
40
+
41
+ @pytest.fixture(scope="module")
42
+ def _openapi_schema() -> dict[str, Any]:
43
+ os.environ["SPAPS_ENV"] = "test"
44
+ with patch("spaps_server_quickstart.spaps_app.DatabaseResources") as mock_db:
45
+ mock_db.return_value = MagicMock()
46
+ return create_spaps_app().openapi()
47
+
48
+
49
+ def _operation(schema: dict[str, Any], method: str, path: str) -> dict[str, Any]:
50
+ return schema["paths"][path][method.lower()]
51
+
52
+
53
+ def _validator_issues(schema: dict[str, Any]) -> list[str]:
54
+ return VALIDATOR_SCRIPT.validate_schema(schema, VALIDATOR_SCRIPT._build_app_routes())
55
+
56
+
57
+ def test_openapi_declares_spaps_security_schemes(_openapi_schema: dict[str, Any]) -> None:
58
+ schema = _openapi_schema
59
+ security_schemes = schema["components"]["securitySchemes"]
60
+ assert "SpapsApiKey" in security_schemes
61
+ assert security_schemes["SpapsApiKey"]["name"] == "X-API-Key"
62
+ assert "SpapsPublishableKey" in security_schemes
63
+ assert "SpapsSecretKey" in security_schemes
64
+ assert "BearerJWT" in security_schemes
65
+ assert "StripeWebhookSignature" in security_schemes
66
+ assert "MailgunWebhookSignature" in security_schemes
67
+
68
+
69
+ def test_apply_openapi_auth_metadata_overwrites_stale_security_schemes() -> None:
70
+ schema: dict[str, Any] = {
71
+ "components": {
72
+ "securitySchemes": {
73
+ "SpapsSecretKey": {"type": "apiKey", "in": "header", "name": "X-WRONG"}
74
+ }
75
+ },
76
+ "paths": {},
77
+ }
78
+
79
+ apply_openapi_auth_metadata(schema, routes=[])
80
+
81
+ secret_key_scheme = schema["components"]["securitySchemes"]["SpapsSecretKey"]
82
+ assert secret_key_scheme == SPAPS_SECURITY_SCHEMES["SpapsSecretKey"]
83
+ assert secret_key_scheme is not SPAPS_SECURITY_SCHEMES["SpapsSecretKey"]
84
+
85
+
86
+ def test_app_openapi_cache_preserves_auth_metadata() -> None:
87
+ os.environ["SPAPS_ENV"] = "test"
88
+ with patch("spaps_server_quickstart.spaps_app.DatabaseResources") as mock_db:
89
+ mock_db.return_value = MagicMock()
90
+ app = create_spaps_app()
91
+
92
+ first_schema = app.openapi()
93
+ second_schema = app.openapi()
94
+
95
+ assert second_schema is first_schema
96
+ assert _operation(second_schema, "GET", "/health")["x-spaps-auth"]["auth_type"] == "public"
97
+ assert _operation(second_schema, "POST", "/api/auth/login")["security"] == [
98
+ {"SpapsPublishableKey": []},
99
+ {"SpapsSecretKey": []},
100
+ ]
101
+
102
+
103
+ def test_validator_rejects_security_scheme_drift(_openapi_schema: dict[str, Any]) -> None:
104
+ schema = deepcopy(_openapi_schema)
105
+ schema["components"]["securitySchemes"]["SpapsSecretKey"]["name"] = "X-WRONG"
106
+
107
+ issues = _validator_issues(schema)
108
+
109
+ assert any("SpapsSecretKey security scheme=" in issue for issue in issues)
110
+
111
+
112
+ def test_validator_rejects_nested_auth_metadata_drift(_openapi_schema: dict[str, Any]) -> None:
113
+ schema = deepcopy(_openapi_schema)
114
+ operation = _operation(schema, "GET", "/api/auth/user")
115
+ operation["x-spaps-auth"]["roles"] = []
116
+
117
+ issues = _validator_issues(schema)
118
+
119
+ assert any(
120
+ "GET /api/auth/user x-spaps-auth=" in issue and "'roles': ['user']" in issue
121
+ for issue in issues
122
+ )
123
+
124
+
125
+ def test_public_routes_are_explicitly_marked_public(_openapi_schema: dict[str, Any]) -> None:
126
+ schema = _openapi_schema
127
+ operation = _operation(schema, "GET", "/health")
128
+
129
+ assert operation["security"] == []
130
+ assert operation["x-spaps-auth"]["auth_type"] == "public"
131
+ assert operation["x-spaps-auth"]["required"] is False
132
+
133
+
134
+ def test_publishable_application_route_exposes_key_options(_openapi_schema: dict[str, Any]) -> None:
135
+ schema = _openapi_schema
136
+ operation = _operation(schema, "POST", "/api/auth/login")
137
+
138
+ assert operation["security"] == [
139
+ {"SpapsPublishableKey": []},
140
+ {"SpapsSecretKey": []},
141
+ ]
142
+ assert operation["x-spaps-auth"]["auth_type"] == "application"
143
+ assert operation["x-spaps-auth"]["api_key"]["accepted"] == ["publishable", "secret"]
144
+ assert operation["x-spaps-auth"]["jwt"] == {"required": False, "optional": False}
145
+
146
+
147
+ def test_user_route_requires_key_and_bearer_jwt(_openapi_schema: dict[str, Any]) -> None:
148
+ schema = _openapi_schema
149
+ operation = _operation(schema, "GET", "/api/auth/user")
150
+
151
+ assert operation["security"] == [
152
+ {"SpapsPublishableKey": [], "BearerJWT": []},
153
+ {"SpapsSecretKey": [], "BearerJWT": []},
154
+ ]
155
+ assert operation["x-spaps-auth"]["auth_type"] == "user"
156
+ assert operation["x-spaps-auth"]["roles"] == ["user"]
157
+ assert operation["x-spaps-auth"]["jwt"]["required"] is True
158
+
159
+
160
+ def test_admin_and_super_admin_routes_expose_role_metadata(
161
+ _openapi_schema: dict[str, Any],
162
+ ) -> None:
163
+ schema = _openapi_schema
164
+ admin_operation = _operation(schema, "GET", "/api/admin/billing/verify")
165
+ super_admin_operation = _operation(schema, "POST", "/api/admin/billing/attach")
166
+
167
+ assert admin_operation["security"] == [{"SpapsSecretKey": [], "BearerJWT": []}]
168
+ assert admin_operation["x-spaps-auth"]["auth_type"] == "admin"
169
+ assert admin_operation["x-spaps-auth"]["roles"] == ["admin"]
170
+
171
+ assert super_admin_operation["security"] == [{"SpapsSecretKey": [], "BearerJWT": []}]
172
+ assert super_admin_operation["x-spaps-auth"]["auth_type"] == "super_admin"
173
+ assert super_admin_operation["x-spaps-auth"]["roles"] == ["super_admin"]
174
+
175
+
176
+ def test_provider_webhook_routes_expose_signature_metadata(
177
+ _openapi_schema: dict[str, Any],
178
+ ) -> None:
179
+ schema = _openapi_schema
180
+ stripe_operation = _operation(schema, "POST", "/api/stripe/webhooks")
181
+ mailgun_operation = _operation(schema, "POST", "/api/webhooks/mailgun/events")
182
+
183
+ assert stripe_operation["security"] == [{"StripeWebhookSignature": []}]
184
+ assert stripe_operation["x-spaps-auth"]["auth_type"] == "stripe_webhook_signature"
185
+ assert stripe_operation["x-spaps-auth"]["provider_signature"]["required"] is True
186
+
187
+ assert mailgun_operation["security"] == [{"MailgunWebhookSignature": []}]
188
+ assert mailgun_operation["x-spaps-auth"]["auth_type"] == "mailgun_webhook_signature"
189
+ assert mailgun_operation["x-spaps-auth"]["provider_signature"]["required"] is True