openhound-github 0.6.2__tar.gz → 0.6.4__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 (377) hide show
  1. {openhound_github-0.6.2 → openhound_github-0.6.4}/PKG-INFO +2 -2
  2. {openhound_github-0.6.2 → openhound_github-0.6.4}/README.md +1 -1
  3. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/helpers.py +13 -0
  4. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/kinds/edges.py +0 -1
  5. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/kinds/nodes.py +0 -2
  6. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/lookup.py +24 -4
  7. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/main.py +1 -0
  8. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/__init__.py +10 -1
  9. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_helpers.py +4 -0
  10. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_team_organization.py +15 -12
  11. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/external_identity.py +10 -76
  12. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/projected_enterprise_team.py +2 -1
  13. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_helpers.py +1 -55
  14. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/scim_user.py +24 -9
  15. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/resources/enterprise.py +102 -46
  16. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/resources/organization.py +88 -33
  17. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/source.py +0 -14
  18. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/transforms.py +5 -0
  19. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_app_auth.py +0 -1
  20. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_enterprise_organization.py +8 -10
  21. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_enterprise_resources.py +174 -0
  22. openhound_github-0.6.4/tests/test_lookup.py +28 -0
  23. openhound_github-0.6.4/tests/test_org_scim_resources.py +111 -0
  24. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_saml_models.py +65 -2
  25. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_scim_models.py +54 -9
  26. openhound_github-0.6.2/tests/test_external_identity_tenant_matching.py +0 -242
  27. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/CODE_OF_CONDUCT.md +0 -0
  28. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/CONTRIBUTING.md +0 -0
  29. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GOVERNANCE.md +0 -0
  30. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-COC-Header.png +0 -0
  31. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-CONTRIB-Header.png +0 -0
  32. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-GOV-Header.png +0 -0
  33. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-Header.png +0 -0
  34. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-LIC-Header.png +0 -0
  35. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/GitHub-SEC-Header.png +0 -0
  36. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SECURITY.md +0 -0
  37. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SO-Dark.svg +0 -0
  38. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SO-FOSS-Dark.svg +0 -0
  39. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SO-FOSS-Light.svg +0 -0
  40. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/SO-Light.svg +0 -0
  41. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/workflows/publish.yml +0 -0
  42. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/workflows/release-on-merge.yml +0 -0
  43. {openhound_github-0.6.2 → openhound_github-0.6.4}/.github/workflows/validate-branch.yml +0 -0
  44. {openhound_github-0.6.2 → openhound_github-0.6.4}/.gitignore +0 -0
  45. {openhound_github-0.6.2 → openhound_github-0.6.4}/.gitmodules +0 -0
  46. {openhound_github-0.6.2 → openhound_github-0.6.4}/.pre-commit-config.yaml +0 -0
  47. {openhound_github-0.6.2 → openhound_github-0.6.4}/LICENSE.md +0 -0
  48. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AddAssignee.md +0 -0
  49. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AddCollaborator.md +0 -0
  50. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AddLabel.md +0 -0
  51. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AddMember.md +0 -0
  52. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AdminTo.md +0 -0
  53. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ApprovesDeploymentTo.md +0 -0
  54. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_AssignedTo.md +0 -0
  55. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_BypassBranchProtection.md +0 -0
  56. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_BypassPullRequestAllowances.md +0 -0
  57. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CallsWorkflow.md +0 -0
  58. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanAccess.md +0 -0
  59. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanAssumeIdentity.md +0 -0
  60. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanCreateBranch.md +0 -0
  61. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanCreateEnvironment.md +0 -0
  62. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanCreateRepositoryWithRunnerAccess.md +0 -0
  63. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanDeployToEnvironment.md +0 -0
  64. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanEditEnvironment.md +0 -0
  65. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanEditProtection.md +0 -0
  66. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanPwnRequest.md +0 -0
  67. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanReadSecretScanningAlert.md +0 -0
  68. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanUseRunner.md +0 -0
  69. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CanWriteBranch.md +0 -0
  70. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CloseDiscussion.md +0 -0
  71. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CloseIssue.md +0 -0
  72. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ClosePullRequest.md +0 -0
  73. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_Contains.md +0 -0
  74. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ConvertIssuesToDiscussions.md +0 -0
  75. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateDiscussionCategory.md +0 -0
  76. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateRepository.md +0 -0
  77. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateSoloMergeQueueEntry.md +0 -0
  78. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateTag.md +0 -0
  79. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_CreateTeam.md +0 -0
  80. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteAlertsCodeScanning.md +0 -0
  81. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteDiscussion.md +0 -0
  82. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteDiscussionComment.md +0 -0
  83. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteIssue.md +0 -0
  84. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeleteTag.md +0 -0
  85. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DependsOn.md +0 -0
  86. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_DeploysTo.md +0 -0
  87. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditCategoryOnDiscussion.md +0 -0
  88. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditDiscussionCategory.md +0 -0
  89. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditDiscussionComment.md +0 -0
  90. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditRepoAnnouncementBanners.md +0 -0
  91. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditRepoCustomPropertiesValues.md +0 -0
  92. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditRepoMetadata.md +0 -0
  93. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_EditRepoProtections.md +0 -0
  94. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasBaseRole.md +0 -0
  95. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasBranch.md +0 -0
  96. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasEnvironment.md +0 -0
  97. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasExternalIdentity.md +0 -0
  98. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasJob.md +0 -0
  99. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasMember.md +0 -0
  100. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasPersonalAccessToken.md +0 -0
  101. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasPersonalAccessTokenRequest.md +0 -0
  102. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasRole.md +0 -0
  103. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasRunner.md +0 -0
  104. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasSamlIdentityProvider.md +0 -0
  105. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasSecret.md +0 -0
  106. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasStep.md +0 -0
  107. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasVariable.md +0 -0
  108. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_HasWorkflow.md +0 -0
  109. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_InheritedFrom.md +0 -0
  110. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_InstalledAs.md +0 -0
  111. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_InviteMember.md +0 -0
  112. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_IsEligibleFor.md +0 -0
  113. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_JumpMergeQueue.md +0 -0
  114. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageDeployKeys.md +0 -0
  115. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageDiscussionBadges.md +0 -0
  116. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageOrganizationWebhooks.md +0 -0
  117. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageRepoSecurityProducts.md +0 -0
  118. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSecurityProducts.md +0 -0
  119. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSettingsMergeTypes.md +0 -0
  120. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSettingsPages.md +0 -0
  121. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSettingsProjects.md +0 -0
  122. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageSettingsWiki.md +0 -0
  123. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageTopics.md +0 -0
  124. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ManageWebhooks.md +0 -0
  125. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_MapsToUser.md +0 -0
  126. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_MarkAsDuplicate.md +0 -0
  127. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_MatchesEnvironmentPolicy.md +0 -0
  128. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_MemberOf.md +0 -0
  129. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_OrgBypassCodeScanningDismissalRequests.md +0 -0
  130. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_OrgBypassSecretScanningClosureRequests.md +0 -0
  131. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_OrgReviewAndManageSecretScanningBypassRequests.md +0 -0
  132. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_OrgReviewAndManageSecretScanningClosureRequests.md +0 -0
  133. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_Owns.md +0 -0
  134. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ProtectedBy.md +0 -0
  135. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_PushProtectedBranch.md +0 -0
  136. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadCodeScanning.md +0 -0
  137. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadOrganizationActionsUsageMetrics.md +0 -0
  138. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadOrganizationCustomOrgRole.md +0 -0
  139. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadOrganizationCustomRepoRole.md +0 -0
  140. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReadRepoContents.md +0 -0
  141. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RemoveAssignee.md +0 -0
  142. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RemoveLabel.md +0 -0
  143. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReopenDiscussion.md +0 -0
  144. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReopenIssue.md +0 -0
  145. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ReopenPullRequest.md +0 -0
  146. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RequestPrReview.md +0 -0
  147. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ResolveDependabotAlerts.md +0 -0
  148. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ResolveSecretScanningAlerts.md +0 -0
  149. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RestrictionsCanPush.md +0 -0
  150. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_RunOrgMigration.md +0 -0
  151. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SetInteractionLimits.md +0 -0
  152. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SetIssueType.md +0 -0
  153. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SetMilestone.md +0 -0
  154. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SetSocialPreview.md +0 -0
  155. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_SyncedTo.md +0 -0
  156. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ToggleDiscussionAnswer.md +0 -0
  157. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ToggleDiscussionCommentMinimize.md +0 -0
  158. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_TransferRepository.md +0 -0
  159. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_UsesSecret.md +0 -0
  160. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_UsesVariable.md +0 -0
  161. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ValidToken.md +0 -0
  162. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ViewDependabotAlerts.md +0 -0
  163. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_ViewSecretScanningAlerts.md +0 -0
  164. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteCodeScanning.md +0 -0
  165. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationActionsSecrets.md +0 -0
  166. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationActionsSettings.md +0 -0
  167. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationActionsVariables.md +0 -0
  168. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationCustomOrgRole.md +0 -0
  169. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationCustomRepoRole.md +0 -0
  170. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteOrganizationNetworkConfigurations.md +0 -0
  171. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteRepoContents.md +0 -0
  172. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/edges/GH_WriteRepoPullRequests.md +0 -0
  173. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_App.md +0 -0
  174. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_AppInstallation.md +0 -0
  175. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Branch.md +0 -0
  176. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_BranchProtectionRule.md +0 -0
  177. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnterpriseRunner.md +0 -0
  178. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnterpriseRunnerGroup.md +0 -0
  179. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Environment.md +0 -0
  180. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnvironmentBranchPolicy.md +0 -0
  181. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnvironmentSecret.md +0 -0
  182. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_EnvironmentVariable.md +0 -0
  183. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_ExternalIdentity.md +0 -0
  184. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgRole.md +0 -0
  185. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgRunner.md +0 -0
  186. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgRunnerGroup.md +0 -0
  187. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgSecret.md +0 -0
  188. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_OrgVariable.md +0 -0
  189. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Organization.md +0 -0
  190. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_PersonalAccessToken.md +0 -0
  191. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_PersonalAccessTokenRequest.md +0 -0
  192. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_RepoRole.md +0 -0
  193. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_RepoRunner.md +0 -0
  194. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_RepoSecret.md +0 -0
  195. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_RepoVariable.md +0 -0
  196. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Repository.md +0 -0
  197. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_SamlIdentityProvider.md +0 -0
  198. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_SecretScanningAlert.md +0 -0
  199. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Team.md +0 -0
  200. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_TeamRole.md +0 -0
  201. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_User.md +0 -0
  202. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_Workflow.md +0 -0
  203. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_WorkflowJob.md +0 -0
  204. {openhound_github-0.6.2 → openhound_github-0.6.4}/descriptions/nodes/GH_WorkflowStep.md +0 -0
  205. {openhound_github-0.6.2 → openhound_github-0.6.4}/docs/og-docs.json +0 -0
  206. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-all-repo-admin-role.json +0 -0
  207. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-app-installations-all-repos.json +0 -0
  208. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-apps-all-repos.json +0 -0
  209. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-external-identities-owners.json +0 -0
  210. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-organizations.json +0 -0
  211. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-owner-users.json +0 -0
  212. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-owners-role.json +0 -0
  213. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-pats-all-repos.json +0 -0
  214. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-privilege-escalation-roles.json +0 -0
  215. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-privilege-escalation-users.json +0 -0
  216. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/privilege_zone_rules/t0-saml-identity-providers.json +0 -0
  217. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/README.md +0 -0
  218. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/actions-sha-pinning-not-required.json +0 -0
  219. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/active-leaked-secrets.json +0 -0
  220. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/advanced-security-disabled-new-repos.json +0 -0
  221. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/all-actions-allowed.json +0 -0
  222. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/app-installations-all-repos.json +0 -0
  223. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-admins-not-enforced.json +0 -0
  224. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-deletions-allowed.json +0 -0
  225. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-force-pushes.json +0 -0
  226. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-no-code-owner-reviews.json +0 -0
  227. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-no-pr-reviews.json +0 -0
  228. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-no-status-checks.json +0 -0
  229. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-self-approval.json +0 -0
  230. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/branch-protection-stale-reviews.json +0 -0
  231. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/bypass-pr-requirements.json +0 -0
  232. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/dangerous-branch-perms.json +0 -0
  233. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/default-repository-permissions.json +0 -0
  234. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/demo-sso-to-cloud-round-trip.json +0 -0
  235. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/dependabot-alerts-disabled-new-repos.json +0 -0
  236. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/dependabot-updates-disabled-new-repos.json +0 -0
  237. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/dependency-graph-disabled-new-repos.json +0 -0
  238. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/environments-admin-bypass.json +0 -0
  239. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/expired-pats.json +0 -0
  240. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/external-identities-without-scim.json +0 -0
  241. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/github-to-azure-identity.json +0 -0
  242. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/global-repo-perms.json +0 -0
  243. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/hybrid-identities.json +0 -0
  244. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-change-repo-visibility.json +0 -0
  245. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-create-pages.json +0 -0
  246. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-create-public-repos.json +0 -0
  247. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-delete-repos.json +0 -0
  248. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-fork-private-repos.json +0 -0
  249. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/members-can-invite-outside-collaborators.json +0 -0
  250. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/org-owners.json +0 -0
  251. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/orgs-without-2fa.json +0 -0
  252. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/pats-all-repo-access.json +0 -0
  253. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/pending-pat-requests.json +0 -0
  254. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/private-repos-forking-allowed.json +0 -0
  255. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/privileged-custom-org-roles.json +0 -0
  256. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/privileged-hybrid-identities.json +0 -0
  257. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/public-repos.json +0 -0
  258. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/push-protection-disabled-new-repos.json +0 -0
  259. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/push-to-protected-branches.json +0 -0
  260. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/repos-secret-scanning-disabled.json +0 -0
  261. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/repos-vulnerable-to-workflow-secret-exfil.json +0 -0
  262. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/repository-workflows.json +0 -0
  263. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/saml-configuration.json +0 -0
  264. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/secret-scanning-alerts.json +0 -0
  265. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/secret-scanning-disabled-new-repos.json +0 -0
  266. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/secrets-reachable-by-user.json +0 -0
  267. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/team-membership-admin.json +0 -0
  268. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/team-structure.json +0 -0
  269. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/unprotected-branches.json +0 -0
  270. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/unprotected-default-branch-with-workflow.json +0 -0
  271. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/unprotected-default-branches.json +0 -0
  272. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/saved_searches/web-commit-signoff-not-required.json +0 -0
  273. {openhound_github-0.6.2 → openhound_github-0.6.4}/extension/schema.json +0 -0
  274. {openhound_github-0.6.2 → openhound_github-0.6.4}/justfile +0 -0
  275. {openhound_github-0.6.2 → openhound_github-0.6.4}/pyproject.toml +0 -0
  276. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/main.py +0 -0
  277. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/__init__.py +0 -0
  278. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/auth.py +0 -0
  279. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/extension.yaml +0 -0
  280. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/graph.py +0 -0
  281. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/graphql.py +0 -0
  282. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/actions_permission.py +0 -0
  283. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/app_installation.py +0 -0
  284. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/branch.py +0 -0
  285. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/branch_pr_bypass_allowance.py +0 -0
  286. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/branch_protection_rule.py +0 -0
  287. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/branch_push_allowance.py +0 -0
  288. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise.py +0 -0
  289. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_admin.py +0 -0
  290. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_managed_user.py +0 -0
  291. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_member.py +0 -0
  292. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_organization.py +0 -0
  293. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_role.py +0 -0
  294. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_role_team.py +0 -0
  295. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_role_user.py +0 -0
  296. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_team.py +0 -0
  297. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_team_member.py +0 -0
  298. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_team_role.py +0 -0
  299. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/enterprise_user.py +0 -0
  300. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/env_secret.py +0 -0
  301. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/env_variable.py +0 -0
  302. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/environment.py +0 -0
  303. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/environment_branch_policy.py +0 -0
  304. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org.py +0 -0
  305. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_role.py +0 -0
  306. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_role_member.py +0 -0
  307. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_role_team.py +0 -0
  308. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_secret.py +0 -0
  309. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/org_variable.py +0 -0
  310. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/personal_access_token.py +0 -0
  311. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/personal_access_token_access.py +0 -0
  312. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/personal_access_token_request.py +0 -0
  313. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repo_role_assignment.py +0 -0
  314. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repository.py +0 -0
  315. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repository_role.py +0 -0
  316. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repository_secret.py +0 -0
  317. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/repository_variable.py +0 -0
  318. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/runner.py +0 -0
  319. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_assertion_consumer_service.py +0 -0
  320. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_issuer.py +0 -0
  321. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_provider.py +0 -0
  322. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/saml_service_provider.py +0 -0
  323. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/secret_scanning_alert.py +0 -0
  324. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/team.py +0 -0
  325. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/team_member.py +0 -0
  326. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/team_role.py +0 -0
  327. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/user.py +0 -0
  328. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/workflow.py +0 -0
  329. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/workflow_job.py +0 -0
  330. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/models/workflow_step.py +0 -0
  331. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/resources/__init__.py +0 -0
  332. {openhound_github-0.6.2 → openhound_github-0.6.4}/src/openhound_github/runner_ids.py +0 -0
  333. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_branch_collection_gate.py +0 -0
  334. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_branch_protection_traversability.py +0 -0
  335. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/actions-permissions.json +0 -0
  336. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/actionsecrets.json +0 -0
  337. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/app.json +0 -0
  338. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/appinstalls.json +0 -0
  339. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/branch-policies.json +0 -0
  340. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/branch-prot-rules.json +0 -0
  341. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/branches.json +0 -0
  342. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/custom-roles.json +0 -0
  343. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/environments.json +0 -0
  344. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-pat-request.json +0 -0
  345. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-pat.json +0 -0
  346. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-role-teams.json +0 -0
  347. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-role-users.json +0 -0
  348. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org-roles.json +0 -0
  349. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/org.json +0 -0
  350. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/pat-repositories.json +0 -0
  351. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/repo-collaborators.json +0 -0
  352. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/repo-teams.json +0 -0
  353. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/repositories.json +0 -0
  354. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/scimusers.json +0 -0
  355. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/secrets.json +0 -0
  356. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/secretscanningalert.json +0 -0
  357. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/selected-org-secrets.json +0 -0
  358. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/variables.json +0 -0
  359. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_data/api/workflows.json +0 -0
  360. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_enterprise_capabilities.py +0 -0
  361. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_environment_model.py +0 -0
  362. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_environment_resources.py +0 -0
  363. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_environment_reviewer_lookup.py +0 -0
  364. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_error_resilience.py +0 -0
  365. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_github_app_retry.py +0 -0
  366. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_github_rest_client.py +0 -0
  367. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_github_retry.py +0 -0
  368. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_helpers.py +0 -0
  369. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_org_secret_models.py +0 -0
  370. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_repository_rulesets.py +0 -0
  371. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_runner_ids.py +0 -0
  372. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_runner_models.py +0 -0
  373. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_runner_resources.py +0 -0
  374. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_saml_helpers.py +0 -0
  375. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_variable_models.py +0 -0
  376. {openhound_github-0.6.2 → openhound_github-0.6.4}/tests/test_workflow_model.py +0 -0
  377. {openhound_github-0.6.2 → openhound_github-0.6.4}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: openhound-github
