dtxapps 1.0.0__py3-none-any.whl

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 (473) hide show
  1. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  2. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  3. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  4. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  5. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  6. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  7. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  8. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  9. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  10. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  11. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  12. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  13. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  14. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  15. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  16. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  17. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  18. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  19. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  20. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  21. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  22. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  23. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  24. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  25. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  26. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  27. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  28. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  29. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  30. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  31. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  32. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  33. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  34. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  35. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  36. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  37. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  38. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  39. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  40. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  41. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  42. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  43. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  44. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  45. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  46. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  47. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  48. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  49. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  50. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  51. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  52. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  53. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  54. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  55. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  56. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  57. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  58. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  59. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  60. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  61. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  62. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  63. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  64. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  65. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  66. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  67. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  68. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  69. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  70. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  71. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  72. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  73. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  74. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  75. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  76. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  77. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  78. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  79. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  80. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  81. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  82. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  83. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  84. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  85. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  86. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  87. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  88. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  89. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  90. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  91. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  92. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  93. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  94. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  95. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  96. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  97. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  98. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  99. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  100. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  101. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  102. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  103. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  104. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  105. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  106. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  107. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  108. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  109. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  110. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  111. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  112. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  113. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  114. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  115. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  116. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  117. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  118. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  119. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  120. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  121. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  122. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  123. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  124. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  125. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  126. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  127. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  128. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  129. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  130. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  131. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  132. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  133. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  134. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  135. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  136. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  137. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  138. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  139. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  140. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  141. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  142. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  143. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  144. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  145. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  146. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  147. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  148. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  149. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  150. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  151. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  152. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  153. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  154. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  155. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  156. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  157. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  158. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  159. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  160. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  161. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  162. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  163. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  164. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  165. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  166. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  167. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  168. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  169. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  170. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  171. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  172. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  173. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  174. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  175. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  176. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  177. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  178. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  179. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  180. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  181. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  182. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  183. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  184. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  185. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  186. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  187. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  188. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  189. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  190. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  191. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  192. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  193. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  194. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  195. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  196. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  197. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  198. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  199. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  200. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  201. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  202. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  203. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  204. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  205. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  206. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  207. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  208. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  209. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  210. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  211. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  212. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  213. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  214. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  215. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  216. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  217. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  218. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  219. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  220. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  221. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  222. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  223. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  224. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  225. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  226. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  227. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  228. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  229. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  230. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  231. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  232. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  233. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  234. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  235. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  236. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  237. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  238. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  239. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  240. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  241. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  242. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  243. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  244. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  245. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  246. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  247. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  248. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  249. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  250. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  251. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  252. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  253. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  254. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  255. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  256. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  257. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  258. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  259. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  260. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  261. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  262. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  263. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  264. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  265. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  266. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  267. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  268. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  269. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  270. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  271. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  272. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  273. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  274. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  275. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  276. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  277. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  278. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  279. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  280. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  281. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  282. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  283. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  284. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  285. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  286. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  287. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  288. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  289. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  290. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  291. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  292. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  293. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  294. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  295. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  296. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  297. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  298. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  299. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  300. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  301. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  302. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  303. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  304. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  305. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  306. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  307. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  308. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  309. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  310. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  311. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  312. build/lib/build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  313. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  314. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  315. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  316. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  317. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  318. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  319. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  320. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  321. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  322. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  323. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  324. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  325. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  326. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  327. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  328. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  329. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  330. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  331. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  332. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  333. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  334. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  335. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  336. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  337. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  338. build/lib/build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  339. build/lib/build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  340. build/lib/build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  341. build/lib/build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  342. build/lib/build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  343. build/lib/build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  344. build/lib/build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  345. build/lib/build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  346. build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  347. build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  348. build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  349. build/lib/build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  350. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  351. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  352. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  353. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  354. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  355. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  356. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  357. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  358. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  359. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  360. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  361. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  362. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  363. build/lib/build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  364. build/lib/build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  365. build/lib/build/lib/build/lib/dtxapps/__init__.py +0 -0
  366. build/lib/build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  367. build/lib/build/lib/build/lib/dtxapps/constants.py +77 -0
  368. build/lib/build/lib/build/lib/dtxapps/context.py +539 -0
  369. build/lib/build/lib/build/lib/dtxapps/main.py +128 -0
  370. build/lib/build/lib/build/lib/dtxapps/output.py +98 -0
  371. build/lib/build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  372. build/lib/build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  373. build/lib/build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  374. build/lib/build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  375. build/lib/build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  376. build/lib/build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  377. build/lib/build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  378. build/lib/build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  379. build/lib/build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  380. build/lib/build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  381. build/lib/build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  382. build/lib/build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  383. build/lib/build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  384. build/lib/build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  385. build/lib/build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  386. build/lib/build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  387. build/lib/build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  388. build/lib/build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  389. build/lib/build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  390. build/lib/build/lib/build/lib/dtxapps/services/config.py +87 -0
  391. build/lib/build/lib/dtxapps/__init__.py +0 -0
  392. build/lib/build/lib/dtxapps/cli_utils.py +58 -0
  393. build/lib/build/lib/dtxapps/constants.py +77 -0
  394. build/lib/build/lib/dtxapps/context.py +539 -0
  395. build/lib/build/lib/dtxapps/main.py +128 -0
  396. build/lib/build/lib/dtxapps/output.py +98 -0
  397. build/lib/build/lib/dtxapps/services/__init__.py +0 -0
  398. build/lib/build/lib/dtxapps/services/apps/__init__.py +213 -0
  399. build/lib/build/lib/dtxapps/services/apps/discovery.py +246 -0
  400. build/lib/build/lib/dtxapps/services/apps/dyngen.py +698 -0
  401. build/lib/build/lib/dtxapps/services/apps/token_manager.py +161 -0
  402. build/lib/build/lib/dtxapps/services/auth/__init__.py +0 -0
  403. build/lib/build/lib/dtxapps/services/auth/api_keys.py +124 -0
  404. build/lib/build/lib/dtxapps/services/auth/apps.py +511 -0
  405. build/lib/build/lib/dtxapps/services/auth/audit.py +115 -0
  406. build/lib/build/lib/dtxapps/services/auth/commands.py +22 -0
  407. build/lib/build/lib/dtxapps/services/auth/groups.py +143 -0
  408. build/lib/build/lib/dtxapps/services/auth/identities.py +127 -0
  409. build/lib/build/lib/dtxapps/services/auth/lockdown.py +63 -0
  410. build/lib/build/lib/dtxapps/services/auth/login.py +228 -0
  411. build/lib/build/lib/dtxapps/services/auth/reports.py +54 -0
  412. build/lib/build/lib/dtxapps/services/auth/roles.py +130 -0
  413. build/lib/build/lib/dtxapps/services/auth/sessions.py +89 -0
  414. build/lib/build/lib/dtxapps/services/auth/settings.py +76 -0
  415. build/lib/build/lib/dtxapps/services/auth/whoami.py +73 -0
  416. build/lib/build/lib/dtxapps/services/config.py +87 -0
  417. build/lib/dtxapps/__init__.py +0 -0
  418. build/lib/dtxapps/cli_utils.py +58 -0
  419. build/lib/dtxapps/constants.py +77 -0
  420. build/lib/dtxapps/context.py +539 -0
  421. build/lib/dtxapps/main.py +128 -0
  422. build/lib/dtxapps/output.py +98 -0
  423. build/lib/dtxapps/services/__init__.py +0 -0
  424. build/lib/dtxapps/services/apps/__init__.py +213 -0
  425. build/lib/dtxapps/services/apps/discovery.py +246 -0
  426. build/lib/dtxapps/services/apps/dyngen.py +698 -0
  427. build/lib/dtxapps/services/apps/token_manager.py +161 -0
  428. build/lib/dtxapps/services/auth/__init__.py +0 -0
  429. build/lib/dtxapps/services/auth/api_keys.py +124 -0
  430. build/lib/dtxapps/services/auth/apps.py +511 -0
  431. build/lib/dtxapps/services/auth/audit.py +115 -0
  432. build/lib/dtxapps/services/auth/commands.py +22 -0
  433. build/lib/dtxapps/services/auth/groups.py +143 -0
  434. build/lib/dtxapps/services/auth/identities.py +127 -0
  435. build/lib/dtxapps/services/auth/lockdown.py +63 -0
  436. build/lib/dtxapps/services/auth/login.py +228 -0
  437. build/lib/dtxapps/services/auth/reports.py +54 -0
  438. build/lib/dtxapps/services/auth/roles.py +130 -0
  439. build/lib/dtxapps/services/auth/sessions.py +89 -0
  440. build/lib/dtxapps/services/auth/settings.py +76 -0
  441. build/lib/dtxapps/services/auth/whoami.py +73 -0
  442. build/lib/dtxapps/services/config.py +87 -0
  443. dtxapps/__init__.py +0 -0
  444. dtxapps/cli_utils.py +58 -0
  445. dtxapps/constants.py +77 -0
  446. dtxapps/context.py +539 -0
  447. dtxapps/main.py +128 -0
  448. dtxapps/output.py +98 -0
  449. dtxapps/services/__init__.py +0 -0
  450. dtxapps/services/apps/__init__.py +213 -0
  451. dtxapps/services/apps/discovery.py +246 -0
  452. dtxapps/services/apps/dyngen.py +698 -0
  453. dtxapps/services/apps/token_manager.py +161 -0
  454. dtxapps/services/auth/__init__.py +0 -0
  455. dtxapps/services/auth/api_keys.py +124 -0
  456. dtxapps/services/auth/apps.py +511 -0
  457. dtxapps/services/auth/audit.py +115 -0
  458. dtxapps/services/auth/commands.py +22 -0
  459. dtxapps/services/auth/groups.py +143 -0
  460. dtxapps/services/auth/identities.py +127 -0
  461. dtxapps/services/auth/lockdown.py +63 -0
  462. dtxapps/services/auth/login.py +228 -0
  463. dtxapps/services/auth/reports.py +54 -0
  464. dtxapps/services/auth/roles.py +130 -0
  465. dtxapps/services/auth/sessions.py +89 -0
  466. dtxapps/services/auth/settings.py +76 -0
  467. dtxapps/services/auth/whoami.py +73 -0
  468. dtxapps/services/config.py +87 -0
  469. dtxapps-1.0.0.dist-info/METADATA +14 -0
  470. dtxapps-1.0.0.dist-info/RECORD +473 -0
  471. dtxapps-1.0.0.dist-info/WHEEL +5 -0
  472. dtxapps-1.0.0.dist-info/entry_points.txt +2 -0
  473. dtxapps-1.0.0.dist-info/top_level.txt +3 -0
