diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml new file mode 100644 index 0000000..c79c256 --- /dev/null +++ b/.github/codeql/codeql-config.yml @@ -0,0 +1,19 @@ +name: "CodeQL Config" + +queries: + - uses: security-and-quality + - uses: security-extended + +paths: + - src + - "**/*.ts" + - "**/*.js" + +paths-ignore: + - node_modules + - dist + - "**/*.test.ts" + - "**/*.spec.ts" + - "**/*.d.ts" + +build-mode: manual \ No newline at end of file diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..824b49f --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,50 @@ +name: "CodeQL" + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + schedule: + - cron: '30 1 * * 0' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript-typescript' ] + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + config-file: ./.github/codeql/codeql-config.yml + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Build project + run: npm run build:codeql + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 8e7bd19..5f8dc03 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,8 @@ -/models -/models/errors -/types +/examples/node_modules +.env.local +.env.*.local /node_modules -/lib -/sdk -/funcs /react-query -/mcp-server -/hooks -/index.* -/core.* /bin /cjs /esm diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 1f905b7..9e14658 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: 4f4a8d8c-90c5-4992-8800-17a249fd1e0f management: - docChecksum: ffe4ac660cd1dd7c56128d992f81eb05 + docChecksum: a070e20ec33f91e3b59ac713238493c3 docVersion: "1.0" - speakeasyVersion: 1.561.0 - generationVersion: 2.628.0 - releaseVersion: 0.6.2 - configChecksum: 475ae8407d3b2abbdf5125b9139a66ef + speakeasyVersion: 1.590.0 + generationVersion: 2.666.0 + releaseVersion: 0.7.1 + configChecksum: 940a4f008612273b581c9f352905e301 repoURL: https://github.com/opalsecurity/opal-mcp.git installationURL: https://github.com/opalsecurity/opal-mcp published: true @@ -14,7 +14,7 @@ features: typescript: additionalDependencies: 0.1.0 additionalProperties: 0.1.1 - core: 3.21.11 + core: 3.21.15 defaultEnabledRetries: 0.1.0 deprecations: 2.81.1 devContainers: 2.90.0 @@ -25,12 +25,13 @@ features: globalSecurityFlattening: 0.1.0 globalServerURLs: 2.82.5 inputOutputModels: 2.82.0 - mcpServer: 0.9.2 + mcpServer: 0.9.3 nullables: 0.1.1 + pagination: 2.83.0 responseFormat: 0.2.3 retries: 2.83.0 sdkHooks: 0.3.0 - unions: 2.85.9 + unions: 2.85.11 generatedFiles: - .devcontainer/README.md - .devcontainer/devcontainer.json @@ -56,6 +57,7 @@ generatedFiles: - docs/models/components/awsec2instance.md - docs/models/components/awsekscluster.md - docs/models/components/awsiamrole.md + - docs/models/components/awsorganizationalunit.md - docs/models/components/awspermissionset.md - docs/models/components/awsrdsinstance.md - docs/models/components/azureadmicrosoft365group.md @@ -81,6 +83,7 @@ generatedFiles: - docs/models/components/createresourceinfo.md - docs/models/components/createtaginfo.md - docs/models/components/createuarinfo.md + - docs/models/components/customconnector.md - docs/models/components/custommetadatum.md - docs/models/components/duogroup.md - docs/models/components/entitytypeenum.md @@ -102,6 +105,7 @@ generatedFiles: - docs/models/components/gitlabgroup.md - docs/models/components/gitlabproject.md - docs/models/components/googlegroup.md + - docs/models/components/googleworkspacerole.md - docs/models/components/group.md - docs/models/components/groupaccesslevel.md - docs/models/components/groupbinding.md @@ -126,6 +130,7 @@ generatedFiles: - docs/models/components/oktaapp.md - docs/models/components/oktacustomrole.md - docs/models/components/oktagroup.md + - docs/models/components/oktagrouprule.md - docs/models/components/oktastandardrole.md - docs/models/components/oncallschedule.md - docs/models/components/oncallscheduleidlist.md @@ -149,7 +154,6 @@ generatedFiles: - docs/models/components/paginateduserslist.md - docs/models/components/propagationstatus.md - docs/models/components/propagationstatusenum.md - - docs/models/components/request.md - docs/models/components/requestconfiguration.md - docs/models/components/requestconnection.md - docs/models/components/requestcustomfieldresponse.md @@ -161,6 +165,7 @@ generatedFiles: - docs/models/components/requestreviewerstatus.md - docs/models/components/requeststage.md - docs/models/components/requeststatusenum.md + - docs/models/components/requestt.md - docs/models/components/requesttemplatecustomfieldtypeenum.md - docs/models/components/resource.md - docs/models/components/resourceaccesslevel.md @@ -179,12 +184,16 @@ generatedFiles: - docs/models/components/reviewerstagelist.md - docs/models/components/reviewstageoperator.md - docs/models/components/risksensitivityenum.md + - docs/models/components/rolepermissionnameenum.md + - docs/models/components/rolepermissiontargettypeenum.md - docs/models/components/ruleclauses.md - docs/models/components/ruleconjunction.md - docs/models/components/ruledisjunction.md - docs/models/components/salesforcepermissionset.md - docs/models/components/salesforceprofile.md - docs/models/components/salesforcerole.md + - docs/models/components/scopedrolepermission.md + - docs/models/components/scopedrolepermissionlist.md - docs/models/components/security.md - docs/models/components/session.md - docs/models/components/sessionslist.md @@ -222,6 +231,7 @@ generatedFiles: - docs/models/components/userlist.md - docs/models/components/visibilityinfo.md - docs/models/components/visibilitytypeenum.md + - docs/models/components/workdayusersecuritygroup.md - docs/models/operations/addbundlegrouprequest.md - docs/models/operations/addbundlegrouprequestbody.md - docs/models/operations/addbundleresourcerequest.md @@ -256,16 +266,21 @@ generatedFiles: - docs/models/operations/deleteresourceuserrequest.md - docs/models/operations/deletetagbyidrequest.md - docs/models/operations/eventsrequest.md + - docs/models/operations/eventsresponse.md - docs/models/operations/getaccessrulerequest.md - docs/models/operations/getapprequest.md - docs/models/operations/getappsrequest.md - docs/models/operations/getbundlegroupsrequest.md + - docs/models/operations/getbundlegroupsresponse.md - docs/models/operations/getbundlerequest.md - docs/models/operations/getbundleresourcesrequest.md + - docs/models/operations/getbundleresourcesresponse.md - docs/models/operations/getbundlesrequest.md + - docs/models/operations/getbundlesresponse.md - docs/models/operations/getbundlevisibilityrequest.md - docs/models/operations/getgroupbindingrequest.md - docs/models/operations/getgroupbindingsrequest.md + - docs/models/operations/getgroupbindingsresponse.md - docs/models/operations/getgroupcontaininggrouprequest.md - docs/models/operations/getgroupcontaininggroupsrequest.md - docs/models/operations/getgroupmessagechannelsrequest.md @@ -275,25 +290,32 @@ generatedFiles: - docs/models/operations/getgroupreviewersrequest.md - docs/models/operations/getgroupreviewerstagesrequest.md - docs/models/operations/getgroupsrequest.md + - docs/models/operations/getgroupsresponse.md - docs/models/operations/getgrouptagsrequest.md - docs/models/operations/getgroupusersrequest.md - docs/models/operations/getgroupvisibilityrequest.md - docs/models/operations/getidpgroupmappingsrequest.md - docs/models/operations/getmessagechannelrequest.md - docs/models/operations/getnhisrequest.md + - docs/models/operations/getnhisresponse.md - docs/models/operations/getoncallschedulerequest.md - docs/models/operations/getownerfromnamerequest.md - docs/models/operations/getownerrequest.md - docs/models/operations/getownersrequest.md + - docs/models/operations/getownersresponse.md - docs/models/operations/getownerusersrequest.md + - docs/models/operations/getrequestrequest.md - docs/models/operations/getrequestsrelayrequest.md - docs/models/operations/getrequestsrequest.md + - docs/models/operations/getrequestsresponse.md - docs/models/operations/getresourcemessagechannelsrequest.md - docs/models/operations/getresourcenhisrequest.md - docs/models/operations/getresourcerequest.md - docs/models/operations/getresourcereviewersrequest.md - docs/models/operations/getresourcereviewerstagesrequest.md + - docs/models/operations/getresourcescopedrolepermissionsrequest.md - docs/models/operations/getresourcesrequest.md + - docs/models/operations/getresourcesresponse.md - docs/models/operations/getresourcetagsrequest.md - docs/models/operations/getresourceuserrequest.md - docs/models/operations/getresourceuserresponse.md @@ -303,9 +325,12 @@ generatedFiles: - docs/models/operations/gettagbyidrequest.md - docs/models/operations/gettagrequest.md - docs/models/operations/gettagsrequest.md + - docs/models/operations/gettagsresponse.md - docs/models/operations/getuarrequest.md - docs/models/operations/getuarsrequest.md + - docs/models/operations/getuarsresponse.md - docs/models/operations/getusersrequest.md + - docs/models/operations/getusersresponse.md - docs/models/operations/getusertagsrequest.md - docs/models/operations/level.md - docs/models/operations/mapping.md @@ -328,6 +353,7 @@ generatedFiles: - docs/models/operations/setresourcemessagechannelsrequest.md - docs/models/operations/setresourcereviewersrequest.md - docs/models/operations/setresourcereviewerstagesrequest.md + - docs/models/operations/setresourcescopedrolepermissionsrequest.md - docs/models/operations/setresourcevisibilityrequest.md - docs/models/operations/updateaccessrulerequest.md - docs/models/operations/updatebundlerequest.md @@ -353,11 +379,16 @@ generatedFiles: - docs/sdks/owners/README.md - docs/sdks/requests/README.md - docs/sdks/resources/README.md + - docs/sdks/scopedrolepermissions/README.md - docs/sdks/sessions/README.md - docs/sdks/tags/README.md - docs/sdks/uars/README.md - docs/sdks/users/README.md - eslint.config.mjs + - examples/.env.template + - examples/README.md + - examples/appsGetApps.example.ts + - examples/package.json - jsr.json - package.json - src/core.ts @@ -437,6 +468,7 @@ generatedFiles: - src/funcs/ownersUpdateOwners.ts - src/funcs/requestsApproveRequest.ts - src/funcs/requestsCreateRequest.ts + - src/funcs/requestsGetRequest.ts - src/funcs/requestsGetRequests.ts - src/funcs/requestsGetRequestsRelay.ts - src/funcs/resourcesAddResourceNhi.ts @@ -450,6 +482,7 @@ generatedFiles: - src/funcs/resourcesGetResourceNhis.ts - src/funcs/resourcesGetResourceReviewerStages.ts - src/funcs/resourcesGetResourceReviewers.ts + - src/funcs/resourcesGetResourceScopedRolePermissions.ts - src/funcs/resourcesGetResourceTags.ts - src/funcs/resourcesGetResourceUser.ts - src/funcs/resourcesGetResourceUsers.ts @@ -459,6 +492,7 @@ generatedFiles: - src/funcs/resourcesSetResourceMessageChannels.ts - src/funcs/resourcesSetResourceReviewerStages.ts - src/funcs/resourcesSetResourceReviewers.ts + - src/funcs/resourcesSetResourceScopedRolePermissions.ts - src/funcs/resourcesSetResourceVisibility.ts - src/funcs/resourcesUpdateResourceUser.ts - src/funcs/resourcesUpdateResources.ts @@ -589,6 +623,7 @@ generatedFiles: - src/mcp-server/tools/ownersUpdateOwners.ts - src/mcp-server/tools/requestsApproveRequest.ts - src/mcp-server/tools/requestsCreateRequest.ts + - src/mcp-server/tools/requestsGetRequest.ts - src/mcp-server/tools/requestsGetRequests.ts - src/mcp-server/tools/requestsGetRequestsRelay.ts - src/mcp-server/tools/resourcesAddResourceNhi.ts @@ -602,6 +637,7 @@ generatedFiles: - src/mcp-server/tools/resourcesGetResourceNhis.ts - src/mcp-server/tools/resourcesGetResourceReviewerStages.ts - src/mcp-server/tools/resourcesGetResourceReviewers.ts + - src/mcp-server/tools/resourcesGetResourceScopedRolePermissions.ts - src/mcp-server/tools/resourcesGetResourceTags.ts - src/mcp-server/tools/resourcesGetResourceUser.ts - src/mcp-server/tools/resourcesGetResourceUsers.ts @@ -611,6 +647,7 @@ generatedFiles: - src/mcp-server/tools/resourcesSetResourceMessageChannels.ts - src/mcp-server/tools/resourcesSetResourceReviewerStages.ts - src/mcp-server/tools/resourcesSetResourceReviewers.ts + - src/mcp-server/tools/resourcesSetResourceScopedRolePermissions.ts - src/mcp-server/tools/resourcesSetResourceVisibility.ts - src/mcp-server/tools/resourcesUpdateResourceUser.ts - src/mcp-server/tools/resourcesUpdateResources.ts @@ -728,9 +765,13 @@ generatedFiles: - src/models/components/reviewerstagelist.ts - src/models/components/reviewstageoperator.ts - src/models/components/risksensitivityenum.ts + - src/models/components/rolepermissionnameenum.ts + - src/models/components/rolepermissiontargettypeenum.ts - src/models/components/ruleclauses.ts - src/models/components/ruleconjunction.ts - src/models/components/ruledisjunction.ts + - src/models/components/scopedrolepermission.ts + - src/models/components/scopedrolepermissionlist.ts - src/models/components/security.ts - src/models/components/session.ts - src/models/components/sessionslist.ts @@ -824,6 +865,7 @@ generatedFiles: - src/models/operations/getownerfromname.ts - src/models/operations/getowners.ts - src/models/operations/getownerusers.ts + - src/models/operations/getrequest.ts - src/models/operations/getrequests.ts - src/models/operations/getrequestsrelay.ts - src/models/operations/getresource.ts @@ -832,6 +874,7 @@ generatedFiles: - src/models/operations/getresourcereviewers.ts - src/models/operations/getresourcereviewerstages.ts - src/models/operations/getresources.ts + - src/models/operations/getresourcescopedrolepermissions.ts - src/models/operations/getresourcetags.ts - src/models/operations/getresourceuser.ts - src/models/operations/getresourceusers.ts @@ -864,6 +907,7 @@ generatedFiles: - src/models/operations/setresourcemessagechannels.ts - src/models/operations/setresourcereviewers.ts - src/models/operations/setresourcereviewerstages.ts + - src/models/operations/setresourcescopedrolepermissions.ts - src/models/operations/setresourcevisibility.ts - src/models/operations/updateaccessrule.ts - src/models/operations/updatebundle.ts @@ -886,6 +930,7 @@ generatedFiles: - src/sdk/owners.ts - src/sdk/requests.ts - src/sdk/resources.ts + - src/sdk/scopedrolepermissions.ts - src/sdk/sdk.ts - src/sdk/sessions.ts - src/sdk/tags.ts @@ -1650,6 +1695,8 @@ examples: path: group_id: "4baf8423-db0a-4037-a4cf-f79c60cb67a5" user_id: "f92aa855-cea9-4814-b9d8-f2a60d3e4a06" + query: + access_level_remote_id: "30" getGroupBindings: "": parameters: @@ -1967,7 +2014,7 @@ examples: application/json: {"name": "Okta Engineering Super Admin", "description": "Okta super admin role.", "resource_type": "OKTA_ROLE", "app_id": "f454d283-ca87-4a8a-bdbb-df212eca5353", "remote_resource_id": "API_ACCESS_MANAGEMENT_ADMIN-51d203da-313a-4fd9-8fcf-420ce6312345", "metadata": "{\n \"okta_directory_role\":\n {\n \"role_id\": \"SUPER_ADMIN-b52aa037-4a35-4ac3-9350-f6260fd12345\",\n \"role_type\": \"SUPER_ADMIN\",\n },\n}"} responses: "200": - application/json: {"resource_id": "f454d283-ca87-4a8a-bdbb-df212eca5353", "app_id": "b5a5ca27-0ea3-4d86-9199-2126d57d1fbd", "description": "This resource represents AWS IAM role \"SupportUser\".", "admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8", "max_duration": 120, "require_manager_approval": false, "require_support_ticket": false, "parent_resource_id": "f454d283-ca67-4a8a-bdbb-df212eca5345"} + application/json: {"resource_id": "f454d283-ca87-4a8a-bdbb-df212eca5353", "app_id": "b5a5ca27-0ea3-4d86-9199-2126d57d1fbd", "description": "This resource represents AWS IAM role \"SupportUser\".", "admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8", "max_duration": 120, "require_manager_approval": false, "require_support_ticket": false, "parent_resource_id": "f454d283-ca67-4a8a-bdbb-df212eca5345", "ancestor_resource_ids": ["f454d283-ca67-4a8a-bdbb-df212eca5345"], "descendant_resource_ids": ["f454d283-ca67-4a8a-bdbb-df212eca5345"]} get_resource: "": parameters: @@ -1982,7 +2029,7 @@ examples: resource_id: "4baf8423-db0a-4037-a4cf-f79c60cb67a5" responses: "200": - application/json: {"resource_id": "f454d283-ca87-4a8a-bdbb-df212eca5353", "app_id": "b5a5ca27-0ea3-4d86-9199-2126d57d1fbd", "description": "This resource represents AWS IAM role \"SupportUser\".", "admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8", "max_duration": 120, "require_manager_approval": false, "require_support_ticket": false, "parent_resource_id": "f454d283-ca67-4a8a-bdbb-df212eca5345"} + application/json: {"resource_id": "f454d283-ca87-4a8a-bdbb-df212eca5353", "app_id": "b5a5ca27-0ea3-4d86-9199-2126d57d1fbd", "description": "This resource represents AWS IAM role \"SupportUser\".", "admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8", "max_duration": 120, "require_manager_approval": false, "require_support_ticket": false, "parent_resource_id": "f454d283-ca67-4a8a-bdbb-df212eca5345", "ancestor_resource_ids": ["f454d283-ca67-4a8a-bdbb-df212eca5345"], "descendant_resource_ids": ["f454d283-ca67-4a8a-bdbb-df212eca5345"]} delete_resource: "": parameters: @@ -2693,5 +2740,31 @@ examples: responses: "200": application/json: {"group_id": "1b978423-db0a-4037-a4cf-f79c60cb67b3", "user_id": "29827fb8-f2dd-4e80-9576-28e31e9934ac", "full_name": "Jake Barnes", "email": "jake@company.dev", "expiration_date": "2022-01-23T04:56:07Z"} + getRequest: + speakeasy-default-get-request: + parameters: + path: + id: "4baf8423-db0a-4037-a4cf-f79c60cb67a5" + responses: + "200": + application/json: {"id": "7c86c85d-0651-43e2-a748-d69d658418e8", "created_at": "2021-01-06T20:00:00Z", "updated_at": "2021-01-06T20:00:00Z", "requester_id": "c86c85d-0651-43e2-a748-d69d658418e8", "target_user_id": "r86c85d-0651-43e2-a748-d69d658418e8", "target_group_id": "r86c85d-0651-43e2-a748-d69d658418e8", "status": "APPROVED", "reason": "I need this resource.", "duration_minutes": 1440, "stages": {"requestedRoleName": "Admin", "requestedItemName": "AWS Production Account", "stages": [{"stage": 1, "operator": "AND", "reviewers": [{"id": "7c86c85d-0651-43e2-a748-d69d658418e8", "status": "PENDING"}]}, {"stage": 2, "operator": "OR", "reviewers": [{"id": "8d86c85d-0651-43e2-a748-d69d658418e9", "status": "APPROVED"}]}]}} + get_resource_scoped_role_permissions: + speakeasy-default-get-resource-scoped-role-permissions: + parameters: + path: + resource_id: "1b978423-db0a-4037-a4cf-f79c60cb67b3" + responses: + "200": + application/json: {"permissions": [{"target_ids": ["a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", "8294e9c9-deb6-48e9-9c99-da2a1e04a87f"], "target_type": "RESOURCE", "permission_name": "READ", "allow_all": true}]} + set_resource_scoped_role_permissions: + speakeasy-default-set-resource-scoped-role-permissions: + parameters: + path: + resource_id: "1b978423-db0a-4037-a4cf-f79c60cb67b3" + requestBody: + application/json: {"permissions": [{"target_ids": ["a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", "8294e9c9-deb6-48e9-9c99-da2a1e04a87f"], "target_type": "RESOURCE", "permission_name": "READ", "allow_all": false}]} + responses: + "200": + application/json: {"permissions": [{"target_ids": ["a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", "8294e9c9-deb6-48e9-9c99-da2a1e04a87f"], "target_type": "RESOURCE", "permission_name": "READ", "allow_all": false}]} examplesVersion: 1.0.2 generatedTests: {} diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index eaaaf61..c0ed3c7 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -19,8 +19,12 @@ generation: auth: oAuth2ClientCredentialsEnabled: true oAuth2PasswordEnabled: true + tests: + generateTests: true + generateNewTests: false + skipResponseBodyAssertions: false typescript: - version: 0.6.2 + version: 0.7.1 additionalDependencies: dependencies: {} devDependencies: {} @@ -29,6 +33,7 @@ typescript: author: Speakeasy baseErrorName: OpalMcpError clientServerStatusCodesAsErrors: true + constFieldsAlwaysOptional: true defaultErrorName: APIError enableCustomCodeRegions: false enableMCPServer: true @@ -37,6 +42,7 @@ typescript: envVarPrefix: OPALMCP flattenGlobalSecurity: true flatteningOrder: parameters-first + generateExamples: true imports: option: openapi paths: diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 10e9705..83c0a99 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.561.0 +speakeasyVersion: 1.590.0 sources: Opal API: sourceNamespace: opal-api - sourceRevisionDigest: sha256:1fdd8c27236a9027881385b6639278ce0427267c3ebf65716fb68c1c9a11cf50 - sourceBlobDigest: sha256:b25c0d572405319604a058093680a7fab5ba152bd2c55232be98f78e73023961 + sourceRevisionDigest: sha256:067c5383611892ea1a3f8c0c384da4a0b10b3703e6fb4dbd342edb2fa87830d1 + sourceBlobDigest: sha256:67fb11fb473e55687e0248d684376946d36de786a48503150ae4ba0c8ffcd0b4 tags: - latest - "1.0" @@ -11,10 +11,10 @@ targets: opal-mcp: source: Opal API sourceNamespace: opal-api - sourceRevisionDigest: sha256:1fdd8c27236a9027881385b6639278ce0427267c3ebf65716fb68c1c9a11cf50 - sourceBlobDigest: sha256:b25c0d572405319604a058093680a7fab5ba152bd2c55232be98f78e73023961 + sourceRevisionDigest: sha256:067c5383611892ea1a3f8c0c384da4a0b10b3703e6fb4dbd342edb2fa87830d1 + sourceBlobDigest: sha256:67fb11fb473e55687e0248d684376946d36de786a48503150ae4ba0c8ffcd0b4 codeSamplesNamespace: opal-api-typescript-code-samples - codeSamplesRevisionDigest: sha256:959aa2e08e579270541d2411016d735d2a085d333207d82c51b547eed1444dbf + codeSamplesRevisionDigest: sha256:bb41675b65d70039fffb25478f0b1c5930e88436903a1524737b390200b3d127 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index 7e40674..f7ec725 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,6 @@ Opal API: The Opal API is a RESTful API that allows you to interact with the Opa * [opal-mcp](#opal-mcp) * [Build the image](#build-the-image) * [Run the container](#run-the-container) - * [Available Resources and Operations](#available-resources-and-operations) * [Maturity](#maturity) * [Contributions](#contributions) @@ -399,7 +398,8 @@ For additional help, you can: * [getRequests](docs/sdks/requests/README.md#getrequests) - Returns a list of requests for your organization that is visible by the admin. * [createRequest](docs/sdks/requests/README.md#createrequest) - Create an access request -* [getRequestsRelay](docs/sdks/requests/README.md#getrequestsrelay) - Returns a paginated list of requests using Relay-style cursor pagination. +* [~~getRequestsRelay~~](docs/sdks/requests/README.md#getrequestsrelay) - Returns a paginated list of requests using Relay-style cursor pagination. :warning: **Deprecated** +* [getRequest](docs/sdks/requests/README.md#getrequest) - Returns a request by ID. * [approveRequest](docs/sdks/requests/README.md#approverequest) - Approve an access request ### [resources](docs/sdks/resources/README.md) @@ -427,6 +427,13 @@ For additional help, you can: * [getResourceUser](docs/sdks/resources/README.md#getresourceuser) - Returns information about a specific user's access to a resource. * [~~resourceUserAccessStatusRetrieve~~](docs/sdks/resources/README.md#resourceuseraccessstatusretrieve) - Get user's access status to a resource. :warning: **Deprecated** * [getResourceTags](docs/sdks/resources/README.md#getresourcetags) - Returns all tags applied to the resource. +* [getResourceScopedRolePermissions](docs/sdks/resources/README.md#getresourcescopedrolepermissions) - Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. +* [setResourceScopedRolePermissions](docs/sdks/resources/README.md#setresourcescopedrolepermissions) - Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. + +### [scopedRolePermissions](docs/sdks/scopedrolepermissions/README.md) + +* [getResourceScopedRolePermissions](docs/sdks/scopedrolepermissions/README.md#getresourcescopedrolepermissions) - Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. +* [setResourceScopedRolePermissions](docs/sdks/scopedrolepermissions/README.md#setresourcescopedrolepermissions) - Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. ### [sessions](docs/sdks/sessions/README.md) @@ -486,6 +493,42 @@ Authentication: + +## Pagination + +Some of the endpoints in this SDK support pagination. To use pagination, you +make your SDK calls as usual, but the returned response object will also be an +async iterable that can be consumed using the [`for await...of`][for-await-of] +syntax. + +[for-await-of]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of + +Here's an example of one such pagination call: + +```typescript +import { OpalMcp } from "opal-mcp"; + +const opalMcp = new OpalMcp({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const result = await opalMcp.bundles.getBundles({ + pageSize: 200, + cursor: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + contains: "Engineering", + }); + + for await (const page of result) { + console.log(page); + } +} + +run(); + +``` + + ## Maturity diff --git a/docs/models/components/awsaccount.md b/docs/models/components/awsaccount.md index 531b223..f0dbf21 100644 --- a/docs/models/components/awsaccount.md +++ b/docs/models/components/awsaccount.md @@ -9,11 +9,13 @@ import { AwsAccount } from "opal-mcp/models/components"; let value: AwsAccount = { accountId: "234234234234", + organizationalUnitId: "ou-1234", }; ``` ## Fields -| Field | Type | Required | Description | Example | -| -------------------------- | -------------------------- | -------------------------- | -------------------------- | -------------------------- | -| `accountId` | *string* | :heavy_check_mark: | The id of the AWS account. | 234234234234 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `accountId` | *string* | :heavy_check_mark: | The id of the AWS account. | 234234234234 | +| `organizationalUnitId` | *string* | :heavy_minus_sign: | The id of the AWS organizational unit. Required only if customer has OUs enabled. | ou-1234 | \ No newline at end of file diff --git a/docs/models/components/awsorganizationalunit.md b/docs/models/components/awsorganizationalunit.md new file mode 100644 index 0000000..2a1d2ef --- /dev/null +++ b/docs/models/components/awsorganizationalunit.md @@ -0,0 +1,21 @@ +# AwsOrganizationalUnit + +Remote info for AWS organizational unit. + +## Example Usage + +```typescript +import { AwsOrganizationalUnit } from "opal-mcp/models/components"; + +let value: AwsOrganizationalUnit = { + parentId: "ou-1234", + organizationalUnitId: "ou-1234", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `parentId` | *string* | :heavy_minus_sign: | The id of the parent organizational unit. | ou-1234 | +| `organizationalUnitId` | *string* | :heavy_check_mark: | The id of the AWS organizational unit that is being created. | ou-1234 | \ No newline at end of file diff --git a/docs/models/components/customconnector.md b/docs/models/components/customconnector.md new file mode 100644 index 0000000..9f6bb08 --- /dev/null +++ b/docs/models/components/customconnector.md @@ -0,0 +1,21 @@ +# CustomConnector + +Remote info for a custom connector resource. + +## Example Usage + +```typescript +import { CustomConnector } from "opal-mcp/models/components"; + +let value: CustomConnector = { + remoteResourceId: "01fa7402-01d8-103b-8deb-5f3a0ab7884", + canHaveUsageEvents: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `remoteResourceId` | *string* | :heavy_check_mark: | The id of the resource in the end system | 01fa7402-01d8-103b-8deb-5f3a0ab7884 | +| `canHaveUsageEvents` | *boolean* | :heavy_check_mark: | A bool representing whether or not the resource can have usage data. | false | \ No newline at end of file diff --git a/docs/models/components/googleworkspacerole.md b/docs/models/components/googleworkspacerole.md new file mode 100644 index 0000000..edd60e6 --- /dev/null +++ b/docs/models/components/googleworkspacerole.md @@ -0,0 +1,19 @@ +# GoogleWorkspaceRole + +Remote info for GCP workspace role. + +## Example Usage + +```typescript +import { GoogleWorkspaceRole } from "opal-mcp/models/components"; + +let value: GoogleWorkspaceRole = { + roleId: "google-workspace-role:01234567890123456", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | +| `roleId` | *string* | :heavy_check_mark: | The id of the role. | google-workspace-role:01234567890123456 | \ No newline at end of file diff --git a/docs/models/components/groupremoteinfo.md b/docs/models/components/groupremoteinfo.md index 0d625e5..bbbe6b4 100644 --- a/docs/models/components/groupremoteinfo.md +++ b/docs/models/components/groupremoteinfo.md @@ -38,6 +38,12 @@ let value: GroupRemoteInfo = { snowflakeRole: { roleId: "01fa7402-01d8-103b-8deb-5f3a0ab7884", }, + oktaGroupRule: { + ruleId: "0pr3f7zMZZHPgUoWO0g4", + }, + workdayUserSecurityGroup: { + groupId: "123abc456def", + }, }; ``` @@ -54,4 +60,6 @@ let value: GroupRemoteInfo = { | `duoGroup` | [components.DuoGroup](../../models/components/duogroup.md) | :heavy_minus_sign: | Remote info for Duo Security group. | | `azureAdSecurityGroup` | [components.AzureAdSecurityGroup](../../models/components/azureadsecuritygroup.md) | :heavy_minus_sign: | Remote info for Microsoft Entra ID Security group. | | `azureAdMicrosoft365Group` | [components.AzureAdMicrosoft365Group](../../models/components/azureadmicrosoft365group.md) | :heavy_minus_sign: | Remote info for Microsoft Entra ID Microsoft 365 group. | -| `snowflakeRole` | [components.SnowflakeRole](../../models/components/snowflakerole.md) | :heavy_minus_sign: | Remote info for Snowflake role. | \ No newline at end of file +| `snowflakeRole` | [components.SnowflakeRole](../../models/components/snowflakerole.md) | :heavy_minus_sign: | Remote info for Snowflake role. | +| `oktaGroupRule` | [components.OktaGroupRule](../../models/components/oktagrouprule.md) | :heavy_minus_sign: | Remote info for Okta Directory group rule. | +| `workdayUserSecurityGroup` | [components.WorkdayUserSecurityGroup](../../models/components/workdayusersecuritygroup.md) | :heavy_minus_sign: | Remote info for Workday User Security group. | \ No newline at end of file diff --git a/docs/models/components/oktagrouprule.md b/docs/models/components/oktagrouprule.md new file mode 100644 index 0000000..0fb9491 --- /dev/null +++ b/docs/models/components/oktagrouprule.md @@ -0,0 +1,19 @@ +# OktaGroupRule + +Remote info for Okta Directory group rule. + +## Example Usage + +```typescript +import { OktaGroupRule } from "opal-mcp/models/components"; + +let value: OktaGroupRule = { + ruleId: "0pr3f7zMZZHPgUoWO0g4", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `ruleId` | *string* | :heavy_check_mark: | The id of the Okta group rule. | 0pr3f7zMZZHPgUoWO0g4 | \ No newline at end of file diff --git a/docs/models/components/requestedge.md b/docs/models/components/requestedge.md index 0d2388d..0052b8e 100644 --- a/docs/models/components/requestedge.md +++ b/docs/models/components/requestedge.md @@ -51,5 +51,5 @@ let value: RequestEdge = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `node` | [components.Request](../../models/components/request.md) | :heavy_check_mark: | # Request Object
### Description
The `Request` object is used to represent a request.

### Usage Example
Returned from the `GET Requests` endpoint. | {
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"requester_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"target_user_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"target_group_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"status": "pending",
"reason": "I need this resource.",
"duration_minutes": 1440,
"request_comments": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"request_id": "4c86c85d-0651-43e2-a748-d69d658418e8",
"user_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"comment": "This is a comment."
}
],
"stages": {
"requestedRoleName": "Admin",
"requestedItemName": "AWS Production Account",
"stages": [
{
"stage": 1,
"operator": "AND",
"reviewers": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"status": "PENDING"
}
]
},
{
"stage": 2,
"operator": "OR",
"reviewers": [
{
"id": "8d86c85d-0651-43e2-a748-d69d658418e9",
"status": "APPROVED"
}
]
}
]
}
} | +| `node` | [components.RequestT](../../models/components/requestt.md) | :heavy_check_mark: | # Request Object
### Description
The `Request` object is used to represent a request.