3
- Version: 0.6.2
3
+ Version: 0.6.4
4
4
  Summary: Github collector for OpenHound
5
5
  Author-email: "jdreijer@specterops.io" <jdreijer@specterops.io>, Jared Atkinson <jatkinson@specterops.io>
6
6
  License-File: LICENSE.md
@@ -53,7 +53,7 @@ identifier must be supplied together with `key_path` and `enterprise_name`.
53
53
 
54
54
  ### Enterprise SCIM and hybrid correlations
55
55
 
56
- When `SOURCES__GITHUB__COLLECT_ENTERPRISE_SCIM=true`, a token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
56
+ A token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
57
57
 
58
58
  `SOURCES__GITHUB__EMIT_LEGACY_SCIM_CORRELATIONS=true` temporarily reproduces GitHound-style Okta-to-SCIM correlation relationships. It defaults to false because a dedicated hybrid correlator should own IdP-to-SCIM matching; GitHub remains authoritative for GitHub's SCIM resources and target-system provisioning relationships.
59
59
 
@@ -42,7 +42,7 @@ identifier must be supplied together with `key_path` and `enterprise_name`.
42
42
 
43
43
  ### Enterprise SCIM and hybrid correlations
44
44
 
45
- When `SOURCES__GITHUB__COLLECT_ENTERPRISE_SCIM=true`, a token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
45
+ A token with enterprise SCIM access is used to collect both `/scim/v2/enterprises/{enterprise}/Users` and `/scim/v2/enterprises/{enterprise}/Groups`. The collector emits normalized `SCIM_Organization`, `SCIM_User`, and `SCIM_Group` nodes plus `SCIM_Contains`, `SCIM_MemberOf`, and `SCIM_Provisioned` relationships. Install the BloodHound SCIM extension alongside this extension to register the shared SCIM kinds.
46
46
 