@@ -0,0 +1,58 @@
1
+ import json
2
+ import sys
3
+ from pathlib import Path
4
+ from typing import Any, cast
5
+
6
+ import typer
7
+ from rich.console import Console
8
+
9
+
10
+ def load_json_payload(
11
+ file: Path | None,
12
+ json_str: str | None,
13
+ err_console: Console,
14
+ ) -> dict[str, Any]:
15
+ """Load a JSON payload from --file, --json, or stdin."""
16
+ if file:
17
+ try:
18
+ return cast(dict[str, Any], json.loads(file.read_text()))
19
+ except (FileNotFoundError, PermissionError, json.JSONDecodeError) as e:
20
+ err_console.print(f"[red]Error: could not read {file}: {e}[/red]")
21
+ raise typer.Exit(1)
22
+ if json_str:
23
+ return cast(dict[str, Any], json.loads(json_str))
24
+ raw = sys.stdin.read().strip()
25
+ if not raw:
26
+ err_console.print("[red]No input provided. Use --file, --json, or pipe JSON via stdin.[/red]")
27
+ raise SystemExit(1)
28
+ return cast(dict[str, Any], json.loads(raw))
29
+
30
+
31
+ def build_page_params(limit: int, cursor: str | None = None) -> dict[str, Any]:
32
+ """Build a pagination params dict for cursor-paginated API calls."""
33
+ params: dict[str, Any] = {"limit": limit}
34
+ if cursor:
35
+ params["cursor"] = cursor
36
+ return params
37
+
38
+
39
+ def confirm_option(prompt: str) -> Any:
40
+ return typer.Option(False, "--confirm", prompt=prompt)
41
+
42
+
43
+ def load_value(raw: str) -> Any:
44
+ """Parse raw as JSON; fall back to returning it as a plain string."""
45
+ try:
46
+ return json.loads(raw)
47
+ except json.JSONDecodeError:
48
+ return raw
49
+
50
+
51
+ def pick(data: dict[str, Any], keys: tuple[str, ...]) -> dict[str, Any]:
52
+ """Return a new dict containing only the specified keys."""
53
+ return {k: v for k, v in data.items() if k in keys}
54
+
55
+
56
+ def require_confirm(confirm: bool) -> None:
57
+ if not confirm:
58
+ raise typer.Abort()
@@ -0,0 +1,77 @@
1
+ from pathlib import Path
2
+
3
+ # Default API URL
4
+ DEFAULT_API_URL = "https://dtxapps.dotmatics.com"
5
+
6
+ # Build info (injected at publish time by cli-publish.sh)
7
+ GIT_HASH = "fb48521"
8
+
9
+ # Image MIME types for icon upload
10
+ IMAGE_MIME_TYPES = {
11
+ ".png": "image/png",
12
+ ".jpg": "image/jpeg",
13
+ ".jpeg": "image/jpeg",
14
+ ".gif": "image/gif",
15
+ ".webp": "image/webp",
16
+ }
17
+
18
+ # Output option help text
19
+ OUTPUT_HELP = "Output format: table or json"
20
+
21
+ # HTTP client
22
+ HTTP_TIMEOUT = 10
23
+
24
+ # CLI option defaults
25
+ DEFAULT_PAGE_SIZE = 50
26
+ FETCH_ALL_PAGES_LIMIT = 200
27
+ DEFAULT_PROFILE = "default"
28
+ DEFAULT_OUTPUT_FORMAT = "table"
29
+
30
+ # Token handling
31
+ TOKEN_EXPIRY_BUFFER_SECONDS = 30
32
+
33
+ # Environment variables
34
+ ENV_API_KEY = "DTXAPPS_API_KEY"
35
+ ENV_API_URL = "DTXAPPS_URL"
36
+
37
+ # JSON response keys
38
+ RESPONSE_KEY_ITEMS = "items"
39
+ RESPONSE_KEY_NEXT_CURSOR = "next_cursor"
40
+
41
+ # HTTP status codes
42
+ HTTP_OK = 200
43
+ HTTP_NO_CONTENT = 204
44
+
45
+ # Display truncation
46
+ LOG_ID_DISPLAY_LENGTH = 20
47
+ ACTOR_ID_DISPLAY_LENGTH = 8
48
+
49
+ # PKCE callback port range
50
+ PKCE_PORT_MIN = 9870
51
+ PKCE_PORT_MAX = 9877
52
+ PKCE_SCOPE = "openid email profile"
53
+ PKCE_RESPONSE_TYPE = "code"
54
+ PKCE_CHALLENGE_METHOD = "S256"
55
+ PKCE_VERIFIER_BYTES = 64
56
+
57
+ # Group member types
58
+ MEMBER_TYPE_IDENTITY = "identity"
59
+ MEMBER_TYPE_GROUP = "group"
60
+
61
+ # Config directory and file paths (used in 2+ files — ADR-014)
62
+ CREDS_DIR_NAME = ".dot_dtxapps"
63
+ PROFILES_FILE = Path.home() / CREDS_DIR_NAME / "profiles"
64
+ APP_TOKENS_FILE = Path.home() / CREDS_DIR_NAME / "app_tokens"
65
+
66
+ # API path prefixes (used in 2+ files — ADR-019)
67
+ APPS_BASE = "/apps"
68
+ APPS_EXCHANGE_CODE = "/apps/exchange-code"
69
+ AUTH_GROUPS_BASE = "/auth/groups"
70
+ AUTH_IDENTITIES_BASE = "/auth/identities"
71
+ AUTH_IDENTITY_GROUPS_PATH = AUTH_IDENTITIES_BASE + "/{identity_id}/groups"
72
+ AUTH_REFRESH = "/auth/refresh"
73
+ AUTH_ROLES_BASE = "/auth/roles"
74
+ AUTH_SESSIONS_BASE = "/auth/sessions"
75
+ AUDIT_EVENTS_BASE = "/audit/events"
76
+ REPORTS_BASE = "/audit/reports"
77
+ REPORTS_COMPLIANCE_REPORT = REPORTS_BASE + "/compliance-report"
@@ -0,0 +1,539 @@
1
+ import configparser
2
+ import json
3
+ import os
4
+ import time
5
+ from pathlib import Path
6
+ from typing import cast
7
+ import httpx
8
+ import jwt as pyjwt
9
+ from rich.console import Console
10
+
11
+ from dtxapps.constants import (
12
+ AUTH_REFRESH,
13
+ CREDS_DIR_NAME,
14
+ DEFAULT_API_URL,
15
+ DEFAULT_OUTPUT_FORMAT,
16
+ DEFAULT_PROFILE,
17
+ ENV_API_KEY,
18
+ ENV_API_URL,
19
+ FETCH_ALL_PAGES_LIMIT,
20
+ HTTP_OK,
21
+ HTTP_TIMEOUT,
22
+ PROFILES_FILE,
23
+ RESPONSE_KEY_ITEMS,
24
+ RESPONSE_KEY_NEXT_CURSOR,
25
+ TOKEN_EXPIRY_BUFFER_SECONDS,
26
+ )
27
+
28
+ CREDS_DIR = Path.home() / CREDS_DIR_NAME
29
+ TOKENS_FILE = CREDS_DIR / "tokens" # JWTs — cleared on logout
30
+ console = Console(stderr=True)
31
+ _DEFAULT_API_URL = DEFAULT_API_URL
32
+
33
+ _debug: bool = False
34
+ _profile: str = DEFAULT_PROFILE
35
+ _profile_explicitly_set: bool = False
36
+ _output: str = DEFAULT_OUTPUT_FORMAT
37
+
38
+
39
+ def set_debug(val: bool) -> None:
40
+ global _debug
41
+ _debug = val
42
+
43
+
44
+ def is_debug() -> bool:
45
+ return _debug
46
+
47
+
48
+ def set_profile(val: str, explicit: bool = False) -> None:
49
+ global _profile, _profile_explicitly_set
50
+ _profile = val
51
+ if explicit:
52
+ _profile_explicitly_set = True
53
+
54
+
55
+ def get_profile() -> str:
56
+ return _profile
57
+
58
+
59
+ def set_output(val: str) -> None:
60
+ global _output
61
+ _output = val
62
+
63
+
64
+ def get_output() -> str:
65
+ return _output
66
+
67
+
68
+ def _load_cfg(path: Path) -> configparser.ConfigParser:
69
+ cfg = configparser.ConfigParser()
70
+ if path.exists():
71
+ cfg.read(path)
72
+ return cfg
73
+
74
+
75
+ def _save_cfg(cfg: configparser.ConfigParser, path: Path) -> None:
76
+ CREDS_DIR.mkdir(mode=0o700, parents=True, exist_ok=True)
77
+ CREDS_DIR.chmod(0o700) # enforce even if dir already existed (mkdir mode is umask-filtered)
78
+ fd = os.open(str(path), os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600)
79
+ with os.fdopen(fd, "w") as f:
80
+ cfg.write(f)
81
+
82
+
83
+ # ── Profile config (URL + api_key — persistent, never auto-cleared) ──────────
84
+
85
+
86
+ def save_profile(*, profile: str, url: str, api_key: str | None = None) -> None:
87
+ """Persist the API URL (and optional api_key) for a profile."""
88
+ cfg = _load_cfg(PROFILES_FILE)
89
+ if not cfg.has_section(profile):
90
+ cfg.add_section(profile)
91
+ cfg[profile]["auth_service_url"] = url.rstrip("/")
92
+ if api_key is not None:
93
+ cfg[profile]["api_key"] = api_key
94
+ elif "api_key" in cfg[profile]:
95
+ del cfg[profile]["api_key"]
96
+ _save_cfg(cfg, PROFILES_FILE)
97
+
98
+
99
+ def load_profile(profile: str = "default") -> dict | None: # type: ignore[type-arg]
100
+ """Return profile config dict with auth_service_url and api_key, or None if not set."""
101
+ cfg = _load_cfg(PROFILES_FILE)
102
+ if not cfg.has_section(profile):
103
+ return None
104
+ s = cfg[profile]
105
+ return {
106
+ "auth_service_url": s.get("auth_service_url") or None,
107
+ "api_key": s.get("api_key") or None,
108
+ }
109
+
110
+
111
+ def remove_profile(profile: str = "default") -> None:
112
+ """Remove a profile from both PROFILES_FILE and TOKENS_FILE."""
113
+ for path in (PROFILES_FILE, TOKENS_FILE):
114
+ cfg = _load_cfg(path)
115
+ if cfg.has_section(profile):
116
+ cfg.remove_section(profile)
117
+ _save_cfg(cfg, path)
118
+
119
+
120
+ # Backwards-compat shims used by login.py (load_url) and older call sites
121
+ def save_url(*, profile: str, url: str) -> None:
122
+ save_profile(profile=profile, url=url)
123
+
124
+
125
+ def load_url(profile: str = "default") -> str | None:
126
+ p = load_profile(profile)
127
+ return p["auth_service_url"] if p else None
128
+
129
+
130
+ # ── User credentials (explicit logins) ───────────────────────────────────────
131
+
132
+
133
+ def save_credentials(
134
+ *,
135
+ profile: str,
136
+ access_token: str,
137
+ refresh_token: str,
138
+ refresh_token_expires_in: int,
139
+ ) -> None:
140
+ cfg = _load_cfg(TOKENS_FILE)
141
+ _prune_expired_sections(cfg)
142
+ if not cfg.has_section(profile):
143
+ cfg.add_section(profile)
144
+ cfg[profile]["access_token"] = access_token
145
+ cfg[profile]["refresh_token"] = refresh_token
146
+ cfg[profile]["refresh_token_expires_at"] = str(int(time.time()) + refresh_token_expires_in)
147
+ _save_cfg(cfg, TOKENS_FILE)
148
+
149
+
150
+ def load_credentials(profile: str = "default") -> dict | None: # type: ignore[type-arg]
151
+ prof = load_profile(profile)
152
+ tok_cfg = _load_cfg(TOKENS_FILE)
153
+ if _prune_expired_sections(tok_cfg):
154
+ _save_cfg(tok_cfg, TOKENS_FILE)
155
+ # Return None only if profile is completely unknown
156
+ if prof is None and not tok_cfg.has_section(profile):
157
+ return None
158
+ url = (prof or {}).get("auth_service_url") or DEFAULT_API_URL
159
+ api_key = (prof or {}).get("api_key") or None
160
+ tok = tok_cfg[profile] if tok_cfg.has_section(profile) else {}
161
+ return {
162
+ "auth_service_url": url,
163
+ "api_key": api_key,
164
+ "access_token": tok.get("access_token", ""), # type: ignore[union-attr]
165
+ "refresh_token": tok.get("refresh_token", ""), # type: ignore[union-attr]
166
+ }
167
+
168
+
169
+ def clear_credentials(profile: str = "default") -> None:
170
+ """Clear JWT tokens only. Profile config (URL, api_key) is preserved."""
171
+ cfg = _load_cfg(TOKENS_FILE)
172
+ if cfg.has_section(profile):
173
+ cfg.remove_section(profile)
174
+ _save_cfg(cfg, TOKENS_FILE)
175
+
176
+
177
+ # ── App tokens (env API key cache) ───────────────────────────────────────────
178
+
179
+
180
+ def _prune_expired_sections(cfg: configparser.ConfigParser) -> bool:
181
+ """Remove sections whose refresh_token_expires_at is in the past. Returns True if anything was removed."""
182
+ now = int(time.time())
183
+ expired = [s for s in cfg.sections() if cfg[s].get("refresh_token_expires_at") and int(cfg[s]["refresh_token_expires_at"]) < now]
184
+ for s in expired:
185
+ cfg.remove_section(s)
186
+ return bool(expired)
187
+
188
+
189
+ def _token_expired(token):
190
+ try:
191
+ claims = pyjwt.decode(token, options={"verify_signature": False}, algorithms=["RS256"])
192
+ return int(claims.get("exp", 0)) < int(time.time()) + TOKEN_EXPIRY_BUFFER_SECONDS
193
+ except Exception:
194
+ return True
195
+
196
+
197
+ def _env_profile(api_key: str) -> str:
198
+ import hashlib
199
+
200
+ return "env-" + hashlib.sha256(api_key.encode()).hexdigest()[:8]
201
+
202
+
203
+ def _exchange_api_key(api_key: str, base_url: str) -> dict | None:
204
+ """Exchange an API key for access+refresh tokens. Returns token dict or None on failure."""
205
+ try:
206
+ resp = httpx.post(
207
+ f"{base_url.rstrip('/')}/auth/token",
208
+ json={"api_key": api_key},
209
+ timeout=HTTP_TIMEOUT,
210
+ )
211
+ if resp.status_code == HTTP_OK:
212
+ return resp.json() # type: ignore[no-any-return]
213
+ console.print(f"[red]API key authentication failed:[/red] {resp.json().get('detail', resp.text)}")
214
+ except httpx.RequestError as e:
215
+ console.print(f"[red]Could not reach API:[/red] {e}")
216
+ return None
217
+
218
+
219
+ class AuthClient:
220
+ def __init__(
221
+ self,
222
+ base_url: str,
223
+ access_token: str,
224
+ refresh_token: str,
225
+ profile: str = "default",
226
+ api_key: str | None = None,
227
+ ):
228
+ self.base_url = base_url.rstrip("/")
229
+ self.access_token = access_token
230
+ self.refresh_token = refresh_token
231
+ self.profile = profile
232
+ self.api_key = api_key
233
+
234
+ def _persist(
235
+ self,
236
+ access_token: str,
237
+ refresh_token: str,
238
+ refresh_token_expires_in: int,
239
+ ) -> None:
240
+ if not self.profile:
241
+ return
242
+ save_credentials(
243
+ profile=self.profile,
244
+ access_token=access_token,
245
+ refresh_token=refresh_token,
246
+ refresh_token_expires_in=refresh_token_expires_in,
247
+ )
248
+
249
+ def _req(self, method: str, url: str, **kw) -> httpx.Response:
250
+ if _debug:
251
+ body = kw.get("json")
252
+ console.print(f"[bold cyan]DEBUG →[/bold cyan] {method} {url}", highlight=False)
253
+ if body is not None:
254
+ console.print_json(json.dumps(body, default=str))
255
+ t0 = time.monotonic()
256
+ resp = cast(httpx.Response, getattr(httpx, method.lower())(url, **kw))
257
+ if _debug:
258
+ elapsed = int((time.monotonic() - t0) * 1000)
259
+ color = "green" if resp.is_success else "red"
260
+ console.print(
261
+ f"[bold {color}]DEBUG ←[/bold {color}] {resp.status_code} ({elapsed}ms)",
262
+ highlight=False,
263
+ )
264
+ try:
265
+ console.print_json(json.dumps(resp.json(), default=str))
266
+ except Exception:
267
+ if resp.text:
268
+ console.print(f" {resp.text[:500]}")
269
+ return resp
270
+
271
+ def _maybe_refresh(self):
272
+ if not _token_expired(self.access_token):
273
+ return
274
+ # Try refresh token first
275
+ resp = self._req(
276
+ "POST",
277
+ f"{self.base_url}{AUTH_REFRESH}",
278
+ json={"refresh_token": self.refresh_token},
279
+ timeout=HTTP_TIMEOUT,
280
+ )
281
+ if resp.status_code == HTTP_OK:
282
+ data = resp.json()
283
+ self.access_token = data["access_token"]
284
+ self.refresh_token = data["refresh_token"]
285
+ self._persist(
286
+ self.access_token,
287
+ self.refresh_token,
288
+ data["refresh_token_expires_in"],
289
+ )
290
+ return
291
+ # Refresh failed — fall back to API key if available
292
+ if self.api_key:
293
+ data = _exchange_api_key(self.api_key, self.base_url)
294
+ if data:
295
+ self.access_token = data["access_token"]
296
+ self.refresh_token = data["refresh_token"]
297
+ self._persist(
298
+ self.access_token,
299
+ self.refresh_token,
300
+ data["refresh_token_expires_in"],
301
+ )
302
+ return
303
+ raise SystemExit(1)
304
+ console.print("[red]Session expired.[/red] Run: dtxapps auth login")
305
+ raise SystemExit(1)
306
+
307
+ def _h(self):
308
+ self._maybe_refresh()
309
+ return {"Authorization": f"Bearer {self.access_token}"}
310
+
311
+ def current_identity_id(self) -> str | None:
312
+ try:
313
+ claims = pyjwt.decode(
314
+ self.access_token,
315
+ options={"verify_signature": False},
316
+ algorithms=["RS256"],
317
+ )
318
+ return claims.get("sub")
319
+ except Exception:
320
+ return None
321
+
322
+ def proactive_refresh(self) -> None:
323
+ """Force a token refresh regardless of expiry and persist the new tokens."""
324
+ resp = self._req(
325
+ "POST",
326
+ f"{self.base_url}{AUTH_REFRESH}",
327
+ json={"refresh_token": self.refresh_token},
328
+ timeout=HTTP_TIMEOUT,
329
+ )
330
+ if resp.status_code == HTTP_OK:
331
+ data = resp.json()
332
+ self.access_token = data["access_token"]
333
+ self.refresh_token = data["refresh_token"]
334
+ self._persist(
335
+ self.access_token,
336
+ self.refresh_token,
337
+ data["refresh_token_expires_in"],
338
+ )
339
+
340
+ def get(self, path, no_auth: bool = False, **kw):
341
+ return self._req(
342
+ "GET",
343
+ f"{self.base_url}{path}",
344
+ headers={} if no_auth else self._h(),
345
+ timeout=HTTP_TIMEOUT,
346
+ **kw,
347
+ )
348
+
349
+ def fetch_all_pages(self, path: str, *, limit: int = FETCH_ALL_PAGES_LIMIT) -> list:
350
+ """Fetch all pages from a cursor-paginated endpoint and return the combined items list."""
351
+ items: list = []
352
+ cursor: str | None = None
353
+ sep = "&" if "?" in path else "?"
354
+ while True:
355
+ url = f"{path}{sep}limit={limit}"
356
+ if cursor:
357
+ url = f"{url}&cursor={cursor}"
358
+ r = self.get(url)
359
+ if not r.is_success:
360
+ return items
361
+ data = r.json()
362
+ items.extend(data.get(RESPONSE_KEY_ITEMS, []))
363
+ cursor = data.get(RESPONSE_KEY_NEXT_CURSOR)
364
+ if not cursor:
365
+ break
366
+ return items
367
+
368
+ def post(self, path, *, no_auth: bool = False, **kw):
369
+ return self._req(
370
+ "POST",
371
+ f"{self.base_url}{path}",
372
+ headers={} if no_auth else self._h(),
373
+ timeout=HTTP_TIMEOUT,
374
+ **kw,
375
+ )
376
+
377
+ def patch(self, path, **kw):
378
+ return self._req(
379
+ "PATCH",
380
+ f"{self.base_url}{path}",
381
+ headers=self._h(),
382
+ timeout=HTTP_TIMEOUT,
383
+ **kw,
384
+ )
385
+
386
+ def put(self, path, **kw):
387
+ return self._req(
388
+ "PUT",
389
+ f"{self.base_url}{path}",
390
+ headers=self._h(),
391
+ timeout=HTTP_TIMEOUT,
392
+ **kw,
393
+ )
394
+
395
+ def delete(self, path, **kw):
396
+ return self._req(
397
+ "DELETE",
398
+ f"{self.base_url}{path}",
399
+ headers=self._h(),
400
+ timeout=HTTP_TIMEOUT,
401
+ **kw,
402
+ )
403
+
404
+
405
+ def _build_env_client(env_api_key: str, env_api_url: str) -> "AuthClient":
406
+ env_profile = _env_profile(env_api_key)
407
+ creds = load_credentials(env_profile)
408
+ if not creds or not creds.get("access_token"):
409
+ data = _exchange_api_key(env_api_key, env_api_url)
410
+ if not data:
411
+ raise SystemExit(1)
412
+ save_credentials(
413
+ profile=env_profile,
414
+ access_token=data["access_token"],
415
+ refresh_token=data["refresh_token"],
416
+ refresh_token_expires_in=data["refresh_token_expires_in"],
417
+ )
418
+ access_token = data["access_token"]
419
+ refresh_token = data["refresh_token"]
420
+ else:
421
+ access_token = creds["access_token"]
422
+ refresh_token = creds["refresh_token"]
423
+ return AuthClient(
424
+ base_url=env_api_url,
425
+ access_token=access_token,
426
+ refresh_token=refresh_token,
427
+ profile=env_profile,
428
+ api_key=env_api_key,
429
+ )
430
+
431
+
432
+ def _exchange_profile_api_key(creds: dict, profile: str) -> dict: # type: ignore[type-arg]
433
+ profile_api_key = creds["api_key"]
434
+ base_url = creds["auth_service_url"]
435
+ data = _exchange_api_key(profile_api_key, base_url)
436
+ if not data:
437
+ raise SystemExit(1)
438
+ save_credentials(
439
+ profile=profile,
440
+ access_token=data["access_token"],
441
+ refresh_token=data["refresh_token"],
442
+ refresh_token_expires_in=data["refresh_token_expires_in"],
443
+ )
444
+ return {
445
+ "auth_service_url": base_url,
446
+ "api_key": profile_api_key,
447
+ "access_token": data["access_token"],
448
+ "refresh_token": data["refresh_token"],
449
+ }
450
+
451
+
452
+ def _print_not_authenticated(profile: str) -> None:
453
+ saved_url = load_url(profile)
454
+ console.print("[yellow]Not authenticated.[/yellow] Choose one:\n")
455
+ console.print(" [bold]Interactive login:[/bold]")
456
+ if saved_url:
457
+ console.print(f" dtxapps auth login [dim]# URL already configured: {saved_url}[/dim]")
458
+ else:
459
+ console.print(f" dtxapps config set-profile --url {DEFAULT_API_URL}")
460
+ console.print(" dtxapps auth login")
461
+ console.print("\n [bold]API key (profile):[/bold]")
462
+ console.print(f" dtxapps config set-profile --url {DEFAULT_API_URL} --api-key <key>")
463
+ console.print("\n [bold]API key (env):[/bold]")
464
+ console.print(f" export {ENV_API_URL}={DEFAULT_API_URL}")
465
+ console.print(f" export {ENV_API_KEY}=<your-api-key>")
466
+
467
+
468
+ def fetch_api_url_from_website(url: str) -> tuple[str, bool]:
469
+ """Try to resolve the API URL from a website's /config.json endpoint.
470
+
471
+ Returns (resolved_url, was_resolved). Falls back silently on any error.
472
+ """
473
+ base = url.rstrip("/")
474
+ try:
475
+ resp = httpx.get(f"{base}/config.json", timeout=3.0)
476
+ if resp.is_success:
477
+ data = resp.json()
478
+ if "authServiceUrl" in data:
479
+ return (data["authServiceUrl"].rstrip("/"), True)
480
+ except (httpx.RequestError, ValueError):
481
+ pass
482
+ return (base, False)
483
+
484
+
485
+ def get_client(profile: str = "") -> "AuthClient":
486
+ if not profile:
487
+ profile = get_profile()
488
+ env_api_key = os.environ.get(ENV_API_KEY)
489
+ env_api_url = os.environ.get(ENV_API_URL, _DEFAULT_API_URL)
490
+ if env_api_key:
491
+ if _profile_explicitly_set:
492
+ console.print(
493
+ f"[red]Error:[/red] {ENV_API_KEY} is set in the environment but --profile '{profile}' was also specified. "
494
+ "Use one or the other, not both."
495
+ )
496
+ raise SystemExit(1)
497
+ resolved_url, _ = fetch_api_url_from_website(env_api_url)
498
+ return _build_env_client(env_api_key, resolved_url)
499
+ creds = load_credentials(profile)
500
+ if creds and creds.get("api_key") and not creds.get("access_token"):
501
+ creds = _exchange_profile_api_key(creds, profile)
502
+ if not creds or not creds.get("access_token"):
503
+ _print_not_authenticated(profile)
504
+ raise SystemExit(1)
505
+ return AuthClient(
506
+ base_url=creds["auth_service_url"],
507
+ access_token=creds["access_token"],
508
+ refresh_token=creds["refresh_token"],
509
+ profile=profile,
510
+ api_key=creds.get("api_key"),
511
+ )
512
+
513
+
514
+ def run_api(
515
+ method: str,
516
+ path: str,
517
+ *,
518
+ action: str,
519
+ no_content: bool = False,
520
+ **kwargs: object,
521
+ ) -> httpx.Response:
522
+ """Get an authenticated client, make one HTTP call, and assert success.
523
+
524
+ Args:
525
+ method: HTTP method: "get", "post", "put", "patch", "delete".
526
+ path: URL path relative to the API base.
527
+ action: Human-readable description for error messages.
528
+ no_content: If True, assert HTTP 204 instead of any 2xx success.
529
+ **kwargs: Forwarded to the httpx method (json=, params=, etc.).
530
+ """
531
+ from dtxapps.output import check_response, expect_no_content
532
+
533
+ c = get_client()
534
+ r: httpx.Response = getattr(c, method.lower())(path, **kwargs)
535
+ if no_content:
536
+ expect_no_content(r, action)
537
+ else:
538
+ check_response(r, action)
539
+ return r