### Usage Example
Returned from the `GET Requests` endpoint. | {
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"requester_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"target_user_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"target_group_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"status": "pending",
"reason": "I need this resource.",
"duration_minutes": 1440,
"request_comments": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"request_id": "4c86c85d-0651-43e2-a748-d69d658418e8",
"user_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"comment": "This is a comment."
}
],
"stages": {
"requestedRoleName": "Admin",
"requestedItemName": "AWS Production Account",
"stages": [
{
"stage": 1,
"operator": "AND",
"reviewers": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"status": "PENDING"
}
]
},
{
"stage": 2,
"operator": "OR",
"reviewers": [
{
"id": "8d86c85d-0651-43e2-a748-d69d658418e9",
"status": "APPROVED"
}
]
}
]
}
} | | `cursor` | *string* | :heavy_check_mark: | The cursor for this request edge | | \ No newline at end of file diff --git a/docs/models/components/requesteditem.md b/docs/models/components/requesteditem.md index db6531f..3bd86f2 100644 --- a/docs/models/components/requesteditem.md +++ b/docs/models/components/requesteditem.md @@ -29,4 +29,6 @@ let value: RequestedItem = { | `groupId` | *string* | :heavy_minus_sign: | The ID of the group requested. | f454d283-ca87-4a8a-bdbb-df212eca5353 | | `accessLevelName` | *string* | :heavy_minus_sign: | The name of the access level requested. | admin | | `accessLevelRemoteId` | *string* | :heavy_minus_sign: | The ID of the access level requested on the remote system. | arn:aws:iam::490306337630:role/SupportUser | -| `name` | *string* | :heavy_minus_sign: | The name of the target. | Engineering Team | \ No newline at end of file +| `name` | *string* | :heavy_minus_sign: | The name of the target. | Engineering Team | +| `remoteId` | *string* | :heavy_minus_sign: | The ID of the target on the remote system. | arn:aws:iam::490306337630:role/SupportUser | +| `remoteName` | *string* | :heavy_minus_sign: | The name of the target on the remote system. | SupportUser | \ No newline at end of file diff --git a/docs/models/components/requestlist.md b/docs/models/components/requestlist.md index b66a725..1b45a83 100644 --- a/docs/models/components/requestlist.md +++ b/docs/models/components/requestlist.md @@ -35,5 +35,5 @@ let value: RequestList = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | -| `requests` | [components.Request](../../models/components/request.md)[] | :heavy_minus_sign: | The list of requests. | | +| `requests` | [components.RequestT](../../models/components/requestt.md)[] | :heavy_minus_sign: | The list of requests. | | | `cursor` | *string* | :heavy_minus_sign: | The cursor to use in the next request to get the next page of results. | eyJjcmVhdGVkX2F0IjoiMjAyMS0wMS0wNlQyMDo0NzowMFoiLCJ2YWx1ZSI6ImFkbWluIn0= | \ No newline at end of file diff --git a/docs/models/components/request.md b/docs/models/components/requestt.md similarity index 99% rename from docs/models/components/request.md rename to docs/models/components/requestt.md index 18cd8cf..dcc56f9 100644 --- a/docs/models/components/request.md +++ b/docs/models/components/requestt.md @@ -1,4 +1,4 @@ -# Request +# RequestT # Request Object ### Description @@ -10,16 +10,16 @@ Returned from the `GET Requests` endpoint. ## Example Usage ```typescript -import { Request } from "opal-mcp/models/components"; +import { RequestT } from "opal-mcp/models/components"; -let value: Request = { +let value: RequestT = { id: "7c86c85d-0651-43e2-a748-d69d658418e8", createdAt: new Date("2021-01-06T20:00:00Z"), updatedAt: new Date("2021-01-06T20:00:00Z"), requesterId: "c86c85d-0651-43e2-a748-d69d658418e8", targetUserId: "r86c85d-0651-43e2-a748-d69d658418e8", targetGroupId: "r86c85d-0651-43e2-a748-d69d658418e8", - status: "CANCELED", + status: "DENIED", reason: "I need this resource.", durationMinutes: 1440, stages: { diff --git a/docs/models/components/resource.md b/docs/models/components/resource.md index bfcdbab..6a70127 100644 --- a/docs/models/components/resource.md +++ b/docs/models/components/resource.md @@ -21,6 +21,12 @@ let value: Resource = { requireManagerApproval: false, requireSupportTicket: false, parentResourceId: "f454d283-ca67-4a8a-bdbb-df212eca5345", + ancestorResourceIds: [ + "f454d283-ca67-4a8a-bdbb-df212eca5345", + ], + descendantResourceIds: [ + "f454d283-ca67-4a8a-bdbb-df212eca5345", + ], }; ``` diff --git a/docs/models/components/resourceremoteinfo.md b/docs/models/components/resourceremoteinfo.md index 1f86efc..049a20a 100644 --- a/docs/models/components/resourceremoteinfo.md +++ b/docs/models/components/resourceremoteinfo.md @@ -8,8 +8,13 @@ Information that defines the remote resource. This replaces the deprecated remot import { ResourceRemoteInfo } from "opal-mcp/models/components"; let value: ResourceRemoteInfo = { + awsOrganizationalUnit: { + parentId: "ou-1234", + organizationalUnitId: "ou-1234", + }, awsAccount: { accountId: "234234234234", + organizationalUnitId: "ou-1234", }, awsPermissionSet: { arn: "arn:aws:sso:::permissionSet/asdf-32139302d201d32/ps-f03323201211e1b9", @@ -34,6 +39,10 @@ let value: ResourceRemoteInfo = { arn: "arn:aws:eks:us-east-2:234234234234:cluster/testcluster", accountId: "234234234234", }, + customConnector: { + remoteResourceId: "01fa7402-01d8-103b-8deb-5f3a0ab7884", + canHaveUsageEvents: false, + }, gcpOrganization: { organizationId: "organizations/898931321", }, @@ -72,6 +81,9 @@ let value: ResourceRemoteInfo = { serviceAccountId: "103561576023829460000", projectId: "example-project-898931321", }, + googleWorkspaceRole: { + roleId: "google-workspace-role:01234567890123456", + }, githubRepo: { repoName: "Opal Security", }, @@ -110,12 +122,14 @@ let value: ResourceRemoteInfo = { | Field | Type | Required | Description | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `awsOrganizationalUnit` | [components.AwsOrganizationalUnit](../../models/components/awsorganizationalunit.md) | :heavy_minus_sign: | Remote info for AWS organizational unit. | | `awsAccount` | [components.AwsAccount](../../models/components/awsaccount.md) | :heavy_minus_sign: | Remote info for AWS account. | | `awsPermissionSet` | [components.AwsPermissionSet](../../models/components/awspermissionset.md) | :heavy_minus_sign: | Remote info for AWS Identity Center permission set. | | `awsIamRole` | [components.AwsIamRole](../../models/components/awsiamrole.md) | :heavy_minus_sign: | Remote info for AWS IAM role. | | `awsEc2Instance` | [components.AwsEc2Instance](../../models/components/awsec2instance.md) | :heavy_minus_sign: | Remote info for AWS EC2 instance. | | `awsRdsInstance` | [components.AwsRdsInstance](../../models/components/awsrdsinstance.md) | :heavy_minus_sign: | Remote info for AWS RDS instance. | | `awsEksCluster` | [components.AwsEksCluster](../../models/components/awsekscluster.md) | :heavy_minus_sign: | Remote info for AWS EKS cluster. | +| `customConnector` | [components.CustomConnector](../../models/components/customconnector.md) | :heavy_minus_sign: | Remote info for a custom connector resource. | | `gcpOrganization` | [components.GcpOrganization](../../models/components/gcporganization.md) | :heavy_minus_sign: | Remote info for GCP organization. | | `gcpBucket` | [components.GcpBucket](../../models/components/gcpbucket.md) | :heavy_minus_sign: | Remote info for GCP bucket. | | `gcpComputeInstance` | [components.GcpComputeInstance](../../models/components/gcpcomputeinstance.md) | :heavy_minus_sign: | Remote info for GCP compute instance. | @@ -126,6 +140,7 @@ let value: ResourceRemoteInfo = { | `gcpProject` | [components.GcpProject](../../models/components/gcpproject.md) | :heavy_minus_sign: | Remote info for GCP project. | | `gcpSqlInstance` | [components.GcpSqlInstance](../../models/components/gcpsqlinstance.md) | :heavy_minus_sign: | Remote info for GCP SQL instance. | | `gcpServiceAccount` | [components.GcpServiceAccount](../../models/components/gcpserviceaccount.md) | :heavy_minus_sign: | Remote info for a GCP service account. | +| `googleWorkspaceRole` | [components.GoogleWorkspaceRole](../../models/components/googleworkspacerole.md) | :heavy_minus_sign: | Remote info for GCP workspace role. | | `githubRepo` | [components.GithubRepo](../../models/components/githubrepo.md) | :heavy_minus_sign: | Remote info for GitHub repository. | | `gitlabProject` | [components.GitlabProject](../../models/components/gitlabproject.md) | :heavy_minus_sign: | Remote info for Gitlab project. | | `oktaApp` | [components.OktaApp](../../models/components/oktaapp.md) | :heavy_minus_sign: | Remote info for Okta directory app. | diff --git a/docs/models/components/rolepermissionnameenum.md b/docs/models/components/rolepermissionnameenum.md new file mode 100644 index 0000000..ae81cc5 --- /dev/null +++ b/docs/models/components/rolepermissionnameenum.md @@ -0,0 +1,17 @@ +# RolePermissionNameEnum + +The name of the role permission. + +## Example Usage + +```typescript +import { RolePermissionNameEnum } from "opal-mcp/models/components"; + +let value: RolePermissionNameEnum = "READ"; +``` + +## Values + +```typescript +"READ" | "READ_ASSIGNMENTS" | "CREATE" | "IMPORT" | "EXPORT" | "SYNC" | "DELETE" | "READ_SETTINGS" | "EDIT_TAGS" | "EDIT_SETTINGS" | "EDIT_SYNC_SETTINGS" | "EDIT_ASSIGNMENTS" | "EDIT_REQUEST_CONFIGURATIONS" | "EDIT_EVENT_STREAM" | "ASSIGN_UAR_REVIEWERS" | "SEND_REMINDERS" | "STOP" | "REQUEST_ON_BEHALF" +``` \ No newline at end of file diff --git a/docs/models/components/rolepermissiontargettypeenum.md b/docs/models/components/rolepermissiontargettypeenum.md new file mode 100644 index 0000000..31151f1 --- /dev/null +++ b/docs/models/components/rolepermissiontargettypeenum.md @@ -0,0 +1,17 @@ +# RolePermissionTargetTypeEnum + +The type of the target for the role permission. + +## Example Usage + +```typescript +import { RolePermissionTargetTypeEnum } from "opal-mcp/models/components"; + +let value: RolePermissionTargetTypeEnum = "RESOURCE"; +``` + +## Values + +```typescript +"RESOURCE" | "CONNECTION" | "GROUP" | "BUNDLE" | "USER" | "ACCESS_REVIEW" +``` \ No newline at end of file diff --git a/docs/models/components/scopedrolepermission.md b/docs/models/components/scopedrolepermission.md new file mode 100644 index 0000000..6df15d0 --- /dev/null +++ b/docs/models/components/scopedrolepermission.md @@ -0,0 +1,26 @@ +# ScopedRolePermission + +## Example Usage + +```typescript +import { ScopedRolePermission } from "opal-mcp/models/components"; + +let value: ScopedRolePermission = { + targetIds: [ + "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", + "8294e9c9-deb6-48e9-9c99-da2a1e04a87f", + ], + targetType: "RESOURCE", + permissionName: "READ", + allowAll: false, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `targetIds` | *string*[] | :heavy_minus_sign: | The IDs of the entities that this permission applies to. If empty of missing, the permission will have untargeted scope. | [
"a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1",
"8294e9c9-deb6-48e9-9c99-da2a1e04a87f"
] | +| `targetType` | [components.RolePermissionTargetTypeEnum](../../models/components/rolepermissiontargettypeenum.md) | :heavy_check_mark: | The type of the target for the role permission. | RESOURCE | +| `permissionName` | [components.RolePermissionNameEnum](../../models/components/rolepermissionnameenum.md) | :heavy_check_mark: | The name of the role permission. | READ | +| `allowAll` | *boolean* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/docs/models/components/scopedrolepermissionlist.md b/docs/models/components/scopedrolepermissionlist.md new file mode 100644 index 0000000..25658ec --- /dev/null +++ b/docs/models/components/scopedrolepermissionlist.md @@ -0,0 +1,27 @@ +# ScopedRolePermissionList + +## Example Usage + +```typescript +import { ScopedRolePermissionList } from "opal-mcp/models/components"; + +let value: ScopedRolePermissionList = { + permissions: [ + { + targetIds: [ + "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", + "8294e9c9-deb6-48e9-9c99-da2a1e04a87f", + ], + targetType: "RESOURCE", + permissionName: "READ", + allowAll: true, + }, + ], +}; +``` + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `permissions` | [components.ScopedRolePermission](../../models/components/scopedrolepermission.md)[] | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/components/workdayusersecuritygroup.md b/docs/models/components/workdayusersecuritygroup.md new file mode 100644 index 0000000..a39dafc --- /dev/null +++ b/docs/models/components/workdayusersecuritygroup.md @@ -0,0 +1,19 @@ +# WorkdayUserSecurityGroup + +Remote info for Workday User Security group. + +## Example Usage + +```typescript +import { WorkdayUserSecurityGroup } from "opal-mcp/models/components"; + +let value: WorkdayUserSecurityGroup = { + groupId: "123abc456def", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `groupId` | *string* | :heavy_check_mark: | The id of the Workday User Security group. | 123abc456def | \ No newline at end of file diff --git a/docs/models/operations/addbundlegrouprequest.md b/docs/models/operations/addbundlegrouprequest.md index 99b89c0..18e614f 100644 --- a/docs/models/operations/addbundlegrouprequest.md +++ b/docs/models/operations/addbundlegrouprequest.md @@ -7,6 +7,11 @@ import { AddBundleGroupRequest } from "opal-mcp/models/operations"; let value: AddBundleGroupRequest = { bundleId: "32acc112-21ff-4669-91c2-21e27683eaa1", + requestBody: { + groupId: "72e75a6f-7183-48c5-94ff-6013f213314b", + accessLevelRemoteId: "arn:aws:iam::590304332660:role/AdministratorAccess", + accessLevelName: "AdministratorAccess", + }, }; ``` diff --git a/docs/models/operations/addgroupcontaininggrouprequest.md b/docs/models/operations/addgroupcontaininggrouprequest.md index 60509a7..d1a91ff 100644 --- a/docs/models/operations/addgroupcontaininggrouprequest.md +++ b/docs/models/operations/addgroupcontaininggrouprequest.md @@ -7,6 +7,9 @@ import { AddGroupContainingGroupRequest } from "opal-mcp/models/operations"; let value: AddGroupContainingGroupRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + groupContainingGroup: { + containingGroupId: "f454d283-ca87-4a8a-bdbb-df212eca5353", + }, }; ``` diff --git a/docs/models/operations/approverequestrequest.md b/docs/models/operations/approverequestrequest.md index 26b02f1..7cfe113 100644 --- a/docs/models/operations/approverequestrequest.md +++ b/docs/models/operations/approverequestrequest.md @@ -7,6 +7,10 @@ import { ApproveRequestRequest } from "opal-mcp/models/operations"; let value: ApproveRequestRequest = { id: "ae5ef234-75fd-4108-95f7-05f65b859c51", + requestBody: { + level: "REGULAR", + comment: "Approved after security review", + }, }; ``` diff --git a/docs/models/operations/approverequestresponse.md b/docs/models/operations/approverequestresponse.md index 637e2cc..162793a 100644 --- a/docs/models/operations/approverequestresponse.md +++ b/docs/models/operations/approverequestresponse.md @@ -53,5 +53,5 @@ let value: ApproveRequestResponse = { | Field | Type | Required | Description | Example | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `request` | [components.Request](../../models/components/request.md) | :heavy_minus_sign: | # Request Object
### Description
The `Request` object is used to represent a request.

### Usage Example
Returned from the `GET Requests` endpoint. | {
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"requester_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"target_user_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"target_group_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"status": "pending",
"reason": "I need this resource.",
"duration_minutes": 1440,
"request_comments": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"request_id": "4c86c85d-0651-43e2-a748-d69d658418e8",
"user_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"comment": "This is a comment."
}
],
"stages": {
"requestedRoleName": "Admin",
"requestedItemName": "AWS Production Account",
"stages": [
{
"stage": 1,
"operator": "AND",
"reviewers": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"status": "PENDING"
}
]
},
{
"stage": 2,
"operator": "OR",
"reviewers": [
{
"id": "8d86c85d-0651-43e2-a748-d69d658418e9",
"status": "APPROVED"
}
]
}
]
}
} | +| `request` | [components.RequestT](../../models/components/requestt.md) | :heavy_minus_sign: | # Request Object
### Description
The `Request` object is used to represent a request.