47
47
  `SOURCES__GITHUB__EMIT_LEGACY_SCIM_CORRELATIONS=true` temporarily reproduces GitHound-style Okta-to-SCIM correlation relationships. It defaults to false because a dedicated hybrid correlator should own IdP-to-SCIM matching; GitHub remains authoritative for GitHub's SCIM resources and target-system provisioning relationships.
48
48
 
@@ -20,6 +20,19 @@ class GraphQLPaginationError(RuntimeError):
20
20
  pass
21
21
 
22
22
 
23
+ def scim_skip_reason(exception: BaseException) -> str | None:
24
+ """Return a user-facing reason for expected SCIM API unavailability."""
25
+ if not isinstance(exception, requests.HTTPError) or exception.response is None:
26
+ return None
27
+
28
+ status_code = exception.response.status_code
29
+ if status_code in (401, 403):
30
+ return "the configured credentials do not have SCIM access"
31
+ if status_code == 404:
32
+ return "the GitHub scope does not expose SCIM endpoints"
33
+ return None
34
+
35
+
23
36
  class GraphQLCursorPaginator(JSONResponseCursorPaginator):
24
37
  def __init__(
25
38
  self,
@@ -39,7 +39,6 @@ RESTRICTIONS_CAN_PUSH = "GH_RestrictionsCanPush"
39
39
  HAS_EXTERNAL_IDENTITY = "GH_HasExternalIdentity"
40
40
  HAS_SAML_IDENTITY_PROVIDER = "GH_HasSamlIdentityProvider"
41
41
  MAPS_TO_USER = "GH_MapsToUser"
42
- SYNCED_TO_GH_USER = "GH_SyncedTo"
43
42
 
44
43
  # Normalized OpenGraph-SCIM edges
45
44
  SCIM_CONTAINS = "SCIM_Contains"
@@ -81,6 +81,4 @@ SCIM_GROUP = "SCIM_Group"
81
81
  SCIM_ROLE = "SCIM_Role"
82
82
 
83
83
  # External node kinds used only as correlation endpoints
84
- AZ_USER = "AZUser"
85
84
  OKTA_USER = "Okta_User"
86
- PINGONE_USER = "PingOne_User"
@@ -1,4 +1,5 @@
1
1
  import json
2
+ import re
2
3
  from functools import lru_cache
3
4
 
4
5
  import duckdb
@@ -8,10 +9,20 @@ from openhound.core.lookup import LookupManager, logger
8
9
  from openhound_github.runner_ids import runner_group_node_id, runner_node_id
9
10
 
10
11
 
12
+ _SCHEMA_IDENTIFIER_RE = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")
13
+
14
+
15
+ def _validate_schema_identifier(schema: str) -> str:
16
+ if not _SCHEMA_IDENTIFIER_RE.fullmatch(schema):
17
+ raise ValueError(f"Invalid DuckDB schema identifier: {schema!r}")
18
+ return schema
19
+
20
+
11
21
  class GithubLookup(LookupManager):
12
22
  def __init__(self, client: DuckDBPyConnection, schema: str = "github"):
13
- super().__init__(client, schema)
14
- self.schema = schema
23
+ validated_schema = _validate_schema_identifier(schema)
24
+ super().__init__(client, validated_schema)
25
+ self.schema = validated_schema
15
26
  self.client = client
16
27
 
17
28
  def _find_single_row(self, *args):
@@ -188,12 +199,21 @@ class GithubLookup(LookupManager):
188
199
  )