### Usage Example
Returned from the `GET Requests` endpoint. | {
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"requester_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"target_user_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"target_group_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"status": "pending",
"reason": "I need this resource.",
"duration_minutes": 1440,
"request_comments": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"request_id": "4c86c85d-0651-43e2-a748-d69d658418e8",
"user_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"comment": "This is a comment."
}
],
"stages": {
"requestedRoleName": "Admin",
"requestedItemName": "AWS Production Account",
"stages": [
{
"stage": 1,
"operator": "AND",
"reviewers": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"status": "PENDING"
}
]
},
{
"stage": 2,
"operator": "OR",
"reviewers": [
{
"id": "8d86c85d-0651-43e2-a748-d69d658418e9",
"status": "APPROVED"
}
]
}
]
}
} | | `taskId` | *string* | :heavy_minus_sign: | ID of the task created for propagating access | c6f85bfb-3fe7-4936-a68d-7a5e1e3d0f6a | \ No newline at end of file diff --git a/docs/models/operations/deletegroupuserrequest.md b/docs/models/operations/deletegroupuserrequest.md index 3e98670..ae773f8 100644 --- a/docs/models/operations/deletegroupuserrequest.md +++ b/docs/models/operations/deletegroupuserrequest.md @@ -8,12 +8,14 @@ import { DeleteGroupUserRequest } from "opal-mcp/models/operations"; let value: DeleteGroupUserRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", userId: "f92aa855-cea9-4814-b9d8-f2a60d3e4a06", + accessLevelRemoteId: "30", }; ``` ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | -| `groupId` | *string* | :heavy_check_mark: | The ID of the group. | 4baf8423-db0a-4037-a4cf-f79c60cb67a5 | -| `userId` | *string* | :heavy_check_mark: | The ID of a user to remove from this group. | f92aa855-cea9-4814-b9d8-f2a60d3e4a06 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `groupId` | *string* | :heavy_check_mark: | The ID of the group. | 4baf8423-db0a-4037-a4cf-f79c60cb67a5 | +| `userId` | *string* | :heavy_check_mark: | The ID of a user to remove from this group. | f92aa855-cea9-4814-b9d8-f2a60d3e4a06 | +| `accessLevelRemoteId` | *string* | :heavy_minus_sign: | The remote ID of the access level for which this user has direct access. If omitted, the default access level remote ID value (empty string) is assumed. | 30 | \ No newline at end of file diff --git a/docs/models/operations/eventsresponse.md b/docs/models/operations/eventsresponse.md new file mode 100644 index 0000000..9e58c33 --- /dev/null +++ b/docs/models/operations/eventsresponse.md @@ -0,0 +1,36 @@ +# EventsResponse + +## Example Usage + +```typescript +import { EventsResponse } from "opal-mcp/models/operations"; + +let value: EventsResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + results: [ + { + eventId: "29827fb8-f2dd-4e80-9576-28e31e9934ac", + actorUserId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + actorName: "John Smith", + eventType: "USERS_CREATED", + createdAt: new Date("2022-01-23T04:56:07Z"), + }, + { + eventId: "7646aa9a-e2ee-4eb5-8c62-91f29038a373", + actorUserId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + actorName: "John Smith", + eventType: "USER_TEAM_UPDATED", + createdAt: new Date("2022-02-03T12:33:02Z"), + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedEventList](../../models/components/paginatedeventlist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"results": [
{
"event_id": "29827fb8-f2dd-4e80-9576-28e31e9934ac",
"actor_user_id": "1b978423-db0a-4037-a4cf-f79c60cb67b3",
"created_at": "2022-01-23T04:56:07Z",
"event_type": "USERS_CREATED"
},
{
"event_id": "7646aa9a-e2ee-4eb5-8c62-91f29038a373",
"actor_user_id": "1b978423-db0a-4037-a4cf-f79c60cb67b3",
"created_at": "2022-02-03T12:33:02Z",
"event_type": "USER_TEAM_UPDATED"
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getbundlegroupsresponse.md b/docs/models/operations/getbundlegroupsresponse.md new file mode 100644 index 0000000..9b70187 --- /dev/null +++ b/docs/models/operations/getbundlegroupsresponse.md @@ -0,0 +1,25 @@ +# GetBundleGroupsResponse + +## Example Usage + +```typescript +import { GetBundleGroupsResponse } from "opal-mcp/models/operations"; + +let value: GetBundleGroupsResponse = { + result: { + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + totalCount: 2, + bundleGroups: [ + {}, + {}, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedBundleGroupList](../../models/components/paginatedbundlegrouplist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"total_count": 2,
"bundle_groups": [
{
"id": "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1",
"name": "Group 1"
},
{
"id": "8294e9c9-deb6-48e9-9c99-da2a1e04a87f",
"name": "Group 2"
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getbundleresourcesresponse.md b/docs/models/operations/getbundleresourcesresponse.md new file mode 100644 index 0000000..38fa764 --- /dev/null +++ b/docs/models/operations/getbundleresourcesresponse.md @@ -0,0 +1,27 @@ +# GetBundleResourcesResponse + +## Example Usage + +```typescript +import { GetBundleResourcesResponse } from "opal-mcp/models/operations"; + +let value: GetBundleResourcesResponse = { + result: { + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + totalCount: 3, + bundleResources: [ + { + accessLevelName: "read", + accessLevelRemoteId: "pull", + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedBundleResourceList](../../models/components/paginatedbundleresourcelist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"total_count": 3,
"bundle_resources": [
{
"id": "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1",
"name": "Resource 1",
"access_level_name": "read",
"access_level_remote_id": "pull"
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getbundlesresponse.md b/docs/models/operations/getbundlesresponse.md new file mode 100644 index 0000000..ecd90e3 --- /dev/null +++ b/docs/models/operations/getbundlesresponse.md @@ -0,0 +1,38 @@ +# GetBundlesResponse + +## Example Usage + +```typescript +import { GetBundlesResponse } from "opal-mcp/models/operations"; + +let value: GetBundlesResponse = { + result: { + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + bundles: [ + { + name: "Bundle 1", + description: "Description of bundle 1", + adminOwnerId: "4aed3e8a-727b-4d72-8010-3b8710c50bec", + totalNumItems: 0, + totalNumResources: 0, + totalNumGroups: 0, + }, + { + name: "Bundle 2", + description: "Description of bundle 2", + adminOwnerId: "4aed3e8a-727b-4d72-8010-3b8710c50bec", + totalNumItems: 0, + totalNumResources: 0, + totalNumGroups: 0, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedBundleList](../../models/components/paginatedbundlelist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"totalCount": 2,
"bundles": [
{
"id": "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1",
"name": "Bundle 1",
"description": "Description of bundle 1",
"admin_owner_id": "4aed3e8a-727b-4d72-8010-3b8710c50bec",
"total_num_items": 0,
"total_num_resources": 0,
"total_num_groups": 0
},
{
"id": "8294e9c9-deb6-48e9-9c99-da2a1e04a87f",
"name": "Bundle 2",
"description": "Description of bundle 2",
"admin_owner_id": "4aed3e8a-727b-4d72-8010-3b8710c50bec",
"total_num_items": 0,
"total_num_resources": 0,
"total_num_groups": 0
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getgroupbindingsresponse.md b/docs/models/operations/getgroupbindingsresponse.md new file mode 100644 index 0000000..00411e4 --- /dev/null +++ b/docs/models/operations/getgroupbindingsresponse.md @@ -0,0 +1,54 @@ +# GetGroupBindingsResponse + +## Example Usage + +```typescript +import { GetGroupBindingsResponse } from "opal-mcp/models/operations"; + +let value: GetGroupBindingsResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWtJ", + results: [ + { + groupBindingId: "f454d283-ca87-4a8a-bdbb-df212eca5353", + createdById: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + createdAt: new Date("2022-01-23T04:56:07Z"), + sourceGroupId: "f454d283-ca87-4a8a-bdbb-df212eca5353", + groups: [ + { + groupId: "f454d283-ca87-4a8a-bdbb-df212eca5353", + groupType: "OKTA_GROUP", + }, + { + groupId: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + groupType: "AWS_SSO_GROUP", + }, + ], + }, + { + groupBindingId: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + createdById: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + createdAt: new Date("2022-01-23T04:56:07Z"), + sourceGroupId: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + groups: [ + { + groupId: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + groupType: "AWS_SSO_GROUP", + }, + { + groupId: "f454d283-ca87-4a8a-bdbb-df212eca5353", + groupType: "OKTA_GROUP", + }, + ], + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedGroupBindingsList](../../models/components/paginatedgroupbindingslist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWtJ",
"results": [
{
"group_binding_id": "f454d283-ca87-4a8a-bdbb-df212eca5353",
"created_by_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"created_at": "2022-01-23T04:56:07Z",
"source_group_id": "f454d283-ca87-4a8a-bdbb-df212eca5353",
"groups": [
{
"group_id": "f454d283-ca87-4a8a-bdbb-df212eca5353",
"group_type": "OKTA_GROUP"
},
{
"group_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"group_type": "AWS_SSO_GROUP"
}
]
},
{
"group_binding_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"created_by_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"source_group_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"created_at": "2022-01-23T04:56:07Z",
"groups": [
{
"group_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"group_type": "AWS_SSO_GROUP"
},
{
"group_id": "f454d283-ca87-4a8a-bdbb-df212eca5353",
"group_type": "OKTA_GROUP"
}
]
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getgroupsresponse.md b/docs/models/operations/getgroupsresponse.md new file mode 100644 index 0000000..a2194fb --- /dev/null +++ b/docs/models/operations/getgroupsresponse.md @@ -0,0 +1,41 @@ +# GetGroupsResponse + +## Example Usage + +```typescript +import { GetGroupsResponse } from "opal-mcp/models/operations"; + +let value: GetGroupsResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + results: [ + { + groupId: "f454d283-ca87-4a8a-bdbb-df212eca5353", + appId: "b5a5ca27-0ea3-4d86-9199-2126d57d1fbd", + description: + "This group represents Active Directory group \"Payments Production Admin\". We use this AD group to facilitate staging deployments and qualifying new releases.", + adminOwnerId: "7c86c85d-0651-43e2-a748-d69d658418e8", + maxDuration: 120, + requireManagerApproval: false, + requireSupportTicket: false, + }, + { + groupId: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + description: + "Manages the Integrations Team on-call privileged resources. This group is automatically synced with the on-call rotation defined in PagerDuty.", + adminOwnerId: "4220bc12-ab8a-4b5d-be7b-f6bbcf9159f3", + maxDuration: 360, + requireManagerApproval: false, + requireSupportTicket: true, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedGroupsList](../../models/components/paginatedgroupslist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"results": [
{
"group_id": "f454d283-ca87-4a8a-bdbb-df212eca5353",
"app_id": "b5a5ca27-0ea3-4d86-9199-2126d57d1fbd",
"description": "This group represents Active Directory group \"Payments Production Admin\". We use this AD group to facilitate staging deployments and qualifying new releases.",
"admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"max_duration": 120,
"require_manager_approval": false,
"require_support_ticket": false
},
{
"group_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"description": "Manages the Integrations Team on-call privileged resources. This group is automatically synced with the on-call rotation defined in PagerDuty.",
"admin_owner_id": "4220bc12-ab8a-4b5d-be7b-f6bbcf9159f3",
"max_duration": 360,
"require_manager_approval": false,
"require_support_ticket": true
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getnhisresponse.md b/docs/models/operations/getnhisresponse.md new file mode 100644 index 0000000..78916d6 --- /dev/null +++ b/docs/models/operations/getnhisresponse.md @@ -0,0 +1,39 @@ +# GetNhisResponse + +## Example Usage + +```typescript +import { GetNhisResponse } from "opal-mcp/models/operations"; + +let value: GetNhisResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + results: [ + { + resourceId: "f454d283-ca67-4a8a-bdbb-df212eca5353", + description: "This resource represents AWS IAM role \"SupportUser\".", + adminOwnerId: "7c86c85d-0651-43e2-a748-d69d658418e8", + maxDuration: 120, + requireManagerApproval: false, + requireSupportTicket: false, + parentResourceId: "f454d283-ca67-4a8a-bdbb-df212eca5345", + }, + { + resourceId: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + description: "This resource represents GCP project \"app-demo\".", + adminOwnerId: "7c86c85d-0651-43e2-a748-d69d658418e8", + maxDuration: 360, + requireManagerApproval: false, + requireSupportTicket: true, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedResourcesList](../../models/components/paginatedresourceslist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"results": [
{
"resource_id": "f454d283-ca67-4a8a-bdbb-df212eca5353",
"description": "This resource represents AWS IAM role \"SupportUser\".",
"admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"remote_id": "arn:aws:iam::490306337630:role/SupportUser",
"remote_name": "SupportUser",
"max_duration": 120,
"require_manager_approval": false,
"require_support_ticket": false,
"parent_resource_id": "f454d283-ca67-4a8a-bdbb-df212eca5345"
},
{
"resource_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"description": "This resource represents GCP project \"app-demo\".",
"remote_id": "app-demo-307223",
"remote_name": "app-demo",
"admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"max_duration": 360,
"require_manager_approval": false,
"require_support_ticket": true
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getownersresponse.md b/docs/models/operations/getownersresponse.md new file mode 100644 index 0000000..08aded5 --- /dev/null +++ b/docs/models/operations/getownersresponse.md @@ -0,0 +1,34 @@ +# GetOwnersResponse + +## Example Usage + +```typescript +import { GetOwnersResponse } from "opal-mcp/models/operations"; + +let value: GetOwnersResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + results: [ + { + ownerId: "f454d283-ca87-4a8a-bdbb-df212eca5353", + name: "API Owner", + description: "This owner represents the API team owners.", + accessRequestEscalationPeriod: 120, + }, + { + ownerId: "e8581682-04f7-473a-a419-472f0fb26d46", + name: "Finance Owner", + description: "This owner represents the Finance team owners.", + accessRequestEscalationPeriod: 120, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedOwnersList](../../models/components/paginatedownerslist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"results": [
{
"owner_id": "f454d283-ca87-4a8a-bdbb-df212eca5353",
"name": "API Owner",
"description": "This owner represents the API team owners.",
"access_request_escalation_period": 120
},
{
"owner_id": "e8581682-04f7-473a-a419-472f0fb26d46",
"name": "Finance Owner",
"description": "This owner represents the Finance team owners.",
"access_request_escalation_period": 120
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getrequestrequest.md b/docs/models/operations/getrequestrequest.md new file mode 100644 index 0000000..7ff1aa0 --- /dev/null +++ b/docs/models/operations/getrequestrequest.md @@ -0,0 +1,17 @@ +# GetRequestRequest + +## Example Usage + +```typescript +import { GetRequestRequest } from "opal-mcp/models/operations"; + +let value: GetRequestRequest = { + id: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `id` | *string* | :heavy_check_mark: | The ID of the request. | 4baf8423-db0a-4037-a4cf-f79c60cb67a5 | \ No newline at end of file diff --git a/docs/models/operations/getrequestsresponse.md b/docs/models/operations/getrequestsresponse.md new file mode 100644 index 0000000..1ba01d6 --- /dev/null +++ b/docs/models/operations/getrequestsresponse.md @@ -0,0 +1,33 @@ +# GetRequestsResponse + +## Example Usage + +```typescript +import { GetRequestsResponse } from "opal-mcp/models/operations"; + +let value: GetRequestsResponse = { + result: { + requests: [ + { + id: "7c86c85d-0651-43e2-a748-d69d658418e8", + createdAt: new Date("2021-01-06T20:00:00Z"), + updatedAt: new Date("2021-01-06T20:00:00Z"), + requesterId: "c86c85d-0651-43e2-a748-d69d658418e8", + targetUserId: "r86c85d-0651-43e2-a748-d69d658418e8", + targetGroupId: "g86c85d-0651-43e2-a748-d69d658418e8", + status: "PENDING", + reason: "I need this resource.", + durationMinutes: 1440, + }, + ], + cursor: + "eyJjcmVhdGVkX2F0IjoiMjAyMS0wMS0wNlQyMDo0NzowMFoiLCJ2YWx1ZSI6ImFkbWluIn0=", + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.RequestList](../../models/components/requestlist.md) | :heavy_check_mark: | N/A | {
"requests": [
{
"id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"organization_id": "w86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"requester_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"target_user_id": "r86c85d-0651-43e2-a748-d69d658418e8",
"target_group_id": "g86c85d-0651-43e2-a748-d69d658418e8",
"status": "pending",
"reason": "I need this resource.",
"duration_minutes": 1440,
"request_comments": [
{
"id": "4c86c85d-0651-43e2-a748-d69d658418e8",
"created_at": "2021-01-06T20:00:00Z",
"updated_at": "2021-01-06T20:00:00Z",
"request_id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"user_id": "c86c85d-0651-43e2-a748-d69d658418e8",
"comment": "This is a comment."
}
]
}
],
"cursor": "eyJjcmVhdGVkX2F0IjoiMjAyMS0wMS0wNlQyMDo0NzowMFoiLCJ2YWx1ZSI6ImFkbWluIn0="
} | \ No newline at end of file diff --git a/docs/models/operations/getresourcescopedrolepermissionsrequest.md b/docs/models/operations/getresourcescopedrolepermissionsrequest.md new file mode 100644 index 0000000..9c06173 --- /dev/null +++ b/docs/models/operations/getresourcescopedrolepermissionsrequest.md @@ -0,0 +1,17 @@ +# GetResourceScopedRolePermissionsRequest + +## Example Usage + +```typescript +import { GetResourceScopedRolePermissionsRequest } from "opal-mcp/models/operations"; + +let value: GetResourceScopedRolePermissionsRequest = { + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- | +| `resourceId` | *string* | :heavy_check_mark: | The ID of the resource whose scoped role permissions belong to. | 1b978423-db0a-4037-a4cf-f79c60cb67b3 | \ No newline at end of file diff --git a/docs/models/operations/getresourcesresponse.md b/docs/models/operations/getresourcesresponse.md new file mode 100644 index 0000000..8208f36 --- /dev/null +++ b/docs/models/operations/getresourcesresponse.md @@ -0,0 +1,39 @@ +# GetResourcesResponse + +## Example Usage + +```typescript +import { GetResourcesResponse } from "opal-mcp/models/operations"; + +let value: GetResourcesResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + results: [ + { + resourceId: "f454d283-ca67-4a8a-bdbb-df212eca5353", + description: "This resource represents AWS IAM role \"SupportUser\".", + adminOwnerId: "7c86c85d-0651-43e2-a748-d69d658418e8", + maxDuration: 120, + requireManagerApproval: false, + requireSupportTicket: false, + parentResourceId: "f454d283-ca67-4a8a-bdbb-df212eca5345", + }, + { + resourceId: "99d0b81d-14be-4cf6-bd27-348b4af1d11b", + description: "This resource represents GCP project \"app-demo\".", + adminOwnerId: "7c86c85d-0651-43e2-a748-d69d658418e8", + maxDuration: 360, + requireManagerApproval: false, + requireSupportTicket: true, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedResourcesList](../../models/components/paginatedresourceslist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"results": [
{
"resource_id": "f454d283-ca67-4a8a-bdbb-df212eca5353",
"description": "This resource represents AWS IAM role \"SupportUser\".",
"admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"remote_id": "arn:aws:iam::490306337630:role/SupportUser",
"remote_name": "SupportUser",
"max_duration": 120,
"require_manager_approval": false,
"require_support_ticket": false,
"parent_resource_id": "f454d283-ca67-4a8a-bdbb-df212eca5345"
},
{
"resource_id": "99d0b81d-14be-4cf6-bd27-348b4af1d11b",
"description": "This resource represents GCP project \"app-demo\".",
"remote_id": "app-demo-307223",
"remote_name": "app-demo",
"admin_owner_id": "7c86c85d-0651-43e2-a748-d69d658418e8",
"max_duration": 360,
"require_manager_approval": false,
"require_support_ticket": true
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/gettagsresponse.md b/docs/models/operations/gettagsresponse.md new file mode 100644 index 0000000..a4b55ae --- /dev/null +++ b/docs/models/operations/gettagsresponse.md @@ -0,0 +1,38 @@ +# GetTagsResponse + +## Example Usage + +```typescript +import { GetTagsResponse } from "opal-mcp/models/operations"; + +let value: GetTagsResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + results: [ + { + tagId: "f290a738-5f9f-43c2-ad67-fa31ff0eb946", + createdAt: new Date("2022-01-23T04:56:07Z"), + updatedAt: new Date("2022-02-23T01:34:07Z"), + userCreatorId: "d4a7d928-783e-4599-8ec6-088d635a5bcc", + key: "database-name", + value: "redis_db", + }, + { + tagId: "92f0a738-5f9f-43c2-ad67-fa31ff0eb052", + createdAt: new Date("2022-03-23T04:56:07Z"), + updatedAt: new Date("2022-04-23T01:34:07Z"), + userCreatorId: "a4d7d928-783e-4599-8ec6-088d635af4ac", + key: "database-type", + value: "sql", + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedTagsList](../../models/components/paginatedtagslist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"results": [
{
"tag_id": "f290a738-5f9f-43c2-ad67-fa31ff0eb946",
"created_at": "2022-01-23T04:56:07Z",
"updated_at": "2022-02-23T01:34:07Z",
"user_creator_id": "d4a7d928-783e-4599-8ec6-088d635a5bcc",
"admin_owner_id": "bfb518b1-3f5b-4e3b-8eb8-3b3fabd4ea2b",
"key": "database-name",
"value": "redis_db"
},
{
"tag_id": "92f0a738-5f9f-43c2-ad67-fa31ff0eb052",
"created_at": "2022-03-23T04:56:07Z",
"updated_at": "2022-04-23T01:34:07Z",
"user_creator_id": "a4d7d928-783e-4599-8ec6-088d635af4ac",
"admin_owner_id": "gtg418b1-3f5b-4e3b-8eb8-3b3fabd4eaa1",
"key": "database-type",
"value": "sql"
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getuarsresponse.md b/docs/models/operations/getuarsresponse.md new file mode 100644 index 0000000..888f6a7 --- /dev/null +++ b/docs/models/operations/getuarsresponse.md @@ -0,0 +1,72 @@ +# GetUARsResponse + +## Example Usage + +```typescript +import { GetUARsResponse } from "opal-mcp/models/operations"; + +let value: GetUARsResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + results: [ + { + uarId: "f454d283-ca87-4a8a-bdbb-df212eca5353", + name: "Monthly UAR (July)", + reviewerAssignmentPolicy: "MANUALLY", + sendReviewerAssignmentNotification: false, + deadline: new Date("2022-07-14T06:59:59Z"), + timeZone: "America/Los_Angeles", + selfReviewAllowed: false, + uarScope: { + admins: [ + "f454d283-ca87-4a8a-bdbb-df212eca5353", + "8763d283-ca87-4a8a-bdbb-df212ecab139", + ], + tags: [ + { + key: "uar_scope", + value: "high_priority", + }, + ], + names: [ + "demo", + "api", + ], + }, + }, + { + uarId: "39a4d283-ca87-4a8a-bdbb-df212eca5fdb", + name: "Monthly UAR (August)", + reviewerAssignmentPolicy: "MANUALLY", + sendReviewerAssignmentNotification: true, + deadline: new Date("2022-08-14T06:59:59Z"), + timeZone: "America/Los_Angeles", + selfReviewAllowed: false, + uarScope: { + admins: [ + "f454d283-ca87-4a8a-bdbb-df212eca5353", + "8763d283-ca87-4a8a-bdbb-df212ecab139", + ], + tags: [ + { + key: "uar_scope", + value: "high_priority", + }, + ], + names: [ + "demo", + "api", + ], + }, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `result` | [components.PaginatedUARsList](../../models/components/paginateduarslist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"results": [
{
"uar_id": "f454d283-ca87-4a8a-bdbb-df212eca5353",
"name": "Monthly UAR (July)",
"send_reviewer_assignment_notification": false,
"deadline": "2022-07-14T06:59:59Z",
"time_zone": "America/Los_Angeles",
"self_review_allowed": false,
"uar_scope": {
"tags": [
{
"key": "uar_scope",
"value": "high_priority"
}
],
"names": [
"demo",
"api"
],
"admins": [
"f454d283-ca87-4a8a-bdbb-df212eca5353",
"8763d283-ca87-4a8a-bdbb-df212ecab139"
]
}
},
{
"uar_id": "39a4d283-ca87-4a8a-bdbb-df212eca5fdb",
"name": "Monthly UAR (August)",
"send_reviewer_assignment_notification": true,
"deadline": "2022-08-14T06:59:59Z",
"time_zone": "America/Los_Angeles",
"self_review_allowed": false,
"uar_scope": {
"tags": [
{
"key": "uar_scope",
"value": "high_priority"
}
],
"names": [
"demo",
"api"
],
"admins": [
"f454d283-ca87-4a8a-bdbb-df212eca5353",
"8763d283-ca87-4a8a-bdbb-df212ecab139"
]
}
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/getusersresponse.md b/docs/models/operations/getusersresponse.md new file mode 100644 index 0000000..efaecd5 --- /dev/null +++ b/docs/models/operations/getusersresponse.md @@ -0,0 +1,38 @@ +# GetUsersResponse + +## Example Usage + +```typescript +import { GetUsersResponse } from "opal-mcp/models/operations"; + +let value: GetUsersResponse = { + result: { + next: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", + previous: "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ", + results: [ + { + userId: "29827fb8-f2dd-4e80-9576-28e31e9934ac", + email: "john.doe@company.dev", + fullName: "John Doe", + firstName: "John", + lastName: "Doe", + position: "Senior Engineer", + }, + { + userId: "e8581682-04f7-473a-a419-472f0fb26d46", + email: "jane.smith@company.dev", + fullName: "Jane Smith", + firstName: "John", + lastName: "Doe", + position: "Product Marketing Lead", + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `result` | [components.PaginatedUsersList](../../models/components/paginateduserslist.md) | :heavy_check_mark: | N/A | {
"next": "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw",
"previous": "cj1sZXdwd2VycWVtY29zZnNkc2NzUWxNMEUxTXk0ME16UXpNallsTWtJ",
"results": [
{
"user_id": "29827fb8-f2dd-4e80-9576-28e31e9934ac",
"email": "john.doe@company.dev",
"full_name": "John Doe",
"position": "Senior Engineer"
},
{
"user_id": "e8581682-04f7-473a-a419-472f0fb26d46",
"email": "jane.smith@company.dev",
"full_name": "Jane Smith",
"position": "Product Marketing Lead"
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/setbundlevisibilityrequest.md b/docs/models/operations/setbundlevisibilityrequest.md index 69d9181..35d40df 100644 --- a/docs/models/operations/setbundlevisibilityrequest.md +++ b/docs/models/operations/setbundlevisibilityrequest.md @@ -7,6 +7,13 @@ import { SetBundleVisibilityRequest } from "opal-mcp/models/operations"; let value: SetBundleVisibilityRequest = { bundleId: "32acc112-21ff-4669-91c2-21e27683eaa1", + visibilityInfo: { + visibility: "LIMITED", + visibilityGroupIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, }; ``` diff --git a/docs/models/operations/setgroupmessagechannelsrequest.md b/docs/models/operations/setgroupmessagechannelsrequest.md index 97a5856..f39b775 100644 --- a/docs/models/operations/setgroupmessagechannelsrequest.md +++ b/docs/models/operations/setgroupmessagechannelsrequest.md @@ -7,6 +7,12 @@ import { SetGroupMessageChannelsRequest } from "opal-mcp/models/operations"; let value: SetGroupMessageChannelsRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + messageChannelIDList: { + messageChannelIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, }; ``` diff --git a/docs/models/operations/setgrouponcallschedulesrequest.md b/docs/models/operations/setgrouponcallschedulesrequest.md index 8812f3d..5101c06 100644 --- a/docs/models/operations/setgrouponcallschedulesrequest.md +++ b/docs/models/operations/setgrouponcallschedulesrequest.md @@ -7,6 +7,12 @@ import { SetGroupOnCallSchedulesRequest } from "opal-mcp/models/operations"; let value: SetGroupOnCallSchedulesRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + onCallScheduleIDList: { + onCallScheduleIds: [ + "9546209c-42c2-4801-96d7-9ec42df0f59c", + "bb0197c0-5ea5-45d9-b3b7-b6c439be6435", + ], + }, }; ``` diff --git a/docs/models/operations/setgroupresourcesrequest.md b/docs/models/operations/setgroupresourcesrequest.md index 23f3112..d562398 100644 --- a/docs/models/operations/setgroupresourcesrequest.md +++ b/docs/models/operations/setgroupresourcesrequest.md @@ -7,6 +7,14 @@ import { SetGroupResourcesRequest } from "opal-mcp/models/operations"; let value: SetGroupResourcesRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + updateGroupResourcesInfo: { + resources: [ + { + resourceId: "b5a5ca27-0ea3-4d86-9199-2126d57d1fbd", + accessLevelRemoteId: "write", + }, + ], + }, }; ``` diff --git a/docs/models/operations/setgroupreviewersrequest.md b/docs/models/operations/setgroupreviewersrequest.md index f0e67b4..e3238ba 100644 --- a/docs/models/operations/setgroupreviewersrequest.md +++ b/docs/models/operations/setgroupreviewersrequest.md @@ -7,6 +7,12 @@ import { SetGroupReviewersRequest } from "opal-mcp/models/operations"; let value: SetGroupReviewersRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + reviewerIDList: { + reviewerIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, }; ``` diff --git a/docs/models/operations/setgroupreviewerstagesrequest.md b/docs/models/operations/setgroupreviewerstagesrequest.md index 6e80404..9a0cec8 100644 --- a/docs/models/operations/setgroupreviewerstagesrequest.md +++ b/docs/models/operations/setgroupreviewerstagesrequest.md @@ -7,6 +7,18 @@ import { SetGroupReviewerStagesRequest } from "opal-mcp/models/operations"; let value: SetGroupReviewerStagesRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + reviewerStageList: { + stages: [ + { + requireManagerApproval: false, + operator: "AND", + ownerIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, + ], + }, }; ``` diff --git a/docs/models/operations/setgroupvisibilityrequest.md b/docs/models/operations/setgroupvisibilityrequest.md index 19b473e..191f86c 100644 --- a/docs/models/operations/setgroupvisibilityrequest.md +++ b/docs/models/operations/setgroupvisibilityrequest.md @@ -7,6 +7,13 @@ import { SetGroupVisibilityRequest } from "opal-mcp/models/operations"; let value: SetGroupVisibilityRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + visibilityInfo: { + visibility: "LIMITED", + visibilityGroupIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, }; ``` diff --git a/docs/models/operations/setownerusersrequest.md b/docs/models/operations/setownerusersrequest.md index 79de668..e9dd97b 100644 --- a/docs/models/operations/setownerusersrequest.md +++ b/docs/models/operations/setownerusersrequest.md @@ -7,6 +7,12 @@ import { SetOwnerUsersRequest } from "opal-mcp/models/operations"; let value: SetOwnerUsersRequest = { ownerId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + userIDList: { + userIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, }; ``` diff --git a/docs/models/operations/setresourcemessagechannelsrequest.md b/docs/models/operations/setresourcemessagechannelsrequest.md index 58aa7ca..25a4bbb 100644 --- a/docs/models/operations/setresourcemessagechannelsrequest.md +++ b/docs/models/operations/setresourcemessagechannelsrequest.md @@ -7,6 +7,12 @@ import { SetResourceMessageChannelsRequest } from "opal-mcp/models/operations"; let value: SetResourceMessageChannelsRequest = { resourceId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + messageChannelIDList: { + messageChannelIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, }; ``` diff --git a/docs/models/operations/setresourcereviewersrequest.md b/docs/models/operations/setresourcereviewersrequest.md index ee48487..723599e 100644 --- a/docs/models/operations/setresourcereviewersrequest.md +++ b/docs/models/operations/setresourcereviewersrequest.md @@ -7,6 +7,12 @@ import { SetResourceReviewersRequest } from "opal-mcp/models/operations"; let value: SetResourceReviewersRequest = { resourceId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + reviewerIDList: { + reviewerIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, }; ``` diff --git a/docs/models/operations/setresourcereviewerstagesrequest.md b/docs/models/operations/setresourcereviewerstagesrequest.md index fade558..2e43f8d 100644 --- a/docs/models/operations/setresourcereviewerstagesrequest.md +++ b/docs/models/operations/setresourcereviewerstagesrequest.md @@ -7,6 +7,18 @@ import { SetResourceReviewerStagesRequest } from "opal-mcp/models/operations"; let value: SetResourceReviewerStagesRequest = { resourceId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + reviewerStageList: { + stages: [ + { + requireManagerApproval: false, + operator: "AND", + ownerIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, + ], + }, }; ``` diff --git a/docs/models/operations/setresourcescopedrolepermissionsrequest.md b/docs/models/operations/setresourcescopedrolepermissionsrequest.md new file mode 100644 index 0000000..3ad6363 --- /dev/null +++ b/docs/models/operations/setresourcescopedrolepermissionsrequest.md @@ -0,0 +1,31 @@ +# SetResourceScopedRolePermissionsRequest + +## Example Usage + +```typescript +import { SetResourceScopedRolePermissionsRequest } from "opal-mcp/models/operations"; + +let value: SetResourceScopedRolePermissionsRequest = { + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + scopedRolePermissionList: { + permissions: [ + { + targetIds: [ + "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", + "8294e9c9-deb6-48e9-9c99-da2a1e04a87f", + ], + targetType: "RESOURCE", + permissionName: "READ", + allowAll: false, + }, + ], + }, +}; +``` + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `resourceId` | *string* | :heavy_check_mark: | The ID of the resource whose scoped role permissions belong to. Must be of OPAL_SCOPED_ROLE resource type. | 1b978423-db0a-4037-a4cf-f79c60cb67b3 | +| `scopedRolePermissionList` | [components.ScopedRolePermissionList](../../models/components/scopedrolepermissionlist.md) | :heavy_check_mark: | N/A | {
"permissions": [
{
"target_ids": [
"a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1",
"8294e9c9-deb6-48e9-9c99-da2a1e04a87f"
],
"target_type": "RESOURCE",
"permission_name": "READ"
}
]
} | \ No newline at end of file diff --git a/docs/models/operations/setresourcevisibilityrequest.md b/docs/models/operations/setresourcevisibilityrequest.md index ce50a65..6b1c24f 100644 --- a/docs/models/operations/setresourcevisibilityrequest.md +++ b/docs/models/operations/setresourcevisibilityrequest.md @@ -7,6 +7,13 @@ import { SetResourceVisibilityRequest } from "opal-mcp/models/operations"; let value: SetResourceVisibilityRequest = { resourceId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + visibilityInfo: { + visibility: "LIMITED", + visibilityGroupIds: [ + "7870617d-e72a-47f5-a84c-693817ab4567", + "1520617d-e72a-47f5-a84c-693817ab48ad2", + ], + }, }; ``` diff --git a/docs/models/operations/updateaccessrulerequest.md b/docs/models/operations/updateaccessrulerequest.md index 6d07ff1..711d098 100644 --- a/docs/models/operations/updateaccessrulerequest.md +++ b/docs/models/operations/updateaccessrulerequest.md @@ -7,6 +7,18 @@ import { UpdateAccessRuleRequest } from "opal-mcp/models/operations"; let value: UpdateAccessRuleRequest = { accessRuleId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + updateAccessRuleInfo: { + name: "Platform Engineering", + description: + "This access rule represents all platform engineers in the company.", + adminOwnerId: "7c86c85d-0651-43e2-a748-d69d658418e8", + status: "ACTIVE", + ruleClauses: { + when: { + clauses: [], + }, + }, + }, }; ``` diff --git a/docs/models/operations/updatebundlerequest.md b/docs/models/operations/updatebundlerequest.md index a693280..60c7131 100644 --- a/docs/models/operations/updatebundlerequest.md +++ b/docs/models/operations/updatebundlerequest.md @@ -7,6 +7,11 @@ import { UpdateBundleRequest } from "opal-mcp/models/operations"; let value: UpdateBundleRequest = { bundleId: "32acc112-21ff-4669-91c2-21e27683eaa1", + bundle: { + name: "Bundle 1", + description: "Description of bundle 1", + adminOwnerId: "4aed3e8a-727b-4d72-8010-3b8710c50bec", + }, }; ``` diff --git a/docs/models/operations/updategroupuserrequest.md b/docs/models/operations/updategroupuserrequest.md index 5047e9e..0dd34df 100644 --- a/docs/models/operations/updategroupuserrequest.md +++ b/docs/models/operations/updategroupuserrequest.md @@ -8,6 +8,10 @@ import { UpdateGroupUserRequest } from "opal-mcp/models/operations"; let value: UpdateGroupUserRequest = { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", userId: "f92aa855-cea9-4814-b9d8-f2a60d3e4a06", + requestBody: { + durationMinutes: 60, + accessLevelRemoteId: "arn:aws:iam::590304332660:role/AdministratorAccess", + }, }; ``` diff --git a/docs/models/operations/updateidpgroupmappingsrequest.md b/docs/models/operations/updateidpgroupmappingsrequest.md index 1ad523e..22708f3 100644 --- a/docs/models/operations/updateidpgroupmappingsrequest.md +++ b/docs/models/operations/updateidpgroupmappingsrequest.md @@ -7,6 +7,11 @@ import { UpdateIdpGroupMappingsRequest } from "opal-mcp/models/operations"; let value: UpdateIdpGroupMappingsRequest = { appResourceId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + requestBody: { + mappings: [ + {}, + ], + }, }; ``` diff --git a/docs/models/operations/updateresourceuserrequest.md b/docs/models/operations/updateresourceuserrequest.md index 2ed3a13..dfe46e1 100644 --- a/docs/models/operations/updateresourceuserrequest.md +++ b/docs/models/operations/updateresourceuserrequest.md @@ -8,6 +8,10 @@ import { UpdateResourceUserRequest } from "opal-mcp/models/operations"; let value: UpdateResourceUserRequest = { resourceId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", userId: "f92aa855-cea9-4814-b9d8-f2a60d3e4a06", + requestBody: { + durationMinutes: 60, + accessLevelRemoteId: "arn:aws:iam::590304332660:role/AdministratorAccess", + }, }; ``` diff --git a/docs/sdks/accessrules/README.md b/docs/sdks/accessrules/README.md index 14c9585..d874bbc 100644 --- a/docs/sdks/accessrules/README.md +++ b/docs/sdks/accessrules/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to access rules + ### Available Operations * [createAccessRule](#createaccessrule) - Creates a new access rule config for the given group_id. diff --git a/docs/sdks/apps/README.md b/docs/sdks/apps/README.md index 5f2dc49..6f86079 100644 --- a/docs/sdks/apps/README.md +++ b/docs/sdks/apps/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to apps + ### Available Operations * [getApps](#getapps) - Returns a list of `App` objects. diff --git a/docs/sdks/bundles/README.md b/docs/sdks/bundles/README.md index e7d821d..2851f8c 100644 --- a/docs/sdks/bundles/README.md +++ b/docs/sdks/bundles/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to bundles + ### Available Operations * [getBundles](#getbundles) - Returns a list of `Bundle` objects. @@ -39,7 +41,9 @@ async function run() { contains: "Engineering", }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -67,7 +71,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("bundlesGetBundles failed:", res.error); } @@ -87,7 +93,7 @@ run(); ### Response -**Promise\<[components.PaginatedBundleList](../../models/components/paginatedbundlelist.md)\>** +**Promise\<[operations.GetBundlesResponse](../../models/operations/getbundlesresponse.md)\>** ### Errors @@ -417,7 +423,9 @@ async function run() { cursor: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -445,7 +453,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("bundlesGetBundleResources failed:", res.error); } @@ -465,7 +475,7 @@ run(); ### Response -**Promise\<[components.PaginatedBundleResourceList](../../models/components/paginatedbundleresourcelist.md)\>** +**Promise\<[operations.GetBundleResourcesResponse](../../models/operations/getbundleresourcesresponse.md)\>** ### Errors @@ -651,7 +661,9 @@ async function run() { cursor: "cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw", }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -679,7 +691,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("bundlesGetBundleGroups failed:", res.error); } @@ -699,7 +713,7 @@ run(); ### Response -**Promise\<[components.PaginatedBundleGroupList](../../models/components/paginatedbundlegrouplist.md)\>** +**Promise\<[operations.GetBundleGroupsResponse](../../models/operations/getbundlegroupsresponse.md)\>** ### Errors diff --git a/docs/sdks/configurationtemplates/README.md b/docs/sdks/configurationtemplates/README.md index 500fb54..f5473bd 100644 --- a/docs/sdks/configurationtemplates/README.md +++ b/docs/sdks/configurationtemplates/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to configuration templates + ### Available Operations * [getConfigurationTemplates](#getconfigurationtemplates) - Returns a list of `ConfigurationTemplate` objects. diff --git a/docs/sdks/events/README.md b/docs/sdks/events/README.md index 9a91998..6864a54 100644 --- a/docs/sdks/events/README.md +++ b/docs/sdks/events/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to events + ### Available Operations * [events](#events) - Returns a list of `Event` objects. @@ -32,7 +34,9 @@ async function run() { pageSize: 200, }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -65,7 +69,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("eventsEvents failed:", res.error); } @@ -85,7 +91,7 @@ run(); ### Response -**Promise\<[components.PaginatedEventList](../../models/components/paginatedeventlist.md)\>** +**Promise\<[operations.EventsResponse](../../models/operations/eventsresponse.md)\>** ### Errors diff --git a/docs/sdks/groupbindings/README.md b/docs/sdks/groupbindings/README.md index 0e575f1..6aaa095 100644 --- a/docs/sdks/groupbindings/README.md +++ b/docs/sdks/groupbindings/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to group bindings + ### Available Operations * [getGroupBindings](#getgroupbindings) - Returns a list of `GroupBinding` objects. @@ -30,7 +32,9 @@ async function run() { pageSize: 200, }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -57,7 +61,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("groupBindingsGetGroupBindings failed:", res.error); } @@ -77,7 +83,7 @@ run(); ### Response -**Promise\<[components.PaginatedGroupBindingsList](../../models/components/paginatedgroupbindingslist.md)\>** +**Promise\<[operations.GetGroupBindingsResponse](../../models/operations/getgroupbindingsresponse.md)\>** ### Errors diff --git a/docs/sdks/groups/README.md b/docs/sdks/groups/README.md index 9bb5e82..ff8f4e0 100644 --- a/docs/sdks/groups/README.md +++ b/docs/sdks/groups/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to groups + ### Available Operations * [getGroups](#getgroups) - Returns a list of groups for your organization. @@ -58,7 +60,9 @@ async function run() { groupName: "example-name", }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -91,7 +95,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("groupsGetGroups failed:", res.error); } @@ -111,7 +117,7 @@ run(); ### Response -**Promise\<[components.PaginatedGroupsList](../../models/components/paginatedgroupslist.md)\>** +**Promise\<[operations.GetGroupsResponse](../../models/operations/getgroupsresponse.md)\>** ### Errors @@ -2128,6 +2134,7 @@ async function run() { await opalMcp.groups.deleteGroupUser({ groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", userId: "f92aa855-cea9-4814-b9d8-f2a60d3e4a06", + accessLevelRemoteId: "30", }); @@ -2154,6 +2161,7 @@ async function run() { const res = await groupsDeleteGroupUser(opalMcp, { groupId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", userId: "f92aa855-cea9-4814-b9d8-f2a60d3e4a06", + accessLevelRemoteId: "30", }); if (res.ok) { const { value: result } = res; diff --git a/docs/sdks/idpgroupmappings/README.md b/docs/sdks/idpgroupmappings/README.md index 1d8a417..2b23076 100644 --- a/docs/sdks/idpgroupmappings/README.md +++ b/docs/sdks/idpgroupmappings/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to IDP group mappings + ### Available Operations * [getIdpGroupMappings](#getidpgroupmappings) - Returns the configured set of available `IdpGroupMapping` objects for an Okta app. diff --git a/docs/sdks/messagechannels/README.md b/docs/sdks/messagechannels/README.md index 97db6f5..46826fb 100644 --- a/docs/sdks/messagechannels/README.md +++ b/docs/sdks/messagechannels/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to message channels + ### Available Operations * [getMessageChannels](#getmessagechannels) - Returns a list of `MessageChannel` objects. diff --git a/docs/sdks/nonhumanidentities/README.md b/docs/sdks/nonhumanidentities/README.md index 98a9de5..dfe084b 100644 --- a/docs/sdks/nonhumanidentities/README.md +++ b/docs/sdks/nonhumanidentities/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to non-human identities + ### Available Operations * [getNhis](#getnhis) - Returns a list of non-human identities for your organization. @@ -26,7 +28,9 @@ async function run() { pageSize: 200, }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -53,7 +57,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("nonHumanIdentitiesGetNhis failed:", res.error); } @@ -73,7 +79,7 @@ run(); ### Response -**Promise\<[components.PaginatedResourcesList](../../models/components/paginatedresourceslist.md)\>** +**Promise\<[operations.GetNhisResponse](../../models/operations/getnhisresponse.md)\>** ### Errors diff --git a/docs/sdks/oncallschedules/README.md b/docs/sdks/oncallschedules/README.md index 4fe6c76..d276e9c 100644 --- a/docs/sdks/oncallschedules/README.md +++ b/docs/sdks/oncallschedules/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to on-call schedules + ### Available Operations * [getOnCallSchedules](#getoncallschedules) - Returns a list of `OnCallSchedule` objects. diff --git a/docs/sdks/owners/README.md b/docs/sdks/owners/README.md index eda318f..60b481b 100644 --- a/docs/sdks/owners/README.md +++ b/docs/sdks/owners/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to owners + ### Available Operations * [getOwners](#getowners) - Returns a list of `Owner` objects. @@ -34,7 +36,9 @@ async function run() { name: "200", }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -62,7 +66,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("ownersGetOwners failed:", res.error); } @@ -82,7 +88,7 @@ run(); ### Response -**Promise\<[components.PaginatedOwnersList](../../models/components/paginatedownerslist.md)\>** +**Promise\<[operations.GetOwnersResponse](../../models/operations/getownersresponse.md)\>** ### Errors diff --git a/docs/sdks/requests/README.md b/docs/sdks/requests/README.md index 3108f3b..1c3ee20 100644 --- a/docs/sdks/requests/README.md +++ b/docs/sdks/requests/README.md @@ -3,11 +3,14 @@ ## Overview +Operations related to requests + ### Available Operations * [getRequests](#getrequests) - Returns a list of requests for your organization that is visible by the admin. * [createRequest](#createrequest) - Create an access request -* [getRequestsRelay](#getrequestsrelay) - Returns a paginated list of requests using Relay-style cursor pagination. +* [~~getRequestsRelay~~](#getrequestsrelay) - Returns a paginated list of requests using Relay-style cursor pagination. :warning: **Deprecated** +* [getRequest](#getrequest) - Returns a request by ID. * [approveRequest](#approverequest) - Approve an access request ## getRequests @@ -31,7 +34,9 @@ async function run() { pageSize: 200, }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -60,7 +65,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("requestsGetRequests failed:", res.error); } @@ -80,7 +87,7 @@ run(); ### Response -**Promise\<[components.RequestList](../../models/components/requestlist.md)\>** +**Promise\<[operations.GetRequestsResponse](../../models/operations/getrequestsresponse.md)\>** ### Errors @@ -214,10 +221,12 @@ run(); | --------------- | --------------- | --------------- | | errors.APIError | 4XX, 5XX | \*/\* | -## getRequestsRelay +## ~~getRequestsRelay~~ Returns a paginated list of requests using Relay-style cursor pagination. +> :warning: **DEPRECATED**: This will be removed in a future release, please migrate away from it as soon as possible. + ### Example Usage ```typescript @@ -298,6 +307,78 @@ run(); | --------------- | --------------- | --------------- | | errors.APIError | 4XX, 5XX | \*/\* | +## getRequest + +Returns a request by ID. + +### Example Usage + +```typescript +import { OpalMcp } from "opal-mcp"; + +const opalMcp = new OpalMcp({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const result = await opalMcp.requests.getRequest({ + id: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { OpalMcpCore } from "opal-mcp/core.js"; +import { requestsGetRequest } from "opal-mcp/funcs/requestsGetRequest.js"; + +// Use `OpalMcpCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const opalMcp = new OpalMcpCore({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const res = await requestsGetRequest(opalMcp, { + id: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("requestsGetRequest failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GetRequestRequest](../../models/operations/getrequestrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[components.RequestT](../../models/components/requestt.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.APIError | 4XX, 5XX | \*/\* | + ## approveRequest Approve an access request diff --git a/docs/sdks/resources/README.md b/docs/sdks/resources/README.md index 24d0139..e6cef93 100644 --- a/docs/sdks/resources/README.md +++ b/docs/sdks/resources/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to resources + ### Available Operations * [getResources](#getresources) - Returns a list of resources for your organization. @@ -28,6 +30,8 @@ * [getResourceUser](#getresourceuser) - Returns information about a specific user's access to a resource. * [~~resourceUserAccessStatusRetrieve~~](#resourceuseraccessstatusretrieve) - Get user's access status to a resource. :warning: **Deprecated** * [getResourceTags](#getresourcetags) - Returns all tags applied to the resource. +* [getResourceScopedRolePermissions](#getresourcescopedrolepermissions) - Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. +* [setResourceScopedRolePermissions](#setresourcescopedrolepermissions) - Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. ## getResources @@ -56,7 +60,9 @@ async function run() { ancestorResourceId: "4baf8423-db0a-4037-a4cf-f79c60cb67a5", }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -91,7 +97,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("resourcesGetResources failed:", res.error); } @@ -111,7 +119,7 @@ run(); ### Response -**Promise\<[components.PaginatedResourcesList](../../models/components/paginatedresourceslist.md)\>** +**Promise\<[operations.GetResourcesResponse](../../models/operations/getresourcesresponse.md)\>** ### Errors @@ -1881,6 +1889,176 @@ run(); ### Errors +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.APIError | 4XX, 5XX | \*/\* | + +## getResourceScopedRolePermissions + +Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. + +### Example Usage + +```typescript +import { OpalMcp } from "opal-mcp"; + +const opalMcp = new OpalMcp({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const result = await opalMcp.resources.getResourceScopedRolePermissions({ + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { OpalMcpCore } from "opal-mcp/core.js"; +import { resourcesGetResourceScopedRolePermissions } from "opal-mcp/funcs/resourcesGetResourceScopedRolePermissions.js"; + +// Use `OpalMcpCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const opalMcp = new OpalMcpCore({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const res = await resourcesGetResourceScopedRolePermissions(opalMcp, { + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("resourcesGetResourceScopedRolePermissions failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GetResourceScopedRolePermissionsRequest](../../models/operations/getresourcescopedrolepermissionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[components.ScopedRolePermissionList](../../models/components/scopedrolepermissionlist.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.APIError | 4XX, 5XX | \*/\* | + +## setResourceScopedRolePermissions + +Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. + +### Example Usage + +```typescript +import { OpalMcp } from "opal-mcp"; + +const opalMcp = new OpalMcp({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const result = await opalMcp.resources.setResourceScopedRolePermissions({ + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + scopedRolePermissionList: { + permissions: [ + { + targetIds: [ + "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", + "8294e9c9-deb6-48e9-9c99-da2a1e04a87f", + ], + targetType: "RESOURCE", + permissionName: "READ", + allowAll: false, + }, + ], + }, + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { OpalMcpCore } from "opal-mcp/core.js"; +import { resourcesSetResourceScopedRolePermissions } from "opal-mcp/funcs/resourcesSetResourceScopedRolePermissions.js"; + +// Use `OpalMcpCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const opalMcp = new OpalMcpCore({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const res = await resourcesSetResourceScopedRolePermissions(opalMcp, { + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + scopedRolePermissionList: { + permissions: [ + { + targetIds: [ + "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", + "8294e9c9-deb6-48e9-9c99-da2a1e04a87f", + ], + targetType: "RESOURCE", + permissionName: "READ", + allowAll: false, + }, + ], + }, + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("resourcesSetResourceScopedRolePermissions failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.SetResourceScopedRolePermissionsRequest](../../models/operations/setresourcescopedrolepermissionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[components.ScopedRolePermissionList](../../models/components/scopedrolepermissionlist.md)\>** + +### Errors + | Error Type | Status Code | Content Type | | --------------- | --------------- | --------------- | | errors.APIError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/scopedrolepermissions/README.md b/docs/sdks/scopedrolepermissions/README.md new file mode 100644 index 0000000..f705969 --- /dev/null +++ b/docs/sdks/scopedrolepermissions/README.md @@ -0,0 +1,181 @@ +# ScopedRolePermissions +(*scopedRolePermissions*) + +## Overview + +Operations related to scoped role permissions + +### Available Operations + +* [getResourceScopedRolePermissions](#getresourcescopedrolepermissions) - Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. +* [setResourceScopedRolePermissions](#setresourcescopedrolepermissions) - Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. + +## getResourceScopedRolePermissions + +Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. + +### Example Usage + +```typescript +import { OpalMcp } from "opal-mcp"; + +const opalMcp = new OpalMcp({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const result = await opalMcp.scopedRolePermissions.getResourceScopedRolePermissions({ + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { OpalMcpCore } from "opal-mcp/core.js"; +import { resourcesGetResourceScopedRolePermissions } from "opal-mcp/funcs/resourcesGetResourceScopedRolePermissions.js"; + +// Use `OpalMcpCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const opalMcp = new OpalMcpCore({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const res = await resourcesGetResourceScopedRolePermissions(opalMcp, { + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("resourcesGetResourceScopedRolePermissions failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GetResourceScopedRolePermissionsRequest](../../models/operations/getresourcescopedrolepermissionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[components.ScopedRolePermissionList](../../models/components/scopedrolepermissionlist.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.APIError | 4XX, 5XX | \*/\* | + +## setResourceScopedRolePermissions + +Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. + +### Example Usage + +```typescript +import { OpalMcp } from "opal-mcp"; + +const opalMcp = new OpalMcp({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const result = await opalMcp.scopedRolePermissions.setResourceScopedRolePermissions({ + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + scopedRolePermissionList: { + permissions: [ + { + targetIds: [ + "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", + "8294e9c9-deb6-48e9-9c99-da2a1e04a87f", + ], + targetType: "RESOURCE", + permissionName: "READ", + allowAll: false, + }, + ], + }, + }); + + console.log(result); +} + +run(); +``` + +### Standalone function + +The standalone function version of this method: + +```typescript +import { OpalMcpCore } from "opal-mcp/core.js"; +import { resourcesSetResourceScopedRolePermissions } from "opal-mcp/funcs/resourcesSetResourceScopedRolePermissions.js"; + +// Use `OpalMcpCore` for best tree-shaking performance. +// You can create one instance of it to use across an application. +const opalMcp = new OpalMcpCore({ + bearerAuth: process.env["OPALMCP_BEARER_AUTH"] ?? "", +}); + +async function run() { + const res = await resourcesSetResourceScopedRolePermissions(opalMcp, { + resourceId: "1b978423-db0a-4037-a4cf-f79c60cb67b3", + scopedRolePermissionList: { + permissions: [ + { + targetIds: [ + "a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1", + "8294e9c9-deb6-48e9-9c99-da2a1e04a87f", + ], + targetType: "RESOURCE", + permissionName: "READ", + allowAll: false, + }, + ], + }, + }); + if (res.ok) { + const { value: result } = res; + console.log(result); + } else { + console.log("resourcesSetResourceScopedRolePermissions failed:", res.error); + } +} + +run(); +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.SetResourceScopedRolePermissionsRequest](../../models/operations/setresourcescopedrolepermissionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | +| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | +| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | + +### Response + +**Promise\<[components.ScopedRolePermissionList](../../models/components/scopedrolepermissionlist.md)\>** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.APIError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/docs/sdks/sessions/README.md b/docs/sdks/sessions/README.md index e12a2c0..7ef2018 100644 --- a/docs/sdks/sessions/README.md +++ b/docs/sdks/sessions/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to sessions + ### Available Operations * [sessions](#sessions) - Returns a list of `Session` objects. diff --git a/docs/sdks/tags/README.md b/docs/sdks/tags/README.md index f53264d..868675a 100644 --- a/docs/sdks/tags/README.md +++ b/docs/sdks/tags/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to tags + ### Available Operations * [getTagByID](#gettagbyid) - UNSTABLE. May be removed at any time. Gets a tag with the given id. @@ -338,7 +340,9 @@ async function run() { pageSize: 200, }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -365,7 +369,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("tagsGetTags failed:", res.error); } @@ -385,7 +391,7 @@ run(); ### Response -**Promise\<[components.PaginatedTagsList](../../models/components/paginatedtagslist.md)\>** +**Promise\<[operations.GetTagsResponse](../../models/operations/gettagsresponse.md)\>** ### Errors diff --git a/docs/sdks/uars/README.md b/docs/sdks/uars/README.md index f5ae0b0..7ce9e01 100644 --- a/docs/sdks/uars/README.md +++ b/docs/sdks/uars/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to UARs + ### Available Operations * [getUARs](#getuars) - Returns a list of `UAR` objects. @@ -28,7 +30,9 @@ async function run() { pageSize: 200, }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -55,7 +59,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("uarsGetUARs failed:", res.error); } @@ -75,7 +81,7 @@ run(); ### Response -**Promise\<[components.PaginatedUARsList](../../models/components/paginateduarslist.md)\>** +**Promise\<[operations.GetUARsResponse](../../models/operations/getuarsresponse.md)\>** ### Errors diff --git a/docs/sdks/users/README.md b/docs/sdks/users/README.md index 7b6159c..295e1fb 100644 --- a/docs/sdks/users/README.md +++ b/docs/sdks/users/README.md @@ -3,6 +3,8 @@ ## Overview +Operations related to users + ### Available Operations * [user](#user) - Retrieves detailed user information from Opal. This endpoint is designed to fetch user details by @@ -128,7 +130,9 @@ async function run() { pageSize: 200, }); - console.log(result); + for await (const page of result) { + console.log(page); + } } run(); @@ -155,7 +159,9 @@ async function run() { }); if (res.ok) { const { value: result } = res; - console.log(result); + for await (const page of result) { + console.log(page); + } } else { console.log("usersGetUsers failed:", res.error); } @@ -175,7 +181,7 @@ run(); ### Response -**Promise\<[components.PaginatedUsersList](../../models/components/paginateduserslist.md)\>** +**Promise\<[operations.GetUsersResponse](../../models/operations/getusersresponse.md)\>** ### Errors diff --git a/jsr.json b/jsr.json index 7beb25b..a24622a 100644 --- a/jsr.json +++ b/jsr.json @@ -2,7 +2,7 @@ { "name": "opal-mcp", - "version": "0.6.2", + "version": "0.7.1", "exports": { ".": "./src/index.ts", "./models/errors": "./src/models/errors/index.ts", diff --git a/mcp-scopes-and-endpoints-overlay.yaml b/mcp-scopes-and-endpoints-overlay.yaml index 7086219..cb66517 100644 --- a/mcp-scopes-and-endpoints-overlay.yaml +++ b/mcp-scopes-and-endpoints-overlay.yaml @@ -17,26 +17,198 @@ actions: scopes: [write] disabled: false - # # Disable depricated endpoints that should not be used by the MCP server - # - target: $.paths["/groups/{group_id}/reviewers"].get - # update: - # x-speakeasy-mcp: - # disabled: true - # - target: $.paths["/groups/{group_id}/reviewers"].put - # update: - # x-speakeasy-mcp: - # disabled: true - # - target: $.paths["/groups/{group_id}/reviewer-stages"].get - # update: - # x-speakeasy-mcp: - # disabled: true - # - target: $.paths["/groups/{group_id}/reviewer-stages"].put - # update: - # x-speakeasy-mcp: - # disabled: true + # Add pagination configuration for cursor-based endpoints + - target: $.paths["/bundles"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.bundles + nextCursor: $.next - # Disable endpoints that are not relevant for the MCP server - # - target: $.paths["/sessions"].get - # update: - # x-speakeasy-mcp: - # disabled: true \ No newline at end of file + - target: $.paths["/bundles/{bundle_id}/resources"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.bundle_resources + nextCursor: $.next + + - target: $.paths["/bundles/{bundle_id}/groups"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.bundle_groups + nextCursor: $.next + + - target: $.paths["/events"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next + + - target: $.paths["/groups"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next + + - target: $.paths["/group-bindings"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next + + - target: $.paths["/owners"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next + + - target: $.paths["/requests"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.requests + nextCursor: $.cursor + + - target: $.paths["/resources"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next + + - target: $.paths["/non-human-identities"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next + + - target: $.paths["/users"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next + + - target: $.paths["/tags"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next + + - target: $.paths["/uars"].get + update: + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next diff --git a/openapi.yaml b/openapi.yaml index b2e823b..0c19624 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -10,6 +10,46 @@ info: servers: - description: Production url: https://api.opal.dev/v1 +# keep tags alphabetized, also add any new tags to the list below +tags: + - name: access-rules + description: Operations related to access rules + - name: apps + description: Operations related to apps + - name: bundles + description: Operations related to bundles + - name: configuration-templates + description: Operations related to configuration templates + - name: events + description: Operations related to events + - name: groups + description: Operations related to groups + - name: group-bindings + description: Operations related to group bindings + - name: idp-group-mappings + description: Operations related to IDP group mappings + - name: message-channels + description: Operations related to message channels + - name: non-human-identities + description: Operations related to non-human identities + - name: on-call-schedules + description: Operations related to on-call schedules + - name: owners + description: Operations related to owners + - name: requests + description: Operations related to requests + - name: resources + description: Operations related to resources + - name: scoped-role-permissions + description: Operations related to scoped role permissions + - name: sessions + description: Operations related to sessions + - name: tags + description: Operations related to tags + - name: uars + description: Operations related to UARs + - name: users + description: Operations related to users paths: /apps: get: @@ -128,6 +168,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.bundles + nextCursor: $.next post: description: Creates a bundle. operationId: createBundle @@ -285,6 +337,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.bundle_resources + nextCursor: $.next post: description: Adds a resource to a bundle. operationId: addBundleResource @@ -418,6 +482,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.bundle_groups + nextCursor: $.next post: description: Adds a group to a bundle. operationId: addBundleGroup @@ -758,6 +834,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next /groups: get: description: Returns a list of groups for your organization. @@ -829,6 +917,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next put: description: Bulk updates a list of groups. operationId: updateGroups @@ -1753,6 +1853,15 @@ paths: format: uuid type: string style: simple + - description: The remote ID of the access level for which this user has direct access. If omitted, the default access level remote ID value (empty string) is assumed. + example: 30 + explode: true + in: query + name: access_level_remote_id + required: false + schema: + type: string + style: form responses: "200": description: This user's access was successfully removed from this group. @@ -1800,6 +1909,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next post: description: Creates a group binding. operationId: createGroupBinding @@ -2052,6 +2173,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next post: description: Creates an owner. operationId: createOwner @@ -2319,6 +2452,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.requests + nextCursor: $.cursor post: description: "Create an access request" operationId: "createRequest" @@ -2351,6 +2496,7 @@ paths: get: description: Returns a paginated list of requests using Relay-style cursor pagination. operationId: getRequestsRelay + deprecated: true parameters: - description: Number of results to return after the cursor. Use either first/after or last/before, not both. example: 10 @@ -2421,6 +2567,35 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + /requests/{id}: + get: + description: Returns a request by ID. + operationId: getRequest + parameters: + - description: The ID of the request. + example: 4baf8423-db0a-4037-a4cf-f79c60cb67a5 + explode: false + in: path + name: id + required: true + schema: + format: uuid + type: string + style: simple + responses: + "200": + description: The requested request object. + content: + application/json: + schema: + $ref: "#/components/schemas/Request" + security: + - BearerAuth: [] + tags: + - requests + x-speakeasy-mcp: + scopes: [read] + disabled: false /requests/{id}/approve: post: description: "Approve an access request" @@ -2567,6 +2742,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next put: description: Bulk updates a list of resources. operationId: updateResources @@ -2975,6 +3162,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next /resources/{resource_id}/non-human-identities: get: description: Gets the list of non-human identities with access to this resource. @@ -3494,6 +3693,71 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + /resources/{resource_id}/scoped-role-permissions: + get: + description: Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. + operationId: get_resource_scoped_role_permissions + parameters: + - description: The ID of the resource whose scoped role permissions belong to. + name: resource_id + example: 1b978423-db0a-4037-a4cf-f79c60cb67b3 + explode: false + in: path + required: true + schema: + format: uuid + type: string + style: simple + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/ScopedRolePermissionList" + description: The role permissions that this Opal Scoped Role has. + security: + - BearerAuth: [] + tags: + - resources + - scoped-role-permissions + x-speakeasy-mcp: + scopes: [read] + disabled: false + put: + description: Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. + operationId: set_resource_scoped_role_permissions + parameters: + - description: The ID of the resource whose scoped role permissions belong to. Must be of OPAL_SCOPED_ROLE resource type. + name: resource_id + example: 1b978423-db0a-4037-a4cf-f79c60cb67b3 + explode: false + in: path + required: true + schema: + format: uuid + type: string + style: simple + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/ScopedRolePermissionList" + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/ScopedRolePermissionList" + description: The role permissions that this Opal Scoped Role has. + security: + - BearerAuth: [] + tags: + - resources + - scoped-role-permissions + x-speakeasy-mcp: + scopes: [write] + disabled: false /sessions: get: description: Returns a list of `Session` objects. @@ -3621,6 +3885,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next /users/{user_id}/tags: get: description: Returns all tags applied to the user. @@ -3919,6 +4195,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next /tags/{tag_id}/users/{user_id}: post: description: Applies a tag to a user. @@ -4312,6 +4600,18 @@ paths: x-speakeasy-mcp: scopes: [read] disabled: false + x-speakeasy-pagination: + type: cursor + inputs: + - name: cursor + in: parameters + type: cursor + - name: page_size + in: parameters + type: limit + outputs: + results: $.results + nextCursor: $.next /uar: post: description: Starts a User Access Review. @@ -6216,6 +6516,40 @@ components: - LIMITED example: GLOBAL type: string + RolePermissionNameEnum: + description: The name of the role permission. + enum: + - READ + - READ_ASSIGNMENTS + - CREATE + - IMPORT + - EXPORT + - SYNC + - DELETE + - READ_SETTINGS + - EDIT_TAGS + - EDIT_SETTINGS + - EDIT_SYNC_SETTINGS + - EDIT_ASSIGNMENTS + - EDIT_REQUEST_CONFIGURATIONS + - EDIT_EVENT_STREAM + - ASSIGN_UAR_REVIEWERS + - SEND_REMINDERS + - STOP + - REQUEST_ON_BEHALF + example: READ + type: string + RolePermissionTargetTypeEnum: + description: The type of the target for the role permission. + enum: + - RESOURCE + - CONNECTION + - GROUP + - BUNDLE + - USER + - ACCESS_REVIEW + example: RESOURCE + type: string UpdateGroupResourcesInfo: example: group_resources: @@ -6720,10 +7054,44 @@ components: type: object required: - role_id + okta_group_rule: + description: Remote info for Okta Directory group rule. + properties: + rule_id: + description: The id of the Okta group rule. + example: 0pr3f7zMZZHPgUoWO0g4 + type: string + type: object + required: + - rule_id + workday_user_security_group: + description: Remote info for Workday User Security group. + properties: + group_id: + description: The id of the Workday User Security group. + example: 123abc456def + type: string + type: object + required: + - group_id type: object ResourceRemoteInfo: description: Information that defines the remote resource. This replaces the deprecated remote_id and metadata fields. properties: + aws_organizational_unit: + description: Remote info for AWS organizational unit. + properties: + parent_id: + description: The id of the parent organizational unit. + example: ou-1234 + type: string + organizational_unit_id: + description: The id of the AWS organizational unit that is being created. + example: ou-1234 + type: string + type: object + required: + - organizational_unit_id aws_account: description: Remote info for AWS account. properties: @@ -6731,6 +7099,10 @@ components: description: The id of the AWS account. example: 234234234234 type: string + organizational_unit_id: + description: The id of the AWS organizational unit. Required only if customer has OUs enabled. + example: ou-1234 + type: string type: object required: - account_id @@ -6820,6 +7192,21 @@ components: type: object required: - arn + custom_connector: + description: Remote info for a custom connector resource. + properties: + remote_resource_id: + description: The id of the resource in the end system + example: 01fa7402-01d8-103b-8deb-5f3a0ab7884 + type: string + can_have_usage_events: + description: A bool representing whether or not the resource can have usage data. + example: False + type: boolean + type: object + required: + - remote_resource_id + - can_have_usage_events gcp_organization: description: Remote info for GCP organization. properties: @@ -6960,6 +7347,16 @@ components: - email - service_account_id - project_id + google_workspace_role: + description: Remote info for GCP workspace role. + properties: + role_id: + description: The id of the role. + example: google-workspace-role:01234567890123456 + type: string + type: object + required: + - role_id github_repo: description: Remote info for GitHub repository. properties: @@ -7790,6 +8187,14 @@ components: description: The name of the target. example: Engineering Team type: string + remote_id: + description: The ID of the target on the remote system. + example: arn:aws:iam::490306337630:role/SupportUser + type: string + remote_name: + description: The name of the target on the remote system. + example: SupportUser + type: string example: resource_id: null group_id: f454d283-ca87-4a8a-bdbb-df212eca5353 @@ -7878,6 +8283,10 @@ components: require_manager_approval: False require_support_ticket: False parent_resource_id: f454d283-ca67-4a8a-bdbb-df212eca5345 + ancestor_resource_ids: + - f454d283-ca67-4a8a-bdbb-df212eca5345 + descendant_resource_ids: + - f454d283-ca67-4a8a-bdbb-df212eca5345 properties: resource_id: description: The ID of the resource. @@ -9770,6 +10179,44 @@ components: type: object required: - bundle_groups + ScopedRolePermissionList: + example: + permissions: + - target_ids: + - a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1 + - 8294e9c9-deb6-48e9-9c99-da2a1e04a87f + target_type: RESOURCE + permission_name: READ + properties: + permissions: + type: array + items: + $ref: "#/components/schemas/ScopedRolePermission" + type: object + required: + - permissions + ScopedRolePermission: + type: object + properties: + target_ids: + description: The IDs of the entities that this permission applies to. If empty of missing, the permission will have untargeted scope. + example: + - a381e7a3-e5e0-4c48-b1d6-4ccb4c191bc1 + - 8294e9c9-deb6-48e9-9c99-da2a1e04a87f + items: + type: string + format: uuid + type: array + target_type: + $ref: "#/components/schemas/RolePermissionTargetTypeEnum" + permission_name: + $ref: "#/components/schemas/RolePermissionNameEnum" + allow_all: + type: boolean + required: + - target_type + - permission_name + - allow_all securitySchemes: BearerAuth: scheme: bearer diff --git a/package-lock.json b/package-lock.json index b96a700..0e0d1ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "opal-mcp", - "version": "0.6.2", + "version": "0.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "opal-mcp", - "version": "0.6.2", + "version": "0.7.1", "bin": { "mcp": "bin/mcp-server.js" }, @@ -15,8 +15,8 @@ "@modelcontextprotocol/sdk": ">=1.5.0 <1.10.0", "@stricli/core": "^1.1.1", "@types/express": "^4.17.21", - "bun": "^1.2.2", - "bun-types": "^1.2.2", + "bun": "1.2.17", + "bun-types": "1.2.17", "eslint": "^9.19.0", "express": "^4.21.2", "globals": "^15.14.0", @@ -27,7 +27,7 @@ }, "peerDependencies": { "@modelcontextprotocol/sdk": ">=1.5.0 <1.10.0", - "zod": ">= 3" + "zod": "^3" }, "peerDependenciesMeta": { "@modelcontextprotocol/sdk": { @@ -599,9 +599,9 @@ } }, "node_modules/@oven/bun-darwin-aarch64": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.2.16.tgz", - "integrity": "sha512-NLVU9YDORq/3WuJOE5TQv5of3R99n56gYZPfdqP4U0/5nllbC8yzRxA2BWwAS2RxxD0Y3bxqEVUsIGiTNN2jxg==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.2.17.tgz", + "integrity": "sha512-66Xjz3NZXUUWKZJPvWKuwEkaqMZpir1Gm4SbhbB2iiRSSTW8jqwdkSb9RhgTCDt5OnSPd3+Cq0WsP/T5ExJbhA==", "cpu": [ "arm64" ], @@ -612,9 +612,9 @@ ] }, "node_modules/@oven/bun-darwin-x64": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64/-/bun-darwin-x64-1.2.16.tgz", - "integrity": "sha512-HpcSVCTH9n+9bG2zu3OUJ9h22m6HzNgZpqib9r4NEVZg7Z2U86bOUMKlTCA0ZANaWsK9czl2VIhMWbLF4fgvLA==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64/-/bun-darwin-x64-1.2.17.tgz", + "integrity": "sha512-OMJMHpcpBlWcVnWfSQ6x+8fF7HpkQLqBfoIvzxgUjIZZvj2d8K46XX4N/h62RglDEinRC9VDGxt24vwvlk5tTw==", "cpu": [ "x64" ], @@ -625,9 +625,9 @@ ] }, "node_modules/@oven/bun-darwin-x64-baseline": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.2.16.tgz", - "integrity": "sha512-FtKr6FwLN+QfrF0/vJtOwBMU72krmrHlxhRSElbKEOWox2n2vWSZ/sNNkHePEsrxGfqaHC5GhEZk2lnaZTavBQ==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.2.17.tgz", + "integrity": "sha512-VSIctl90tV8yg1LRMvPg/8LgUzl55Q7Jcxe+u6PfuvLQIJOTIPbNn7HtRpJg7MGc3+qyztB5KDd70xC7qI2yEg==", "cpu": [ "x64" ], @@ -638,9 +638,9 @@ ] }, "node_modules/@oven/bun-linux-aarch64": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.2.16.tgz", - "integrity": "sha512-nd0eZhihfgrDtfI/NdEqOAQ8KY87SWNQLZKjRB8WoYkqcY1BGwtZqvJOc2bEn2oERJ8K2etJRynXz+MKngiYxw==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.2.17.tgz", + "integrity": "sha512-KPoMqaibCXcSv+VZ3uMqKUNZqMxE6Hho1be6+laolYGOIJxJTMnZPfmKfIlQmnnW3vLlm3g2Rm8pPPC7doSHWg==", "cpu": [ "arm64" ], @@ -651,9 +651,9 @@ ] }, "node_modules/@oven/bun-linux-aarch64-musl": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.2.16.tgz", - "integrity": "sha512-MhvQ0hecunZnbac9cEOqA1CGk/ISDhhnF35i9l90Jgc/osfgGndViLkMp3wk1EO5UG4/Kbil1OlfLmyOHKq0SQ==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64-musl/-/bun-linux-aarch64-musl-1.2.17.tgz", + "integrity": "sha512-PH+hUV+I6DGD1VRHdAIAKEAOed+GSdvn6S1b3qqX27/VuHBU781V+hzt+6DBlcWBHYLw8PIg9sfIdNp485gQmw==", "cpu": [ "aarch64" ], @@ -664,9 +664,9 @@ ] }, "node_modules/@oven/bun-linux-x64": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64/-/bun-linux-x64-1.2.16.tgz", - "integrity": "sha512-qYUXPXbT4S+MImv51+dLBHKFYy40QIowwCRtzUFGf3TG+9MQQUXHNXryMNSdHveHqecd9rO1EIQ8hroAPBl+Sg==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64/-/bun-linux-x64-1.2.17.tgz", + "integrity": "sha512-BfySnrTxp7D9hVUi9JEpviJl8ndsuESiRiQKTzgmdTLrMjUxP4SwrwMtYt6R9X20n9rREG6a47C0IyQMhbwG/g==", "cpu": [ "x64" ], @@ -677,9 +677,9 @@ ] }, "node_modules/@oven/bun-linux-x64-baseline": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.2.16.tgz", - "integrity": "sha512-ZysDeqDfUAqKrQu2R+ddRgSCY30qSnn0LQLr6fAm7Pw9lU2yhWVNa8R3DavddmZQc1vUw6j3ITIAE+DDT9OBCg==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.2.17.tgz", + "integrity": "sha512-IrnFMUwYWxoKICQgK8ZlJ6rI/HU2gITFNEW0MIOPIcuT0s3j0/33631M9EzYDoL4NuLQPks6569JDvSHEVqdeA==", "cpu": [ "x64" ], @@ -690,9 +690,9 @@ ] }, "node_modules/@oven/bun-linux-x64-musl": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-musl/-/bun-linux-x64-musl-1.2.16.tgz", - "integrity": "sha512-6o5Oi5ARKYErF6nIBrewxtl20PGhM97faPemJ+v26D47dRNAlUWN5lMVuOqZOhYjqzOe4V+NpxIFBHtXWEmoNQ==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-musl/-/bun-linux-x64-musl-1.2.17.tgz", + "integrity": "sha512-fW9qn/WqO131/qSIkIPW8zN+thQnYUWa/k98EWubLG87htKSPh1v023E5ikKb7WlUv4Yb6UlE/z4NmMYKffmAg==", "cpu": [ "x64" ], @@ -703,9 +703,9 @@ ] }, "node_modules/@oven/bun-linux-x64-musl-baseline": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-musl-baseline/-/bun-linux-x64-musl-baseline-1.2.16.tgz", - "integrity": "sha512-cWwny3cxYkvV9fYnSDb2brXodWV7IcG+Bwd3q3b8OUYbeC3ekHN3zm+TYdSxIVhMm7z46CkiDz5QnnQWVVfZ5A==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-musl-baseline/-/bun-linux-x64-musl-baseline-1.2.17.tgz", + "integrity": "sha512-YE5wQ/YA79BykMLhuwgdoF8Yjj5dRipD8dwmXs8n7gzR+/L9tL7Q69NQgskW2KkAalmWPoGAv3TV0IwbU+1dFw==", "cpu": [ "x64" ], @@ -716,9 +716,9 @@ ] }, "node_modules/@oven/bun-windows-x64": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-windows-x64/-/bun-windows-x64-1.2.16.tgz", - "integrity": "sha512-1xUlHHbMZ3DMZlEcppBAQ5vQDgNHDMIGB/AXO+dxQJl/3GiO/Ek4pMDzcqMnlbGDaDcTmTXyZ6cEXEF4C2qygQ==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-windows-x64/-/bun-windows-x64-1.2.17.tgz", + "integrity": "sha512-GJUg1oA59DWH6eyV8uccpgfTEVxjmgfTWQCOl2ySMXR3IfRoFwS4aQfpjcVzNmEZrv8eYt+yMuw1K7aNcWTTIg==", "cpu": [ "x64" ], @@ -729,9 +729,9 @@ ] }, "node_modules/@oven/bun-windows-x64-baseline": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/@oven/bun-windows-x64-baseline/-/bun-windows-x64-baseline-1.2.16.tgz", - "integrity": "sha512-tHdtHqH6c5ScNusLWOzZCTeuV2rSc3mvlLQQ+DYefTy+XwtjXmY47MbBSgNuBWVYePIob9BqDFOtTHYIWRZTww==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/@oven/bun-windows-x64-baseline/-/bun-windows-x64-baseline-1.2.17.tgz", + "integrity": "sha512-aVkq4l1yZ9VKfBOtZ2HEj0OCU5kUe3Fx6LbAG6oY6OglWVYj051i3RGaE2OdR4L4F2jDyxzfGYRTM/qs8nU5qA==", "cpu": [ "x64" ], @@ -1299,9 +1299,9 @@ } }, "node_modules/bun": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/bun/-/bun-1.2.16.tgz", - "integrity": "sha512-sjZH6rr1P6yu44+XPA8r+ZojwmK9Kbz9lO6KAA/4HRIupdpC31k7b93crLBm19wEYmd6f2+3+57/7tbOcmHbGg==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/bun/-/bun-1.2.17.tgz", + "integrity": "sha512-lrUZTWS24eVy6v+Eph8VTwqFPcG7/XQ0rLBQEMNoQs2Vd7ctVdMGAzJKKGZRUQH+rgkD8rBeHGIVoWxX4vJLCA==", "cpu": [ "arm64", "x64", @@ -1316,26 +1316,26 @@ ], "bin": { "bun": "bin/bun.exe", - "bunx": "bin/bun.exe" + "bunx": "bin/bunx.exe" }, "optionalDependencies": { - "@oven/bun-darwin-aarch64": "1.2.16", - "@oven/bun-darwin-x64": "1.2.16", - "@oven/bun-darwin-x64-baseline": "1.2.16", - "@oven/bun-linux-aarch64": "1.2.16", - "@oven/bun-linux-aarch64-musl": "1.2.16", - "@oven/bun-linux-x64": "1.2.16", - "@oven/bun-linux-x64-baseline": "1.2.16", - "@oven/bun-linux-x64-musl": "1.2.16", - "@oven/bun-linux-x64-musl-baseline": "1.2.16", - "@oven/bun-windows-x64": "1.2.16", - "@oven/bun-windows-x64-baseline": "1.2.16" + "@oven/bun-darwin-aarch64": "1.2.17", + "@oven/bun-darwin-x64": "1.2.17", + "@oven/bun-darwin-x64-baseline": "1.2.17", + "@oven/bun-linux-aarch64": "1.2.17", + "@oven/bun-linux-aarch64-musl": "1.2.17", + "@oven/bun-linux-x64": "1.2.17", + "@oven/bun-linux-x64-baseline": "1.2.17", + "@oven/bun-linux-x64-musl": "1.2.17", + "@oven/bun-linux-x64-musl-baseline": "1.2.17", + "@oven/bun-windows-x64": "1.2.17", + "@oven/bun-windows-x64-baseline": "1.2.17" } }, "node_modules/bun-types": { - "version": "1.2.16", - "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.2.16.tgz", - "integrity": "sha512-ciXLrHV4PXax9vHvUrkvun9VPVGOVwbbbBF/Ev1cXz12lyEZMoJpIJABOfPcN9gDJRaiKF9MVbSygLg4NXu3/A==", + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.2.17.tgz", + "integrity": "sha512-ElC7ItwT3SCQwYZDYoAH+q6KT4Fxjl8DtZ6qDulUFBmXA8YB4xo+l54J9ZJN+k2pphfn9vk7kfubeSd5QfTVJQ==", "dev": true, "dependencies": { "@types/node": "*" diff --git a/package.json b/package.json index fa117bd..ec21c8a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opal-mcp", - "version": "0.6.2", + "version": "0.7.1", "author": "Speakeasy", "type": "module", "bin": { @@ -30,11 +30,12 @@ "lint": "eslint --cache --max-warnings=0 src", "build:mcp": "bun src/mcp-server/build.mts", "build": "npm run build:mcp && tshy", + "build:codeql": "npm run build:mcp && tshy && tsc --noEmit", "prepublishOnly": "npm run build" }, "peerDependencies": { "@modelcontextprotocol/sdk": ">=1.5.0 <1.10.0", - "zod": ">= 3" + "zod": "^3" }, "peerDependenciesMeta": { "@modelcontextprotocol/sdk": { @@ -46,8 +47,8 @@ "@modelcontextprotocol/sdk": ">=1.5.0 <1.10.0", "@stricli/core": "^1.1.1", "@types/express": "^4.17.21", - "bun": "^1.2.2", - "bun-types": "^1.2.2", + "bun": "1.2.17", + "bun-types": "1.2.17", "eslint": "^9.19.0", "express": "^4.21.2", "globals": "^15.14.0", diff --git a/src/funcs/bundlesGetBundleGroups.ts b/src/funcs/bundlesGetBundleGroups.ts index 140b936..b32fa70 100644 --- a/src/funcs/bundlesGetBundleGroups.ts +++ b/src/funcs/bundlesGetBundleGroups.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of `Group` objects in a given bundle. @@ -33,16 +39,19 @@ export function bundlesGetBundleGroups( request: operations.GetBundleGroupsRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedBundleGroupList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetBundleGroupsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedBundleGroupList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetBundleGroupsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -132,7 +144,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -143,12 +155,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedBundleGroupList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetBundleGroupsResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -158,13 +174,68 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedBundleGroupList$inboundSchema), + M.json(200, operations.GetBundleGroupsResponse$inboundSchema, { + key: "Result", + }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetBundleGroupsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "bundle_groups"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + bundlesGetBundleGroups( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/bundlesGetBundleResources.ts b/src/funcs/bundlesGetBundleResources.ts index 9c5b496..633db0a 100644 --- a/src/funcs/bundlesGetBundleResources.ts +++ b/src/funcs/bundlesGetBundleResources.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of `Resource` objects in a given bundle. @@ -33,16 +39,19 @@ export function bundlesGetBundleResources( request: operations.GetBundleResourcesRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedBundleResourceList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetBundleResourcesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedBundleResourceList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetBundleResourcesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -132,7 +144,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -143,12 +155,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedBundleResourceList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetBundleResourcesResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -158,13 +174,68 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedBundleResourceList$inboundSchema), + M.json(200, operations.GetBundleResourcesResponse$inboundSchema, { + key: "Result", + }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetBundleResourcesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "bundle_resources"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + bundlesGetBundleResources( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/bundlesGetBundles.ts b/src/funcs/bundlesGetBundles.ts index ee1766f..f357657 100644 --- a/src/funcs/bundlesGetBundles.ts +++ b/src/funcs/bundlesGetBundles.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of `Bundle` objects. @@ -33,16 +39,19 @@ export function bundlesGetBundles( request: operations.GetBundlesRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedBundleList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetBundlesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedBundleList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetBundlesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -126,7 +138,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -137,12 +149,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedBundleList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetBundlesResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -152,13 +168,66 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedBundleList$inboundSchema), + M.json(200, operations.GetBundlesResponse$inboundSchema, { key: "Result" }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetBundlesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "bundles"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + bundlesGetBundles( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/eventsEvents.ts b/src/funcs/eventsEvents.ts index 69d522b..0d2cf32 100644 --- a/src/funcs/eventsEvents.ts +++ b/src/funcs/eventsEvents.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of `Event` objects. @@ -33,16 +39,19 @@ export function eventsEvents( request: operations.EventsRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedEventList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.EventsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedEventList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.EventsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -131,7 +143,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -142,12 +154,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedEventList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.EventsResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -157,13 +173,66 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedEventList$inboundSchema), + M.json(200, operations.EventsResponse$inboundSchema, { key: "Result" }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.EventsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + eventsEvents( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/groupBindingsGetGroupBindings.ts b/src/funcs/groupBindingsGetGroupBindings.ts index 1b294e6..494344a 100644 --- a/src/funcs/groupBindingsGetGroupBindings.ts +++ b/src/funcs/groupBindingsGetGroupBindings.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of `GroupBinding` objects. @@ -33,16 +39,19 @@ export function groupBindingsGetGroupBindings( request: operations.GetGroupBindingsRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedGroupBindingsList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetGroupBindingsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedGroupBindingsList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetGroupBindingsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -125,7 +137,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -136,12 +148,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedGroupBindingsList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetGroupBindingsResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -151,13 +167,68 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedGroupBindingsList$inboundSchema), + M.json(200, operations.GetGroupBindingsResponse$inboundSchema, { + key: "Result", + }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetGroupBindingsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + groupBindingsGetGroupBindings( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/groupsDeleteGroupUser.ts b/src/funcs/groupsDeleteGroupUser.ts index 83ac19a..eb2addb 100644 --- a/src/funcs/groupsDeleteGroupUser.ts +++ b/src/funcs/groupsDeleteGroupUser.ts @@ -4,7 +4,7 @@ import * as z from "zod"; import { OpalMcpCore } from "../core.js"; -import { encodeSimple } from "../lib/encodings.js"; +import { encodeFormQuery, encodeSimple } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; @@ -96,6 +96,10 @@ async function $do( const path = pathToFunc("/groups/{group_id}/users/{user_id}")(pathParams); + const query = encodeFormQuery({ + "access_level_remote_id": payload.access_level_remote_id, + }); + const headers = new Headers(compactMap({ Accept: "*/*", })); @@ -125,6 +129,7 @@ async function $do( baseURL: options?.serverURL, path: path, headers: headers, + query: query, body: body, userAgent: client._options.userAgent, timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, diff --git a/src/funcs/groupsGetGroups.ts b/src/funcs/groupsGetGroups.ts index 8c429ca..3f9ca37 100644 --- a/src/funcs/groupsGetGroups.ts +++ b/src/funcs/groupsGetGroups.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery, queryJoin } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of groups for your organization. @@ -33,16 +39,19 @@ export function groupsGetGroups( request: operations.GetGroupsRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedGroupsList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetGroupsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedGroupsList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetGroupsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -132,7 +144,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -143,12 +155,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedGroupsList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetGroupsResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -158,13 +174,66 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedGroupsList$inboundSchema), + M.json(200, operations.GetGroupsResponse$inboundSchema, { key: "Result" }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetGroupsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + groupsGetGroups( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/nonHumanIdentitiesGetNhis.ts b/src/funcs/nonHumanIdentitiesGetNhis.ts index 68a05aa..770d0f4 100644 --- a/src/funcs/nonHumanIdentitiesGetNhis.ts +++ b/src/funcs/nonHumanIdentitiesGetNhis.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of non-human identities for your organization. @@ -33,16 +39,19 @@ export function nonHumanIdentitiesGetNhis( request: operations.GetNhisRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedResourcesList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetNhisResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedResourcesList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetNhisResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -125,7 +137,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -136,12 +148,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedResourcesList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetNhisResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -151,13 +167,66 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedResourcesList$inboundSchema), + M.json(200, operations.GetNhisResponse$inboundSchema, { key: "Result" }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetNhisResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + nonHumanIdentitiesGetNhis( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/ownersGetOwners.ts b/src/funcs/ownersGetOwners.ts index 96b6794..0b35072 100644 --- a/src/funcs/ownersGetOwners.ts +++ b/src/funcs/ownersGetOwners.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of `Owner` objects. @@ -33,16 +39,19 @@ export function ownersGetOwners( request: operations.GetOwnersRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedOwnersList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetOwnersResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedOwnersList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetOwnersResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -126,7 +138,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -137,12 +149,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedOwnersList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetOwnersResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -152,13 +168,66 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedOwnersList$inboundSchema), + M.json(200, operations.GetOwnersResponse$inboundSchema, { key: "Result" }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetOwnersResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + ownersGetOwners( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/requestsGetRequest.ts b/src/funcs/requestsGetRequest.ts new file mode 100644 index 0000000..5593685 --- /dev/null +++ b/src/funcs/requestsGetRequest.ts @@ -0,0 +1,164 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { OpalMcpCore } from "../core.js"; +import { encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import * as components from "../models/components/index.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import { OpalMcpError } from "../models/errors/opalmcperror.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Returns a request by ID. + */ +export function requestsGetRequest( + client: OpalMcpCore, + request: operations.GetRequestRequest, + options?: RequestOptions, +): APIPromise< + Result< + components.RequestT, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: OpalMcpCore, + request: operations.GetRequestRequest, + options?: RequestOptions, +): Promise< + [ + Result< + components.RequestT, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => operations.GetRequestRequest$outboundSchema.parse(value), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + id: encodeSimple("id", payload.id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/requests/{id}")(pathParams); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.bearerAuth); + const securityInput = secConfig == null ? {} : { bearerAuth: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "getRequest", + oAuth2Scopes: [], + + resolvedSecurity: requestSecurity, + + securitySource: client._options.bearerAuth, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const [result] = await M.match< + components.RequestT, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, components.RequestT$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/src/funcs/requestsGetRequests.ts b/src/funcs/requestsGetRequests.ts index a7f82b3..b2beb70 100644 --- a/src/funcs/requestsGetRequests.ts +++ b/src/funcs/requestsGetRequests.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of requests for your organization that is visible by the admin. @@ -33,16 +39,19 @@ export function requestsGetRequests( request: operations.GetRequestsRequest, options?: RequestOptions, ): APIPromise< - Result< - components.RequestList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetRequestsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.RequestList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetRequestsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -128,7 +140,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -139,12 +151,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.RequestList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetRequestsResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -154,13 +170,68 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.RequestList$inboundSchema), + M.json(200, operations.GetRequestsResponse$inboundSchema, { + key: "Result", + }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetRequestsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "cursor"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "requests"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + requestsGetRequests( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/requestsGetRequestsRelay.ts b/src/funcs/requestsGetRequestsRelay.ts index bc5d4ce..c0ff296 100644 --- a/src/funcs/requestsGetRequestsRelay.ts +++ b/src/funcs/requestsGetRequestsRelay.ts @@ -27,6 +27,8 @@ import { Result } from "../types/fp.js"; /** * Returns a paginated list of requests using Relay-style cursor pagination. + * + * @deprecated method: This will be removed in a future release, please migrate away from it as soon as possible. */ export function requestsGetRequestsRelay( client: OpalMcpCore, diff --git a/src/funcs/resourcesGetResourceScopedRolePermissions.ts b/src/funcs/resourcesGetResourceScopedRolePermissions.ts new file mode 100644 index 0000000..b7ffd24 --- /dev/null +++ b/src/funcs/resourcesGetResourceScopedRolePermissions.ts @@ -0,0 +1,169 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { OpalMcpCore } from "../core.js"; +import { encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import * as components from "../models/components/index.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import { OpalMcpError } from "../models/errors/opalmcperror.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. + */ +export function resourcesGetResourceScopedRolePermissions( + client: OpalMcpCore, + request: operations.GetResourceScopedRolePermissionsRequest, + options?: RequestOptions, +): APIPromise< + Result< + components.ScopedRolePermissionList, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: OpalMcpCore, + request: operations.GetResourceScopedRolePermissionsRequest, + options?: RequestOptions, +): Promise< + [ + Result< + components.ScopedRolePermissionList, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.GetResourceScopedRolePermissionsRequest$outboundSchema.parse( + value, + ), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = null; + + const pathParams = { + resource_id: encodeSimple("resource_id", payload.resource_id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/resources/{resource_id}/scoped-role-permissions")( + pathParams, + ); + + const headers = new Headers(compactMap({ + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.bearerAuth); + const securityInput = secConfig == null ? {} : { bearerAuth: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "get_resource_scoped_role_permissions", + oAuth2Scopes: [], + + resolvedSecurity: requestSecurity, + + securitySource: client._options.bearerAuth, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "GET", + baseURL: options?.serverURL, + path: path, + headers: headers, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const [result] = await M.match< + components.ScopedRolePermissionList, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, components.ScopedRolePermissionList$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/src/funcs/resourcesGetResources.ts b/src/funcs/resourcesGetResources.ts index df35b22..f598c5c 100644 --- a/src/funcs/resourcesGetResources.ts +++ b/src/funcs/resourcesGetResources.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery, queryJoin } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of resources for your organization. @@ -33,16 +39,19 @@ export function resourcesGetResources( request: operations.GetResourcesRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedResourcesList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetResourcesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedResourcesList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetResourcesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -134,7 +146,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -145,12 +157,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedResourcesList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetResourcesResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -160,13 +176,68 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedResourcesList$inboundSchema), + M.json(200, operations.GetResourcesResponse$inboundSchema, { + key: "Result", + }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetResourcesResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + resourcesGetResources( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/resourcesSetResourceScopedRolePermissions.ts b/src/funcs/resourcesSetResourceScopedRolePermissions.ts new file mode 100644 index 0000000..9e6d338 --- /dev/null +++ b/src/funcs/resourcesSetResourceScopedRolePermissions.ts @@ -0,0 +1,172 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { OpalMcpCore } from "../core.js"; +import { encodeJSON, encodeSimple } from "../lib/encodings.js"; +import * as M from "../lib/matchers.js"; +import { compactMap } from "../lib/primitives.js"; +import { safeParse } from "../lib/schemas.js"; +import { RequestOptions } from "../lib/sdks.js"; +import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; +import { pathToFunc } from "../lib/url.js"; +import * as components from "../models/components/index.js"; +import { + ConnectionError, + InvalidRequestError, + RequestAbortedError, + RequestTimeoutError, + UnexpectedClientError, +} from "../models/errors/httpclienterrors.js"; +import { OpalMcpError } from "../models/errors/opalmcperror.js"; +import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; +import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; +import * as operations from "../models/operations/index.js"; +import { APICall, APIPromise } from "../types/async.js"; +import { Result } from "../types/fp.js"; + +/** + * Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. + */ +export function resourcesSetResourceScopedRolePermissions( + client: OpalMcpCore, + request: operations.SetResourceScopedRolePermissionsRequest, + options?: RequestOptions, +): APIPromise< + Result< + components.ScopedRolePermissionList, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > +> { + return new APIPromise($do( + client, + request, + options, + )); +} + +async function $do( + client: OpalMcpCore, + request: operations.SetResourceScopedRolePermissionsRequest, + options?: RequestOptions, +): Promise< + [ + Result< + components.ScopedRolePermissionList, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + APICall, + ] +> { + const parsed = safeParse( + request, + (value) => + operations.SetResourceScopedRolePermissionsRequest$outboundSchema.parse( + value, + ), + "Input validation failed", + ); + if (!parsed.ok) { + return [parsed, { status: "invalid" }]; + } + const payload = parsed.value; + const body = encodeJSON("body", payload.ScopedRolePermissionList, { + explode: true, + }); + + const pathParams = { + resource_id: encodeSimple("resource_id", payload.resource_id, { + explode: false, + charEncoding: "percent", + }), + }; + + const path = pathToFunc("/resources/{resource_id}/scoped-role-permissions")( + pathParams, + ); + + const headers = new Headers(compactMap({ + "Content-Type": "application/json", + Accept: "application/json", + })); + + const secConfig = await extractSecurity(client._options.bearerAuth); + const securityInput = secConfig == null ? {} : { bearerAuth: secConfig }; + const requestSecurity = resolveGlobalSecurity(securityInput); + + const context = { + options: client._options, + baseURL: options?.serverURL ?? client._baseURL ?? "", + operationID: "set_resource_scoped_role_permissions", + oAuth2Scopes: [], + + resolvedSecurity: requestSecurity, + + securitySource: client._options.bearerAuth, + retryConfig: options?.retries + || client._options.retryConfig + || { strategy: "none" }, + retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], + }; + + const requestRes = client._createRequest(context, { + security: requestSecurity, + method: "PUT", + baseURL: options?.serverURL, + path: path, + headers: headers, + body: body, + userAgent: client._options.userAgent, + timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, + }, options); + if (!requestRes.ok) { + return [requestRes, { status: "invalid" }]; + } + const req = requestRes.value; + + const doResult = await client._do(req, { + context, + errorCodes: ["4XX", "5XX"], + retryConfig: context.retryConfig, + retryCodes: context.retryCodes, + }); + if (!doResult.ok) { + return [doResult, { status: "request-error", request: req }]; + } + const response = doResult.value; + + const [result] = await M.match< + components.ScopedRolePermissionList, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >( + M.json(200, components.ScopedRolePermissionList$inboundSchema), + M.fail("4XX"), + M.fail("5XX"), + )(response, req); + if (!result.ok) { + return [result, { status: "complete", request: req, response }]; + } + + return [result, { status: "complete", request: req, response }]; +} diff --git a/src/funcs/tagsGetTags.ts b/src/funcs/tagsGetTags.ts index 2ffbc0e..3dbd9ac 100644 --- a/src/funcs/tagsGetTags.ts +++ b/src/funcs/tagsGetTags.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of tags created by your organization. @@ -33,16 +39,19 @@ export function tagsGetTags( request: operations.GetTagsRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedTagsList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetTagsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedTagsList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetTagsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -125,7 +137,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -136,12 +148,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedTagsList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetTagsResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -151,13 +167,66 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedTagsList$inboundSchema), + M.json(200, operations.GetTagsResponse$inboundSchema, { key: "Result" }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetTagsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + tagsGetTags( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/uarsGetUARs.ts b/src/funcs/uarsGetUARs.ts index 77a2f6a..ec1fd85 100644 --- a/src/funcs/uarsGetUARs.ts +++ b/src/funcs/uarsGetUARs.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of `UAR` objects. @@ -33,16 +39,19 @@ export function uarsGetUARs( request: operations.GetUARsRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedUARsList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetUARsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedUARsList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetUARsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -125,7 +137,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -136,12 +148,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedUARsList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetUARsResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -151,13 +167,66 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedUARsList$inboundSchema), + M.json(200, operations.GetUARsResponse$inboundSchema, { key: "Result" }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetUARsResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + uarsGetUARs( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/funcs/usersGetUsers.ts b/src/funcs/usersGetUsers.ts index 1d794ea..d8dfce2 100644 --- a/src/funcs/usersGetUsers.ts +++ b/src/funcs/usersGetUsers.ts @@ -3,6 +3,7 @@ */ import { OpalMcpCore } from "../core.js"; +import { dlv } from "../lib/dlv.js"; import { encodeFormQuery } from "../lib/encodings.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; @@ -10,7 +11,6 @@ import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; -import * as components from "../models/components/index.js"; import { ConnectionError, InvalidRequestError, @@ -24,6 +24,12 @@ import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; +import { + createPageIterator, + haltIterator, + PageIterator, + Paginator, +} from "../types/operations.js"; /** * Returns a list of users for your organization. @@ -33,16 +39,19 @@ export function usersGetUsers( request: operations.GetUsersRequest, options?: RequestOptions, ): APIPromise< - Result< - components.PaginatedUsersList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetUsersResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } > > { return new APIPromise($do( @@ -58,16 +67,19 @@ async function $do( options?: RequestOptions, ): Promise< [ - Result< - components.PaginatedUsersList, - | OpalMcpError - | ResponseValidationError - | ConnectionError - | RequestAbortedError - | RequestTimeoutError - | InvalidRequestError - | UnexpectedClientError - | SDKValidationError + PageIterator< + Result< + operations.GetUsersResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + >, + { cursor: string } >, APICall, ] @@ -78,7 +90,7 @@ async function $do( "Input validation failed", ); if (!parsed.ok) { - return [parsed, { status: "invalid" }]; + return [haltIterator(parsed), { status: "invalid" }]; } const payload = parsed.value; const body = null; @@ -125,7 +137,7 @@ async function $do( timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { - return [requestRes, { status: "invalid" }]; + return [haltIterator(requestRes), { status: "invalid" }]; } const req = requestRes.value; @@ -136,12 +148,16 @@ async function $do( retryCodes: context.retryCodes, }); if (!doResult.ok) { - return [doResult, { status: "request-error", request: req }]; + return [haltIterator(doResult), { status: "request-error", request: req }]; } const response = doResult.value; - const [result] = await M.match< - components.PaginatedUsersList, + const responseFields = { + HttpMeta: { Response: response, Request: req }, + }; + + const [result, raw] = await M.match< + operations.GetUsersResponse, | OpalMcpError | ResponseValidationError | ConnectionError @@ -151,13 +167,66 @@ async function $do( | UnexpectedClientError | SDKValidationError >( - M.json(200, components.PaginatedUsersList$inboundSchema), + M.json(200, operations.GetUsersResponse$inboundSchema, { key: "Result" }), M.fail("4XX"), M.fail("5XX"), - )(response, req); + )(response, req, { extraFields: responseFields }); if (!result.ok) { - return [result, { status: "complete", request: req, response }]; + return [haltIterator(result), { + status: "complete", + request: req, + response, + }]; } - return [result, { status: "complete", request: req, response }]; + const nextFunc = ( + responseData: unknown, + ): { + next: Paginator< + Result< + operations.GetUsersResponse, + | OpalMcpError + | ResponseValidationError + | ConnectionError + | RequestAbortedError + | RequestTimeoutError + | InvalidRequestError + | UnexpectedClientError + | SDKValidationError + > + >; + "~next"?: { cursor: string }; + } => { + const nextCursor = dlv(responseData, "next"); + if (typeof nextCursor !== "string") { + return { next: () => null }; + } + const results = dlv(responseData, "results"); + if (!Array.isArray(results) || !results.length) { + return { next: () => null }; + } + const limit = request?.pageSize ?? 0; + if (results.length < limit) { + return { next: () => null }; + } + + const nextVal = () => + usersGetUsers( + client, + { + ...request, + cursor: nextCursor, + }, + options, + ); + + return { next: nextVal, "~next": { cursor: nextCursor } }; + }; + + const page = { ...result, ...nextFunc(raw) }; + return [{ ...page, ...createPageIterator(page, (v) => !v.ok) }, { + status: "complete", + request: req, + response, + }]; } diff --git a/src/lib/config.ts b/src/lib/config.ts index 9585f46..e93c4b5 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -61,7 +61,7 @@ export function serverURLFromOptions(options: SDKOptions): URL | null { export const SDK_METADATA = { language: "typescript", openapiDocVersion: "1.0", - sdkVersion: "0.6.2", - genVersion: "2.628.0", - userAgent: "speakeasy-sdk/typescript 0.6.2 2.628.0 1.0 opal-mcp", + sdkVersion: "0.7.1", + genVersion: "2.666.0", + userAgent: "speakeasy-sdk/typescript 0.7.1 2.666.0 1.0 opal-mcp", } as const; diff --git a/src/lib/security.ts b/src/lib/security.ts index 92d9c51..093d179 100644 --- a/src/lib/security.ts +++ b/src/lib/security.ts @@ -7,8 +7,8 @@ import { env } from "./env.js"; type OAuth2PasswordFlow = { username: string; - password?: string | undefined; - clientID: string; + password: string; + clientID?: string | undefined; clientSecret?: string | undefined; tokenURL: string; }; diff --git a/src/mcp-server/cli/start/command.ts b/src/mcp-server/cli/start/command.ts index 259f49e..1e29d61 100644 --- a/src/mcp-server/cli/start/command.ts +++ b/src/mcp-server/cli/start/command.ts @@ -37,18 +37,13 @@ export const startCommand = buildCommand({ return z.string().parse(value); }, }, - ...(mcpScopes.length - ? { - scope: { - kind: "enum", - brief: - "Mount tools/resources that match given scope (repeatable flag)", - values: mcpScopes, - variadic: true, - optional: true, - }, - } - : {}), + scope: { + kind: "enum", + brief: "Mount tools/resources that match given scope (repeatable flag)", + values: mcpScopes, + variadic: true, + optional: true, + }, "bearer-auth": { kind: "parsed", brief: "Sets the bearerAuth auth field for the API", diff --git a/src/mcp-server/mcp-server.ts b/src/mcp-server/mcp-server.ts index d250a25..2c78f74 100644 --- a/src/mcp-server/mcp-server.ts +++ b/src/mcp-server/mcp-server.ts @@ -19,7 +19,7 @@ const routes = buildRouteMap({ export const app = buildApplication(routes, { name: "mcp", versionInfo: { - currentVersion: "0.6.2", + currentVersion: "0.7.1", }, }); diff --git a/src/mcp-server/server.ts b/src/mcp-server/server.ts index 8643683..2e641e2 100644 --- a/src/mcp-server/server.ts +++ b/src/mcp-server/server.ts @@ -89,6 +89,7 @@ import { tool$ownersSetOwnerUsers } from "./tools/ownersSetOwnerUsers.js"; import { tool$ownersUpdateOwners } from "./tools/ownersUpdateOwners.js"; import { tool$requestsApproveRequest } from "./tools/requestsApproveRequest.js"; import { tool$requestsCreateRequest } from "./tools/requestsCreateRequest.js"; +import { tool$requestsGetRequest } from "./tools/requestsGetRequest.js"; import { tool$requestsGetRequests } from "./tools/requestsGetRequests.js"; import { tool$requestsGetRequestsRelay } from "./tools/requestsGetRequestsRelay.js"; import { tool$resourcesAddResourceNhi } from "./tools/resourcesAddResourceNhi.js"; @@ -103,6 +104,7 @@ import { tool$resourcesGetResourceNhis } from "./tools/resourcesGetResourceNhis. import { tool$resourcesGetResourceReviewers } from "./tools/resourcesGetResourceReviewers.js"; import { tool$resourcesGetResourceReviewerStages } from "./tools/resourcesGetResourceReviewerStages.js"; import { tool$resourcesGetResources } from "./tools/resourcesGetResources.js"; +import { tool$resourcesGetResourceScopedRolePermissions } from "./tools/resourcesGetResourceScopedRolePermissions.js"; import { tool$resourcesGetResourceTags } from "./tools/resourcesGetResourceTags.js"; import { tool$resourcesGetResourceUser } from "./tools/resourcesGetResourceUser.js"; import { tool$resourcesGetResourceUsers } from "./tools/resourcesGetResourceUsers.js"; @@ -111,6 +113,7 @@ import { tool$resourcesResourceUserAccessStatusRetrieve } from "./tools/resource import { tool$resourcesSetResourceMessageChannels } from "./tools/resourcesSetResourceMessageChannels.js"; import { tool$resourcesSetResourceReviewers } from "./tools/resourcesSetResourceReviewers.js"; import { tool$resourcesSetResourceReviewerStages } from "./tools/resourcesSetResourceReviewerStages.js"; +import { tool$resourcesSetResourceScopedRolePermissions } from "./tools/resourcesSetResourceScopedRolePermissions.js"; import { tool$resourcesSetResourceVisibility } from "./tools/resourcesSetResourceVisibility.js"; import { tool$resourcesUpdateResources } from "./tools/resourcesUpdateResources.js"; import { tool$resourcesUpdateResourceUser } from "./tools/resourcesUpdateResourceUser.js"; @@ -143,7 +146,7 @@ export function createMCPServer(deps: { }) { const server = new McpServer({ name: "OpalMcp", - version: "0.6.2", + version: "0.7.1", }); const client = new OpalMcpCore({ @@ -240,6 +243,7 @@ export function createMCPServer(deps: { tool(tool$requestsGetRequests); tool(tool$requestsCreateRequest); tool(tool$requestsGetRequestsRelay); + tool(tool$requestsGetRequest); tool(tool$requestsApproveRequest); tool(tool$resourcesGetResources); tool(tool$resourcesUpdateResources); @@ -264,6 +268,8 @@ export function createMCPServer(deps: { tool(tool$resourcesGetResourceUser); tool(tool$resourcesResourceUserAccessStatusRetrieve); tool(tool$resourcesGetResourceTags); + tool(tool$resourcesGetResourceScopedRolePermissions); + tool(tool$resourcesSetResourceScopedRolePermissions); tool(tool$nonHumanIdentitiesGetNhis); tool(tool$sessionsSessions); tool(tool$usersUser); diff --git a/src/mcp-server/tools/bundlesGetBundleGroups.ts b/src/mcp-server/tools/bundlesGetBundleGroups.ts index d6cf411..c0d30e6 100644 --- a/src/mcp-server/tools/bundlesGetBundleGroups.ts +++ b/src/mcp-server/tools/bundlesGetBundleGroups.ts @@ -29,7 +29,7 @@ export const tool$bundlesGetBundleGroups: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/bundlesGetBundleResources.ts b/src/mcp-server/tools/bundlesGetBundleResources.ts index e7adae2..babeebb 100644 --- a/src/mcp-server/tools/bundlesGetBundleResources.ts +++ b/src/mcp-server/tools/bundlesGetBundleResources.ts @@ -29,7 +29,7 @@ export const tool$bundlesGetBundleResources: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/bundlesGetBundles.ts b/src/mcp-server/tools/bundlesGetBundles.ts index 3191580..11c4941 100644 --- a/src/mcp-server/tools/bundlesGetBundles.ts +++ b/src/mcp-server/tools/bundlesGetBundles.ts @@ -29,7 +29,7 @@ export const tool$bundlesGetBundles: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/eventsEvents.ts b/src/mcp-server/tools/eventsEvents.ts index 1c95c31..36b204a 100644 --- a/src/mcp-server/tools/eventsEvents.ts +++ b/src/mcp-server/tools/eventsEvents.ts @@ -29,7 +29,7 @@ export const tool$eventsEvents: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/groupBindingsGetGroupBindings.ts b/src/mcp-server/tools/groupBindingsGetGroupBindings.ts index 54dbfa5..cfcda6d 100644 --- a/src/mcp-server/tools/groupBindingsGetGroupBindings.ts +++ b/src/mcp-server/tools/groupBindingsGetGroupBindings.ts @@ -29,7 +29,7 @@ export const tool$groupBindingsGetGroupBindings: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/groupsGetGroups.ts b/src/mcp-server/tools/groupsGetGroups.ts index 279ae0b..df90388 100644 --- a/src/mcp-server/tools/groupsGetGroups.ts +++ b/src/mcp-server/tools/groupsGetGroups.ts @@ -29,7 +29,7 @@ export const tool$groupsGetGroups: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/nonHumanIdentitiesGetNhis.ts b/src/mcp-server/tools/nonHumanIdentitiesGetNhis.ts index d2a1bf4..d539254 100644 --- a/src/mcp-server/tools/nonHumanIdentitiesGetNhis.ts +++ b/src/mcp-server/tools/nonHumanIdentitiesGetNhis.ts @@ -29,7 +29,7 @@ export const tool$nonHumanIdentitiesGetNhis: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/ownersGetOwners.ts b/src/mcp-server/tools/ownersGetOwners.ts index 68306cb..9a315a2 100644 --- a/src/mcp-server/tools/ownersGetOwners.ts +++ b/src/mcp-server/tools/ownersGetOwners.ts @@ -29,7 +29,7 @@ export const tool$ownersGetOwners: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/requestsGetRequest.ts b/src/mcp-server/tools/requestsGetRequest.ts new file mode 100644 index 0000000..18d2804 --- /dev/null +++ b/src/mcp-server/tools/requestsGetRequest.ts @@ -0,0 +1,36 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { requestsGetRequest } from "../../funcs/requestsGetRequest.js"; +import * as operations from "../../models/operations/index.js"; +import { formatResult, ToolDefinition } from "../tools.js"; + +const args = { + request: operations.GetRequestRequest$inboundSchema, +}; + +export const tool$requestsGetRequest: ToolDefinition = { + name: "requests-get-request", + description: `Returns a request by ID.`, + scopes: ["read"], + args, + tool: async (client, args, ctx) => { + const [result, apiCall] = await requestsGetRequest( + client, + args.request, + { fetchOptions: { signal: ctx.signal } }, + ).$inspect(); + + if (!result.ok) { + return { + content: [{ type: "text", text: result.error.message }], + isError: true, + }; + } + + const value = result.value; + + return formatResult(value, apiCall); + }, +}; diff --git a/src/mcp-server/tools/requestsGetRequests.ts b/src/mcp-server/tools/requestsGetRequests.ts index d9d8130..d232748 100644 --- a/src/mcp-server/tools/requestsGetRequests.ts +++ b/src/mcp-server/tools/requestsGetRequests.ts @@ -30,7 +30,7 @@ export const tool$requestsGetRequests: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/resourcesGetResourceScopedRolePermissions.ts b/src/mcp-server/tools/resourcesGetResourceScopedRolePermissions.ts new file mode 100644 index 0000000..623b18e --- /dev/null +++ b/src/mcp-server/tools/resourcesGetResourceScopedRolePermissions.ts @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { resourcesGetResourceScopedRolePermissions } from "../../funcs/resourcesGetResourceScopedRolePermissions.js"; +import * as operations from "../../models/operations/index.js"; +import { formatResult, ToolDefinition } from "../tools.js"; + +const args = { + request: operations.GetResourceScopedRolePermissionsRequest$inboundSchema, +}; + +export const tool$resourcesGetResourceScopedRolePermissions: ToolDefinition< + typeof args +> = { + name: "resources-get-resource-scoped-role-permissions", + description: + `Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field.`, + scopes: ["read"], + args, + tool: async (client, args, ctx) => { + const [result, apiCall] = await resourcesGetResourceScopedRolePermissions( + client, + args.request, + { fetchOptions: { signal: ctx.signal } }, + ).$inspect(); + + if (!result.ok) { + return { + content: [{ type: "text", text: result.error.message }], + isError: true, + }; + } + + const value = result.value; + + return formatResult(value, apiCall); + }, +}; diff --git a/src/mcp-server/tools/resourcesGetResources.ts b/src/mcp-server/tools/resourcesGetResources.ts index 813bb67..83d1a56 100644 --- a/src/mcp-server/tools/resourcesGetResources.ts +++ b/src/mcp-server/tools/resourcesGetResources.ts @@ -29,7 +29,7 @@ export const tool$resourcesGetResources: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/resourcesSetResourceScopedRolePermissions.ts b/src/mcp-server/tools/resourcesSetResourceScopedRolePermissions.ts new file mode 100644 index 0000000..c1f0bd2 --- /dev/null +++ b/src/mcp-server/tools/resourcesSetResourceScopedRolePermissions.ts @@ -0,0 +1,39 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { resourcesSetResourceScopedRolePermissions } from "../../funcs/resourcesSetResourceScopedRolePermissions.js"; +import * as operations from "../../models/operations/index.js"; +import { formatResult, ToolDefinition } from "../tools.js"; + +const args = { + request: operations.SetResourceScopedRolePermissionsRequest$inboundSchema, +}; + +export const tool$resourcesSetResourceScopedRolePermissions: ToolDefinition< + typeof args +> = { + name: "resources-set-resource-scoped-role-permissions", + description: + `Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource.`, + scopes: ["write"], + args, + tool: async (client, args, ctx) => { + const [result, apiCall] = await resourcesSetResourceScopedRolePermissions( + client, + args.request, + { fetchOptions: { signal: ctx.signal } }, + ).$inspect(); + + if (!result.ok) { + return { + content: [{ type: "text", text: result.error.message }], + isError: true, + }; + } + + const value = result.value; + + return formatResult(value, apiCall); + }, +}; diff --git a/src/mcp-server/tools/tagsGetTags.ts b/src/mcp-server/tools/tagsGetTags.ts index df1bf82..6cd51cc 100644 --- a/src/mcp-server/tools/tagsGetTags.ts +++ b/src/mcp-server/tools/tagsGetTags.ts @@ -29,7 +29,7 @@ export const tool$tagsGetTags: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/uarsGetUARs.ts b/src/mcp-server/tools/uarsGetUARs.ts index 5f20ee2..e2764eb 100644 --- a/src/mcp-server/tools/uarsGetUARs.ts +++ b/src/mcp-server/tools/uarsGetUARs.ts @@ -29,7 +29,7 @@ export const tool$uarsGetUARs: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/mcp-server/tools/usersGetUsers.ts b/src/mcp-server/tools/usersGetUsers.ts index 6c6c001..0a5af20 100644 --- a/src/mcp-server/tools/usersGetUsers.ts +++ b/src/mcp-server/tools/usersGetUsers.ts @@ -29,7 +29,7 @@ export const tool$usersGetUsers: ToolDefinition = { }; } - const value = result.value; + const value = result.value.result; return formatResult(value, apiCall); }, diff --git a/src/models/components/groupremoteinfo.ts b/src/models/components/groupremoteinfo.ts index e918eb6..688785e 100644 --- a/src/models/components/groupremoteinfo.ts +++ b/src/models/components/groupremoteinfo.ts @@ -114,6 +114,26 @@ export type SnowflakeRole = { roleId: string; }; +/** + * Remote info for Okta Directory group rule. + */ +export type OktaGroupRule = { + /** + * The id of the Okta group rule. + */ + ruleId: string; +}; + +/** + * Remote info for Workday User Security group. + */ +export type WorkdayUserSecurityGroup = { + /** + * The id of the Workday User Security group. + */ + groupId: string; +}; + /** * Information that defines the remote group. This replaces the deprecated remote_id and metadata fields. */ @@ -158,6 +178,14 @@ export type GroupRemoteInfo = { * Remote info for Snowflake role. */ snowflakeRole?: SnowflakeRole | undefined; + /** + * Remote info for Okta Directory group rule. + */ + oktaGroupRule?: OktaGroupRule | undefined; + /** + * Remote info for Workday User Security group. + */ + workdayUserSecurityGroup?: WorkdayUserSecurityGroup | undefined; }; /** @internal */ @@ -757,6 +785,126 @@ export function snowflakeRoleFromJSON( ); } +/** @internal */ +export const OktaGroupRule$inboundSchema: z.ZodType< + OktaGroupRule, + z.ZodTypeDef, + unknown +> = z.object({ + rule_id: z.string(), +}).transform((v) => { + return remap$(v, { + "rule_id": "ruleId", + }); +}); + +/** @internal */ +export type OktaGroupRule$Outbound = { + rule_id: string; +}; + +/** @internal */ +export const OktaGroupRule$outboundSchema: z.ZodType< + OktaGroupRule$Outbound, + z.ZodTypeDef, + OktaGroupRule +> = z.object({ + ruleId: z.string(), +}).transform((v) => { + return remap$(v, { + ruleId: "rule_id", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace OktaGroupRule$ { + /** @deprecated use `OktaGroupRule$inboundSchema` instead. */ + export const inboundSchema = OktaGroupRule$inboundSchema; + /** @deprecated use `OktaGroupRule$outboundSchema` instead. */ + export const outboundSchema = OktaGroupRule$outboundSchema; + /** @deprecated use `OktaGroupRule$Outbound` instead. */ + export type Outbound = OktaGroupRule$Outbound; +} + +export function oktaGroupRuleToJSON(oktaGroupRule: OktaGroupRule): string { + return JSON.stringify(OktaGroupRule$outboundSchema.parse(oktaGroupRule)); +} + +export function oktaGroupRuleFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => OktaGroupRule$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'OktaGroupRule' from JSON`, + ); +} + +/** @internal */ +export const WorkdayUserSecurityGroup$inboundSchema: z.ZodType< + WorkdayUserSecurityGroup, + z.ZodTypeDef, + unknown +> = z.object({ + group_id: z.string(), +}).transform((v) => { + return remap$(v, { + "group_id": "groupId", + }); +}); + +/** @internal */ +export type WorkdayUserSecurityGroup$Outbound = { + group_id: string; +}; + +/** @internal */ +export const WorkdayUserSecurityGroup$outboundSchema: z.ZodType< + WorkdayUserSecurityGroup$Outbound, + z.ZodTypeDef, + WorkdayUserSecurityGroup +> = z.object({ + groupId: z.string(), +}).transform((v) => { + return remap$(v, { + groupId: "group_id", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace WorkdayUserSecurityGroup$ { + /** @deprecated use `WorkdayUserSecurityGroup$inboundSchema` instead. */ + export const inboundSchema = WorkdayUserSecurityGroup$inboundSchema; + /** @deprecated use `WorkdayUserSecurityGroup$outboundSchema` instead. */ + export const outboundSchema = WorkdayUserSecurityGroup$outboundSchema; + /** @deprecated use `WorkdayUserSecurityGroup$Outbound` instead. */ + export type Outbound = WorkdayUserSecurityGroup$Outbound; +} + +export function workdayUserSecurityGroupToJSON( + workdayUserSecurityGroup: WorkdayUserSecurityGroup, +): string { + return JSON.stringify( + WorkdayUserSecurityGroup$outboundSchema.parse(workdayUserSecurityGroup), + ); +} + +export function workdayUserSecurityGroupFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => WorkdayUserSecurityGroup$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'WorkdayUserSecurityGroup' from JSON`, + ); +} + /** @internal */ export const GroupRemoteInfo$inboundSchema: z.ZodType< GroupRemoteInfo, @@ -777,6 +925,10 @@ export const GroupRemoteInfo$inboundSchema: z.ZodType< AzureAdMicrosoft365Group$inboundSchema ).optional(), snowflake_role: z.lazy(() => SnowflakeRole$inboundSchema).optional(), + okta_group_rule: z.lazy(() => OktaGroupRule$inboundSchema).optional(), + workday_user_security_group: z.lazy(() => + WorkdayUserSecurityGroup$inboundSchema + ).optional(), }).transform((v) => { return remap$(v, { "active_directory_group": "activeDirectoryGroup", @@ -789,6 +941,8 @@ export const GroupRemoteInfo$inboundSchema: z.ZodType< "azure_ad_security_group": "azureAdSecurityGroup", "azure_ad_microsoft_365_group": "azureAdMicrosoft365Group", "snowflake_role": "snowflakeRole", + "okta_group_rule": "oktaGroupRule", + "workday_user_security_group": "workdayUserSecurityGroup", }); }); @@ -804,6 +958,8 @@ export type GroupRemoteInfo$Outbound = { azure_ad_security_group?: AzureAdSecurityGroup$Outbound | undefined; azure_ad_microsoft_365_group?: AzureAdMicrosoft365Group$Outbound | undefined; snowflake_role?: SnowflakeRole$Outbound | undefined; + okta_group_rule?: OktaGroupRule$Outbound | undefined; + workday_user_security_group?: WorkdayUserSecurityGroup$Outbound | undefined; }; /** @internal */ @@ -826,6 +982,10 @@ export const GroupRemoteInfo$outboundSchema: z.ZodType< AzureAdMicrosoft365Group$outboundSchema ).optional(), snowflakeRole: z.lazy(() => SnowflakeRole$outboundSchema).optional(), + oktaGroupRule: z.lazy(() => OktaGroupRule$outboundSchema).optional(), + workdayUserSecurityGroup: z.lazy(() => + WorkdayUserSecurityGroup$outboundSchema + ).optional(), }).transform((v) => { return remap$(v, { activeDirectoryGroup: "active_directory_group", @@ -838,6 +998,8 @@ export const GroupRemoteInfo$outboundSchema: z.ZodType< azureAdSecurityGroup: "azure_ad_security_group", azureAdMicrosoft365Group: "azure_ad_microsoft_365_group", snowflakeRole: "snowflake_role", + oktaGroupRule: "okta_group_rule", + workdayUserSecurityGroup: "workday_user_security_group", }); }); diff --git a/src/models/components/index.ts b/src/models/components/index.ts index 3d7e286..17512f0 100644 --- a/src/models/components/index.ts +++ b/src/models/components/index.ts @@ -97,9 +97,13 @@ export * from "./reviewerstage.js"; export * from "./reviewerstagelist.js"; export * from "./reviewstageoperator.js"; export * from "./risksensitivityenum.js"; +export * from "./rolepermissionnameenum.js"; +export * from "./rolepermissiontargettypeenum.js"; export * from "./ruleclauses.js"; export * from "./ruleconjunction.js"; export * from "./ruledisjunction.js"; +export * from "./scopedrolepermission.js"; +export * from "./scopedrolepermissionlist.js"; export * from "./security.js"; export * from "./session.js"; export * from "./sessionslist.js"; diff --git a/src/models/components/request.ts b/src/models/components/request.ts index 3900347..a228614 100644 --- a/src/models/components/request.ts +++ b/src/models/components/request.ts @@ -41,7 +41,7 @@ import { * ### Usage Example * Returned from the `GET Requests` endpoint. */ -export type Request = { +export type RequestT = { /** * The unique identifier of the request. */ @@ -100,40 +100,39 @@ export type Request = { }; /** @internal */ -export const Request$inboundSchema: z.ZodType = - z.object({ - id: z.string(), - created_at: z.string().datetime({ offset: true }).transform(v => - new Date(v) - ), - updated_at: z.string().datetime({ offset: true }).transform(v => - new Date(v) - ), - requester_id: z.string(), - target_user_id: z.string().optional(), - target_group_id: z.string().optional(), - status: RequestStatusEnum$inboundSchema, - reason: z.string(), - duration_minutes: z.number().int().optional(), - requested_items_list: z.array(RequestedItem$inboundSchema).optional(), - custom_fields_responses: z.array(RequestCustomFieldResponse$inboundSchema) - .optional(), - stages: RequestItemStages$inboundSchema.optional(), - }).transform((v) => { - return remap$(v, { - "created_at": "createdAt", - "updated_at": "updatedAt", - "requester_id": "requesterId", - "target_user_id": "targetUserId", - "target_group_id": "targetGroupId", - "duration_minutes": "durationMinutes", - "requested_items_list": "requestedItemsList", - "custom_fields_responses": "customFieldsResponses", - }); +export const RequestT$inboundSchema: z.ZodType< + RequestT, + z.ZodTypeDef, + unknown +> = z.object({ + id: z.string(), + created_at: z.string().datetime({ offset: true }).transform(v => new Date(v)), + updated_at: z.string().datetime({ offset: true }).transform(v => new Date(v)), + requester_id: z.string(), + target_user_id: z.string().optional(), + target_group_id: z.string().optional(), + status: RequestStatusEnum$inboundSchema, + reason: z.string(), + duration_minutes: z.number().int().optional(), + requested_items_list: z.array(RequestedItem$inboundSchema).optional(), + custom_fields_responses: z.array(RequestCustomFieldResponse$inboundSchema) + .optional(), + stages: RequestItemStages$inboundSchema.optional(), +}).transform((v) => { + return remap$(v, { + "created_at": "createdAt", + "updated_at": "updatedAt", + "requester_id": "requesterId", + "target_user_id": "targetUserId", + "target_group_id": "targetGroupId", + "duration_minutes": "durationMinutes", + "requested_items_list": "requestedItemsList", + "custom_fields_responses": "customFieldsResponses", }); +}); /** @internal */ -export type Request$Outbound = { +export type RequestT$Outbound = { id: string; created_at: string; updated_at: string; @@ -151,10 +150,10 @@ export type Request$Outbound = { }; /** @internal */ -export const Request$outboundSchema: z.ZodType< - Request$Outbound, +export const RequestT$outboundSchema: z.ZodType< + RequestT$Outbound, z.ZodTypeDef, - Request + RequestT > = z.object({ id: z.string(), createdAt: z.date().transform(v => v.toISOString()), @@ -186,25 +185,25 @@ export const Request$outboundSchema: z.ZodType< * @internal * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. */ -export namespace Request$ { - /** @deprecated use `Request$inboundSchema` instead. */ - export const inboundSchema = Request$inboundSchema; - /** @deprecated use `Request$outboundSchema` instead. */ - export const outboundSchema = Request$outboundSchema; - /** @deprecated use `Request$Outbound` instead. */ - export type Outbound = Request$Outbound; +export namespace RequestT$ { + /** @deprecated use `RequestT$inboundSchema` instead. */ + export const inboundSchema = RequestT$inboundSchema; + /** @deprecated use `RequestT$outboundSchema` instead. */ + export const outboundSchema = RequestT$outboundSchema; + /** @deprecated use `RequestT$Outbound` instead. */ + export type Outbound = RequestT$Outbound; } -export function requestToJSON(request: Request): string { - return JSON.stringify(Request$outboundSchema.parse(request)); +export function requestToJSON(requestT: RequestT): string { + return JSON.stringify(RequestT$outboundSchema.parse(requestT)); } export function requestFromJSON( jsonString: string, -): SafeParseResult { +): SafeParseResult { return safeParse( jsonString, - (x) => Request$inboundSchema.parse(JSON.parse(x)), - `Failed to parse 'Request' from JSON`, + (x) => RequestT$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'RequestT' from JSON`, ); } diff --git a/src/models/components/requestedge.ts b/src/models/components/requestedge.ts index 190b378..22cbc78 100644 --- a/src/models/components/requestedge.ts +++ b/src/models/components/requestedge.ts @@ -7,10 +7,10 @@ import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; import { - Request, - Request$inboundSchema, - Request$Outbound, - Request$outboundSchema, + RequestT, + RequestT$inboundSchema, + RequestT$Outbound, + RequestT$outboundSchema, } from "./request.js"; export type RequestEdge = { @@ -24,7 +24,7 @@ export type RequestEdge = { * ### Usage Example * Returned from the `GET Requests` endpoint. */ - node: Request; + node: RequestT; /** * The cursor for this request edge */ @@ -37,13 +37,13 @@ export const RequestEdge$inboundSchema: z.ZodType< z.ZodTypeDef, unknown > = z.object({ - node: Request$inboundSchema, + node: RequestT$inboundSchema, cursor: z.string(), }); /** @internal */ export type RequestEdge$Outbound = { - node: Request$Outbound; + node: RequestT$Outbound; cursor: string; }; @@ -53,7 +53,7 @@ export const RequestEdge$outboundSchema: z.ZodType< z.ZodTypeDef, RequestEdge > = z.object({ - node: Request$outboundSchema, + node: RequestT$outboundSchema, cursor: z.string(), }); diff --git a/src/models/components/requesteditem.ts b/src/models/components/requesteditem.ts index 05d31c7..11a3b1b 100644 --- a/src/models/components/requesteditem.ts +++ b/src/models/components/requesteditem.ts @@ -39,6 +39,14 @@ export type RequestedItem = { * The name of the target. */ name?: string | undefined; + /** + * The ID of the target on the remote system. + */ + remoteId?: string | undefined; + /** + * The name of the target on the remote system. + */ + remoteName?: string | undefined; }; /** @internal */ @@ -52,12 +60,16 @@ export const RequestedItem$inboundSchema: z.ZodType< access_level_name: z.string().optional(), access_level_remote_id: z.string().optional(), name: z.string().optional(), + remote_id: z.string().optional(), + remote_name: z.string().optional(), }).transform((v) => { return remap$(v, { "resource_id": "resourceId", "group_id": "groupId", "access_level_name": "accessLevelName", "access_level_remote_id": "accessLevelRemoteId", + "remote_id": "remoteId", + "remote_name": "remoteName", }); }); @@ -68,6 +80,8 @@ export type RequestedItem$Outbound = { access_level_name?: string | undefined; access_level_remote_id?: string | undefined; name?: string | undefined; + remote_id?: string | undefined; + remote_name?: string | undefined; }; /** @internal */ @@ -81,12 +95,16 @@ export const RequestedItem$outboundSchema: z.ZodType< accessLevelName: z.string().optional(), accessLevelRemoteId: z.string().optional(), name: z.string().optional(), + remoteId: z.string().optional(), + remoteName: z.string().optional(), }).transform((v) => { return remap$(v, { resourceId: "resource_id", groupId: "group_id", accessLevelName: "access_level_name", accessLevelRemoteId: "access_level_remote_id", + remoteId: "remote_id", + remoteName: "remote_name", }); }); diff --git a/src/models/components/requestlist.ts b/src/models/components/requestlist.ts index d248902..bfbc407 100644 --- a/src/models/components/requestlist.ts +++ b/src/models/components/requestlist.ts @@ -7,10 +7,10 @@ import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; import { - Request, - Request$inboundSchema, - Request$Outbound, - Request$outboundSchema, + RequestT, + RequestT$inboundSchema, + RequestT$Outbound, + RequestT$outboundSchema, } from "./request.js"; /** @@ -27,7 +27,7 @@ export type RequestList = { /** * The list of requests. */ - requests?: Array | undefined; + requests?: Array | undefined; /** * The cursor to use in the next request to get the next page of results. */ @@ -40,13 +40,13 @@ export const RequestList$inboundSchema: z.ZodType< z.ZodTypeDef, unknown > = z.object({ - requests: z.array(Request$inboundSchema).optional(), + requests: z.array(RequestT$inboundSchema).optional(), cursor: z.string().optional(), }); /** @internal */ export type RequestList$Outbound = { - requests?: Array | undefined; + requests?: Array | undefined; cursor?: string | undefined; }; @@ -56,7 +56,7 @@ export const RequestList$outboundSchema: z.ZodType< z.ZodTypeDef, RequestList > = z.object({ - requests: z.array(Request$outboundSchema).optional(), + requests: z.array(RequestT$outboundSchema).optional(), cursor: z.string().optional(), }); diff --git a/src/models/components/resourceremoteinfo.ts b/src/models/components/resourceremoteinfo.ts index f3faeb0..b271ff3 100644 --- a/src/models/components/resourceremoteinfo.ts +++ b/src/models/components/resourceremoteinfo.ts @@ -8,6 +8,20 @@ import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; +/** + * Remote info for AWS organizational unit. + */ +export type AwsOrganizationalUnit = { + /** + * The id of the parent organizational unit. + */ + parentId?: string | undefined; + /** + * The id of the AWS organizational unit that is being created. + */ + organizationalUnitId: string; +}; + /** * Remote info for AWS account. */ @@ -16,6 +30,10 @@ export type AwsAccount = { * The id of the AWS account. */ accountId: string; + /** + * The id of the AWS organizational unit. Required only if customer has OUs enabled. + */ + organizationalUnitId?: string | undefined; }; /** @@ -100,6 +118,20 @@ export type AwsEksCluster = { accountId?: string | undefined; }; +/** + * Remote info for a custom connector resource. + */ +export type CustomConnector = { + /** + * The id of the resource in the end system + */ + remoteResourceId: string; + /** + * A bool representing whether or not the resource can have usage data. + */ + canHaveUsageEvents: boolean; +}; + /** * Remote info for GCP organization. */ @@ -232,6 +264,16 @@ export type GcpServiceAccount = { projectId: string; }; +/** + * Remote info for GCP workspace role. + */ +export type GoogleWorkspaceRole = { + /** + * The id of the role. + */ + roleId: string; +}; + /** * Remote info for GitHub repository. */ @@ -346,6 +388,10 @@ export type TeleportRole = { * Information that defines the remote resource. This replaces the deprecated remote_id and metadata fields. */ export type ResourceRemoteInfo = { + /** + * Remote info for AWS organizational unit. + */ + awsOrganizationalUnit?: AwsOrganizationalUnit | undefined; /** * Remote info for AWS account. */ @@ -370,6 +416,10 @@ export type ResourceRemoteInfo = { * Remote info for AWS EKS cluster. */ awsEksCluster?: AwsEksCluster | undefined; + /** + * Remote info for a custom connector resource. + */ + customConnector?: CustomConnector | undefined; /** * Remote info for GCP organization. */ @@ -410,6 +460,10 @@ export type ResourceRemoteInfo = { * Remote info for a GCP service account. */ gcpServiceAccount?: GcpServiceAccount | undefined; + /** + * Remote info for GCP workspace role. + */ + googleWorkspaceRole?: GoogleWorkspaceRole | undefined; /** * Remote info for GitHub repository. */ @@ -452,6 +506,73 @@ export type ResourceRemoteInfo = { teleportRole?: TeleportRole | undefined; }; +/** @internal */ +export const AwsOrganizationalUnit$inboundSchema: z.ZodType< + AwsOrganizationalUnit, + z.ZodTypeDef, + unknown +> = z.object({ + parent_id: z.string().optional(), + organizational_unit_id: z.string(), +}).transform((v) => { + return remap$(v, { + "parent_id": "parentId", + "organizational_unit_id": "organizationalUnitId", + }); +}); + +/** @internal */ +export type AwsOrganizationalUnit$Outbound = { + parent_id?: string | undefined; + organizational_unit_id: string; +}; + +/** @internal */ +export const AwsOrganizationalUnit$outboundSchema: z.ZodType< + AwsOrganizationalUnit$Outbound, + z.ZodTypeDef, + AwsOrganizationalUnit +> = z.object({ + parentId: z.string().optional(), + organizationalUnitId: z.string(), +}).transform((v) => { + return remap$(v, { + parentId: "parent_id", + organizationalUnitId: "organizational_unit_id", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace AwsOrganizationalUnit$ { + /** @deprecated use `AwsOrganizationalUnit$inboundSchema` instead. */ + export const inboundSchema = AwsOrganizationalUnit$inboundSchema; + /** @deprecated use `AwsOrganizationalUnit$outboundSchema` instead. */ + export const outboundSchema = AwsOrganizationalUnit$outboundSchema; + /** @deprecated use `AwsOrganizationalUnit$Outbound` instead. */ + export type Outbound = AwsOrganizationalUnit$Outbound; +} + +export function awsOrganizationalUnitToJSON( + awsOrganizationalUnit: AwsOrganizationalUnit, +): string { + return JSON.stringify( + AwsOrganizationalUnit$outboundSchema.parse(awsOrganizationalUnit), + ); +} + +export function awsOrganizationalUnitFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => AwsOrganizationalUnit$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'AwsOrganizationalUnit' from JSON`, + ); +} + /** @internal */ export const AwsAccount$inboundSchema: z.ZodType< AwsAccount, @@ -459,15 +580,18 @@ export const AwsAccount$inboundSchema: z.ZodType< unknown > = z.object({ account_id: z.string(), + organizational_unit_id: z.string().optional(), }).transform((v) => { return remap$(v, { "account_id": "accountId", + "organizational_unit_id": "organizationalUnitId", }); }); /** @internal */ export type AwsAccount$Outbound = { account_id: string; + organizational_unit_id?: string | undefined; }; /** @internal */ @@ -477,9 +601,11 @@ export const AwsAccount$outboundSchema: z.ZodType< AwsAccount > = z.object({ accountId: z.string(), + organizationalUnitId: z.string().optional(), }).transform((v) => { return remap$(v, { accountId: "account_id", + organizationalUnitId: "organizational_unit_id", }); }); @@ -834,6 +960,71 @@ export function awsEksClusterFromJSON( ); } +/** @internal */ +export const CustomConnector$inboundSchema: z.ZodType< + CustomConnector, + z.ZodTypeDef, + unknown +> = z.object({ + remote_resource_id: z.string(), + can_have_usage_events: z.boolean(), +}).transform((v) => { + return remap$(v, { + "remote_resource_id": "remoteResourceId", + "can_have_usage_events": "canHaveUsageEvents", + }); +}); + +/** @internal */ +export type CustomConnector$Outbound = { + remote_resource_id: string; + can_have_usage_events: boolean; +}; + +/** @internal */ +export const CustomConnector$outboundSchema: z.ZodType< + CustomConnector$Outbound, + z.ZodTypeDef, + CustomConnector +> = z.object({ + remoteResourceId: z.string(), + canHaveUsageEvents: z.boolean(), +}).transform((v) => { + return remap$(v, { + remoteResourceId: "remote_resource_id", + canHaveUsageEvents: "can_have_usage_events", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace CustomConnector$ { + /** @deprecated use `CustomConnector$inboundSchema` instead. */ + export const inboundSchema = CustomConnector$inboundSchema; + /** @deprecated use `CustomConnector$outboundSchema` instead. */ + export const outboundSchema = CustomConnector$outboundSchema; + /** @deprecated use `CustomConnector$Outbound` instead. */ + export type Outbound = CustomConnector$Outbound; +} + +export function customConnectorToJSON( + customConnector: CustomConnector, +): string { + return JSON.stringify(CustomConnector$outboundSchema.parse(customConnector)); +} + +export function customConnectorFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => CustomConnector$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'CustomConnector' from JSON`, + ); +} + /** @internal */ export const GcpOrganization$inboundSchema: z.ZodType< GcpOrganization, @@ -1468,6 +1659,68 @@ export function gcpServiceAccountFromJSON( ); } +/** @internal */ +export const GoogleWorkspaceRole$inboundSchema: z.ZodType< + GoogleWorkspaceRole, + z.ZodTypeDef, + unknown +> = z.object({ + role_id: z.string(), +}).transform((v) => { + return remap$(v, { + "role_id": "roleId", + }); +}); + +/** @internal */ +export type GoogleWorkspaceRole$Outbound = { + role_id: string; +}; + +/** @internal */ +export const GoogleWorkspaceRole$outboundSchema: z.ZodType< + GoogleWorkspaceRole$Outbound, + z.ZodTypeDef, + GoogleWorkspaceRole +> = z.object({ + roleId: z.string(), +}).transform((v) => { + return remap$(v, { + roleId: "role_id", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GoogleWorkspaceRole$ { + /** @deprecated use `GoogleWorkspaceRole$inboundSchema` instead. */ + export const inboundSchema = GoogleWorkspaceRole$inboundSchema; + /** @deprecated use `GoogleWorkspaceRole$outboundSchema` instead. */ + export const outboundSchema = GoogleWorkspaceRole$outboundSchema; + /** @deprecated use `GoogleWorkspaceRole$Outbound` instead. */ + export type Outbound = GoogleWorkspaceRole$Outbound; +} + +export function googleWorkspaceRoleToJSON( + googleWorkspaceRole: GoogleWorkspaceRole, +): string { + return JSON.stringify( + GoogleWorkspaceRole$outboundSchema.parse(googleWorkspaceRole), + ); +} + +export function googleWorkspaceRoleFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GoogleWorkspaceRole$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GoogleWorkspaceRole' from JSON`, + ); +} + /** @internal */ export const GithubRepo$inboundSchema: z.ZodType< GithubRepo, @@ -2073,12 +2326,15 @@ export const ResourceRemoteInfo$inboundSchema: z.ZodType< z.ZodTypeDef, unknown > = z.object({ + aws_organizational_unit: z.lazy(() => AwsOrganizationalUnit$inboundSchema) + .optional(), aws_account: z.lazy(() => AwsAccount$inboundSchema).optional(), aws_permission_set: z.lazy(() => AwsPermissionSet$inboundSchema).optional(), aws_iam_role: z.lazy(() => AwsIamRole$inboundSchema).optional(), aws_ec2_instance: z.lazy(() => AwsEc2Instance$inboundSchema).optional(), aws_rds_instance: z.lazy(() => AwsRdsInstance$inboundSchema).optional(), aws_eks_cluster: z.lazy(() => AwsEksCluster$inboundSchema).optional(), + custom_connector: z.lazy(() => CustomConnector$inboundSchema).optional(), gcp_organization: z.lazy(() => GcpOrganization$inboundSchema).optional(), gcp_bucket: z.lazy(() => GcpBucket$inboundSchema).optional(), gcp_compute_instance: z.lazy(() => GcpComputeInstance$inboundSchema) @@ -2091,6 +2347,8 @@ export const ResourceRemoteInfo$inboundSchema: z.ZodType< gcp_project: z.lazy(() => GcpProject$inboundSchema).optional(), gcp_sql_instance: z.lazy(() => GcpSqlInstance$inboundSchema).optional(), gcp_service_account: z.lazy(() => GcpServiceAccount$inboundSchema).optional(), + google_workspace_role: z.lazy(() => GoogleWorkspaceRole$inboundSchema) + .optional(), github_repo: z.lazy(() => GithubRepo$inboundSchema).optional(), gitlab_project: z.lazy(() => GitlabProject$inboundSchema).optional(), okta_app: z.lazy(() => OktaApp$inboundSchema).optional(), @@ -2104,12 +2362,14 @@ export const ResourceRemoteInfo$inboundSchema: z.ZodType< teleport_role: z.lazy(() => TeleportRole$inboundSchema).optional(), }).transform((v) => { return remap$(v, { + "aws_organizational_unit": "awsOrganizationalUnit", "aws_account": "awsAccount", "aws_permission_set": "awsPermissionSet", "aws_iam_role": "awsIamRole", "aws_ec2_instance": "awsEc2Instance", "aws_rds_instance": "awsRdsInstance", "aws_eks_cluster": "awsEksCluster", + "custom_connector": "customConnector", "gcp_organization": "gcpOrganization", "gcp_bucket": "gcpBucket", "gcp_compute_instance": "gcpComputeInstance", @@ -2120,6 +2380,7 @@ export const ResourceRemoteInfo$inboundSchema: z.ZodType< "gcp_project": "gcpProject", "gcp_sql_instance": "gcpSqlInstance", "gcp_service_account": "gcpServiceAccount", + "google_workspace_role": "googleWorkspaceRole", "github_repo": "githubRepo", "gitlab_project": "gitlabProject", "okta_app": "oktaApp", @@ -2135,12 +2396,14 @@ export const ResourceRemoteInfo$inboundSchema: z.ZodType< /** @internal */ export type ResourceRemoteInfo$Outbound = { + aws_organizational_unit?: AwsOrganizationalUnit$Outbound | undefined; aws_account?: AwsAccount$Outbound | undefined; aws_permission_set?: AwsPermissionSet$Outbound | undefined; aws_iam_role?: AwsIamRole$Outbound | undefined; aws_ec2_instance?: AwsEc2Instance$Outbound | undefined; aws_rds_instance?: AwsRdsInstance$Outbound | undefined; aws_eks_cluster?: AwsEksCluster$Outbound | undefined; + custom_connector?: CustomConnector$Outbound | undefined; gcp_organization?: GcpOrganization$Outbound | undefined; gcp_bucket?: GcpBucket$Outbound | undefined; gcp_compute_instance?: GcpComputeInstance$Outbound | undefined; @@ -2151,6 +2414,7 @@ export type ResourceRemoteInfo$Outbound = { gcp_project?: GcpProject$Outbound | undefined; gcp_sql_instance?: GcpSqlInstance$Outbound | undefined; gcp_service_account?: GcpServiceAccount$Outbound | undefined; + google_workspace_role?: GoogleWorkspaceRole$Outbound | undefined; github_repo?: GithubRepo$Outbound | undefined; gitlab_project?: GitlabProject$Outbound | undefined; okta_app?: OktaApp$Outbound | undefined; @@ -2169,12 +2433,15 @@ export const ResourceRemoteInfo$outboundSchema: z.ZodType< z.ZodTypeDef, ResourceRemoteInfo > = z.object({ + awsOrganizationalUnit: z.lazy(() => AwsOrganizationalUnit$outboundSchema) + .optional(), awsAccount: z.lazy(() => AwsAccount$outboundSchema).optional(), awsPermissionSet: z.lazy(() => AwsPermissionSet$outboundSchema).optional(), awsIamRole: z.lazy(() => AwsIamRole$outboundSchema).optional(), awsEc2Instance: z.lazy(() => AwsEc2Instance$outboundSchema).optional(), awsRdsInstance: z.lazy(() => AwsRdsInstance$outboundSchema).optional(), awsEksCluster: z.lazy(() => AwsEksCluster$outboundSchema).optional(), + customConnector: z.lazy(() => CustomConnector$outboundSchema).optional(), gcpOrganization: z.lazy(() => GcpOrganization$outboundSchema).optional(), gcpBucket: z.lazy(() => GcpBucket$outboundSchema).optional(), gcpComputeInstance: z.lazy(() => GcpComputeInstance$outboundSchema) @@ -2187,6 +2454,8 @@ export const ResourceRemoteInfo$outboundSchema: z.ZodType< gcpProject: z.lazy(() => GcpProject$outboundSchema).optional(), gcpSqlInstance: z.lazy(() => GcpSqlInstance$outboundSchema).optional(), gcpServiceAccount: z.lazy(() => GcpServiceAccount$outboundSchema).optional(), + googleWorkspaceRole: z.lazy(() => GoogleWorkspaceRole$outboundSchema) + .optional(), githubRepo: z.lazy(() => GithubRepo$outboundSchema).optional(), gitlabProject: z.lazy(() => GitlabProject$outboundSchema).optional(), oktaApp: z.lazy(() => OktaApp$outboundSchema).optional(), @@ -2200,12 +2469,14 @@ export const ResourceRemoteInfo$outboundSchema: z.ZodType< teleportRole: z.lazy(() => TeleportRole$outboundSchema).optional(), }).transform((v) => { return remap$(v, { + awsOrganizationalUnit: "aws_organizational_unit", awsAccount: "aws_account", awsPermissionSet: "aws_permission_set", awsIamRole: "aws_iam_role", awsEc2Instance: "aws_ec2_instance", awsRdsInstance: "aws_rds_instance", awsEksCluster: "aws_eks_cluster", + customConnector: "custom_connector", gcpOrganization: "gcp_organization", gcpBucket: "gcp_bucket", gcpComputeInstance: "gcp_compute_instance", @@ -2216,6 +2487,7 @@ export const ResourceRemoteInfo$outboundSchema: z.ZodType< gcpProject: "gcp_project", gcpSqlInstance: "gcp_sql_instance", gcpServiceAccount: "gcp_service_account", + googleWorkspaceRole: "google_workspace_role", githubRepo: "github_repo", gitlabProject: "gitlab_project", oktaApp: "okta_app", diff --git a/src/models/components/rolepermissionnameenum.ts b/src/models/components/rolepermissionnameenum.ts new file mode 100644 index 0000000..891b96c --- /dev/null +++ b/src/models/components/rolepermissionnameenum.ts @@ -0,0 +1,55 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod"; +import { ClosedEnum } from "../../types/enums.js"; + +/** + * The name of the role permission. + */ +export const RolePermissionNameEnum = { + Read: "READ", + ReadAssignments: "READ_ASSIGNMENTS", + Create: "CREATE", + Import: "IMPORT", + Export: "EXPORT", + Sync: "SYNC", + Delete: "DELETE", + ReadSettings: "READ_SETTINGS", + EditTags: "EDIT_TAGS", + EditSettings: "EDIT_SETTINGS", + EditSyncSettings: "EDIT_SYNC_SETTINGS", + EditAssignments: "EDIT_ASSIGNMENTS", + EditRequestConfigurations: "EDIT_REQUEST_CONFIGURATIONS", + EditEventStream: "EDIT_EVENT_STREAM", + AssignUarReviewers: "ASSIGN_UAR_REVIEWERS", + SendReminders: "SEND_REMINDERS", + Stop: "STOP", + RequestOnBehalf: "REQUEST_ON_BEHALF", +} as const; +/** + * The name of the role permission. + */ +export type RolePermissionNameEnum = ClosedEnum; + +/** @internal */ +export const RolePermissionNameEnum$inboundSchema: z.ZodNativeEnum< + typeof RolePermissionNameEnum +> = z.nativeEnum(RolePermissionNameEnum); + +/** @internal */ +export const RolePermissionNameEnum$outboundSchema: z.ZodNativeEnum< + typeof RolePermissionNameEnum +> = RolePermissionNameEnum$inboundSchema; + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace RolePermissionNameEnum$ { + /** @deprecated use `RolePermissionNameEnum$inboundSchema` instead. */ + export const inboundSchema = RolePermissionNameEnum$inboundSchema; + /** @deprecated use `RolePermissionNameEnum$outboundSchema` instead. */ + export const outboundSchema = RolePermissionNameEnum$outboundSchema; +} diff --git a/src/models/components/rolepermissiontargettypeenum.ts b/src/models/components/rolepermissiontargettypeenum.ts new file mode 100644 index 0000000..4e7f0ff --- /dev/null +++ b/src/models/components/rolepermissiontargettypeenum.ts @@ -0,0 +1,45 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod"; +import { ClosedEnum } from "../../types/enums.js"; + +/** + * The type of the target for the role permission. + */ +export const RolePermissionTargetTypeEnum = { + Resource: "RESOURCE", + Connection: "CONNECTION", + Group: "GROUP", + Bundle: "BUNDLE", + User: "USER", + AccessReview: "ACCESS_REVIEW", +} as const; +/** + * The type of the target for the role permission. + */ +export type RolePermissionTargetTypeEnum = ClosedEnum< + typeof RolePermissionTargetTypeEnum +>; + +/** @internal */ +export const RolePermissionTargetTypeEnum$inboundSchema: z.ZodNativeEnum< + typeof RolePermissionTargetTypeEnum +> = z.nativeEnum(RolePermissionTargetTypeEnum); + +/** @internal */ +export const RolePermissionTargetTypeEnum$outboundSchema: z.ZodNativeEnum< + typeof RolePermissionTargetTypeEnum +> = RolePermissionTargetTypeEnum$inboundSchema; + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace RolePermissionTargetTypeEnum$ { + /** @deprecated use `RolePermissionTargetTypeEnum$inboundSchema` instead. */ + export const inboundSchema = RolePermissionTargetTypeEnum$inboundSchema; + /** @deprecated use `RolePermissionTargetTypeEnum$outboundSchema` instead. */ + export const outboundSchema = RolePermissionTargetTypeEnum$outboundSchema; +} diff --git a/src/models/components/scopedrolepermission.ts b/src/models/components/scopedrolepermission.ts new file mode 100644 index 0000000..0b655ff --- /dev/null +++ b/src/models/components/scopedrolepermission.ts @@ -0,0 +1,112 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod"; +import { remap as remap$ } from "../../lib/primitives.js"; +import { safeParse } from "../../lib/schemas.js"; +import { Result as SafeParseResult } from "../../types/fp.js"; +import { SDKValidationError } from "../errors/sdkvalidationerror.js"; +import { + RolePermissionNameEnum, + RolePermissionNameEnum$inboundSchema, + RolePermissionNameEnum$outboundSchema, +} from "./rolepermissionnameenum.js"; +import { + RolePermissionTargetTypeEnum, + RolePermissionTargetTypeEnum$inboundSchema, + RolePermissionTargetTypeEnum$outboundSchema, +} from "./rolepermissiontargettypeenum.js"; + +export type ScopedRolePermission = { + /** + * The IDs of the entities that this permission applies to. If empty of missing, the permission will have untargeted scope. + */ + targetIds?: Array | undefined; + /** + * The type of the target for the role permission. + */ + targetType: RolePermissionTargetTypeEnum; + /** + * The name of the role permission. + */ + permissionName: RolePermissionNameEnum; + allowAll: boolean; +}; + +/** @internal */ +export const ScopedRolePermission$inboundSchema: z.ZodType< + ScopedRolePermission, + z.ZodTypeDef, + unknown +> = z.object({ + target_ids: z.array(z.string()).optional(), + target_type: RolePermissionTargetTypeEnum$inboundSchema, + permission_name: RolePermissionNameEnum$inboundSchema, + allow_all: z.boolean(), +}).transform((v) => { + return remap$(v, { + "target_ids": "targetIds", + "target_type": "targetType", + "permission_name": "permissionName", + "allow_all": "allowAll", + }); +}); + +/** @internal */ +export type ScopedRolePermission$Outbound = { + target_ids?: Array | undefined; + target_type: string; + permission_name: string; + allow_all: boolean; +}; + +/** @internal */ +export const ScopedRolePermission$outboundSchema: z.ZodType< + ScopedRolePermission$Outbound, + z.ZodTypeDef, + ScopedRolePermission +> = z.object({ + targetIds: z.array(z.string()).optional(), + targetType: RolePermissionTargetTypeEnum$outboundSchema, + permissionName: RolePermissionNameEnum$outboundSchema, + allowAll: z.boolean(), +}).transform((v) => { + return remap$(v, { + targetIds: "target_ids", + targetType: "target_type", + permissionName: "permission_name", + allowAll: "allow_all", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace ScopedRolePermission$ { + /** @deprecated use `ScopedRolePermission$inboundSchema` instead. */ + export const inboundSchema = ScopedRolePermission$inboundSchema; + /** @deprecated use `ScopedRolePermission$outboundSchema` instead. */ + export const outboundSchema = ScopedRolePermission$outboundSchema; + /** @deprecated use `ScopedRolePermission$Outbound` instead. */ + export type Outbound = ScopedRolePermission$Outbound; +} + +export function scopedRolePermissionToJSON( + scopedRolePermission: ScopedRolePermission, +): string { + return JSON.stringify( + ScopedRolePermission$outboundSchema.parse(scopedRolePermission), + ); +} + +export function scopedRolePermissionFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ScopedRolePermission$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ScopedRolePermission' from JSON`, + ); +} diff --git a/src/models/components/scopedrolepermissionlist.ts b/src/models/components/scopedrolepermissionlist.ts new file mode 100644 index 0000000..9081afe --- /dev/null +++ b/src/models/components/scopedrolepermissionlist.ts @@ -0,0 +1,72 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod"; +import { safeParse } from "../../lib/schemas.js"; +import { Result as SafeParseResult } from "../../types/fp.js"; +import { SDKValidationError } from "../errors/sdkvalidationerror.js"; +import { + ScopedRolePermission, + ScopedRolePermission$inboundSchema, + ScopedRolePermission$Outbound, + ScopedRolePermission$outboundSchema, +} from "./scopedrolepermission.js"; + +export type ScopedRolePermissionList = { + permissions: Array; +}; + +/** @internal */ +export const ScopedRolePermissionList$inboundSchema: z.ZodType< + ScopedRolePermissionList, + z.ZodTypeDef, + unknown +> = z.object({ + permissions: z.array(ScopedRolePermission$inboundSchema), +}); + +/** @internal */ +export type ScopedRolePermissionList$Outbound = { + permissions: Array; +}; + +/** @internal */ +export const ScopedRolePermissionList$outboundSchema: z.ZodType< + ScopedRolePermissionList$Outbound, + z.ZodTypeDef, + ScopedRolePermissionList +> = z.object({ + permissions: z.array(ScopedRolePermission$outboundSchema), +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace ScopedRolePermissionList$ { + /** @deprecated use `ScopedRolePermissionList$inboundSchema` instead. */ + export const inboundSchema = ScopedRolePermissionList$inboundSchema; + /** @deprecated use `ScopedRolePermissionList$outboundSchema` instead. */ + export const outboundSchema = ScopedRolePermissionList$outboundSchema; + /** @deprecated use `ScopedRolePermissionList$Outbound` instead. */ + export type Outbound = ScopedRolePermissionList$Outbound; +} + +export function scopedRolePermissionListToJSON( + scopedRolePermissionList: ScopedRolePermissionList, +): string { + return JSON.stringify( + ScopedRolePermissionList$outboundSchema.parse(scopedRolePermissionList), + ); +} + +export function scopedRolePermissionListFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => ScopedRolePermissionList$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'ScopedRolePermissionList' from JSON`, + ); +} diff --git a/src/models/errors/apierror.ts b/src/models/errors/apierror.ts index 243cf59..81bfe5c 100644 --- a/src/models/errors/apierror.ts +++ b/src/models/errors/apierror.ts @@ -25,8 +25,14 @@ export class APIError extends OpalMcpError { }`; } const body = httpMeta.body || `""`; - message += body.length > 100 ? "\n" : " "; - message += `Body ${body}`; + message += body.length > 100 ? "\n" : ". "; + let bodyDisplay = body; + if (body.length > 10000) { + const truncated = body.substring(0, 10000); + const remaining = body.length - 10000; + bodyDisplay = `${truncated}...and ${remaining} more chars`; + } + message += `Body: ${bodyDisplay}`; message = message.trim(); super(message, httpMeta); this.name = "APIError"; diff --git a/src/models/operations/approverequest.ts b/src/models/operations/approverequest.ts index 94774a1..0f6ce6f 100644 --- a/src/models/operations/approverequest.ts +++ b/src/models/operations/approverequest.ts @@ -61,7 +61,7 @@ export type ApproveRequestResponse = { * ### Usage Example * Returned from the `GET Requests` endpoint. */ - request?: components.Request | undefined; + request?: components.RequestT | undefined; /** * ID of the task created for propagating access */ @@ -216,13 +216,13 @@ export const ApproveRequestResponse$inboundSchema: z.ZodType< z.ZodTypeDef, unknown > = z.object({ - request: components.Request$inboundSchema.optional(), + request: components.RequestT$inboundSchema.optional(), taskId: z.string().optional(), }); /** @internal */ export type ApproveRequestResponse$Outbound = { - request?: components.Request$Outbound | undefined; + request?: components.RequestT$Outbound | undefined; taskId?: string | undefined; }; @@ -232,7 +232,7 @@ export const ApproveRequestResponse$outboundSchema: z.ZodType< z.ZodTypeDef, ApproveRequestResponse > = z.object({ - request: components.Request$outboundSchema.optional(), + request: components.RequestT$outboundSchema.optional(), taskId: z.string().optional(), }); diff --git a/src/models/operations/deletegroupuser.ts b/src/models/operations/deletegroupuser.ts index f022907..9d441ea 100644 --- a/src/models/operations/deletegroupuser.ts +++ b/src/models/operations/deletegroupuser.ts @@ -17,6 +17,10 @@ export type DeleteGroupUserRequest = { * The ID of a user to remove from this group. */ userId: string; + /** + * The remote ID of the access level for which this user has direct access. If omitted, the default access level remote ID value (empty string) is assumed. + */ + accessLevelRemoteId?: string | undefined; }; /** @internal */ @@ -27,10 +31,12 @@ export const DeleteGroupUserRequest$inboundSchema: z.ZodType< > = z.object({ group_id: z.string(), user_id: z.string(), + access_level_remote_id: z.string().optional(), }).transform((v) => { return remap$(v, { "group_id": "groupId", "user_id": "userId", + "access_level_remote_id": "accessLevelRemoteId", }); }); @@ -38,6 +44,7 @@ export const DeleteGroupUserRequest$inboundSchema: z.ZodType< export type DeleteGroupUserRequest$Outbound = { group_id: string; user_id: string; + access_level_remote_id?: string | undefined; }; /** @internal */ @@ -48,10 +55,12 @@ export const DeleteGroupUserRequest$outboundSchema: z.ZodType< > = z.object({ groupId: z.string(), userId: z.string(), + accessLevelRemoteId: z.string().optional(), }).transform((v) => { return remap$(v, { groupId: "group_id", userId: "user_id", + accessLevelRemoteId: "access_level_remote_id", }); }); diff --git a/src/models/operations/events.ts b/src/models/operations/events.ts index 2c41bbe..5d0af99 100644 --- a/src/models/operations/events.ts +++ b/src/models/operations/events.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type EventsRequest = { @@ -43,6 +44,10 @@ export type EventsRequest = { pageSize?: number | undefined; }; +export type EventsResponse = { + result: components.PaginatedEventList; +}; + /** @internal */ export const EventsRequest$inboundSchema: z.ZodType< EventsRequest, @@ -133,3 +138,61 @@ export function eventsRequestFromJSON( `Failed to parse 'EventsRequest' from JSON`, ); } + +/** @internal */ +export const EventsResponse$inboundSchema: z.ZodType< + EventsResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedEventList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type EventsResponse$Outbound = { + Result: components.PaginatedEventList$Outbound; +}; + +/** @internal */ +export const EventsResponse$outboundSchema: z.ZodType< + EventsResponse$Outbound, + z.ZodTypeDef, + EventsResponse +> = z.object({ + result: components.PaginatedEventList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace EventsResponse$ { + /** @deprecated use `EventsResponse$inboundSchema` instead. */ + export const inboundSchema = EventsResponse$inboundSchema; + /** @deprecated use `EventsResponse$outboundSchema` instead. */ + export const outboundSchema = EventsResponse$outboundSchema; + /** @deprecated use `EventsResponse$Outbound` instead. */ + export type Outbound = EventsResponse$Outbound; +} + +export function eventsResponseToJSON(eventsResponse: EventsResponse): string { + return JSON.stringify(EventsResponse$outboundSchema.parse(eventsResponse)); +} + +export function eventsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => EventsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'EventsResponse' from JSON`, + ); +} diff --git a/src/models/operations/getbundlegroups.ts b/src/models/operations/getbundlegroups.ts index 193d8f4..d1b1332 100644 --- a/src/models/operations/getbundlegroups.ts +++ b/src/models/operations/getbundlegroups.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetBundleGroupsRequest = { @@ -23,6 +24,10 @@ export type GetBundleGroupsRequest = { cursor?: string | undefined; }; +export type GetBundleGroupsResponse = { + result: components.PaginatedBundleGroupList; +}; + /** @internal */ export const GetBundleGroupsRequest$inboundSchema: z.ZodType< GetBundleGroupsRequest, @@ -92,3 +97,65 @@ export function getBundleGroupsRequestFromJSON( `Failed to parse 'GetBundleGroupsRequest' from JSON`, ); } + +/** @internal */ +export const GetBundleGroupsResponse$inboundSchema: z.ZodType< + GetBundleGroupsResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedBundleGroupList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetBundleGroupsResponse$Outbound = { + Result: components.PaginatedBundleGroupList$Outbound; +}; + +/** @internal */ +export const GetBundleGroupsResponse$outboundSchema: z.ZodType< + GetBundleGroupsResponse$Outbound, + z.ZodTypeDef, + GetBundleGroupsResponse +> = z.object({ + result: components.PaginatedBundleGroupList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetBundleGroupsResponse$ { + /** @deprecated use `GetBundleGroupsResponse$inboundSchema` instead. */ + export const inboundSchema = GetBundleGroupsResponse$inboundSchema; + /** @deprecated use `GetBundleGroupsResponse$outboundSchema` instead. */ + export const outboundSchema = GetBundleGroupsResponse$outboundSchema; + /** @deprecated use `GetBundleGroupsResponse$Outbound` instead. */ + export type Outbound = GetBundleGroupsResponse$Outbound; +} + +export function getBundleGroupsResponseToJSON( + getBundleGroupsResponse: GetBundleGroupsResponse, +): string { + return JSON.stringify( + GetBundleGroupsResponse$outboundSchema.parse(getBundleGroupsResponse), + ); +} + +export function getBundleGroupsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetBundleGroupsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetBundleGroupsResponse' from JSON`, + ); +} diff --git a/src/models/operations/getbundleresources.ts b/src/models/operations/getbundleresources.ts index 071ed9f..dad3199 100644 --- a/src/models/operations/getbundleresources.ts +++ b/src/models/operations/getbundleresources.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetBundleResourcesRequest = { @@ -23,6 +24,10 @@ export type GetBundleResourcesRequest = { cursor?: string | undefined; }; +export type GetBundleResourcesResponse = { + result: components.PaginatedBundleResourceList; +}; + /** @internal */ export const GetBundleResourcesRequest$inboundSchema: z.ZodType< GetBundleResourcesRequest, @@ -92,3 +97,65 @@ export function getBundleResourcesRequestFromJSON( `Failed to parse 'GetBundleResourcesRequest' from JSON`, ); } + +/** @internal */ +export const GetBundleResourcesResponse$inboundSchema: z.ZodType< + GetBundleResourcesResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedBundleResourceList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetBundleResourcesResponse$Outbound = { + Result: components.PaginatedBundleResourceList$Outbound; +}; + +/** @internal */ +export const GetBundleResourcesResponse$outboundSchema: z.ZodType< + GetBundleResourcesResponse$Outbound, + z.ZodTypeDef, + GetBundleResourcesResponse +> = z.object({ + result: components.PaginatedBundleResourceList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetBundleResourcesResponse$ { + /** @deprecated use `GetBundleResourcesResponse$inboundSchema` instead. */ + export const inboundSchema = GetBundleResourcesResponse$inboundSchema; + /** @deprecated use `GetBundleResourcesResponse$outboundSchema` instead. */ + export const outboundSchema = GetBundleResourcesResponse$outboundSchema; + /** @deprecated use `GetBundleResourcesResponse$Outbound` instead. */ + export type Outbound = GetBundleResourcesResponse$Outbound; +} + +export function getBundleResourcesResponseToJSON( + getBundleResourcesResponse: GetBundleResourcesResponse, +): string { + return JSON.stringify( + GetBundleResourcesResponse$outboundSchema.parse(getBundleResourcesResponse), + ); +} + +export function getBundleResourcesResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetBundleResourcesResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetBundleResourcesResponse' from JSON`, + ); +} diff --git a/src/models/operations/getbundles.ts b/src/models/operations/getbundles.ts index 95e5231..82e89e6 100644 --- a/src/models/operations/getbundles.ts +++ b/src/models/operations/getbundles.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetBundlesRequest = { @@ -23,6 +24,10 @@ export type GetBundlesRequest = { contains?: string | undefined; }; +export type GetBundlesResponse = { + result: components.PaginatedBundleList; +}; + /** @internal */ export const GetBundlesRequest$inboundSchema: z.ZodType< GetBundlesRequest, @@ -90,3 +95,65 @@ export function getBundlesRequestFromJSON( `Failed to parse 'GetBundlesRequest' from JSON`, ); } + +/** @internal */ +export const GetBundlesResponse$inboundSchema: z.ZodType< + GetBundlesResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedBundleList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetBundlesResponse$Outbound = { + Result: components.PaginatedBundleList$Outbound; +}; + +/** @internal */ +export const GetBundlesResponse$outboundSchema: z.ZodType< + GetBundlesResponse$Outbound, + z.ZodTypeDef, + GetBundlesResponse +> = z.object({ + result: components.PaginatedBundleList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetBundlesResponse$ { + /** @deprecated use `GetBundlesResponse$inboundSchema` instead. */ + export const inboundSchema = GetBundlesResponse$inboundSchema; + /** @deprecated use `GetBundlesResponse$outboundSchema` instead. */ + export const outboundSchema = GetBundlesResponse$outboundSchema; + /** @deprecated use `GetBundlesResponse$Outbound` instead. */ + export type Outbound = GetBundlesResponse$Outbound; +} + +export function getBundlesResponseToJSON( + getBundlesResponse: GetBundlesResponse, +): string { + return JSON.stringify( + GetBundlesResponse$outboundSchema.parse(getBundlesResponse), + ); +} + +export function getBundlesResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetBundlesResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetBundlesResponse' from JSON`, + ); +} diff --git a/src/models/operations/getgroupbindings.ts b/src/models/operations/getgroupbindings.ts index 76a653c..4d28634 100644 --- a/src/models/operations/getgroupbindings.ts +++ b/src/models/operations/getgroupbindings.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetGroupBindingsRequest = { @@ -19,6 +20,10 @@ export type GetGroupBindingsRequest = { pageSize?: number | undefined; }; +export type GetGroupBindingsResponse = { + result: components.PaginatedGroupBindingsList; +}; + /** @internal */ export const GetGroupBindingsRequest$inboundSchema: z.ZodType< GetGroupBindingsRequest, @@ -83,3 +88,65 @@ export function getGroupBindingsRequestFromJSON( `Failed to parse 'GetGroupBindingsRequest' from JSON`, ); } + +/** @internal */ +export const GetGroupBindingsResponse$inboundSchema: z.ZodType< + GetGroupBindingsResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedGroupBindingsList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetGroupBindingsResponse$Outbound = { + Result: components.PaginatedGroupBindingsList$Outbound; +}; + +/** @internal */ +export const GetGroupBindingsResponse$outboundSchema: z.ZodType< + GetGroupBindingsResponse$Outbound, + z.ZodTypeDef, + GetGroupBindingsResponse +> = z.object({ + result: components.PaginatedGroupBindingsList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetGroupBindingsResponse$ { + /** @deprecated use `GetGroupBindingsResponse$inboundSchema` instead. */ + export const inboundSchema = GetGroupBindingsResponse$inboundSchema; + /** @deprecated use `GetGroupBindingsResponse$outboundSchema` instead. */ + export const outboundSchema = GetGroupBindingsResponse$outboundSchema; + /** @deprecated use `GetGroupBindingsResponse$Outbound` instead. */ + export type Outbound = GetGroupBindingsResponse$Outbound; +} + +export function getGroupBindingsResponseToJSON( + getGroupBindingsResponse: GetGroupBindingsResponse, +): string { + return JSON.stringify( + GetGroupBindingsResponse$outboundSchema.parse(getGroupBindingsResponse), + ); +} + +export function getGroupBindingsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetGroupBindingsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetGroupBindingsResponse' from JSON`, + ); +} diff --git a/src/models/operations/getgroups.ts b/src/models/operations/getgroups.ts index 356ca44..fb5e034 100644 --- a/src/models/operations/getgroups.ts +++ b/src/models/operations/getgroups.ts @@ -32,6 +32,10 @@ export type GetGroupsRequest = { groupName?: string | undefined; }; +export type GetGroupsResponse = { + result: components.PaginatedGroupsList; +}; + /** @internal */ export const GetGroupsRequest$inboundSchema: z.ZodType< GetGroupsRequest, @@ -111,3 +115,65 @@ export function getGroupsRequestFromJSON( `Failed to parse 'GetGroupsRequest' from JSON`, ); } + +/** @internal */ +export const GetGroupsResponse$inboundSchema: z.ZodType< + GetGroupsResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedGroupsList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetGroupsResponse$Outbound = { + Result: components.PaginatedGroupsList$Outbound; +}; + +/** @internal */ +export const GetGroupsResponse$outboundSchema: z.ZodType< + GetGroupsResponse$Outbound, + z.ZodTypeDef, + GetGroupsResponse +> = z.object({ + result: components.PaginatedGroupsList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetGroupsResponse$ { + /** @deprecated use `GetGroupsResponse$inboundSchema` instead. */ + export const inboundSchema = GetGroupsResponse$inboundSchema; + /** @deprecated use `GetGroupsResponse$outboundSchema` instead. */ + export const outboundSchema = GetGroupsResponse$outboundSchema; + /** @deprecated use `GetGroupsResponse$Outbound` instead. */ + export type Outbound = GetGroupsResponse$Outbound; +} + +export function getGroupsResponseToJSON( + getGroupsResponse: GetGroupsResponse, +): string { + return JSON.stringify( + GetGroupsResponse$outboundSchema.parse(getGroupsResponse), + ); +} + +export function getGroupsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetGroupsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetGroupsResponse' from JSON`, + ); +} diff --git a/src/models/operations/getnhis.ts b/src/models/operations/getnhis.ts index 6635ce1..1e6676a 100644 --- a/src/models/operations/getnhis.ts +++ b/src/models/operations/getnhis.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetNhisRequest = { @@ -19,6 +20,10 @@ export type GetNhisRequest = { pageSize?: number | undefined; }; +export type GetNhisResponse = { + result: components.PaginatedResourcesList; +}; + /** @internal */ export const GetNhisRequest$inboundSchema: z.ZodType< GetNhisRequest, @@ -79,3 +84,63 @@ export function getNhisRequestFromJSON( `Failed to parse 'GetNhisRequest' from JSON`, ); } + +/** @internal */ +export const GetNhisResponse$inboundSchema: z.ZodType< + GetNhisResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedResourcesList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetNhisResponse$Outbound = { + Result: components.PaginatedResourcesList$Outbound; +}; + +/** @internal */ +export const GetNhisResponse$outboundSchema: z.ZodType< + GetNhisResponse$Outbound, + z.ZodTypeDef, + GetNhisResponse +> = z.object({ + result: components.PaginatedResourcesList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetNhisResponse$ { + /** @deprecated use `GetNhisResponse$inboundSchema` instead. */ + export const inboundSchema = GetNhisResponse$inboundSchema; + /** @deprecated use `GetNhisResponse$outboundSchema` instead. */ + export const outboundSchema = GetNhisResponse$outboundSchema; + /** @deprecated use `GetNhisResponse$Outbound` instead. */ + export type Outbound = GetNhisResponse$Outbound; +} + +export function getNhisResponseToJSON( + getNhisResponse: GetNhisResponse, +): string { + return JSON.stringify(GetNhisResponse$outboundSchema.parse(getNhisResponse)); +} + +export function getNhisResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetNhisResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetNhisResponse' from JSON`, + ); +} diff --git a/src/models/operations/getowners.ts b/src/models/operations/getowners.ts index 2cb4083..52efa7d 100644 --- a/src/models/operations/getowners.ts +++ b/src/models/operations/getowners.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetOwnersRequest = { @@ -23,6 +24,10 @@ export type GetOwnersRequest = { name?: string | undefined; }; +export type GetOwnersResponse = { + result: components.PaginatedOwnersList; +}; + /** @internal */ export const GetOwnersRequest$inboundSchema: z.ZodType< GetOwnersRequest, @@ -90,3 +95,65 @@ export function getOwnersRequestFromJSON( `Failed to parse 'GetOwnersRequest' from JSON`, ); } + +/** @internal */ +export const GetOwnersResponse$inboundSchema: z.ZodType< + GetOwnersResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedOwnersList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetOwnersResponse$Outbound = { + Result: components.PaginatedOwnersList$Outbound; +}; + +/** @internal */ +export const GetOwnersResponse$outboundSchema: z.ZodType< + GetOwnersResponse$Outbound, + z.ZodTypeDef, + GetOwnersResponse +> = z.object({ + result: components.PaginatedOwnersList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetOwnersResponse$ { + /** @deprecated use `GetOwnersResponse$inboundSchema` instead. */ + export const inboundSchema = GetOwnersResponse$inboundSchema; + /** @deprecated use `GetOwnersResponse$outboundSchema` instead. */ + export const outboundSchema = GetOwnersResponse$outboundSchema; + /** @deprecated use `GetOwnersResponse$Outbound` instead. */ + export type Outbound = GetOwnersResponse$Outbound; +} + +export function getOwnersResponseToJSON( + getOwnersResponse: GetOwnersResponse, +): string { + return JSON.stringify( + GetOwnersResponse$outboundSchema.parse(getOwnersResponse), + ); +} + +export function getOwnersResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetOwnersResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetOwnersResponse' from JSON`, + ); +} diff --git a/src/models/operations/getrequest.ts b/src/models/operations/getrequest.ts new file mode 100644 index 0000000..6fbde21 --- /dev/null +++ b/src/models/operations/getrequest.ts @@ -0,0 +1,69 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod"; +import { safeParse } from "../../lib/schemas.js"; +import { Result as SafeParseResult } from "../../types/fp.js"; +import { SDKValidationError } from "../errors/sdkvalidationerror.js"; + +export type GetRequestRequest = { + /** + * The ID of the request. + */ + id: string; +}; + +/** @internal */ +export const GetRequestRequest$inboundSchema: z.ZodType< + GetRequestRequest, + z.ZodTypeDef, + unknown +> = z.object({ + id: z.string(), +}); + +/** @internal */ +export type GetRequestRequest$Outbound = { + id: string; +}; + +/** @internal */ +export const GetRequestRequest$outboundSchema: z.ZodType< + GetRequestRequest$Outbound, + z.ZodTypeDef, + GetRequestRequest +> = z.object({ + id: z.string(), +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetRequestRequest$ { + /** @deprecated use `GetRequestRequest$inboundSchema` instead. */ + export const inboundSchema = GetRequestRequest$inboundSchema; + /** @deprecated use `GetRequestRequest$outboundSchema` instead. */ + export const outboundSchema = GetRequestRequest$outboundSchema; + /** @deprecated use `GetRequestRequest$Outbound` instead. */ + export type Outbound = GetRequestRequest$Outbound; +} + +export function getRequestRequestToJSON( + getRequestRequest: GetRequestRequest, +): string { + return JSON.stringify( + GetRequestRequest$outboundSchema.parse(getRequestRequest), + ); +} + +export function getRequestRequestFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetRequestRequest$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetRequestRequest' from JSON`, + ); +} diff --git a/src/models/operations/getrequests.ts b/src/models/operations/getrequests.ts index 2058c63..faa67fb 100644 --- a/src/models/operations/getrequests.ts +++ b/src/models/operations/getrequests.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetRequestsRequest = { @@ -31,6 +32,10 @@ export type GetRequestsRequest = { showPendingOnly?: boolean | undefined; }; +export type GetRequestsResponse = { + result: components.RequestList; +}; + /** @internal */ export const GetRequestsRequest$inboundSchema: z.ZodType< GetRequestsRequest, @@ -110,3 +115,65 @@ export function getRequestsRequestFromJSON( `Failed to parse 'GetRequestsRequest' from JSON`, ); } + +/** @internal */ +export const GetRequestsResponse$inboundSchema: z.ZodType< + GetRequestsResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.RequestList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetRequestsResponse$Outbound = { + Result: components.RequestList$Outbound; +}; + +/** @internal */ +export const GetRequestsResponse$outboundSchema: z.ZodType< + GetRequestsResponse$Outbound, + z.ZodTypeDef, + GetRequestsResponse +> = z.object({ + result: components.RequestList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetRequestsResponse$ { + /** @deprecated use `GetRequestsResponse$inboundSchema` instead. */ + export const inboundSchema = GetRequestsResponse$inboundSchema; + /** @deprecated use `GetRequestsResponse$outboundSchema` instead. */ + export const outboundSchema = GetRequestsResponse$outboundSchema; + /** @deprecated use `GetRequestsResponse$Outbound` instead. */ + export type Outbound = GetRequestsResponse$Outbound; +} + +export function getRequestsResponseToJSON( + getRequestsResponse: GetRequestsResponse, +): string { + return JSON.stringify( + GetRequestsResponse$outboundSchema.parse(getRequestsResponse), + ); +} + +export function getRequestsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetRequestsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetRequestsResponse' from JSON`, + ); +} diff --git a/src/models/operations/getresources.ts b/src/models/operations/getresources.ts index 600a41c..0bb164b 100644 --- a/src/models/operations/getresources.ts +++ b/src/models/operations/getresources.ts @@ -40,6 +40,10 @@ export type GetResourcesRequest = { ancestorResourceId?: string | undefined; }; +export type GetResourcesResponse = { + result: components.PaginatedResourcesList; +}; + /** @internal */ export const GetResourcesRequest$inboundSchema: z.ZodType< GetResourcesRequest, @@ -129,3 +133,65 @@ export function getResourcesRequestFromJSON( `Failed to parse 'GetResourcesRequest' from JSON`, ); } + +/** @internal */ +export const GetResourcesResponse$inboundSchema: z.ZodType< + GetResourcesResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedResourcesList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetResourcesResponse$Outbound = { + Result: components.PaginatedResourcesList$Outbound; +}; + +/** @internal */ +export const GetResourcesResponse$outboundSchema: z.ZodType< + GetResourcesResponse$Outbound, + z.ZodTypeDef, + GetResourcesResponse +> = z.object({ + result: components.PaginatedResourcesList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetResourcesResponse$ { + /** @deprecated use `GetResourcesResponse$inboundSchema` instead. */ + export const inboundSchema = GetResourcesResponse$inboundSchema; + /** @deprecated use `GetResourcesResponse$outboundSchema` instead. */ + export const outboundSchema = GetResourcesResponse$outboundSchema; + /** @deprecated use `GetResourcesResponse$Outbound` instead. */ + export type Outbound = GetResourcesResponse$Outbound; +} + +export function getResourcesResponseToJSON( + getResourcesResponse: GetResourcesResponse, +): string { + return JSON.stringify( + GetResourcesResponse$outboundSchema.parse(getResourcesResponse), + ); +} + +export function getResourcesResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetResourcesResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetResourcesResponse' from JSON`, + ); +} diff --git a/src/models/operations/getresourcescopedrolepermissions.ts b/src/models/operations/getresourcescopedrolepermissions.ts new file mode 100644 index 0000000..13a1e6c --- /dev/null +++ b/src/models/operations/getresourcescopedrolepermissions.ts @@ -0,0 +1,89 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod"; +import { remap as remap$ } from "../../lib/primitives.js"; +import { safeParse } from "../../lib/schemas.js"; +import { Result as SafeParseResult } from "../../types/fp.js"; +import { SDKValidationError } from "../errors/sdkvalidationerror.js"; + +export type GetResourceScopedRolePermissionsRequest = { + /** + * The ID of the resource whose scoped role permissions belong to. + */ + resourceId: string; +}; + +/** @internal */ +export const GetResourceScopedRolePermissionsRequest$inboundSchema: z.ZodType< + GetResourceScopedRolePermissionsRequest, + z.ZodTypeDef, + unknown +> = z.object({ + resource_id: z.string(), +}).transform((v) => { + return remap$(v, { + "resource_id": "resourceId", + }); +}); + +/** @internal */ +export type GetResourceScopedRolePermissionsRequest$Outbound = { + resource_id: string; +}; + +/** @internal */ +export const GetResourceScopedRolePermissionsRequest$outboundSchema: z.ZodType< + GetResourceScopedRolePermissionsRequest$Outbound, + z.ZodTypeDef, + GetResourceScopedRolePermissionsRequest +> = z.object({ + resourceId: z.string(), +}).transform((v) => { + return remap$(v, { + resourceId: "resource_id", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetResourceScopedRolePermissionsRequest$ { + /** @deprecated use `GetResourceScopedRolePermissionsRequest$inboundSchema` instead. */ + export const inboundSchema = + GetResourceScopedRolePermissionsRequest$inboundSchema; + /** @deprecated use `GetResourceScopedRolePermissionsRequest$outboundSchema` instead. */ + export const outboundSchema = + GetResourceScopedRolePermissionsRequest$outboundSchema; + /** @deprecated use `GetResourceScopedRolePermissionsRequest$Outbound` instead. */ + export type Outbound = GetResourceScopedRolePermissionsRequest$Outbound; +} + +export function getResourceScopedRolePermissionsRequestToJSON( + getResourceScopedRolePermissionsRequest: + GetResourceScopedRolePermissionsRequest, +): string { + return JSON.stringify( + GetResourceScopedRolePermissionsRequest$outboundSchema.parse( + getResourceScopedRolePermissionsRequest, + ), + ); +} + +export function getResourceScopedRolePermissionsRequestFromJSON( + jsonString: string, +): SafeParseResult< + GetResourceScopedRolePermissionsRequest, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + GetResourceScopedRolePermissionsRequest$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'GetResourceScopedRolePermissionsRequest' from JSON`, + ); +} diff --git a/src/models/operations/gettags.ts b/src/models/operations/gettags.ts index f11bd02..17f2e4f 100644 --- a/src/models/operations/gettags.ts +++ b/src/models/operations/gettags.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetTagsRequest = { @@ -19,6 +20,10 @@ export type GetTagsRequest = { pageSize?: number | undefined; }; +export type GetTagsResponse = { + result: components.PaginatedTagsList; +}; + /** @internal */ export const GetTagsRequest$inboundSchema: z.ZodType< GetTagsRequest, @@ -79,3 +84,63 @@ export function getTagsRequestFromJSON( `Failed to parse 'GetTagsRequest' from JSON`, ); } + +/** @internal */ +export const GetTagsResponse$inboundSchema: z.ZodType< + GetTagsResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedTagsList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetTagsResponse$Outbound = { + Result: components.PaginatedTagsList$Outbound; +}; + +/** @internal */ +export const GetTagsResponse$outboundSchema: z.ZodType< + GetTagsResponse$Outbound, + z.ZodTypeDef, + GetTagsResponse +> = z.object({ + result: components.PaginatedTagsList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetTagsResponse$ { + /** @deprecated use `GetTagsResponse$inboundSchema` instead. */ + export const inboundSchema = GetTagsResponse$inboundSchema; + /** @deprecated use `GetTagsResponse$outboundSchema` instead. */ + export const outboundSchema = GetTagsResponse$outboundSchema; + /** @deprecated use `GetTagsResponse$Outbound` instead. */ + export type Outbound = GetTagsResponse$Outbound; +} + +export function getTagsResponseToJSON( + getTagsResponse: GetTagsResponse, +): string { + return JSON.stringify(GetTagsResponse$outboundSchema.parse(getTagsResponse)); +} + +export function getTagsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetTagsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetTagsResponse' from JSON`, + ); +} diff --git a/src/models/operations/getuars.ts b/src/models/operations/getuars.ts index 7226089..46fc924 100644 --- a/src/models/operations/getuars.ts +++ b/src/models/operations/getuars.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetUARsRequest = { @@ -19,6 +20,10 @@ export type GetUARsRequest = { pageSize?: number | undefined; }; +export type GetUARsResponse = { + result: components.PaginatedUARsList; +}; + /** @internal */ export const GetUARsRequest$inboundSchema: z.ZodType< GetUARsRequest, @@ -79,3 +84,63 @@ export function getUARsRequestFromJSON( `Failed to parse 'GetUARsRequest' from JSON`, ); } + +/** @internal */ +export const GetUARsResponse$inboundSchema: z.ZodType< + GetUARsResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedUARsList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetUARsResponse$Outbound = { + Result: components.PaginatedUARsList$Outbound; +}; + +/** @internal */ +export const GetUARsResponse$outboundSchema: z.ZodType< + GetUARsResponse$Outbound, + z.ZodTypeDef, + GetUARsResponse +> = z.object({ + result: components.PaginatedUARsList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetUARsResponse$ { + /** @deprecated use `GetUARsResponse$inboundSchema` instead. */ + export const inboundSchema = GetUARsResponse$inboundSchema; + /** @deprecated use `GetUARsResponse$outboundSchema` instead. */ + export const outboundSchema = GetUARsResponse$outboundSchema; + /** @deprecated use `GetUARsResponse$Outbound` instead. */ + export type Outbound = GetUARsResponse$Outbound; +} + +export function getUARsResponseToJSON( + getUARsResponse: GetUARsResponse, +): string { + return JSON.stringify(GetUARsResponse$outboundSchema.parse(getUARsResponse)); +} + +export function getUARsResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetUARsResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetUARsResponse' from JSON`, + ); +} diff --git a/src/models/operations/getusers.ts b/src/models/operations/getusers.ts index 7a93bac..b4b658d 100644 --- a/src/models/operations/getusers.ts +++ b/src/models/operations/getusers.ts @@ -6,6 +6,7 @@ import * as z from "zod"; import { remap as remap$ } from "../../lib/primitives.js"; import { safeParse } from "../../lib/schemas.js"; import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; import { SDKValidationError } from "../errors/sdkvalidationerror.js"; export type GetUsersRequest = { @@ -19,6 +20,10 @@ export type GetUsersRequest = { pageSize?: number | undefined; }; +export type GetUsersResponse = { + result: components.PaginatedUsersList; +}; + /** @internal */ export const GetUsersRequest$inboundSchema: z.ZodType< GetUsersRequest, @@ -81,3 +86,65 @@ export function getUsersRequestFromJSON( `Failed to parse 'GetUsersRequest' from JSON`, ); } + +/** @internal */ +export const GetUsersResponse$inboundSchema: z.ZodType< + GetUsersResponse, + z.ZodTypeDef, + unknown +> = z.object({ + Result: components.PaginatedUsersList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "Result": "result", + }); +}); + +/** @internal */ +export type GetUsersResponse$Outbound = { + Result: components.PaginatedUsersList$Outbound; +}; + +/** @internal */ +export const GetUsersResponse$outboundSchema: z.ZodType< + GetUsersResponse$Outbound, + z.ZodTypeDef, + GetUsersResponse +> = z.object({ + result: components.PaginatedUsersList$outboundSchema, +}).transform((v) => { + return remap$(v, { + result: "Result", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace GetUsersResponse$ { + /** @deprecated use `GetUsersResponse$inboundSchema` instead. */ + export const inboundSchema = GetUsersResponse$inboundSchema; + /** @deprecated use `GetUsersResponse$outboundSchema` instead. */ + export const outboundSchema = GetUsersResponse$outboundSchema; + /** @deprecated use `GetUsersResponse$Outbound` instead. */ + export type Outbound = GetUsersResponse$Outbound; +} + +export function getUsersResponseToJSON( + getUsersResponse: GetUsersResponse, +): string { + return JSON.stringify( + GetUsersResponse$outboundSchema.parse(getUsersResponse), + ); +} + +export function getUsersResponseFromJSON( + jsonString: string, +): SafeParseResult { + return safeParse( + jsonString, + (x) => GetUsersResponse$inboundSchema.parse(JSON.parse(x)), + `Failed to parse 'GetUsersResponse' from JSON`, + ); +} diff --git a/src/models/operations/index.ts b/src/models/operations/index.ts index e344ad7..c206359 100644 --- a/src/models/operations/index.ts +++ b/src/models/operations/index.ts @@ -57,6 +57,7 @@ export * from "./getowner.js"; export * from "./getownerfromname.js"; export * from "./getowners.js"; export * from "./getownerusers.js"; +export * from "./getrequest.js"; export * from "./getrequests.js"; export * from "./getrequestsrelay.js"; export * from "./getresource.js"; @@ -65,6 +66,7 @@ export * from "./getresourcenhis.js"; export * from "./getresourcereviewers.js"; export * from "./getresourcereviewerstages.js"; export * from "./getresources.js"; +export * from "./getresourcescopedrolepermissions.js"; export * from "./getresourcetags.js"; export * from "./getresourceuser.js"; export * from "./getresourceusers.js"; @@ -96,6 +98,7 @@ export * from "./setownerusers.js"; export * from "./setresourcemessagechannels.js"; export * from "./setresourcereviewers.js"; export * from "./setresourcereviewerstages.js"; +export * from "./setresourcescopedrolepermissions.js"; export * from "./setresourcevisibility.js"; export * from "./updateaccessrule.js"; export * from "./updatebundle.js"; diff --git a/src/models/operations/setresourcescopedrolepermissions.ts b/src/models/operations/setresourcescopedrolepermissions.ts new file mode 100644 index 0000000..a43d650 --- /dev/null +++ b/src/models/operations/setresourcescopedrolepermissions.ts @@ -0,0 +1,96 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import * as z from "zod"; +import { remap as remap$ } from "../../lib/primitives.js"; +import { safeParse } from "../../lib/schemas.js"; +import { Result as SafeParseResult } from "../../types/fp.js"; +import * as components from "../components/index.js"; +import { SDKValidationError } from "../errors/sdkvalidationerror.js"; + +export type SetResourceScopedRolePermissionsRequest = { + /** + * The ID of the resource whose scoped role permissions belong to. Must be of OPAL_SCOPED_ROLE resource type. + */ + resourceId: string; + scopedRolePermissionList: components.ScopedRolePermissionList; +}; + +/** @internal */ +export const SetResourceScopedRolePermissionsRequest$inboundSchema: z.ZodType< + SetResourceScopedRolePermissionsRequest, + z.ZodTypeDef, + unknown +> = z.object({ + resource_id: z.string(), + ScopedRolePermissionList: components.ScopedRolePermissionList$inboundSchema, +}).transform((v) => { + return remap$(v, { + "resource_id": "resourceId", + "ScopedRolePermissionList": "scopedRolePermissionList", + }); +}); + +/** @internal */ +export type SetResourceScopedRolePermissionsRequest$Outbound = { + resource_id: string; + ScopedRolePermissionList: components.ScopedRolePermissionList$Outbound; +}; + +/** @internal */ +export const SetResourceScopedRolePermissionsRequest$outboundSchema: z.ZodType< + SetResourceScopedRolePermissionsRequest$Outbound, + z.ZodTypeDef, + SetResourceScopedRolePermissionsRequest +> = z.object({ + resourceId: z.string(), + scopedRolePermissionList: components.ScopedRolePermissionList$outboundSchema, +}).transform((v) => { + return remap$(v, { + resourceId: "resource_id", + scopedRolePermissionList: "ScopedRolePermissionList", + }); +}); + +/** + * @internal + * @deprecated This namespace will be removed in future versions. Use schemas and types that are exported directly from this module. + */ +export namespace SetResourceScopedRolePermissionsRequest$ { + /** @deprecated use `SetResourceScopedRolePermissionsRequest$inboundSchema` instead. */ + export const inboundSchema = + SetResourceScopedRolePermissionsRequest$inboundSchema; + /** @deprecated use `SetResourceScopedRolePermissionsRequest$outboundSchema` instead. */ + export const outboundSchema = + SetResourceScopedRolePermissionsRequest$outboundSchema; + /** @deprecated use `SetResourceScopedRolePermissionsRequest$Outbound` instead. */ + export type Outbound = SetResourceScopedRolePermissionsRequest$Outbound; +} + +export function setResourceScopedRolePermissionsRequestToJSON( + setResourceScopedRolePermissionsRequest: + SetResourceScopedRolePermissionsRequest, +): string { + return JSON.stringify( + SetResourceScopedRolePermissionsRequest$outboundSchema.parse( + setResourceScopedRolePermissionsRequest, + ), + ); +} + +export function setResourceScopedRolePermissionsRequestFromJSON( + jsonString: string, +): SafeParseResult< + SetResourceScopedRolePermissionsRequest, + SDKValidationError +> { + return safeParse( + jsonString, + (x) => + SetResourceScopedRolePermissionsRequest$inboundSchema.parse( + JSON.parse(x), + ), + `Failed to parse 'SetResourceScopedRolePermissionsRequest' from JSON`, + ); +} diff --git a/src/sdk/bundles.ts b/src/sdk/bundles.ts index 711effc..4350e9f 100644 --- a/src/sdk/bundles.ts +++ b/src/sdk/bundles.ts @@ -19,6 +19,7 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Bundles extends ClientSDK { /** @@ -27,8 +28,8 @@ export class Bundles extends ClientSDK { async getBundles( request: operations.GetBundlesRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(bundlesGetBundles( + ): Promise> { + return unwrapResultIterator(bundlesGetBundles( this, request, options, @@ -97,8 +98,10 @@ export class Bundles extends ClientSDK { async getBundleResources( request: operations.GetBundleResourcesRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(bundlesGetBundleResources( + ): Promise< + PageIterator + > { + return unwrapResultIterator(bundlesGetBundleResources( this, request, options, @@ -139,8 +142,10 @@ export class Bundles extends ClientSDK { async getBundleGroups( request: operations.GetBundleGroupsRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(bundlesGetBundleGroups( + ): Promise< + PageIterator + > { + return unwrapResultIterator(bundlesGetBundleGroups( this, request, options, diff --git a/src/sdk/events.ts b/src/sdk/events.ts index 0f23c76..f6ae040 100644 --- a/src/sdk/events.ts +++ b/src/sdk/events.ts @@ -4,9 +4,8 @@ import { eventsEvents } from "../funcs/eventsEvents.js"; import { ClientSDK, RequestOptions } from "../lib/sdks.js"; -import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; -import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Events extends ClientSDK { /** @@ -15,8 +14,8 @@ export class Events extends ClientSDK { async events( request: operations.EventsRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(eventsEvents( + ): Promise> { + return unwrapResultIterator(eventsEvents( this, request, options, diff --git a/src/sdk/groupbindings.ts b/src/sdk/groupbindings.ts index 639358b..9a8da48 100644 --- a/src/sdk/groupbindings.ts +++ b/src/sdk/groupbindings.ts @@ -11,6 +11,7 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class GroupBindings extends ClientSDK { /** @@ -19,8 +20,10 @@ export class GroupBindings extends ClientSDK { async getGroupBindings( request: operations.GetGroupBindingsRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(groupBindingsGetGroupBindings( + ): Promise< + PageIterator + > { + return unwrapResultIterator(groupBindingsGetGroupBindings( this, request, options, diff --git a/src/sdk/groups.ts b/src/sdk/groups.ts index 0dacef3..883cc7c 100644 --- a/src/sdk/groups.ts +++ b/src/sdk/groups.ts @@ -33,6 +33,7 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Groups extends ClientSDK { /** @@ -41,8 +42,8 @@ export class Groups extends ClientSDK { async getGroups( request: operations.GetGroupsRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(groupsGetGroups( + ): Promise> { + return unwrapResultIterator(groupsGetGroups( this, request, options, diff --git a/src/sdk/nonhumanidentities.ts b/src/sdk/nonhumanidentities.ts index 9fd4f4e..f320d99 100644 --- a/src/sdk/nonhumanidentities.ts +++ b/src/sdk/nonhumanidentities.ts @@ -4,9 +4,8 @@ import { nonHumanIdentitiesGetNhis } from "../funcs/nonHumanIdentitiesGetNhis.js"; import { ClientSDK, RequestOptions } from "../lib/sdks.js"; -import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; -import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class NonHumanIdentities extends ClientSDK { /** @@ -15,8 +14,8 @@ export class NonHumanIdentities extends ClientSDK { async getNhis( request: operations.GetNhisRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(nonHumanIdentitiesGetNhis( + ): Promise> { + return unwrapResultIterator(nonHumanIdentitiesGetNhis( this, request, options, diff --git a/src/sdk/owners.ts b/src/sdk/owners.ts index d3b6142..24fe4e2 100644 --- a/src/sdk/owners.ts +++ b/src/sdk/owners.ts @@ -14,6 +14,7 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Owners extends ClientSDK { /** @@ -22,8 +23,8 @@ export class Owners extends ClientSDK { async getOwners( request: operations.GetOwnersRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(ownersGetOwners( + ): Promise> { + return unwrapResultIterator(ownersGetOwners( this, request, options, diff --git a/src/sdk/requests.ts b/src/sdk/requests.ts index e416865..26c0b71 100644 --- a/src/sdk/requests.ts +++ b/src/sdk/requests.ts @@ -4,12 +4,14 @@ import { requestsApproveRequest } from "../funcs/requestsApproveRequest.js"; import { requestsCreateRequest } from "../funcs/requestsCreateRequest.js"; +import { requestsGetRequest } from "../funcs/requestsGetRequest.js"; import { requestsGetRequests } from "../funcs/requestsGetRequests.js"; import { requestsGetRequestsRelay } from "../funcs/requestsGetRequestsRelay.js"; import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Requests extends ClientSDK { /** @@ -18,8 +20,8 @@ export class Requests extends ClientSDK { async getRequests( request: operations.GetRequestsRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(requestsGetRequests( + ): Promise> { + return unwrapResultIterator(requestsGetRequests( this, request, options, @@ -42,6 +44,8 @@ export class Requests extends ClientSDK { /** * Returns a paginated list of requests using Relay-style cursor pagination. + * + * @deprecated method: This will be removed in a future release, please migrate away from it as soon as possible. */ async getRequestsRelay( request: operations.GetRequestsRelayRequest, @@ -54,6 +58,20 @@ export class Requests extends ClientSDK { )); } + /** + * Returns a request by ID. + */ + async getRequest( + request: operations.GetRequestRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(requestsGetRequest( + this, + request, + options, + )); + } + /** * Approve an access request */ diff --git a/src/sdk/resources.ts b/src/sdk/resources.ts index 62d813f..e58f662 100644 --- a/src/sdk/resources.ts +++ b/src/sdk/resources.ts @@ -14,6 +14,7 @@ import { resourcesGetResourceNhis } from "../funcs/resourcesGetResourceNhis.js"; import { resourcesGetResourceReviewers } from "../funcs/resourcesGetResourceReviewers.js"; import { resourcesGetResourceReviewerStages } from "../funcs/resourcesGetResourceReviewerStages.js"; import { resourcesGetResources } from "../funcs/resourcesGetResources.js"; +import { resourcesGetResourceScopedRolePermissions } from "../funcs/resourcesGetResourceScopedRolePermissions.js"; import { resourcesGetResourceTags } from "../funcs/resourcesGetResourceTags.js"; import { resourcesGetResourceUser } from "../funcs/resourcesGetResourceUser.js"; import { resourcesGetResourceUsers } from "../funcs/resourcesGetResourceUsers.js"; @@ -22,6 +23,7 @@ import { resourcesResourceUserAccessStatusRetrieve } from "../funcs/resourcesRes import { resourcesSetResourceMessageChannels } from "../funcs/resourcesSetResourceMessageChannels.js"; import { resourcesSetResourceReviewers } from "../funcs/resourcesSetResourceReviewers.js"; import { resourcesSetResourceReviewerStages } from "../funcs/resourcesSetResourceReviewerStages.js"; +import { resourcesSetResourceScopedRolePermissions } from "../funcs/resourcesSetResourceScopedRolePermissions.js"; import { resourcesSetResourceVisibility } from "../funcs/resourcesSetResourceVisibility.js"; import { resourcesUpdateResources } from "../funcs/resourcesUpdateResources.js"; import { resourcesUpdateResourceUser } from "../funcs/resourcesUpdateResourceUser.js"; @@ -29,6 +31,7 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Resources extends ClientSDK { /** @@ -37,8 +40,10 @@ export class Resources extends ClientSDK { async getResources( request: operations.GetResourcesRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(resourcesGetResources( + ): Promise< + PageIterator + > { + return unwrapResultIterator(resourcesGetResources( this, request, options, @@ -354,4 +359,32 @@ export class Resources extends ClientSDK { options, )); } + + /** + * Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. + */ + async getResourceScopedRolePermissions( + request: operations.GetResourceScopedRolePermissionsRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(resourcesGetResourceScopedRolePermissions( + this, + request, + options, + )); + } + + /** + * Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. + */ + async setResourceScopedRolePermissions( + request: operations.SetResourceScopedRolePermissionsRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(resourcesSetResourceScopedRolePermissions( + this, + request, + options, + )); + } } diff --git a/src/sdk/scopedrolepermissions.ts b/src/sdk/scopedrolepermissions.ts new file mode 100644 index 0000000..952251e --- /dev/null +++ b/src/sdk/scopedrolepermissions.ts @@ -0,0 +1,40 @@ +/* + * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. + */ + +import { resourcesGetResourceScopedRolePermissions } from "../funcs/resourcesGetResourceScopedRolePermissions.js"; +import { resourcesSetResourceScopedRolePermissions } from "../funcs/resourcesSetResourceScopedRolePermissions.js"; +import { ClientSDK, RequestOptions } from "../lib/sdks.js"; +import * as components from "../models/components/index.js"; +import * as operations from "../models/operations/index.js"; +import { unwrapAsync } from "../types/fp.js"; + +export class ScopedRolePermissions extends ClientSDK { + /** + * Returns all the scoped role permissions that apply to the given resource. Only OPAL_SCOPED_ROLE resource type supports this field. + */ + async getResourceScopedRolePermissions( + request: operations.GetResourceScopedRolePermissionsRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(resourcesGetResourceScopedRolePermissions( + this, + request, + options, + )); + } + + /** + * Sets all the scoped role permissions on an OPAL_SCOPED_ROLE resource. + */ + async setResourceScopedRolePermissions( + request: operations.SetResourceScopedRolePermissionsRequest, + options?: RequestOptions, + ): Promise { + return unwrapAsync(resourcesSetResourceScopedRolePermissions( + this, + request, + options, + )); + } +} diff --git a/src/sdk/sdk.ts b/src/sdk/sdk.ts index ae4582a..c38332a 100644 --- a/src/sdk/sdk.ts +++ b/src/sdk/sdk.ts @@ -17,6 +17,7 @@ import { OnCallSchedules } from "./oncallschedules.js"; import { Owners } from "./owners.js"; import { Requests } from "./requests.js"; import { Resources } from "./resources.js"; +import { ScopedRolePermissions } from "./scopedrolepermissions.js"; import { Sessions } from "./sessions.js"; import { Tags } from "./tags.js"; import { Uars } from "./uars.js"; @@ -80,6 +81,13 @@ export class OpalMcp extends ClientSDK { return (this._nonHumanIdentities ??= new NonHumanIdentities(this._options)); } + private _scopedRolePermissions?: ScopedRolePermissions; + get scopedRolePermissions(): ScopedRolePermissions { + return (this._scopedRolePermissions ??= new ScopedRolePermissions( + this._options, + )); + } + private _sessions?: Sessions; get sessions(): Sessions { return (this._sessions ??= new Sessions(this._options)); diff --git a/src/sdk/tags.ts b/src/sdk/tags.ts index a463c1e..b69fbea 100644 --- a/src/sdk/tags.ts +++ b/src/sdk/tags.ts @@ -17,6 +17,7 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Tags extends ClientSDK { /** @@ -81,8 +82,8 @@ export class Tags extends ClientSDK { async getTags( request: operations.GetTagsRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(tagsGetTags( + ): Promise> { + return unwrapResultIterator(tagsGetTags( this, request, options, diff --git a/src/sdk/uars.ts b/src/sdk/uars.ts index 9638d45..80fccf1 100644 --- a/src/sdk/uars.ts +++ b/src/sdk/uars.ts @@ -9,6 +9,7 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Uars extends ClientSDK { /** @@ -17,8 +18,8 @@ export class Uars extends ClientSDK { async getUARs( request: operations.GetUARsRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(uarsGetUARs( + ): Promise> { + return unwrapResultIterator(uarsGetUARs( this, request, options, diff --git a/src/sdk/users.ts b/src/sdk/users.ts index 1306f0d..3c2a5fe 100644 --- a/src/sdk/users.ts +++ b/src/sdk/users.ts @@ -9,6 +9,7 @@ import { ClientSDK, RequestOptions } from "../lib/sdks.js"; import * as components from "../models/components/index.js"; import * as operations from "../models/operations/index.js"; import { unwrapAsync } from "../types/fp.js"; +import { PageIterator, unwrapResultIterator } from "../types/operations.js"; export class Users extends ClientSDK { /** @@ -43,8 +44,8 @@ export class Users extends ClientSDK { async getUsers( request: operations.GetUsersRequest, options?: RequestOptions, - ): Promise { - return unwrapAsync(usersGetUsers( + ): Promise> { + return unwrapResultIterator(usersGetUsers( this, request, options, diff --git a/src/types/constdatetime.ts b/src/types/constdatetime.ts index c0a4409..eeff4dd 100644 --- a/src/types/constdatetime.ts +++ b/src/types/constdatetime.ts @@ -11,5 +11,5 @@ export function constDateTime( return ( typeof v === "string" && new Date(v).getTime() === new Date(val).getTime() ); - }, `Value must be equivelant to ${val}`); + }, `Value must be equivalent to ${val}`); } diff --git a/tsconfig.json b/tsconfig.json index 94d81a3..3955fbc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -36,6 +36,6 @@ "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, - "include": ["src"], - "exclude": ["node_modules"] + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"] }