189
200
 
190
201
  @lru_cache
191
- def projected_enterprise_team_exists(self, org_login: str, slug: str):
202
+ def projected_enterprise_team_id(self, org_login: str, slug: str) -> str | None:
192
203
  return self._find_single_object(
193
- f"""SELECT slug FROM {self.schema}.projected_enterprise_teams WHERE org_login = ? AND slug = ?""",
204
+ f"""SELECT node_id FROM {self.schema}.projected_enterprise_teams WHERE org_login = ? AND slug = ?""",
194
205
  [org_login, slug],
195
206
  )
196
207
 
208
+ @lru_cache
209
+ def external_identity_id_for_guid(
210
+ self, guid: str, environment_slug: str
211
+ ) -> str | None:
212
+ return self._find_single_object(
213
+ f"""SELECT id FROM {self.schema}.external_identities WHERE guid = ? AND environment_slug = ?""",
214
+ [guid, environment_slug],
215
+ )
216
+
197
217
  @lru_cache
198
218
  def repository_node_ids(self):
199
219
  return self._find_all_objects(
@@ -63,6 +63,7 @@ def preproc(ctx: PreProcContext):
63
63
  "teams": "teams",
64
64
  "team_members": "team_members",
65
65
  "saml_provider": "saml_provider",
66
+ "external_identities": "external_identities",
66
67
  "applications": "applications",
67
68
  "enterprise": "enterprise",
68
69
  "enterprise_organizations": "enterprise_organizations",
@@ -53,7 +53,14 @@ from .saml_assertion_consumer_service import SamlAssertionConsumerService
53
53
  from .saml_provider import SamlProvider
54
54
  from .saml_service_provider import SamlServiceProvider
55
55
  from .saml_issuer import SamlIssuer
56
- from .scim_user import ScimGroup, ScimOrganization, ScimResource, ScimUser
56
+ from .scim_user import (
57
+ EnterpriseScimOrganization,
58
+ EnterpriseScimUser,
59
+ ScimGroup,
60
+ ScimOrganization,
61
+ ScimResource,
62
+ ScimUser,
63
+ )
57
64
  from .secret_scanning_alert import SecretScanningAlert
58
65
  from .team import Team
59
66
  from .team_member import TeamMember
@@ -117,6 +124,8 @@ __all__ = [
117
124
  "ScimUser",
118
125
  "ScimGroup",
119
126
  "ScimOrganization",
127
+ "EnterpriseScimUser",
128
+ "EnterpriseScimOrganization",
120
129
  "RepoRoleAssignment",
121
130
  "Environment",
122
131
  "EnvironmentSecret",
@@ -2,5 +2,9 @@ def enterprise_team_node_id(enterprise_id: str, team_id: str | int) -> str:
2
2
  return f"GH_EnterpriseTeam_{enterprise_id}_{team_id}"
3
3
 
4
4
 
5
+ def projected_enterprise_team_node_id(org_id: str | None, team_node_id: str) -> str:
6
+ return f"GH_Team_{org_id}_{team_node_id}"
7
+
8
+
5
9
  def enterprise_role_node_id(enterprise_id: str, role_id: str | int) -> str:
6
10
  return f"GH_EnterpriseRole_{enterprise_id}_{role_id}"
@@ -1,16 +1,17 @@
1
1
  from openhound.core.asset import BaseAsset, EdgeDef
2
2
  from openhound.core.models.entries_dataclass import (
3
- ConditionalEdgePath,
4
3
  Edge,
5
4
  EdgePath,
6
5
  EdgeProperties,
7
- PropertyMatch,
8
6
  )
9
7
 
10
8
  from openhound_github.kinds import edges as ek
11
9
  from openhound_github.kinds import nodes as nk
12
10
  from openhound_github.main import app
13
- from openhound_github.models.enterprise_helpers import enterprise_team_node_id
11
+ from openhound_github.models.enterprise_helpers import (
12
+ enterprise_team_node_id,
13
+ projected_enterprise_team_node_id,
14
+ )
14
15
 
15
16
 
16
17
  @app.asset(
@@ -59,18 +60,20 @@ class EnterpriseTeamOrganization(BaseAsset):
59
60
  @property
60
61
  def member_of_team_edges(self):
61
62
  org_login = self.login or self._lookup.org_login_for_id(self.node_id)
62
- if org_login and self._lookup.projected_enterprise_team_exists(
63
- org_login, self.projected_slug
64
- ):
63
+ projected_team_id = (
64
+ self._lookup.projected_enterprise_team_id(org_login, self.projected_slug)
65
+ if org_login
66
+ else None
67
+ )
68
+ if projected_team_id:
65
69
  yield Edge(
66
70
  kind=ek.MEMBER_OF,
67
71
  start=EdgePath(value=self.enterprise_team_node_id, match_by="id"),
68
- end=ConditionalEdgePath(
69
- kind=nk.TEAM,
70
- property_matchers=[
71
- PropertyMatch(key="environmentid", value=self.node_id),
72
- PropertyMatch(key="slug", value=self.projected_slug),
73
- ],
72
+ end=EdgePath(
73
+ value=projected_enterprise_team_node_id(
74
+ self.node_id, projected_team_id
75
+ ),
76
+ match_by="id",
74
77
  ),
75
78
  properties=EdgeProperties(traversable=True),
76
79
  )
@@ -2,14 +2,13 @@ from dataclasses import dataclass, field
2
2
 
3
3
  from openhound.core.asset import BaseAsset, EdgeDef, NodeDef
4
4
  from openhound.core.models.entries_dataclass import (
5
- ConditionalEdgePath,
6
5
  Edge,
7
6
  EdgePath,
8
7
  EdgeProperties,
9
8
  )
10
9
  from pydantic import BaseModel, ConfigDict, Field
11
10
 
12
- from openhound_github.graph import GHEdgeProperties, GHNode, GHNodeProperties
11
+ from openhound_github.graph import GHNode, GHNodeProperties
13
12
  from openhound_github.kinds import edges as ek
14
13
  from openhound_github.kinds import nodes as nk
15
14
  from openhound_github.main import app
@@ -18,9 +17,6 @@ from .saml_helpers import (
18
17
  DEFAULT_GITHUB_DEPLOYMENT_ID,
19
18
  ENTRA_OBJECT_ID_CLAIM,
20
19
  SAML_CONTRACT_VERSION,
21
- detect_foreign_idp,
22
- foreign_user_kind,
23
- foreign_user_matchers,
24
20
  github_saml_service_provider_id,
25
21
  saml_account_match_values,
26
22
  saml_attribute_match_values,
@@ -113,13 +109,6 @@ class User(BaseModel):
113
109
  description="External identity maps to a user",
114
110
  traversable=False,
115
111
  ),
116
- EdgeDef(
117
- start=nk.EXTERNAL_IDENTITY,
118
- end=nk.USER,
119
- kind=ek.SYNCED_TO_GH_USER,
120
- description="Foreign IdP user is synced to a GitHub user",
121
- traversable=True,
122
- ),
123
112
  EdgeDef(
124
113
  start=nk.SAML_SERVICE_PROVIDER,
125
114
  end=nk.USER,
@@ -150,12 +139,19 @@ class ExternalIdentity(BaseAsset):
150
139
 
151
140
  @property
152
141
  def as_node(self) -> GHNode:
142
+ display_name = (
143
+ self.saml_identity.username
144
+ if self.saml_identity and self.saml_identity.username
145
+ else self.scim_identity.username
146
+ if self.scim_identity and self.scim_identity.username
147
+ else self.guid or self.node_id
148
+ )
153
149
 
154
150
  return GHNode(
155
151
  kinds=[nk.EXTERNAL_IDENTITY],
156
152
  properties=GHExternalIdentityProperties(
157
- name=self.guid or self.node_id,
158
- displayname=self.guid or self.node_id,
153
+ name=display_name,
154
+ displayname=display_name,
159
155
  node_id=self.node_id,
160
156
  guid=self.guid,
161
157
  saml_identity_username=self.saml_identity.username
@@ -209,66 +205,6 @@ class ExternalIdentity(BaseAsset):
209
205
  "environment_type": environment_type,
210
206
  }
211
207
 
212
- @property
213
- def _maps_to_user_edges(self):
214
- foreign_idp_type, foreign_env_id = detect_foreign_idp(
215
- issuer=self.idp["issuer"],
216
- sso_url=self.idp["sso_url"],
217
- )
218
- foreign_kind = foreign_user_kind(foreign_idp_type)
219
-
220
- foreign_username = None
221
- if self.saml_identity and self.saml_identity.username:
222
- foreign_username = self.saml_identity.username
223
- elif self.scim_identity and self.scim_identity.username:
224
- foreign_username = self.scim_identity.username
225
-
226
- matchers = foreign_user_matchers(
227
- foreign_kind,
228
- foreign_env_id,
229
- foreign_username,
230
- self.saml_identity.attributes if self.saml_identity else [],
231
- )
232
- if foreign_kind and matchers:
233
- yield Edge(
234
- kind=ek.MAPS_TO_USER,
235
- start=EdgePath(value=self.node_id, match_by="id"),
236
- end=ConditionalEdgePath(
237
- kind=foreign_kind,
238
- property_matchers=matchers,
239
- ),
240
- properties=EdgeProperties(traversable=False),
241
- )
242
-
243
- # SyncedToGHUser: foreign IdP user → GitHub user (traversable, with composition)
244
- if matchers and self.user and self.user.id:
245
- composition_matchers = [
246
- matcher for matcher in matchers if matcher.key in {"name", "objectid"}
247
- ]
248
- composition_predicates = " OR ".join(
249
- f"n.{matcher.key} = '{matcher.value}'"
250
- for matcher in composition_matchers
251
- )
252
- q = (
253
- f"MATCH p=()<-[:GH_SyncedToEnvironment]-(:GH_SamlIdentityProvider)"
254
- f"-[:GH_HasExternalIdentity]->(:GH_ExternalIdentity)"
255
- f"-[:GH_MapsToUser]->(n) "
256
- f"WHERE {composition_predicates} RETURN p"
257
- )
258
- yield Edge(
259
- kind=ek.SYNCED_TO_GH_USER,
260
- start=ConditionalEdgePath(
261
- kind=foreign_kind,
262
- property_matchers=matchers,
263
- ),
264
- end=EdgePath(value=self.user.id, match_by="id"),
265
- properties=GHEdgeProperties(
266
- traversable=True,
267
- composed=True,
268
- query_composition=q,
269
- ),
270
- )
271
-
272
208
  @property
273
209
  def service_provider_node_id(self) -> str | None:
274
210
  return github_saml_service_provider_id(
@@ -363,5 +299,3 @@ class ExternalIdentity(BaseAsset):
363
299
  end=EdgePath(value=self.user.id, match_by="id"),
364
300
  properties=EdgeProperties(traversable=False),
365
301
  )
366
-
367
- yield from self._maps_to_user_edges
@@ -7,6 +7,7 @@ from pydantic import ConfigDict, Field
7
7
  from openhound_github.graph import GHNode
8
8
  from openhound_github.kinds import nodes as nk
9
9
  from openhound_github.main import app
10
+ from openhound_github.models.enterprise_helpers import projected_enterprise_team_node_id
10
11
  from openhound_github.models.team import GHTeamProperties
11
12
 
12
13
 
@@ -43,7 +44,7 @@ class ProjectedEnterpriseTeam(BaseAsset):
43
44
  properties=GHTeamProperties(
44
45
  name=self.name,
45
46
  displayname=self.name,
46
- node_id=f"GH_Team_{self.org_node_id}_{self.node_id}",
47
+ node_id=projected_enterprise_team_node_id(self.org_node_id, self.node_id),
47
48
  github_team_id=self.node_id,
48
49
  collected=False,
49
50
  slug=self.slug,
@@ -3,27 +3,14 @@ from dataclasses import dataclass
3
3
  from typing import Any
4
4
  from urllib.parse import quote, urlparse
5
5
 
6
- from openhound.core.models.entries_dataclass import EdgeProperties, PropertyMatch
7
-
8
- from openhound_github.kinds import nodes as nk
6
+ from openhound.core.models.entries_dataclass import EdgeProperties
9
7
 
10
8
 
11
9
  SAML_CONTRACT_VERSION = "opengraph-saml-v0.3.0"
12
10
  ENTRA_OBJECT_ID_CLAIM = "http://schemas.microsoft.com/identity/claims/objectidentifier"
13
- ENTRA_TENANT_ID_CLAIM = "http://schemas.microsoft.com/identity/claims/tenantid"
14
11
  DEFAULT_GITHUB_DEPLOYMENT_ID = "github.com"
15
12
  DEFAULT_GITHUB_WEB_ORIGIN = "https://github.com"
16
13
 
17
- _FOREIGN_USER_KIND = {
18
- "entra": nk.AZ_USER,
19
- "okta": nk.OKTA_USER,
20
- "pingone": nk.PINGONE_USER,
21
- }
22
- _FOREIGN_USER_ENVIRONMENT_PROPERTY = {
23
- nk.OKTA_USER: "tenant_domain",
24
- nk.PINGONE_USER: "environmentid",
25
- }
26
-
27
14
 
28
15
  @dataclass
29
16
  class SAMLRelationshipEdgeProperties(EdgeProperties):
@@ -67,47 +54,6 @@ def detect_foreign_idp(
67
54
 
68
55
  return None, None
69
56
 
70
- def foreign_user_kind(foreign_idp_type: str | None) -> str:
71
- return _FOREIGN_USER_KIND.get(foreign_idp_type or "", "")
72
-
73
-
74
- def foreign_user_matchers(
75
- foreign_kind: str | None,
76
- foreign_environment_id: str | None,
77
- foreign_username: str | None,
78
- saml_attributes: list[Any] | None = None,
79
- ) -> list[PropertyMatch]:
80
- """Return tenant-scoped matchers for foreign IdP user correlation."""
81
- if foreign_kind == nk.AZ_USER:
82
- tenant_ids = saml_attribute_match_values(
83
- saml_attributes or [],
84
- ENTRA_TENANT_ID_CLAIM,
85
- )
86
- object_ids = saml_attribute_match_values(
87
- saml_attributes or [],
88
- ENTRA_OBJECT_ID_CLAIM,
89
- )
90
- if (
91
- not foreign_environment_id
92
- or len(tenant_ids) != 1
93
- or len(object_ids) != 1
94
- or tenant_ids[0].casefold() != foreign_environment_id.casefold()
95
- ):
96
- return []
97
- return [
98
- PropertyMatch(key="tenantid", value=tenant_ids[0].upper()),
99
- PropertyMatch(key="objectid", value=object_ids[0].upper()),
100
- ]
101
-
102
- environment_property = _FOREIGN_USER_ENVIRONMENT_PROPERTY.get(foreign_kind or "")
103
- if not environment_property or not foreign_environment_id or not foreign_username:
104
- return []
105
- return [
106
- PropertyMatch(key=environment_property, value=foreign_environment_id),
107
- PropertyMatch(key="name", value=foreign_username.upper()),
108
- ]
109
-
110
-
111
57
  def github_deployment_context(host: str) -> tuple[str, str]:
112
58
  """Return a stable deployment ID and browser origin for a GitHub API host."""
113
59
  parsed = urlparse(host)
@@ -137,6 +137,15 @@ class ScimOrganization(ScimScopeAsset):
137
137
  return []
138
138
 
139
139
 
140
+ @app.asset()
141
+ class EnterpriseScimOrganization(ScimOrganization):
142
+ """Enterprise-scoped SCIM organization input model.
143
+
144
+ This remains a distinct asset class so the converter can map enterprise and
145
+ organization SCIM tables independently while emitting the same graph kind.
146
+ """
147
+
148
+
140
149
  @app.asset(
141
150
  node=NodeDef(
142
151
  kind=nk.SCIM_USER,
@@ -189,7 +198,7 @@ class ScimUser(ScimScopeAsset):
189
198
  id=self.id,
190
199
  kinds=[nk.SCIM_USER],
191
200
  properties=ScimNodeProperties(
192
- name=self.id,
201
+ name=self.user_name or self.id,
193
202
  displayname=display_name,
194
203
  environmentid=self.scope_node_id,
195
204
  external_id=self.external_id,
@@ -213,15 +222,16 @@ class ScimUser(ScimScopeAsset):
213
222
  end=EdgePath(value=self.id, match_by="id"),
214
223
  properties=EdgeProperties(traversable=True),
215
224
  )
216
- yield Edge(
217
- kind=ek.SCIM_PROVISIONED,
218
- start=EdgePath(value=self.id, match_by="id"),
219
- end=ConditionalEdgePath(
220
- kind=nk.EXTERNAL_IDENTITY,
221
- property_matchers=[PropertyMatch(key="guid", value=self.id)],
222
- ),
223
- properties=EdgeProperties(traversable=True),
225
+ external_identity_id = self._lookup.external_identity_id_for_guid(
226
+ self.id, self.scope_name
224
227
  )
228
+ if external_identity_id:
229
+ yield Edge(
230
+ kind=ek.SCIM_PROVISIONED,
231
+ start=EdgePath(value=self.id, match_by="id"),
232
+ end=EdgePath(value=external_identity_id, match_by="id"),
233
+ properties=EdgeProperties(traversable=True),
234
+ )
225
235
  if self.emit_legacy_correlation and self.external_id:
226
236
  yield Edge(
227
237
  kind=ek.SCIM_PROVISIONED,
@@ -231,6 +241,11 @@ class ScimUser(ScimScopeAsset):
231
241
  )
232
242
 
233
243
 
244
+ @app.asset()
245
+ class EnterpriseScimUser(ScimUser):
246
+ """Enterprise-scoped SCIM user input model."""
247
+
248
+
234
249
  @app.asset(
235
250
  node=NodeDef(
236
251
  kind=nk.SCIM_GROUP,